Phone polish: window backing, neighbour peek, toolbar selection, canvas lock glyph, OS-icon pill #164

Closed
opened 2026-10-11 11:08:28 +00:00 by kayg · 8 comments
Owner

Owner, iPhone production screenshots (707a4572), 2026-10-11:

  1. With the keyboard up the terminal window gets shorter, and a square backing layer shows outside its rounded border (also visible at the bottom corners with the keyboard down).
  2. Neighbouring windows in a strip should peek at the screen edge on phones.
  3. Toolbar selection circle: keep it fully inside the capsule with even gaps.
  4. The canvas lock icon needs a different glyph.
  5. Window title pill: OS icon instead of the terminal glyph; hostname must not be cut off; no stray "· …".

TASTE rows: 67be939a. Branch phone-polish from release-prod-2 (6320f5b5).

Owner, iPhone production screenshots (707a4572), 2026-10-11: 1. With the keyboard up the terminal window gets shorter, and a square backing layer shows outside its rounded border (also visible at the bottom corners with the keyboard down). 2. Neighbouring windows in a strip should peek at the screen edge on phones. 3. Toolbar selection circle: keep it fully inside the capsule with even gaps. 4. The canvas lock icon needs a different glyph. 5. Window title pill: OS icon instead of the terminal glyph; hostname must not be cut off; no stray "· …". TASTE rows: 67be939a. Branch `phone-polish` from release-prod-2 (6320f5b5).
Author
Owner

Start: branch phone-polish, base 7e48d82ca7 (release-prod-2 + TASTE 7e48d82c).

Start: branch phone-polish, base 7e48d82ca731ee63efe0d6cbc304ae5420a8b9b5 (release-prod-2 + TASTE 7e48d82c).
Author
Owner

Start: branch phone-polish, base 7e48d82c (release-prod-2 + TASTE row commit).

Start: branch phone-polish, base 7e48d82c (release-prod-2 + TASTE row commit).
Author
Owner

Findings (phone-polish, evidence from captures in apps/tracer/captures/phone-polish):

  1. Square backing: the window's standard shadow (0 12px 32px -8px) reaches ~20 px below the card; the column scroller clips at its 14 px padding, so the shadow was cut flat and read as a square block behind the rounded card (and, on a lone 99% window, 2 px from the viewport edge, a vertical cut at the side). Fixed with a column shadow that ends inside the clip. With shadows toggled on and off, the strips 12 px under / 4 px beside the card are identical now; with the old shadow they differ by 4-8 levels in ink and paper.
  2. Peek: the earlier peek was a side effect of the old "screen less 28 px" width; the 99% default removed it. Now a strip of several uses peekW = viewport - 2*(12 gap + 10 peek); lone window keeps 99%.
  3. Toolbar: the selection circle was a 48 px fill in a 46 px row, so it met/crossed the capsule edge. Fill is now a 38 px layer: 4 px above and below.
  4. Lock glyph: the control that needed a new glyph is the canvas lock (four squares); the open padlock in the toolbar is the input lock, which stays a padlock. Chosen: horseshoe magnet.
  5. Pill: windows on the embedded host had no os, which is why the terminal glyph showed; the product now reads it once via host.facts.read (includeLive:false).
Findings (phone-polish, evidence from captures in apps/tracer/captures/phone-polish): 1. Square backing: the window's standard shadow (0 12px 32px -8px) reaches ~20 px below the card; the column scroller clips at its 14 px padding, so the shadow was cut flat and read as a square block behind the rounded card (and, on a lone 99% window, 2 px from the viewport edge, a vertical cut at the side). Fixed with a column shadow that ends inside the clip. With shadows toggled on and off, the strips 12 px under / 4 px beside the card are identical now; with the old shadow they differ by 4-8 levels in ink and paper. 2. Peek: the earlier peek was a side effect of the old "screen less 28 px" width; the 99% default removed it. Now a strip of several uses peekW = viewport - 2*(12 gap + 10 peek); lone window keeps 99%. 3. Toolbar: the selection circle was a 48 px fill in a 46 px row, so it met/crossed the capsule edge. Fill is now a 38 px layer: 4 px above and below. 4. Lock glyph: the control that needed a new glyph is the canvas lock (four squares); the open padlock in the toolbar is the input lock, which stays a padlock. Chosen: horseshoe magnet. 5. Pill: windows on the embedded host had no `os`, which is why the terminal glyph showed; the product now reads it once via host.facts.read (includeLive:false).
Author
Owner

