J297: stale-screen note becomes a state icon in the machine pill #389
Open
opened 2026-11-06 10:36:11 +00:00 by kayg
·
7 comments
No Branch/Tag specified
main
j470b-server-mesh-rejoin
mesh-compat-382
j444b-d381-key-wins-flood
j461b-macos-utun-reader-thread
j475b-remove-host-motion
fix-reconnect-new-link
j481-d380
dev
j479-mesh-soak
fix/j476-host-facts
j475-motion-pill-split
j470-mac-node-join
root-upgrade-d376
j474-review-merge
latency-targets-120hz
nightly-suite-shards
gotatun-pin-j469
macos-utun-reader-thread
fix-flood-echo-stall
wip/j416
motion-fast-ease-out
mesh-addhost-j259
takeover-close-terminals-d368
kbd-instant-followups
fix-trust-key-double-click
nightly-suite-partial-report
appwin-icons-j207
rusqlite-slice1
swipe-content-first-d374
mesh-mtu-381
addhost-instant-open
glass-contrast-d365-mock
glass-contrast-d365
signout-followups-442
fix-startup-toast-red
research-gotatun-matrix-j317
themes-sync-j304
fix-load-flakes
fix-nix-zig-patch
fix-compute01-browser-baseline
ratchet-size-baseline-419
predict-auto-d130
revoke-coverage-d367
nightly-suite-queue-timeout
nightly-browser-suite
fix-rustsec-2026-0459
fonts-ioskeley-obel
log-retention-d375
fix-kbd-no-anim-427
fix-dev-red-specs-2
takeover-proof-305-j205
wip/j410-server-pump
ui-consistency-d372
fix-osc52-clipboard
libghostty-vt-1.0
forget-retired-host-d369
j404-merge-426
fix-setup-lock-race
fix-touch-select-426
revoke-access-report-ui
fix-predictive-echo-specs
fix-selinux-agent-exec
wip/j395-checkpoint2
wip/j395
j391-review-scratch
ui-consistency-j195-deferred-rebased
fix-rustc-paths-421
decisions-wording-341
fix-install-suite-red
fix-dev-rtt-specs
fix-pending-removal-align
fix-privileged-skip
fix-install-suite-404
review-j368
mesh-dns-j254
revoke-access-report-d356b
revoke-privilege-round5
fix-removal-confirm
review-j360
gotatun-rotation-367
deps-refresh-340
review-j354
review-J351
review-j350
addhost-takeover-d359
revoke-report-items-347
revoke-end-sessions-d362
review-j348
size-mesh-ssh-346
size-trim-337
revoke-access-diff-d356
j259-pre-rebase-b06c5a6
j305-ended-at-start-spec
addhost-sudo-consent
fix-layout-real-specs-411
fix-shell-open-411
fix-console-hosts-373
fix-shell-exit
fuzz-host-name-353
fix-host-details-410
macos-filter-j197
research-gotatun-tricks
revoke-p3-j216l
stale-state-pill
revoke-followups-j216k
revoke-progress-j216e
backup/macos01-20261106/lume/j197
backup/macos01-20261106/lume/appwin-icons-j207-stash0
backup/macos01-20261106/claude/stash-0
backup/macos01-20261106/claude/stash-1
backup/macos01-20261106/claude/J80-macos-s1
backup/macos01-20261106/claude/J80
backup/macos01-20261106/claude/J80-slice1-20261102
backup/macos01-20261106/claude/J16b-appwin-on-dev
backup/macos01-20261106/claude/appwin-launch-idle-146
backup/macos01-20261106/claude/J80-s1-run
wip/j259
trust-285-p3c
runtime-lock-j216f
mesh-ssh-p3-j175
tun-proof-p3b
trust-285-p3
terminal-polish-j271
tun-proof-p3
ssh-install-flakes-j216i
fuzz-fixes-j264
trust-285-a
trust-285-b
restart-oversized-fixture-j198
backup/macos01-20261106/lume/appwin-icons-j207
restart-bound-j216h
up-preflight-p3-j198
backup/macos01-20261106/lume/j251
up-preflight-j198
wip/up-preflight-j198-j245-p2
wip/up-preflight-j198-j245-p1
agent-fsync-offloop-j196
wip/up-preflight-j198-j245
settings-offscreen-j231
wip/up-preflight-j198-j226-inspection
wip/j103f
themes-j206
wip/up-preflight-j198-j226
flakes-j216c
backup/macos01-20261106/claude/j197
flakes-j216b
backup/macos01-20261106/claude/j197-red
wip/up-preflight-j198-review
flakes-j216
backup/macos01-20261106/claude/appwin-icons-j207
engineering-j208b
appwin-mock-j209
toast-stack-j165
engineering-j208
decisions-d351
decisions-d350
decisions-d349
appearance-presets-mock-j129
decisions-d348
docs-audit-spec
doc-coverage-baseline-raise
decisions-d347
decisions-d346b
decisions-d346
j88h-profile
ui-consistency-j195-deferred
ui-consistency-j195
engineering-practices-j194
preferred-login-ui-j166
signin-pools-263-j174
macos-node-265-s1
decisions-d345
decisions-d344
proxy-cgroup-j164
verify-quick-fuzz-329
proxy-start-io-j168
timing-flakes-j163
up-263-s1
mcp-events-j147
verify-quick-fuzz-j158
proxy-p3-j159
agent-resource-j157-detect
wip/j103d-final
remote-cancel-hang-j155
proxy-traefik-281-j62d
j149-verify-quick
proxy-traefik-281-j62b
j150-drop-unnamed
wip/j79d-red-r4
wip/j103d-d332
rootless-toast-j142
wip/j103d-head
wip/j103d
j125c-mcp
macos-build-j136
backup/macos01-20261106/claude/j136
wip/j79d-red-cli
wip/j79d-red-server
j121-link-liveness
j118c-tracer-failures
wip/j79c-head
release-desktop-j131
j124c-signed-macos
wip/j79c-red-p3
wip/j79c-red-p23
wip/j79c-red-p22
merge-j128-check
perf-deferred-j128
sidebar-toggle-260
j127-shortcut-changed-dot
j125-mcp
j118-tracer-failures
j126-account-summary
settings-sections-mock-j92
j120-pinch-lock
sidebar-292
backup/macos01-20261106/claude/j120
taste-2026-11-03
row-actions-242-215
backup/macos01-20261106/claude/stash-0-untracked
backup/macos01-20261106/claude/J80-265-s1-run
backup/macos01-20261106/claude/J80-macos-s1-20261102
j112-canvas-commands
ui-no-overshoot-scroll
fix-recovery-restart
backup/macos01-20261106/claude/stash-1-untracked
taste-2026-11-02
size-baseline-ratchet
machine-cards-structure-j108
j109-boot-copy-mockups
fix-dev-red
wip/up-263-s1
j95b-settings-rows
proxy-traefik-281
j95-option-rows
docs-human-j91
docs-keys-palette
fix-flood-1013-270-j38d
mesh-ssh-s1
mesh-ssh-s0
addhost-d291-tunnel
test-stability-load
mesh-relay-220
repro-296
shim-thp-off-24
mesh-pins-258-v2
mesh-dns
signin-d311-merged
docs-pages
ui-size-283
fix-ui-batch-specs
wip/j12b-edge-update
gate-on-arm
fix-rename-sync-293
trust-285-j60b
fix-focus-ring-clip
integ-ui-1101
edge-update-v2
signin-d311
taste-2026-11-01
layout-per-tab-250
ui-approved-splitopt-224
ui-approved-splitopt-224-on-dev
icon-text-centre-282
ui-approved-189-212-216
research-reverse-proxy
transfer-budget-320
review-mesh-pins-258-r2
sidebar-pill-259
review-mesh-relay-220
wip/j12-edge-update-v2
nix-package
status-crash-loop-237
fix-dev-test-failures
fix-fixture-socket-path
wip/mesh-relay-220-pre-dev-advance-rebase
fix-canvas-side-clip
research-head-to-head
frosted-real-256
review-mesh-pins-258
wip/mesh-relay-220-pre-final-rebase
review-layout-per-tab-250-r2
broad-suite-triage
nix-devshell
review-status-crash-loop-237-r3
wip/nix-devshell-pre-p3
taste-frosted-real
wip/code-serve-demo-2026-10-30
wip/code-serve-glass-2026-10-30
wip/code-serve-clusters-2026-10-30
wip/code-merge-release94-dev-2026-10-30
wip/rproxy-delta-scratch-2026-10-30
wip/stale-note-257-staged-2026-10-30
wip/d241-size-staged-2026-10-30
review-broad-suite-207
wip/mesh-pins-258-pre-split
wip/mesh-relay-220-pre-rebase
mesh-measure-220
plan-211-update
review-edge-autoupdate-r3
perf24-reconnect
review-stale-note-r2
release-prod-live
d241-shell-marker
review-mesh-pins-server-258
review-revocation-r3
review-setup-token-r2
review-sync-journal-r3
wip/review-mesh-pins-258-prune-review-1995fee46
frosted-scroll-256
sync-journal-r3
revocation-per-account-wip
review-tokio-asyncfd-0386
review-sync-p3s
wip/stash-8by64-stash0-2026-10-30
mesh-drag-r2
setup-token-data-wip
release-9-4
auth-busy-1013
mesh-view-overlap
sync-p3s
review-auth-busy-wake
review-readd-r8-wip
mesh-drag-bounds
audit-auth-93
app-windows-stream-start
review-authority-cap-r3
app-windows-r7-measure
readd-minimal-r6
readd-minimal-r5
app-windows-r7-soak
readd-minimal-r4
app-windows-r7
app-windows-r6
readd-minimal-r3
readd-minimal-r2
readd-minimal
merge-release8-dev
review-busy-page-liveness-r2
review-busy-page-liveness
mesh-view-trim
review-authority-read-retry-r2
review-remove-uninstall-r2
release-retry-reattach
release-retry
review-remove-uninstall
review-authority-read-retry
app-windows-ship
mesh-autoswitch-p2
mesh-ssh
mesh-relay
mesh-macos-node
screen-and-control
session-labels
review-real-logins-r5
review-real-logins-r4
review-real-logins-r3
shim-memory-r2
review-real-logins-r2
shim-memory
shadow-addhost-instant
shadow-real-logins
shadow-same-session-flood
shadow-prod-perf-fix
hosts-from-server
app-windows-real
app-windows-transport
release-prod-6w
mesh-policy-verify
quiet-close-toast
dev-merge-r4
review-mesh-agent-transport
review-app-windows-transport
settings-roundtrip
review-release-pipeline-r4
mesh-agent-transport
ended-strip-fix
review-audit-ca-update-d244
settings-rows
phone-width
signout-clear
fix-restart-tests
dev-merge-rp
signer-hardening
review-audit-ca-update
terminal-fidelity
review-audit-ca-update-wip
mesh-integrate
review-mesh-agent-transport-515d3712
review-mesh-dataplane-feec1988
mesh-dataplane
signout
research-canvas-node
wip/review-renderer-cost
wip/review-terminal-fidelity
padlock-glyph
review-release-pipeline-2e95b689
phone-polish
sidebar-polish
inbox-generic
review-mesh-dataplane-378d4055
prod-batch
ui-inbox
ui-ca-unlock
ui-machine-sections
review-mesh-dataplane-a5f744fb
tls-session-prod
session-bounds-prod
fix-dead-session
session-bounds
tls-session
palette-polish
shortcuts-d222
research-appmeta
phone-gutter
ui-centre-button
wip/ui-centre-button
wip/tls-session
review-addhost-breakit
ui-platform
renderer-cost
remote-agents
mesh-api
ssh-bootstrap
prod-hotfix2
prod-fixes
review-remote-agents
review-mesh-dataplane
session-life
research-browser
review-mesh-api
research-capture
review-mesh-api-round3
review-mesh-api-round1
gate-stability
review-gate-stability
review-relay-direct
review-mesh-api-findings
proto-sessions
font-picker
proto-addhost
proto-windows
mesh-core
latency-gate
research-bsd
research-discovery
keytray-mods
mock-core
ui-tweaks
fix-motion-sel
fix-motion
integrate2
fix-robust
t-web
t-server
vt-ghostty
fix-snap-echo
t-web-auth
review-vt2
t-agent
lane-protocol
lane-shim
lane-auth
s1-base
s1-contracts
s1-workspace
No results found.
No labels
launch-qa
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
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#389
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Owner: ""screen may be out of date" should appear as a state icon in the machine pill rather than randomly placed text" (2026-11-06). TASTE row: "Window state is an icon in the machine pill".
Plan (est. 2 h):
TerminalHooks.onStaleScreen(stale)replaces the floating note interminal.ts; D309 state machine (stale-screen.ts) unchanged. Deletepackages/ui/src/terminal-note.ts.LinkInfo.staleScreen->LinkView.stale->card.setStale().packages/ui/src/stale-mark.ts: small screen glyph with tooltip "Screen may be out of date", tap peeks the tooltip on touch, accessible name. It lives in the machine pill, beside the connection indicator; its slot grows and shrinks (no layout jump)..ui-terminal-notein the DOM; D309 timing assertions kept.Started. Branch
stale-state-pill, base24e6467217(origin/dev).Progress:
d3548e5a4pushed (hook -> LinkInfo -> card.setStale, new stale-mark.ts, terminal-note deleted). Typecheck clean, link.test 6/6. First spec run failed because the test-double page is the single-terminal screen (top capsule), not a window card; adding the same icon to that capsule too (it is that screen's machine pill) and retargeting the spec. Logs: compute01 ~/j297-run1.log.Finish. Branch
stale-state-pill, head719450f01(base24e646721).What changed: the loose note is gone (
terminal-note.tsdeleted). The terminal reports the D309 state throughonStaleScreen; the machine pill shows a small screen icon (newpackages/ui/src/stale-mark.ts). Tooltip "Screen may be out of date"; on touch a tap on the icon peeks the same tooltip; the icon has role=img and an accessible name. It appears and goes with a 200 ms slot open/close plus opacity/scale (compositor only; no motion under reduced motion). D309 timing logic unchanged. Shown in both machine pills: the window card pill (canvas) and the single-terminal screen's capsule.Gate:
scripts/verify quickon compute01: PASS, all rows (scope guard, migration names, vendoring, fmt, doc coverage, shape lints, doc comments on diff, fixed test waits, ui literals, tracer typecheck). Log: compute01~/j297-verify.log. I did not runverify fast; the orchestrator's merge gate will.Stale-screen specs, one worker, at the head: 8 passed (1.4m), log
~/j297-spec.log.link.test.ts: 6 pass. Specs assert the pill icon, its tooltip, accessible name, that the pill's vertical position, height and centre line do not move, that no.ui-terminal-noteexists, and keep the D309 timing cases (no flash for a redrawing program, none at an unchanged size).Findings:
Not proven: the canvas window-card icon screenshots force the slot via the DOM on the mock windows page (those windows have no live terminal). The real-PTY canvas flow is covered only by the edited real specs (
real/stale-screen-d309-review.spec.ts,real/stale-note-257-review.spec.ts), which I did not run (they need the real server build). Please run them or ask for it.Screenshots (production build, 2x, looked at all of the tooltip and icon-pill ones): 1440x900, 393x852, 375x667, ink and paper, icon showing and tooltip open, for the capsule (
j297-<size>-<theme>-*.png) and the window pill (j297-canvas-*). Originals on compute01~/j297-evidence/.Correction: I looked at all 12 tooltip screenshots and 3 of the 4 attached icon-pill crops. 16 of the 36 files are attached; the rest (full-page icon-only shots and the remaining crops) are on compute01 ~/j297-evidence/ and I did not review them one by one.
J298 review of
stale-state-pill@719450f01: REQUEST CHANGESThe owner rule is met: the "screen may be out of date" state is an icon in the machine pill. I found no floating note anywhere. Two visible motion and layout defects and one reuse problem remain, and the 257 real spec cannot run (that one is not this branch's fault).
I read
BRIEF-COMMON.md,CLAUDE.md, TASTE (the new "Window state is an icon in the machine pill" row, chip centring, descenders, motion) and D309. I did not runverifyon this branch. I built the tracer from the branch on compute01 and ran the real specs plus my own captures. Evidence is incompute01:~claude/j298-evidence/and~claude/j298-real*.log. Screenshots are attached to this comment.Owner rule: met
git grepfinds noterminal-notecode left, and the DOM has no.ui-terminal-note. After a resized reattach in the test double I scanned the document for any visible "out of date" text outside the tooltip: 0 hits at all 6 viewport and theme combinations (j298-measure.jsonl).real/stale-screen-d309-review.spec.tspassed both tests (a silent real shell shows the icon after a reattach that changed its size, andCtrl+Cclears it; an idle shell reloaded at the same size never shows it). This is my run at 12:08 IST,j298-real.loglines 28–29, screenshotsstale-review-real-pty-note.pngand…-reload-idle.png. The icon sits in the window's own pill. The top capsule on the canvas carries no terminal state (attached).Findings
1. P2 (visible, repeatable): the round-trip text snaps in and collides when the icon clears, and the host name jumps width.
The phone rule
.capsule:has(.ui-stale[data-shown]) .capsule-rtt { display: none }is instant, while the slot and icon animate for 160–240 ms.clearingshots.j298-measure.jsonl.display: none.2. P2 (reuse, one design call): a second screen glyph beside the connection indicator's "approximate" screen glyph.
stale-mark.tsredraws the same silhouette asui-conn-g-approximateinconnection-indicator.ts(same rect2.4 3 11.2 8, same foot), with two inner lines changed.linkViewreturnsstalealongside theapproximatestate, so for about 3 s after an approximate resume the pill shows two near-identical screen icons side by side.160/240 mstransition values, and hard-codes0.875remwhere.ui-connuses--ui-conn-size(1 rem). The setup ring (TASTE "Progress lives where the thing is") is the opposite design: it takes exactly its slot's size so the pill never changes width.3. P2 (the specs):
real/stale-note-257-review.spec.tscannot run, on this branch or onorigin/dev.enrol()with "layout observer must be installed before navigation" because it never callswatchLayout. The branch only edited note selectors in this file.watchLayoutpatch it fails differently, atsettled()on the persistent "Not saved — keep this tab open" toast. The same patched spec fails identically on a cleanorigin/devworktree (~claude/j298-dev257.log,DEV257_EXIT=1). So the failure is not caused by this branch, but the spec's "passes" claim has no evidence.enrol(j298-real5.log,j298-real6.log,j298-real7.log). I did not find the cause. Treat the real-server evidence as one passing run plus unexplained harness instability. This needs its own issue, not this branch.4. P3: tooltip outlives its state on touch. At +520 ms after the state cleared, the phone's peeked tooltip still read "Screen may be out of date" (
393x852-ink-4-cleared).set(false)should dismiss it. On desktop hover it was gone by then.5. P3: the icon reads as neutral, not as a warning. At 14 px and 2×, the amber dotted line (
--warn, dasharray0.1 2.6) is barely visible; both lines read grey. Consider a more visible warn cue.6. P3: the pill widens. On desktop the capsule grows about 24 px (564→588 px) when the icon opens, so the host name shifts 12 px left and the right side 12 px right (it is centred). The setup ring avoids this by taking its slot's size. This is probably fine for a one-off state, but say so.
7. P3: process. Three
WIP:commits are still in the branch and719450f01has a title and no body. It also rewrites the easing fallback in five unrelated rules (row swipe,.ui-pill, resize grips,ui-conn-g). That is correct, since--ease-outis defined andverify.d/ui-literals.pyforbids the literal, but the commit should say why. Squash or split with real messages before merge.Checked and fine
Not verified
terminal.ts:1093): I did not check whether that status element is ever visible.Head reviewed:
719450f01952c3fb3d1dcfc5be27bbf72fcc74cc. Server binary used for the real specs:j254-currentmusl build (2be58ce2c), not built from this branch; the branch changes no server code.Round 2 finish. Branch
stale-state-pill, head3923e0bc0(base24e646721), history squashed from 6 commits to 3 atomic ones with full bodies.Changes against J298's findings
setStale), not a second glyph. Same box (--ui-conn-size), layers, timings, tooltip, accessible name and tap-to-peek. The glyph is the screen family with an amber badge on a ground-coloured ring (reads at 14 px). While the link is up it outranks connected/slow/resumed/approximate (one mark; they return when it clears); connecting/reconnecting/offline outrank it.stale-mark.tsand its CSS are deleted.dismissTiptakes a tap-opened tooltip down when the state clears (spec asserts it; screenshots 4-clearing show none on phone). Desktop hover correctly follows to "Connected · N ms" while the pointer is still on the mark.pointerupand the indicator only swallowedclick. Now a touch that starts on the mark does not open details (frame.ts); the spec asserts no popover after the phone tap.Gate:
scripts/verify quickon compute01 at3923e0bc0: PASS all rows incl. doc comments on diff, fixed test waits, ui literals, tracer typecheck (logcompute01:~/j297-verify.log).verify fastnot run (orchestrator at merge).test/stale-screen.spec.ts, one worker, on the product canvas + test double: 8 passed (before the doc-only squash;~/j297-real2.log).link.test.ts6 pass.Real spec
real/stale-screen-d309-review.spec.ts(j254 server binary, not built from this branch; no server code changed):--repeat-each=3): test 1 passed twice of three, test 2 once; the failures were the "Not saved — keep this tab open" toast inenrol(the instability you are sending elsewhere), plus onetoHaveCountfailure in test 2 that I did not see again in a 4x rerun (which failed only on the toast) and cannot attribute. Logs:~/j297-real2.log,~/j297-real3.log.real/stale-note-257-review.spec.tswas not run (cannot run on origin/dev either, per J298); I only changed its selectors.Screenshots, product canvas window pill, 1440x900, 393x852, 375x667, ink and paper; per combination: normal pill, stale pill, stale page, tooltip open, mid-clear (+90 ms), cleared. 36 files, all attached. I viewed every one at the first capture. After the
frame.tsfix I regenerated the phone ones and re-viewed their tooltip, clearing and cleared shots (12); the regenerated phone pill-crop and stale-page shots (12) I did not re-view (the same code path as the first capture). Originals:compute01:~/j297-evidence2/(desktop, and phone before the fix) and~/j297-evidence3/(phone after).What I saw: pill width unchanged between normal and stale; amber badge visible in both themes; tooltip text correct; no details popover after the phone tap; no tooltip lingering after clear on phone.
J310 review of
stale-state-pill@3923e0bc0: APPROVEThe owner rule holds: "screen may be out of date" is one state of the connection indicator in the machine pill, and nothing floats anywhere. J298's findings 1, 2, 4, 5 and 6 are fixed. Finding 3 (the 257 spec) is still open. I have one doc-comment fix and a few P3 notes below. None of them blocks the merge. I ran only targeted specs, no
verify. Evidence is incompute01:~claude/j310-evidence/and~claude/j310-real.log.Owner rule
git grepfinds noterminal-noteorstale-markcode left. The only mention ofstale-markis one stale comment (see N1)..ui-terminal-notein any spec run.connWis 15.39 px at 1440 and 14 px on phones, and it does not change.J298 findings
leftandwidthevery frame for 60 frames across the clear, at 1440, 393 and 375 in ink and paper. The spread is 0.000 px for all four values in all six cases (CLEAR-SPREADlines inj310-real.log). The round-trip text no longer jumps.staleis a state of.ui-conn. It uses the same tooltip, size token, layers and tap-peek, andstale-mark.tsis deleted. Precedence ineffective(): stale outranks connected, resumed, approximate and slow. connecting, reconnecting and offline outrank stale, aslink.tsand its test state.render()callsdismissTipwhenshownleaves "stale" and a tap opened the tip. The phone.tipis hidden after the clear in all six of my runs. On desktop hover the tooltip correctly turns into "Connected · N ms" while the pointer stays on the mark.beforeandgin theGEOMlines).watchLayoutcall. The J305 fix is not onorigin/dev(the spec has nowatchLayoutthere either).Real server
I built the server from this branch:
cargo build --release -p infraternal, glibc, incompute01:~/j310-target. I built the tracer from it too, then ranreal/stale-screen-d309-review.spec.ts --repeat-each=3, one worker, log~/j310-real.log.enrol(layout-devices.ts:18, strict-mode violation, 2 toasts at once). That is before any stale code runs, so it is the harness instability J305 is fixing, not this branch.toHaveCountfailure in test 2. It did not repeat in my 3 runs, since all three failures were the toast.test/stale-screen.spec.tsagainst the product canvas: 8 of 8 passed (desktop and phone).Screenshots
/tmp/j310/j310-review.spec.ts(a scratch spec, not committed, run astest/j310-review.spec.ts). Screenshots:j310-evidence/j310-{393,375}-{ink,paper}-{details-open,mark-tap}.png.connCy92.289 vshostCy92.297 at 1440, and 93 vs 92.992 on phones; limit 0.5). MygetBBoxfor the glyph, which ignores strokes, puts its drawn centre 0.61–0.67 px below and right of the box centre. The frame's 1.4 px strokes extend further than the badge ground ring on the top and left, so with strokes the offset is about 0.3 px. I also see nothing off-centre in the 2× crops. I am not raising it, but this is why the box centre is exact and the visible weight sits slightly right and low.Touch ripple from
frame.tsPhone, 393 and 375, ink and paper (4 runs,
RIPPLElines):onMarkcovering every state of the indicator, not only stale. It is consistent with the owner's "tap-to-peek" rule, but it is a visible behaviour change on phones. Please mention it in the commit message or in TASTE.onMarkis only read inrelease.Notes (none blocks)
apps/tracer/src/stale-screen.ts:23still says the state is presented bypackages/ui/src/stale-mark.ts, which this branch deletes. D345: point it atconnection-indicator.tsandsetStale.frame.tsmarks a pressonMarkfor any non-mouse pointer, including a pen. The indicator's owntouchflag only countspointerType === "touch". A pen tap on the mark therefore does nothing at all, with no tooltip and no details. It is minor, so use one definition of "touch".pill.setPointerCaptureand the indicator'sclickhandler are an unusual pairing there. Chromium touch emulation is fine, so please check on a real iPhone. The Mac VM was not used (frozen).real/stale-note-257-review.spec.tsis still not run. Please keep the J305 follow-up open for it.Head reviewed:
3923e0bc01bc53fb16a43bd4a42f9606e4bbb6c3.