3.2 KiB
M11-12 Status
status: done task: keep final video encoding on an explicit server-export capability route updated: 2026-08-17 America/New_York
Scope
Schema 1 final-export requests bind the Main timeline ID/revision, source .blend
SHA-256, bounded frame range and rational frame rate, output dimensions, and one declared
container/video/audio codec combination. The canonical encoding settings and the complete
source identity receive separate SHA-256 hashes, so source revision drift and settings
drift produce different request identities.
The only route is SERVER_EXPORT. A missing endpoint fails closed with
SEQUENCER_EXPORT_SERVER_UNAVAILABLE; a configured endpoint returns
SERVER_EXPORT_REQUIRED, not local success. Browser VideoEncoder availability is
recorded for diagnostics only and cannot change the route or the invariant
localEncoding=BLOCKED. This task does not claim a server encoder implementation,
upload/progress/cancellation, audio mixing, or encoded-output verification.
Evidence
WEB_TEST_PORT=5579 npm --prefix web run test:sequencer-final-export: unit 4/4 and Chromium 1/1 passed on the first complete run.- Chromium opened the real Blender 5.2
sequencer_scene.blendthrough WebEngine Main and bound timelinesequencer:scene:SequencerScene, revision 1, frames 1..250, 24000/1001 FPS, and source SHA-2565f5212487bb6b5df62b5ca915c75133f1ca45678614712ea4c7d902d823cd90c. - The fixed settings hash is
01e39d1fdd88c75aecad7bc48a2b756bbcd645929963528b42ceb180b51e5566; the source/timeline/settings request hash is20d3a9e333804e014a993a9892a557842293fc44902229dd6eb65661f0691cfc. - No-server, server-without-encoder, server-with-injected-encoder, and actual Chromium
runtime cases all retained the server route and blocked local encoding. Undeclared
fields, invalid codec combinations, over-budget ranges, and environment drift returned
SEQUENCER_EXPORT_REQUEST_INVALID. - Regression passed: M11-09 unit 3/3 plus Chromium 1/1, M11-10 unit 3/3 plus Chromium 1/1, M11-11 unit 4/4 plus Chromium 1/1, one-million-frame long-media 1/1, Sequencer Main reader, full Node 187/187, typecheck, lint, and production build (75 modules).
Artifact Hashes
- protocol:
559516163ce9a9c60917033455c71a1ae6be2f34666371f12723a056ddfdb3dd - browser adapter:
f9f193eb71afa48a23b4eb618cd98b5c0064c59943b3652fb6a601b545ac175c - app protocol exports:
d30783528fabaaefe8835998e11d75da357d265ee06db67713e57e4b85b58d7d - error contract:
747894b216db59c753b24ce85eb946925e64340f63684311e5d9628c9a6a9c8e - unit:
6f5030852e89160fd898b2aff4dc9911963342bd6c2301a2c0e8a3d518ddbcbd - Chromium spec:
d8cba79c9a330c1e5c777c8f0ed08362b29f50702c31d8229fd65f4304bce363 - golden:
c0061f82ef156e53ad4dfc6aedf7c6a8f53e616d8d9fa1435fd9491ba3d07e01 - package:
83ee5bfa50a0e5b742048d4563ae815171232a121cf3df4a1e813f21313a6509
Rollback
Remove the final-export protocol/browser adapter/tests/golden and package command, remove
the two export error codes and SequencerTimeline exports, restore M11 to 11/14, and remove
the N-021 final-export completed slice. Keep M11-09/10/11 decode, proxy, and revision
gates and the existing sequencerRuntimeCapabilities().localEncoding=BLOCKED contract.