diff --git a/coordination/claims/M01-FND-COORD-BOUNDARY-GATE-001.md b/coordination/claims/M01-FND-COORD-BOUNDARY-GATE-001.md index cf7c0c4..fa0086d 100644 --- a/coordination/claims/M01-FND-COORD-BOUNDARY-GATE-001.md +++ b/coordination/claims/M01-FND-COORD-BOUNDARY-GATE-001.md @@ -1,7 +1,7 @@ # M01-FND-COORD-BOUNDARY-GATE-001 — Coordinate conversion boundary gate - + ## Ownership diff --git a/coordination/claims/M01-FND-COORD-TILE-AXIS-002.md b/coordination/claims/M01-FND-COORD-TILE-AXIS-002.md index b3a1677..3e59b03 100644 --- a/coordination/claims/M01-FND-COORD-TILE-AXIS-002.md +++ b/coordination/claims/M01-FND-COORD-TILE-AXIS-002.md @@ -1,7 +1,7 @@ # M01-FND-COORD-TILE-AXIS-002 — ADT filename axis correction - + ## Ownership diff --git a/coordination/claims/M01-FND-COORDS-001.md b/coordination/claims/M01-FND-COORDS-001.md index 68b3582..fe94c51 100644 --- a/coordination/claims/M01-FND-COORDS-001.md +++ b/coordination/claims/M01-FND-COORDS-001.md @@ -1,7 +1,7 @@ # M01-FND-COORDS-001 — Canonical coordinate contracts - + ## Ownership diff --git a/coordination/claims/M01-FND-DOMAIN-IDENTITIES-001.md b/coordination/claims/M01-FND-DOMAIN-IDENTITIES-001.md index 96958ef..77c3a54 100644 --- a/coordination/claims/M01-FND-DOMAIN-IDENTITIES-001.md +++ b/coordination/claims/M01-FND-DOMAIN-IDENTITIES-001.md @@ -1,7 +1,7 @@ # M01-FND-DOMAIN-IDENTITIES-001 — Stable domain identity namespaces - + ## Ownership diff --git a/coordination/claims/M01-QAR-COORD-FIXTURES-001.md b/coordination/claims/M01-QAR-COORD-FIXTURES-001.md index a70a5a1..0da82ab 100644 --- a/coordination/claims/M01-QAR-COORD-FIXTURES-001.md +++ b/coordination/claims/M01-QAR-COORD-FIXTURES-001.md @@ -1,7 +1,7 @@ # M01-QAR-COORD-FIXTURES-001 — Coordinate golden fixtures - + ## Ownership diff --git a/coordination/claims/M01-QAR-SERVER-SPAWN-RENDERER-001.md b/coordination/claims/M01-QAR-SERVER-SPAWN-RENDERER-001.md index d7560e5..9bef8de 100644 --- a/coordination/claims/M01-QAR-SERVER-SPAWN-RENDERER-001.md +++ b/coordination/claims/M01-QAR-SERVER-SPAWN-RENDERER-001.md @@ -1,7 +1,7 @@ # M01-QAR-SERVER-SPAWN-RENDERER-001 — Golden server spawn renderer evidence - + ## Ownership diff --git a/coordination/claims/M01-RND-STREAMING-FOCUS-001.md b/coordination/claims/M01-RND-STREAMING-FOCUS-001.md index 830cab7..7fdb23e 100644 --- a/coordination/claims/M01-RND-STREAMING-FOCUS-001.md +++ b/coordination/claims/M01-RND-STREAMING-FOCUS-001.md @@ -1,7 +1,7 @@ # M01-RND-STREAMING-FOCUS-001 — Explicit streaming focus contract - + ## Ownership diff --git a/targets/01-coordinates-and-seams.md b/targets/01-coordinates-and-seams.md index 1ab3753..f1c66a9 100644 --- a/targets/01-coordinates-and-seams.md +++ b/targets/01-coordinates-and-seams.md @@ -1,6 +1,7 @@ # M01 — Coordinates and Architecture Seams - + + ## Outcome @@ -8,13 +9,13 @@ ## Steps -- [ ] Создать domain/value-object слой без `Node`/`Resource` dependencies. -- [ ] Определить canonical WoW, Godot, ADT tile/chunk и local coordinate types. -- [ ] Реализовать единственный `CoordinateMapper` для position и orientation. -- [ ] Собрать golden points из ADT, server spawn и оригинального клиента. -- [ ] Ввести `StreamingFocus` вместо неявной зависимости от active Camera3D. -- [ ] Ввести stable `ContentId`, `EntityId` и отличить их от WoW GUID/server entry. -- [ ] Запретить ручные axis conversion через code review rule/test search. +- [x] Создать domain/value-object слой без `Node`/`Resource` dependencies. +- [x] Определить canonical WoW, Godot, ADT tile/chunk и local coordinate types. +- [x] Реализовать единственный `CoordinateMapper` для position и orientation. +- [x] Собрать golden points из ADT, server spawn и оригинального клиента. +- [x] Ввести `StreamingFocus` вместо неявной зависимости от active Camera3D. +- [x] Ввести stable `ContentId`, `EntityId` и отличить их от WoW GUID/server entry. +- [x] Запретить ручные axis conversion через code review rule/test search. ## Verification @@ -28,10 +29,35 @@ Renderer/test scene получают focus через контракт; коор ## Evidence -- Date: -- Revision/worktree: -- Commands: -- Results: -- Fidelity comparison: -- Changed files: -- Remaining risks: +- Date: 2026-07-14 +- Revision/worktree: merged master `c8e99f2`; closeout + `work/sindo-main-codex/m01-integrator-closeout` +- Commands: `tools/run_render_baseline.ps1 -DryRun -WaitSeconds 0.1 + -MeasureSeconds 0.1`; `verify_coordinate_mapper.gd`; + `verify_coordinate_golden_fixtures.gd`; `verify_streaming_focus.gd`; + `verify_domain_identities.gd`; coordination/documentation/diff gates. +- Results: CoordinateMapper PASS (`5` golden points, `8` tile boundaries, + `2` raw MCNK, `5` yaw); golden fixtures PASS (`1` server spawn, `1` raw ADT, + `5` original-client points); StreamingFocus PASS (`1` contract, `2` runtime + scenes, `3` capture tools); identities PASS (`5/5/6/5`); conversion boundary + PASS (`84` files, one native boundary, one oracle, four consumers, six + classifiers); server-spawn renderer PASS at ADT `(32,48)`, MCNK `(3,12)`; + renderer manifest PASS (`7/7/7`) and calibration maximum error `0.000015`. +- Fidelity comparison: five build-12340 camera observations, pinned AzerothCore + Human Warrior spawn and private raw ADT metadata agree through coordinate + contract version 2. Cache-complete cold/warm GUI capture places the mapped + spawn marker on rendered Northshire terrain with focus `(32,48)`, quality + `100/100`, missing cache `0`; PNG SHA-256 values are recorded in the server + spawn handoff. The final ADT-boundary regression passed `2/2`; the full M01 + regression captured `14/14`, with `11` strict passes and three low-mean + timing/animation-phase differences rather than coordinate drift. +- Changed files: `src/domain/coordinates/`, `src/domain/identity/`, + `src/domain/streaming/`, migrated sky/player/streaming/terrain consumers, + coordinate/renderer fixtures and tools, runtime scenes, ADR 0001/0002, + coordinate/domain/renderer module specs, coding/render documentation and + M01 coordination claims. +- Remaining risks: TrinityCore populated spawn equivalence is not verified; + native parser conversion remains one separately calibrated boundary; MDDF/ + MODF placement Euler parity is outside world-yaw scope; renderer visual parity + gaps and the known anonymous ObjectDB teardown warning continue. No `1:1` + compatibility claim is made by M01. diff --git a/targets/02-player-decomposition.md b/targets/02-player-decomposition.md index 6ab733c..59ad015 100644 --- a/targets/02-player-decomposition.md +++ b/targets/02-player-decomposition.md @@ -1,6 +1,6 @@ # M02 — Player Decomposition - + ## Outcome diff --git a/targets/DEVELOPMENT_ROADMAP.md b/targets/DEVELOPMENT_ROADMAP.md index 5d561d0..cb3b069 100644 --- a/targets/DEVELOPMENT_ROADMAP.md +++ b/targets/DEVELOPMENT_ROADMAP.md @@ -21,7 +21,7 @@ OpenWC должен предоставить четыре согласованн - MPQ/BLP/ADT/WDT/M2/WMO native parsing и renderer vertical slice уже существуют. - Runtime streaming, terrain quality, MultiMesh M2, WMO caches, liquids, sky и character experiments находятся в рабочем состоянии, но сосредоточены в крупных orchestration scripts. -- Renderer baseline M00 завершён: paired comparison с оригинальным клиентом записывает измеренные gaps без заявления parity, а обязательные diagnostic gaps закрыты или явно классифицированы. Текущая работа M01 вводит coordinate и architecture seams. +- Renderer baseline M00 завершён: paired comparison с оригинальным клиентом записывает измеренные gaps без заявления parity, а обязательные diagnostic gaps закрыты или явно классифицированы. M01 завершил coordinate, identity и streaming-focus seams; текущая работа M02 декомпозирует player input, movement, terrain query, camera и presentation без observable regression. - Gameplay domain, network protocol, production UI/Lua, audio orchestration и server adapters в основном предстоит реализовать. - Editor plugin пока решает extraction/preview задачи, но не является полноценной authoring platform. diff --git a/targets/README.md b/targets/README.md index c2b39f0..bdf57f2 100644 --- a/targets/README.md +++ b/targets/README.md @@ -10,7 +10,7 @@ ## Current target -`M01` — [01-coordinates-and-seams.md](01-coordinates-and-seams.md) +`M02` — [02-player-decomposition.md](02-player-decomposition.md) Одновременно `ACTIVE` может быть только одна цель. Следующая цель становится `ACTIVE` после появления валидной `OPENWC_TARGET_DONE` метки у предыдущей. @@ -34,8 +34,8 @@ | ID | Цель | Зависит от | Статус | |---|---|---|---| | M00 | [Renderer baseline](00-render-baseline.md) | — | DONE | -| M01 | [Coordinates and architecture seams](01-coordinates-and-seams.md) | M00 | ACTIVE | -| M02 | [Player decomposition](02-player-decomposition.md) | M01 | OPEN | +| M01 | [Coordinates and architecture seams](01-coordinates-and-seams.md) | M00 | DONE | +| M02 | [Player decomposition](02-player-decomposition.md) | M01 | ACTIVE | | M03 | [Renderer facade and extraction](03-renderer-facade.md) | M02 | OPEN | | M04 | [Godot Editor shell](04-editor-shell.md) | M03 | OPEN | | M05 | [Content Project](05-content-project.md) | M04 | OPEN |