106 lines
4.5 KiB
Markdown
106 lines
4.5 KiB
Markdown
# 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
|