diff --git a/.pql/changelog/ticket_history/2026-07.sql b/.pql/changelog/ticket_history/2026-07.sql index ea22bfc06..8b62bb2fc 100644 --- a/.pql/changelog/ticket_history/2026-07.sql +++ b/.pql/changelog/ticket_history/2026-07.sql @@ -1589,3 +1589,4 @@ 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 ('06FQ9B977KGH3BWP1YQTN32TYM', 'status', 'in_progress', 'review', NULL, '2026-07-21 11:36:01', '2026-07-21 11:36:01.472', '2026-07-21 11:36:01.472', NULL, 'd533c4a7a3725cbfd9d627f4d8e51a37', 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 ('06FQ9B8F39QD7PGPG4W35AWCRG', 'status', 'review', 'done', NULL, '2026-07-21 12:03:40', '2026-07-21 12:03:40.353', '2026-07-21 12:03:40.353', NULL, 'cc7df4e537775f8ce9167f5c5d7d7851', 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 ('06FQ9B977KGH3BWP1YQTN32TYM', 'status', 'review', 'done', NULL, '2026-07-21 12:03:40', '2026-07-21 12:03:40.355', '2026-07-21 12:03:40.355', NULL, 'dc60887c48f8e2aa55786cd884e8b0bf', 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 ('06FR97BZHA6DV68S1BFG0HBN8G', 'status', 'backlog', 'in_progress', NULL, '2026-07-21 12:20:47', '2026-07-21 12:20:47.188', '2026-07-21 12:20:47.188', NULL, 'ff85feaa7a633ecabb8187d5ea68b7ba', 2) ON CONFLICT(hash) DO NOTHING; diff --git a/.pql/changelog/tickets/2026-07.sql b/.pql/changelog/tickets/2026-07.sql index dcba57130..28df93e10 100644 --- a/.pql/changelog/tickets/2026-07.sql +++ b/.pql/changelog/tickets/2026-07.sql @@ -2349,3 +2349,4 @@ Implementation note (Tyre, T-1124 report): DISTRICT_WINDOW_MIN_ZOOM proposed at SUPERSEDED ENTRY MECHANIC (Jeroen, 2026-07-21 companion hands-on — recorded as the D-226 T-1124 SS5 entry revision): NO zoom-threshold LOD swap and NO DISTRICT_WINDOW_MIN_ZOOM — the earlier zoom-headroom note is moot. The planetary heightmap view becomes FIXED: remove drag-pan/wheel-zoom of the planetary canvas IN THIS TICKET, same change as the replacement (never strand close inspection), and update the header hint text accordingly. Entry: hovering the planetary heightmap shows a rectangle cursor representing the regional-mode bounds; click descends into the regional map centered on the click point''s derived DistrictPos (float-on-center rules carry over with pan-center read as click-point). In-mode behavior unchanged (pan-only refetch, 150ms debounce, D-227 cache, border-fade). Morph transition between modes explicitly deferred — the descent may cut. Open design point: the rectangle cursor is an affordance, not to scale (n=64 = ~131km = a few px on a planetary canvas) — resolve the honest representation (true-extent rectangle + zoom-in cut, or not-to-scale reticle with the real extent labeled) without implying more coverage than real. Note: set_view/get_view_offset (T-1120 capture API) must survive for the visual-golden harness even after user pan/zoom is removed.', 'done', 'high', NULL, 'client', NULL, '2026-07-18 10:02:12.668', '2026-07-21 12:03:40.355', NULL, 'fa260128491e3d8fae6b3cb991b9afe6', 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 ('06FR97BZHA6DV68S1BFG0HBN8G', 'bug', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Descent allowed outside the map texture — letterbox clicks produce impossible DistrictPos; window opens as unfitted postage stamp', 'Jeroen''s first hands-on descent (2026-07-21): clicked in the letterbox beside the fixed planetary map and landed at DistrictPos (12276, 3021) — an IMPOSSIBLE column (largest terrestrial body with terrain is 7324.5 km, max valid col ~11236). Root cause: _update_hover sets _hover_active unconditionally and neither the reticle guard nor the descend fall-through checks that the cursor is on the heightmap texture — the 2:1 map letterboxed in a wide viewport leaves dead zones where the reticle promises descent and the click derives beyond the planet edge (clamped sampling = the uniform green he saw). Second defect: atlas_window_viewer.enter() resets zoom 1.0 / offset ZERO with no fit — an n=32 composite renders 512px native in a ~1900px viewport (postage stamp, not a filled map). Fixes: (1) client bounds gate — reticle hidden and descent inert unless screen_to_canvas(pos) is inside [0,tex_w)x[0,tex_h); (2) fit-and-center on enter + first window arrival + resize (zoom = ~0.9 x viewport/composite clamped to MIN/MAX_ZOOM, offset centers); (3) district header gains the body proper name (cheap half of T-1141 pulled forward — pass the body dict into enter); (4) SERVER: validate window_center like window_n — wrap columns modulo the body circumference, clamp rows to +/-rows_half (never trust the wire; today an out-of-range center derives clamped garbage and caches it); (5) live full-chain verification this time — the T-1138 live check requested a known-good pos directly over the wire, bypassing the click chain entirely, which is exactly where this hid. Also verify drag-pan works in the fitted view.', 'backlog', 'high', NULL, 'client', NULL, '2026-07-21 12:19:02.154', '2026-07-21 12:19:02.154', NULL, '7fc78c537e3d9a9c64e644e0cfb6f5db', 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 ('06FR97DPEHANCYX2AC4021BSJC', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Regional window legibility on quiet interiors — window-local elevation contrast', 'Follow-on from Jeroen''s first descent (2026-07-21): even with T-1142 fixed, many interior windows are genuinely one morphology zone across 66km, and the composite''s absolute lightness modulation (0.7 + 0.3 x elev_q/100, D-226 T-1124 SS5) spans only ~1-3% lightness over a window whose local elev range is small — the window reads as a dead flat fill rather than terrain. Proposal to evaluate WITH Araminta (SS5 is her encoding): window-local contrast stretch — normalize lightness within the window''s own elev min..max (fixed band, e.g. 0.62..0.92) with a degenerate floor (single-value window stays honestly flat), deterministic per window, mirroring how the aliveness_probe elev panel achieved its 12-level local texture. Alternative/complement: a faint deterministic per-cell variation or contour hinting. Any change to the recorded SS5 encoding gets a one-line amendment note. Assess AFTER T-1142 lands — real clicks will then land on real terrain and the residual flatness can be judged on coastal vs interior windows.', 'backlog', 'medium', NULL, 'client', NULL, '2026-07-21 12:19:16.212', '2026-07-21 12:19:16.212', NULL, '51e0232b3c75b03f994638ff86943956', 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 ('06FR97BZHA6DV68S1BFG0HBN8G', 'bug', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Descent allowed outside the map texture — letterbox clicks produce impossible DistrictPos; window opens as unfitted postage stamp', 'Jeroen''s first hands-on descent (2026-07-21): clicked in the letterbox beside the fixed planetary map and landed at DistrictPos (12276, 3021) — an IMPOSSIBLE column (largest terrestrial body with terrain is 7324.5 km, max valid col ~11236). Root cause: _update_hover sets _hover_active unconditionally and neither the reticle guard nor the descend fall-through checks that the cursor is on the heightmap texture — the 2:1 map letterboxed in a wide viewport leaves dead zones where the reticle promises descent and the click derives beyond the planet edge (clamped sampling = the uniform green he saw). Second defect: atlas_window_viewer.enter() resets zoom 1.0 / offset ZERO with no fit — an n=32 composite renders 512px native in a ~1900px viewport (postage stamp, not a filled map). Fixes: (1) client bounds gate — reticle hidden and descent inert unless screen_to_canvas(pos) is inside [0,tex_w)x[0,tex_h); (2) fit-and-center on enter + first window arrival + resize (zoom = ~0.9 x viewport/composite clamped to MIN/MAX_ZOOM, offset centers); (3) district header gains the body proper name (cheap half of T-1141 pulled forward — pass the body dict into enter); (4) SERVER: validate window_center like window_n — wrap columns modulo the body circumference, clamp rows to +/-rows_half (never trust the wire; today an out-of-range center derives clamped garbage and caches it); (5) live full-chain verification this time — the T-1138 live check requested a known-good pos directly over the wire, bypassing the click chain entirely, which is exactly where this hid. Also verify drag-pan works in the fitted view.', 'in_progress', 'high', NULL, 'client', NULL, '2026-07-21 12:19:02.154', '2026-07-21 12:20:47.187', NULL, '5c7743dea68b35e327f890d3a7d96c61', 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);