53 lines
2.8 KiB
Markdown
53 lines
2.8 KiB
Markdown
# 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.
|