# M11-05 Status status: done task: Server-only routing for Cycles, complex Eevee and hardware render backends updated: 2026-08-17 America/New_York ## Scope Schema 1 `RenderRoutingRequestIR` separates execution target from endpoint availability. Only bounded Eevee on WebGL2, or WebGPU after both browser and bundled renderer capability checks, may return `WEB_LOCAL_BOUNDED/READY`. Cycles, complex Eevee, Workbench final rendering and CUDA/OptiX/HIP/Metal/oneAPI requests always target `SERVER_JOB`; the default unconfigured endpoint returns `SERVER_JOB_UNAVAILABLE` without a local approximation. Unknown, syntactically valid SceneIR engine identities fail closed as `PLATFORM_CAPABILITY_UNAVAILABLE`. Setting `serverRenderAvailable:true` can make a server route `READY`, but only proves the routing decision. It does not submit a job or claim the source/build/settings/ output hash contract reserved for M11-06. ## Evidence - `WEB_TEST_PORT=5556 npm --prefix web run test:render-routing`: unit 3/3 and Chromium 1/1. The browser reads `BLENDER_EEVEE` from the real M11 reference `.blend` through the production WebEngine Worker before checking the local/server matrix. - Cycles, complex Eevee and OptiX all remained `SERVER_JOB/BLOCKED` with `SERVER_JOB_UNAVAILABLE` under the production default. A synthetic configured server context returned `SERVER_JOB/READY`, never a Web target. - Unbundled WebGPU remained `WEB_LOCAL_BOUNDED/BLOCKED` with `WEBGPU_RENDERER_UNAVAILABLE`; an unknown engine remained server-targeted and blocked with `PLATFORM_CAPABILITY_UNAVAILABLE`. - Typecheck, lint, production build (75 modules) and `git diff --check` passed. ## Implementation Hashes - `web/protocol/render-routing.ts`: `2d41d48609635c810572aaae95979df2fe9e49bbd130c60d70f64042c5d0f097` - `web/app/src/three-adapter/render-routing.ts`: `f360c05fa62aa830a486c5be4747488fcbb5ba9b68d82b4f7187e1267da46fa6` - `web/tests/unit/render-routing.test.mjs`: `4ac2e7a6c2265f948d971f72effb4ff9ad1c51839ab6c06d496fc2b0768c4fa8` - `web/tests/e2e/render-routing.spec.ts`: `e5572d9ad9426f1dcc1856fe426261910093fa2f5460117e4ffdcfc7b23b10a1` - `tests/golden/M11-05/render-routing.json`: `53c5d3a2e51f251d14953594567081597be4250be5b1236832370e74805bd35d` - `web/package.json`: `716a5331990618892bca97f48c7eef589a5af6c5131b8cf3ae52a1b9d923644c` ## Rollback Remove the M11-05 routing protocol/wrapper, unit/E2E/golden/package command, restore M11 to 4/14 and remove the N-019 server-routing completed slice. Keep M11-04 realtime reference metrics and all earlier lighting/resource behavior unchanged.