Why a Render Pipeline Needs Caching at All
Stages are expensive — synthesis costs money per character, image generation costs money per image, encodes cost minutes. A person reviewing output changes one thing and re-runs, repeatedly. Without caching, every small correction pays for the entire pipeline, and review becomes expensive enough that people stop doing it. So caching here is not a performance optimization; it is what makes the quality process affordable.
Which means a wrong cache does not merely slow things down. It silently defeats the review it was built to enable.
Naming Instead of Judging
The naive cache stores an artifact at a fixed path and asks whether what is there is still good. That question has no reliable answer — timestamps lie under checkouts, and "did any input change?" is exactly the bookkeeping you were hoping to avoid.
The version that works derives the path from a digest of everything that can affect the output. Edit a scene and the address changes, so the previous artifact still exists but at a location nobody asks for. Staleness becomes structurally impossible rather than carefully avoided: the correct artifact is either present or absent, and there is no third state where something plausible-but-wrong sits at the right address.
Note that the key must include everything that changes the output. A plate depends on its scene definition. A clip depends on its scene and how long it is held on the timeline — the same picture for four seconds and for nine seconds are two different artifacts, and a key that omits duration will happily serve one for the other.
The Failure That Actually Happened
The pilot shipped an image three hours out of date into a finished render. The cause was not the absence of content-keying — it had been implemented. The cause was a hole in the key: something that could change the pixels was not part of the digest, so an edit produced the same address and the cache correctly returned what was stored there.
This is the characteristic failure of the whole approach, and it is worth naming precisely. Once you have content-keyed a cache, you stop thinking about staleness, because you have solved staleness. The remaining bug does not look like a cache bug — it looks like an edit that did not take effect, which sends you looking at your edit rather than at the key.