vault

Tag backfill

Keyword and group tags apply the instant you save them — they're pure matching. AI tags are different: the on-device model has to read each transaction to decide. Doing that for your whole history is backfill.

Why backfill exists

When you add an AI tag like gym : is this a gym or fitness studio?, new transactions get classified as they're indexed. But every transaction from before you added the rule — potentially years of history — hasn't been looked at yet. Classifying them one model call at a time would be far too slow to do while you wait for an answer, so millfolio fills them in ahead of time and caches the result. Until it does, that tag isn't offered to the query model, so a half-computed gym filter can never quietly report "$0 on the gym".

How it runs

Backfill happens two ways, and you don't have to think about either:

  • Automatically, in the background. A worker chips away between your questions, classifying a slice at a time so it never blocks the app. Over normal use, your history fills in on its own.
  • On demand. The Operations view has a "Backfill now" button that drains the whole queue immediately, with a live progress bar so you can watch it complete.

Everything is classified by the local model. As with every other part of the vault, none of the transactions — and none of the yes/no verdicts — leave your Mac.

It only does new work

Backfill is backed by a ledger that remembers what's already been classified, per rule. That's what makes re-running cheap: it doesn't re-examine transactions it has already decided on, so the only work a re-run does is genuinely new. In practice, work only appears when:

  • you add a new AI rule — its questions run against your history once; or
  • you index a new statement — only the newly added transactions are classified, even for a back-dated statement you import months later.

A transaction the model decides is not a gym is recorded as such and never re-asked. So the second time you open "Backfill now" after nothing has changed, there's simply nothing to do.

What you'll see: a per-rule progress bar and a ready/pending badge in the Tags panel. A tag reads pending while its history is still being filled in and ready once it's complete — at which point category questions using it are exact.