4.5 KiB
4.5 KiB
M03-RND-WMO-PLACEMENT-REGISTRY-001 — WMO placement registry
Ownership
- Target: M03
- Program: RND
- Owner/Agent ID: sindo-main-codex
- Branch:
work/sindo-main-codex/m03-wmo-placement-registry - Lease expires UTC: 2026-07-20
- Integrator: M03 milestone integrator
Outcome
Extract WMO placement-key to tile-reference ownership from the loader while leaving every Node and renderer-resource lifecycle in the loader.
Non-goals
- Change placement identity rules or WMO transforms.
- Move Node maps, world roots, tile state, jobs, queues or cancellation.
- Move cache/load requests, material refresh or render-group building.
- Change duplicate ordering, global-WMO lifetime or build budgets.
- Claim asset-backed WMO fidelity or performance acceptance.
Paths
- Exclusive:
src/render/wmo/wmo_placement_registry.gd,src/tools/verify_wmo_placement_registry.gd,docs/modules/wmo-placement-registry.md, this claim - Shared/hotspots:
src/scenes/streaming/streaming_world_loader.gd,docs/modules/wmo-placement-resolver.md,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: resolved WMO placement key and tile/global reference key
add_referencecreates a key/ref set or idempotently retains an existing refrelease_referenceerases only the supplied ref and returns true only when the final ref removes the placement keycontains,active_count, detached sorted diagnostics and idempotentclear- Loader retains key→Node mapping and reacts to final release by cancelling the render build and queue-freeing the corresponding Node
- Cache/schema/coordinate/profile versions: unchanged
Dependencies
- Requires: current master
5aa40d6,WmoPlacementResolveridentity contract - Blocks: WMO build/resource state decomposition
- External state: none; tests use synthetic placement/tile keys
Verification
- Commands: dedicated add/shared/idempotent/non-owner/final/global/clear/ diagnostics/source/timing verifier; resolver/material/shutdown plus M2/terrain/ facade/internal-access/manifest/scheduler/streaming/coordinate/docs/coord gates
- Fidelity evidence: exact shared-ref and final-release behavior preserved
- Performance budget: dictionary membership over active WMO keys/refs; no Node, Resource, RID, task, queue, mutex, cache or file access
Documentation deliverables
- Inline registry API documentation
- New module spec with inputs/outputs, data-flow, lifecycle/state, ownership, failure/recovery, performance, fidelity limitations and source map
- Placement resolver, renderer/module registry and
RENDER.mdupdates
Simplicity and naming
- Important name:
WmoPlacementRegistry - Simplest solution: one private key-to-reference-set Dictionary
- Rejected complexity: generic ref-count registry, signals, callbacks, Resources, weak refs or Node ownership inside the service
- Unavoidable complexity: loader keeps a parallel key-to-Node map
- Measured optimization evidence: bounded synthetic add/release loop
Status
- State: accepted
- Done: registry extracted; global/tile adapters migrated; Node/resource/job ownership retained in loader; contract, regressions, dry-run and docs passed
- Next: WMO build/resource state extraction and asset-backed placement evidence
- Blocked by:
Handoff
- Commit:
c590036 - Results:
verify_wmo_placement_registry.gdPASS cases=10, iterations=100, elapsed_ms=53.941; 21 adjacent WMO/M2/terrain/facade/ scheduler/streaming/coordinate regressions PASS; documentation and coordination gates PASS; render dry-run PASS 7/7. - Remaining risks: no proprietary asset corpus or original-client paired WMO capture; dry-run reports expected missing ADT/DBC/character assets; WMO build/resource state remains loader-owned.
- Documentation updated:
docs/modules/wmo-placement-registry.md,docs/modules/wmo-placement-resolver.md,docs/modules/world-renderer.md,docs/modules/README.md,RENDER.md; inline public API comments added. - Integration: accepted in master merge
f9e5a4f; post-merge registry (cases=10,iterations=100,elapsed_ms=54.178), resolver, runtime-cache shutdown, facade, documentation and coordination gates passed.