One loop, nine events
Story rewrites scene 4 at pre-production. Nine events later the round can close, and nobody wrote the order down.
- 1 artifact.committed Story accepts a rewrite of scene 4. The script lock moves to v5. Story sleeps.
- 2 dept.woke ×3 Camera · Look & Cast · Sound all three subscribe to the script. Each wakes independently, in parallel, as a critic. Nothing else stops.
- 3 assemble Camera pulls the diff v4 → v5, the shots that cite scene 4, the bible entries those shots cite, the last ruling on this scene. Not the whole script; not the whole log.
- 4 flag.raised Camera the rewrite moved the confrontation outdoors; shot 22’s lens and light no longer make sense. Severity revise. Target: script. Against: shot_list@v3.
- 5 offer.made Sound no objection — but the new version ends on a silence. Offers a cue that drops the score two bars early. Text only.
- 6 ruling.issued Director subscribed to every FLAG. Rules modify: keep the rewrite; Camera re-specs shot 22. Touches neither artifact.
- 7 artifact.committed Camera a new shot 22. shot_list → v4. Camera records seen: script@v5. The flag resolves.
- 8 dept.woke · no-op Unit + Edit subscribes to the shot list, wakes, sees nothing is locked for render yet, records that it saw v4, sleeps. A wake that does nothing still leaves a trace.
- 9 gate check Producer no open flags; every subscriber’s seen versions match the lock table. Sound’s offer is still pending, so it goes on the call sheet. The round can close.
This is the design’s worked example, adjusted to the seven-department build. It is the whole system in one loop.
What is sync and what is not
Inside one wake the five roles run in order, sharing context: the generator sees what the assembler bundled; the critic sees the generator’s output; the resolver sees both. Between departments there is no shared call stack at all. Camera, Look & Cast and Sound wake on the same commit in parallel, and the one that takes four minutes to reason does not block the one that takes four seconds. In the design, a render is a long-lived activity with a heartbeat, so a twenty-minute job is just an event that has not arrived yet; in the prototype, there are no renders, and every wake is a chain of fetches.
What the assembler left out
Camera’s bundle at step 3 is the diff from v4 to v5, the shots that cite scene 4, the bible entries those shots cite, and the last ruling on this scene. It is not the whole script and not the whole log. The bundle is on the wake event, so if Camera’s flag is wrong, the first thing to check is what Camera was looking at.
What the Director did not do
At step 6 the Director ruled and touched neither artifact. Had it rewritten shot 22 itself, Camera would have been the owner of an artifact it did not write, and the next time Camera woke it would have had to reconcile its own work with somebody else’s edit. Rulings only. The owner revises.
What the no-op wake is for
Step 8 looks like waste: Unit + Edit wakes, finds nothing to do, and sleeps. But it records that it saw shot list v4, and that record is a cell in the convergence table. Without it the Producer at step 9 could not say that every subscriber has evaluated the current version of every lock. A wake that does nothing still leaves a trace, because the trace is what convergence is made of.
Where the offer went
Sound’s offer at step 5 did not block anything. It is pending on the call sheet, and the round closes with it there. If you try it, Sound is woken with the offer as its instruction and the audio timeline moves to a new version, which makes Story and Camera stale on it, which wakes them to re-read. If you pass, the dailies record it as offered and not taken. Either way, it is on the record.