feat(ui): T-1145 regional polish — cover-fit, WASD+edge-scroll pan, smoothed composite #189

Closed
jpmschweitzer wants to merge 0 commits from atlas-regional-polish into main
Owner

Summary

T-1145 — Jeroen's round-2 hands-on rulings on the regional window, live-verified full-chain again before this PR. Client-only.

Cover-fit (supersedes contain)

fit_window_view zooms from the viewport's larger dimension with no margin factor (any factor < 1.0 leaves a long-axis gap — checked numerically): the composite fills edge to edge, overhanging the short axis into pan-space. The refloat center-equality early-return already prevents refetch churn at rest (proved). Live drive: fit zoom exactly 3.750 at 1920px, composite spans the full width.

WASD + edge-scroll pan (supersedes drag — Jeroen: drag breaks click semantics with map objects)

LMB-drag removed from the regional window entirely; clicks are object-reserved from here on. Pan = held WASD/arrows (polled in _process, delta- and zoom-scaled, camera-pans-toward-key convention verified numerically) + edge-scroll within 24px of the viewport border; both suppressed over UI and on OS focus loss; both set _user_adjusted; wheel zoom and Esc unchanged. Reads raw physical keycodes deliberately — independent of the shared D-054 move_* InputMap actions bound to the same keys. Pole wall + east/west wrap unchanged and re-driven through the new inputs (drag tests replaced, not kept). Live drive: D-held pans 2160px; edge-scroll pans.

Found while building this, ticketed as T-1146 (pre-existing, out of scope here): gameplay movement input leaks to the server while ANY implant screen is open — InputMapper polls the move_* actions with no occlusion guard anywhere in the flush path. A player pressing WASD with the Atlas open walks their character blind. The regional window's raw-keycode pan is architecturally independent of that fix.

Smoothed composite (interim presentation, pending T-1143)

Per-cell colors bake into an n×n Image/ImageTexture (exact existing colorizer incl. overlay + ice tint) drawn once with LINEAR filtering — GPU bilinear reads as terrain instead of 2 km blocks, the planetary heightmap's own treatment. Crisp per-cell path preserved behind COMPOSITE_SMOOTH for T-1143's A/B. Texture rebuilds only on reference-identity change of window/toggle (is_same — verified true reference equality; a fresh server response always rebuilds, redraws during pan/zoom never do).

Governance

