# M03-RND-WMO-RUNTIME-SCENE-PREPARER-001 ## Owner - Agent ID: `sindo-main-codex` - Target: M03 Renderer Facade and Safe Extraction - Branch: `work/sindo-main-codex/m03-wmo-runtime-scene-preparer` - Worktree: `C:\Users\sindo\open-wc-worktrees\m03-wmo-runtime-scene-preparer` ## Outcome Move cached/live WMO subtree preparation—recursive Mesh finalization, direct Occluders-child policy and recursive shadow enabling—from the loader into one stateless main-thread service. ## Non-goals - Change scene/prototype loading, validation, placement or attachment. - Change WMO material refresh rules, cache versions or builder behavior. - Change occlusion/shadow defaults or add visibility/portal behavior. - Change queue, scheduler, ownership or shutdown lifecycle. ## Paths - Exclusive: `src/render/wmo/wmo_runtime_scene_preparer.gd`, `src/tools/verify_wmo_runtime_scene_preparer.gd`, `docs/modules/wmo-runtime-scene-preparer.md`, this claim - Shared: loader, renderer module registry/specification, `RENDER.md`, M03 Evidence ## Contracts and data - Cached preparation finalizes every MeshInstance3D Mesh and non-null MultiMeshInstance3D Mesh in depth-first traversal order. - Live preparation does not cross the runtime Mesh finalizer boundary. - Disabled occlusion removes only the direct child named `Occluders` and queues it for deletion; enabled occlusion retains it. - Enabled shadows recursively set every GeometryInstance3D to ON; disabled shadows preserve existing per-node values. - The service borrows the subtree and retains no Node or Resource. ## Dependencies - Requires: accepted WMO runtime Mesh finalizer - Blocks: remaining loader-owned WMO scene/prototype orchestration cleanup ## Verification - Synthetic cached/live traversal, exact resource/order, occluder, shadow, invalid-input, ownership, source and bounded-timing contracts; adjacent WMO, renderer, documentation and coordination gates; checkpoint dry-run. ## Documentation deliverables - Inline API docs; module API/I/O/ownership; data-flow/sequence/dependency diagrams; adjacent renderer docs and M03 Evidence. ## Status - State: ready - Done: implementation, verification and documentation - Next: integrator review and merge - Blocked by: ## Handoff - Commit: `ffed91c` (`render: extract WMO runtime scene preparer`) - Results: preparer PASS `cases=31 iterations=1000 elapsed_ms=3.669`; updated Mesh-finalizer boundary PASS `cases=28 iterations=1000 elapsed_ms=0.204`; headless suite `64/65` with no unexpected failures and only the proprietary ADT placement probe unavailable without `data/extracted`; editor parse had zero script diagnostics; checkpoint dry-run retained `7/7`; documentation passed with `51` module specifications; coordination passed with `77` historical expired-claim warnings. - Fidelity: cached/live preparation distinction, exact Mesh traversal order, direct `Occluders` lookup/removal and enabled/preserved shadow semantics are unchanged. No private-asset or original-client parity claim is added. - Remaining risks: recursive Resource/SceneTree mutation remains synchronous; no asset-backed WMO portal/room, visual, leak/GPU or p95/p99 evidence. - Documentation: new full module specification with API/I/O and data-flow, sequence/dependency diagrams; Mesh-finalizer ownership spec, renderer registry, world-renderer source map and `RENDER.md` updated. - Merge: `57d0a9f` (`merge: WMO runtime scene preparer`) - Post-merge: preparer PASS `cases=31 iterations=1000 elapsed_ms=3.486`; Mesh finalizer `cases=28`/`0.199ms`; all nine adjacent WMO services, shutdown, materials, facade, internal-access `30`, manifest `7/7`, documentation `51` and coordination passed.