UI: port pane cards, branched tree and warm tooltips into packages/ui #33
Closed
opened 2026-10-06 15:42:35 +00:00 by kayg
·
47 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#33
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?
Port the approved core-screen pieces (branch mock-core) into the product UI and
packages/ui:.panesgrid, one.pane-cardper view), the base for splitting later;branched.ts);tooltip.ts), auto-attached to icon-only controls;The mockup modules are plain TS. Each becomes a Svelte component or action with the same behaviour and timings (see their module docs).
Start: branch t-web, base origin/dev
7174d6bf6f; starting head845c293a70. Read #33 (no prior comments), all comments on parent #14, decisions 68–103, architecture, process and all mock-core modules.Baseline on production tracer build (Chromium, Linux 6.12.111 x86_64, 8 vCPU; load 4.24/3.41/5.20): 500/500 echoes, p50/p99 14.80/15.70 ms, forced resume 77.40 ms. Focused suite: 3 passed. Screenshots: apps/tracer/test-results/terminal-first-run-passkey-29742-esume-and-the-latency-probe/tracer-terminal.png and tracer-probe.png.
Finding: apps/tracer/src/terminal.ts documents one client session; main.ts opens only ssh.session.open and accepts an optional host UUID. This tracer has no host/session listing API. The sidebar will use that UUID when present (otherwise say the host name is unavailable), and every demo host/tab will visibly say static. The test double already echoes protocol Ping/Pong; the tracer currently only replies to server Ping, so RTT can be measured on the existing mux without touching auth.
Step 1 complete: shared OKLab/contrast helpers exported from packages/ui. Commit
0001845b7c. Strict standalone TypeScript check passed; fast gate passed (all 5 Rust gates, Ghostty checksums, 7 TypeScript protocol tests).Step 2 complete: ported all 10 approved themes and unified UI/terminal palettes. Commit
04231caa56. Strict TypeScript passed; all 10 themes pass the unchanged fg/fg2/fg3/accent/status/ANSI contrast thresholds; fast gate passed.Step 3 complete: added the one-shot mesh backdrop with half-resolution rendering, context release, and stale-render protection. Commit
8300fe7763. All 10 theme mesh peaks pass the existing contrast cap; fast gate passed (Rust gates, static builds, Ghostty checksums, and 7 TypeScript protocol tests).Step 4 complete: added the shared branched host tree with safe text/data DOM construction, 300 ms pointer marker/branch motion, fold tracking, instant keyboard selection, and reduced-motion support. Commit
93e536cce0. Strict TypeScript check passed; no dynamic host/session values are interpolated as HTML.Step 5 complete: terminal client now measures bounded ping/pong RTT on its existing mux connection and exposes theme, one-shot ctrl/alt, and input activity hooks. Commit
6980e267d0. Tracer strict TypeScript check and production build passed; mock server already echoes Ping on both mux streams.Finding: first post-layout production browser run reached the existing probe ceiling: 500-key p99 was 23.1 ms (>20 ms), versus baseline 15.7 ms. The 3-test terminal suite had 1 failure (probe ceiling), 2 passes; access first-paint tests passed. Investigating trace and host load before attributing the delta to the screen.
Finding: renderBackdrop calls loseContext before canvas.toBlob; core-screen.spec.ts:108 fails with toBlob event index 2 and context-loss index 1. That ordering can discard the still during encoding. I’m moving snapshot initiation before context release and retaining the failing assertion.
Finding: core-screen.spec.ts reached theme selection but the terminal stage had no data-theme attribute; applyLook only wrote theme/background state to html, while stage selectors read terminal-screen. Updating both the root theme tokens and stage state, then rerunning the production browser check.
Performance finding: isolated 500-key terminal probe again exceeded its 20 ms p99 guard (p50 15.30 ms, p95 29.10 ms, p99 39.20 ms; resume 76.30 ms). Trace: encode→send p99 5.50 ms, ws.send→echo p99 13.80 ms, term.write→callback p99 33.60 ms. Host load at capture was 6.91/5.69/7.82; baseline p50/p99/resume was 14.80/15.70/77.40 ms at load 4.24/3.41/5.20. I’m retaining this as unresolved pending another isolated measurement.
Step 6 complete: production tracer core screen, mobile controls, command palette, themes, RTT display, and static-data labeling are committed at
f3c5ae2858. Core browser check passed (1 passed); checks include no pane backdrop-filter, immediate keyboard palette, 44 px touch targets, one mesh draw/context release, and 12 screenshots. Screenshot paths:\n- apps/tracer/test-results/core-screen/tracer-core-393x852-paper-sidebar-closed.png\n- apps/tracer/test-results/core-screen/tracer-core-393x852-paper-sidebar-open.png\n- apps/tracer/test-results/core-screen/tracer-core-393x852-paper-palette-open.png\n- apps/tracer/test-results/core-screen/tracer-core-393x852-ink-sidebar-closed.png\n- apps/tracer/test-results/core-screen/tracer-core-393x852-ink-sidebar-open.png\n- apps/tracer/test-results/core-screen/tracer-core-393x852-ink-palette-open.png\n- apps/tracer/test-results/core-screen/tracer-core-1440x900-paper-sidebar-closed.png\n- apps/tracer/test-results/core-screen/tracer-core-1440x900-paper-sidebar-open.png\n- apps/tracer/test-results/core-screen/tracer-core-1440x900-paper-palette-open.png\n- apps/tracer/test-results/core-screen/tracer-core-1440x900-ink-sidebar-closed.png\n- apps/tracer/test-results/core-screen/tracer-core-1440x900-ink-sidebar-open.png\n- apps/tracer/test-results/core-screen/tracer-core-1440x900-ink-palette-open.pngFinding: the full Playwright run exposed an outdated renderer-corpus viewport assumption after adding the pane/top bar. Two fixtures reached 197x50 instead of the test's fixed 205x56 target (error-context.md for behemoth-prefix-82541.bin and browser-text-binary-prefix-192253.bin); the test only adds the old full-screen 16 px inset. I’ll update the corpus test to calculate pane gutters and terminal padding from the production DOM, then rerun all fixtures.
First full required Playwright gate: 4 passed, 11 failed in 2.1 min. Ten corpus cases all failed before fixture delivery at the same 197x50 versus 205x56 grid assertion; corpus loading/canary assertions were not reached. The 500-key probe reported p50/p95/p99 14.20/18.50/21.80 ms and resume 79.50 ms (host load 4.31/5.54/6.92). Updating only the viewport calculation for the new pane geometry; repeating the latency probe after the corpus suite.
Renderer-corpus geometry test adjustment complete at
de5ebe2831. Minimal-combining fixture passed with the unchanged target grid (205x56), 10,000-row scrollback, 11,730,944 B WASM, and painted canary. The viewport now includes actual pane insets plus terminal padding.Test rerun finding: the full suite’s first process exited, but its test server was then found listening on localhost:4173 from the parallel auth worktree (/home/kayg/.cache/codex-scratch/auth4/client/apps/tracer). The next run refused the occupied URL. I’m adding an environment-selectable Playwright/mock-server port and will run this worktree on 4174 without stopping the auth job.
Parallel-test isolation complete at
81f338ff65. The production core-screen suite passed on TRACER_TEST_PORT=4174 while the other job retained port 4173 (1 passed, 12 screenshots).Second full Playwright run (4174): 14 passed, 1 failed in 2.4 min. All 10 renderer corpus cases passed with 205x56 grids and painted canaries; the 500-key probe passed at p50/p95/p99 14.50/16.80/18.60 ms, resume 79.60 ms. The sole failure was onboarding.spec.ts layout stability: one non-input shift of 0.000005846 (baseline had passed); auth tests are untouched. Rerunning that test unchanged, then repeating full suite.
Onboarding rerun passed unchanged on port 4175: 1 passed in 15.9s, all 12 existing screenshots produced. The 0.000005846 layout-shift failure appears intermittent; no auth implementation or auth test file was modified. Repeating the full Playwright suite for a clean all-pass result.
Latest full suite: 14 passed, 1 failed in 2.1 min; all 10 renderer fixtures and onboarding/core-screen passed. Latency probe p50/p95/p99 14.80/21.90/33.20 ms, resume 76.00 ms; term.write→callback p99 28.20 ms. Host load 6.00/5.99/6.49 with concurrent rustc and infraternal processes. Prior complete-corpus run on the same code passed the existing p99 guard at 18.60 ms (p50 14.50, resume 79.60). Baseline was 14.80/15.70/77.40 at load 4.24/3.41/5.20. Investigating variance; performance gate remains open.
Fast gate passed at head
81f338ff65. Verbatim result summary:\n+---------------------------+--------------+\n| Rust gate | Result |\n+---------------------------+--------------+\n| fmt | PASS |\n| clippy | PASS |\n| test | PASS |\n| cargo-deny | PASS |\n| static builds | PASS |\n+---------------------------+--------------+\nVendored Ghostty artifact checksums: all 3 OK. TypeScript protocol tests: 7 pass, 0 fail, 34390 expect() calls; 134 streams, 11439 schedules, zero divergences.Focused 500-key rerun on port 4177 missed the existing 20 ms guard by 1.1 ms under concurrent rustc (host load 4.85/5.27/6.13): p50/p95/p99 14.70/17.60/21.10 ms; renderer callback p99 18.60 ms; resume 93.30 ms. Most tail was ws.send→echo p99 5.60 ms; waiting for competing compiles before the controlled rerun.
Finding during reviewer pass: packages/ui/src/branched.ts sets both branch draw and marker glide to exactly 300 ms (lines 148, 164); job bar requires under 300 ms. Adding a browser assertion before reducing both to 280 ms.
Completed motion-cap fix in
f6f2c3c. The new assertion reproduced 300 ms for the marker before the fix; both marker glide and branch draw now use 280 ms. Production core-screen Playwright passed (1/1), including branch timing and all 12 requested screenshots at 393x852 and 1440x900, both themes, sidebar open/closed and palette open.Finished at
f6f2c3c797.Self-review: pane card has no backdrop filter; responsive floating bar and touch targets are covered; live host/session are real and unavailable examples are labeled static; the existing tooltip installer covers icon-only controls with the d-pad exception; curated themes retain their contrast caps; mesh draws once and releases WebGL, with no second draw after 2.1 seconds; mobile tray and instant keyboard palette are covered; reduced motion and the 280 ms branch cap are covered. No rAF loop runs while idle.
Performance on Linux 6.12.111 x86_64, 8 vCPUs. Baseline at load 4.24/3.41/5.20: p50/p99 14.80/15.70 ms, resume 77.40 ms. After, isolated 500-key run at load 1.56/3.26/4.94: 500/500 echoes, p50/p99 15.40/16.30 ms, resume 78.30 ms. Full suite run: 500/500, p50/p99 14.80/18.60 ms, resume 77.10 ms; p99 stayed below the existing 20 ms test bound while the renderer corpus ran.
Production screenshots regenerated at this HEAD, 393x852 and 1440x900, paper and ink, sidebar closed/open and palette open:
apps/tracer/test-results/core-screen/tracer-core-393x852-paper-sidebar-closed.png
apps/tracer/test-results/core-screen/tracer-core-393x852-paper-sidebar-open.png
apps/tracer/test-results/core-screen/tracer-core-393x852-paper-palette-open.png
apps/tracer/test-results/core-screen/tracer-core-393x852-ink-sidebar-closed.png
apps/tracer/test-results/core-screen/tracer-core-393x852-ink-sidebar-open.png
apps/tracer/test-results/core-screen/tracer-core-393x852-ink-palette-open.png
apps/tracer/test-results/core-screen/tracer-core-1440x900-paper-sidebar-closed.png
apps/tracer/test-results/core-screen/tracer-core-1440x900-paper-sidebar-open.png
apps/tracer/test-results/core-screen/tracer-core-1440x900-paper-palette-open.png
apps/tracer/test-results/core-screen/tracer-core-1440x900-ink-sidebar-closed.png
apps/tracer/test-results/core-screen/tracer-core-1440x900-ink-sidebar-open.png
apps/tracer/test-results/core-screen/tracer-core-1440x900-ink-palette-open.png
Playwright gate output, verbatim:
15 passed (2.1m).Fast gate output, verbatim summary:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+
dist/ghostty-web.js: OK
dist/ghostty-vt.wasm: OK
dist/index.d.ts: OK
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.69s]
Start: branch t-web, base origin/dev
7174d6bf6f, starting headf6f2c3c797. Read CLAUDE.md, DECISIONS.md, docs/ARCHITECTURE.md, all 26 comments on #33 and all 3 comments on parent #14.Finding: apps/tracer/src/core-screen.ts still renders two fabricated disabled tabs, two fabricated hosts/three sessions, inert palette rows, and 'Current host' (lines 66-76, 162-177, 233-251). apps/tracer/style.css:210-216 resets --overlay/--overlay-line/--shadow on .terminal-screen, masking applyTheme's dark values; the session model at t-server crates/infraternal-server/src/auth/sessions.rs:6-13 and POST /auth/session in auth/http.rs:226-228 expose no hostname. Will use the authenticated session response and keep the tracer auth module/tests untouched.
Failing-test evidence before fixes: updated core-screen Playwright assertion failed on the current production build at apps/tracer/test/core-screen.spec.ts:135; expected server hostname 'infraternal-dev', received 'Current host · name unavailable'. The run used isolated TRACER_TEST_PORT=4183 (1 failed, 7.7s).
Build finding: the new server route test initially stopped in openssl-sys before project compilation because PATH omitted make. Found existing gnumake 4.4.1 at /nix/store/p5frwjlmkgj2987iy9plr7nav9l72xz4-gnumake-4.4.1/bin/make; rerunning with that path.
Failing-test evidence before the server fix: t-server authenticated POST /auth/session route test now runs; 1 failed because the response had no hostname (expected gethostname()='infraternal-dev'). The baseline request authenticated successfully (HTTP 200).
Finding: after token inheritance was fixed, the browser check showed .capsule still computed transparent: rgba(0,0,0,0) vs paper overlay rgb(251 251 251 / 0.72). The earlier :scope button reset (0,1,1) outranked .capsule (0,1,0); changed it to :where(.terminal-screen) button so the themed control rules apply.
Screenshot-run finding: the focused Playwright test timed out at its 30 s test limit after producing 8/12 screenshots; no assertion failed. It overlapped the server fast gate's vendored OpenSSL build (make/rustc active). Retaking the matrix after compilation settles.
Server gate finding: clippy and cargo-deny passed. fmt failed on formatting in crates/infraternal-server/src/auth/http.rs. The workspace test stage failed 7 existing shim integration cases with ; static x86_64 build completed in 7m16s under CARGO_TARGET_DIR=/home/kayg/.cache/codex-scratch/issue33-server/target, then the checker looked for target/x86_64-unknown-linux-musl/release/infraternal and failed. I’m formatting the patch and rerunning from a scratch checkout so generated targets and relative runtime state stay under the permitted cache.
Correction to my previous note: seven shim integration tests failed with the literal message shim socket: No such file or directory. The first issue comment dropped the word shim because shell command substitution consumed its backticks; the rest of the gate result is unchanged.
Server hostname slice committed as
37216316fc: both authenticated session endpoints now include hostname from gethostname; the authenticated route test matched the host OS name. Focused route test: 1 passed, 0 failed. Full workspace server tests: 56 passed, 4 ignored; shim tests 7 passed, 0 failed.scripts/verify fast output from the scratch checkout containing this commit's source:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+
x86_64: static-pie linked; PT_INTERP absent; 14801824 bytes. aarch64: statically linked; PT_INTERP absent; 12391776 bytes. server and agent stubs: exit 2, not implemented.
TypeScript protocol output: 7 pass, 0 fail, 34390 expect() calls; 134 streams, 11439 schedules, zero divergences.
Finding from full Playwright run: the all-theme contrast test passed. The screenshot matrix saved 3 of 12 views (1440x900 Paper) then failed at ink .icon-btn material. Error evidence: apps/tracer/test-results/core-screen-core-screen-th-1b4b8-mobile-tray-and-screenshots/error-context.md reports received RGB 30,31,33 alpha 1 where the resting ink token was RGB 28,28,30 alpha 0.68. The pointer stayed over the toggle after the Paper loop, so :hover applied the solid hover color. I will move the pointer off the controls before checking resting materials and rerun the full suite.
Latency evidence from full Playwright run: 500/500 echoes painted, p50 14.20 ms, p99 30.50 ms, resume 83.70 ms. The existing #33 baseline is p50/p99 14.80/15.70 ms and resume 77.40 ms, so this sample does not establish within-noise p99. At run start the host load average was 15.88 on 8 vCPUs; other Chromium, Zig, Rust and shim benchmark processes were active. The test failed its unchanged p99 <20 ms gate; I will rerun when that load clears.
Production screenshot matrix passed: 2 Playwright tests; 12 images at 393x852 and 1440x900 for Paper/Ink, sidebar closed/open and palette open.
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-1440x900-paper-sidebar-closed.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-1440x900-paper-sidebar-open.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-1440x900-paper-palette-open.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-1440x900-ink-sidebar-closed.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-1440x900-ink-sidebar-open.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-1440x900-ink-palette-open.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-393x852-paper-sidebar-closed.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-393x852-paper-sidebar-open.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/apps/tracer/test-results/core-screen/tracer-core-393x852-paper-palette-open.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-393x852-ink-sidebar-closed.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-393x852-ink-sidebar-open.png
/home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-393x852-ink-palette-open.png
Correction: the 393x852 Paper palette screenshot path is /home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/tracer-core-393x852-paper-palette-open.png. The previous list duplicated apps/tracer in that one path; the other eleven are correct.
Rerunning the full browser suite with the hover assertion fixed: the core screenshot test passed and saved all 12 images. Existing onboarding.spec.ts then failed its no-layout-shifts assertion with one shift value 0.000009357216917438271 instead of an empty array; that auth test file and apps/tracer/src/auth.ts remain untouched. The host was still at load average 15.52 on 8 vCPUs at run start, with concurrent Chromium and Rust builds. I will rerun the full suite after contention drops.
Follow-up evidence: isolated onboarding.spec.ts rerun passed (1/1, 16.9s), with the auth tests and apps/tracer/src/auth.ts untouched. The full-suite layout-shift failure is intermittent under the shared workload; I am rerunning the entire suite.
Full Playwright suite now passes: 16 passed in 2.1m. The core screen test passed all-theme contrast, token/material checks, placeholder/action assertions, and captured the 12 production PNGs (verified dimensions 1440x900 and 393x852).
500-key probe: 500/500 echoes; p50/p99 15.30/16.10 ms; resume 78.90 ms. Baseline on #33 was 14.80/15.70 ms and 77.40 ms, deltas +0.50/+0.40/+1.50 ms. This is within the prior local variation and below the existing p99 <20 ms gate. Machine: Linux 6.12.111 x86_64, 8 vCPUs. Load average at run start 9.83/13.34/16.56 and after run 5.56/9.99/14.76.
Theme-material step committed in t-web as
4f93dd7f12. Overlay tokens now provide theme-derived glass, line and shadow values; the screen no longer overwrites them with light defaults, and the icon button retains its SVG and material. Automated contrast checks pass for every curated theme; the final screenshot matrix checks sidebar, palette, capsule, tabs and mobile key tray.Real-host/core-screen step committed in t-web as
795acbba09. The UI now shows the authenticated server hostname and one live shell, with no seeded hosts, unavailable labels, Add hosts row or inert palette entries. The full Playwright suite passed 16/16 on this tree; the 500-key probe measured p50/p99 15.30/16.10 ms and 78.90 ms resume.Finished. t-web HEAD
795acbba09; t-server HEAD37216316fc. Both worktrees are clean. No push or deploy.scripts/verify fast — t-web output:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+
dist/ghostty-web.js: OK
dist/ghostty-vt.wasm: OK
dist/index.d.ts: OK
stream differential: 134 streams, 11439 schedules, zero divergences
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.97s]
scripts/verify fast — t-server output, run from a temporary scratch worktree containing the exact committed source so all build and runtime state stayed under the cache:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+
x86_64: static-pie linked; PT_INTERP absent; size 14801824 bytes
aarch64: statically linked; PT_INTERP absent; size 12391776 bytes
server subcommand: exit 2, not implemented
agent subcommand: exit 2, not implemented
stream differential: 134 streams, 11439 schedules, zero divergences
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.94s]
Full cd apps/tracer && bun x playwright test: 16 passed (2.1m). 500-key probe: 500/500 echoes; p50/p99 15.30/16.10 ms; resume 78.90 ms. Against the #33 baseline 14.80/15.70 ms and 77.40 ms, deltas were +0.50/+0.40/+1.50 ms. Linux 6.12.111 x86_64, 8 vCPUs; load average at run start 9.83/13.34/16.56 and after run 5.56/9.99/14.76.
All 12 production screenshots are saved under /home/kayg/Developer/infraternal/.worktrees/t-web/apps/tracer/test-results/core-screen/ and were listed individually in the earlier comment. Dimensions are 1440x900 and 393x852 for Paper/Ink, sidebar closed/open and palette open.
Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: Pane cards, branched tree and tooltips merged in
0c47cd42e(#33, #36) which is in dev and prod; production screenshots and gate posted. Reopen if anything is still missing.kayg referenced this issue2026-10-28 17:53:54 +00:00