J386: tracer browser baseline is red on compute01 #434

Open
opened 2026-11-08 18:44:09 +00:00 by kayg · 13 comments
Owner

J386: make the tracer browser suite green on compute01.

J367 ran the full tracer Playwright suite on compute01 (unmodified base): 997 passed, 147 skipped, 104 failed; failing files rerun on base: 92 failures. The same specs pass on dev-02. A red baseline means verify fast on compute01 cannot catch real UI regressions.

Plan: classify failures by cause (host environment vs dev regression), compare compute01 and dev-02 (Chromium, fonts, playwright config, env, load), fix the root cause reproducibly from the repo, prove with a full run on both hosts. Branch fix-compute01-browser-baseline, base origin/dev a894dd877. Estimate: 4 h including full-suite runs.

J386: make the tracer browser suite green on compute01. J367 ran the full tracer Playwright suite on compute01 (unmodified base): 997 passed, 147 skipped, 104 failed; failing files rerun on base: 92 failures. The same specs pass on dev-02. A red baseline means `verify fast` on compute01 cannot catch real UI regressions. Plan: classify failures by cause (host environment vs dev regression), compare compute01 and dev-02 (Chromium, fonts, playwright config, env, load), fix the root cause reproducibly from the repo, prove with a full run on both hosts. Branch `fix-compute01-browser-baseline`, base origin/dev a894dd877. Estimate: 4 h including full-suite runs.
Author
Owner

Start: branch fix-compute01-browser-baseline, base origin/dev a894dd877. First comparison: both hosts have identical Playwright 1.65.0 and chromium-1228/1254 trees. Differences: compute01 is Debian 13 x86_64, TZ Europe/Berlin (CET), LANG=en_US.UTF-8, 16 vCPU at load ~10-13 (parallel jobs); dev-02 is Ubuntu 24.04 aarch64, TZ UTC, LANG=C.UTF-8, load ~1.5. Fonts: same families except compute01 also has Liberation Sans Narrow. Next: run failing specs on compute01 to read the actual errors.

Start: branch `fix-compute01-browser-baseline`, base origin/dev a894dd877. First comparison: both hosts have identical Playwright 1.65.0 and chromium-1228/1254 trees. Differences: compute01 is Debian 13 x86_64, TZ Europe/Berlin (CET), LANG=en_US.UTF-8, 16 vCPU at load ~10-13 (parallel jobs); dev-02 is Ubuntu 24.04 aarch64, TZ UTC, LANG=C.UTF-8, load ~1.5. Fonts: same families except compute01 also has Liberation Sans Narrow. Next: run failing specs on compute01 to read the actual errors.
Author
Owner

