fix(ui): companion Atlas friction — wrapping overlay bar, clean tooltips + D-226 entry revision #186

Closed
jpmschweitzer wants to merge 0 commits from atlas-companion-friction into main
Owner

Summary

First-hands-on feedback round from Jeroen's make atlas session — two UI defects fixed (T-1140), one design revision recorded (D-226 T-1124 §5).

T-1140 — overlay bar overflow + dev-id leakage (fixed here)

  • The overlay toggle bar was a single HBoxContainer row: 17 chips at 42px min overflowed the right screen edge (the positioning also guessed the bar's width with a 520px fallback, so the row started too far right on top of everything). Now an HFlowContainer with ALIGNMENT_END: the viewer hands it everything right of the header (OVERLAY_BAR_HEADER_RESERVE = 360) and rows wrap right-aligned. Verified by live capture — all 18 chips visible, right-aligned, wrapping when the window narrows.
  • 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). All stripped to plain language; the visibility-ladder semantics survive as words ("public signal", "observable — requires presence", "needs corporate contact", "needs insider access").

D-226 T-1124 §5 entry revision (design record, no code here)

Jeroen's ruling: the planetary pixel-scaling pan/zoom "is only messing with the pixels" — the planetary heightmap view becomes fixed, and regional-map entry becomes an explicit click-through: hover shows a rectangle cursor representing the regional-mode bounds, click descends centered on the click point. Replaces the zoom-threshold LOD swap (DISTRICT_WINDOW_MIN_ZOOM retired before ever being built); D-013's zoom-owns-descent superseded for this seam only. In-mode behavior (§4 pan-refetch/debounce/cache/border-fade) unchanged; morph transition explicitly deferred. The current pan/zoom ships until T-1138 lands the replacement — removed in the same change so close inspection is never stranded. T-1138's description updated accordingly (including the not-to-scale rectangle-cursor question the screen design must resolve, and the note that the T-1120 set_view capture API must survive).

Verification

  • gdlint clean on both touched files; test_atlas_overlays 44/44; full gdUnit suite via the pre-push gate.
  • Live capture (tests/run-visual atlas_gen_open): bar renders all 18 chips right-aligned within bounds.
  • pql decisions validate clean on the amendment.

Tickets: T-1140 (fixed), T-1138 (updated)

