chore(meta): T-1152/T-1153 to review — PR #192 up (zoom ladder); T-1157 smoke-scenario migration note (Stig)

This commit is contained in:
2026-07-22 16:51:06 +02:00
parent 5aa3a84263
commit ab41ea07f9
3 changed files with 16 additions and 0 deletions
+6
View File
@@ -9,3 +9,9 @@ INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updat
INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPRZZ0P42NHC1QR5S3737EV4', '06FQ9B8F39QD7PGPG4W35AWCRG', '2026-07-18 10:02:16.776', '2026-07-18 10:02:16.776', NULL, 'c6ea7e86a0f697e01d1e56b7d78012a7', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FPQXHDSMSVD3VADV38NG9STW', '06FQ9B8F39QD7PGPG4W35AWCRG', '2026-07-18 10:02:24.548', '2026-07-18 10:02:24.548', NULL, '88545ace5d86a3e15ea2d5ba3399706f', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FQ9B8F39QD7PGPG4W35AWCRG', '06FQ9B977KGH3BWP1YQTN32TYM', '2026-07-18 10:02:27.821', '2026-07-18 10:02:27.821', NULL, 'd4619a6f3f53c21bc4d6846df58a2910', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRCET0RKD7ED9D9RY5Q99RQG', '06FRCEV8Q32C2FW9Y6733419DG', '2026-07-21 19:52:03.640', '2026-07-21 19:52:03.640', NULL, 'ca15963235e712fe627f042e4c7bcf4e', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRCET0RKD7ED9D9RY5Q99RQG', '06FRCEWBS5RC5YET0SMSPZ1E9W', '2026-07-21 19:52:04.120', '2026-07-21 19:52:04.120', NULL, 'b9e1fc2d7728963a4714e37339c4922c', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRCEV8Q32C2FW9Y6733419DG', '06FRCEXHYP8RVBPB8QNZHTNTR0', '2026-07-21 19:52:15.028', '2026-07-21 19:52:15.028', NULL, 'b781afbe0b2f2fec9984028735bb3ac8', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRCEV8Q32C2FW9Y6733419DG', '06FRCEZ47J16E3XKE957HGR8H4', '2026-07-21 19:52:15.524', '2026-07-21 19:52:15.524', NULL, '749185b876df0bc1758535d970fa3a67', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRCET0RKD7ED9D9RY5Q99RQG', '06FRCF0CX1Y5DTD3ER2JCDT27G', '2026-07-21 19:52:17.706', '2026-07-21 19:52:17.706', NULL, 'cce3ac218e31cd193fc1815f2d86bf3b', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
INSERT INTO ticket_deps (blocker_record_id, blocked_record_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FRCEZ47J16E3XKE957HGR8H4', '06FRCF1A0K41K6S85X0HTXACHM', '2026-07-21 19:52:17.907', '2026-07-21 19:52:17.907', NULL, 'd01687ee1d1ae90d4deff2dede04cd47', 2) ON CONFLICT(blocker_record_id, blocked_record_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash);
@@ -1667,3 +1667,8 @@ INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, chang
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 ('06FRCEWBS5RC5YET0SMSPZ1E9W', 'status', 'review', 'done', NULL, '2026-07-21 22:54:32', '2026-07-21 22:54:32.390', '2026-07-21 22:54:32.390', NULL, '40cbabb32cf6ebabaf362d536ce3a3a5', 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 ('06FRCEXHYP8RVBPB8QNZHTNTR0', 'status', 'backlog', 'in_progress', NULL, '2026-07-22 08:00:52', '2026-07-22 08:00:52.300', '2026-07-22 08:00:52.300', NULL, 'd8baca0fa0c74bce4ec0387c8a0699bd', 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 ('06FRCEZ47J16E3XKE957HGR8H4', 'status', 'backlog', 'in_progress', NULL, '2026-07-22 08:00:52', '2026-07-22 08:00:52.307', '2026-07-22 08:00:52.307', NULL, '2b5b5fb32f256dfd64f8d8b2135b42bf', 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.', '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.', NULL, '2026-07-22 12:37:50', '2026-07-22 12:37:50.448', '2026-07-22 12:37:50.448', NULL, '84a225b957e0106d111f3aa334f882c2', 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 ('06FRCEXHYP8RVBPB8QNZHTNTR0', 'status', 'in_progress', 'review', NULL, '2026-07-22 14:50:50', '2026-07-22 14:50:50.781', '2026-07-22 14:50:50.781', NULL, 'ff6f498d0949127287e7a885729c020d', 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 ('06FRCEZ47J16E3XKE957HGR8H4', 'status', 'in_progress', 'review', NULL, '2026-07-22 14:50:50', '2026-07-22 14:50:50.784', '2026-07-22 14:50:50.784', NULL, 'fb6f65da8857906958d2865936070c78', 2) ON CONFLICT(hash) DO NOTHING;
+5
View File
@@ -2445,3 +2445,8 @@ INSERT INTO tickets (record_id, type, parent_record_id, title, description, stat
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 ('06FRCEZ47J16E3XKE957HGR8H4', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Continuous cursor-anchored zoom ladder in the client — rung selection, progressive refinement, seam zoom with full-zoom-out reset', 'Zoom-ladder migration step 5 (docs/architecture/atlas-zoom-ladder-t1143.md SS5/SS8) under Jeroen''s seam ruling (2026-07-21): wheel zoom is CONTINUOUS and CURSOR-ANCHORED from the orbital frame down through regional granularities (supersedes the click-through-only entry; D-013''s ''zoom gesture owns spatial descent'' restored for this seam), with the HARD CONDITION that a full zoom-out resets to the original canonical planetary frame and location (the fixed orbital framing is the ladder''s top rest state — no drifted pan state at the top). Rung-selection rule: sample spacing E/C (world extent per canvas px); request the coarsest rung whose spacing <= 2x(E/C). Progressive refinement: hold the coarse composite, fetch finer granularity, sharpen in place (Araminta SS6: no hue step, no layout jump, coastline stable across rungs — acceptance criteria in the doc). Request coalescing across zoom gestures; T-1138''s click-through + reticle retire in the same change. Encoding continuity per SS6 (one colorizer family; hue-average rule ties to the reclassification mode). Blocked by the granularity carrier; the planetary top rung can land before or after (degrade gracefully to current fixed orbital view).', 'in_progress', 'high', NULL, 'client', 'D-226', '2026-07-21 19:51:39.836', '2026-07-22 08:00:52.307', NULL, '604a735cc5c9629c6a06599ff0c7a9cf', 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 ('06FRJD57678SVWD7XTSV9E3MSW', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Port whole-body Atlas overlays onto the zoom ladder (markers, city sidebar, POL/POP/gen overlays)', 'T-1153/T-1152 retired the AtlasViewer heightmap screen as the atlas entry; its 17-entry overlay surface did NOT carry to the Region-rung ladder view (AtlasWindowViewer has only gen_dw_temp/moisture/veg). Deferred wholesale by Stig with rationale: these overlays key off markers.json/city-names/road-graph/settlement data the DistrictWindowLayer wire shape does not carry — porting is a per-overlay design + wire question (at what rung does a settlement marker fade in? does POL make sense over a Region composite?), not a mechanical copy. Deferred set: city markers + click-to-inspect city data sidebar; roads/rail/settlements/quarter-footprint generation overlays (gen_l1_rivers/basins/attractors, gen_district, gen_l2_roads, gen_l3_settlements, gen_region_grid, gen_l4_quarters); political zones, population density, corp presence, production/stockpile toggles, gate markers, named features. The retired code survives intact and unreachable on atlas_viewer.gd — reuse it or retire it explicitly per overlay. Needs Araminta (per-rung affordance/fade rules) + Tyre/Dudley (which overlays need new wire fields vs client-side joins). Until this lands the ladder view is terrain-only — a real capability regression vs the old planetary screen, accepted knowingly in the T-1152/T-1153 batch.', 'backlog', 'high', NULL, 'client', 'D-226', '2026-07-22 09:42:37.105', '2026-07-22 09:42:37.105', NULL, 'b87a9969d7d2b1c22e56cf5fe8942c78', 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.', 'backlog', 'medium', NULL, 'client', NULL, '2026-07-22 09:42:47.197', '2026-07-22 09:42:47.197', NULL, '5393a8aede7343b10dddc1edd36ac8c0', 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.', 'backlog', 'medium', NULL, 'client', NULL, '2026-07-22 09:42:47.197', '2026-07-22 12:37:50.448', NULL, '68dc774b820b4edcf41f6dee568844e0', 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 ('06FRCEXHYP8RVBPB8QNZHTNTR0', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Derived planetary rung — progressive capped-density tiling; AtlasViewer heightmap texture retires', 'Zoom-ladder migration step 4 (docs/architecture/atlas-zoom-ladder-t1143.md SS4/SS8) under Jeroen''s carrier ruling (2026-07-21): the orbital view becomes fully derived output served as PROGRESSIVE CAPPED-DENSITY TILING on the generalized district_window carrier at coarse granularity (region-band octaves, region_baseline_at_district blend path — no invent_primitives at orbital wavelengths) — no dense raster wire shape, no tagged-envelope migration. Client: AtlasViewer''s direct heightmap-texture display path retires IN THE SAME CHANGE that the derived orbital view lands (never strand the view); heightmap PNGs/systems.db raster become invisible derivation input only (D-166 corollary; import_heightmaps stays as input storage). Carries design risks R1 (planetary cost story is stacked unmeasured extrapolations — measure first), R2 (stepped categorical fields at orbital scale), R5 (granularity param cannot express coarser-than-district — needs the enum/log-scale redesign before this rung). Blocked by the granularity carrier and derive_at_metres steps.', 'review', 'high', NULL, 'server', 'D-226', '2026-07-21 19:51:26.966', '2026-07-22 14:50:50.780', NULL, '5b3e98c8a8d968ad822f0e013df654f6', 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 ('06FRCEZ47J16E3XKE957HGR8H4', 'story', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Continuous cursor-anchored zoom ladder in the client — rung selection, progressive refinement, seam zoom with full-zoom-out reset', 'Zoom-ladder migration step 5 (docs/architecture/atlas-zoom-ladder-t1143.md SS5/SS8) under Jeroen''s seam ruling (2026-07-21): wheel zoom is CONTINUOUS and CURSOR-ANCHORED from the orbital frame down through regional granularities (supersedes the click-through-only entry; D-013''s ''zoom gesture owns spatial descent'' restored for this seam), with the HARD CONDITION that a full zoom-out resets to the original canonical planetary frame and location (the fixed orbital framing is the ladder''s top rest state — no drifted pan state at the top). Rung-selection rule: sample spacing E/C (world extent per canvas px); request the coarsest rung whose spacing <= 2x(E/C). Progressive refinement: hold the coarse composite, fetch finer granularity, sharpen in place (Araminta SS6: no hue step, no layout jump, coastline stable across rungs — acceptance criteria in the doc). Request coalescing across zoom gestures; T-1138''s click-through + reticle retire in the same change. Encoding continuity per SS6 (one colorizer family; hue-average rule ties to the reclassification mode). Blocked by the granularity carrier; the planetary top rung can land before or after (degrade gracefully to current fixed orbital view).', 'review', 'high', NULL, 'client', 'D-226', '2026-07-21 19:51:39.836', '2026-07-22 14:50:50.784', NULL, '95ddb5bb1bf7f46e88848a9aacba1fef', 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);