# M11-06 Status status: done task: server render job provenance binding updated: 2026-08-17 America/New_York ## Scope `web/protocol/server-render-job.ts` defines schema 1 for a server render request and result. A request is accepted only when the uploaded `.blend` bytes match its declared source SHA-256 and byte length, the Blender build is a declared 5.2 build with a content hash, and canonical bounded render settings match `settingsSha256`. The request itself is bound by `requestSha256`. A successful result carries the same source/revision/build/settings identity and adds output MIME, byte length, and output SHA-256, plus `resultSha256`. Consumers recalculate the output hash before accepting pixels. The contract does not claim a remote queue, progress, cancellation, denoise, or Freestyle implementation; those remain later M11 tasks. ## Evidence - `npm --prefix web run test:server-render-job`: unit 3/3 and a real loopback server check passed. - The check used Blender 5.2.0 headless to open `tests/files/web/m11_render_reference.blend` and render a PNG from the submitted source bytes. It verified source/build/settings/output hashes and rejected source, build, settings, and output tampering. - Result: `server-render-job-ok blender=5.2.0 source=d2bea55fe4de0b00e73a9241b4d1b0c802c2eb0e6159c0cd48e007b97b9d3963 settings=97bb832618bd27e8763722afa0d250ef74383fb355f0ff38763930f57ba1590b output=564b95cd501da2636085aeada88814c4a3b7af7b1f0188543a1863fe34dd091e bytes=3915 source-hash=1 build-hash=1 settings-hash=1 output-hash=1 tamper=4`. - Full regression passed: typecheck, lint, Node `168/168`, status consistency (`12` parity blocked, `0` release blocked), release evidence (`17` records, `0` missing), production build (`75` modules), and `git diff --check`. ## Implementation Hashes - `web/protocol/server-render-job.ts`: `e2b5b95032b0dbcb346aa35d1a10a3b55d6c006603f16b9e72c3de45763906c5` - `web/protocol/error.ts`: `747ea52fd96b3ec7ede9ce72c15f56fdc454836ba5bf924cc60198096d4986de` - `web/tests/unit/server-render-job.test.mjs`: `c84f86365006360f146601839d7e1394f3f7bc7fa71dcbf62d8d4e4321cdd16d` - `tools/web/check-server-render-job.mjs`: `6dd49fbd1be202a88fa714b2fb81305018da6df5f9d73c95e048e3697742764e` - `tools/web/render-server-job.py`: `48950b0884a52a40ae234f8bbe590a0cb89e58c4d2a2de40ea638f491d111aff` - `tests/golden/M11-06/server-render-job.json`: `36f083f8da7585f850e748e6ac78fc57cd6e8d59bce03d77eee3acd2fa042ae7` - `web/package.json`: `628191a76c7614393a74969bd000faa8a6302d887265d13a1ad49dcfc401c2fc` ## Rollback Remove the server-render-job protocol, error codes, unit/check commands, and this status record; restore M11 to 5/14 and remove the M11-06 completed slice. Keep M11-05 routing, M11-04 reference metrics, and all earlier lighting/resource behavior unchanged.