Finding 1 (root cause, proven): socket hang up (ECONNRESET) on /__mock/* POSTs (27 of the 92 base failures: font-metrics, font-weight, and the cascade in other specs). apps/tracer/test/mock-server.ts is a Node http server with the default 5 s keepAliveTimeout. A spec's context.request holds one keep-alive socket and reuses it after a page load; on a busy host (compute01 load 10-13 on 16 vCPU, vs 1.5 on dev-02) the page load takes longer than 5 s, so the reuse races the server's close. Host-speed dependent, not a font problem.
Evidence: ~claude/j386-evidence/run1.log on compute01 (unpatched, font-metrics + wheel-scroll): font-metrics 6 of 18 failed with ECONNRESET at 6.5 s each, different ones each run. With server.keepAliveTimeout = 0 (run3.log): font-metrics 18/18 pass.
Finding 2 (open): wheel-scroll / docs-palette fail deterministically with .dr-page h1 not found within 10 s after opening the Keys docs page. Page snapshot at failure shows the article rendered. Probing.

Finding 1 (root cause, proven): `socket hang up (ECONNRESET)` on `/__mock/*` POSTs (27 of the 92 base failures: font-metrics, font-weight, and the cascade in other specs). `apps/tracer/test/mock-server.ts` is a Node `http` server with the default 5 s `keepAliveTimeout`. A spec's `context.request` holds one keep-alive socket and reuses it after a page load; on a busy host (compute01 load 10-13 on 16 vCPU, vs 1.5 on dev-02) the page load takes longer than 5 s, so the reuse races the server's close. Host-speed dependent, not a font problem. Evidence: `~claude/j386-evidence/run1.log` on compute01 (unpatched, font-metrics + wheel-scroll): font-metrics 6 of 18 failed with ECONNRESET at 6.5 s each, different ones each run. With `server.keepAliveTimeout = 0` (run3.log): font-metrics 18/18 pass. Finding 2 (open): wheel-scroll / docs-palette fail deterministically with `.dr-page h1` not found within 10 s after opening the Keys docs page. Page snapshot at failure shows the article rendered. Probing.
Author
Owner

Progress. Pushed to fix-compute01-browser-baseline: 355803060 (keep-alive fix, finding 1) and 20e9e5352 (finding 2).
Finding 2 (real dev regression, not the host): wheel-scroll.spec.ts waits for window d-keys; D317 (7dd462e9e) moved the page to reference/keys, so the window is d-reference/keys. A probe on compute01 listed the Docs windows (~claude/j386-evidence/run4.log): d-reference/keys present, d-keys absent, no failed requests. Fixed the selector. J367's "passes on dev-02" does not hold for this spec: dev-02's J367 logs never ran it.
Now: running all 52 originally failing spec files on compute01 (patched) and on dev-02 (unpatched base, to see which failures are host-independent). Both are queued behind other jobs (compute01 position 9, dev-02 position 7). Logs: ~claude/j386-evidence/run-failing.log on each host.

Progress. Pushed to `fix-compute01-browser-baseline`: 355803060 (keep-alive fix, finding 1) and 20e9e5352 (finding 2). Finding 2 (real dev regression, not the host): wheel-scroll.spec.ts waits for window `d-keys`; D317 (7dd462e9e) moved the page to `reference/keys`, so the window is `d-reference/keys`. A probe on compute01 listed the Docs windows (`~claude/j386-evidence/run4.log`): `d-reference/keys` present, `d-keys` absent, no failed requests. Fixed the selector. J367's "passes on dev-02" does not hold for this spec: dev-02's J367 logs never ran it. Now: running all 52 originally failing spec files on compute01 (patched) and on dev-02 (unpatched base, to see which failures are host-independent). Both are queued behind other jobs (compute01 position 9, dev-02 position 7). Logs: `~claude/j386-evidence/run-failing.log` on each host.
Author
Owner

Finding 3 (reclassification): J367's "the same specs pass on dev-02" is wrong. I ran the 38 spec files that held the 104 base failures on dev-02 (aarch64, unpatched a894dd877): 82 failed, 299 passed (~claude/j386-evidence/d02-failing.log on dev-02). So most of the red baseline is not compute01's environment:

  • host-load dependent (fixed, commit 878a8a68b): font-metrics 7 + font-weight 8 fail on dev-02 too with the same ECONNRESET.
  • stale or broken on both hosts (real dev drift): wheel-scroll 4 (fixed, 3b15565dd), ca-unlock 7 (s-hosts vs s-terminal-hosts window id; toast stacking), startup-demo 6 (.ui-toast-message strict), addhost-pill-stream 8, docs-palette 4, glass-ghost 4, predictive-backspace 7 / predictive-echo 5, swipes 4, others. RTT and "no bar at rest" ones (core-screen, platform-consistency) are already fixed on dev by #430, which I rebased onto (origin/dev 0a5432d2c).
    compute01 run of the same files with my two fixes is in progress (~claude/j386-evidence/c01-failing.log). Next: triage each remaining family into stale spec (fix) / load-dependent (fix or isolate) / product bug (explain, leave).
Finding 3 (reclassification): J367's "the same specs pass on dev-02" is wrong. I ran the 38 spec files that held the 104 base failures on dev-02 (aarch64, unpatched a894dd877): **82 failed, 299 passed** (`~claude/j386-evidence/d02-failing.log` on dev-02). So most of the red baseline is not compute01's environment: - host-load dependent (fixed, commit 878a8a68b): font-metrics 7 + font-weight 8 fail on dev-02 too with the same ECONNRESET. - stale or broken on both hosts (real dev drift): wheel-scroll 4 (fixed, 3b15565dd), ca-unlock 7 (`s-hosts` vs `s-terminal-hosts` window id; toast stacking), startup-demo 6 (`.ui-toast-message` strict), addhost-pill-stream 8, docs-palette 4, glass-ghost 4, predictive-backspace 7 / predictive-echo 5, swipes 4, others. RTT and "no bar at rest" ones (core-screen, platform-consistency) are already fixed on dev by #430, which I rebased onto (origin/dev 0a5432d2c). compute01 run of the same files with my two fixes is in progress (`~claude/j386-evidence/c01-failing.log`). Next: triage each remaining family into stale spec (fix) / load-dependent (fix or isolate) / product bug (explain, leave).
Author
Owner

Finding 4 (compute01 vs dev-02, the real differences). Run of the 38 failing spec files on compute01 with fixes 1 and 2: 71 failed, 310 passed (~claude/j386-evidence/c01-failing.log); dev-02 unpatched: 82 failed, 299 passed. Fonts, Chromium (both chromium-1228/1254 trees, Playwright 1.65.0), env and locale are NOT the cause: fc-match resolves sans/mono/serif to DejaVu on both; no spec failed for a missing font. What differs:

  • Load (compute01 load 10-13 vs 1.5): the keep-alive race (finding 1), and a tooltip measured mid-ease in terminal-links:476 (283.94 vs 284). Fixed: 878a8a68b, 991a10515.
  • CPU architecture: recovery-ui-hold compares sign-in screenshots with 0 pixels of tolerance; x86-64 renders shadow blur steps and text edges differently from arm64 (diff image: signin-mobile-diff.png in the art dir, 18% of pixels, same fonts). Fix: baselines per architecture (695bc21a7); x64 set recorded on compute01.
  • Spec drift on both hosts (not environment): toasts stack since D336 (inbox, machine-pill-flicker, mesh-rename, startup-demo x6, mesh arrows, ca-unlock, sessions-canvas), Settings window s-terminal-hosts, Keys page d-reference/keys. Fixed in 5d933591d, f07700e1c, and the sessions-canvas commit.
  • Left, same on both hosts, not environment (explained, not fixed here): addhost-pill-stream x8 (dialog "Setup of instant-fail.lab" never appears), docs-palette x4 (palette Enter does not open the multiplexer page), glass-ghost x4 (toast lets 0.17-0.36 of text through at DPR 3, ceiling 0.1), clusters swipes x5, mesh-view-overlap, phone-polish x2, sign-out x2 (layout is journalled/server-side since D312, no infraternal.canvas.* key), wheel-scroll x2 (sideways wheel moves nothing), perf-hud. predictive-backspace/echo x12 are being fixed on fix-predictive-echo-specs; core-screen/platform-consistency/terminal RTT by #430 (already in the base).
    Load-only timing: mesh-perf drag median 11.9 ms vs bound 3 ms on a contended host; perf-hud stall. These belong on the perf VM (PROCESS §1).
Finding 4 (compute01 vs dev-02, the real differences). Run of the 38 failing spec files on compute01 with fixes 1 and 2: **71 failed, 310 passed** (`~claude/j386-evidence/c01-failing.log`); dev-02 unpatched: 82 failed, 299 passed. Fonts, Chromium (both chromium-1228/1254 trees, Playwright 1.65.0), env and locale are NOT the cause: `fc-match` resolves sans/mono/serif to DejaVu on both; no spec failed for a missing font. What differs: - **Load** (compute01 load 10-13 vs 1.5): the keep-alive race (finding 1), and a tooltip measured mid-ease in terminal-links:476 (283.94 vs 284). Fixed: 878a8a68b, 991a10515. - **CPU architecture**: recovery-ui-hold compares sign-in screenshots with 0 pixels of tolerance; x86-64 renders shadow blur steps and text edges differently from arm64 (diff image: `signin-mobile-diff.png` in the art dir, 18% of pixels, same fonts). Fix: baselines per architecture (695bc21a7); x64 set recorded on compute01. - **Spec drift on both hosts** (not environment): toasts stack since D336 (inbox, machine-pill-flicker, mesh-rename, startup-demo x6, mesh arrows, ca-unlock, sessions-canvas), Settings window `s-terminal-hosts`, Keys page `d-reference/keys`. Fixed in 5d933591d, f07700e1c, and the sessions-canvas commit. - Left, same on both hosts, not environment (explained, not fixed here): addhost-pill-stream x8 (dialog "Setup of instant-fail.lab" never appears), docs-palette x4 (palette Enter does not open the multiplexer page), glass-ghost x4 (toast lets 0.17-0.36 of text through at DPR 3, ceiling 0.1), clusters swipes x5, mesh-view-overlap, phone-polish x2, sign-out x2 (layout is journalled/server-side since D312, no `infraternal.canvas.*` key), wheel-scroll x2 (sideways wheel moves nothing), perf-hud. predictive-backspace/echo x12 are being fixed on `fix-predictive-echo-specs`; core-screen/platform-consistency/terminal RTT by #430 (already in the base). Load-only timing: mesh-perf drag median 11.9 ms vs bound 3 ms on a contended host; perf-hud stall. These belong on the perf VM (PROCESS §1).
Author
Owner

Progress, head 8d96733f1 on fix-compute01-browser-baseline. Touched-spec run on compute01 (~claude/j386-evidence/touched.log): 176 passed, 11 failed. All of ca-unlock, inbox, machine-pill-flicker, mesh-rename, startup-demo, mesh, sessions-canvas and font-metrics/font-weight (23 cases) now pass. The 11: addhost-pill-stream x8 (pill click does not open the "Setup of instant-fail.lab" dialog; probing), terminal-links x1 and wheel-scroll x2 (fixed in 3 further commits, verification queued).
Two corrections to earlier notes: (a) terminal-links: the first read was the early one (302x217 mid-ease; settled 308x221), so both reads now settle. (b) wheel-scroll sideways: the Keys page is the last of 12 Docs stops, so a forward gesture has nowhere to go; spec fixed, not a product bug.
x64 sign-in baselines recorded on compute01 and checked (snap.log: UPDATE_EXIT=0, CHECK_EXIT=0, 5 passed).
Full-suite runs on both hosts at the final head are queued behind other jobs (dev-02 position ~11, compute01 after the verification run).

Progress, head 8d96733f1 on `fix-compute01-browser-baseline`. Touched-spec run on compute01 (`~claude/j386-evidence/touched.log`): 176 passed, 11 failed. All of ca-unlock, inbox, machine-pill-flicker, mesh-rename, startup-demo, mesh, sessions-canvas and font-metrics/font-weight (23 cases) now pass. The 11: addhost-pill-stream x8 (pill click does not open the "Setup of instant-fail.lab" dialog; probing), terminal-links x1 and wheel-scroll x2 (fixed in 3 further commits, verification queued). Two corrections to earlier notes: (a) terminal-links: the *first* read was the early one (302x217 mid-ease; settled 308x221), so both reads now settle. (b) wheel-scroll sideways: the Keys page is the last of 12 Docs stops, so a forward gesture has nowhere to go; spec fixed, not a product bug. x64 sign-in baselines recorded on compute01 and checked (`snap.log`: UPDATE_EXIT=0, CHECK_EXIT=0, 5 passed). Full-suite runs on both hosts at the final head are queued behind other jobs (dev-02 position ~11, compute01 after the verification run).
Author
Owner

Status (full-suite runs in progress at head d42bdd449): compute01 350 of ~1290 tests done at load 25-33 (16 vCPU, 5 build slots busy), dev-02 391. Logs: ~claude/j386-evidence/full.log on each host.
Since the last comment: verification run (two.log, 6 passed) cleared terminal-links and wheel-scroll; addhost-pill-stream's eight cases fail because the confirm tip's accessible name became its message (#391, aria-labelledby beats aria-label), fixed in d42bdd449. The same stale name also hits addhost-pill.spec.ts:176 (found by the full run; fix is local, will be committed after the run). Early failures in the full run that were not in J367's list: access-level.spec:127 (tooltip overlaps a field), addhost-pill.spec:93 (a 303 ms long task during the ring, a timing assertion on a host at load 30), canvas.spec:590 (shortcut capsule). I will classify them from the run's artifacts.

Status (full-suite runs in progress at head d42bdd449): compute01 350 of ~1290 tests done at load 25-33 (16 vCPU, 5 build slots busy), dev-02 391. Logs: `~claude/j386-evidence/full.log` on each host. Since the last comment: verification run (`two.log`, 6 passed) cleared terminal-links and wheel-scroll; addhost-pill-stream's eight cases fail because the confirm tip's accessible name became its message (#391, aria-labelledby beats aria-label), fixed in d42bdd449. The same stale name also hits addhost-pill.spec.ts:176 (found by the full run; fix is local, will be committed after the run). Early failures in the full run that were not in J367's list: access-level.spec:127 (tooltip overlaps a field), addhost-pill.spec:93 (a 303 ms long task during the ring, a timing assertion on a host at load 30), canvas.spec:590 (shortcut capsule). I will classify them from the run's artifacts.
Author
Owner

Full suite at head d42bdd449 (spec fixes so far; logs ~claude/j386-evidence/full.log on each host, artifacts art-full/):

  • compute01 (x86_64, load 14-33 while it ran, 4.2 h): 39 failed, 147 skipped, 1094 passed. J367 base: 104 failed.
  • dev-02 (aarch64, load 1.3, 3.4 h): 26 failed, 147 skipped, 1107 passed.
  • 19 failures are identical on both hosts (real dev drift, below), 7 only on dev-02, 20 only on compute01.
    Finding 5, the host difference that is NOT load: the test double answers "this host" with os.hostname() (mock-server.ts). compute01's is infraternal-dev-01-compute01 (28 chars), dev-02's infraternal-dev-02-std (22). The name is drawn in the machine pill, so canvas.spec:590 measures the shortcut list 560 px wide against a 573.7 px pill, and access-level.spec:127's tooltip overlaps its field; both fail on every compute01 run (rerun at 5f04aa42f: same two fail again) and pass on dev-02. Fonts and Chromium are identical (Chrome for Testing 158.0.8127.18 both; same fallback chain; compute01 only adds Liberation Sans Narrow). Fixed in a3f0f9df1: a constant test-host.
    Rerun of the 18 compute01-only files at 5f04aa42f with fewer neighbours (rerun.log): 9 failed, 151 passed, so 11 of the 20 were load flakes (addhost-pill ring long task, row swipes, onboarding, setup-layout, ...). Still failing: access-level, canvas:590, canvas:767 (hostname, being rechecked), hosts-new-window-review (rechecking), sign-out:309 (dev drift), predictive-echo:130 (fix-predictive-echo-specs), and three timing specs that assert frame cost: clusters-frames:60 and motion-audit:39 ("at 4x CPU") and mesh-perf:47 (drag median 11.9 ms vs 3 ms): PROCESS §1 puts those on the perf VM; on a shared host at load 20-30 they cannot pass.
    Both-host failures (19, not environment, not fixed here): swipes x5 (Settings view no longer has nine side-by-side windows: stops is 5), docs-palette x4 (palette Enter does not open the multiplexer page), glass-ghost x4 (toast text shows through at DPR 3), mesh-view-overlap, perf-hud, phone-polish x2, sign-out:309, clusters:512. dev-02 only (7): keytray-modifiers, mesh:122, palette-polish x2 (57.87 vs 58 px), terminal (prediction state), toast-stack x2 (cards behind the front have the same width).
Full suite at head d42bdd449 (spec fixes so far; logs `~claude/j386-evidence/full.log` on each host, artifacts `art-full/`): - compute01 (x86_64, load 14-33 while it ran, 4.2 h): **39 failed, 147 skipped, 1094 passed**. J367 base: 104 failed. - dev-02 (aarch64, load 1.3, 3.4 h): **26 failed, 147 skipped, 1107 passed**. - 19 failures are identical on both hosts (real dev drift, below), 7 only on dev-02, 20 only on compute01. Finding 5, the host difference that is NOT load: **the test double answers "this host" with `os.hostname()`** (`mock-server.ts`). compute01's is `infraternal-dev-01-compute01` (28 chars), dev-02's `infraternal-dev-02-std` (22). The name is drawn in the machine pill, so canvas.spec:590 measures the shortcut list 560 px wide against a 573.7 px pill, and access-level.spec:127's tooltip overlaps its field; both fail on every compute01 run (rerun at 5f04aa42f: same two fail again) and pass on dev-02. Fonts and Chromium are identical (Chrome for Testing 158.0.8127.18 both; same fallback chain; compute01 only adds Liberation Sans Narrow). Fixed in a3f0f9df1: a constant `test-host`. Rerun of the 18 compute01-only files at 5f04aa42f with fewer neighbours (`rerun.log`): 9 failed, 151 passed, so 11 of the 20 were load flakes (addhost-pill ring long task, row swipes, onboarding, setup-layout, ...). Still failing: access-level, canvas:590, canvas:767 (hostname, being rechecked), hosts-new-window-review (rechecking), sign-out:309 (dev drift), predictive-echo:130 (`fix-predictive-echo-specs`), and three timing specs that assert frame cost: clusters-frames:60 and motion-audit:39 ("at 4x CPU") and mesh-perf:47 (drag median 11.9 ms vs 3 ms): PROCESS §1 puts those on the perf VM; on a shared host at load 20-30 they cannot pass. Both-host failures (19, not environment, not fixed here): swipes x5 (Settings view no longer has nine side-by-side windows: `stops` is 5), docs-palette x4 (palette Enter does not open the multiplexer page), glass-ghost x4 (toast text shows through at DPR 3), mesh-view-overlap, perf-hud, phone-polish x2, sign-out:309, clusters:512. dev-02 only (7): keytray-modifiers, mesh:122, palette-polish x2 (57.87 vs 58 px), terminal (prediction state), toast-stack x2 (cards behind the front have the same width).
Author
Owner

Full suite at head a3f0f9df1 (includes the hostname fix; logs ~claude/j386-evidence/full2.log on each host):

  • dev-02 (aarch64, 3.4 h): 24 failed, 147 skipped, 1109 passed. First full run at d42bdd449: 26 failed. J367's dev-02 numbers for these files: 82 failed of 381 before the spec fixes.
  • compute01 (x86_64, 4.6 h, load 29-36 for the whole run): 38 failed, 147 skipped, 1095 passed. J367 base on the same host: 104 failed.
    The two sets share 19 failures that are not environment: swipes x6 (Settings has 5 stops, not 9), docs-palette x4, glass-ghost x4, mesh-view-overlap, perf-hud, phone-polish x2, sign-out:309, clusters:512 (each needs its owner; the errors are in the issue above and the logs).
    compute01-only (19) in that run: all but access-level and hosts-new-window-review are timing or frame-budget specs (view flights within 350 ms, popover within 200 ms, "at 4x CPU" motion audit, synchronized-output release, mesh frame budgets, version-pill script cost, row swipes, keyboard split) that ran at load 30+. access-level and hosts-new-window-review are fixed by later commits (d0a0c8b0c, a66700652) that this run did not contain. A rerun of those 18 files at the branch tip is queued (rerun3.log).
    dev-02-only (5): toast-stack x2 (cards behind the front have equal widths), keytray-modifiers, palette-polish (57.87 vs 58 px), addhost-wizard:531 (strict mode: the leaving pane and the new one both match; passed on dev-02 in the first run, a flake).
Full suite at head a3f0f9df1 (includes the hostname fix; logs `~claude/j386-evidence/full2.log` on each host): - dev-02 (aarch64, 3.4 h): **24 failed, 147 skipped, 1109 passed**. First full run at d42bdd449: 26 failed. J367's dev-02 numbers for these files: 82 failed of 381 before the spec fixes. - compute01 (x86_64, 4.6 h, load 29-36 for the whole run): **38 failed, 147 skipped, 1095 passed**. J367 base on the same host: 104 failed. The two sets share 19 failures that are not environment: swipes x6 (Settings has 5 stops, not 9), docs-palette x4, glass-ghost x4, mesh-view-overlap, perf-hud, phone-polish x2, sign-out:309, clusters:512 (each needs its owner; the errors are in the issue above and the logs). compute01-only (19) in that run: all but access-level and hosts-new-window-review are timing or frame-budget specs (view flights within 350 ms, popover within 200 ms, "at 4x CPU" motion audit, synchronized-output release, mesh frame budgets, version-pill script cost, row swipes, keyboard split) that ran at load 30+. access-level and hosts-new-window-review are fixed by later commits (d0a0c8b0c, a66700652) that this run did not contain. A rerun of those 18 files at the branch tip is queued (`rerun3.log`). dev-02-only (5): toast-stack x2 (cards behind the front have equal widths), keytray-modifiers, palette-polish (57.87 vs 58 px), addhost-wizard:531 (strict mode: the leaving pane and the new one both match; passed on dev-02 in the first run, a flake).
Author
Owner

Finish. Branch fix-compute01-browser-baseline, head 47a1d612d (base origin/dev 0a5432d2c, which already had #430). Not merged, not deployed. The gate (scripts/verify fast) was not run: the change is test-side only (spec files, the test double, playwright.config.ts, 4 PNG baselines), and the browser suite is what I ran.

Root causes, by what the evidence shows:

  1. Load race in the test double (fixed, 878a8a68b): Node's 5 s keep-alive timeout vs a spec's reused request socket: ECONNRESET on /__mock/*. font-metrics/font-weight 15 cases, in other specs too. Failed on dev-02 as well (7+8) once it was loaded.
  2. The double reported the build machine's os.hostname() (fixed, a3f0f9df1): 28 chars on compute01, 22 on dev-02, drawn in the machine pill: canvas:590 failed on every compute01 run, passed after.
  3. CPU architecture: 0-pixel sign-in baselines differ on x86-64 (shadow blur, text edges). Per-architecture baselines (695bc21a7 + 2551bfa33): recovery-ui-hold 5/5 on compute01.
  4. Spec drift, both hosts (fixed): D336 stacked toasts (inbox, machine-pill-flicker, mesh-rename, startup-demo x6, mesh arrows, ca-unlock, sessions-canvas), Settings id s-terminal-hosts, d-reference/keys and last-stop direction (wheel-scroll), confirm tip named by its message (addhost-pill-stream x8, addhost-pill:166), two reads taken mid-ease (terminal-links), canvas:767 toast rising (47a1d612d's parent, not validated on its own).
    Not environment, and not what J367 reported: Chromium (158.0.8127.18) and fallback fonts are identical on both hosts; "dev-02 passes" was only true for some specs (82 of 381 failed there before these fixes).

Results (full suite, 147 skipped each time):
| host | head | result |
| compute01, load 29-36 | a3f0f9df1 | 38 failed, 1095 passed (4.6 h) |
| compute01, J367 base | unmodified | 104 failed, 997 passed |
| dev-02 | a3f0f9df1 | 24 failed, 1109 passed (3.4 h) |
| dev-02 | d42bdd449 | 26 failed, 1107 passed |
The suite is NOT green on compute01. Rerun of the compute01-only failures at a66700652 with the load at 19-26 (rerun3.log): 14 failed of 205 (the 3 below the commit line are spec reverts, 1d0391ce2 and 47a1d612d, because those two changes did not help):

  • same on dev-02 (real dev drift, owners needed): swipes (Settings has 5 stops, not 9), docs-palette x4, glass-ghost x4, mesh-view-overlap, perf-hud, phone-polish x2, sign-out x2, clusters:512.
  • compute01-only, unexplained: access-level:127 (at rest the consent's buttons end 41 px above the viewport bottom, the tip flips above and covers the field; screenshot art-dbg/access-rest.png was on compute01), hosts-new-window-review (no host list after pressing New window). I could not find the cause.
  • compute01-only, load: frame and motion budgets (mesh-perf, mesh:193, motion-audit, clusters-keyboard-split), row-swipe-continuity, palette-navigation, sessions-canvas:486. PROCESS §1 puts frame budgets on the perf VM; they cannot pass on a shared host at load 20-30 and need an owner decision (tag and exclude them from verify fast?).
    Logs: ~claude/j386-evidence/{full,full2,rerun,rerun3}.log on compute01, same names on dev-02 for full/full2.
Finish. Branch `fix-compute01-browser-baseline`, head 47a1d612d (base origin/dev 0a5432d2c, which already had #430). Not merged, not deployed. The gate (`scripts/verify fast`) was not run: the change is test-side only (spec files, the test double, playwright.config.ts, 4 PNG baselines), and the browser suite is what I ran. Root causes, by what the evidence shows: 1. **Load race in the test double** (fixed, 878a8a68b): Node's 5 s keep-alive timeout vs a spec's reused request socket: `ECONNRESET` on `/__mock/*`. font-metrics/font-weight 15 cases, in other specs too. Failed on dev-02 as well (7+8) once it was loaded. 2. **The double reported the build machine's `os.hostname()`** (fixed, a3f0f9df1): 28 chars on compute01, 22 on dev-02, drawn in the machine pill: canvas:590 failed on every compute01 run, passed after. 3. **CPU architecture**: 0-pixel sign-in baselines differ on x86-64 (shadow blur, text edges). Per-architecture baselines (695bc21a7 + 2551bfa33): recovery-ui-hold 5/5 on compute01. 4. **Spec drift, both hosts** (fixed): D336 stacked toasts (inbox, machine-pill-flicker, mesh-rename, startup-demo x6, mesh arrows, ca-unlock, sessions-canvas), Settings id `s-terminal-hosts`, `d-reference/keys` and last-stop direction (wheel-scroll), confirm tip named by its message (addhost-pill-stream x8, addhost-pill:166), two reads taken mid-ease (terminal-links), canvas:767 toast rising (47a1d612d's parent, not validated on its own). Not environment, and not what J367 reported: Chromium (158.0.8127.18) and fallback fonts are identical on both hosts; "dev-02 passes" was only true for some specs (82 of 381 failed there before these fixes). Results (full suite, 147 skipped each time): | host | head | result | | compute01, load 29-36 | a3f0f9df1 | 38 failed, 1095 passed (4.6 h) | | compute01, J367 base | unmodified | 104 failed, 997 passed | | dev-02 | a3f0f9df1 | 24 failed, 1109 passed (3.4 h) | | dev-02 | d42bdd449 | 26 failed, 1107 passed | The suite is NOT green on compute01. Rerun of the compute01-only failures at a66700652 with the load at 19-26 (`rerun3.log`): 14 failed of 205 (the 3 below the commit line are spec reverts, 1d0391ce2 and 47a1d612d, because those two changes did not help): - same on dev-02 (real dev drift, owners needed): swipes (Settings has 5 stops, not 9), docs-palette x4, glass-ghost x4, mesh-view-overlap, perf-hud, phone-polish x2, sign-out x2, clusters:512. - compute01-only, unexplained: access-level:127 (at rest the consent's buttons end 41 px above the viewport bottom, the tip flips above and covers the field; screenshot `art-dbg/access-rest.png` was on compute01), hosts-new-window-review (no host list after pressing New window). I could not find the cause. - compute01-only, load: frame and motion budgets (mesh-perf, mesh:193, motion-audit, clusters-keyboard-split), row-swipe-continuity, palette-navigation, sessions-canvas:486. PROCESS §1 puts frame budgets on the perf VM; they cannot pass on a shared host at load 20-30 and need an owner decision (tag and exclude them from `verify fast`?). Logs: `~claude/j386-evidence/{full,full2,rerun,rerun3}.log` on compute01, same names on dev-02 for full/full2.
Author
Owner

Review of fix-compute01-browser-baseline @ 47a1d612d0 (base 0a5432d2c)

Verdict: APPROVE, provisional. The change is test-side only and I found no spec edit that hides a product bug. Merging needs the mechanical rebase in P2-1 first. Item 5, the full suite on the trial merge, is still in the build-slot queue. I will add its result as an addendum and change the verdict only if it shows a regression against dev.

Trial merge: origin/dev be54e662d + this branch. Reviewed from the diff 0a5432d2c..47a1d612d (19 commits, 24 files) and the product code the specs touch.

P1

None.

P2

P2-1. Merge conflict, and a wrong resolution loses a fix (item 4).

  • apps/tracer/test/mock-server.ts is the only conflict. Dev already has the same keep-alive fix as #438 (96ea2ac9c: server.keepAliveTimeout = 0 plus mock-keepalive.spec.ts), so both sides add the same line with different comments.
  • The other 23 files merge cleanly, including the files #427 and #442 touched. Neither #442 (198c4a736) nor #427 (c442500c2) changed any file this branch edits except mock-server.ts, via #438, #440 and #314.
  • Resolve by dropping this branch's keep-alive hunk and keeping dev's comment. Keep the hostname hunk: import { DOUBLE_HOSTNAME } and the unlock-session reply. When I took dev's side of the file whole (checkout --ours), the os.hostname() fix silently disappeared, and canvas:590 would be red again on compute01. I re-applied it by hand in the trial merge.
  • Ask the author to rebase onto current dev and drop the keep-alive commit 878a8a68b instead of leaving it to the merger.

P2-2. A constant host name removes all coverage for long machine names (item 1).

  • canvas.spec:590 (shortcuts) asserts panel.width > capsule.width. With compute01's 28-character name the capsule was 573.7 px against a 560 px panel. access-level:127 also failed only with that name.
  • A real machine called infraternal-dev-01-compute01 produces exactly that. The constant is the right fix for the test double, because a spec must not depend on the build host. But it turns "a long name breaks the layout" into a silent gap.
  • Please open a follow-up for a spec with a deliberately long name (about 28 characters) at 1440 and 393 px wide. It should check that the capsule fits the viewport and that the shortcuts panel and the tooltips behave. It may well find a real bug, and the Taste rule on alignment applies.

P2-3. access-level.spec:127 is still red on compute01 and is not explained (item 1).

  • J386 says the consent's buttons end 41 px above the viewport bottom, so the tip flips above and covers the password field. That is the behaviour the spec exists to forbid.
  • The default viewport is 1280×720, and the spec sets none. J386 could not find the cause, and the branch leaves the failure in place, so it is not hidden. But it must not be filed as environment until explained. Check whether the tip-flip rule near a viewport bottom can cover the field. The trial run will show whether it reproduces.

P3

P3-1. The mid-ease waits absorb a slow animation (item 1).

  • Neither canvas.spec:806 (expect.poll(bottom < 40)) nor terminal-links measureSettled (two equal reads) bounds how long the motion takes. A toast or tooltip that took 2 s to settle would pass.
  • The product values today are fine. The tooltip uses TRAVEL = 200 ms with ease-out (tooltip.ts:39), and the width swap uses the same constant. But nothing in these specs would catch a regression past the owner's ≤ 300 ms rule (2026-11-09).
  • The waits are legitimate. The reads were early, and I checked that the toast card is appended last, so .last() is the newest (toast.ts:476). I only ask for a bound, or for the J428 gate to cover these two surfaces. A bound would be waiting on getAnimations() to finish and failing if that takes more than 300 ms plus slack, which also settles the read.

P3-2. A confirm tip's label option is dead (item 1).

  • mountConfirmTip sets both aria-label (tooltip.ts:224) and aria-labelledby (:235). The second wins, so the dialog's name is its whole message ("o2 couldn't join this server…"), and label: "Setup of o2" (setup-pill.on-demand.ts:196) never reaches assistive technology. The spec edits (8 dialog-name lookups) follow the product correctly.
  • Decide whether the short name was intended. If so, that is a product fix, and these lookups change back. If not, drop the unused option.

P3-3. Sign-in baselines (item 2). The differences are rendering noise, not layout. I decoded each arm64/x64 pair and counted the differing pixels:

baseline size differing px max delta (of 255) deltas > 4
signin-desktop 1440×900 107,463 (8.3 %) 1 0
signin-desktop-light 1440×900 20,054 (1.5 %) 2 0
signin-mobile 393×852 64,679 (19.3 %) 1 0
signin-mobile-light 393×852 15,818 (4.7 %) 1 0

The dimensions are identical, and every difference lies in a band around the card (desktop dark x 405–1034, y 268–697; mobile dark spans the full width, y 252–665). That is shadow gradient and compositing rounding: no delta above 2, so no edge moved. The one thing to check is that the x64 set was recorded on compute01 by --update-snapshots. It agrees with the arm64 originals to within 2/255, so I accept it. The config comment mentions "text edges", but the data only supports blur and rounding. Since the whole difference is ≤ 2/255, a small threshold (say 0.02, with maxDiffPixels: 0) would remove 4 PNGs and the per-architecture template, and would still catch any layout, colour or text change. That is a design choice for the owner. Per-architecture files are correct as written. Nothing else in apps/tracer uses toHaveScreenshot, so the template change affects only this spec.

P3-4. Keep-alive in the double (item 3). The reasoning holds. A Node 5 s idle close races a reused context.request socket, and the fix is in the test double only. It cannot mask a server bug: the double is not the product, and the real server is not involved. Dev's #438 is the better version, with its own regression spec. If you want the product's idle-close behaviour checked against browser connection reuse, that is a separate issue.

P3-5. History. The branch carries two commit/revert pairs (a66700652 reverted by 47a1d612d, and the access-level change reverted by 1d0391ce2). Squash them out before merging so each commit is one change.

What I checked and found sound

  • The D336 toast edits (.last(), the sessions-canvas observer, the filter({hasText}) count). New cards are appended, so .last() is the newest. The observer counts a card the first time it has text, which matches "a repeat only counts up".
  • s-terminal-hosts, d-reference/keys and the last-stop wheel direction. All follow product renames and structure: Keys is the last of 12 Docs stops, and a forward gesture has nowhere to go.
  • The branch contains no remnants of the reverted access-level and hosts-new-window-review edits.
  • Other hostname() uses (cell-metrics, palette-navigation, terminal-cell-position) only print the environment.

The @perf tagging decision

The branch makes it easy and does not get in the way.

  • All selection goes through one playwright test call: scripts/verify:68, scripts/nightly-browser-suite.py (bun x playwright test) and bun run test. A single grepInvert: /@perf/ in apps/tracer/playwright.config.ts covers compute01, dev-02 and the nightly. The perf VM would turn it off with an env var. This branch only adds one unrelated line to that config, so there is no conflict.
  • Playwright is 1.65, so tags can use the { tag: "@perf" } option, which suits mesh.spec.ts:193 because its title is generated in a loop. Nothing is tagged today.
  • Scope: the four named specs are mesh-perf.spec.ts:47, mesh.spec.ts:193 (the for (const rate of [1, 4]) test), motion-audit.spec.ts:39 and clusters-keyboard-split.spec.ts:21. J386's lists also name clusters-frames:60, perf-hud and row-swipe-continuity as load-bound. The follow-up should decide those too.

Item 5: the full suite on the trial merge

  • Queued on compute01 through build-slot, same steps as scripts/nightly-browser-suite.py, port 4747.
  • Queue position 13 of 6 slots at 16:09 UTC, load 52–84. Logs: ~claude/.cache/codex-scratch/review434/suite.log and results.json on compute01.
  • Dev's nightly (#443) was merged hours ago and has no results yet, so there is nothing to compare against. I will compare with it if it appears, and otherwise with J386's numbers (compute01 at a3f0f9df1: 38 failed, 1095 passed; J367's unmodified base: 104 failed).
  • I ran nothing else heavy and did not run verify.
## Review of `fix-compute01-browser-baseline` @ 47a1d612d01400237d11c23ae7bc84ce5e43c76d (base 0a5432d2c) **Verdict: APPROVE, provisional.** The change is test-side only and I found no spec edit that hides a product bug. Merging needs the mechanical rebase in P2-1 first. Item 5, the full suite on the trial merge, is still in the build-slot queue. I will add its result as an addendum and change the verdict only if it shows a regression against dev. Trial merge: `origin/dev` be54e662d + this branch. Reviewed from the diff `0a5432d2c..47a1d612d` (19 commits, 24 files) and the product code the specs touch. ### P1 None. ### P2 **P2-1. Merge conflict, and a wrong resolution loses a fix (item 4).** - `apps/tracer/test/mock-server.ts` is the only conflict. Dev already has the same keep-alive fix as #438 (96ea2ac9c: `server.keepAliveTimeout = 0` plus `mock-keepalive.spec.ts`), so both sides add the same line with different comments. - The other 23 files merge cleanly, including the files #427 and #442 touched. Neither #442 (198c4a736) nor #427 (c442500c2) changed any file this branch edits except `mock-server.ts`, via #438, #440 and #314. - Resolve by dropping this branch's keep-alive hunk and keeping dev's comment. **Keep the hostname hunk**: `import { DOUBLE_HOSTNAME }` and the `unlock-session` reply. When I took dev's side of the file whole (`checkout --ours`), the `os.hostname()` fix silently disappeared, and `canvas:590` would be red again on compute01. I re-applied it by hand in the trial merge. - Ask the author to rebase onto current dev and drop the keep-alive commit 878a8a68b instead of leaving it to the merger. **P2-2. A constant host name removes all coverage for long machine names (item 1).** - `canvas.spec:590` (shortcuts) asserts `panel.width > capsule.width`. With compute01's 28-character name the capsule was 573.7 px against a 560 px panel. `access-level:127` also failed only with that name. - A real machine called `infraternal-dev-01-compute01` produces exactly that. The constant is the right fix for the test double, because a spec must not depend on the build host. But it turns "a long name breaks the layout" into a silent gap. - Please open a follow-up for a spec with a deliberately long name (about 28 characters) at 1440 and 393 px wide. It should check that the capsule fits the viewport and that the shortcuts panel and the tooltips behave. It may well find a real bug, and the Taste rule on alignment applies. **P2-3. `access-level.spec:127` is still red on compute01 and is not explained (item 1).** - J386 says the consent's buttons end 41 px above the viewport bottom, so the tip flips above and covers the password field. That is the behaviour the spec exists to forbid. - The default viewport is 1280×720, and the spec sets none. J386 could not find the cause, and the branch leaves the failure in place, so it is not hidden. But it must not be filed as environment until explained. Check whether the tip-flip rule near a viewport bottom can cover the field. The trial run will show whether it reproduces. ### P3 **P3-1. The mid-ease waits absorb a slow animation (item 1).** - Neither `canvas.spec:806` (`expect.poll(bottom < 40)`) nor `terminal-links` `measureSettled` (two equal reads) bounds how long the motion takes. A toast or tooltip that took 2 s to settle would pass. - The product values today are fine. The tooltip uses `TRAVEL = 200` ms with ease-out (`tooltip.ts:39`), and the width swap uses the same constant. But nothing in these specs would catch a regression past the owner's ≤ 300 ms rule (2026-11-09). - The waits are legitimate. The reads were early, and I checked that the toast card is appended last, so `.last()` is the newest (`toast.ts:476`). I only ask for a bound, or for the J428 gate to cover these two surfaces. A bound would be waiting on `getAnimations()` to finish and failing if that takes more than 300 ms plus slack, which also settles the read. **P3-2. A confirm tip's `label` option is dead (item 1).** - `mountConfirmTip` sets both `aria-label` (`tooltip.ts:224`) and `aria-labelledby` (`:235`). The second wins, so the dialog's name is its whole message ("o2 couldn't join this server…"), and `label: "Setup of o2"` (`setup-pill.on-demand.ts:196`) never reaches assistive technology. The spec edits (8 dialog-name lookups) follow the product correctly. - Decide whether the short name was intended. If so, that is a product fix, and these lookups change back. If not, drop the unused option. **P3-3. Sign-in baselines (item 2).** The differences are rendering noise, not layout. I decoded each arm64/x64 pair and counted the differing pixels: | baseline | size | differing px | max delta (of 255) | deltas > 4 | |---|---|---|---|---| | signin-desktop | 1440×900 | 107,463 (8.3 %) | 1 | 0 | | signin-desktop-light | 1440×900 | 20,054 (1.5 %) | 2 | 0 | | signin-mobile | 393×852 | 64,679 (19.3 %) | 1 | 0 | | signin-mobile-light | 393×852 | 15,818 (4.7 %) | 1 | 0 | The dimensions are identical, and every difference lies in a band around the card (desktop dark x 405–1034, y 268–697; mobile dark spans the full width, y 252–665). That is shadow gradient and compositing rounding: no delta above 2, so no edge moved. The one thing to check is that the x64 set was recorded on compute01 by `--update-snapshots`. It agrees with the arm64 originals to within 2/255, so I accept it. The config comment mentions "text edges", but the data only supports blur and rounding. Since the whole difference is ≤ 2/255, a small `threshold` (say 0.02, with `maxDiffPixels: 0`) would remove 4 PNGs and the per-architecture template, and would still catch any layout, colour or text change. That is a design choice for the owner. Per-architecture files are correct as written. Nothing else in `apps/tracer` uses `toHaveScreenshot`, so the template change affects only this spec. **P3-4. Keep-alive in the double (item 3).** The reasoning holds. A Node 5 s idle close races a reused `context.request` socket, and the fix is in the test double only. It cannot mask a server bug: the double is not the product, and the real server is not involved. Dev's #438 is the better version, with its own regression spec. If you want the product's idle-close behaviour checked against browser connection reuse, that is a separate issue. **P3-5. History.** The branch carries two commit/revert pairs (`a66700652` reverted by `47a1d612d`, and the access-level change reverted by `1d0391ce2`). Squash them out before merging so each commit is one change. ### What I checked and found sound - The D336 toast edits (`.last()`, the sessions-canvas observer, the `filter({hasText})` count). New cards are appended, so `.last()` is the newest. The observer counts a card the first time it has text, which matches "a repeat only counts up". - `s-terminal-hosts`, `d-reference/keys` and the last-stop wheel direction. All follow product renames and structure: Keys is the last of 12 Docs stops, and a forward gesture has nowhere to go. - The branch contains no remnants of the reverted access-level and hosts-new-window-review edits. - Other `hostname()` uses (`cell-metrics`, `palette-navigation`, `terminal-cell-position`) only print the environment. ### The `@perf` tagging decision **The branch makes it easy and does not get in the way.** - All selection goes through one `playwright test` call: `scripts/verify:68`, `scripts/nightly-browser-suite.py` (`bun x playwright test`) and `bun run test`. A single `grepInvert: /@perf/` in `apps/tracer/playwright.config.ts` covers compute01, dev-02 and the nightly. The perf VM would turn it off with an env var. This branch only adds one unrelated line to that config, so there is no conflict. - Playwright is 1.65, so tags can use the `{ tag: "@perf" }` option, which suits `mesh.spec.ts:193` because its title is generated in a loop. Nothing is tagged today. - Scope: the four named specs are `mesh-perf.spec.ts:47`, `mesh.spec.ts:193` (the `for (const rate of [1, 4])` test), `motion-audit.spec.ts:39` and `clusters-keyboard-split.spec.ts:21`. J386's lists also name `clusters-frames:60`, `perf-hud` and row-swipe-continuity as load-bound. The follow-up should decide those too. ### Item 5: the full suite on the trial merge - Queued on compute01 through `build-slot`, same steps as `scripts/nightly-browser-suite.py`, port 4747. - Queue position 13 of 6 slots at 16:09 UTC, load 52–84. Logs: `~claude/.cache/codex-scratch/review434/suite.log` and `results.json` on compute01. - Dev's nightly (#443) was merged hours ago and has no results yet, so there is nothing to compare against. I will compare with it if it appears, and otherwise with J386's numbers (compute01 at a3f0f9df1: 38 failed, 1095 passed; J367's unmodified base: 104 failed). - I ran nothing else heavy and did not run `verify`.
Author
Owner

Addendum to my review of 47a1d612d: item 5 (the full suite on the trial merge) was NOT run

I queued it on compute01 through build-slot at 16:09 UTC. Over the next ~30 min it moved from position 13 to 9 of 14, with all 6 slots held by verify fast runs. Once it gets a slot the suite needs about 3 to 5 hours at the load J386 saw, so a result would not come back in this review. I removed my queue entry by its exact PIDs (build-slot shows no entry for it) so no orphan run starts later with nobody reading it. The verdict above is therefore based on the diff, the product code and the PNG comparison, not on a suite run. Nothing ran on compute01 beyond bun --version and the file copy.

  • Dev's nightly (#443) has no results yet, so there was nothing to compare with either.
  • Ready to re-queue: the trial merge (origin/dev be54e662d + branch, with the hostname hunk re-applied by hand, see P2-1) is in ~claude/worktrees/review434 on compute01, and ~claude/.cache/codex-scratch/review434/run.sh runs the same steps as the nightly on port 4747. Launch with build-slot nice -n10 nix develop path:/home/claude/worktrees/review434 -c ./run.sh from that scratch directory.
  • dev-02 had 7 queued and load 2.3 when I looked, a shorter wait than compute01. The suite there is slower to compare with J386's compute01 numbers, but the orchestrator may prefer it. Your call.
  • The cleaner check is the real rebase: once the author rebases onto dev (P2-1), the nightly's first run on dev is the comparison that matters.
  • Local trial merge commit (not pushed): ~/Developer/Worktrees/infraternal-review434, detached at 0cc1b1d0d + 1 commit.
## Addendum to my review of 47a1d612d: item 5 (the full suite on the trial merge) was NOT run I queued it on compute01 through `build-slot` at 16:09 UTC. Over the next ~30 min it moved from position 13 to 9 of 14, with all 6 slots held by `verify fast` runs. Once it gets a slot the suite needs about 3 to 5 hours at the load J386 saw, so a result would not come back in this review. I removed my queue entry by its exact PIDs (build-slot shows no entry for it) so no orphan run starts later with nobody reading it. **The verdict above is therefore based on the diff, the product code and the PNG comparison, not on a suite run.** Nothing ran on compute01 beyond `bun --version` and the file copy. - Dev's nightly (#443) has no results yet, so there was nothing to compare with either. - Ready to re-queue: the trial merge (origin/dev be54e662d + branch, with the hostname hunk re-applied by hand, see P2-1) is in `~claude/worktrees/review434` on compute01, and `~claude/.cache/codex-scratch/review434/run.sh` runs the same steps as the nightly on port 4747. Launch with `build-slot nice -n10 nix develop path:/home/claude/worktrees/review434 -c ./run.sh` from that scratch directory. - dev-02 had 7 queued and load 2.3 when I looked, a shorter wait than compute01. The suite there is slower to compare with J386's compute01 numbers, but the orchestrator may prefer it. Your call. - The cleaner check is the real rebase: once the author rebases onto dev (P2-1), the nightly's first run on dev is the comparison that matters. - Local trial merge commit (not pushed): `~/Developer/Worktrees/infraternal-review434`, detached at 0cc1b1d0d + 1 commit.
Author
Owner

Round 3 (J445's requests). Branch rebuilt on origin/dev (5eb968744) with the keep-alive commit, both commit/revert pairs and the merge commit dropped; force-pushed with lease, head a9a68b702 (18 commits, all spec/test-double work except 3 ui commits).

  • @perf: grepInvert: /@perf/ once in playwright.config.ts unless TRACER_PERF=1 (the --grep-invert flags in verify and the nightly script are gone). Tagged: mesh-perf, mesh frame budgets, motion-audit, clusters-keyboard-split, clusters-frames (frame budget at 1x/4x CPU). Not tagged, with the reason in PROCESS.md: perf-hud (checks an injected stall is recorded) and row-swipe-continuity (checks positions, only logs frame times).
  • Long machine names: the shortcuts panel was a fixed 560 px; it is now max(560, capsule width) (shortcuts-view.ts). New spec long-machine-name.spec.ts (1440x900 and 393x852) with POST /__mock/hostname in the double. 2 passed on dev-02.
  • access-level:127 is a real placement bug: at 1440x900 the buttons end 41 px above the viewport edge, the tip needs ~39, so it flips above and covers the field. Fix: scroll-margin-bottom: 3.5rem on the consent card. Passes on dev-02; not yet re-run on compute01.
  • P3: removed the dead label option of confirm tips (10 callers, one caught by typecheck; bun run check now passes).
  • PNG baselines per architecture kept.
    Focused run on dev-02 at a9a68b702 (~claude/j386-evidence/r3.log): 65 passed, 1 failed: canvas:871 (palette ::before inset 4.4 vs 3.3: origin/dev drift, not mine). Full suite is running on dev-02 (load 40-170 from other jobs).
Round 3 (J445's requests). Branch rebuilt on origin/dev (5eb968744) with the keep-alive commit, both commit/revert pairs and the merge commit dropped; force-pushed with lease, head a9a68b702 (18 commits, all spec/test-double work except 3 ui commits). - @perf: `grepInvert: /@perf/` once in playwright.config.ts unless `TRACER_PERF=1` (the `--grep-invert` flags in verify and the nightly script are gone). Tagged: mesh-perf, mesh frame budgets, motion-audit, clusters-keyboard-split, clusters-frames (frame budget at 1x/4x CPU). Not tagged, with the reason in PROCESS.md: perf-hud (checks an injected stall is recorded) and row-swipe-continuity (checks positions, only logs frame times). - Long machine names: the shortcuts panel was a fixed 560 px; it is now max(560, capsule width) (`shortcuts-view.ts`). New spec `long-machine-name.spec.ts` (1440x900 and 393x852) with `POST /__mock/hostname` in the double. 2 passed on dev-02. - access-level:127 is a real placement bug: at 1440x900 the buttons end 41 px above the viewport edge, the tip needs ~39, so it flips above and covers the field. Fix: `scroll-margin-bottom: 3.5rem` on the consent card. Passes on dev-02; not yet re-run on compute01. - P3: removed the dead `label` option of confirm tips (10 callers, one caught by typecheck; `bun run check` now passes). - PNG baselines per architecture kept. Focused run on dev-02 at a9a68b702 (`~claude/j386-evidence/r3.log`): 65 passed, 1 failed: canvas:871 (palette `::before` inset 4.4 vs 3.3: origin/dev drift, not mine). Full suite is running on dev-02 (load 40-170 from other jobs).
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#434
No description provided.