# M03-RND-WMO-RENDER-BUILD-PLANNER-001 — WMO render build step planner

<!-- OPENWC_CLAIM:M03-RND-WMO-RENDER-BUILD-PLANNER-001:sindo-main-codex:2026-07-20 -->

## Ownership

- Target: M03
- Program: RND
- Owner/Agent ID: sindo-main-codex
- Branch: `work/sindo-main-codex/m03-wmo-render-build-planner`
- Lease expires UTC: 2026-07-20
- Integrator: M03 milestone integrator

## Outcome

Extract the pure one-operation WMO render build cursor decision from the loader
while preserving mesh-before-MultiMesh ordering and one budget permit per group.

## Non-goals

- Move Nodes, Resources, materials, jobs, queues, cancellation or permits.
- Change WMO placement, cache loading, transforms, visibility or shadows.
- Change build ordering, group names, editor ownership or finalization thread.
- Change cache formats, settings, presets or renderer diagnostics.
- Claim asset-backed WMO fidelity or p95/p99 acceptance.

## Paths

- Exclusive: `src/render/wmo/wmo_render_build_step_planner.gd`,
  `src/tools/verify_wmo_render_build_step_planner.gd`,
  `docs/modules/wmo-render-build-step-planner.md`, this claim
- Shared/hotspots: `src/scenes/streaming/streaming_world_loader.gd`,
  `docs/modules/world-renderer.md`, `docs/modules/README.md`, `RENDER.md`,
  `targets/03-renderer-facade.md`
- Generated/ignored: `.godot`, native DLL, generated ADT/WMO resources, caches
  and proprietary renderer corpus

## Contracts and data

- Input: mesh count/index and MultiMesh count/index
- Output: `mesh`, `multimesh` or `complete` operation, selected index and next
  cursor values
- Mesh is selected while its cursor is below count; MultiMesh is selected only
  after mesh exhaustion; complete follows both exhausted ranges
- Loader retains cursor adoption, Resource array access, Node creation, material
  refresh, ownership, queue cancellation and budget permit consumption
- Cache/schema/coordinate/profile versions: unchanged

## Dependencies

- Requires: current master `1e73e59`, accepted WMO placement registry/resolver
- Blocks: further WMO render build state decomposition
- External state: none; verification uses scalar synthetic fixtures

## Verification

- Commands: dedicated ordering/cursor/empty/raw-edge/source/timing verifier;
  WMO registry/resolver/material/shutdown plus M2/terrain/facade/internal-access/
  manifest/scheduler/streaming/coordinate/docs/coord gates
- Fidelity evidence: exact mesh-first, one-step cursor behavior preserved
- Performance budget: 20,000 pure plans under 1 second; no Node, Resource, RID,
  task, queue, mutex, cache or file access

## Documentation deliverables

- Inline public planner API documentation
- New module spec with inputs/outputs, data flow, sequence, ownership,
  failure/recovery, performance/fidelity limits and source map
- Renderer module registry, world renderer and `RENDER.md` updates

## Simplicity and naming

- Important name: `WmoRenderBuildStepPlanner`
- Simplest solution: one stateless function and three operation constants
- Rejected complexity: job class, iterator, generic cursor framework, callbacks,
  signals or ownership of engine objects
- Unavoidable complexity: loader still has separate mesh/MultiMesh materializers
- Measured optimization evidence: bounded synthetic planning loop

## Status

- State: accepted
- Done: planner and loader adapter implemented; Node/Resource/material/job/queue/
  permit ownership retained in loader; regressions, dry-run and docs passed
- Next: WMO build job/resource ownership or liquid service extraction
- Blocked by:

<!-- OPENWC_INTEGRATION:ACCEPTED:M03-RND-WMO-RENDER-BUILD-PLANNER-001:c06aed5 -->

## Handoff

- Commit: `3a6b1d3`
- Results: dedicated planner PASS (`cases=9`, `iterations=20000`,
  `elapsed_ms=11.914`); WMO registry/resolver/material/shutdown and 18 adjacent
  M2/terrain/facade/scheduler/streaming/coordinate regressions PASS;
  documentation and coordination gates PASS; checkpoint dry-run PASS `7/7`.
- Remaining risks: no proprietary WMO corpus, original-client paired capture or
  traversal p95/p99; dry-run reports expected missing ADT/DBC/character assets;
  WMO Resource arrays and untyped build jobs/queues remain loader-owned.
- Documentation updated: inline planner API;
  `docs/modules/wmo-render-build-step-planner.md`, module registry,
  `docs/modules/world-renderer.md`, `RENDER.md` with data-flow and sequence
  diagrams, ownership, failure/recovery and source map.
- Integration: accepted in master merge `c06aed5`; post-merge planner
  (`cases=9`, `iterations=20000`, `elapsed_ms=11.059`), WMO registry/resolver,
  runtime-cache shutdown, facade, documentation and coordination gates passed.

<!-- OPENWC_HANDOFF:READY:M03-RND-WMO-RENDER-BUILD-PLANNER-001:3a6b1d3 -->
