The two client fixes for the Atlas frames Jeroen flagged as looking broken (T-1183 eyeball captures).
T-1189 — Region rung no longer requests more planet than exists.StepCanvasTransport.cap_extent_to_body() caps the viewport-fit extent at the body's own region grid, sourced from the Global rung's echoed canvas size (server-side global_cell_counts() IS the region grid — cols=regions_per_equator, rows=cols/2, no unit conversion). Matched by gridunit SPACING, not rung name (shape-generic — any future rung sharing Global's spacing is covered; finer rungs are no-ops by construction). Applied in _request_extent() before the request/cache key is built, so key discipline from T-1182/T-1183 holds. Cold-start (scroll-to-Region before the first Global echo): request uncapped, server clamps — documented, chosen over fetch-Global-first to avoid blocking the scroll gesture. Kills both the side-by-side continent repeat and the past-the-pole stripe smear.
T-1192 — Global opener fit-scales and centers. One shared letterbox mechanism (center_offset / integer_fit_scale / fit_scale with a 75%-coverage integer-vs-fractional decision) used by BOTH the Global fit and the Region cap's letterbox remainder. Integer scale preferred per D-255 texel-exactness; fractional fallback is legal because orbital rungs already force NEAREST filtering. Legend column reserved before fitting (constant pinned to the legend's own width by a cross-file test) — legend never overlaps the canvas. GJ1c at 1920x1080 → ~1.84x fractional fill; at 4K → integer 4x.
Also fixes a latent crash: NOTIFICATION_RESIZED fires mid-_ready() before children exist — null guard added.
Verification
Touched suites: transport 80/80, viewer 72/72, legend 12/12, annotation-layer 10/10; gdlint clean on all touched files. Full gate: 3,504/3,504 including the SR_LIVE e2e suites (server binary present this run). Reviews next; the before/after eyeball re-capture of the flagged frames runs on the final tip — merge waits on it.
## Summary
The two client fixes for the Atlas frames Jeroen flagged as looking broken (T-1183 eyeball captures).
**T-1189 — Region rung no longer requests more planet than exists.** `StepCanvasTransport.cap_extent_to_body()` caps the viewport-fit extent at the body's own region grid, sourced from the Global rung's echoed canvas size (server-side `global_cell_counts()` IS the region grid — cols=regions_per_equator, rows=cols/2, no unit conversion). Matched by gridunit SPACING, not rung name (shape-generic — any future rung sharing Global's spacing is covered; finer rungs are no-ops by construction). Applied in `_request_extent()` before the request/cache key is built, so key discipline from T-1182/T-1183 holds. Cold-start (scroll-to-Region before the first Global echo): request uncapped, server clamps — documented, chosen over fetch-Global-first to avoid blocking the scroll gesture. Kills both the side-by-side continent repeat and the past-the-pole stripe smear.
**T-1192 — Global opener fit-scales and centers.** One shared letterbox mechanism (`center_offset` / `integer_fit_scale` / `fit_scale` with a 75%-coverage integer-vs-fractional decision) used by BOTH the Global fit and the Region cap's letterbox remainder. Integer scale preferred per D-255 texel-exactness; fractional fallback is legal because orbital rungs already force NEAREST filtering. Legend column reserved before fitting (constant pinned to the legend's own width by a cross-file test) — legend never overlaps the canvas. GJ1c at 1920x1080 → ~1.84x fractional fill; at 4K → integer 4x.
**Also fixes a latent crash:** NOTIFICATION_RESIZED fires mid-_ready() before children exist — null guard added.
## Verification
Touched suites: transport 80/80, viewer 72/72, legend 12/12, annotation-layer 10/10; gdlint clean on all touched files. Full gate: 3,504/3,504 including the SR_LIVE e2e suites (server binary present this run). Reviews next; the before/after eyeball re-capture of the flagged frames runs on the final tip — merge waits on it.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
The two client fixes for the Atlas frames Jeroen flagged. Region rung no
longer requests more planet than exists: cap_extent_to_body() caps the
viewport-fit extent at the body's own region grid (the Global canvas
extent echo — cols=regions_per_equator, rows=cols/2), matched by gridunit
SPACING not rung name, applied before the request/cache key is built;
cold-start scroll-before-Global-echo requests uncapped and lets the
server clamp (documented). Kills both the side-by-side continent repeat
and the past-the-pole stripe smear.
Global opener now fit-scales and centers through one shared letterbox
mechanism (center_offset/integer_fit_scale/fit_scale, 75%-coverage
integer-vs-fractional decision, NEAREST already forced on orbital rungs
per D-255's escape hatch) also used for the Region cap's letterbox
remainder. Legend column reserved before fitting — pinned to the legend's
own width by a cross-constant test, never overlapping the canvas.
Also fixes a latent crash: NOTIFICATION_RESIZED fires mid-_ready() before
children exist; null guard in the resize path.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The fractional fit branch is deleted, resolving both review findings at
the root: tyre showed its comments cited D-255 for an exception the
record does not contain (the language came from the lead's ticket text,
not governance), and hoshe showed it returned sub-1x for a canvas
exceeding the viewport on one axis. Replacement: fit_scale_ratio()
chooses the largest integer pixels-per-gridunit R fitting both
legend-reserved axes, floored at 1 (over-viewport draws native and
crops like every fixed rung) — the fine-grained integer lattice (GJ1c
1080p -> 9px/gu = 1593x792, ~98% width; 4K -> 20) that makes the
fractional hatch unnecessary. center_offset() floors to whole pixels
(half-pixel centering would blur the texel grid). Doc comments cite the
real sanction (D-255 amendment 2026-07-25, this branch). Legend column
constant is now canonical in transport, read directly by the legend
(was an independently-typed literal); its test asserts real geometry.
New regression test proves _global_body_extent clears on body switch
and never caps another body's requests.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Records the T-1192 presentation ruling: the Global opener's display
ratio is viewport-fitted per body to the largest integer px/gridunit
that fits the legend-reserved viewport (floored at 1x1, letterbox
centred), texel-exact by construction; fixed rungs keep their tuned
constants. Explicitly notes that non-integer resting-state scaling
remains unsanctioned and that a PR #205 review finding removed a
fractional-fit branch which had cited this record for an exception it
does not contain — the mis-citation episode is part of the record so it
cannot recur silently.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Review: atlas-rung-presentation -> main (type: code)
Reviewers: Hoshe (code quality) + Tyre (architecture). Both REQUEST_CHANGES; all findings verified and addressed in 374b19559 + 4c44786f9.
Tyre (architecture): REQUEST_CHANGES
#
File
Issue
Resolution
1
step_canvas_transport.gd (fit family docs)
The fractional-fit escape hatch was justified as "D-255's own phrase/exception" — language that does not exist anywhere in the record, whose actual mandate is unqualified texel-exact. A governance-citation fabrication attached to a real interpretation call never put to the record. (Fractional+NEAREST avoids blur but is not texel-exact: uneven 1px/2px texel duplication.)
Fixed at the root — the fractional branch is deleted entirely, replaced by fine-grained integer px-per-gridunit fitting (largest integer R fitting both legend-reserved axes; GJ1c@1080p → 9px/gu = 1593×792, ~98% width — the coarse footprint-multiple lattice was what made fractional look necessary). Texel-exact preserved by construction. The interpretation call that remains (rung-0's display ratio is viewport-fitted per body rather than a fixed tunable) is now recorded as a real D-255 amendment (2026-07-25) in this branch, which also names the mis-citation episode explicitly. Attribution note: the fabricated phrasing originated in the lead's ticket text — the mis-attribution is a shared failure, now structurally recorded.
2
CHANGELOG.md
The pre-existing T-1182 "texel-exact / no client-side scaling" claim would be false under the fractional path
Resolved by #1 — with fractional gone the claim stays true; the new entry states the Global view fills the frame at an integer texel scale
LEGEND_COLUMN_PX hand-duplicated as an independently-typed literal on the legend side
Fixed — transport is canonical; the legend's RESERVED_COLUMN_PX is a direct read of StepCanvasTransport.LEGEND_COLUMN_PX; the redundant cross-pin test replaced with a real-geometry assertion (legend's actual right edge inside the reserved column)
Hoshe (code quality): REQUEST_CHANGES
#
File
Issue
Resolution
1
step_canvas_transport.gd fit_scale
Fractional branch returns sub-1x for a canvas exceeding the viewport on one axis (GJ1c 885px footprint in 348px available → 0.39x), violating the documented never-below-native invariant; reachable at ordinary window widths, untested
Fixed by the same root change — fit_scale_ratio() floors at 1 (native + crop/pan, matching every fixed rung); hoshe's exact repro is now a test (348px case → R=1)
2
test_step_canvas_viewer.gd
No test proves _global_body_extent resets on body switch — the exact stale-cap failure mode the mechanism must prevent
Fixed — new test lands a Global extent for body A, enters body B, asserts the cap source reads ZERO and the next Region request goes out uncapped
Hoshe's verified-clean list (cache-key threading end-to-end, resize null-guard timing, degenerate-request analysis, cold-start fallback) is on record in the review transcript.
Additional in the fix round
center_offset() now floors to whole pixels — an odd letterbox remainder was landing the canvas on a .5px boundary, a fractional-pixel blur edge on the rung the mechanism exists to keep sharp.
D-255 citation sweep across all four touched sources: every remaining citation verified as a genuine quote against the record body.
Verification (fix round)
transport 92/92, viewer 76/76, legend 12/12, annotation-layer 10/10; gdlint zero warnings on all touched files; full gate re-run green on push. The before/after eyeball re-capture of the originally-flagged frames runs on this tip — merge follows it.
Verdict: CHANGES REQUESTED -> addressed in 374b19559 + 4c44786f9; merge follows the eyeball.
# Review: atlas-rung-presentation -> main (type: code)
Reviewers: Hoshe (code quality) + Tyre (architecture). Both REQUEST_CHANGES; all findings verified and addressed in `374b19559` + `4c44786f9`.
### Tyre (architecture): REQUEST_CHANGES
| # | File | Issue | Resolution |
|---|------|-------|------------|
| 1 | step_canvas_transport.gd (fit family docs) | The fractional-fit escape hatch was justified as "D-255's own phrase/exception" — language that does not exist anywhere in the record, whose actual mandate is unqualified texel-exact. A governance-citation fabrication attached to a real interpretation call never put to the record. (Fractional+NEAREST avoids blur but is not texel-exact: uneven 1px/2px texel duplication.) | **Fixed at the root** — the fractional branch is deleted entirely, replaced by fine-grained integer px-per-gridunit fitting (largest integer R fitting both legend-reserved axes; GJ1c@1080p → 9px/gu = 1593×792, ~98% width — the coarse footprint-multiple lattice was what made fractional look necessary). Texel-exact preserved by construction. The interpretation call that remains (rung-0's display ratio is viewport-fitted per body rather than a fixed tunable) is now **recorded as a real D-255 amendment (2026-07-25)** in this branch, which also names the mis-citation episode explicitly. Attribution note: the fabricated phrasing originated in the lead's ticket text — the mis-attribution is a shared failure, now structurally recorded. |
| 2 | CHANGELOG.md | The pre-existing T-1182 "texel-exact / no client-side scaling" claim would be false under the fractional path | **Resolved by #1** — with fractional gone the claim stays true; the new entry states the Global view fills the frame at an integer texel scale |
| 3 | step_canvas_transport.gd:95 / step_canvas_legend.gd | LEGEND_COLUMN_PX hand-duplicated as an independently-typed literal on the legend side | **Fixed** — transport is canonical; the legend's RESERVED_COLUMN_PX is a direct read of StepCanvasTransport.LEGEND_COLUMN_PX; the redundant cross-pin test replaced with a real-geometry assertion (legend's actual right edge inside the reserved column) |
### Hoshe (code quality): REQUEST_CHANGES
| # | File | Issue | Resolution |
|---|------|-------|------------|
| 1 | step_canvas_transport.gd fit_scale | Fractional branch returns sub-1x for a canvas exceeding the viewport on one axis (GJ1c 885px footprint in 348px available → 0.39x), violating the documented never-below-native invariant; reachable at ordinary window widths, untested | **Fixed by the same root change** — fit_scale_ratio() floors at 1 (native + crop/pan, matching every fixed rung); hoshe's exact repro is now a test (348px case → R=1) |
| 2 | test_step_canvas_viewer.gd | No test proves _global_body_extent resets on body switch — the exact stale-cap failure mode the mechanism must prevent | **Fixed** — new test lands a Global extent for body A, enters body B, asserts the cap source reads ZERO and the next Region request goes out uncapped |
Hoshe's verified-clean list (cache-key threading end-to-end, resize null-guard timing, degenerate-request analysis, cold-start fallback) is on record in the review transcript.
### Additional in the fix round
- `center_offset()` now floors to whole pixels — an odd letterbox remainder was landing the canvas on a .5px boundary, a fractional-pixel blur edge on the rung the mechanism exists to keep sharp.
- D-255 citation sweep across all four touched sources: every remaining citation verified as a genuine quote against the record body.
### Verification (fix round)
transport 92/92, viewer 76/76, legend 12/12, annotation-layer 10/10; gdlint zero warnings on all touched files; full gate re-run green on push. The before/after eyeball re-capture of the originally-flagged frames runs on this tip — merge follows it.
### Verdict: CHANGES REQUESTED -> addressed in `374b19559` + `4c44786f9`; merge follows the eyeball.
Live run on the fixed tip 4c44786f9, real client + live server, judged against the known-bad T-1183 baseline frames.
Global: centered 1593×792 canvas (symmetric canvas_position=(309,144)), letterboxed, uniform 9×9 texel blocks, legend fully beside the map — vs the old ~885×440 top-left sliver with legend overlap. Integer fit re-confirmed adapting at 1280×720 (~6px/texel, still centered).
Region: planet exactly once, no side-by-side repeat, no pole-smear stripes; held_extent=(177,88) confirms the body-grid cap (old shape was 384×216).
District: no regression (unaffected by this PR; its content fixes ride the server branch).
Cache-key discipline proven live: the old uncapped Region entry (…384,216:0) sits untouched with last_read_at unrefreshed; the new capped request wrote a fresh …177,88:0 entry (genuine miss); Global was a legitimate hit (content identical, layout client-side).
Zero anomalies: no errors, no nav pops, InputSwallower had nothing to intercept.
Captures: .cache/screenshots/t1189-92-eyeball/ vs baseline .cache/screenshots/t1183-eyeball-run2/. Merging.
# Presentation eyeball — PASS (merge gate)
Live run on the fixed tip `4c44786f9`, real client + live server, judged against the known-bad T-1183 baseline frames.
- **Global:** centered 1593×792 canvas (symmetric `canvas_position=(309,144)`), letterboxed, uniform 9×9 texel blocks, legend fully beside the map — vs the old ~885×440 top-left sliver with legend overlap. Integer fit re-confirmed adapting at 1280×720 (~6px/texel, still centered).
- **Region:** planet exactly once, no side-by-side repeat, no pole-smear stripes; `held_extent=(177,88)` confirms the body-grid cap (old shape was 384×216).
- **District:** no regression (unaffected by this PR; its content fixes ride the server branch).
- **Cache-key discipline proven live:** the old uncapped Region entry (`…384,216:0`) sits untouched with `last_read_at` unrefreshed; the new capped request wrote a fresh `…177,88:0` entry (genuine miss); Global was a legitimate hit (content identical, layout client-side).
- Zero anomalies: no errors, no nav pops, InputSwallower had nothing to intercept.
Captures: `.cache/screenshots/t1189-92-eyeball/` vs baseline `.cache/screenshots/t1183-eyeball-run2/`. Merging.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
The two client fixes for the Atlas frames Jeroen flagged as looking broken (T-1183 eyeball captures).
T-1189 — Region rung no longer requests more planet than exists.
StepCanvasTransport.cap_extent_to_body()caps the viewport-fit extent at the body's own region grid, sourced from the Global rung's echoed canvas size (server-sideglobal_cell_counts()IS the region grid — cols=regions_per_equator, rows=cols/2, no unit conversion). Matched by gridunit SPACING, not rung name (shape-generic — any future rung sharing Global's spacing is covered; finer rungs are no-ops by construction). Applied in_request_extent()before the request/cache key is built, so key discipline from T-1182/T-1183 holds. Cold-start (scroll-to-Region before the first Global echo): request uncapped, server clamps — documented, chosen over fetch-Global-first to avoid blocking the scroll gesture. Kills both the side-by-side continent repeat and the past-the-pole stripe smear.T-1192 — Global opener fit-scales and centers. One shared letterbox mechanism (
center_offset/integer_fit_scale/fit_scalewith a 75%-coverage integer-vs-fractional decision) used by BOTH the Global fit and the Region cap's letterbox remainder. Integer scale preferred per D-255 texel-exactness; fractional fallback is legal because orbital rungs already force NEAREST filtering. Legend column reserved before fitting (constant pinned to the legend's own width by a cross-file test) — legend never overlaps the canvas. GJ1c at 1920x1080 → ~1.84x fractional fill; at 4K → integer 4x.Also fixes a latent crash: NOTIFICATION_RESIZED fires mid-_ready() before children exist — null guard added.
Verification
Touched suites: transport 80/80, viewer 72/72, legend 12/12, annotation-layer 10/10; gdlint clean on all touched files. Full gate: 3,504/3,504 including the SR_LIVE e2e suites (server binary present this run). Reviews next; the before/after eyeball re-capture of the flagged frames runs on the final tip — merge waits on it.
🤖 Generated with Claude Code
Review: atlas-rung-presentation -> main (type: code)
Reviewers: Hoshe (code quality) + Tyre (architecture). Both REQUEST_CHANGES; all findings verified and addressed in
374b19559+4c44786f9.Tyre (architecture): REQUEST_CHANGES
Hoshe (code quality): REQUEST_CHANGES
Hoshe's verified-clean list (cache-key threading end-to-end, resize null-guard timing, degenerate-request analysis, cold-start fallback) is on record in the review transcript.
Additional in the fix round
center_offset()now floors to whole pixels — an odd letterbox remainder was landing the canvas on a .5px boundary, a fractional-pixel blur edge on the rung the mechanism exists to keep sharp.Verification (fix round)
transport 92/92, viewer 76/76, legend 12/12, annotation-layer 10/10; gdlint zero warnings on all touched files; full gate re-run green on push. The before/after eyeball re-capture of the originally-flagged frames runs on this tip — merge follows it.
Verdict: CHANGES REQUESTED -> addressed in
374b19559+4c44786f9; merge follows the eyeball.Presentation eyeball — PASS (merge gate)
Live run on the fixed tip
4c44786f9, real client + live server, judged against the known-bad T-1183 baseline frames.canvas_position=(309,144)), letterboxed, uniform 9×9 texel blocks, legend fully beside the map — vs the old ~885×440 top-left sliver with legend overlap. Integer fit re-confirmed adapting at 1280×720 (~6px/texel, still centered).held_extent=(177,88)confirms the body-grid cap (old shape was 384×216).…384,216:0) sits untouched withlast_read_atunrefreshed; the new capped request wrote a fresh…177,88:0entry (genuine miss); Global was a legitimate hit (content identical, layout client-side).Captures:
.cache/screenshots/t1189-92-eyeball/vs baseline.cache/screenshots/t1183-eyeball-run2/. Merging.Pull request closed