## Summary First-hands-on feedback round from Jeroen's `make atlas` session — two UI defects fixed (T-1140), one design revision recorded (D-226 T-1124 §5). ### T-1140 — overlay bar overflow + dev-id leakage (fixed here) - The overlay toggle bar was a single `HBoxContainer` row: 17 chips at 42px min overflowed the right screen edge (the positioning also guessed the bar's width with a 520px fallback, so the row started too far right on top of everything). Now an `HFlowContainer` with `ALIGNMENT_END`: the viewer hands it everything right of the header (`OVERLAY_BAR_HEADER_RESERVE = 360`) and rows wrap right-aligned. Verified by live capture — all 18 chips visible, right-aligned, wrapping when the window narrows. - `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). All stripped to plain language; the visibility-ladder semantics survive as words ("public signal", "observable — requires presence", "needs corporate contact", "needs insider access"). ### D-226 T-1124 §5 entry revision (design record, no code here) Jeroen's ruling: the planetary pixel-scaling pan/zoom "is only messing with the pixels" — the planetary heightmap view becomes **fixed**, and regional-map entry becomes an explicit **click-through**: hover shows a rectangle cursor representing the regional-mode bounds, click descends centered on the click point. Replaces the zoom-threshold LOD swap (`DISTRICT_WINDOW_MIN_ZOOM` retired before ever being built); D-013's zoom-owns-descent superseded for this seam only. In-mode behavior (§4 pan-refetch/debounce/cache/border-fade) unchanged; morph transition explicitly deferred. The current pan/zoom ships until T-1138 lands the replacement — removed in the same change so close inspection is never stranded. T-1138's description updated accordingly (including the not-to-scale rectangle-cursor question the screen design must resolve, and the note that the T-1120 `set_view` capture API must survive). ### Verification - gdlint clean on both touched files; `test_atlas_overlays` 44/44; full gdUnit suite via the pre-push gate. - Live capture (`tests/run-visual atlas_gen_open`): bar renders all 18 chips right-aligned within bounds. - `pql decisions validate` clean on the amendment. Tickets: T-1140 (fixed), T-1138 (updated)
jpmschweitzer added 2 commits 2026-07-21 09:15:41 +02:00
Jeroen's first make atlas hands-on: 17 overlay chips in a single
HBoxContainer row ran off the right screen edge (positioning also
guessed the bar's width with a 520px fallback). The bar is now an
HFlowContainer with ALIGNMENT_END; the viewer gives it everything
right of the header (OVERLAY_BAR_HEADER_RESERVE) and rows wrap
right-aligned — verified via live capture, all 18 chips visible.

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; the visibility-ladder semantics (public signal / observable
/ needs corporate contact / needs insider access) stay.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The regional-map entry changes from zoom-threshold LOD swap to
explicit click-through: the planetary heightmap view becomes FIXED
(pan/zoom removed together with its replacement in T-1138, never
before); hovering shows a rectangle cursor representing the
regional-mode bounds; click descends centered on the click point's
derived DistrictPos. DISTRICT_WINDOW_MIN_ZOOM retired before ever
being built; D-013's zoom-owns-descent superseded for this seam only
(click owns descent). In-mode behavior unchanged (pan-only refetch,
debounce, cache, border-fade). Morph transition explicitly deferred.
Open at T-1138: the rectangle is an affordance, not to scale — n=64
is ~131 km = a few px on a planetary canvas; resolve the honest
representation in the screen design. T-1138 description updated;
T-1140 filed for the two companion UI defects fixed alongside.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
jpmschweitzer added 1 commit 2026-07-21 09:28:07 +02:00
Hoshe's finding: the wrap fix gave the bar container the full
header-adjacent width, and with ALIGNMENT_END + the pre-existing
MOUSE_FILTER_STOP that left a ~700px dead strip (1920px screens) left
of the chips silently swallowing map clicks/drags near the top edge —
a regression the wrap change introduced by widening the rect without
revisiting the filter. Two edits: the container is now
MOUSE_FILTER_IGNORE (the legend-panel/header/empty-notice idiom; chip
Buttons STOP their own events so toggles and tooltips are unaffected),
and _is_over_ui() no longer checks the bar rect (with IGNORE, chip
events never reach the viewer — checking the wide rect would recreate
the dead strip). Regression test pins both: filter mode + an
empty-strip point not registering as UI.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Author
Owner

Review: atlas-companion-friction → main (type: code + governance) — round 2 (fix round)

Single reviewer (proportionality: small bug-fix PR; the governance change transcribes a ruling Jeroen made directly).

Hoshe (QA): APPROVE (round 1: REQUEST_CHANGES, 1 finding — fixed and confirmed)

Round 1 verified clean: tooltip cleanup complete (18/18 defs intact, no dev ids anywhere in OVERLAY_DEFS or GENERATION_LEGEND, visibility-ladder semantics preserved as words); FlowContainer conversion correct (h_separation/v_separation override names, ALIGNMENT_END right-alignment); D-226 §5 entry-revision amendment internally consistent (cleanly names what it retires — DISTRICT_WINDOW_MIN_ZOOM, zoom-owns-descent for this seam — with a consistent T-1138 pointer); pql decisions validate clean.

Round-1 finding (fixed in 872aea041): the wrap fix widened the bar container to the full header-adjacent width, and the pre-existing MOUSE_FILTER_STOP turned the empty flow area left of the right-aligned chips into a ~700px dead strip (1920px screens) silently swallowing map clicks/drags near the top edge. Fix confirmed as two necessary edits, not one: container → MOUSE_FILTER_IGNORE (the legend-panel/header/empty-notice idiom; chip Buttons keep Godot's default STOP and still catch their own clicks/tooltips), AND _is_over_ui() drops the bar-rect check — verified independent of the filter fix because _is_over_ui() is a manual point-in-rect check called directly from _gui_input(), not routed through Control input propagation; either edit alone would have left the strip dead through the other path. Regression test geometry independently re-derived (bar spans 1528px, chips occupy 824px, strip point lands 8px into the 704px empty zone); assertions verified to fail pre-fix. Locked/disabled chips' tooltips unaffected (native mechanism, Buttons keep STOP). 46/46 suite + gdlint re-run independently.

# File Issue Status
1 atlas_overlay_bar.gd:37 + atlas_viewer.gd:709 Widened bar rect + STOP filter = dead input strip near top edge FIXED (872aea041) + regression test

Verdict: APPROVED

Runtime verification: full gdUnit suite via the pre-push gate on every push; live capture (atlas_gen_open) confirms all 18 chips render right-aligned within bounds; test_atlas_overlays 46/46 with the new input-regression test.

## Review: atlas-companion-friction → main (type: code + governance) — round 2 (fix round) Single reviewer (proportionality: small bug-fix PR; the governance change transcribes a ruling Jeroen made directly). ### Hoshe (QA): APPROVE (round 1: REQUEST_CHANGES, 1 finding — fixed and confirmed) Round 1 verified clean: tooltip cleanup complete (18/18 defs intact, no dev ids anywhere in OVERLAY_DEFS or GENERATION_LEGEND, visibility-ladder semantics preserved as words); FlowContainer conversion correct (`h_separation`/`v_separation` override names, `ALIGNMENT_END` right-alignment); D-226 §5 entry-revision amendment internally consistent (cleanly names what it retires — `DISTRICT_WINDOW_MIN_ZOOM`, zoom-owns-descent for this seam — with a consistent T-1138 pointer); `pql decisions validate` clean. **Round-1 finding (fixed in 872aea041):** the wrap fix widened the bar container to the full header-adjacent width, and the pre-existing `MOUSE_FILTER_STOP` turned the empty flow area left of the right-aligned chips into a **~700px dead strip** (1920px screens) silently swallowing map clicks/drags near the top edge. Fix confirmed as **two necessary edits, not one**: container → `MOUSE_FILTER_IGNORE` (the legend-panel/header/empty-notice idiom; chip Buttons keep Godot's default `STOP` and still catch their own clicks/tooltips), AND `_is_over_ui()` drops the bar-rect check — verified independent of the filter fix because `_is_over_ui()` is a manual point-in-rect check called directly from `_gui_input()`, not routed through Control input propagation; either edit alone would have left the strip dead through the other path. Regression test geometry independently re-derived (bar spans 1528px, chips occupy 824px, strip point lands 8px into the 704px empty zone); assertions verified to fail pre-fix. Locked/disabled chips' tooltips unaffected (native mechanism, Buttons keep `STOP`). 46/46 suite + gdlint re-run independently. | # | File | Issue | Status | |---|------|-------|--------| | 1 | atlas_overlay_bar.gd:37 + atlas_viewer.gd:709 | Widened bar rect + STOP filter = dead input strip near top edge | FIXED (872aea041) + regression test | ### Verdict: APPROVED Runtime verification: full gdUnit suite via the pre-push gate on every push; live capture (`atlas_gen_open`) confirms all 18 chips render right-aligned within bounds; `test_atlas_overlays` 46/46 with the new input-regression test.
jpmschweitzer closed this pull request 2026-07-21 09:30:19 +02:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jpmschweitzer/settled-reach#186