"Ashen Reel may read projections. Future writes are typed Recall intents; never a parallel local transcript or marker database."
The Cache That Becomes a Second Truth
Ashen Reel shows a transcript rail beside the video — the spoken words of the current Recall release, highlighting the line at the playback position. The obvious optimization is to cache those transcripts locally: faster to load, works if Recall is slow, feels snappy. And it's a trap. The moment you persist a copy of the transcript, you have two owners of the same truth, and the day someone corrects a line in Recall, your cached copy is quietly, confidently wrong.
So Ashen Reel doesn't. It projects the transcript: it fetches the segments into session memory, uses them while the window is open, and keeps nothing. There is no transcripts table in Ashen Reel's database — on purpose. Next launch re-fetches from Recall; Recall stays the one and only owner.
The projection is a read model, deliberately amnesiac:
Corrections Get a New Identity, Not a Merge
Here's the elegant part. When a transcript is corrected in Recall, that isn't an edit to an existing thing — it's a new release with its own identity. Ashen Reel doesn't diff the old transcript against the new one and merge; it just fetches the new release id and shows it. A correction upstream becomes a fresh projection downstream, automatically. You never wrote reconciliation logic because the identity of a corrected release did the reconciling for you.