chore(meta): activate regional-window batch — T-1137/T-1138 in progress (atlas-regional-window worktree; Dudley serving + Stig screen)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 11:53:33 +02:00
co-authored by Claude Fable 5
parent f6db47f4a1
commit bb4506213a
2 changed files with 14 additions and 0 deletions
@@ -1583,3 +1583,5 @@ SUPERSEDED ENTRY MECHANIC (Jeroen, 2026-07-21 companion hands-on — recorded as
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 ('06FR6Y1CNA5JJ68RN897RM7FBC', 'status', 'backlog', 'in_progress', NULL, '2026-07-21 06:58:48', '2026-07-21 06:58:48.125', '2026-07-21 06:58:48.125', NULL, '07436c6c5318eca6cd011f2dd67c2dc1', 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 ('06FR6Y1CNA5JJ68RN897RM7FBC', 'status', 'in_progress', 'review', NULL, '2026-07-21 07:16:21', '2026-07-21 07:16:21.984', '2026-07-21 07:16:21.984', NULL, 'c17c3d899e4addd70522da86c66db245', 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 ('06FR6Y1CNA5JJ68RN897RM7FBC', 'status', 'review', 'done', NULL, '2026-07-21 07:30:24', '2026-07-21 07:30:24.988', '2026-07-21 07:30:24.988', NULL, 'c422e25bdefe3e51a1b5db3ed272b54d', 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', 'backlog', 'in_progress', NULL, '2026-07-21 09:51:17', '2026-07-21 09:51:17.157', '2026-07-21 09:51:17.157', NULL, '817bb1654d0c0e45b538ce75cf29c32d', 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', 'backlog', 'in_progress', NULL, '2026-07-21 09:51:17', '2026-07-21 09:51:17.164', '2026-07-21 09:51:17.164', NULL, 'b8ad42d6070f54896dd9690c6eb0c344', 2) ON CONFLICT(hash) DO NOTHING;
+12
View File
@@ -2310,3 +2310,15 @@ 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 ('06FR6Y1CNA5JJ68RN897RM7FBC', 'bug', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Companion Atlas friction — overlay bar overflows right edge; dev ticket ids in tooltips', 'Jeroen''s first make atlas hands-on (2026-07-21). Two UI defects on the shared Atlas viewer (visible in-game too): (1) the overlay toggle bar is a single HBoxContainer row — 17 chips at 42px min overflow the right screen edge (his 2000px window cut the bar mid-BAS); positioning also measured the bar''s own width with a 520px fallback, aggravating the overflow. Fix: HFlowContainer with ALIGNMENT_END, viewer gives it everything right of the header (OVERLAY_BAR_HEADER_RESERVE) and rows wrap right-aligned. (2) OVERLAY_DEFS tooltips leaked dev provenance into player-facing text — ticket ids (#960, T-960, T-1046, T-1118, T-1119) and decision ids (D-181, D-226, D-243) mean nothing in-game; stripped to plain language keeping the semantic content (visibility-ladder wording like observable/needs corporate contact stays). His third point — planetary map fixed + rectangle-cursor click-through entry — is a design revision recorded on D-226 (T-1124 SS5 entry revision) and folded into T-1138, not this bug.', 'in_progress', 'medium', NULL, 'client', NULL, '2026-07-21 06:58:38.890', '2026-07-21 06:58:48.125', NULL, '1944f85140fa14cfe8a5676b6452bdf2', 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 ('06FR6Y1CNA5JJ68RN897RM7FBC', 'bug', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Companion Atlas friction — overlay bar overflows right edge; dev ticket ids in tooltips', 'Jeroen''s first make atlas hands-on (2026-07-21). Two UI defects on the shared Atlas viewer (visible in-game too): (1) the overlay toggle bar is a single HBoxContainer row — 17 chips at 42px min overflow the right screen edge (his 2000px window cut the bar mid-BAS); positioning also measured the bar''s own width with a 520px fallback, aggravating the overflow. Fix: HFlowContainer with ALIGNMENT_END, viewer gives it everything right of the header (OVERLAY_BAR_HEADER_RESERVE) and rows wrap right-aligned. (2) OVERLAY_DEFS tooltips leaked dev provenance into player-facing text — ticket ids (#960, T-960, T-1046, T-1118, T-1119) and decision ids (D-181, D-226, D-243) mean nothing in-game; stripped to plain language keeping the semantic content (visibility-ladder wording like observable/needs corporate contact stays). His third point — planetary map fixed + rectangle-cursor click-through entry — is a design revision recorded on D-226 (T-1124 SS5 entry revision) and folded into T-1138, not this bug.', 'review', 'medium', NULL, 'client', NULL, '2026-07-21 06:58:38.890', '2026-07-21 07:16:21.984', NULL, '9f48ccd62c0fde1c731362c426f82e79', 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 ('06FR6Y1CNA5JJ68RN897RM7FBC', 'bug', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Companion Atlas friction — overlay bar overflows right edge; dev ticket ids in tooltips', 'Jeroen''s first make atlas hands-on (2026-07-21). Two UI defects on the shared Atlas viewer (visible in-game too): (1) the overlay toggle bar is a single HBoxContainer row — 17 chips at 42px min overflow the right screen edge (his 2000px window cut the bar mid-BAS); positioning also measured the bar''s own width with a 520px fallback, aggravating the overflow. Fix: HFlowContainer with ALIGNMENT_END, viewer gives it everything right of the header (OVERLAY_BAR_HEADER_RESERVE) and rows wrap right-aligned. (2) OVERLAY_DEFS tooltips leaked dev provenance into player-facing text — ticket ids (#960, T-960, T-1046, T-1118, T-1119) and decision ids (D-181, D-226, D-243) mean nothing in-game; stripped to plain language keeping the semantic content (visibility-ladder wording like observable/needs corporate contact stays). His third point — planetary map fixed + rectangle-cursor click-through entry — is a design revision recorded on D-226 (T-1124 SS5 entry revision) and folded into T-1138, not this bug.', 'done', 'medium', NULL, 'client', NULL, '2026-07-21 06:58:38.890', '2026-07-21 07:30:24.988', NULL, 'eaebb38c8c0ddc70007694a9efb01dca', 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 ('06FQ9B8F39QD7PGPG4W35AWCRG', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Wire windowed district-resolution Atlas layer — server half (D-226 T-1124 amendment)', 'Implement the D-226 T-1124 amendment SS1-SS4 (server half). (1) AtlasLayerRequest gains window_center: Option-DistrictPos + window_n: u32, both serde(default) — absent = whole-body, wire back-compat. (2) AtlasLayerResponse gains district_window: Option-DistrictWindowLayer per the amendment''s exact field list (echoed center/n + six parallel arrays: morphology u8, elev_q u8, temp_dc i16 with the RegionGridLayer sentinel, moisture_q u8, vegetation u8 incl Marine=6, glaciation u8). (3) handle_atlas_request gains a window-serving branch calling derive_district per cell (district_profile.rs:1415), clamping window_n to 1..=DISTRICT_WINDOW_MAX_N=64 server-side (never trust the wire).
MUST RESOLVE FIRST the TerrainAnalysis availability decision (named in the amendment + T-1124 report): BodyWorldState does NOT retain TerrainAnalysis after cascade completion (transient ~2 MB, dropped at cascade.rs:141 per D-203 memory budget), but derive_district needs a reference to it. Either (a) cache TerrainAnalysis alongside BodyWorldState (quantify the ~2 MB/body cost against BodyWorldStateCache LRU capacity) or (b) re-derive via run_layer1 per cache miss (quantify the O(w*h) whole-body re-analysis as a window-request tax aliveness_probe''s current workaround). Decide with numbers, record the choice in the PR.
(4) Tests mirroring build_region_grid/build_district_grid precedents: empty/clamped-window edges, msgpack round-trip, and a determinism spot-check (two full passes byte-identical promoting the T-1123 probe-only proof to a real test, since this is the first served layer built from the on-demand derive path).
Design change from the PR #185 Troblum review (binding, folded into the amendment): the window-serving branch must NOT call derive_district inline in serve_atlas_requests/PreInput window derives ride the SAME Rayon background queue + Pending-response pattern the whole-body cache-miss path uses (response on a later tick; the client''s SS5 border-fade covers the wait). Recommended: per-connection coalescing a newly queued window request supersedes an unserved older one for the same body. The SS4 numbers (~7ms n=32 / ~29ms n=64 debug) are background-queue latency, not tick-thread cost. Also: the amendment now pins a windowed-family ceiling district_window is the ONLY windowed-query field this struct may carry; a second windowed query is a dedicated response message by rule.', 'in_progress', 'high', NULL, 'server', NULL, '2026-07-18 10:02:06.490', '2026-07-21 09:51:17.157', NULL, 'eb8bfc795d16fd6273916dfdb14c9975', 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 ('06FQ9B977KGH3BWP1YQTN32TYM', 'task', '06FB0TNSRZXCHGS16BFHSSGSV4', 'Atlas regional map screen — client half (D-226 T-1124 amendment SS5)', 'Implement the D-226 T-1124 amendment SS5 (client half). protocol.gd passthrough: encode_atlas_layer_request gains the window params (serde-default absent = whole-body); atlas_response_from_raw gains district_window passthrough (the doc comment near protocol.gd:801 names this the one client-side spot). New regional viewing mode per SS5: zoom-threshold LOD swap in the existing AtlasViewer (new DISTRICT_WINDOW_MIN_ZOOM past SETTLEMENT_LABEL_MIN_ZOOM — not a new screen, not a nav push); morphology base layer lightness-modulated by elev_q (probe MORPHOLOGY_RGB hues); gen_dw_temp/gen_dw_moisture/gen_dw_veg toggle overlays (temp reuses the T-1118 region-ramp colorizer EXACTLY — one colorizer across both zoom levels; Marine=6 renders transparent; glaciation is an always-on ice-tint modifier, not a toggle); GENERATION_LEGEND entries with the 17-zone base folded to ~5 family rows. Client window cache keyed (body_id, center, n), LRU-evict only (D-227 determinism — no freshness check). Re-request on PAN ONLY when the view passes the held window''s edge (zoom never refetches); 150ms post-drag-release debounce; windows float on the pan center (not grid-snapped). Implant chrome: ImplantHeader anchor name + extent subtitle; map palettes stay out of theme accent roles (ACCENT_ACTIVE gold is the settlement marker''s).
Implementation note (Tyre, T-1124 report): DISTRICT_WINDOW_MIN_ZOOM proposed at 6.0 but atlas_viewer.gd caps _view_zoom at MAX_ZOOM = 8.0 only a 6.0-8.0 band for the whole in-window-zoom detail story the SS5 legibility argument depends on. Tunable client constant, not wire contract: either lower the swap threshold or raise MAX_ZOOM; decide with on-screen-scale math at implementation.
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.', 'in_progress', 'high', NULL, 'client', NULL, '2026-07-18 10:02:12.668', '2026-07-21 09:51:17.164', NULL, '1b04077f985d7dbf089652c892930536', 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);