Phone: Edge to edge is wider than Full width #181

Closed
opened 2026-10-12 05:08:27 +00:00 by kayg · 6 comments
Owner

Owner, iPhone, 2026-10-12: "the edge to edge setting on mobile is wider than full width on mobile? full width should be full width, no peeking. edge to edge (the default) should allow peeking of the neighbour windows". Branch phone-width from release-prod-3 (1f77a449). TASTE row: "Full width means full width; edge to edge peeks."

Owner, iPhone, 2026-10-12: "the edge to edge setting on mobile is wider than full width on mobile? full width should be full width, no peeking. edge to edge (the default) should allow peeking of the neighbour windows". Branch phone-width from release-prod-3 (1f77a449). TASTE row: "Full width means full width; edge to edge peeks."
Author
Owner

Cause: the settings differed in the canvas area they measured from. Full width measured inside the 16 px gutters (361 of 393) and took 99% of it, minus the neighbour slices in a strip: 317 px, peeking. Edge to edge widened the area to the whole screen and applied the same rules: 349 px with neighbours, 389 alone. So edge to edge was 32 px wider than full width, and full width was the one that peeked (measured on the old code at 393x852: full 317, edge 349).

Fix (b5713775, ae0b7386, fa5280a2 on phone-width): both settings measure from the screen between the safe areas. Full width = exactly that width, no neighbour shows. Edge to edge (now the default) = that width less 2 x (12 px gap + 10 px PEEK), the same alone or in a strip, centred. Comfortable unchanged. Terminal columns refit from the real width (spec asserts more columns at full width, canvas inside the window).

Not reproduced: a window running past the right edge on a real device; the new spec asserts window inside the viewport and no sideways page scroll in both settings, switched live. Note: TASTE row "Neighbouring windows peek" still says a lone window is 99% wide; the lone window is now the edge-to-edge width (task said same width). The owner may want that row's wording updated.

Gates: bun run check clean; bun test src 151 pass; bun run build + transfer-budget.ts within budgets (unchanged); phone-window-width.spec.ts 2/2, phone-polish.spec.ts all pass; sessions-canvas.spec.ts 35/36 in the combined run, the one failure ("empty, loading and error states") timed out at the 30 s limit and passed alone at 29.8 s (slow test, unrelated to widths).

Captures: apps/tracer/captures/phone-window-width/phone-{393x852,375x667}-ink-{edge-to-edge,full-width,edge-to-edge-lone}.png

Cause: the settings differed in the canvas area they measured from. Full width measured inside the 16 px gutters (361 of 393) and took 99% of it, minus the neighbour slices in a strip: 317 px, peeking. Edge to edge widened the area to the whole screen and applied the same rules: 349 px with neighbours, 389 alone. So edge to edge was 32 px wider than full width, and full width was the one that peeked (measured on the old code at 393x852: full 317, edge 349). Fix (b5713775, ae0b7386, fa5280a2 on phone-width): both settings measure from the screen between the safe areas. Full width = exactly that width, no neighbour shows. Edge to edge (now the default) = that width less 2 x (12 px gap + 10 px PEEK), the same alone or in a strip, centred. Comfortable unchanged. Terminal columns refit from the real width (spec asserts more columns at full width, canvas inside the window). Not reproduced: a window running past the right edge on a real device; the new spec asserts window inside the viewport and no sideways page scroll in both settings, switched live. Note: TASTE row "Neighbouring windows peek" still says a lone window is 99% wide; the lone window is now the edge-to-edge width (task said same width). The owner may want that row's wording updated. Gates: bun run check clean; bun test src 151 pass; bun run build + transfer-budget.ts within budgets (unchanged); phone-window-width.spec.ts 2/2, phone-polish.spec.ts all pass; sessions-canvas.spec.ts 35/36 in the combined run, the one failure ("empty, loading and error states") timed out at the 30 s limit and passed alone at 29.8 s (slow test, unrelated to widths). Captures: apps/tracer/captures/phone-window-width/phone-{393x852,375x667}-ink-{edge-to-edge,full-width,edge-to-edge-lone}.png
Author
Owner

Correction applied per the owner's TASTE rule "A lone window keeps the full phone width; nothing peeks where nothing is". Edge to edge now: lone window = full width (same as Full width); in a strip only, each side shrinks by the 12 px gap + 10 px peek (349 px at 393). Full width never shrinks. Lone <-> strip animates through the existing re-layout transition; the spec samples widths per frame and sees in-between values.

Commits on phone-width (supersede the lone-window part of b5713775): e0027492 d1c703b6 22765864
Gates: bun run check clean; bun test src 151 pass; build + transfer-budget.ts within budgets (unchanged); phone-window-width.spec.ts 2/2; phone-polish.spec.ts 14/14; sessions-canvas.spec.ts 35/36, the one failure ("empty, loading and error states") sits at the 30 s timeout (30.0 s in the combined run, 29.8 s passing alone), unrelated to widths.
Lone captures (full width, no peek) looked at: apps/tracer/captures/phone-window-width/phone-{393x852,375x667}-ink-edge-to-edge-lone.png

