Compare commits
195 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e1b2886657 | |||
| f4707750b7 | |||
| 78adb54cfe | |||
| b7c036f14d | |||
| 7973945582 | |||
| 4387c66c0a | |||
| ada0fd9467 | |||
| ff4f320412 | |||
| c83929428d | |||
| 71fa093118 | |||
| e690756301 | |||
| b4955d6162 | |||
| b4b94b3cbb | |||
| d39f591e50 | |||
| 4314f961f6 | |||
| c9547041da | |||
| 60603e18c8 | |||
| 3411156f8f | |||
| e576ae2cad | |||
| a878e7c4e7 | |||
| ab40a76b62 | |||
| e1bb105fff | |||
| 040b635ec6 | |||
| 1e740aaa65 | |||
| c06aed568b | |||
| 01bad4ca26 | |||
| 3a6b1d306d | |||
| e420a8724f | |||
| 1e73e597f8 | |||
| f9e5a4f2e0 | |||
| 16053b46ca | |||
| c5900368d4 | |||
| 79bc4e6ffc | |||
| 5aa40d6afb | |||
| d2cb52ff6b | |||
| c2e0696fe0 | |||
| 05e216a953 | |||
| f01302fd44 | |||
| 4f40c779b9 | |||
| 3f847171f8 | |||
| af9d077905 | |||
| be6db7f7e0 | |||
| a562d126b9 | |||
| 9d74d996d5 | |||
| f88bf9714e | |||
| 7587d3bd3c | |||
| 9df32d38ef | |||
| 9c9020e60f | |||
| c34e538dcf | |||
| 396be5e69d | |||
| 1792938567 | |||
| 0a09d7bc1e | |||
| 91f0ba8433 | |||
| 1b6c46870d | |||
| 2342430439 | |||
| c41e8886a6 | |||
| acb3a809bb | |||
| c13c993645 | |||
| 57ae1b8f16 | |||
| 24aef13801 | |||
| 4b90dbc1c1 | |||
| f800e11cd2 | |||
| 0d2c820ea7 | |||
| b568768866 | |||
| f36fabb8e1 | |||
| 9e69a8a95b | |||
| eb94cfc646 | |||
| aa21aafdfa | |||
| ea08b8ef51 | |||
| 630a0c131d | |||
| 10815be766 | |||
| 97480e06bb | |||
| 6617dfe74e | |||
| 61bad09a9c | |||
| 606770c525 | |||
| b73b2e74a2 | |||
| 1807c3a363 | |||
| 3c5880f190 | |||
| a7b2f9475b | |||
| a85e416cb8 | |||
| c69abd634f | |||
| cd23a62be8 | |||
| 2ee647a220 | |||
| 60f1e363c0 | |||
| cb103e1fde | |||
| d6e5b530ef | |||
| 8c46065ada | |||
| 9408d887ba | |||
| 80cb08422b | |||
| 0773de5977 | |||
| b697a896e8 | |||
| 6117e5282e | |||
| 53d84ccc8a | |||
| 7e35de7f61 | |||
| ba9f89691d | |||
| b58bf2caa6 | |||
| 52ea639d64 | |||
| a023d76eea | |||
| 7ece2abea2 | |||
| 10c5d4cc12 | |||
| e52f703da5 | |||
| 91f0724ce2 | |||
| 650d584ff0 | |||
| 643850c8ee | |||
| ad8fc41ace | |||
| d0f74f840b | |||
| 5b10288ff7 | |||
| e887c3bad5 | |||
| 0c24f96ae1 | |||
| ad0532925a | |||
| 9c3f7018fb | |||
| a100cede46 | |||
| 2466fd67d3 | |||
| 3d528e3bbf | |||
| a629bedccf | |||
| 4f566b1957 | |||
| d9c847c557 | |||
| 1bf5b526be | |||
| 9275fbe04f | |||
| eb122d52a9 | |||
| e819eeb35b | |||
| 8776a6b362 | |||
| c3094c9413 | |||
| 7d5d13f702 | |||
| 742c415885 | |||
| 8c71e46872 | |||
| ad820699bc | |||
| 97bb53f6cd | |||
| 68e6f60d90 | |||
| 02dec23c2a | |||
| 8c1cf9be36 | |||
| f5bb64e6c7 | |||
| 0ce3cae208 | |||
| a45d521567 | |||
| 5206c42cf0 | |||
| d2d6df3655 | |||
| 435e1c95d2 | |||
| 14dead194b | |||
| e794764269 | |||
| 6bd2e84048 | |||
| 62eece991c | |||
| fc81059dfa | |||
| dd412e6d0d | |||
| 07f08044f4 | |||
| c8e99f28d6 | |||
| 48cc976ba0 | |||
| 318e6ae757 | |||
| 747fae8e2e | |||
| 24ddc99a7b | |||
| 52b6fa2ebb | |||
| 3933dbfc47 | |||
| a07a487368 | |||
| 47dec6c32c | |||
| c8e62acf4c | |||
| 7c64e8d60a | |||
| c1dc07c705 | |||
| d68786355c | |||
| 77cd17a5bc | |||
| 7815385b3b | |||
| fbef131bcb | |||
| 52e1b2ba67 | |||
| ce4f7ec0e2 | |||
| 758b375e7e | |||
| b55bfca2a7 | |||
| a7072e3d14 | |||
| f9c467b71f | |||
| 1c0dfc761d | |||
| f45695c26a | |||
| c2be8ae95e | |||
| 8636427234 | |||
| 5627180fd5 | |||
| ba81098797 | |||
| f19c0c45a7 | |||
| 09b3e87a8d | |||
| d1df794cd6 | |||
| 0327e4862d | |||
| 239cb2432e | |||
| b5ddc86c92 | |||
| 3d90c6d79a | |||
| a10206b797 | |||
| 3172f41ee5 | |||
| 5a957d2ebb | |||
| 5092995d0c | |||
| 4908eb2e31 | |||
| eca76c5ed1 | |||
| 03891edeb2 | |||
| 657a1d888a | |||
| b48195d08d | |||
| 8d4641a43b | |||
| ad9ba7af4e | |||
| f54850718a | |||
| 5103eed014 | |||
| 9d34a47765 | |||
| aea7787b9b | |||
| 230620089f |
@@ -35,3 +35,7 @@
|
|||||||
|
|
||||||
# CMake build директория
|
# CMake build директория
|
||||||
/src/native/build/
|
/src/native/build/
|
||||||
|
|
||||||
|
# Local root-level diagnostic capture logs
|
||||||
|
/*.stdout.log
|
||||||
|
/*.stderr.log
|
||||||
|
|||||||
@@ -25,7 +25,15 @@ Paired run 2026-07-11 подтвердил крупный coordinate/placement g
|
|||||||
|
|
||||||
## Основные файлы
|
## Основные файлы
|
||||||
|
|
||||||
- `src/scenes/streaming/streaming_world_loader.gd` - главный runtime streamer мира.
|
- `src/render/world_render_facade.gd` - стабильная граница runtime/tools для focus и metrics.
|
||||||
|
- `src/scenes/streaming/streaming_world_loader.gd` - внутренний runtime streamer мира.
|
||||||
|
- `src/render/wmo/wmo_placement_resolver.gd` - value-only WMO path, identity and transform rules.
|
||||||
|
- `src/render/wmo/wmo_placement_registry.gd` - WMO placement-key to tile/global reference sets; Nodes and render jobs remain in the streamer.
|
||||||
|
- `src/render/wmo/wmo_render_build_step_planner.gd` - mesh-first lightweight WMO group operation and cursor planning without Nodes or Resources.
|
||||||
|
- `src/render/wmo/wmo_render_build_queue.gd` / `wmo_render_build_job.gd` - typed pending group jobs, FIFO placement keys and strong root/resource references without engine destruction.
|
||||||
|
- `src/render/wmo/wmo_render_resource_cache_state.gd` - validated lightweight WMO render Resources, negative cache and pending cache paths without ResourceLoader I/O.
|
||||||
|
- `src/render/wmo/wmo_scene_resource_cache_state.gd` - validated cached-WMO PackedScenes, negative cache and pending `.tscn` paths without file/I/O/Node ownership.
|
||||||
|
- `src/render/liquid/adt_water_load_pipeline_state.gd` - ADT water pending FIFO/dedupe, active task IDs and worker-safe parsed-result mailbox without parser or Node ownership.
|
||||||
- `src/scenes/streaming/eastern_kingdoms_streaming.tscn` - текущая сцена для проверки Azeroth/Eastern Kingdoms.
|
- `src/scenes/streaming/eastern_kingdoms_streaming.tscn` - текущая сцена для проверки Azeroth/Eastern Kingdoms.
|
||||||
- `addons/mpq_extractor/loaders/adt_builder.gd` - сборка ADT terrain, control splat материалов и MH2O liquids.
|
- `addons/mpq_extractor/loaders/adt_builder.gd` - сборка ADT terrain, control splat материалов и MH2O liquids.
|
||||||
- `addons/mpq_extractor/loaders/m2_builder.gd` - сборка статического M2 mesh/material.
|
- `addons/mpq_extractor/loaders/m2_builder.gd` - сборка статического M2 mesh/material.
|
||||||
@@ -393,6 +401,12 @@ Known limits:
|
|||||||
- `WMOBuilder` строит group meshes;
|
- `WMOBuilder` строит group meshes;
|
||||||
- runtime registry дедуплицирует WMO по `unique_id`;
|
- runtime registry дедуплицирует WMO по `unique_id`;
|
||||||
- WMO на границе ADT не дублируются;
|
- WMO на границе ADT не дублируются;
|
||||||
|
- `WmoPlacementRegistry` owns only placement reference sets; the streamer keeps
|
||||||
|
the parallel key-to-Node map and performs final-release cancellation/free;
|
||||||
|
- `WmoRenderBuildStepPlanner` selects one mesh or MultiMesh group and its next
|
||||||
|
cursors; the streamer still materializes Nodes and consumes the frame permit;
|
||||||
|
- `WmoRenderBuildQueue` owns pending typed jobs/FIFO keys and releases references
|
||||||
|
on cancel/reset; the streamer still validates and frees engine objects;
|
||||||
- большие WMO не должны инстанцироваться как тяжелые `.tscn` во время движения;
|
- большие WMO не должны инстанцироваться как тяжелые `.tscn` во время движения;
|
||||||
- добавлен lightweight render-cache path для WMO groups;
|
- добавлен lightweight render-cache path для WMO groups;
|
||||||
- `wmo_render_group_ops_per_tick` ограничивает подключение WMO groups по кадрам;
|
- `wmo_render_group_ops_per_tick` ограничивает подключение WMO groups по кадрам;
|
||||||
@@ -822,6 +836,304 @@ $exe = Join-Path $env:TEMP 'godot-4.6.1-openwc\Godot_v4.6.1-stable_win64.exe'
|
|||||||
- Added `src/tools/capture_render_checkpoints.gd` to load the Eastern Kingdoms streaming scene, move a dedicated camera to fixed regression viewpoints and save PNGs under `user://render_checkpoints`.
|
- Added `src/tools/capture_render_checkpoints.gd` to load the Eastern Kingdoms streaming scene, move a dedicated camera to fixed regression viewpoints and save PNGs under `user://render_checkpoints`.
|
||||||
- Current checkpoints cover the Elwynn waterfall from front/side and Goldshire Inn/Blacksmith windows. Headless runs are dry-run only because the headless display server cannot produce viewport PNGs.
|
- Current checkpoints cover the Elwynn waterfall from front/side and Goldshire Inn/Blacksmith windows. Headless runs are dry-run only because the headless display server cannot produce viewport PNGs.
|
||||||
|
|
||||||
|
## 2026-07-13 Renderer Shutdown Ownership
|
||||||
|
|
||||||
|
- `StreamingWorldLoader` drains its asynchronous work before teardown, leaves parented streamed nodes to SceneTree ownership, then explicitly frees detached M2/WMO prototype nodes and clears resource caches.
|
||||||
|
- `ADTBuilder` explicitly frees a temporary `Water` root when an ADT liquid payload produces no child geometry. Dry tiles must not leave empty nodes in ObjectDB.
|
||||||
|
- `src/tools/verify_render_runtime_cache_shutdown.gd` regression-checks detached prototype and resource-cache release plus empty-liquid-root ownership. The unified render-baseline runner executes it before capture.
|
||||||
|
- A focused 8-second GUI checkpoint and a seven-checkpoint single-pass GUI run finish without Node, renderer resource or RID leak diagnostics. A timing-dependent anonymous zero-reference `RefCounted` ObjectDB warning can remain at engine teardown; it is tracked separately and is not suppressed.
|
||||||
|
- This is shutdown-only ownership behavior and does not alter checkpoint rendering, cache formats or the `Blizzlike335` compatibility profile.
|
||||||
|
|
||||||
|
## 2026-07-13 Explicit Streaming Focus
|
||||||
|
|
||||||
|
- `StreamingWorldLoader` consumes an immutable `StreamingFocus` containing a
|
||||||
|
typed `GodotWorldPosition`; runtime streaming no longer discovers the active
|
||||||
|
`Camera3D` from the viewport or child nodes.
|
||||||
|
- Eastern Kingdoms and Kalimdor runtime scenes explicitly use the player as the
|
||||||
|
streaming source. Checkpoint capture and terrain/occluder probes explicitly
|
||||||
|
use their dedicated camera through the same public refresh path.
|
||||||
|
- The editor viewport camera remains behind a dedicated editor-only adapter.
|
||||||
|
`camera_path` is retained solely for optional automatic overview positioning.
|
||||||
|
- Streaming radii, LOD decisions, cache formats and renderer quality profiles
|
||||||
|
are unchanged by this migration.
|
||||||
|
|
||||||
|
## 2026-07-13 Coordinate Conversion Boundary Gate
|
||||||
|
|
||||||
|
- Sky/area lookup, streaming tile ownership, player spawn/terrain sampling and
|
||||||
|
terrain diagnostics now cross world-coordinate spaces through typed
|
||||||
|
`CoordinateMapper` methods.
|
||||||
|
- Renderer distance, LOD, ray and model-local M2/WMO calculations remain in
|
||||||
|
their existing Godot/local spaces; they are not axis conversions.
|
||||||
|
- The repository gate rejects new manual world-center, WoW/Godot and
|
||||||
|
Godot-position-to-ADT formulas. The unified renderer baseline runs this gate.
|
||||||
|
- Native ADT/WDT parsers keep one shared world conversion in
|
||||||
|
`wow_chunk_reader.h`; the independent M00 calibration formula remains a test oracle.
|
||||||
|
- Coordinate contract version 2, renderer radii, cache formats and visual
|
||||||
|
quality profiles are unchanged.
|
||||||
|
|
||||||
|
## 2026-07-13 Golden Server Spawn Renderer Evidence
|
||||||
|
|
||||||
|
- The pinned AzerothCore Human Warrior start at server position
|
||||||
|
`(-8949.95, -132.493, 83.5312)` maps through `CoordinateMapper` to Godot
|
||||||
|
`(17199.159666667, 83.5312, 26016.616666667)`, ADT `(32,48)` and MCNK `(3,12)`.
|
||||||
|
- `server_spawn_render_manifest.json` drives the ordinary Eastern Kingdoms
|
||||||
|
checkpoint capture pipeline at that location; no live database or production
|
||||||
|
spawn entity is introduced.
|
||||||
|
- A renderer-native emissive marker starts at the exact mapped origin and keeps
|
||||||
|
depth testing enabled so GUI evidence exposes its relationship to terrain.
|
||||||
|
- `verify_server_spawn_renderer.gd` rejects drift between the pinned fixture,
|
||||||
|
manifest target/player coordinates and expected ADT ownership. The unified
|
||||||
|
renderer baseline runs this contract check before capture.
|
||||||
|
- This closes a coordinate/renderer integration criterion only. It does not
|
||||||
|
claim TrinityCore row equivalence or visual parity with the original client.
|
||||||
|
|
||||||
|
## 2026-07-15 WorldRenderFacade First Seam
|
||||||
|
|
||||||
|
- Runtime streaming scenes, checkpoint capture and renderer probes now submit
|
||||||
|
typed focus through `WorldRenderFacade`; those callers no longer call the
|
||||||
|
monolithic streamer's focus methods or configure its focus source directly.
|
||||||
|
- Baseline capture reads queue/cache/activity counts through
|
||||||
|
`renderer_metrics_snapshot()`. The facade returns a deep copy, so diagnostics
|
||||||
|
cannot mutate renderer-owned state.
|
||||||
|
- `StreamingWorldLoader` remains the internal implementation and still owns all
|
||||||
|
queues, tasks, caches, nodes and RIDs. The facade adds no parallel state or
|
||||||
|
replacement scheduler.
|
||||||
|
- This package does not alter targets, budgets, cache versions, placement,
|
||||||
|
visibility, materials or animation. Environment, entity visuals and ground
|
||||||
|
query remain explicit follow-up facade contracts in M03.
|
||||||
|
|
||||||
|
## 2026-07-15 StreamingTargetPlanner Extraction
|
||||||
|
|
||||||
|
- Runtime and editor wanted/retained ADT set calculation now lives in the
|
||||||
|
scene-free `StreamingTargetPlanner`.
|
||||||
|
- `StreamingTargetPolicy` preserves existing chunk/tile radii, warm/prewarm/
|
||||||
|
retain margins and the clamped boundary-prefetch threshold.
|
||||||
|
- `StreamingTargetPlan` freezes its focus/wanted/retained result; the streamer
|
||||||
|
still owns available paths, load-queue distance sorting, loaded-tile LOD/detail
|
||||||
|
state, async work, caches, nodes and RIDs.
|
||||||
|
- Asset-free fixtures cover center, edge/corner prefetch, catalog filtering,
|
||||||
|
clamp and editor behavior plus bounded High-like iteration timing.
|
||||||
|
- Cache versions, quality profiles, queue priority and visible rendering rules
|
||||||
|
are unchanged by the extraction.
|
||||||
|
|
||||||
|
## 2026-07-16 RenderBudgetScheduler Extraction
|
||||||
|
|
||||||
|
- The scene-free `RenderBudgetScheduler` now owns the per-frame counters for 16
|
||||||
|
named renderer operation lanes. It owns no queue, task, cache, Node or RID.
|
||||||
|
- `StreamingWorldLoader` snapshots its existing exported limits once per process
|
||||||
|
frame and asks for a boolean permit immediately before each historically
|
||||||
|
budgeted operation.
|
||||||
|
- Chunk removals and creations intentionally share one `chunk_geometry` lane;
|
||||||
|
the existing removal-first drain order and combined limit are preserved.
|
||||||
|
- Loader teardown cancels permit issuance before waiting for asynchronous work.
|
||||||
|
Existing worker/result staleness checks and resource cleanup remain unchanged.
|
||||||
|
- Asset-free contracts cover exact bounds, independent/shared lanes, frame reset,
|
||||||
|
invalid inputs, terminal cancellation, detached diagnostics and hot-path timing.
|
||||||
|
- Defaults, quality presets, queue order, cache versions and visible rendering
|
||||||
|
rules are unchanged. Asset-backed p95/p99 comparison remains required.
|
||||||
|
|
||||||
|
## 2026-07-16 Streamer Internal Access Gate
|
||||||
|
|
||||||
|
- `verify_renderer_internal_access.gd` derives private queue, task, cache and
|
||||||
|
tile-state field names from `StreamingWorldLoader` declarations and rejects
|
||||||
|
external member/reflection access in gameplay and Godot `EditorPlugin` package sources.
|
||||||
|
- The gate follows the implementation inventory instead of duplicating a manual
|
||||||
|
list, so a newly named private renderer field is covered automatically when it
|
||||||
|
matches those ownership categories.
|
||||||
|
- Scene composition may still reference the loader script and the facade's
|
||||||
|
implementation path; those are composition details, not mutable queue access.
|
||||||
|
- Renderer diagnostic probes are added explicitly as their facade contracts land.
|
||||||
|
- This is a source-only boundary check and changes no renderer behavior or fidelity.
|
||||||
|
|
||||||
|
## 2026-07-16 Rendered Ground Query Facade
|
||||||
|
|
||||||
|
- `WorldRenderFacade.sample_ground_height()` accepts `GodotWorldPosition` and
|
||||||
|
returns renderer-owned immutable `RenderedGroundSample` from already loaded
|
||||||
|
quality/tile-LOD render meshes, avoiding a render-to-gameplay dependency.
|
||||||
|
- Its factories load the predeclared Script path instead of relying on a warm
|
||||||
|
global-class cache; a dedicated cold-start verifier covers this bootstrap path.
|
||||||
|
- `renderer_ground_query_snapshot()` preserves the terrain probe's tile readiness,
|
||||||
|
queue position, mesh bounds and nearby seam-fallback diagnostics as a detached
|
||||||
|
Dictionary; callers receive no queue, tile-state, Mesh or Node reference.
|
||||||
|
- `probe_render_terrain_height.gd` now uses this facade snapshot and no longer reads
|
||||||
|
`_tile_states`, `_tile_load_queue`, `_tile_loading_tasks` or `_available_tiles`.
|
||||||
|
- Gameplay continues using the independently composed M02 `TerrainQuery`/
|
||||||
|
`AdtTerrainQuery`. Loaded render meshes are diagnostic and are not authoritative
|
||||||
|
movement collision.
|
||||||
|
- The ray height, 3x3 tile search and `2/5/10/20/40`-unit nearby fallback are
|
||||||
|
preserved. No terrain geometry, cache, streaming or visual behavior changed.
|
||||||
|
|
||||||
|
## 2026-07-16 Terrain Chunk LOD Planner Extraction
|
||||||
|
|
||||||
|
- `TerrainChunkLodPlanner` now owns the pure mapping from populated parsed ADT
|
||||||
|
chunk indices to desired terrain LOD 0/1/2.
|
||||||
|
- `TerrainChunkLodPolicy` snapshots the existing enabled flag, three raw chunk
|
||||||
|
radii and chunk size once per streaming-target application.
|
||||||
|
- Horizontal XZ distance to the chunk center, inclusive squared thresholds,
|
||||||
|
sparse-index omission and historical negative-radius squaring are unchanged.
|
||||||
|
- `StreamingWorldLoader` still owns tile/chunk state, queues, operation budgets,
|
||||||
|
creation/removal, Mesh/Node/RID finalization and tile-LOD fallback.
|
||||||
|
- Cache formats, quality presets and visible behavior are unchanged. The
|
||||||
|
scene-free contract is formula evidence only; asset-backed p95/p99 and visual
|
||||||
|
acceptance remain required.
|
||||||
|
|
||||||
|
## 2026-07-16 Terrain Chunk Geometry Queue Planner Extraction
|
||||||
|
|
||||||
|
- `TerrainChunkGeometryQueuePlanner` now compares current and desired chunk state
|
||||||
|
and returns fresh chunk create/remove request arrays.
|
||||||
|
- LOD mismatches and absent chunks retain the existing request shape; creates
|
||||||
|
remain sorted by horizontal distance from chunk origin to streaming focus.
|
||||||
|
- Desired tile LOD still removes every current chunk, while sparse parsed chunk
|
||||||
|
records retain the existing tile-origin distance fallback.
|
||||||
|
- `StreamingWorldLoader` still owns queue storage/drains, removal-first execution,
|
||||||
|
the shared `chunk_geometry` budget lane and every Mesh/Node/RID side effect.
|
||||||
|
- Cache formats, quality profiles and visual rules are unchanged. Asset-backed
|
||||||
|
p95/p99 and visual acceptance remain required.
|
||||||
|
|
||||||
|
## 2026-07-16 M2 Unique Placement Registry Extraction
|
||||||
|
|
||||||
|
- `M2UniquePlacementRegistry` now owns positive ADT `MDDF.uniqueId` reservations
|
||||||
|
across streamed tiles using the existing `uid:<decimal>` keys.
|
||||||
|
- Missing/zero/negative IDs remain untracked; duplicates inside one reservation
|
||||||
|
call are suppressed and another tile records one skipped key until owner release.
|
||||||
|
- Owner release still lets the loader find eligible waiting tiles and enqueue the
|
||||||
|
existing detail retry path. First ownership remains tile-processing-order based.
|
||||||
|
- `StreamingWorldLoader` still owns tile state, retry queues, grouping/build tasks,
|
||||||
|
M2 caches, MultiMesh/Node/Mesh/material/RID creation and all operation budgets.
|
||||||
|
- M2/ADT cache formats, transforms, profiles and visible rules are unchanged.
|
||||||
|
Asset-backed cross-boundary p95/p99 and visual acceptance remain required.
|
||||||
|
|
||||||
|
## 2026-07-16 M2 Placement Transform Resolver Extraction
|
||||||
|
|
||||||
|
- `M2PlacementTransformResolver` now owns the pure ADT M2 basis and local
|
||||||
|
origin-compensation formulas used by worker grouping, placeholders and direct
|
||||||
|
instance creation.
|
||||||
|
- Regular models retain `Basis.from_euler`; `ElwynnCliffRock01/02` retain their
|
||||||
|
narrow shell correction; `NewWaterfall` and `ElwynnTallWaterfall01` retain
|
||||||
|
calibrated world yaw, local fall-axis twist and tall-sheet anchor compensation.
|
||||||
|
- Path separator/case/MDX handling, constants and caller-specific final scale
|
||||||
|
clamps are unchanged. The resolver owns no Node, task, cache or RID.
|
||||||
|
- Cache formats, placement positions and visible rules are unchanged by the
|
||||||
|
extraction. Asset-backed visual recheck and general placement parity remain gaps.
|
||||||
|
|
||||||
|
## 2026-07-16 M2 Placement Grouper Extraction
|
||||||
|
|
||||||
|
- `M2PlacementGrouper` now owns pure worker-side validation, historical path
|
||||||
|
normalization and ordered tile-local transform grouping of ADT M2 placements.
|
||||||
|
- Invalid records, backslash replacement, lowercase `.mdx/.mdl` conversion,
|
||||||
|
first-seen ordering and the `0.0001` scale clamp are unchanged.
|
||||||
|
- The loader retains tasks, mutex/result queues, stale-result checks, tile/build
|
||||||
|
state, caches and all Node/MultiMesh/Mesh/material/RID finalization.
|
||||||
|
- Cache formats, batching, profiles and visible rules are unchanged. Asset-backed
|
||||||
|
traversal p95/p99, visual recheck and spatial-cell grouping remain pending.
|
||||||
|
|
||||||
|
## 2026-07-17 M2 Build Batch Planner Extraction
|
||||||
|
|
||||||
|
- `M2BuildBatchPlanner` now owns pure static/animated batch-limit selection,
|
||||||
|
remaining-count capping and next-offset/group-completion calculation.
|
||||||
|
- Existing animated/static limits still clamp to at least one; resource readiness,
|
||||||
|
queue rotation, serial progression and `M2_BUILD` permit consumption are unchanged.
|
||||||
|
- The loader retains build jobs/queues, tile cancellation, animation/mesh caches,
|
||||||
|
retries and all Node/MultiMesh/Mesh/material/RID finalization.
|
||||||
|
- Cache formats, quality profiles, batching output and visible rules are unchanged.
|
||||||
|
Asset-backed p95/p99 and spatial-cell batching evidence remain pending.
|
||||||
|
|
||||||
|
## 2026-07-17 WMO Placement Resolver Extraction
|
||||||
|
|
||||||
|
- `WmoPlacementResolver` now owns lowercase/slash cache-key normalization,
|
||||||
|
positive MODF `uid:<decimal>` identity with the legacy tile/index fallback and
|
||||||
|
world `Transform3D` composition.
|
||||||
|
- Lightweight render roots, cached scenes and live prototypes now share the same
|
||||||
|
position/Euler/unclamped-scale formula.
|
||||||
|
- The loader retains registry refs, jobs/queues, cache/load state, resource
|
||||||
|
fallback, cancellation and all Node/Mesh/MultiMesh/material/RID ownership.
|
||||||
|
- Cache formats, placement values, profiles and visible rules are unchanged.
|
||||||
|
Asset-backed placement/p95/p99 and general WMO parity remain pending.
|
||||||
|
|
||||||
|
## 2026-07-17 WMO Render Resource Cache State Extraction
|
||||||
|
|
||||||
|
- `WmoRenderResourceCacheState` now owns validated lightweight-WMO render
|
||||||
|
Resources, negative entries and normalized-path to pending-cache-path records.
|
||||||
|
- `StreamingWorldLoader` still constructs cache paths, calls `ResourceLoader`,
|
||||||
|
polls requests and validates `WMOStreamingResource` script identity plus
|
||||||
|
`FORMAT_VERSION` before completing cache state.
|
||||||
|
- Map reset and orderly request draining clear pending/negative state while
|
||||||
|
retaining accepted Resources; final runtime cache release clears all state.
|
||||||
|
- Missing render-cache files still are not negatively cached, preserving retry
|
||||||
|
and cached-scene/live fallback behavior. Formats, profiles and visuals are unchanged.
|
||||||
|
- Asset-backed corrupt-cache, traversal/leak p95/p99 and paired fidelity evidence
|
||||||
|
remain pending.
|
||||||
|
|
||||||
|
## 2026-07-17 WMO Scene Resource Cache State Extraction
|
||||||
|
|
||||||
|
- `WmoSceneResourceCacheState` now owns validated cached-WMO PackedScenes,
|
||||||
|
negative entries and normalized-path to pending-`.tscn` records.
|
||||||
|
- `StreamingWorldLoader` still checks file existence and
|
||||||
|
`wmo_max_runtime_scene_mb`, calls `ResourceLoader`, instantiates a validation
|
||||||
|
probe, checks WMOBuilder cache metadata and frees the probe before adoption.
|
||||||
|
- Missing files, oversize scenes, request errors, load failures and stale scenes
|
||||||
|
retain their prior negative-cache and live-prototype fallback behavior.
|
||||||
|
- Map reset clears pending/negative state while retaining accepted scenes; final
|
||||||
|
shutdown releases all scene state. Formats, profiles and visuals are unchanged.
|
||||||
|
- Asset-backed oversize/stale fixtures, traversal/leak p95/p99 and paired fidelity
|
||||||
|
evidence remain pending.
|
||||||
|
|
||||||
|
## 2026-07-17 ADT Water Load Pipeline State Extraction
|
||||||
|
|
||||||
|
- `AdtWaterLoadPipelineState` now owns ADT water pending FIFO/deduplication,
|
||||||
|
active WorkerThreadPool task IDs and the mutex-protected parsed-result mailbox.
|
||||||
|
- `StreamingWorldLoader` still selects concurrency, starts/waits tasks, invokes
|
||||||
|
`ADTLoader`, consumes `WATER_FINALIZE` permits, rejects stale tile/path/root
|
||||||
|
results and builds/attaches water Nodes through `ADTBuilder` on the main thread.
|
||||||
|
- Tile release still cancels only pending water requests; active work completes
|
||||||
|
and its result is discarded when tile ownership is stale. Shutdown waits task
|
||||||
|
IDs before clearing state; reset does not interrupt workers.
|
||||||
|
- Pending-plus-active `water` metrics, parsing, formats, materials, profiles and
|
||||||
|
visible behavior are unchanged.
|
||||||
|
- Asset-backed MH2O/MCLQ fidelity, long-traversal leak/p95/p99 and paired capture
|
||||||
|
evidence remain pending.
|
||||||
|
|
||||||
|
## 2026-07-16 World Environment Snapshot Facade
|
||||||
|
|
||||||
|
- `WorldEnvironmentSnapshot` carries one immutable finite time-of-day value,
|
||||||
|
normalized to `[0, 24)` hours; invalid non-finite input is explicit.
|
||||||
|
- `WorldRenderFacade.apply_environment_snapshot()` delegates the snapshot to the
|
||||||
|
scene-owned `WowSkyController`. The facade owns no `Environment`, sun, skybox,
|
||||||
|
shader global or DBC sampling state.
|
||||||
|
- Checkpoint capture now submits its manifest time through the facade instead of
|
||||||
|
locating `WowSkyController` and mutating `use_system_time`, `time_speed` and
|
||||||
|
`fixed_time_hours` directly.
|
||||||
|
- Applying a snapshot performs the same three fixed-clock assignments as the old
|
||||||
|
capture path. Light/Area/Skybox DBC lookup, interpolation, fog, sun and shader
|
||||||
|
behavior remain unchanged; weather and indoor environment state are follow-up work.
|
||||||
|
|
||||||
|
## 2026-07-16 World Entity Presentation Facade
|
||||||
|
|
||||||
|
- `EntityPresentationSnapshot` contract version 1 combines session `EntityId`,
|
||||||
|
typed Godot world position, visual PackedScene path, finite yaw/scale and visibility.
|
||||||
|
- `WorldRenderFacade.present_entity()` and `remove_entity()` delegate to an explicit
|
||||||
|
scene-owned `WorldEntityPresenter`; both runtime scenes compose that service.
|
||||||
|
- The presenter owns only visual subtrees. Same-path snapshots update transform/
|
||||||
|
visibility, changed paths replace after successful instantiation, and removal
|
||||||
|
detaches plus queues the owned root for deletion.
|
||||||
|
- The local player, authoritative state, GUID mapping and asset/display selection
|
||||||
|
remain outside this service. Runtime emits no entity commands yet, so baseline
|
||||||
|
output is unchanged.
|
||||||
|
- PackedScene loading is currently synchronous on create/replace and is a documented
|
||||||
|
prototype limitation, not an accepted network-scale frame-critical path.
|
||||||
|
|
||||||
|
## 2026-07-16 Terrain Quality Mesh Cache Extraction
|
||||||
|
|
||||||
|
- `TerrainQualityMeshCache` now owns full-quality terrain revisit Mesh references,
|
||||||
|
tile-key LRU order and source admission outside `StreamingWorldLoader`.
|
||||||
|
- The historical rules are unchanged: successful restore touches newest; store
|
||||||
|
trims oldest to `terrain_quality_mesh_cache_limit`; zero/negative capacity keeps
|
||||||
|
no entries; control-splat/splat sources are never retained in this revisit cache.
|
||||||
|
- The loader keeps three narrow adapters: restore into tile state, store after a
|
||||||
|
full-quality result and clear during existing world reset/shutdown.
|
||||||
|
- ADT parsing, quality tasks/results, tile state, cache format versions, material/
|
||||||
|
Node/RID finalization, budgets and visible terrain behavior remain loader-owned.
|
||||||
|
|
||||||
## Practical Rule For Future Work
|
## Practical Rule For Future Work
|
||||||
|
|
||||||
If something improves quality but creates visible hitch, it is not done. Move it to bake/cache/background work, split finalization over frames, or prewarm it before the player can see it.
|
If something improves quality but creates visible hitch, it is not done. Move it to bake/cache/background work, split finalization over frames, or prewarm it before the player can see it.
|
||||||
|
|||||||
@@ -788,7 +788,10 @@ static func _build_tile_water_root(data: Dictionary, origin_offset: Vector3) ->
|
|||||||
mi.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
mi.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
||||||
root.add_child(mi)
|
root.add_child(mi)
|
||||||
|
|
||||||
return root if root.get_child_count() > 0 else null
|
if root.get_child_count() > 0:
|
||||||
|
return root
|
||||||
|
root.free()
|
||||||
|
return null
|
||||||
|
|
||||||
|
|
||||||
static func _append_liquid_geometry(
|
static func _append_liquid_geometry(
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-ANIMATION-SKY-EVIDENCE-001 — Animation and sky evidence
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-ANIMATION-SKY-EVIDENCE-001:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-ANIMATION-SKY-EVIDENCE-001:d1df794 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-animation-sky-evidence`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Add private build 12340 evidence for the remaining sky-transition and native animated-M2 coverage, rerun all paired comparisons, and hand the resulting audit to the milestone integrator.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Committing proprietary screenshots or extracted assets.
|
||||||
|
- Claiming renderer parity from mismatched world placement or animation phase.
|
||||||
|
- Marking M00 DONE; only the milestone integrator may change target status or Evidence.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: this claim and animation/sky evidence documentation
|
||||||
|
- Shared/hotspots: `docs/M00_FINAL_PAIRED_EVIDENCE.md`, `docs/modules/world-renderer.md`
|
||||||
|
- Generated/ignored: normalized private references under `sources/OpenWCReferenceCheckpoints`; captures and reports under `user://`
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: unchanged
|
||||||
|
- Schema/format version: unchanged
|
||||||
|
- Migration/compatibility: existing five-reference comparison remains valid
|
||||||
|
- Consumers: M00 milestone integrator
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: user-captured build 12340 screenshots at 19:00 and two real `GryphonRoost01` animation phases
|
||||||
|
- Blocks: final integrator decision on M00 completion
|
||||||
|
- External state: private screenshots remain outside Git
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: private-reference preparation, full baseline runner, comparator self-test, coordination and documentation gates
|
||||||
|
- Fixtures: seven private build 12340 checkpoint references plus a second animation-phase provenance frame
|
||||||
|
- Fidelity evidence: sky-transition screenshot and observed wing pose change over three seconds
|
||||||
|
- Performance budget: existing M00 capture budgets
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: unchanged
|
||||||
|
- Module specification: paired coverage and remaining limitations
|
||||||
|
- Data-flow diagram: unchanged
|
||||||
|
- Sequence/state/dependency diagrams: unchanged
|
||||||
|
- Source map/status updates: final paired evidence audit
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: none
|
||||||
|
- Simplest considered solution: normalize private captures outside Git and reuse the existing comparator
|
||||||
|
- Rejected complexity/abstractions: adding a video comparator or committing an asset corpus
|
||||||
|
- Unavoidable complexity and justification: animation phase and synthetic placement require human evidence classification alongside pixel metrics
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: exact-size private references registered; real ADT placement verified; canonical and visual captures completed; fourteen comparisons audited
|
||||||
|
- Next: milestone integrator reviews synthetic/real placement classification and GUI RID risk
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: this work-package commit
|
||||||
|
- Results: `compared=14`, `failed=14`, `missing=0`; mean error `0.066893..0.176955`; original-client Gryphon wing phase changed over three seconds
|
||||||
|
- Remaining risks: synthetic probe placement differs from the original-client world placement; GUI RID/resource diagnostics remain separate
|
||||||
|
- Documentation updated: `docs/M00_FINAL_PAIRED_EVIDENCE.md`, `docs/modules/world-renderer.md`
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-CAMERA-FRAMING-REFINEMENT-001 — Goldshire pitch/FOV refinement
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-CAMERA-FRAMING-REFINEMENT-001:sindo-main-codex:2026-07-14 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-CAMERA-FRAMING-REFINEMENT-001:3172f41 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-camera-framing-refinement`
|
||||||
|
- Lease expires UTC: 2026-07-14
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Jointly refine Goldshire checkpoint pitch and FOV against a WMO-ready build 12340 reference.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Changing runtime player camera defaults.
|
||||||
|
- Changing manifest values without an interior optimum and human approval.
|
||||||
|
- Optimizing yaw beyond the ready-scene coarse result.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: joint FOV option in camera-pose sweep and framing evidence
|
||||||
|
- Shared/hotspots: camera-pose operational documentation and renderer module findings
|
||||||
|
- Generated/ignored: candidate PNGs and ranking JSON under `user://`
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: additive `-CameraFovValues`; scalar `-CameraFov` remains compatible
|
||||||
|
- Schema/format version: ranking schema remains version 1 with existing per-candidate FOV field
|
||||||
|
- Migration/compatibility: scalar sweeps retain existing candidate paths
|
||||||
|
- Consumers: M00 fidelity workflow
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: WMO-ready 8-second capture contract
|
||||||
|
- Blocks: Goldshire manifest framing decision
|
||||||
|
- External state: private build 12340 reference remains outside Git
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: joint-grid plan regression, real ready-scene sweep, comparator self-test, repository gates
|
||||||
|
- Fixtures: private Goldshire Inn reference
|
||||||
|
- Fidelity evidence: joint pitch/FOV ranking and human inspection
|
||||||
|
- Performance budget: offline diagnostic
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: PowerShell parameter
|
||||||
|
- Module specification: framing finding
|
||||||
|
- Data-flow diagram: FOV joins pose grid
|
||||||
|
- Sequence/state/dependency diagrams: unchanged
|
||||||
|
- Source map/status updates: operational guide
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `CameraFovValues`, `effectiveCameraFovValues`
|
||||||
|
- Simplest considered solution: one additional loop around the existing grid
|
||||||
|
- Rejected complexity/abstractions: generic optimizer
|
||||||
|
- Unavoidable complexity and justification: projection and pitch jointly affect framing
|
||||||
|
- Measured optimization evidence: bounded 1x5x3 grid
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: additive joint FOV grid, compatibility-preserving paths, plan regression, ready-scene 15-candidate ranking and human inspection
|
||||||
|
- Next: add approved landmark/region scoring before any manifest camera calibration
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: this work-package commit
|
||||||
|
- Results: numeric best FOV 62/yaw 10/pitch -25 at mean 0.078843 and ratio 0.667721 was visually rejected as grass-dominated; FOV 38/yaw 10/pitch -10 better matched building scale at mean 0.084220
|
||||||
|
- Remaining risks: full-frame metric does not preserve landmark framing; no manifest values were changed
|
||||||
|
- Documentation updated: `docs/CAMERA_POSE_SWEEP.md`, `docs/modules/world-renderer.md`
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-CAMERA-OCCLUDERS-001 — Camera occluder diagnostic
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-CAMERA-OCCLUDERS-001:sindo-main-codex:2026-07-13 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-CAMERA-OCCLUDERS-001:9d34a47 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-camera-occluders`
|
||||||
|
- Lease expires UTC: 2026-07-13
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Report scene-tree M2/WMO geometry that contains calibrated cameras or intersects each camera-to-target segment.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Changing placements, cameras, FOV, culling, or renderer behavior.
|
||||||
|
- Claiming full coverage of RenderingServer RID-only instances.
|
||||||
|
- Implementing a production visibility or collision service.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: `src/tools/probe_render_camera_occluders.gd`
|
||||||
|
- Shared/hotspots: renderer baseline documentation
|
||||||
|
- Generated/ignored: local JSON probe reports
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: headless diagnostic CLI only
|
||||||
|
- Schema/format version: report schema 1
|
||||||
|
- Migration/compatibility: none
|
||||||
|
- Consumers: M00 fidelity workflow
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: calibrated five-point manifest and streaming scene
|
||||||
|
- Blocks: placement versus camera-composition classification
|
||||||
|
- External state: local extracted/cache data
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: camera occluder probe, coordination and documentation gates
|
||||||
|
- Fixtures: five calibrated camera/target segments
|
||||||
|
- Fidelity evidence: scene-tree bounds at paired build 12340 viewpoints
|
||||||
|
- Performance budget: offline diagnostic
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: probe header and output fields
|
||||||
|
- Module specification: verification/source map
|
||||||
|
- Data-flow diagram: occluder probe flow
|
||||||
|
- Sequence/state/dependency diagrams: synchronous diagnostic; not applicable
|
||||||
|
- Source map/status updates: baseline findings
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `camera_containing_geometry`, `segment_intersecting_geometry`
|
||||||
|
- Simplest considered solution: transformed published AABBs
|
||||||
|
- Rejected complexity/abstractions: GPU visibility readback or new BVH
|
||||||
|
- Unavoidable complexity and justification: RID-only geometry cannot be named by this probe
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready
|
||||||
|
- Done: five-point scene-tree AABB probe, containment/intersection classification and documentation
|
||||||
|
- Next: integrator review; calibrate reproducible reference camera direction/FOV separately
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: branch HEAD
|
||||||
|
- Results: zero containing geometry at all five cameras; expected WMO/liquid target intersections; ADT/dense segments unobstructed
|
||||||
|
- Remaining risks: RID-only instances are excluded; manual reference direction and FOV were not recorded exactly
|
||||||
|
- Documentation updated: `docs/RENDER_BASELINE.md`, `docs/modules/world-renderer.md`
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-CAMERA-POSE-EVIDENCE-001 — Goldshire camera pose evidence
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-CAMERA-POSE-EVIDENCE-001:sindo-main-codex:2026-07-14 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-CAMERA-POSE-EVIDENCE-001:eca76c5 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-camera-pose-evidence`
|
||||||
|
- Lease expires UTC: 2026-07-14
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Produce coarse-to-fine yaw/pitch evidence for the build 12340 Goldshire Inn reference and classify whether framing dominates the paired-image gap.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Changing manifest camera defaults before human approval.
|
||||||
|
- Treating minimum perceptual error as proof of exact camera parity.
|
||||||
|
- Committing proprietary reference images or generated candidates.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: camera-pose evidence record
|
||||||
|
- Shared/hotspots: renderer baseline and module fidelity findings
|
||||||
|
- Generated/ignored: all sweep PNGs and JSON under `user://`
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: none
|
||||||
|
- Schema/format version: unchanged
|
||||||
|
- Migration/compatibility: none
|
||||||
|
- Consumers: M00 fidelity review
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: merged camera-pose sweep and local build 12340 reference
|
||||||
|
- Blocks: classification of the Goldshire WMO paired gap
|
||||||
|
- External state: `sources/OpenWCReferenceCheckpoints/goldshire_inn_large_wmo.jpg`
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: coarse and fine real sweeps, ranking inspection, repository gates
|
||||||
|
- Fixtures: private Goldshire Inn build 12340 screenshot
|
||||||
|
- Fidelity evidence: ranked mean perceptual error and changed-pixel ratio
|
||||||
|
- Performance budget: offline diagnostic only
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: unchanged
|
||||||
|
- Module specification: fidelity finding and remaining risk
|
||||||
|
- Data-flow diagram: unchanged
|
||||||
|
- Sequence/state/dependency diagrams: unchanged
|
||||||
|
- Source map/status updates: baseline evidence
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: none
|
||||||
|
- Simplest considered solution: use the merged bounded grid runner
|
||||||
|
- Rejected complexity/abstractions: optimizer or renderer changes
|
||||||
|
- Unavoidable complexity and justification: real images must be rendered for each candidate
|
||||||
|
- Measured optimization evidence: single pass per candidate
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: private reference dimensions verified; coarse, extended and limit sweeps completed; representative candidates inspected; runner failure handling hardened
|
||||||
|
- Next: investigate Goldshire Inn spatial/placement composition separately; do not change manifest yaw/pitch from this metric
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: this work-package commit
|
||||||
|
- Results: zero offset mean error 0.099632; coarse best (-10,-20) 0.077575; metric decreased monotonically to (0,-60) 0.063574/changed ratio 0.549556, while visual inspection showed only grass and no inn
|
||||||
|
- Remaining risks: full-frame color error cannot register a missing landmark; WMO placement/streaming at this checkpoint remains unresolved
|
||||||
|
- Documentation updated: `docs/CAMERA_POSE_SWEEP.md`, `docs/modules/world-renderer.md`
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-CAMERA-POSE-SWEEP-001 — Empirical camera pose sweep
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-CAMERA-POSE-SWEEP-001:sindo-main-codex:2026-07-14 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-CAMERA-POSE-SWEEP-001:657a1d8 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-camera-pose-sweep`
|
||||||
|
- Lease expires UTC: 2026-07-14
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Recover reproducible checkpoint framing by sweeping bounded yaw/pitch offsets and ranking paired-image error.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Changing runtime player camera defaults.
|
||||||
|
- Claiming an exact original-client camera pose from perceptual score alone.
|
||||||
|
- Adding computer-vision registration or image warping.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: camera-pose CLI and sweep orchestration
|
||||||
|
- Shared/hotspots: renderer baseline documentation
|
||||||
|
- Generated/ignored: local candidate PNGs and JSON reports
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: additive camera yaw/pitch offset and single-pass capture options; new PowerShell sweep command
|
||||||
|
- Schema/format version: capture report schema remains version 1 with additive camera-offset fields
|
||||||
|
- Migration/compatibility: existing capture commands retain zero offsets and two passes
|
||||||
|
- Consumers: M00 paired-fidelity workflow
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: build 12340 reference image, capture tool, paired-image comparator
|
||||||
|
- Blocks: reproducible manual-reference framing
|
||||||
|
- External state: original screenshots remain outside Git
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: capture dry-run offset regression, comparator self-test, bounded local sweep when a display/reference is available, repository gates
|
||||||
|
- Fixtures: one named M00 checkpoint
|
||||||
|
- Fidelity evidence: ranked yaw/pitch candidates with explicit human-approval requirement
|
||||||
|
- Performance budget: offline diagnostic; single-pass mode avoids redundant warm capture
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: capture and sweep usage
|
||||||
|
- Module specification: camera-pose data flow, verification and source map
|
||||||
|
- Data-flow diagram: updated pose-sweep flow
|
||||||
|
- Sequence/state/dependency diagrams: unchanged
|
||||||
|
- Source map/status updates: baseline workflow and findings
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `camera_yaw_offset_degrees`, `camera_pitch_offset_degrees`, `single_pass`
|
||||||
|
- Simplest considered solution: bounded grid over existing capture/comparator tools
|
||||||
|
- Rejected complexity/abstractions: feature matching, optimizer framework, image transforms
|
||||||
|
- Unavoidable complexity and justification: original-client camera angles are not exposed by tested APIs
|
||||||
|
- Measured optimization evidence: single-pass mode halves captures per candidate
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: additive capture offsets, single-pass calibration mode, bounded grid runner, ranked JSON contract, grid-plan regression and documentation
|
||||||
|
- Next: run a coarse-to-fine real sweep with the private build 12340 reference directory, then obtain human framing approval
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: this work-package commit
|
||||||
|
- Results: dry-run reported yaw 12.50/pitch -7.50; comparator self-test passed; a 3x2 plan produced six unique candidates; full seven-checkpoint M00 dry-run passed with default zero offsets
|
||||||
|
- Remaining risks: no private reference directory was available in this worktree, so real perceptual ranking and human approval remain external evidence
|
||||||
|
- Documentation updated: `docs/CAMERA_POSE_SWEEP.md`; renderer module verification, risk and source map
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-CAPTURE-SHUTDOWN-001 — Capture shutdown drain
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-CAPTURE-SHUTDOWN-001:sindo-main-codex:2026-07-14 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-CAPTURE-SHUTDOWN-001:8d4641a -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-capture-shutdown`
|
||||||
|
- Lease expires UTC: 2026-07-14
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Eliminate the reproducible capture-tool ObjectDB leak by completing owned threaded resource requests and draining deferred scene deletion before process exit.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Refactoring renderer resource ownership.
|
||||||
|
- Hiding genuine RID or worker-task leaks.
|
||||||
|
- Changing capture images, metrics, or streaming behavior.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: capture tool shutdown sequence
|
||||||
|
- Shared/hotspots: renderer baseline documentation
|
||||||
|
- Generated/ignored: verbose Godot logs
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: none
|
||||||
|
- Schema/format version: unchanged
|
||||||
|
- Migration/compatibility: none
|
||||||
|
- Consumers: M00 baseline runner
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: reproducible verbose leak diagnostic
|
||||||
|
- Blocks: clean M00 capture shutdown evidence
|
||||||
|
- External state: none
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: identical verbose dry-run before/after, M00 dry-run, repository gates
|
||||||
|
- Fixtures: ADT-boundary filtered capture
|
||||||
|
- Fidelity evidence: no visual behavior change
|
||||||
|
- Performance budget: blocking resource completion is restricted to shutdown; two SceneTree drain frames only
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: shutdown rationale comment
|
||||||
|
- Module specification: recovery/known-risk update
|
||||||
|
- Data-flow diagram: unchanged
|
||||||
|
- Sequence/state/dependency diagrams: shutdown sequence documented in baseline
|
||||||
|
- Source map/status updates: baseline evidence
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: none
|
||||||
|
- Simplest considered solution: await two SceneTree frames after `queue_free` and finish registered in-flight ResourceLoader requests during loader shutdown
|
||||||
|
- Rejected complexity/abstractions: resource registry or manual child traversal
|
||||||
|
- Unavoidable complexity and justification: deferred deletion requires frame drain
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: one leaked RefCounted reproduced; isolation attributed it to `StreamingWorldLoader`; active threaded tile request was confirmed as the retained object; all owned threaded resource registries now finish in-progress requests before clearing; two identical verbose ADT-boundary runs and the full M00 dry-run completed without ObjectDB leak diagnostics
|
||||||
|
- Next: integrator review and merge
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: this work-package commit
|
||||||
|
- Results: verbose filtered capture returned one report and zero `Leaked instance`/`ObjectDB instances leaked` lines on two consecutive runs; `run_render_baseline.ps1 -DryRun` passed all gates and seven checkpoints
|
||||||
|
- Remaining risks:
|
||||||
|
- Documentation updated: `docs/modules/world-renderer.md` shutdown sequence, ownership contract, recovery table and known-risk status
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
# M00-QAR-COORD-CALIBRATION-001 — Renderer coordinate calibration
|
# M00-QAR-COORD-CALIBRATION-001 — Renderer coordinate calibration
|
||||||
|
|
||||||
<!-- OPENWC_CLAIM:M00-QAR-COORD-CALIBRATION-001:sindo-main-codex:2026-07-13 -->
|
<!-- OPENWC_CLAIM:M00-QAR-COORD-CALIBRATION-001:sindo-main-codex:2026-07-13 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-COORD-CALIBRATION-001:dfc1031 -->
|
||||||
|
|
||||||
## Ownership
|
## Ownership
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-FINAL-PAIRED-EVIDENCE-001 — Final paired evidence audit
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-FINAL-PAIRED-EVIDENCE-001:sindo-main-codex:2026-07-14 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-FINAL-PAIRED-EVIDENCE-001:239cb24 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-final-paired-evidence`
|
||||||
|
- Lease expires UTC: 2026-07-14
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Produce one final WMO-ready paired report for all available build 12340 references and reconcile the remaining M00 acceptance gaps.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Achieving renderer parity inside M00.
|
||||||
|
- Calibrating unknown manual camera parameters.
|
||||||
|
- Marking the target DONE; only the milestone integrator may do so.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: paired-run exit handling and final evidence record
|
||||||
|
- Shared/hotspots: renderer baseline/module findings
|
||||||
|
- Generated/ignored: final captures and reports under `user://`
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: visual comparison exit 0/1 both count as completed report generation
|
||||||
|
- Schema/format version: unchanged
|
||||||
|
- Migration/compatibility: comparator infrastructure errors remain fatal
|
||||||
|
- Consumers: M00 integrator
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: merged region diagnostic and five private reference images
|
||||||
|
- Blocks: integrator decision on M00 completion
|
||||||
|
- External state: private images remain outside Git
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: complete paired baseline run, report audit, repository gates
|
||||||
|
- Fixtures: five build 12340 references
|
||||||
|
- Fidelity evidence: cold/warm comparison metrics and human gap classification
|
||||||
|
- Performance budget: existing M00 capture budgets
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: PowerShell comparison step semantics
|
||||||
|
- Module specification: final evidence status
|
||||||
|
- Data-flow diagram: unchanged
|
||||||
|
- Sequence/state/dependency diagrams: unchanged
|
||||||
|
- Source map/status updates: baseline acceptance summary
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `Invoke-GodotComparisonStep`
|
||||||
|
- Simplest considered solution: allow only comparator exit codes 0 and 1
|
||||||
|
- Rejected complexity/abstractions: suppressing all process failures
|
||||||
|
- Unavoidable complexity and justification: threshold exceedance is evidence, not infrastructure failure
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: paired-run exit contract fixed; full baseline and visual capture completed; ten pairs audited; final acceptance document written
|
||||||
|
- Next: integrator decides animated/sky reference policy and GUI RID-risk disposition
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: this work-package commit
|
||||||
|
- Results: compared=10, failed=10, missing=0; mean error 0.066892..0.176952; cold/warm gaps stable; full workflow returned success with threshold evidence preserved
|
||||||
|
- Remaining risks: no build 12340 animated-M2 or sky-transition reference; GUI renderer RID/resources still reported at exit
|
||||||
|
- Documentation updated: `docs/M00_FINAL_PAIRED_EVIDENCE.md`, `docs/modules/world-renderer.md`
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-FOV-SWEEP-001 — Empirical camera FOV sweep
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-FOV-SWEEP-001:sindo-main-codex:2026-07-14 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-FOV-SWEEP-001:f548507 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-fov-sweep`
|
||||||
|
- Lease expires UTC: 2026-07-14
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Support a bounded empirical FOV sweep when build 12340 does not expose a readable camera FOV CVar.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Claiming exact WoW FOV from a single manually aimed screenshot.
|
||||||
|
- Changing runtime player camera defaults.
|
||||||
|
- Automating yaw/pitch registration or image warping.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: FOV/filter CLI additions in checkpoint tools
|
||||||
|
- Shared/hotspots: renderer baseline documentation
|
||||||
|
- Generated/ignored: local sweep PNGs and JSON reports
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: additive `--camera-fov` and comparator `--only` CLI options
|
||||||
|
- Schema/format version: unchanged
|
||||||
|
- Migration/compatibility: existing commands retain defaults
|
||||||
|
- Consumers: M00 fidelity workflow
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: build 12340 reference JPG and paired-image comparator
|
||||||
|
- Blocks: empirical projection ranking
|
||||||
|
- External state: original screenshots remain outside Git
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: synthetic comparator test, capture dry-run with override, bounded real sweep
|
||||||
|
- Fixtures: `elwynn_adt_boundary` reference
|
||||||
|
- Fidelity evidence: ranked perceptual metrics with manual-direction limitation
|
||||||
|
- Performance budget: offline diagnostic
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: CLI headers
|
||||||
|
- Module specification: verification/source map if needed
|
||||||
|
- Data-flow diagram: FOV sweep flow
|
||||||
|
- Sequence/state/dependency diagrams: not applicable
|
||||||
|
- Source map/status updates: baseline findings
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `camera_fov_override`, `only_filter`
|
||||||
|
- Simplest considered solution: reuse capture and comparator
|
||||||
|
- Rejected complexity/abstractions: computer vision registration framework
|
||||||
|
- Unavoidable complexity and justification: multiple captures are required because client FOV is inaccessible
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready
|
||||||
|
- Done: client FOV access audit, capture override, comparator filter/regression, dedicated-camera ownership fix and bounded sweep
|
||||||
|
- Next: integrator review; obtain reproducible yaw/pitch/zoom metadata before changing normative FOV
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: branch HEAD
|
||||||
|
- Results: corrected ranking 26=0.079588, 38=0.079633, 50=0.084353, 62=0.088360, 86=0.097993; plateau is inconclusive
|
||||||
|
- Remaining risks: build 12340 FOV is inaccessible through tested APIs; manual direction/framing dominates metrics
|
||||||
|
- Documentation updated: `docs/RENDER_BASELINE.md`, `docs/modules/world-renderer.md`
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-GUI-RID-SHUTDOWN-001 — GUI capture RID shutdown
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-GUI-RID-SHUTDOWN-001:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-GUI-RID-SHUTDOWN-001:f19c0c4 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-gui-rid-shutdown`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Identify ownership of GUI render-baseline shutdown leaks and apply the smallest regression-covered fix that lets queued world resources release before engine teardown.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Renderer architecture decomposition.
|
||||||
|
- Hiding or filtering Godot leak diagnostics.
|
||||||
|
- Changing M00 status, Evidence or `OPENWC_TARGET_DONE`.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: capture shutdown sequencing and its regression diagnostic
|
||||||
|
- Shared/hotspots: `src/tools/capture_render_checkpoints.gd`, renderer module shutdown documentation
|
||||||
|
- Generated/ignored: GUI capture output and verbose logs under `user://`
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: unchanged
|
||||||
|
- Schema/format version: unchanged
|
||||||
|
- Migration/compatibility: capture images and report schema remain unchanged
|
||||||
|
- Consumers: M00 baseline runner and milestone integrator
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: merged seven-reference evidence audit
|
||||||
|
- Blocks: integrator disposition of the final GUI renderer leak risk
|
||||||
|
- External state: proprietary references are not required for the focused shutdown regression
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: focused GUI single-checkpoint capture with verbose shutdown, headless project load, manifest/self-tests, repository gates
|
||||||
|
- Fixtures: existing non-proprietary render-baseline manifest and local extracted corpus
|
||||||
|
- Fidelity evidence: no visual behavior change; focused PNG hash/report remains valid
|
||||||
|
- Performance budget: shutdown-only change
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: shutdown method semantics if introduced
|
||||||
|
- Module specification: shutdown ownership and observed leak status
|
||||||
|
- Data-flow diagram: unchanged
|
||||||
|
- Sequence/state/dependency diagrams: update shutdown sequence only if behavior changes
|
||||||
|
- Source map/status updates: capture tool if changed
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `_release_runtime_caches_for_shutdown`, `_free_detached_node_cache`, `_queue_free_streamed_node`
|
||||||
|
- Simplest considered solution: explicitly release capture-owned scene references and drain deferred deletion
|
||||||
|
- Rejected complexity/abstractions: global RID registry or suppressed engine diagnostics
|
||||||
|
- Unavoidable complexity and justification: async streaming jobs must finish before resource ownership can drain
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: reproduced the focused leak; assigned detached prototype/resource caches and empty liquid roots to explicit owners; added a headless regression; verified zero Node/resource/RID leak lines in focused and seven-checkpoint GUI captures
|
||||||
|
- Next: integrator review and disposition of the residual engine-level zero-reference `RefCounted` diagnostic
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: this work-package commit
|
||||||
|
- Results: before the fix the focused capture retained 6 mesh, 6 material, 4 shader, 6 texture, 6 instance and RenderingDevice RIDs (30 resources); after the fix focused and seven-checkpoint captures retained none
|
||||||
|
- Remaining risks: D3D12 descriptor fallback remains unrelated; Godot can report a timing-dependent anonymous `RefCounted` whose reference count is already zero, without retained Node/resource/RID ownership
|
||||||
|
- Documentation updated: `RENDER.md`, `docs/modules/world-renderer.md`, `docs/M00_FINAL_PAIRED_EVIDENCE.md`; existing renderer shutdown sequence updated, no new diagram required
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-INTEGRATOR-CLOSEOUT-001 — M00 milestone closeout
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-INTEGRATOR-CLOSEOUT-001:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_HANDOFF:READY:M00-QAR-INTEGRATOR-CLOSEOUT-001:ba81098 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-integrator-closeout`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: sindo-main-codex, assigned by the user on 2026-07-13
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Audit merged M00 work packages, refresh final Evidence, close the milestone and activate M01.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Change renderer behavior or compatibility claims.
|
||||||
|
- Start M01 implementation.
|
||||||
|
- Commit proprietary references or generated capture output.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: M00/M01 target status and final M00 Evidence
|
||||||
|
- Shared/hotspots: `targets/README.md`, `targets/DEVELOPMENT_ROADMAP.md`, completed M00 claims
|
||||||
|
- Generated/ignored: `user://` post-merge reports
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: unchanged
|
||||||
|
- Schema/format version: unchanged
|
||||||
|
- Migration/compatibility: none
|
||||||
|
- Consumers: milestone integrator and M01 work packages
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: merged M00 PRs #1 through #15 and final paired evidence
|
||||||
|
- Blocks: M01 activation
|
||||||
|
- External state: private reference images remain outside Git; their hashes and metrics are already recorded
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: post-merge render baseline dry-run, coordination gate, documentation gate
|
||||||
|
- Fixtures: seven-checkpoint non-proprietary manifest and recorded private-reference hashes/metrics
|
||||||
|
- Fidelity evidence: closeout preserves the explicit non-parity classification in `docs/M00_FINAL_PAIRED_EVIDENCE.md`
|
||||||
|
- Performance budget: no runtime change
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: unchanged
|
||||||
|
- Module specification: unchanged
|
||||||
|
- Data-flow diagram: unchanged
|
||||||
|
- Sequence/state/dependency diagrams: unchanged
|
||||||
|
- Source map/status updates: target index, roadmap current state and M00 Evidence
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: none
|
||||||
|
- Simplest considered solution: status and Evidence-only integrator patch
|
||||||
|
- Rejected complexity/abstractions: new closeout tooling for a one-time milestone transition
|
||||||
|
- Unavoidable complexity and justification: none
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: verified all M00 PRs and merge commits, refreshed final Evidence, closed M00, activated M01 and passed transition gates
|
||||||
|
- Next: review and merge the closeout PR before starting an M01 implementation claim
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: `ba81098`
|
||||||
|
- Results: exactly one ACTIVE target (M01); M00 DONE marker accepted; post-merge baseline, comparator self-test, coordination and documentation gates passed
|
||||||
|
- Remaining risks: documented renderer fidelity gaps and D3D12 fallback continue beyond M00
|
||||||
|
- Documentation updated: target status/index, development-roadmap current state and final M00 Evidence
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-LANDMARK-REGION-DIFF-001 — Landmark-region visual diff
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-LANDMARK-REGION-DIFF-001:sindo-main-codex:2026-07-14 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-LANDMARK-REGION-DIFF-001:3d90c6d -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-landmark-region-diff`
|
||||||
|
- Lease expires UTC: 2026-07-14
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Rank camera candidates inside an approved common screen region so unrelated grass/sky coverage cannot dominate landmark framing.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Automatic feature detection or image warping.
|
||||||
|
- Different crops for reference and candidate.
|
||||||
|
- Changing manifest camera values without human approval.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: comparator common-region option and sweep pass-through
|
||||||
|
- Shared/hotspots: camera-pose documentation and renderer fidelity findings
|
||||||
|
- Generated/ignored: local ROI sweep images/reports
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: additive comparator `--region x,y,width,height` and sweep `-ComparisonRegion`
|
||||||
|
- Schema/format version: report/ranking schema remains version 1 with additive region metadata
|
||||||
|
- Migration/compatibility: omitted region preserves full-frame behavior
|
||||||
|
- Consumers: M00 paired camera calibration
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: ready-scene joint pitch/FOV sweep
|
||||||
|
- Blocks: landmark-weighted Goldshire framing decision
|
||||||
|
- External state: private build 12340 reference
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: comparator synthetic ROI regression, invalid-bound regression, sweep plan, bounded real ROI sweep, repository gates
|
||||||
|
- Fixtures: synthetic 2x2 images and private Goldshire reference
|
||||||
|
- Fidelity evidence: facade-region ranking plus human inspection
|
||||||
|
- Performance budget: region comparison visits only selected pixels
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: comparator usage and PowerShell parameter
|
||||||
|
- Module specification: ROI finding
|
||||||
|
- Data-flow diagram: approved region into comparator
|
||||||
|
- Sequence/state/dependency diagrams: unchanged
|
||||||
|
- Source map/status updates: camera-pose guide
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `ComparisonRegion`, `comparison_region`
|
||||||
|
- Simplest considered solution: one common integer rectangle
|
||||||
|
- Rejected complexity/abstractions: masks, feature detectors, separate movable crops
|
||||||
|
- Unavoidable complexity and justification: full-frame color error is biased by large terrain regions
|
||||||
|
- Measured optimization evidence: bounded pixel loop
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: common ROI parser/validation/reporting, synthetic inclusion/exclusion regression, sweep pass-through, 15-candidate Goldshire rescoring and human inspection
|
||||||
|
- Next: define explicit approved landmark coordinates or mask; do not calibrate manifest from the common rectangle alone
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: this work-package commit
|
||||||
|
- Results: ROI [300,100,1400,650] ranked FOV 38/yaw 10/pitch -15 first at mean 0.081777 and ratio 0.697185; visually the facade remains oversized and cropped
|
||||||
|
- Remaining risks: rectangle includes non-semantic road/terrain pixels and cannot prove landmark alignment
|
||||||
|
- Documentation updated: `docs/CAMERA_POSE_SWEEP.md`, `docs/modules/world-renderer.md`
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
# M00-QAR-TERRAIN-HEIGHT-001 — Terrain height diagnostic
|
# M00-QAR-TERRAIN-HEIGHT-001 — Terrain height diagnostic
|
||||||
|
|
||||||
<!-- OPENWC_CLAIM:M00-QAR-TERRAIN-HEIGHT-001:sindo-main-codex:2026-07-13 -->
|
<!-- OPENWC_CLAIM:M00-QAR-TERRAIN-HEIGHT-001:sindo-main-codex:2026-07-13 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-TERRAIN-HEIGHT-001:f8538ba -->
|
||||||
|
|
||||||
## Ownership
|
## Ownership
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# M00-QAR-TILE-OWNERSHIP-001 — Waterfall terrain tile ownership
|
# M00-QAR-TILE-OWNERSHIP-001 — Waterfall terrain tile ownership
|
||||||
|
|
||||||
<!-- OPENWC_CLAIM:M00-QAR-TILE-OWNERSHIP-001:sindo-main-codex:2026-07-13 -->
|
<!-- OPENWC_CLAIM:M00-QAR-TILE-OWNERSHIP-001:sindo-main-codex:2026-07-13 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-TILE-OWNERSHIP-001:2306200 -->
|
||||||
|
|
||||||
## Ownership
|
## Ownership
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# M00-QAR-VISUAL-DIFF-001 — Renderer checkpoint visual diff
|
# M00-QAR-VISUAL-DIFF-001 — Renderer checkpoint visual diff
|
||||||
|
|
||||||
<!-- OPENWC_CLAIM:M00-QAR-VISUAL-DIFF-001:sindo-main-codex:2026-07-13 -->
|
<!-- OPENWC_CLAIM:M00-QAR-VISUAL-DIFF-001:sindo-main-codex:2026-07-13 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-VISUAL-DIFF-001:19df5b7 -->
|
||||||
|
|
||||||
## Ownership
|
## Ownership
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
# M00-QAR-WMO-READINESS-001 — Goldshire WMO readiness
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M00-QAR-WMO-READINESS-001:sindo-main-codex:2026-07-14 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M00-QAR-WMO-READINESS-001:5092995 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M00
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m00-wmo-readiness`
|
||||||
|
- Lease expires UTC: 2026-07-14
|
||||||
|
- Integrator: milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Prevent pose calibration against an under-loaded WMO scene and replace invalid Goldshire evidence with a baseline-ready comparison.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Changing runtime streaming budgets.
|
||||||
|
- Claiming all WMO queues must globally drain before a checkpoint.
|
||||||
|
- Changing manifest camera pose without valid paired evidence.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: pose-sweep readiness default and Goldshire timing evidence
|
||||||
|
- Shared/hotspots: renderer baseline/module fidelity findings
|
||||||
|
- Generated/ignored: timing and sweep images under `user://`
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: pose sweep default wait becomes 8 seconds, matching the M00 manifest
|
||||||
|
- Schema/format version: unchanged
|
||||||
|
- Migration/compatibility: explicit `-WaitSeconds` remains supported
|
||||||
|
- Consumers: M00 paired-fidelity workflow
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: Goldshire pose evidence and private build 12340 reference
|
||||||
|
- Blocks: valid Goldshire camera-pose ranking
|
||||||
|
- External state: private reference and generated captures remain outside Git
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: 2/8/15 second timing audit, ready-scene 3x3 pose sweep, baseline dry-run, repository gates
|
||||||
|
- Fixtures: private Goldshire Inn screenshot
|
||||||
|
- Fidelity evidence: visual WMO presence plus streaming snapshot and paired metrics
|
||||||
|
- Performance budget: offline diagnostic
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: PowerShell default
|
||||||
|
- Module specification: corrected readiness/fidelity finding
|
||||||
|
- Data-flow diagram: readiness precondition
|
||||||
|
- Sequence/state/dependency diagrams: unchanged
|
||||||
|
- Source map/status updates: camera-pose operational guide
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: none
|
||||||
|
- Simplest considered solution: reuse the manifest's measured 8-second stabilization default
|
||||||
|
- Rejected complexity/abstractions: global queue barrier that would include unrelated distant work
|
||||||
|
- Unavoidable complexity and justification: WMO publication is asynchronous
|
||||||
|
- Measured optimization evidence: 2/8/15 second snapshots
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: timing audit invalidated the 2-second evidence; sweep default now matches the 8-second manifest; ready-scene 3x3 grid and human inspection completed
|
||||||
|
- Next: jointly refine negative pitch and FOV around the ready-scene Goldshire candidate
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: this work-package commit
|
||||||
|
- Results: WMO instances 9/113/328 at 2/8/15 seconds; inn absent at 2 and visible at 8/15; ready grid improved mean error from 0.101402 at (0,0) to 0.087952 at (10,-10)
|
||||||
|
- Remaining risks: global WMO queues still contain unrelated work; best pitch is at the tested boundary and building scale indicates unresolved FOV/framing
|
||||||
|
- Documentation updated: `docs/CAMERA_POSE_SWEEP.md`, `docs/modules/world-renderer.md`
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
# M01-FND-COORD-BOUNDARY-GATE-001 — Coordinate conversion boundary gate
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M01-FND-COORD-BOUNDARY-GATE-001:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M01-FND-COORD-BOUNDARY-GATE-001:c8e99f2 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M01
|
||||||
|
- Program: FND/QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m01-coordinate-boundary-gate`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: M01 milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Route remaining GDScript world/tile axis conversions through `CoordinateMapper`
|
||||||
|
and add a repository-wide gate that rejects new manual world-center, axis-swap
|
||||||
|
or world-to-ADT tile formulas outside explicit contract/native-oracle boundaries.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Rewriting model-local M2/WMO vertex or placement orientation transforms.
|
||||||
|
- Moving renderer distance/LOD geometry out of Godot space.
|
||||||
|
- Replacing the native parser boundary with GDScript calls from worker threads.
|
||||||
|
- Changing coordinate contract semantics, renderer radii or cache formats.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: `src/tools/verify_coordinate_conversion_boundaries.gd`
|
||||||
|
- Shared/hotspots: `src/domain/coordinates/coordinate_mapper.gd`, coordinate
|
||||||
|
tests/docs/ADR, streamer/player/sky/terrain-probe consumers,
|
||||||
|
`docs/CODING_STANDARD.md`, this claim
|
||||||
|
- Generated/ignored: Godot import metadata, extracted assets and renderer caches
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Additive mapper methods: Godot position to ADT tile/local and ADT tile/local
|
||||||
|
to Godot position
|
||||||
|
- Native exception: one formula definition in `src/native/src/wow_chunk_reader.h`;
|
||||||
|
ADT/WDT loaders may call it but may not define copies
|
||||||
|
- Oracle exception: `verify_render_coordinate_calibration.gd` retains one
|
||||||
|
independent M00 formula to detect common-mode mapper regressions
|
||||||
|
- Model-local transforms are outside the world-coordinate gate
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: coordinate contract v2 and M01 seams through `7c64e8d`
|
||||||
|
- Blocks: M01 coordinate-centralization exit criterion and milestone evidence audit
|
||||||
|
- External state: no dependency or proprietary input
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: conversion-boundary gate, mapper/golden fixtures, streaming focus,
|
||||||
|
identities, renderer calibration/manifest and repository gates
|
||||||
|
- Fixtures: Godot/ADT tile center, local offsets and exact boundaries
|
||||||
|
- Fidelity evidence: existing build-12340 points and raw ADT/server fixture remain unchanged
|
||||||
|
- Performance budget: mapper allocations occur only at adapter/update boundaries;
|
||||||
|
renderer distance/LOD math remains in Godot scalars
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: new mapper methods
|
||||||
|
- Module specification/ADR: boundary APIs, allowed exceptions and gate behavior
|
||||||
|
- Coding standard: mandatory review rule for cross-space conversions
|
||||||
|
- Data-flow diagram: existing coordinate module diagram updated for direct adapters
|
||||||
|
- State/sequence diagrams: unchanged; pure synchronous mapping
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `godot_to_adt_tile`, `godot_to_adt_tile_local`,
|
||||||
|
`adt_tile_local_to_godot`, `verify_coordinate_conversion_boundaries`
|
||||||
|
- Simplest considered solution: extend the existing mapper and scan source text
|
||||||
|
for narrow high-signal formula signatures
|
||||||
|
- Rejected complexity/abstractions: generic coordinate algebra framework,
|
||||||
|
native-to-GDScript calls on parser workers and a broad numeric-literal ban
|
||||||
|
- Unavoidable complexity and justification: one native boundary and one
|
||||||
|
independent test oracle must remain explicit to avoid worker coupling and common-mode tests
|
||||||
|
- Measured optimization evidence: existing renderer distance/LOD scalar math is unchanged
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: mapper extensions, consumer migration, repository gate, review rule,
|
||||||
|
integrated renderer gate, regression fixtures and documentation
|
||||||
|
- Next: integrator review, merge and M01 completion-evidence audit
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: `47dec6c`
|
||||||
|
- Branch: `work/sindo-main-codex/m01-coordinate-boundary-gate`
|
||||||
|
- Outcome: all audited GDScript world/tile conversions in sky, streaming,
|
||||||
|
player spawn/ground sampling and terrain probes route through typed
|
||||||
|
`CoordinateMapper` boundaries. A repository scan rejects new manual
|
||||||
|
world-center, legacy axis-conversion, world-to-tile, tile-local and
|
||||||
|
tile-center formulas.
|
||||||
|
- Contract/schema: additive `godot_to_adt_tile`,
|
||||||
|
`godot_to_adt_tile_local` and `adt_tile_local_to_godot` APIs; no persisted
|
||||||
|
format, cache version or renderer radius changes.
|
||||||
|
- Verification: CoordinateConversionBoundaries PASS (`83` files, one native
|
||||||
|
boundary, one independent oracle, four consumers, six classifier guards);
|
||||||
|
CoordinateMapper PASS (`5` golden points, `8` tile boundaries, `2` raw MCNK,
|
||||||
|
`5` yaw cases); renderer calibration PASS (`5` points, maximum error
|
||||||
|
`0.000015`); renderer manifest PASS (`7/7/7`); unified render baseline dry-run,
|
||||||
|
headless project load, runtime cache shutdown, coordination, documentation
|
||||||
|
and whitespace gates passed.
|
||||||
|
- GUI regression: final ADT-boundary capture compared `2/2`, missing `0`,
|
||||||
|
failed `0` (cold mean `0.0002324`, changed ratio `0.0013741`; warm mean
|
||||||
|
`0.0000226`, changed ratio `0.0001285`). Earlier full capture produced all
|
||||||
|
`14` images; `11/14` met the strict changed-pixel threshold. The three
|
||||||
|
threshold-only differences retained low mean error (`<= 0.00622`) and were
|
||||||
|
visually classified as cold M2 readiness and liquid animation phase, with
|
||||||
|
unchanged camera, geometry alignment, area and streaming focus.
|
||||||
|
- Fidelity: existing build-12340 calibrated points, raw ADT fixture and server
|
||||||
|
spawn fixture remain unchanged. Native parser workers retain exactly one
|
||||||
|
formula in `wow_chunk_reader.h`; the calibration verifier retains exactly one
|
||||||
|
independent formula so mapper and oracle cannot share a common-mode defect.
|
||||||
|
- Rebuild: none. Local ignored extracted assets/native binary/cache junctions
|
||||||
|
were used for runtime checks and are not part of the commit.
|
||||||
|
- Remaining risks: source scanning intentionally recognizes narrow high-signal
|
||||||
|
formula signatures rather than parsing arbitrary algebra; native formula
|
||||||
|
parity still relies on calibration/raw fixtures. Model-local M2/WMO basis
|
||||||
|
transforms and Godot-space LOD distance math are intentionally outside scope.
|
||||||
|
- Recommended merge order: after `7c64e8d`; this package closes the remaining
|
||||||
|
M01 manual axis-conversion checklist item, but only the milestone integrator
|
||||||
|
may update target Evidence/status or set `OPENWC_TARGET_DONE`.
|
||||||
|
- Documentation: coding review rule, coordinate-mapping module API/input-output/
|
||||||
|
data-flow/capability/risk/source-map sections, ADR 0001 and `RENDER.md` were
|
||||||
|
updated. Existing pure synchronous data-flow diagram remains authoritative;
|
||||||
|
no state/sequence diagram changed.
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
# M01-FND-COORD-TILE-AXIS-002 — ADT filename axis correction
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M01-FND-COORD-TILE-AXIS-002:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M01-FND-COORD-TILE-AXIS-002:c8e99f2 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M01
|
||||||
|
- Program: FND
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m01-coordinate-tile-axis-fix`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: M01 milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Correct the additive coordinate contract so `AdtTileCoordinate(tile_x, tile_y)`
|
||||||
|
matches actual `Map_tileX_tileY.adt` filenames and MCNK `indexX/indexY` axes.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Migrating renderer/native consumers.
|
||||||
|
- Changing canonical, server, Godot or ADT placement position arithmetic.
|
||||||
|
- Adding server-spawn fixtures or `StreamingFocus`.
|
||||||
|
- Committing proprietary ADT bytes.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: `src/domain/coordinates/coordinate_mapper.gd`,
|
||||||
|
`src/domain/coordinates/adt_chunk_coordinate.gd`,
|
||||||
|
`src/tools/verify_coordinate_mapper.gd`
|
||||||
|
- Shared/hotspots: `docs/adr/0001-canonical-world-coordinates.md`,
|
||||||
|
`docs/modules/coordinate-mapping.md`, this claim
|
||||||
|
- Generated/ignored: local extracted ADT and Godot import metadata
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: method names unchanged; corrected tile/chunk axis semantics
|
||||||
|
- Schema/format version: coordinate contract version increments from 1 to 2
|
||||||
|
- Migration/compatibility: no released consumer exists; contract was merged but
|
||||||
|
not yet consumed, so correction precedes consumer rollout
|
||||||
|
- Consumers: future renderer, network, gameplay and server-data adapters
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: merged `M01-FND-COORDS-001` at `1c0dfc7`
|
||||||
|
- Blocks: coordinate golden fixtures and all coordinate consumers
|
||||||
|
- External state: private `Azeroth_31_49.adt` used read-only for evidence
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: coordinate mapper probe, M00 calibration, manifest, documentation
|
||||||
|
and coordination gates
|
||||||
|
- Fixtures: build 12340 Elwynn point must resolve to `Azeroth_31_49.adt`;
|
||||||
|
MCNK `(0,0)` and `(15,15)` establish chunk-axis direction
|
||||||
|
- Fidelity evidence: local ADT SHA-256
|
||||||
|
`18185B5FAC9566D9C57A9C19ABD75F108370D1795639B6077167C0EFD3672FAE`;
|
||||||
|
OpenRealm independently indexes filename X from world Y and filename Y from world X
|
||||||
|
- Performance budget: unchanged constant-time scalar arithmetic
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: corrected tile/chunk direction comments
|
||||||
|
- Module specification: contract version, formulas, capability evidence and risk
|
||||||
|
- Data-flow diagram: corrected filename/chunk axes
|
||||||
|
- ADR: corrected decision and evidence
|
||||||
|
- Sequence/state diagrams: not applicable; pure synchronous mapper
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: none
|
||||||
|
- Simplest considered solution: swap the two filename formulas and corresponding
|
||||||
|
local/chunk ownership calculations
|
||||||
|
- Rejected complexity/abstractions: compatibility flag for a contract with no consumers
|
||||||
|
- Unavoidable complexity and justification: ADT filename axes differ from client X/Y order
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: raw-corpus diagnosis, filename/local/chunk axis correction, contract
|
||||||
|
version 2 documentation and regression fixtures
|
||||||
|
- Next: integrator review and merge before coordinate consumer work
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: `a7072e3`
|
||||||
|
- Branch: `work/sindo-main-codex/m01-coordinate-tile-axis-fix`
|
||||||
|
- Outcome: `tile_x/chunk_x` now grow east from canonical Y and
|
||||||
|
`tile_y/chunk_y` grow south from canonical X; public method names unchanged
|
||||||
|
- Contract/schema: coordinate contract version 2; no persisted format, cache or migration
|
||||||
|
- Verification: coordinate mapper PASS (5 build-12340 points, 8 boundaries,
|
||||||
|
2 recorded raw MCNK origins, 5 yaw cases); M00 calibration PASS with maximum
|
||||||
|
error `0.000015`; renderer manifest, coordination, documentation, dependency
|
||||||
|
and whitespace checks passed
|
||||||
|
- Fidelity: private `Azeroth_31_49.adt` hash and raw MCNK origins recorded in
|
||||||
|
ADR 0001; OpenRealm independently uses the same filename-axis ordering
|
||||||
|
- Rebuild: none; private/generated prerequisites remain outside Git
|
||||||
|
- Remaining risks: server spawn fixture, native placement conversion and
|
||||||
|
MDDF/MODF Euler semantics remain subsequent M01 packages
|
||||||
|
- Recommended merge order: merge this correction before golden fixture or consumer migration
|
||||||
|
- Documentation: ADR 0001 and coordinate-mapping module data flow, contract
|
||||||
|
version, capability evidence and known risks updated
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
# M01-FND-COORDS-001 — Canonical coordinate contracts
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M01-FND-COORDS-001:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M01-FND-COORDS-001:c8e99f2 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M01
|
||||||
|
- Program: FND
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m01-coordinate-mapper`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: M01 milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Introduce scene-free value objects for canonical WoW, server, ADT placement,
|
||||||
|
ADT tile/chunk/local and Godot world coordinate spaces, plus the single pure
|
||||||
|
`CoordinateMapper` contract for position and world-yaw conversions.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Migrating `StreamingWorldLoader`, native parsers, sky, player or renderer code.
|
||||||
|
- Defining model-specific MDDF/MODF Euler rotation corrections.
|
||||||
|
- Introducing `StreamingFocus`, typed IDs or a test framework dependency.
|
||||||
|
- Claiming visual parity from arithmetic round trips.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: `src/domain/coordinates/**`, `src/tools/verify_coordinate_mapper.gd`,
|
||||||
|
`docs/modules/coordinate-mapping.md`, `docs/adr/0001-canonical-world-coordinates.md`
|
||||||
|
- Shared/hotspots: `docs/modules/README.md`, this claim
|
||||||
|
- Generated/ignored: Godot import metadata and local test output
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: immutable coordinate value objects and pure mapper methods
|
||||||
|
- Schema/format version: no persisted format; contract version 1 in module docs
|
||||||
|
- Migration/compatibility: additive contract; existing renderer conversions remain
|
||||||
|
unchanged until a later consumer migration package
|
||||||
|
- Consumers: future renderer, network, gameplay and server-data adapters
|
||||||
|
- Rollout order: contract and fixtures first, then native/parser and renderer consumers
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: merged M00 build 12340 coordinate calibration evidence
|
||||||
|
- Blocks: M01 renderer coordinate migration and `StreamingFocus`
|
||||||
|
- External state: no proprietary inputs; reference formulas are source-only evidence
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: headless coordinate contract probe, headless project load,
|
||||||
|
coordination and documentation gates
|
||||||
|
- Fixtures: five build 12340 camera points, ADT map center/edge/boundary points,
|
||||||
|
server/ADT/Godot round trips and yaw normalization cases
|
||||||
|
- Fidelity evidence: M00 observed build 12340 positions plus independent
|
||||||
|
OpenRealm/WoWee and TrinityCore grid formulas
|
||||||
|
- Performance budget: constant-time scalar arithmetic with no allocation beyond result values
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: every public value object and mapper method
|
||||||
|
- Module specification: purpose, public API, inputs/outputs, ownership, errors and source map
|
||||||
|
- Data-flow diagram: server/ADT/canonical/Godot mappings
|
||||||
|
- Dependency diagram: canonical contract consumers and forbidden scene dependency
|
||||||
|
- Sequence/state diagrams: not applicable; mapper is synchronous and stateless
|
||||||
|
- ADR: coordinate axes, units, tile indexing and compatibility rollout
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `CanonicalWowWorldPosition`, `ServerWorldPosition`,
|
||||||
|
`AdtPlacementPosition`, `AdtTileCoordinate`, `AdtChunkCoordinate`,
|
||||||
|
`AdtTileLocalPosition`, `GodotWorldPosition`, `WorldYaw`, `CoordinateMapper`
|
||||||
|
- Simplest considered solution: scalar immutable value objects and one pure mapper
|
||||||
|
- Rejected complexity/abstractions: generic vector-space framework, matrices,
|
||||||
|
dependency injection and a third-party test framework
|
||||||
|
- Unavoidable complexity and justification: distinct source spaces prevent silent axis swaps
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: repository/reference audit, ADR, immutable value objects, pure mapper,
|
||||||
|
build 12340/boundary/yaw fixtures, module specification and repository gates
|
||||||
|
- Next: integrator review and merge before renderer/native consumer migration
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: `f45695c`
|
||||||
|
- Branch: `work/sindo-main-codex/m01-coordinate-mapper`
|
||||||
|
- Outcome: additive contract for canonical/server/ADT/Godot positions, ADT
|
||||||
|
tile/chunk/local ownership and world-facing yaw; no existing consumer changed
|
||||||
|
- Public contracts: contract version 1 documented in
|
||||||
|
`docs/modules/coordinate-mapping.md`; no persisted schema or cache change
|
||||||
|
- Verification: coordinate mapper PASS (5 golden points, 8 tile boundaries,
|
||||||
|
5 yaw cases); M00 coordinate calibration PASS (5 points, maximum error
|
||||||
|
`0.000015`); renderer manifest, coordination, documentation, dependency and
|
||||||
|
whitespace checks passed; headless project load completed with expected
|
||||||
|
missing proprietary-data diagnostics in the isolated worktree
|
||||||
|
- Fidelity: observed build 12340 positions match within `0.002` yard; formulas
|
||||||
|
cross-checked against TrinityCore, OpenRealm and WoWee; visual parity is not claimed
|
||||||
|
- Migration/rebuild: none for this additive package; consumers migrate only
|
||||||
|
after merge and must preserve renderer checkpoints
|
||||||
|
- Remaining risks: native loaders and renderer still use manual conversions;
|
||||||
|
MDDF/MODF Euler mapping is intentionally unresolved; server-spawn integration
|
||||||
|
and finite-value adapter validation remain later M01 packages
|
||||||
|
- Recommended merge order: this contract first, coordinate fixtures/server-spawn
|
||||||
|
audit second, renderer/native consumers third, manual-conversion search gate last
|
||||||
|
- Documentation: ADR 0001; coordinate-mapping module spec with data-flow and
|
||||||
|
dependency diagrams; inline API documentation on all public symbols
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
# M01-FND-DOMAIN-IDENTITIES-001 — Stable domain identity namespaces
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M01-FND-DOMAIN-IDENTITIES-001:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M01-FND-DOMAIN-IDENTITIES-001:c8e99f2 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M01
|
||||||
|
- Program: FND
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m01-domain-identities`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: M01 milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Add scene-free, immutable identity values for stable authored content,
|
||||||
|
session-local entities, opaque WoW wire GUIDs and namespaced server entries so
|
||||||
|
callers cannot silently interchange their numeric/string representations.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Allocating Content IDs, Entity IDs or server entries.
|
||||||
|
- Decoding WoW GUID high types before the build-12340 protocol package.
|
||||||
|
- Defining map/spell/item/quest/display/sound IDs in this package.
|
||||||
|
- Migrating gameplay, network or Content Project consumers that do not exist yet.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: `src/domain/identity/`, `src/tools/verify_domain_identities.gd`,
|
||||||
|
`docs/modules/domain-identities.md`, `docs/adr/0002-domain-identity-namespaces.md`
|
||||||
|
- Shared/hotspots: `docs/ARCHITECTURE.md`, this claim
|
||||||
|
- Generated/ignored: Godot import metadata
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- `ContentId`: canonical lowercase UUID text persisted with schema-owned content
|
||||||
|
- `EntityId`: positive session-local integer, never a persisted content/server identity
|
||||||
|
- `WowGuid`: opaque high/low unsigned 32-bit words preserving wire bits
|
||||||
|
- `ServerEntryId`: positive integer plus non-empty adapter/table namespace
|
||||||
|
- Migration: additive types only; no existing persisted data changes
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: M01 coordinate/focus seams through `77cd17a`
|
||||||
|
- Blocks: Content Project schemas, server adapters, network entity mapping and gameplay registry
|
||||||
|
- External state: no dependency or proprietary input
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: identity contract/boundary verifier, dependency search,
|
||||||
|
coordination/documentation gates and headless project load
|
||||||
|
- Fixtures: valid/invalid UUIDs, session IDs, full unsigned GUID words and
|
||||||
|
duplicate numeric server entries in different namespaces
|
||||||
|
- Fidelity evidence: GUID words remain opaque and lossless until build-12340
|
||||||
|
packet fixtures establish semantic decomposition
|
||||||
|
- Performance budget: constant-time scalar/string validation outside frame loops
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: every value and validation/equality method
|
||||||
|
- Module specification: persistence, ownership, namespace mapping and recovery
|
||||||
|
- Data-flow diagram: authored/runtime/wire/server identities into adapters
|
||||||
|
- State/sequence diagrams: lifecycle diagram for content/session/wire/server identity
|
||||||
|
- ADR: namespace separation and UUID persistence decision
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `ContentId`, `EntityId`, `WowGuid`, `ServerEntryId`
|
||||||
|
- Simplest considered solution: four independent values with explicit fields
|
||||||
|
- Rejected complexity/abstractions: generic ID base class, registry service,
|
||||||
|
UUID generator and speculative GUID high-type enum
|
||||||
|
- Unavoidable complexity and justification: server entry namespace and split GUID
|
||||||
|
words prevent collisions and signed 64-bit loss
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: four identity values, boundary verifier, ADR, module specification,
|
||||||
|
architecture mapping and repository gates
|
||||||
|
- Next: integrator review and merge before the manual axis-conversion gate
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: `c1dc07c`
|
||||||
|
- Branch: `work/sindo-main-codex/m01-domain-identities`
|
||||||
|
- Outcome: authored content, runtime entities, WoW wire GUIDs and namespaced
|
||||||
|
server entries now have separate immutable scene-free value objects
|
||||||
|
- Contract/schema: identity contract version 1; `ContentId` uses canonical
|
||||||
|
lowercase UUID text. No existing schema/cache is migrated; containing future
|
||||||
|
schemas still require their own version and duplicate/reference policy
|
||||||
|
- Verification: DomainIdentities PASS (`5` ContentId, `5` EntityId, `6` WowGuid,
|
||||||
|
`5` ServerEntryId cases); StreamingFocus, coordinate golden fixtures and
|
||||||
|
CoordinateMapper PASS; M00 calibration PASS with maximum error `0.000015`;
|
||||||
|
renderer manifest PASS (`7` checkpoints); headless project load exit `0`;
|
||||||
|
coordination, documentation, naming/dependency and whitespace checks passed
|
||||||
|
- Fidelity: `WowGuid` preserves two complete unsigned 32-bit wire words and
|
||||||
|
explicitly does not claim build-12340 high-type semantics without packet
|
||||||
|
fixtures; zero GUID remains an uninterpreted observable sentinel
|
||||||
|
- Rebuild: none; no dependency or proprietary input. Clean-worktree project
|
||||||
|
load reports expected missing ignored extracted assets/character resources
|
||||||
|
- Remaining risks: no ID allocator, mapping registry or server namespace
|
||||||
|
vocabulary exists yet; UUID shape does not enforce generator version/variant;
|
||||||
|
GDScript callers must use domain `equals` or canonical keys rather than
|
||||||
|
reference `==`
|
||||||
|
- Recommended merge order: after StreamingFocus at `77cd17a`, before the M01
|
||||||
|
manual axis-conversion rule/search gate
|
||||||
|
- Documentation: ADR 0002, domain-identities module API/input-output/data-flow/
|
||||||
|
lifecycle/persistence/recovery/capability/source-map sections, module registry
|
||||||
|
and architecture Domain mapping added or updated
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
# M01-QAR-COORD-FIXTURES-001 — Coordinate golden fixtures
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M01-QAR-COORD-FIXTURES-001:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M01-QAR-COORD-FIXTURES-001:c8e99f2 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M01
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m01-coordinate-fixtures`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: M01 milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Add a versioned, non-proprietary fixture and headless validator joining one
|
||||||
|
pinned AzerothCore player spawn, raw ADT/MCNK metadata and the five M00
|
||||||
|
original-client coordinate observations through coordinate contract version 2.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Committing ADT files, SQL dumps or original-client screenshots.
|
||||||
|
- Claiming TrinityCore spawn equivalence without a pinned populated TDB source.
|
||||||
|
- Migrating renderer/native consumers or rendering a live server spawn.
|
||||||
|
- Changing coordinate formulas, IDs or `StreamingFocus`.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: `src/tests/fixtures/coordinate_golden_points.json`,
|
||||||
|
`src/tools/verify_coordinate_golden_fixtures.gd`
|
||||||
|
- Shared/hotspots: `docs/modules/coordinate-mapping.md`, this claim
|
||||||
|
- Generated/ignored: extracted ADT data, server database downloads and Godot metadata
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API/events: no new production API; fixture schema version 1
|
||||||
|
- Coordinate contract: version 2, unchanged
|
||||||
|
- Migration/compatibility: additive test data; fixture consumers reject unknown schema versions
|
||||||
|
- Consumers: M01 coordinate mapper, future native/renderer/server adapter migrations
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: merged coordinate contract version 2 at `b55bfca`
|
||||||
|
- Blocks: coordinate consumer migration and golden server-spawn renderer integration
|
||||||
|
- External state: source evidence reduced to pinned revision, numeric rows and SHA-256 hashes
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: fixture validator, coordinate mapper probe, M00 calibration,
|
||||||
|
manifest, coordination and documentation gates
|
||||||
|
- Fixtures: AzerothCore Human Warrior start; raw `Azeroth_32_48.adt` MCNK
|
||||||
|
`(3,12)`; five build 12340 camera points
|
||||||
|
- Fidelity evidence: exact source provenance and mapper outputs with bounded tolerances
|
||||||
|
- Performance budget: negligible headless JSON and scalar arithmetic
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: fixture-validator header and field validation functions
|
||||||
|
- Module specification: fixture schema, provenance, verification and source map
|
||||||
|
- Data-flow diagram: server/raw/client fixtures into mapper assertions
|
||||||
|
- State/sequence/dependency diagrams: unchanged; synchronous stateless validation
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `coordinate_golden_points`,
|
||||||
|
`verify_coordinate_golden_fixtures`
|
||||||
|
- Simplest considered solution: one JSON fixture and one existing-style headless script
|
||||||
|
- Rejected complexity/abstractions: test framework dependency, SQL parser, ADT bytes in Git
|
||||||
|
- Unavoidable complexity and justification: three independent source categories need explicit provenance
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: pinned source research, schema 1 fixture, headless validator, module
|
||||||
|
documentation and all package gates
|
||||||
|
- Next: integrator review and merge before coordinate consumer migration
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: `ce4f7ec`
|
||||||
|
- Branch: `work/sindo-main-codex/m01-coordinate-fixtures`
|
||||||
|
- Outcome: one versioned fixture now joins a pinned AzerothCore Human Warrior
|
||||||
|
spawn, private raw MCNK metadata and five original-client build 12340 points
|
||||||
|
through coordinate contract version 2
|
||||||
|
- Contract/schema: additive test fixture schema 1; production coordinate API and
|
||||||
|
contract version 2 are unchanged; proprietary bytes remain outside Git
|
||||||
|
- Verification: golden fixture PASS (`1` server spawn, `1` raw ADT chunk, `5`
|
||||||
|
original-client points); CoordinateMapper PASS (`5` golden points, `8` tile
|
||||||
|
boundaries, `2` raw MCNK cases, `5` yaw cases); M00 calibration PASS with
|
||||||
|
maximum error `0.000015`; renderer manifest PASS (`7` checkpoints); coordination,
|
||||||
|
documentation, dependency and whitespace checks passed
|
||||||
|
- Fidelity: AzerothCore source pinned at revision
|
||||||
|
`68fcf0098b16388093989627f37be530fc91f07d`; private
|
||||||
|
`Azeroth_32_48.adt` SHA-256
|
||||||
|
`D66E27FD82B461AE38B78562952AED428E619777A3F3E35DD8FF97444644770A`;
|
||||||
|
server and raw data independently resolve tile `(32,48)` and chunk `(3,12)`
|
||||||
|
- Rebuild: no proprietary input is required to rerun the committed fixture;
|
||||||
|
local ignored renderer resources are still required by the inherited M00
|
||||||
|
manifest probe
|
||||||
|
- Remaining risks: TrinityCore equivalence needs a pinned populated TDB snapshot;
|
||||||
|
live server adapter, renderer integration and MDDF/MODF Euler semantics remain
|
||||||
|
subsequent M01 work
|
||||||
|
- Recommended merge order: after coordinate contract version 2 (`b55bfca`) and
|
||||||
|
before live coordinate consumer migration
|
||||||
|
- Documentation: coordinate-mapping module inputs/outputs, persistence, data-flow
|
||||||
|
diagram, verification, capability matrix, risks and source map updated
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
# M01-QAR-INTEGRATOR-CLOSEOUT-001 — M01 milestone closeout
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M01-QAR-INTEGRATOR-CLOSEOUT-001:sindo-main-codex:2026-07-16 -->
|
||||||
|
<!-- OPENWC_HANDOFF:READY:M01-QAR-INTEGRATOR-CLOSEOUT-001:dd412e6 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M01
|
||||||
|
- Program: QAR
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m01-integrator-closeout`
|
||||||
|
- Lease expires UTC: 2026-07-16
|
||||||
|
- Integrator: sindo-main-codex, continuing the user-directed milestone workflow on 2026-07-14
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Audit every merged M01 work package on current `master`, record final evidence,
|
||||||
|
close M01 and activate M02 only if all target verification and documentation
|
||||||
|
criteria pass.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Change coordinate, identity, streaming or renderer behavior.
|
||||||
|
- Start M02 implementation.
|
||||||
|
- Add new compatibility or visual-parity claims.
|
||||||
|
- Commit proprietary assets, generated UIDs, caches or capture output.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: M01/M02 target status, M01 final Evidence and M01 claim acceptance markers
|
||||||
|
- Shared/hotspots: `targets/README.md`, `targets/DEVELOPMENT_ROADMAP.md`, this claim
|
||||||
|
- Generated/ignored: local Godot imports, renderer corpus and `user://` reports
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public APIs, schemas, cache formats and migrations: unchanged
|
||||||
|
- Coordinate contract remains version 2
|
||||||
|
- Fixture schema remains version 1
|
||||||
|
- Consumers: milestone sequence and M02 work packages
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: all seven M01 READY commits integrated through master `c8e99f2`
|
||||||
|
- Blocks: M02 activation
|
||||||
|
- External state: server-spawn GUI hashes and original-client numeric evidence are recorded; proprietary files remain outside Git
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: all M01 domain/fixture/boundary/focus/identity/spawn gates,
|
||||||
|
unified renderer dry-run, coordination/documentation checks and diff hygiene
|
||||||
|
- Fidelity evidence: five build-12340 points, raw ADT metadata, pinned
|
||||||
|
AzerothCore spawn and cache-complete GUI marker capture
|
||||||
|
- Performance: no runtime change; preserve recorded renderer cold/warm evidence
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- M01 final target Evidence and checklist
|
||||||
|
- M01 claim integration-acceptance markers
|
||||||
|
- Target index and roadmap transition to M02
|
||||||
|
- API/module specifications and diagrams are audited, not changed unless a gap is found
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: none beyond the closeout work-package ID
|
||||||
|
- Simplest approach: evidence/status-only integrator patch
|
||||||
|
- Rejected complexity: new one-off closeout framework or behavioral changes
|
||||||
|
- Unavoidable complexity: none
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: accepted seven M01 packages, reran post-merge gates, recorded complete
|
||||||
|
target Evidence, closed M01 and activated M02
|
||||||
|
- Next: merge closeout commit before starting an M02 implementation claim
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: `dd412e6`
|
||||||
|
- Branch: `work/sindo-main-codex/m01-integrator-closeout`
|
||||||
|
- Outcome: M01 is `DONE` with all seven checklist items and complete Evidence;
|
||||||
|
M02 is the only `ACTIVE` target and `targets/README.md` points to it.
|
||||||
|
- Integration audit: all seven M01 READY commits are ancestors of master
|
||||||
|
`c8e99f2`; their claims now carry `OPENWC_INTEGRATION:ACCEPTED` markers.
|
||||||
|
- Verification: unified renderer dry-run passed project load, material/dedupe/
|
||||||
|
shutdown gates, manifest `7/7/7`, calibration maximum error `0.000015`,
|
||||||
|
coordinate boundary (`84` files) and server-spawn renderer `(32,48)/(3,12)`;
|
||||||
|
coordinate mapper, golden fixtures, StreamingFocus and domain identity gates
|
||||||
|
passed. Coordination and documentation gates passed; coordination reports
|
||||||
|
only five already-expired M00 claim warnings.
|
||||||
|
- Fidelity: closeout preserves five build-12340 coordinate observations, raw ADT
|
||||||
|
evidence, pinned AzerothCore spawn mapping and cache-complete Northshire GUI
|
||||||
|
evidence without claiming original-client visual parity or TrinityCore row
|
||||||
|
equivalence.
|
||||||
|
- Rebuild/migration: none. Coordinate contract remains version 2; fixture schema
|
||||||
|
remains version 1; renderer cache formats are unchanged.
|
||||||
|
- Remaining risks: recorded in M01 Evidence—TrinityCore populated spawn,
|
||||||
|
placement Euler parity, native parser boundary and broader renderer parity.
|
||||||
|
- Documentation: M01 target Evidence/checklist, target index and roadmap current
|
||||||
|
state updated. Existing coordinate, identity and renderer module specs/API/
|
||||||
|
diagrams were audited and passed the documentation gate.
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
# M01-QAR-SERVER-SPAWN-RENDERER-001 — Golden server spawn renderer evidence
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M01-QAR-SERVER-SPAWN-RENDERER-001:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M01-QAR-SERVER-SPAWN-RENDERER-001:c8e99f2 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M01
|
||||||
|
- Program: QAR/RND
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m01-server-spawn-renderer`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: M01 milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Route the pinned AzerothCore Human Warrior spawn fixture through
|
||||||
|
`CoordinateMapper` into the live Eastern Kingdoms renderer and produce
|
||||||
|
repeatable headless contract checks plus GUI screenshot evidence at the mapped
|
||||||
|
ADT tile/chunk.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Connecting to a live AzerothCore or TrinityCore database.
|
||||||
|
- Claiming TrinityCore spawn equivalence without a pinned populated TDB row.
|
||||||
|
- Changing coordinate formulas, streaming radii, terrain, player movement or
|
||||||
|
production character presentation.
|
||||||
|
- Adding proprietary assets or screenshots to Git.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: `src/tools/server_spawn_render_manifest.json`,
|
||||||
|
`src/tools/verify_server_spawn_renderer.gd`
|
||||||
|
- Shared/hotspots: `src/tools/capture_render_checkpoints.gd`, renderer runner,
|
||||||
|
coordinate/world-renderer module documentation, `RENDER.md`, this claim
|
||||||
|
- Generated/ignored: Godot UIDs/import metadata and `user://` PNG/JSON evidence
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Fixture schema and coordinate contract version remain unchanged.
|
||||||
|
- Additive diagnostic checkpoint metadata may request a renderer-native marker;
|
||||||
|
existing M00 checkpoints remain byte-for-byte compatible.
|
||||||
|
- The spawn remains sourced from pinned AzerothCore revision
|
||||||
|
`68fcf0098b16388093989627f37be530fc91f07d`.
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: merged M01 packages through `a07a487`
|
||||||
|
- Blocks: M01 golden server-spawn renderer criterion and milestone closeout
|
||||||
|
- External state: GUI capture requires the existing local extracted/cached
|
||||||
|
renderer corpus; headless contract verification remains non-proprietary
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: dedicated spawn verifier, coordinate fixture/mapper/boundary gates,
|
||||||
|
renderer baseline dry-run, GUI checkpoint capture and human inspection
|
||||||
|
- Fixture: AzerothCore race `1`, class `1`, map `0`, server position
|
||||||
|
`(-8949.95, -132.493, 83.5312)`
|
||||||
|
- Expected renderer result: Godot position
|
||||||
|
`(17199.159666667, 83.5312, 26016.616666667)`, ADT `(32,48)`, MCNK `(3,12)`
|
||||||
|
- Fidelity classification: server/coordinate integration evidence only; it does
|
||||||
|
not establish full original-client visual parity
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline API/tool documentation for new verifier and marker metadata
|
||||||
|
- Coordinate-mapping module capability/evidence update
|
||||||
|
- World-renderer checkpoint input/output/source-map update when marker support is added
|
||||||
|
- Existing synchronous coordinate data-flow diagram updated only if flow changes
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names: `server_spawn_render_manifest`,
|
||||||
|
`verify_server_spawn_renderer`, `diagnostic_spawn_marker`
|
||||||
|
- Simplest approach: reuse the existing checkpoint capture pipeline with one
|
||||||
|
dedicated manifest and a renderer-native diagnostic marker
|
||||||
|
- Rejected complexity: live DB adapter, new scene-test framework and production
|
||||||
|
spawn entity implementation before the network/gameplay milestones
|
||||||
|
- Performance: one diagnostic checkpoint outside production runtime
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: fixture-to-renderer manifest/verifier, renderer-native marker, unified
|
||||||
|
baseline integration, cold/warm GUI evidence, documentation and log cleanup
|
||||||
|
- Next: integrator review, merge cleanup/handoff and M01 closeout audit
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commits: implementation `24ddc99`; required cleanup `318e6ae`
|
||||||
|
- Branch: `work/sindo-main-codex/m01-server-spawn-renderer`
|
||||||
|
- Outcome: the pinned AzerothCore Human Warrior start is routed through
|
||||||
|
`CoordinateMapper` into the ordinary Eastern Kingdoms capture scene. A
|
||||||
|
depth-tested magenta marker begins at the exact mapped spawn origin.
|
||||||
|
- Contract/schema: additive diagnostic manifest schema 1 and marker metadata;
|
||||||
|
coordinate contract version 2, production renderer APIs, cache formats and
|
||||||
|
`Blizzlike335` behavior are unchanged.
|
||||||
|
- Verification: `SERVER_SPAWN_RENDERER PASS spawn=1 checkpoint=1 tile=32_48
|
||||||
|
chunk=3_12 profile=Blizzlike335`; unified renderer dry-run passed project,
|
||||||
|
materials, M2 dedupe, shutdown, `7/7/7` manifest, five-point calibration,
|
||||||
|
coordinate-boundary and server-spawn steps; coordinate golden fixtures,
|
||||||
|
mapper, StreamingFocus, domain identities, documentation and whitespace gates
|
||||||
|
passed. Coordination passed with five expired M00-claim warnings only.
|
||||||
|
- GUI evidence: two `1280x900` cold/warm PNGs captured under
|
||||||
|
`user://server_spawn_renderer_m01_gui_run2`; focus tile `(32,48)`, terrain
|
||||||
|
quality `100/100`, missing cache `0`, queues drained, report results `2`.
|
||||||
|
Human inspection confirms the marker is on rendered terrain beside the road
|
||||||
|
at Northshire Abbey rather than below terrain or in an adjacent tile. PNG
|
||||||
|
hashes: cold `c08c43bcb75e5b3277105afb0d4e5a76caae9db91a7db64488770ffa03e32589`,
|
||||||
|
warm `1b75237a090ea163836372a8e39e778c909773f4508063adc3f70a3e12a85a62`.
|
||||||
|
- Fidelity: source remains AzerothCore revision
|
||||||
|
`68fcf0098b16388093989627f37be530fc91f07d`; server
|
||||||
|
`(-8949.95,-132.493,83.5312)` maps to Godot
|
||||||
|
`(17199.159666667,83.5312,26016.616666667)`, ADT `(32,48)`, MCNK `(3,12)`.
|
||||||
|
This proves coordinate/renderer integration, not original-client visual parity
|
||||||
|
or TrinityCore populated-row equivalence.
|
||||||
|
- Runtime notes: D3D12 descriptor-heap initialization fell back to Vulkan;
|
||||||
|
optional ignored character/ambient GLB imports were unavailable. Neither
|
||||||
|
affected terrain/marker evidence. The known anonymous ObjectDB teardown
|
||||||
|
warning remained; no Node, renderer resource or RID leak diagnostic occurred
|
||||||
|
in the cache-complete run.
|
||||||
|
- Repository hygiene: four accidentally committed local GUI logs are removed by
|
||||||
|
`318e6ae`; root `*.stdout.log`/`*.stderr.log` files are now ignored. Generated
|
||||||
|
PNG/JSON evidence and proprietary corpus remain outside Git.
|
||||||
|
- Remaining risks: the diagnostic marker is not a production network entity;
|
||||||
|
live server adapters belong to M06/M08. Exact original-client character spawn
|
||||||
|
presentation and TrinityCore database equivalence remain unverified.
|
||||||
|
- Documentation: `RENDER.md`, renderer-baseline procedure, coordinate-mapping
|
||||||
|
and world-renderer module API/input-output/data-flow/capability/source-map
|
||||||
|
sections updated. No lifecycle/state diagram changed because the verifier and
|
||||||
|
mapper path are synchronous; capture reuses the documented renderer lifecycle.
|
||||||
|
- Recommended merge order: `318e6ae` after master merge `747fae8`. Then the M01
|
||||||
|
milestone integrator may accept all M01 claims, update target Evidence/checks
|
||||||
|
and evaluate `OPENWC_TARGET_DONE`.
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
# M01-RND-STREAMING-FOCUS-001 — Explicit streaming focus contract
|
||||||
|
|
||||||
|
<!-- OPENWC_CLAIM:M01-RND-STREAMING-FOCUS-001:sindo-main-codex:2026-07-15 -->
|
||||||
|
<!-- OPENWC_INTEGRATION:ACCEPTED:M01-RND-STREAMING-FOCUS-001:c8e99f2 -->
|
||||||
|
|
||||||
|
## Ownership
|
||||||
|
|
||||||
|
- Target: M01
|
||||||
|
- Program: RND/FND
|
||||||
|
- Owner/Agent ID: sindo-main-codex
|
||||||
|
- Branch: `work/sindo-main-codex/m01-streaming-focus`
|
||||||
|
- Lease expires UTC: 2026-07-15
|
||||||
|
- Integrator: M01 milestone integrator
|
||||||
|
|
||||||
|
## Outcome
|
||||||
|
|
||||||
|
Introduce a scene-free `StreamingFocus` value and make runtime/test streaming
|
||||||
|
consume it through an explicit source or public setter instead of discovering
|
||||||
|
the active `Camera3D` from a viewport.
|
||||||
|
|
||||||
|
## Non-goals
|
||||||
|
|
||||||
|
- Extracting `WorldRenderFacade` or `StreamingTargetPlanner` from the monolithic loader.
|
||||||
|
- Adding direction, velocity, frustum or multi-focus planning.
|
||||||
|
- Decomposing the player controller before M02.
|
||||||
|
- Changing terrain, M2, WMO, liquid, cache or LOD formulas.
|
||||||
|
|
||||||
|
## Paths
|
||||||
|
|
||||||
|
- Exclusive: `src/domain/streaming/`, `src/tools/verify_streaming_focus.gd`
|
||||||
|
- Shared/hotspots: `src/scenes/streaming/streaming_world_loader.gd`,
|
||||||
|
`src/scenes/streaming/eastern_kingdoms_streaming.tscn`,
|
||||||
|
`src/scenes/streaming/kalimdor_streaming.tscn`, renderer diagnostic tools,
|
||||||
|
`docs/modules/world-renderer.md`, this claim
|
||||||
|
- Generated/ignored: local extracted assets, renderer caches and Godot import metadata
|
||||||
|
|
||||||
|
## Contracts and data
|
||||||
|
|
||||||
|
- Public API: immutable `StreamingFocus`; loader `set_streaming_focus` and
|
||||||
|
`refresh_streaming_focus`
|
||||||
|
- Source adapter: explicit `streaming_focus_source_path` may reference any `Node3D`
|
||||||
|
- Migration: runtime scenes use player focus; capture/probe tools explicitly use
|
||||||
|
their dedicated camera as the source
|
||||||
|
- Compatibility: streaming radii/LOD/cache behavior and coordinate contract v2 unchanged
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
|
||||||
|
- Requires: coordinate contract version 2 and golden fixtures at `52e1b2b`
|
||||||
|
- Blocks: M01 renderer/test focus exit criterion and later renderer facade extraction
|
||||||
|
- External state: no new dependency or proprietary input
|
||||||
|
|
||||||
|
## Verification
|
||||||
|
|
||||||
|
- Commands: streaming focus contract/integration verifier, renderer baseline
|
||||||
|
manifest/calibration, headless scene smoke, coordination/documentation gates
|
||||||
|
- Fixtures: Node3D player-style source and explicit capture-style setter
|
||||||
|
- Fidelity evidence: existing seven renderer checkpoints and build-12340 coordinate
|
||||||
|
calibration must remain unchanged
|
||||||
|
- Performance budget: one scalar focus snapshot per configured streaming interval;
|
||||||
|
no new per-tile or per-chunk work
|
||||||
|
|
||||||
|
## Documentation deliverables
|
||||||
|
|
||||||
|
- Inline public API docs: focus value and loader public methods
|
||||||
|
- Module specification: inputs/outputs, ownership, lifecycle, failure/recovery and source map
|
||||||
|
- Data-flow diagram: player/editor/capture source to focus contract to loader
|
||||||
|
- State/sequence diagram: focus sampling and refresh threshold sequence
|
||||||
|
|
||||||
|
## Simplicity and naming
|
||||||
|
|
||||||
|
- Important names introduced: `StreamingFocus`, `streaming_focus_source_path`,
|
||||||
|
`set_streaming_focus`, `refresh_streaming_focus`
|
||||||
|
- Simplest considered solution: one immutable value plus one explicit scene adapter path
|
||||||
|
- Rejected complexity/abstractions: provider interface hierarchy, service locator,
|
||||||
|
multi-focus registry and predictive motion fields
|
||||||
|
- Unavoidable complexity and justification: editor viewport remains a separate
|
||||||
|
adapter because its camera is owned by `EditorInterface`
|
||||||
|
- Measured optimization evidence: not applicable
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
- State: ready-for-review
|
||||||
|
- Done: contract, runtime/editor/capture migration, headless regression,
|
||||||
|
module diagrams, renderer documentation and cold/warm GUI capture
|
||||||
|
- Next: integrator review and merge before typed identity work
|
||||||
|
- Blocked by:
|
||||||
|
|
||||||
|
## Handoff
|
||||||
|
|
||||||
|
- Commit: `7815385`
|
||||||
|
- Branch: `work/sindo-main-codex/m01-streaming-focus`
|
||||||
|
- Outcome: runtime streaming consumes immutable `StreamingFocus`; Eastern
|
||||||
|
Kingdoms and Kalimdor scenes explicitly follow the player, while capture and
|
||||||
|
terrain/occluder probes explicitly follow their dedicated camera
|
||||||
|
- Contract/API: new scene-free `StreamingFocus(GodotWorldPosition)` plus loader
|
||||||
|
`set_streaming_focus`, `refresh_streaming_focus` and
|
||||||
|
`streaming_focus_source_path`; `camera_path` remains only for optional overview positioning
|
||||||
|
- Verification: StreamingFocus PASS (`1` contract, `2` runtime scenes, `3`
|
||||||