# M11-11 Status status: done task: revision-gate late seek, scrub, and decode results before publication updated: 2026-08-17 America/New_York ## Scope Schema 1 uses one request identity for SEEK, SCRUB, and DECODE. Every request binds a timeline ID, timeline revision, monotonically increasing request revision, operation, and frame. A completed result must echo that identity and add a bounded source frame and payload SHA-256. Publication is allowed only when both the timeline revision and latest request revision still match the controller state. The production controller advances one shared request revision across all three operation types. Replacing a timeline invalidates every pending request before a new request begins, and same-timeline revisions must advance monotonically. The publish callback is invoked only after the pure gate returns PUBLISH, so stale results cannot update the visible frame or write a decoded payload into cache. This task does not claim frame-accurate WebCodecs seeking or the M11-14 cancellation/restart resource lifecycle. ## Evidence - `WEB_TEST_PORT=5576 npm --prefix web run test:sequencer-media-revision`: unit 4/4 and Chromium 1/1 passed on the first complete run. - Chromium scheduled SEEK revision 1 behind SCRUB revision 2. SCRUB published first and the late SEEK returned `STALE/REVISION_CONFLICT`. A real H.264 runtime decode started at timeline revision 7, completed after replacement with revision 8, and was rejected before publish/cache. The revision-8 DECODE published; a forged result identity stayed stale. - The machine sequence is frozen in `tests/golden/M11-11/sequencer-media-revision.json`: only `SCRUB@2` and `DECODE@5` publish, and only `DECODE@5` reaches the cache-write callback. - Regression passed: M11-10 unit 3/3 plus Chromium 1/1, M11-09 unit 3/3 plus Chromium 1/1, one-million-frame long-media 1/1, full Node 183/183, typecheck, lint, and production build (75 modules). ## Artifact Hashes - protocol: `326f1525f50af3b2c4132ff58508ed6174ba3aa4a5075b2a6660e549c280826a` - production controller: `29a44404bb28e46d67439eec0622a69ce4cd7264ce45da77a3f320c8687b7006` - app protocol exports: `be2eca8482a60e437878b99f69d3178f47fee61618886d141760320e3a3ed1e1` - unit: `2099f738120897dfbb8662741831774b5f9150d51924dfa7832907177de5e7` - Chromium spec: `e47f105360ce0e2d4d561d3cf790ceec9f41dd6bac7361965914ada307db843c` - golden: `672b4fde6e27f8b15cd51d839cacb5efb128c0d0f4c7f6aa4e184c713f9b45e5` - package: `5d17b17d67ee587191552c3dfe226cd8f2e5a872791224d8e6c22aafa1177ebe` ## Rollback Remove the media revision protocol/controller/tests/golden and package command, restore M11 to 10/14, and remove the N-021 revision-gate slice. Keep M11-09 runtime probes, M11-10 proxy-cache identity, and the V1 long-media generation behavior unchanged.