Finish: head 92dc2d00 on origin/phone-polish (base 7e48d82c).

Gate (apps/tracer):

  • bun run check: exit 0
  • bun test src: 150 pass, 0 fail
  • bun run build + transfer-budget.ts: exit 0
    JavaScript transfer, critical: gzip=291644/307200 brotli=242119/256000
    JavaScript transfer, deferred: gzip=48582/51200 brotli=42882/45056 (base 48185 / 42465)
    JavaScript transfer, onDemand: gzip=71408 (class total, not limited; base 71427)
  • test/phone-polish.spec.ts: 15 passed (393x852 and 375x667, ink and paper; desktop header pills).
  • machine-sections, inbox, phone-gutter, clusters-window-actions, clusters-window-label, clusters-swipes(-both): pass. clusters.spec toolbar/header specs pass after updating them for the peek and 36 px pills.
  • Same failures on the base commit, untouched: clusters.spec motion rule (keyJumpMoved), settings sections (s-hosts), sessions-canvas actions list (More window actions), four sessions-canvas timeouts. clusters-keyboard-split frame-time spec is flaky on this loaded host (load average 38): 1 of 3 fails on the base, 2 of 3 on this branch.
  • scripts/verify fast: FAIL in the Rust gate, not touched by this branch: infraternal remote_server::tests::failed_restart_endpoint_does_not_prevent_http_serving, and static build size 20064976 > 16404816 budget (not re-checked on the base).
Finish: head 92dc2d00 on origin/phone-polish (base 7e48d82c). Gate (apps/tracer): - bun run check: exit 0 - bun test src: 150 pass, 0 fail - bun run build + transfer-budget.ts: exit 0 JavaScript transfer, critical: gzip=291644/307200 brotli=242119/256000 JavaScript transfer, deferred: gzip=48582/51200 brotli=42882/45056 (base 48185 / 42465) JavaScript transfer, onDemand: gzip=71408 (class total, not limited; base 71427) - test/phone-polish.spec.ts: 15 passed (393x852 and 375x667, ink and paper; desktop header pills). - machine-sections, inbox, phone-gutter, clusters-window-actions, clusters-window-label, clusters-swipes(-both): pass. clusters.spec toolbar/header specs pass after updating them for the peek and 36 px pills. - Same failures on the base commit, untouched: clusters.spec motion rule (keyJumpMoved), settings sections (s-hosts), sessions-canvas actions list (More window actions), four sessions-canvas timeouts. clusters-keyboard-split frame-time spec is flaky on this loaded host (load average 38): 1 of 3 fails on the base, 2 of 3 on this branch. - scripts/verify fast: FAIL in the Rust gate, not touched by this branch: infraternal remote_server::tests::failed_restart_endpoint_does_not_prevent_http_serving, and static build size 20064976 > 16404816 budget (not re-checked on the base).
Author
Owner

Orchestrator: merged release-prod-2 (inbox + sidebar) into phone-polish → c512cc07; check pass, bun test 150 pass, Playwright phone-polish + inbox + sidebar-polish 27 passed, budget exit 0 (critical gzip 291697/307200, deferred 49230/51200). Web-only deploy to production with NO restart (MainPID 157470 unchanged, ActiveEnter 12:26:13 UTC). release-prod-2 → c512cc07. Glyph: magnet (B) on the snap toggle; asking the owner whether "canvas lock" meant the snap toggle or the padlock (input lock).

Orchestrator: merged release-prod-2 (inbox + sidebar) into phone-polish → c512cc07; check pass, bun test 150 pass, Playwright phone-polish + inbox + sidebar-polish 27 passed, budget exit 0 (critical gzip 291697/307200, deferred 49230/51200). Web-only deploy to production with NO restart (MainPID 157470 unchanged, ActiveEnter 12:26:13 UTC). release-prod-2 → c512cc07. Glyph: magnet (B) on the snap toggle; asking the owner whether "canvas lock" meant the snap toggle or the padlock (input lock).
Author
Owner

