"Done according to what? A flag that can't answer that question is a bug waiting for an input to change."
The One-Bit Lie
Almost every pipeline grows a processed = true flag. It's the obvious way to avoid redoing work: mark each item done, skip the done ones next time. And it's fine — until an input changes. Then the flag becomes a quiet lie. The item is marked done, but done relative to what? The source file that has since been re-exported? The audio settings you've since changed? The model config you've since upgraded? A single boolean can't say. It collapses a dozen distinct questions into one bit, and when any of the underlying inputs move, the bit still reads true and the genuinely-changed work is silently skipped.
This is the same trap as a stale cache. A cache entry says 'I have the answer' — but the answer was computed for a specific input, and if the input changed, the cached answer is wrong while still looking authoritative. A done flag is exactly a cache with no key: it remembers that work happened but not what it was done against. Cache invalidation is famously one of the hard problems in computing, and a naked done-flag walks straight into it.
'Already Done' Only Means Something Relative to an Identity
The fix is to stop asking 'is this done?' and start asking 'is this done for this exact identity?' Instead of a boolean on the video, Recall records what was done against precisely-defined identities: this source content, this audio configuration, this provider configuration, this release. Now 'already done' is a real question with a checkable answer: hash the current inputs, look for a record under that exact identity. Found it? Genuinely done, skip safely. Not found? Something changed, do the work. The skip is now correct because it's tied to what the work actually depended on.
The difference is the difference between 'I did something to this video once' and 'I produced this exact output from these exact inputs.' Only the second one is safe to skip on, because only the second one goes false the instant an input changes. The rest of this track is about choosing those identities well — one for each kind of change you need to notice.
Why This Matters More as Systems Grow
On a toy project, a done-flag mostly works, because inputs rarely change under you. On a real archive that gets re-scanned, re-exported, re-configured, and re-run over months, inputs change constantly — and every one of those changes is a chance for a naked done-flag to skip work that needed redoing. The bug doesn't announce itself; it shows up as 'why is this video's transcript from the old model?' long after the cause. Layered identity is the cost you pay up front to never debug that class of silent staleness later. Precision now, or mystery skips forever.