chore(meta): pql changelog — T-1182/T-1185 cycle (T-1188/T-1189 filed, T-1157 inventory)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1878,3 +1878,19 @@ IMPLEMENTATION REPORT — wire shapes for T-1182 (2026-07-25, PR #201): StepCanv
|
||||
IMPLEMENTATION REPORT — wire shapes for T-1182 (2026-07-25, PR #201): StepCanvasRung = Global (rung 0, variable, one gridunit per region, whole-body, always-kept) | Region 204.8km | District 2048m | Quarter 512m | Block 128m | Chunk 64m (deepest). Global/Region derive via derive_orbital_at_metres; District..Chunk via derive_at_metres. StepCanvasRequest { step_canvas: bool (marker), body_id, rung, center: (i64,i64), extent: (u32,u32), min_wl_m: u32 } — sixth Inbound variant. StepCanvasResponse { body_id, rung, center, min_wl_m, status: StepCanvasStatus, canvas: Option<EncodedStepCanvas> } — dedicated outbound, NOT on AtlasLayerResponse. EncodedStepCanvas: width, height + 6 static fields (morphology, elev_q, moisture_q, vegetation as PNG-per-field; temp_dc raw Vec<i16> msgpack, settlement_id raw Vec<u32> msgpack — too wide for 8-bit PNG) + 2 sim-state (glaciation PNG, flooded_q PNG always-0 stub) + 2 sparse (courses: Vec<RiverCourse>, cliffs: Vec<CliffSegment> — always empty today, zero carved cells in the population). settlement_id: 0=none else city_id, a 1500m proximity radius around the settlement anchor point (honest approximation — no footprint polygons exist; revisit when quarter-skeleton geometry lands); Global rung reports zero coverage. Rung-0 row space: SIGNED equator-anchored rows (wy=(row-rows/2)*REGION_M, negative=north) per the D-256 canonical core — T-1186 interaction documented at build_step_canvas. Caches: GlobalTierCache (BTreeMap by body_id, no eviction API — structurally keep-always, lazy D-206 populate) + StepCanvasCache keyed (body_id, rung, center, extent, min_wl_m), dual-axis eviction on get() (storage TTL per rung, Region ~1h..Chunk ~2min; SIM_STATE_TTL seasonal ~1h / tidal ~15min moon-bearing — note BodyDrivingClockClass::classify always returns Moonless today, no moon signal on BodyParams). Station-spacing cap adopted: course_station_spacing_m(rung) = rung.spacing_m().max(DISTRICT_M) (COURSE_STATION_SPACING_FLOOR_M). Known stubs: flooded_q always 0, glaciation static (D-253 not built); both wire-shape-ready.
|
||||
|
||||
WIRE SHAPE ADDENDUM (PR #201 review round): StepCanvasResponse gained an extent: (u32,u32) ECHO field — the server-clamped canvas extent, so the client can detect a clamp (mirrors DistrictWindowLayer.n precedent). Wire extent is clamped server-side per D-255(b): STEP_CANVAS_MAX_EXTENT_AXIS=3840 per axis, STEP_CANVAS_MAX_EXTENT_CELLS=8294400 total (aspect-preserving scale-down); Global rung ignores wire extent entirely. T-1182 client must read the echoed extent, never assume its requested one.', NULL, '2026-07-25 01:33:48', '2026-07-25 01:33:48.224', '2026-07-25 01:33:48.224', NULL, '38229b5ea0a6985ce97bc8ce697063b4', 2) ON CONFLICT(hash) DO NOTHING;
|
||||
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XQW73B1P8WKR2BCZBFXZW', 'status', 'review', 'done', NULL, '2026-07-25 01:37:38', '2026-07-25 01:37:38.819', '2026-07-25 01:37:38.819', NULL, '3a05142969cc0817dde8259dd7f1efb7', 2) ON CONFLICT(hash) DO NOTHING;
|
||||
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XT949C8D2JZRWDX2CRZN8', 'status', 'backlog', 'in_progress', NULL, '2026-07-25 06:10:59', '2026-07-25 06:10:59.088', '2026-07-25 06:10:59.088', NULL, '6536626cafe883d6ac1e918391d6a679', 2) ON CONFLICT(hash) DO NOTHING;
|
||||
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XZF4A978WS1J66Q2JBK8C', 'status', 'backlog', 'in_progress', NULL, '2026-07-25 06:10:59', '2026-07-25 06:10:59.091', '2026-07-25 06:10:59.091', NULL, 'e087a67f5cb6ee578d8151c7c38c7eb7', 2) ON CONFLICT(hash) DO NOTHING;
|
||||
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XZF4A978WS1J66Q2JBK8C', 'status', 'in_progress', 'review', NULL, '2026-07-25 06:46:29', '2026-07-25 06:46:29.803', '2026-07-25 06:46:29.803', NULL, '002dbfd7b3c984b3e0eefe5b27261eb6', 2) ON CONFLICT(hash) DO NOTHING;
|
||||
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XT949C8D2JZRWDX2CRZN8', 'status', 'in_progress', 'review', NULL, '2026-07-25 06:57:31', '2026-07-25 06:57:31.456', '2026-07-25 06:57:31.456', NULL, '67ff0e6480acfd4cc5897b7262e28d02', 2) ON CONFLICT(hash) DO NOTHING;
|
||||
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRJD6EKPBQE08NA8VHP692W8', 'description', 'T-1153 broke the T-1120/T-1121 golden capture harness: client/tests/visual_scenarios.gd and visual_capture.gd call app._regional_screen._viewer.get_heightmap_texture()/show_body() — both crash against AtlasWindowViewer (regional_screen now wraps the ladder viewer; AtlasViewer is unreachable from nav). Confirmed NOT wired into tests/run-godot or the pre-push hook (no reference in either), so nothing blocks, but the 12 curated atlas_* goldens and the --atlas-matrix capture path are dead until redesigned for the ladder (capture at defined rungs/zooms instead of the fixed heightmap frame; the new canonical orbital frame is the natural replacement for the old whole-body shot). Also decide the fate of the retired AtlasViewer code these harnesses were the last live consumers of — likely deletable once T-1156 (overlay port) settles what carries forward.
|
||||
|
||||
Live round 4 addendum: client/tests/test_atlas_window_overlay_draw_smoke.gd (3 scenarios -> now 2 after removing a flaky harness-sanity check: single-window draw + tile-mosaic draw, both asserting real composited pixels via SubViewport render) is a standalone gdUnit file with its own headless-skip guard, added because this redesign hadn''t landed yet. When this ticket lands, migrate its 2 scenarios into the redesigned tests/visual.json harness (folding the standalone file away) for consistency with the rest of the real-rendering test suite — see docs/DEVOPS.md''s ''Real-rendering test exception'' note for the interim rationale.
|
||||
|
||||
RE-SCOPED by D-255 (2026-07-24, body-map-viewer workshop): this becomes the capture harness for the STEPPED render architecture — goldens key on (body, step) canvases, not the retired continuous-zoom frames. The T-1152/T-1153 test suites (coverage-walk, continuous-zoom seams, compute_tile_grid mosaic) retire with their code in T-1182''s change; this re-scoped harness is their replacement and the eyeball-check substrate for every step canvas. More needed than ever — keep, don''t cancel.', 'T-1153 broke the T-1120/T-1121 golden capture harness: client/tests/visual_scenarios.gd and visual_capture.gd call app._regional_screen._viewer.get_heightmap_texture()/show_body() — both crash against AtlasWindowViewer (regional_screen now wraps the ladder viewer; AtlasViewer is unreachable from nav). Confirmed NOT wired into tests/run-godot or the pre-push hook (no reference in either), so nothing blocks, but the 12 curated atlas_* goldens and the --atlas-matrix capture path are dead until redesigned for the ladder (capture at defined rungs/zooms instead of the fixed heightmap frame; the new canonical orbital frame is the natural replacement for the old whole-body shot). Also decide the fate of the retired AtlasViewer code these harnesses were the last live consumers of — likely deletable once T-1156 (overlay port) settles what carries forward.
|
||||
|
||||
Live round 4 addendum: client/tests/test_atlas_window_overlay_draw_smoke.gd (3 scenarios -> now 2 after removing a flaky harness-sanity check: single-window draw + tile-mosaic draw, both asserting real composited pixels via SubViewport render) is a standalone gdUnit file with its own headless-skip guard, added because this redesign hadn''t landed yet. When this ticket lands, migrate its 2 scenarios into the redesigned tests/visual.json harness (folding the standalone file away) for consistency with the rest of the real-rendering test suite — see docs/DEVOPS.md''s ''Real-rendering test exception'' note for the interim rationale.
|
||||
|
||||
RE-SCOPED by D-255 (2026-07-24, body-map-viewer workshop): this becomes the capture harness for the STEPPED render architecture — goldens key on (body, step) canvases, not the retired continuous-zoom frames. The T-1152/T-1153 test suites (coverage-walk, continuous-zoom seams, compute_tile_grid mosaic) retire with their code in T-1182''s change; this re-scoped harness is their replacement and the eyeball-check substrate for every step canvas. More needed than ever — keep, don''t cancel.
|
||||
|
||||
PR #203 fix-round inventory (2026-07-25): the retirement is now TOTAL — AtlasViewer and its whole cluster (atlas_viewer, atlas_marker_overlay, atlas_descend_geometry, atlas_legend_panel, atlas_generation_proxy, atlas_generation_state) are deleted. visual_scenarios.gd (_setup_atlas_golden_shot, 6 of 12 atlas_GJ* z2_0/z4_0 non-fit scenarios) and visual_capture.gd (_run_atlas_matrix) now call StepCanvasViewer methods that do not exist: get_heightmap_texture(), set_view(zoom, offset), get_view_offset() — the fit-zoom shots early-return before hitting them. Ruled in PR #203: NO shim (would resurrect the retired continuous-zoom API D-255 kills); the redesign here keys captures on (body, rung) via StepCanvasViewer''s real surface (enter/_scroll_rung/rung state + the echoed extent). get_overlay_defs()/set_overlay_visible() duck-type fine and survive. Until this lands, those 6 goldens + atlas_matrix are knowingly dead (manual make targets only, gate-invisible — confirmed again).', NULL, '2026-07-25 07:32:19', '2026-07-25 07:32:19.974', '2026-07-25 07:32:19.974', NULL, '85a62f8545b4e710acc57db0781b73b7', 2) ON CONFLICT(hash) DO NOTHING;
|
||||
|
||||
@@ -101,3 +101,5 @@ INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_
|
||||
INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XZF4A978WS1J66Q2JBK8C', 'T-1185', '2026-07-24 07:12:29.987', '2026-07-24 07:12:29.987', NULL, '191b89e5f2be7d2916f5c17b397b769f', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash);
|
||||
INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FSCXX7E3BXT7WG0BYDB6PJA0', 'T-1186', '2026-07-24 23:30:51.896', '2026-07-24 23:30:51.896', NULL, '9000ac24144dd50b1189590db47ae2ba', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash);
|
||||
INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FSDE3STZBP0Y7GQ3ZEZPKFP8', 'T-1187', '2026-07-25 00:41:40.058', '2026-07-25 00:41:40.058', NULL, '312ad3897a28515b4ea488e2ccd920e2', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash);
|
||||
INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FSG8P6C6WXEG3X81PVCQ833M', 'T-1188', '2026-07-25 07:17:23.684', '2026-07-25 07:17:23.684', NULL, 'f49c406f5369a03b4286ca068fab95c5', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash);
|
||||
INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FSG8PRRFJQ3Y2V3R348DDRRM', 'T-1189', '2026-07-25 07:17:28.388', '2026-07-25 07:17:28.388', NULL, '14e7563bd5e58b24ab9406713769258f', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash);
|
||||
|
||||
@@ -2724,3 +2724,21 @@ INSERT INTO tickets (record_id, type, parent_record_id, title, description, stat
|
||||
IMPLEMENTATION REPORT — wire shapes for T-1182 (2026-07-25, PR #201): StepCanvasRung = Global (rung 0, variable, one gridunit per region, whole-body, always-kept) | Region 204.8km | District 2048m | Quarter 512m | Block 128m | Chunk 64m (deepest). Global/Region derive via derive_orbital_at_metres; District..Chunk via derive_at_metres. StepCanvasRequest { step_canvas: bool (marker), body_id, rung, center: (i64,i64), extent: (u32,u32), min_wl_m: u32 } — sixth Inbound variant. StepCanvasResponse { body_id, rung, center, min_wl_m, status: StepCanvasStatus, canvas: Option<EncodedStepCanvas> } — dedicated outbound, NOT on AtlasLayerResponse. EncodedStepCanvas: width, height + 6 static fields (morphology, elev_q, moisture_q, vegetation as PNG-per-field; temp_dc raw Vec<i16> msgpack, settlement_id raw Vec<u32> msgpack — too wide for 8-bit PNG) + 2 sim-state (glaciation PNG, flooded_q PNG always-0 stub) + 2 sparse (courses: Vec<RiverCourse>, cliffs: Vec<CliffSegment> — always empty today, zero carved cells in the population). settlement_id: 0=none else city_id, a 1500m proximity radius around the settlement anchor point (honest approximation — no footprint polygons exist; revisit when quarter-skeleton geometry lands); Global rung reports zero coverage. Rung-0 row space: SIGNED equator-anchored rows (wy=(row-rows/2)*REGION_M, negative=north) per the D-256 canonical core — T-1186 interaction documented at build_step_canvas. Caches: GlobalTierCache (BTreeMap by body_id, no eviction API — structurally keep-always, lazy D-206 populate) + StepCanvasCache keyed (body_id, rung, center, extent, min_wl_m), dual-axis eviction on get() (storage TTL per rung, Region ~1h..Chunk ~2min; SIM_STATE_TTL seasonal ~1h / tidal ~15min moon-bearing — note BodyDrivingClockClass::classify always returns Moonless today, no moon signal on BodyParams). Station-spacing cap adopted: course_station_spacing_m(rung) = rung.spacing_m().max(DISTRICT_M) (COURSE_STATION_SPACING_FLOOR_M). Known stubs: flooded_q always 0, glaciation static (D-253 not built); both wire-shape-ready.
|
||||
|
||||
WIRE SHAPE ADDENDUM (PR #201 review round): StepCanvasResponse gained an extent: (u32,u32) ECHO field — the server-clamped canvas extent, so the client can detect a clamp (mirrors DistrictWindowLayer.n precedent). Wire extent is clamped server-side per D-255(b): STEP_CANVAS_MAX_EXTENT_AXIS=3840 per axis, STEP_CANVAS_MAX_EXTENT_CELLS=8294400 total (aspect-preserving scale-down); Global rung ignores wire extent entirely. T-1182 client must read the echoed extent, never assume its requested one.', 'review', 'high', NULL, 'server', 'D-255', '2026-07-24 07:11:27.800', '2026-07-25 01:33:48.224', NULL, 'd92ef3d03c1e05c6f17604ee0423f8dd', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XQW73B1P8WKR2BCZBFXZW', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Step-canvas serving: StepCanvasRequest/Response tagged envelope (D-255 wire migration)', 'The D-225-discharging migration per D-255(c): one new Inbound variant (StepCanvasRequest, required marker field step_canvas, extending the proven star_map/city_names/browse ShapeProbe pattern in server/src/bridge/mod.rs) + a dedicated StepCanvasResponse (NOT a field on AtlasLayerResponse — the D-226 §2 ceiling is re-scoped to the legacy carrier). Serves all six rungs of the D-255(a) ladder — rung-0 Global variable-extent is a field value, not a different shape; fixed rungs viewport-sized per D-255(b). Encoding: PNG-per-field dense (8 fields: 6 static + glaciation/flooded sim-state L8 planes) + MessagePack-native sparse (courses, cliffs) per the T-1179 measured table. SERVER CACHE TIERS ARE THIS TICKET''S SCOPE TOO (SI gap 3): the D-203-shaped resident global tier (~8.85MB population-wide, measured) + TTL(detail, time, distance) for finer rungs + SIM_STATE_TTL[field] = 1x the field''s own fastest driving clock-bucket per body class (flooded: tidal bucket moon-bearing / seasonal moonless; glaciation: seasonal — D-227 amendment (1), Dudley+Araminta joint formula). ACCEPTANCE GATE (SI gap 2, mandatory per D-227 amendment (3)): byte-identical output test — cache-hit derive path == cache-miss derive path for every rung; the seed-chaining cache-accelerated-pure-function correctness gate, same shape as T-1170''s window-independence invariant. Implementation note carried from measurement S2: courses cost +38-87% at chunk/block spacing (station count scales inversely with rung spacing — 1,732 vs 867 points/course measured); a station-spacing cap independent of rung spacing is a named candidate optimization, decision at implementation. Design sources: dudley-round2.md §(a), tyre-round2.md §(b), D-255(c)(d)(f). Legacy district_window survives byte-unchanged until its consumer is replaced.
|
||||
|
||||
IMPLEMENTATION REPORT — wire shapes for T-1182 (2026-07-25, PR #201): StepCanvasRung = Global (rung 0, variable, one gridunit per region, whole-body, always-kept) | Region 204.8km | District 2048m | Quarter 512m | Block 128m | Chunk 64m (deepest). Global/Region derive via derive_orbital_at_metres; District..Chunk via derive_at_metres. StepCanvasRequest { step_canvas: bool (marker), body_id, rung, center: (i64,i64), extent: (u32,u32), min_wl_m: u32 } — sixth Inbound variant. StepCanvasResponse { body_id, rung, center, min_wl_m, status: StepCanvasStatus, canvas: Option<EncodedStepCanvas> } — dedicated outbound, NOT on AtlasLayerResponse. EncodedStepCanvas: width, height + 6 static fields (morphology, elev_q, moisture_q, vegetation as PNG-per-field; temp_dc raw Vec<i16> msgpack, settlement_id raw Vec<u32> msgpack — too wide for 8-bit PNG) + 2 sim-state (glaciation PNG, flooded_q PNG always-0 stub) + 2 sparse (courses: Vec<RiverCourse>, cliffs: Vec<CliffSegment> — always empty today, zero carved cells in the population). settlement_id: 0=none else city_id, a 1500m proximity radius around the settlement anchor point (honest approximation — no footprint polygons exist; revisit when quarter-skeleton geometry lands); Global rung reports zero coverage. Rung-0 row space: SIGNED equator-anchored rows (wy=(row-rows/2)*REGION_M, negative=north) per the D-256 canonical core — T-1186 interaction documented at build_step_canvas. Caches: GlobalTierCache (BTreeMap by body_id, no eviction API — structurally keep-always, lazy D-206 populate) + StepCanvasCache keyed (body_id, rung, center, extent, min_wl_m), dual-axis eviction on get() (storage TTL per rung, Region ~1h..Chunk ~2min; SIM_STATE_TTL seasonal ~1h / tidal ~15min moon-bearing — note BodyDrivingClockClass::classify always returns Moonless today, no moon signal on BodyParams). Station-spacing cap adopted: course_station_spacing_m(rung) = rung.spacing_m().max(DISTRICT_M) (COURSE_STATION_SPACING_FLOOR_M). Known stubs: flooded_q always 0, glaciation static (D-253 not built); both wire-shape-ready.
|
||||
|
||||
WIRE SHAPE ADDENDUM (PR #201 review round): StepCanvasResponse gained an extent: (u32,u32) ECHO field — the server-clamped canvas extent, so the client can detect a clamp (mirrors DistrictWindowLayer.n precedent). Wire extent is clamped server-side per D-255(b): STEP_CANVAS_MAX_EXTENT_AXIS=3840 per axis, STEP_CANVAS_MAX_EXTENT_CELLS=8294400 total (aspect-preserving scale-down); Global rung ignores wire extent entirely. T-1182 client must read the echoed extent, never assume its requested one.', 'done', 'high', NULL, 'server', 'D-255', '2026-07-24 07:11:27.800', '2026-07-25 01:37:38.818', NULL, 'ae4790ffc622a6167477ad66f3d683c0', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XT949C8D2JZRWDX2CRZN8', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Client map component: RTT terrain + screen-space annotations + stepped transport (D-255)', 'The two-layer client rebuild per D-255(a)(b)(e): a render-to-texture terrain layer (per-step data canvas colorized CPU-side — c1 ruling: Image.set_pixel, measured 77.5 ns/cell flat, NOT a hand-rolled buffer write which measured 2x slower; L8 planes where single-channel per measurement ⑤; texture.update reuse on step-cross) + an unscaled screen-space annotation sibling (names, glyphs, course polylines, markers — literal px sizes, positions world→screen). Stepped transport: discrete rung index 0-5, scroll steps, cursor-anchored, edge-scroll pan, full-zoom-out reset to the rung-0 Global frame; hold-fetch-swap on step-cross (morph/tween optional cosmetic follow-on, never re-derivation); step-dependent display ratio (1x1 deep/mid, ~5x5 shallow — presentation only, never spacing/cache-key). EXECUTES THE FULL _canvas.scale RETIREMENT PATH in the same change (tyre-round2.md ~line 1074): (1) _canvas.scale/_canvas.position/_apply_transform continuous-scale model; (2) the _zs/_zs_stroke/_zs_ring_radius compensation family in atlas_window_geometry_nature.gd — deleted wholesale; (3) select_rung + MAX_COVERAGE_M + compute_tile_grid (T-1152/T-1153 code); (4) the AtlasViewer/orbital-mosaic-vs-window two-code-path split (collapses to ''Global opener is rung 0, one viewer one path''); (5) _view_zoom float + _canonical_fit_zoom. Their test suites (coverage-walk unit tests, continuous-zoom seam tests, compute_tile_grid mosaic tests) are DELETED in the same change — never leave old goldens asserting against retired frames (the T-1157 dead-goldens rule); replacement coverage lands under re-scoped T-1157. SURVIVING SURFACES — do not delete (SI gap 1): atlas_window_tile_set.gd''s LRU SHAPE survives as the skeleton for the client cache-store ticket (adapt it, do not delete it — it is not on the retirement path); _filter_for_granularity_v2 (NEAREST/LINEAR per rung is still a real RTT draw-time question); compositing/legend/overlay-bar chrome (call-site updates only). Determinism boundary per D-255(e): client interpolates only within the closed server-supplied input set. Design sources: stig-round1.md, stig-round2.md, D-255(a)(b)(e).', 'in_progress', 'high', NULL, 'client', 'D-255', '2026-07-24 07:11:47.490', '2026-07-25 06:10:59.087', NULL, 'ab46571f7628768389f3a7a4bbbb8dce', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XZF4A978WS1J66Q2JBK8C', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Basin-outlet → course-network wiring: the endorheic cue deliverable (D-255)', 'Thread HydrologyResult overflow basins'' resolved outlet_path/spill points into RiverNetwork/courses as D8 downstream continuations, so an overflow lake''s exit river appears in the served courses and an endorheic basin''s absence of one reads as ''no course leaves this lake''. THE RULED ENDORHEIC CUE (D-227 amendment (4), converged Dudley+Araminta): outflow-course PRESENCE — no wire bit, no 18th zone (proportionality: 1,030/22,270 = 4.63% endorheic doesn''t justify widening the frozen vocabulary; the inference is definitionally sound with no misfire case — every Overflow basin has a guaranteed non-empty outlet_path (tested: overflowing_basin_has_nonempty_outlet_path), every Endorheic none). Pre-cleared ADDITIVE by T-1170 Ruling 7b: the RIVER_DOWNSTREAM_TERMINAL sentinel was reserved exactly for endorheic interior sinks, and river_course::build_edges is already no-op-safe on TERMINAL (verified) — not a wire migration. Required regardless of the cue: overflow lakes must show their exit rivers to be hydrologically honest on the map (a lake that drains but shows no outlet river is simply wrong). Until this lands, the map shows lakes (via the lake-sourcing ticket) but not the drains-vs-closed distinction — the recorded honest sequencing. Endorheic basins map to TERMINAL; overflow outlets extend the D8 network from the spill cell along outlet_path. Design sources: dudley-interview2-response.md CORRECTED section, araminta-round2.md §(e), t1177-hydrology.md, D-227 amendment (4).', 'in_progress', 'medium', NULL, 'server', 'D-227', '2026-07-24 07:12:29.986', '2026-07-25 06:10:59.091', NULL, 'd39af2eca3bcdf560b55508126c1375a', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XZF4A978WS1J66Q2JBK8C', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Basin-outlet → course-network wiring: the endorheic cue deliverable (D-255)', 'Thread HydrologyResult overflow basins'' resolved outlet_path/spill points into RiverNetwork/courses as D8 downstream continuations, so an overflow lake''s exit river appears in the served courses and an endorheic basin''s absence of one reads as ''no course leaves this lake''. THE RULED ENDORHEIC CUE (D-227 amendment (4), converged Dudley+Araminta): outflow-course PRESENCE — no wire bit, no 18th zone (proportionality: 1,030/22,270 = 4.63% endorheic doesn''t justify widening the frozen vocabulary; the inference is definitionally sound with no misfire case — every Overflow basin has a guaranteed non-empty outlet_path (tested: overflowing_basin_has_nonempty_outlet_path), every Endorheic none). Pre-cleared ADDITIVE by T-1170 Ruling 7b: the RIVER_DOWNSTREAM_TERMINAL sentinel was reserved exactly for endorheic interior sinks, and river_course::build_edges is already no-op-safe on TERMINAL (verified) — not a wire migration. Required regardless of the cue: overflow lakes must show their exit rivers to be hydrologically honest on the map (a lake that drains but shows no outlet river is simply wrong). Until this lands, the map shows lakes (via the lake-sourcing ticket) but not the drains-vs-closed distinction — the recorded honest sequencing. Endorheic basins map to TERMINAL; overflow outlets extend the D8 network from the spill cell along outlet_path. Design sources: dudley-interview2-response.md CORRECTED section, araminta-round2.md §(e), t1177-hydrology.md, D-227 amendment (4).', 'review', 'medium', NULL, 'server', 'D-227', '2026-07-24 07:12:29.986', '2026-07-25 06:46:29.802', NULL, '455277b0091916caf6f7b723f9718c48', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FS5XT949C8D2JZRWDX2CRZN8', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Client map component: RTT terrain + screen-space annotations + stepped transport (D-255)', 'The two-layer client rebuild per D-255(a)(b)(e): a render-to-texture terrain layer (per-step data canvas colorized CPU-side — c1 ruling: Image.set_pixel, measured 77.5 ns/cell flat, NOT a hand-rolled buffer write which measured 2x slower; L8 planes where single-channel per measurement ⑤; texture.update reuse on step-cross) + an unscaled screen-space annotation sibling (names, glyphs, course polylines, markers — literal px sizes, positions world→screen). Stepped transport: discrete rung index 0-5, scroll steps, cursor-anchored, edge-scroll pan, full-zoom-out reset to the rung-0 Global frame; hold-fetch-swap on step-cross (morph/tween optional cosmetic follow-on, never re-derivation); step-dependent display ratio (1x1 deep/mid, ~5x5 shallow — presentation only, never spacing/cache-key). EXECUTES THE FULL _canvas.scale RETIREMENT PATH in the same change (tyre-round2.md ~line 1074): (1) _canvas.scale/_canvas.position/_apply_transform continuous-scale model; (2) the _zs/_zs_stroke/_zs_ring_radius compensation family in atlas_window_geometry_nature.gd — deleted wholesale; (3) select_rung + MAX_COVERAGE_M + compute_tile_grid (T-1152/T-1153 code); (4) the AtlasViewer/orbital-mosaic-vs-window two-code-path split (collapses to ''Global opener is rung 0, one viewer one path''); (5) _view_zoom float + _canonical_fit_zoom. Their test suites (coverage-walk unit tests, continuous-zoom seam tests, compute_tile_grid mosaic tests) are DELETED in the same change — never leave old goldens asserting against retired frames (the T-1157 dead-goldens rule); replacement coverage lands under re-scoped T-1157. SURVIVING SURFACES — do not delete (SI gap 1): atlas_window_tile_set.gd''s LRU SHAPE survives as the skeleton for the client cache-store ticket (adapt it, do not delete it — it is not on the retirement path); _filter_for_granularity_v2 (NEAREST/LINEAR per rung is still a real RTT draw-time question); compositing/legend/overlay-bar chrome (call-site updates only). Determinism boundary per D-255(e): client interpolates only within the closed server-supplied input set. Design sources: stig-round1.md, stig-round2.md, D-255(a)(b)(e).', 'review', 'high', NULL, 'client', 'D-255', '2026-07-24 07:11:47.490', '2026-07-25 06:57:31.456', NULL, '5d5139d002c39df9c37f1e463a94125e', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FSG8P6C6WXEG3X81PVCQ833M', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Lake shorelines render as hard step-edges — no transition band unlike ocean coastlines', 'Found in the T-1182 eyeball (2026-07-25): at District and Quarter rung on GJ338Bd''s big lake (DistrictPos 13652,4360), the lake shoreline is a hard rectilinear step-edge while ocean coastlines in the SAME frame show a proper multi-tone refined transition band. Two hypotheses, likely the second: (a) the T-1184 continuous filled>elevation comparison isn''t refining lake edges positionally as designed (would violate the ticket''s own ''edges refine with rung like coastlines'' requirement — verify with a shoreline-crossing sample sweep at multiple rungs); (b) PRESENTATION: ocean transition tones come from ocean_fraction_q banding, but lake cells have ocean_fraction_q=0 and Lake is a binary morphology class — so even a perfectly-refined lake edge has no gradient vocabulary to draw with. If (b), the fix is a lake-margin tone source (e.g. a filled-surface-depth band sampled at derive time, or client-side shading from the served elevation field near Lake cells — must stay inside D-255(e)''s closed input set). Determine which, then fix accordingly. Not a T-1182 defect (viewer draws what the server sends). Captures: .cache/screenshots/t1182-eyeball/rung-ladder/. Related: T-1184, D-227 amendment (4), D-255(e).', 'backlog', 'medium', NULL, 'server', NULL, '2026-07-25 07:17:23.681', '2026-07-25 07:17:23.681', NULL, '2ac92dcf5e322b6e4e744e999c712cb0', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FSG8PRRFJQ3Y2V3R348DDRRM', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Region-rung viewport can exceed small-body circumference — continent visibly repeats (longitude wrap UX)', 'Found in the T-1182 eyeball (2026-07-25): on Arbour (R=6711km, circumference ~42,166km), the Region rung''s viewport-fit canvas (~200x210 cells x 204.8km) slightly exceeds the body circumference, so derive_orbital_at_metres'' deliberate longitude wrap (rem_euclid) makes the continent visibly repeat side-by-side. Not a math bug — the world legitimately wraps in view. UX question: clamp the Region-rung viewport extent to the body circumference (extent is already server-clamped per D-255(b) — a per-body circumference cap on the requested extent would be a client-side transport refinement), or draw a wrap seam indicator. Smaller bodies make it worse. Captures: .cache/screenshots/t1182-eyeball/rung-ladder/02-region.png. Related: D-243 elastic seam, D-255(a).', 'backlog', 'low', NULL, 'client', NULL, '2026-07-25 07:17:28.388', '2026-07-25 07:17:28.388', NULL, 'b04c525acb596ca14df23c445d6bccfa', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRJD6EKPBQE08NA8VHP692W8', 'task', '06FBPPMZNNEV052DBYYY3A897C', 'Redesign the atlas visual-capture goldens for the zoom ladder (visual_scenarios/visual_capture)', 'T-1153 broke the T-1120/T-1121 golden capture harness: client/tests/visual_scenarios.gd and visual_capture.gd call app._regional_screen._viewer.get_heightmap_texture()/show_body() — both crash against AtlasWindowViewer (regional_screen now wraps the ladder viewer; AtlasViewer is unreachable from nav). Confirmed NOT wired into tests/run-godot or the pre-push hook (no reference in either), so nothing blocks, but the 12 curated atlas_* goldens and the --atlas-matrix capture path are dead until redesigned for the ladder (capture at defined rungs/zooms instead of the fixed heightmap frame; the new canonical orbital frame is the natural replacement for the old whole-body shot). Also decide the fate of the retired AtlasViewer code these harnesses were the last live consumers of — likely deletable once T-1156 (overlay port) settles what carries forward.
|
||||
|
||||
Live round 4 addendum: client/tests/test_atlas_window_overlay_draw_smoke.gd (3 scenarios -> now 2 after removing a flaky harness-sanity check: single-window draw + tile-mosaic draw, both asserting real composited pixels via SubViewport render) is a standalone gdUnit file with its own headless-skip guard, added because this redesign hadn''t landed yet. When this ticket lands, migrate its 2 scenarios into the redesigned tests/visual.json harness (folding the standalone file away) for consistency with the rest of the real-rendering test suite — see docs/DEVOPS.md''s ''Real-rendering test exception'' note for the interim rationale.
|
||||
|
||||
RE-SCOPED by D-255 (2026-07-24, body-map-viewer workshop): this becomes the capture harness for the STEPPED render architecture — goldens key on (body, step) canvases, not the retired continuous-zoom frames. The T-1152/T-1153 test suites (coverage-walk, continuous-zoom seams, compute_tile_grid mosaic) retire with their code in T-1182''s change; this re-scoped harness is their replacement and the eyeball-check substrate for every step canvas. More needed than ever — keep, don''t cancel.
|
||||
|
||||
PR #203 fix-round inventory (2026-07-25): the retirement is now TOTAL — AtlasViewer and its whole cluster (atlas_viewer, atlas_marker_overlay, atlas_descend_geometry, atlas_legend_panel, atlas_generation_proxy, atlas_generation_state) are deleted. visual_scenarios.gd (_setup_atlas_golden_shot, 6 of 12 atlas_GJ* z2_0/z4_0 non-fit scenarios) and visual_capture.gd (_run_atlas_matrix) now call StepCanvasViewer methods that do not exist: get_heightmap_texture(), set_view(zoom, offset), get_view_offset() — the fit-zoom shots early-return before hitting them. Ruled in PR #203: NO shim (would resurrect the retired continuous-zoom API D-255 kills); the redesign here keys captures on (body, rung) via StepCanvasViewer''s real surface (enter/_scroll_rung/rung state + the echoed extent). get_overlay_defs()/set_overlay_visible() duck-type fine and survive. Until this lands, those 6 goldens + atlas_matrix are knowingly dead (manual make targets only, gate-invisible — confirmed again).', 'backlog', 'medium', NULL, 'client', NULL, '2026-07-22 09:42:47.197', '2026-07-25 07:32:19.969', NULL, '258f3e5dbabf9935a55bd33ff400608b', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
|
||||
|
||||
Reference in New Issue
Block a user