4.2 KiB
4.2 KiB
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:<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.mdupdates
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); historicaluid:11785smoke PASS; terrain/facade/internal-access/manifest/ shutdown/scheduler/streaming/focus/terrain-query/coordinate regressions PASS; internal inventory remains42; editor parse and documentation/coordination/ diff gates PASS; checkpoint dry-run planned7/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