Correction applied per the owner's TASTE rule "A lone window keeps the full phone width; nothing peeks where nothing is". Edge to edge now: lone window = full width (same as Full width); in a strip only, each side shrinks by the 12 px gap + 10 px peek (349 px at 393). Full width never shrinks. Lone <-> strip animates through the existing re-layout transition; the spec samples widths per frame and sees in-between values. Commits on phone-width (supersede the lone-window part of b5713775): e0027492 d1c703b6 22765864 Gates: bun run check clean; bun test src 151 pass; build + transfer-budget.ts within budgets (unchanged); phone-window-width.spec.ts 2/2; phone-polish.spec.ts 14/14; sessions-canvas.spec.ts 35/36, the one failure ("empty, loading and error states") sits at the 30 s timeout (30.0 s in the combined run, 29.8 s passing alone), unrelated to widths. Lone captures (full width, no peek) looked at: apps/tracer/captures/phone-window-width/phone-{393x852,375x667}-ink-edge-to-edge-lone.png
Author
Owner

Orchestrator: DEPLOYED to production as a web-only change (no server restart; ActiveEnterTimestamp unchanged 03:17:48 UTC, CA stays unlocked) at release-prod-3w 4855e033 = 1f77a449 + signout-clear (D245) + phone-width (TASTE full width / edge to edge, lone window full width) + cursor-blink (D249). Gates on the merged head: tsc clean, bun test src 154 pass, transfer budget pass, sign-out + phone-window-width + phone-polish + cursor-blink specs 34/35 (DPR-2 alignment timed out at 29.2 s under load 61, passed on rerun in 37 s). Owner to test on iPhone.

Orchestrator: DEPLOYED to production as a web-only change (no server restart; ActiveEnterTimestamp unchanged 03:17:48 UTC, CA stays unlocked) at release-prod-3w 4855e033 = 1f77a449 + signout-clear (D245) + phone-width (TASTE full width / edge to edge, lone window full width) + cursor-blink (D249). Gates on the merged head: tsc clean, bun test src 154 pass, transfer budget pass, sign-out + phone-window-width + phone-polish + cursor-blink specs 34/35 (DPR-2 alignment timed out at 29.2 s under load 61, passed on rerun in 37 s). Owner to test on iPhone.
Author
Owner

Fix for the Settings option-row collision (owner iPhone report 2026-10-12) is on branch settings-rows, commit d6642c21 (pushed, not deployed). Shared row: packages/ui choiceBlock + .ui-sp-text in packages/ui/styles.css. Names are nowrap; hints drop under the name when they do not fit. Gate: bun run check clean, bun test src 163 pass, build + transfer-budget within budgets, test/settings-rows.spec.ts 6/6 (375, 393, 1440; ink, paper), phone-window-width 2/2 (one 0.3 px sub-pixel flake on the first run, passed on rerun). Captures: apps/tracer/captures/settings-rows/.

Fix for the Settings option-row collision (owner iPhone report 2026-10-12) is on branch settings-rows, commit d6642c21 (pushed, not deployed). Shared row: packages/ui choiceBlock + `.ui-sp-text` in packages/ui/styles.css. Names are nowrap; hints drop under the name when they do not fit. Gate: bun run check clean, bun test src 163 pass, build + transfer-budget within budgets, test/settings-rows.spec.ts 6/6 (375, 393, 1440; ink, paper), phone-window-width 2/2 (one 0.3 px sub-pixel flake on the first run, passed on rerun). Captures: apps/tracer/captures/settings-rows/.
Author
Owner

Orchestrator: DEPLOYED to production at 09:13 UTC (14:43 IST): release-prod-4 @ 3aec316e = live 1f77a449 + terminal fidelity (#160/#161) + ended sessions (#168) + live web fixes (3w) + settings rows (text never collides). Binaries built from 61bdbd9f (later merges are web-only); sha256 prefixes x86 2af382ef / arm 8fd4d67f match on host. healthz 200, public 200, 0 errors in journal, 23 shims survived the restart. Settings round-trip evidence (#161): base 1f77a449 accepted 190-200 stray PTY bytes after Settings return; head 0 across five cycles, background/foreground and reconnect. Restart re-locked the CA: owner unlock needed. Perf VM latency A/B (prod-batch-4 report): p50/p99 0.57/2.25 → 0.56/2.70 ms, overlapping.

Orchestrator: DEPLOYED to production at 09:13 UTC (14:43 IST): release-prod-4 @ 3aec316e = live 1f77a449 + terminal fidelity (#160/#161) + ended sessions (#168) + live web fixes (3w) + settings rows (text never collides). Binaries built from 61bdbd9f (later merges are web-only); sha256 prefixes x86 2af382ef / arm 8fd4d67f match on host. healthz 200, public 200, 0 errors in journal, 23 shims survived the restart. Settings round-trip evidence (#161): base 1f77a449 accepted 190-200 stray PTY bytes after Settings return; head 0 across five cycles, background/foreground and reconnect. Restart re-locked the CA: owner unlock needed. Perf VM latency A/B (prod-batch-4 report): p50/p99 0.57/2.25 → 0.56/2.70 ms, overlapping.
Author
Owner

Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: Phone width fix and settings-rows (d6642c21) are in dev and release-prod-live; deployed in 4855e033 and 3aec316e. Reopen if anything is still missing.

Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: Phone width fix and settings-rows (d6642c21) are in dev and release-prod-live; deployed in 4855e033 and 3aec316e. Reopen if anything is still missing.
kayg closed this issue 2026-10-28 17:53:04 +00:00
Sign in to join this conversation.
No labels
launch-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/infraternal#181
No description provided.