padlock-glyph (from release-prod-2 c512cc07): candidates for the phone toolbar's input lock, off and on, default unchanged. Head: see branch padlock-glyph.
Sheet: apps/tracer/captures/padlock-glyph/candidates-{ink,paper}.png; real toolbar at 393x852: -{off,on}-{ink,paper}-toolbar.png for ids current, a-held-prompt, b-keys-under-window, c-pinned-window, d-caret-captured.

  • A prompt held in corner brackets: open brackets when off, closed frame around the prompt when on; reads as "this terminal is held and takes the keys".
  • B window with its keys: a keyboard row under a window, filled when on; says "keystrokes go to this window".
  • C window with a pushpin: pin lifted off, pressed in on; says "this window stays in view".
  • D caret in a frame: an I-beam caret, guides reach it from every edge when on; says "input is captured here" (busiest at 24 px).
    Not a padlock and not the window chrome's lock in any of them. Spec: test/padlock-glyph.spec.ts (render only).
padlock-glyph (from release-prod-2 c512cc07): candidates for the phone toolbar's input lock, off and on, default unchanged. Head: see branch padlock-glyph. Sheet: apps/tracer/captures/padlock-glyph/candidates-{ink,paper}.png; real toolbar at 393x852: <id>-{off,on}-{ink,paper}-toolbar.png for ids current, a-held-prompt, b-keys-under-window, c-pinned-window, d-caret-captured. - A prompt held in corner brackets: open brackets when off, closed frame around the prompt when on; reads as "this terminal is held and takes the keys". - B window with its keys: a keyboard row under a window, filled when on; says "keystrokes go to this window". - C window with a pushpin: pin lifted off, pressed in on; says "this window stays in view". - D caret in a frame: an I-beam caret, guides reach it from every edge when on; says "input is captured here" (busiest at 24 px). Not a padlock and not the window chrome's lock in any of them. Spec: test/padlock-glyph.spec.ts (render only).
Author
Owner

padlock-glyph (from release-prod-2 c512cc07, TASTE row pulled from dev ed62d2e2): the lock toggles follow the owner's rule. The padlock candidates and the magnet are removed.

  • Shared badge: packages/ui icons withLockBadge (padlock top right, knock-out mask held once in the document); reused by the input lock, the canvas lock (phone row and desktop button) and the palette entries.
  • Input lock: ICONS.terminal (the Console glyph, now the single source) plain off, badged on. Canvas lock: new ICONS.canvas (rounded plane with the backdrop's dots; no existing glyph was the canvas) plain off, badged on.
    Captures (3x, 393x852): apps/tracer/captures/lock-icons/{canvas-on-input-off,canvas-off-input-off,canvas-off-input-on}-{ink,paper}.png.
    Gate: bun run check exit 0; bun test src 150 pass; build + transfer-budget.ts exit 0 (critical gzip 291679/307200, deferred 49643/51200). Specs: lock-icons (2), clusters toolbar/canvas-lock/palette specs and palette-polish pass; clusters.spec "toolbar and keyboard: no terminal focused..." is flaky (2 of 3 pass; the failing step is the Views button's popover focusing an input, not an icon).
padlock-glyph (from release-prod-2 c512cc07, TASTE row pulled from dev ed62d2e2): the lock toggles follow the owner's rule. The padlock candidates and the magnet are removed. - Shared badge: packages/ui icons `withLockBadge` (padlock top right, knock-out mask held once in the document); reused by the input lock, the canvas lock (phone row and desktop button) and the palette entries. - Input lock: ICONS.terminal (the Console glyph, now the single source) plain off, badged on. Canvas lock: new ICONS.canvas (rounded plane with the backdrop's dots; no existing glyph was the canvas) plain off, badged on. Captures (3x, 393x852): apps/tracer/captures/lock-icons/{canvas-on-input-off,canvas-off-input-off,canvas-off-input-on}-{ink,paper}.png. Gate: bun run check exit 0; bun test src 150 pass; build + transfer-budget.ts exit 0 (critical gzip 291679/307200, deferred 49643/51200). Specs: lock-icons (2), clusters toolbar/canvas-lock/palette specs and palette-polish pass; clusters.spec "toolbar and keyboard: no terminal focused..." is flaky (2 of 3 pass; the failing step is the Views button's popover focusing an input, not an icon).
Author
Owner

Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: All five items shipped: phone-polish c512cc07 is in dev and prod-live, lock-icons (withLockBadge) in dev; glyph question resolved by the owner's lock-badge rule. 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: All five items shipped: phone-polish c512cc07 is in dev and prod-live, lock-icons (withLockBadge) in dev; glyph question resolved by the owner's lock-badge rule. Reopen if anything is still missing.
kayg closed this issue 2026-10-28 17:52:57 +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#164
No description provided.