# M03-RND-M2-UNIQUE-REGISTRY-001 — M2 unique placement registry ## Ownership - Target: M03 - Program: RND - Owner/Agent ID: sindo-main-codex - Branch: `work/sindo-main-codex/m03-m2-unique-registry` - Lease expires UTC: 2026-07-19 - Integrator: M03 milestone integrator ## Outcome Extract cross-tile positive `MDDF.uniqueId` reservation ownership from the streamer into a scene-free `M2UniquePlacementRegistry`. ## Non-goals - Move tile state, candidate requeue, group/build tasks or result queues. - Move MultiMesh/Node/Mesh/material creation, animation or resource loading. - Change unique-key format, first-owner semantics or unkeyed placement behavior. - Change placement transforms, detail radius, cache versions or quality profiles. - Add dependencies or mark the broad M2 service complete. ## Paths - Exclusive: `src/render/m2/m2_unique_placement_registry.gd`, `src/tools/verify_m2_unique_placement_registry.gd`, `docs/modules/m2-unique-placement-registry.md`, this claim - Shared/hotspots: `src/scenes/streaming/streaming_world_loader.gd`, `src/tools/verify_m2_unique_dedupe.gd`, `docs/modules/world-renderer.md`, `docs/modules/README.md`, `RENDER.md`, `targets/03-renderer-facade.md` - Generated/ignored: `.godot`, native DLL, generated ADT resources, caches and proprietary renderer corpus ## Contracts and data - Input: tile key and raw ADT M2 placement dictionaries - Reserve output: fresh filtered placements, owned unique keys and skipped keys - Release input/output: tile key plus claimed keys; only current owner releases - Positive IDs map to `uid:`; zero/negative/missing IDs remain untracked - Registry is session-memory only and clears on renderer world reset - Queue/cache/schema/coordinate versions: unchanged ## Dependencies - Requires: current master `57ae1b8` - Blocks: broader M2 service extraction and dependency/performance acceptance - External state: none; tests use synthetic placement dictionaries ## Verification - Commands: dedicated unkeyed/duplicate/cross-tile/release/clear/detached- diagnostic and bounded timing verifier; loader source boundary; M2 unique-id smoke plus facade/terrain/internal-access/manifest/shutdown/scheduler gates - Fidelity evidence: exact positive-ID key format and first-owner/retry behavior - Performance budget: dictionary membership over placement count; no Node, Resource, RID, task, file or persistent cache ## Documentation deliverables - Inline registry API documentation - New module spec with inputs/outputs, data-flow, lifecycle, sequence, ownership, failure, recovery, performance and source map - World renderer/module registry/`RENDER.md` updates ## Simplicity and naming - Important name: `M2UniquePlacementRegistry` - Simplest solution: one private key-to-owner dictionary and explicit operations - Rejected complexity: generic identity registry, signals, callbacks, Resources, locks or ownership graph - Unavoidable complexity: raw placement dictionaries remain at ADT adapter boundary - Measured optimization evidence: bounded synthetic reserve/release verifier ## Status - State: handoff - Done: stateful registry, loader adapters, migrated smoke, regressions and docs - Next: milestone integrator merge and asset-backed boundary traversal later in M03 - Blocked by: ## Handoff - Commit: `acb3a80` (`refactor(M03): extract M2 unique placement registry`) - Results: dedicated contract PASS (`cases=10`, `iterations=100`, `35.688 ms`); historical `uid:11785` smoke PASS; terrain/facade/internal-access/manifest/ shutdown/scheduler/streaming/focus/terrain-query/coordinate regressions PASS; internal inventory remains `42`; editor parse and documentation/coordination/ diff gates PASS; checkpoint dry-run planned `7/7` - Remaining risks: private Azeroth corpus was absent, so the asset-backed ADT placement probe could not open the map and is not counted as passed evidence; first ownership remains processing-order based; M2 grouping/build/tasks/caches/ finalization and asset-backed p95/p99 remain pending - Documentation updated: `m2-unique-placement-registry.md`, module registry, `world-renderer.md`, `RENDER.md`, inline API documentation and data-flow, lifecycle and sequence diagrams