From 531041506d3c26ec1b795f19f16476cb638841b4 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Thu, 16 Jul 2026 21:44:11 +0200 Subject: [PATCH] =?UTF-8?q?chore(meta):=20close=20screenshot-goldens=20bat?= =?UTF-8?q?ch=20=E2=80=94=20T-1120=20done=20(PR=20#180=20merged)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pql/changelog/ticket_history/2026-07.sql | 1 + .pql/changelog/tickets/2026-07.sql | 1 + 2 files changed, 2 insertions(+) diff --git a/.pql/changelog/ticket_history/2026-07.sql b/.pql/changelog/ticket_history/2026-07.sql index c6ff68523..be9add8df 100644 --- a/.pql/changelog/ticket_history/2026-07.sql +++ b/.pql/changelog/ticket_history/2026-07.sql @@ -1410,3 +1410,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 ('06FPQXK8D6YVWVC2TB2ZR25K6G', 'status', 'backlog', 'in_progress', NULL, '2026-07-16 17:30:59', '2026-07-16 17:30:59.851', '2026-07-16 17:30:59.851', NULL, '724b47769f20cc8e6035e910bdd088fb', 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 ('06FPQXK8D6YVWVC2TB2ZR25K6G', 'assigned_to', NULL, 'stig', NULL, '2026-07-16 17:31:07', '2026-07-16 17:31:07.367', '2026-07-16 17:31:07.367', NULL, '35ca5550701796deddc807d8768da485', 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 ('06FPQXK8D6YVWVC2TB2ZR25K6G', 'status', 'in_progress', 'review', NULL, '2026-07-16 18:36:30', '2026-07-16 18:36:30.146', '2026-07-16 18:36:30.146', NULL, '49e8cbce555de010d3c9dc571f34aacf', 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 ('06FPQXK8D6YVWVC2TB2ZR25K6G', 'status', 'review', 'done', NULL, '2026-07-16 19:43:56', '2026-07-16 19:43:56.313', '2026-07-16 19:43:56.313', NULL, 'fe698fe8c23007f9007197b370476c38', 2) ON CONFLICT(hash) DO NOTHING; diff --git a/.pql/changelog/tickets/2026-07.sql b/.pql/changelog/tickets/2026-07.sql index 14c786c4c..5fc1fbed2 100644 --- a/.pql/changelog/tickets/2026-07.sql +++ b/.pql/changelog/tickets/2026-07.sql @@ -1947,3 +1947,4 @@ 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 ('06FPRCCX8DGJJSMQZNM25VDJQ4', 'task', '06FBPPMZNNEV052DBYYY3A897C', 'Visual golden baseline drift — all 19 pre-existing goldens fail 12-14% on this box (font/AA/GPU)', 'Found during T-1120 (2026-07-16): a full tests/run-visual pass shows every one of the 19 pre-existing golden scenarios failing at 12-14% pixel diff (fog_debug 44.7%) on this box — whole-region mismatches (vision cone, HUD corners, text) consistent with font/AA/GPU-driver rendering drift between the machine that produced the committed goldens and this Mesa/AMD stack, NOT a real regression. Also: fog_live_hub stalls for minutes in the visible-window (no xvfb) fallback. The new T-1120 atlas goldens were captured AND verified on this box (12/12 exact match) so they are self-consistent here. Investigation: cross-machine golden portability — options include per-machine baselines, higher tolerance + masked regions, font/AA pinning, xvfb install for consistent rasterization, or declaring one canonical capture box. Decide + record; regenerate the 19 goldens on the canonical box once decided.', 'backlog', 'medium', NULL, 'client', NULL, '2026-07-16 18:30:18.692', '2026-07-16 18:30:18.692', NULL, '1453787231b0fe267b765fd4f55e6db2', 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 ('06FPQXK8D6YVWVC2TB2ZR25K6G', 'task', '06FBPPMZNNEV052DBYYY3A897C', 'Atlas screenshot capture matrix + golden smoke (visual_capture extension)', 'Jeroen''s ask (2026-07-16): in-game Atlas screenshots at several zoom levels across a varied body sample, treated as goldens for smoke tests. Recon (this session) mapped the path — reuse, don''t rebuild: extend client/tests/visual_capture.gd with an atlas-matrix mode (one Godot boot looping body x zoom x overlay-set), scenarios modeled on visual_scenarios.gd atlas_gen_open (currently GJ71c-hardcoded — parameterize); server lifecycle per tests/run-visual (--test-mode --port 0, parse LISTENING, SR_LIVE=1 — Atlas data is 100% systems.db regardless of world); waits on SimBridge.atlas_layers_received/city_names_received (status Ready) not fixed delays; capture via the existing _capture() (frame_post_draw -> save_png); xvfb-run + --rendering-driver opengl3, NEVER --headless (blank PNGs under dummy driver). Promote a curated subset into client/tests/golden/visual/ + tests/visual.json (existing tooling/visual-diff tolerance machinery, make visual-update). Known warts: no public zoom/pan setter on AtlasViewer (reach into _view_zoom/_view_offset + _apply_transform per existing convention, or add a small set_view() API); Sol uses the legacy markers path (exclude); async races need per-shot wait/timeout. Body sample suggestion: GJ380c, GJ144e, GJ338Bd, GJ820Bc, GJ251c (honest T-1116 water/no-roads exhibit), + a frozen body and a moon.', 'review', 'medium', 'stig', 'client', NULL, '2026-07-16 17:25:38.537', '2026-07-16 18:36:30.141', NULL, '4785da2d375c52d86af946406a1031f4', 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 ('06FPRTBJWG6Z7B8H5S115E2K74', 'task', '06FBPPMZNNEV052DBYYY3A897C', 'Shared live-server GdUnit helper — dedupe spawn/handshake/send-receive across roundtrip suites', 'PR #180 root-cause fallout (2026-07-16): test_input_roundtrip.gd and test_sprint2_proof.gd copy-paste the entire live-server harness (spawn + port retry + handshake + _send_and_receive) — which is why the T-1068 stance-cooldown pacing fix (COOLDOWN_TICKS post-ack spacing) existed in sprint2_proof but never reached input_roundtrip, producing today''s gate flake (MoveEast silently discarded by the D-053 Walk cooldown under load; root-caused with server trace logs). Extract a shared GdUnit helper (e.g. client/tests/helpers/live_server_harness.gd) carrying: port-retry spawn (server binds AFTER ~250ms init — death-during-connect retries on a fresh port), handshake+startup exchange, drain-then-send-then-wait with wall-clock deadline, and D-053 cooldown pacing. Port both suites onto it; any future live-roundtrip suite starts there. All three hardening rounds from today (port collision, wall-clock deadline, cooldown pacing) must survive the extraction with their comments intact.', 'backlog', 'medium', NULL, 'client', NULL, '2026-07-16 19:31:17.860', '2026-07-16 19:31:17.860', NULL, '441fe4bbf5e7ce46cce39ded40c01116', 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 ('06FPQXK8D6YVWVC2TB2ZR25K6G', 'task', '06FBPPMZNNEV052DBYYY3A897C', 'Atlas screenshot capture matrix + golden smoke (visual_capture extension)', 'Jeroen''s ask (2026-07-16): in-game Atlas screenshots at several zoom levels across a varied body sample, treated as goldens for smoke tests. Recon (this session) mapped the path — reuse, don''t rebuild: extend client/tests/visual_capture.gd with an atlas-matrix mode (one Godot boot looping body x zoom x overlay-set), scenarios modeled on visual_scenarios.gd atlas_gen_open (currently GJ71c-hardcoded — parameterize); server lifecycle per tests/run-visual (--test-mode --port 0, parse LISTENING, SR_LIVE=1 — Atlas data is 100% systems.db regardless of world); waits on SimBridge.atlas_layers_received/city_names_received (status Ready) not fixed delays; capture via the existing _capture() (frame_post_draw -> save_png); xvfb-run + --rendering-driver opengl3, NEVER --headless (blank PNGs under dummy driver). Promote a curated subset into client/tests/golden/visual/ + tests/visual.json (existing tooling/visual-diff tolerance machinery, make visual-update). Known warts: no public zoom/pan setter on AtlasViewer (reach into _view_zoom/_view_offset + _apply_transform per existing convention, or add a small set_view() API); Sol uses the legacy markers path (exclude); async races need per-shot wait/timeout. Body sample suggestion: GJ380c, GJ144e, GJ338Bd, GJ820Bc, GJ251c (honest T-1116 water/no-roads exhibit), + a frozen body and a moon.', 'done', 'medium', 'stig', 'client', NULL, '2026-07-16 17:25:38.537', '2026-07-16 19:43:56.313', NULL, 'b73fb765676495e74735564b36e0d8db', 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);