One T-1145 amendment paragraph on D-226 T-1124 §5 covering all three supersessions; pql decisions validate ok. T-1143 (Araminta's legibility pass) expanded with the sub-district sampling design question + costs.

Verification

  • Live full-chain drive (real display, real spawned server, synthetic events through the genuine pipeline): descend → cover-fit zoom exact → full-width span → WASD pan → edge-scroll pan → Esc. All PASS; screenshots in .cache/screenshots/polish-verify/ — the fitted window fills the viewport with smooth terrain gradients.
  • Suites: window_viewer 74/74, window_geometry 32/32, window_overlay (new) 16/16; gdlint clean on all six files; full suites via the pre-push gate.

Tickets: T-1145 (+T-1146 filed)

## Summary T-1145 — Jeroen's round-2 hands-on rulings on the regional window, live-verified full-chain again before this PR. Client-only. ### Cover-fit (supersedes contain) `fit_window_view` zooms from the viewport's **larger** dimension with no margin factor (any factor < 1.0 leaves a long-axis gap — checked numerically): the composite fills edge to edge, overhanging the short axis into pan-space. The refloat center-equality early-return already prevents refetch churn at rest (proved). Live drive: fit zoom exactly 3.750 at 1920px, composite spans the full width. ### WASD + edge-scroll pan (supersedes drag — Jeroen: drag breaks click semantics with map objects) LMB-drag removed from the regional window entirely; clicks are object-reserved from here on. Pan = held WASD/arrows (polled in `_process`, delta- and zoom-scaled, camera-pans-toward-key convention verified numerically) + edge-scroll within 24px of the viewport border; both suppressed over UI and on OS focus loss; both set `_user_adjusted`; wheel zoom and Esc unchanged. Reads **raw physical keycodes** deliberately — independent of the shared D-054 `move_*` InputMap actions bound to the same keys. Pole wall + east/west wrap unchanged and re-driven through the new inputs (drag tests replaced, not kept). Live drive: D-held pans 2160px; edge-scroll pans. **Found while building this, ticketed as T-1146 (pre-existing, out of scope here):** gameplay movement input leaks to the server while ANY implant screen is open — `InputMapper` polls the `move_*` actions with no occlusion guard anywhere in the flush path. A player pressing WASD with the Atlas open walks their character blind. The regional window's raw-keycode pan is architecturally independent of that fix. ### Smoothed composite (interim presentation, pending T-1143) Per-cell colors bake into an n×n `Image`/`ImageTexture` (exact existing colorizer incl. overlay + ice tint) drawn once with LINEAR filtering — GPU bilinear reads as terrain instead of 2 km blocks, the planetary heightmap's own treatment. Crisp per-cell path preserved behind `COMPOSITE_SMOOTH` for T-1143's A/B. Texture rebuilds only on reference-identity change of window/toggle (`is_same` — verified true reference equality; a fresh server response always rebuilds, redraws during pan/zoom never do). ### Governance One T-1145 amendment paragraph on D-226 T-1124 §5 covering all three supersessions; `pql decisions validate` ok. T-1143 (Araminta's legibility pass) expanded with the sub-district sampling design question + costs. ### Verification - Live full-chain drive (real display, real spawned server, synthetic events through the genuine pipeline): descend → cover-fit zoom exact → full-width span → WASD pan → edge-scroll pan → Esc. All PASS; screenshots in `.cache/screenshots/polish-verify/` — the fitted window fills the viewport with smooth terrain gradients. - Suites: window_viewer 74/74, window_geometry 32/32, window_overlay (new) 16/16; gdlint clean on all six files; full suites via the pre-push gate. Tickets: T-1145 (+T-1146 filed)
jpmschweitzer added 2 commits 2026-07-21 17:03:21 +02:00
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Cover-fit: fit_window_view zooms from the viewport's LARGER dimension,
no margin factor (any factor under 1.0 leaves a long-axis gap — checked
numerically) — the composite fills edge to edge, overhanging the short
axis into pan-space; the refloat center-equality early-return already
prevents refetch churn at rest (proved, not just tested).

Input model (Jeroen: drag breaks click semantics with map objects):
LMB-drag pan REMOVED from the regional window; clicks are
object-reserved. Pan = held WASD/arrows polled in _process (delta- and
zoom-scaled, camera-pans-toward-key convention verified numerically)
plus edge-scroll within 24px of the viewport border; both suppressed
over UI and on OS focus loss; both set _user_adjusted; wheel zoom and
Esc unchanged. Reads RAW physical keycodes deliberately — independent
of the shared D-054 move_* InputMap actions bound to the same keys
(whose occlusion-leak is pre-existing and now ticketed as T-1146).
Pole wall + east-west wrap unchanged, re-driven through the new
inputs; drag tests replaced, not kept.

Smoothed composite (interim pending T-1143): per-cell colors bake into
an n x n Image/ImageTexture (exact existing colorizer incl. overlay +
ice tint) drawn once with LINEAR filtering — GPU bilinear reads as
terrain, the planetary heightmap's own treatment. Crisp per-cell path
preserved behind COMPOSITE_SMOOTH for T-1143 A/B. Rebuild only on
reference-identity change of window/toggle (is_same — verified true
reference equality; value-equal distinct dicts DO rebuild).

Governance: T-1145 amendment paragraph on D-226 T-1124 SS5 (all three
supersessions); pql decisions validate ok.

Suites: window_viewer 74/74, window_geometry 32/32, window_overlay
(new) 16/16; gdlint clean on all six files.

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

Review: atlas-regional-polish → main (type: code) — single round

Single reviewer (client-only polish implementing Jeroen's explicit round-2 rulings; live full-chain drive by the lead preceded the PR).

Hoshe (QA): APPROVE — no findings

Verified beyond the live drive: cover-fit math pinned on wide/tall/square viewports with clamps kept, and the at-rest no-churn claim traced to the refloat center-equality early-return; drag completely removed (grep-clean across client/); the WASD sign convention traced algebraically end-to-end (D-key → offset decrease → abs_col increase → moves east), self-consistent with edge-scroll via the shared funnel; _apply_pan_delta confirmed the single pan mutation path (exactly four _view_offset writes in the file: fit, zoom-at-cursor, set_view, pan-delta); the texture rebuild cache's reference-vs-value test genuinely constructs distinct dicts; TEXTURE_FILTER_LINEAR set on the drawn CanvasItem; smooth and crisp paths share identical colorizer calls — no color drift; governance amendment accurate, pql decisions validate clean. Suites: geometry 32/32, overlay 16/16, viewer 74/74, descend_entry 66/66 — zero ripple.

# File Issue
none

Verdict: APPROVED

Runtime verification: lead's live full-chain drive (real display, real spawned server, synthetic events through the genuine pipeline) — cover zoom exact (3.750 @ 1920), full-width span, WASD pan, edge-scroll pan, Esc; screenshots in .cache/screenshots/polish-verify/. Gate green (one unrelated fog-shader perf flake at 0.501 vs 0.500 ms on the first push — ticketed T-1147, retried clean).

## Review: atlas-regional-polish → main (type: code) — single round Single reviewer (client-only polish implementing Jeroen's explicit round-2 rulings; live full-chain drive by the lead preceded the PR). ### Hoshe (QA): APPROVE — no findings Verified beyond the live drive: cover-fit math pinned on wide/tall/square viewports with clamps kept, and the at-rest no-churn claim traced to the refloat center-equality early-return; drag completely removed (grep-clean across client/); the WASD sign convention traced **algebraically** end-to-end (D-key → offset decrease → abs_col increase → moves east), self-consistent with edge-scroll via the shared funnel; `_apply_pan_delta` confirmed the single pan mutation path (exactly four `_view_offset` writes in the file: fit, zoom-at-cursor, set_view, pan-delta); the texture rebuild cache's reference-vs-value test genuinely constructs distinct dicts; `TEXTURE_FILTER_LINEAR` set on the drawn CanvasItem; smooth and crisp paths share identical colorizer calls — no color drift; governance amendment accurate, `pql decisions validate` clean. Suites: geometry 32/32, overlay 16/16, viewer 74/74, descend_entry 66/66 — zero ripple. | # | File | Issue | |---|------|-------| | — | — | none | ### Verdict: APPROVED Runtime verification: lead's live full-chain drive (real display, real spawned server, synthetic events through the genuine pipeline) — cover zoom exact (3.750 @ 1920), full-width span, WASD pan, edge-scroll pan, Esc; screenshots in `.cache/screenshots/polish-verify/`. Gate green (one unrelated fog-shader perf flake at 0.501 vs 0.500 ms on the first push — ticketed T-1147, retried clean).
jpmschweitzer closed this pull request 2026-07-21 17:08:18 +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#189