# M03-RND-M2-UNIQUE-REGISTRY-001 — M2 unique placement registry

<!-- OPENWC_CLAIM:M03-RND-M2-UNIQUE-REGISTRY-001:sindo-main-codex:2026-07-19 -->

## 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:<decimal>`; 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: accepted
- Done: stateful registry, loader adapters, migrated smoke, regressions and docs
- Next: asset-backed boundary traversal and further M2-service extraction later in M03
- Blocked by:

<!-- OPENWC_HANDOFF:READY:M03-RND-M2-UNIQUE-REGISTRY-001:acb3a80 -->
<!-- OPENWC_INTEGRATION:ACCEPTED:M03-RND-M2-UNIQUE-REGISTRY-001:2342430 -->

## 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
- Integration: accepted in master merge `2342430`; post-merge registry, legacy
  smoke, internal-access, facade and manifest gates passed
