UX gap audit 2026-10-14 #212

Open
opened 2026-10-14 04:05:23 +00:00 by kayg · 46 comments
Owner

Owner request: "actively look out for ux gaps like these" (typing lag in one window while another floods: the UI looks fine, it feels broken). This is the ranked result of walking the real flows by hand. No product code was changed.

How it was measured

  • Build: origin/dev at b182529f. Web bundle built from that commit, server binary built from the same commit (cargo build --release, musl), real PTYs through apps/tracer/real/server.ts (no test double) for everything marked "real". The mock test double (?mock=1&proto=clusters, proto=product, plus a 150 ms RTT proxy) was used for sign-in timings, the offline-host case and the concept views.
  • Viewports: 1440x900, 393x852 (iPhone 14 Pro profile, DPR 2), 375x667 (iPhone SE profile, DPR 2). Themes: ink on the real app; paper on Settings, the sign-in card and the mockup. Most real-app states were walked in ink only, so paper coverage of the real flows is incomplete.
  • Probe: Event Timing (key/click to next paint), rAF frame gaps, long tasks, CDP CPU profile.
  • Caveat on every absolute number: the host's load average was 40 to 95 for the whole session (other jobs compiling). Absolute milliseconds are inflated. Idle/flood pairs were run back to back, so the ratios hold; the absolute values must be re-measured on the perf VM. Findings 2, 3 and 8 describe behaviour that follows from the code (cited), not from timing.

Ranked gaps

Severity: S1 = the person loses work, time or trust; S2 = feels broken or confusing; S3 = polish. "UI" = apps/tracer or packages/ui; "backend" = server/agent.

1. Typing and canvas gestures lag while another window prints a lot (S1, UI mainly; server part shipped under D268)

Steps: sign in, open two windows, run yes in window 1, click window 2, type. Or pan/switch views/split while it runs.
Experience: characters land late and in clumps; panning the canvas stutters. Nothing on screen says anything is wrong.
Evidence (real server, back-to-back, 0 ms RTT; 5 typed lines each):

  • Key to next paint (Event Timing), median per run: flood 48 to 72 ms (max 144), idle 16 to 24 ms (max 24 to 104).
  • Frames over 33 ms while typing: flood 12 to 28 of ~100, idle 0 to 4.
  • Canvas pan by wheel with a window flooding: p50 frame 33 ms, 72 of 83 frames over 33 ms, 15 over 50 ms, long tasks 58 to 84 ms. Idle: p50 16.7, 12 of 98 over 33 ms.
  • View switch Ctrl+3/Ctrl+1: 18 frames over 33 ms with flood, 0 idle. Split right: long tasks 50 to 77 ms with flood.
  • At 150 ms RTT the server echo for window 2 is 100 to 161 ms from Enter during the flood vs 84 to 89 ms idle.
  • CPU profile over 5 s of flood in the other window: the main thread is busy 74 percent (idle 26 percent). About 1.3 s of it is the terminal emulator WASM, 1.8 s "(program)" (draw/compositing), GC 0.1 s. Nothing is left for keystrokes.
  • Screenshot: r12-flood-three.png
    Proposed fix (UI): feed unfocused windows' output through a separate worker lane and draw them at a capped rate (at most the focused window's cadence, or every 4th frame when not focused); keep the focused window's keystroke to paint path first (D268 Q19 browser part). Measure with the existing clusters-bench specs plus this idle/flood pair.

2. After the network comes back, or the phone is unlocked, the app waits out a backoff and says nothing (S1, UI)

Steps: go offline for 6 s and back (or lock/unlock a phone for 20 s).
Experience: the window sits in "connecting" for seconds after the network is already back, with no hint when it will retry.
Evidence:

  • connection.ts has no online, visibilitychange or pageshow listener (grep: none). reconnectDelay is 50 ms doubling to a 5 s ceiling plus up to 50 percent jitter, so up to 7.5 s.
  • Real server, offline 6 s then online: live again after 505 to 1007 ms at 0 ms RTT, 2760 ms at 150 ms RTT. Emulated phone lock (network off, page frozen 20 s) then unlock at 0 ms RTT: "connecting" for 6.9 s. Emulated, so confirm on a device.
  • Screenshot at unlock+1.2 s (last screen is back, which is right; the only sign is a 6 px grey dot): r10-phone-2unlock1200.png
    Proposed fix (UI): on online, pageshow and visible, reset the attempt counter and retry at once (first try within one frame); show a visible "Reconnecting" state (see 3).

3. Offline looks almost the same as online (S1, UI)

Steps: go offline in a window while typing.
Experience: the top pill dot stays green, the window gets a 6 px grey static dot, typed text does not appear at all (no local echo, no "held" marker), and the pill count says "0 sessions" after coming back (it was 1). TASTE: "Status is an icon with motion... plus a warm tooltip".
Evidence: r2-desk-2off3s.png r2-desk-4back5000.png (5 s after the network returned the window was still "connecting"; keys typed offline were delivered only after the next reconnect).
Proposed fix (UI): one animated connection icon per window (connected, reconnecting, offline) with the shared tooltip; the top pill dot follows the worst state; show held keys (dim echo) and a "Reconnecting, keys are kept" line; recompute the session count after resume.

4. Mesh view on a phone: the empty state is cut off (S1 on phones, UI)

Steps: phone, palette, "Go to Mesh" on an install with no mesh hosts.
Experience: only "yet" and "are added." are visible; the Add host button is off screen. The title spans x -159 to 29 on a 375 px screen (-141 to 47 on 393).
Evidence: r21-phone-dark-mesh.png r21-se-light-mesh.png. Compare the Console empty state, which is centred correctly: r20-phone-empty.png
Proposed fix (UI): the camera centres on the view region, not its content origin; add a Playwright check that every view's empty state is inside the viewport at 375 and 393.

5. Opening a shell on an offline host leaves a dead window that looks alive (S1, UI; backend returns the right error)

Steps (test double with a forced unavailable reply): palette, "Open shell on ".
Experience: a window opens at once with a blinking cursor, then an error toast appears for about 5 s and goes. The window stays empty with a grey dot, no message and no Retry. The palette row does not say "offline" (the hint column is cut: "terminal . ssh . conso..."). One click produced 4 open attempts.
Evidence: o1-desk-palette-offline.png o1-desk-click4000.png
Proposed fix (UI): show the failure inside the window ("build-server-01 is offline. Retry"), no cursor until attached; offer Retry and Close; put "offline" at the start of the row hint; stop the automatic retries or show them.

6. After closing the last window the view says "No hosts yet" (S2, UI)

Steps: close the only window.
Experience: "No hosts yet. Add a host and its shell opens here." appears while the pill says "Console 1" and the server host exists. The one button adds a host instead of opening a shell on the existing host.
Evidence: r20-phone-empty.png
Proposed fix (UI): when hosts exist, say "No windows open" with "New shell on " as the main action; keep "Add host" secondary.

7. Sign-in step 4 on phones: the main button is below the fold (S2, UI)

Steps: first enrolment at 393x852 or 375x667, "Save your recovery key".
Experience: on 393x852 the "Open infraternal" button shows as a 10 px sliver; on 375x667 the checkbox (y 823) and button (y 893) are 160 to 230 px below the fold. The card scrolls (.auth-screen overflow auto) but nothing says so, and scrolled to the end the button touches the screen bottom with no safe-area gap.
Evidence: s3-phone-recovery-initial.png s1-se-recovery.png
Proposed fix (UI): pin the actions row to the bottom (words list scrolls) with the safe-area inset, as TASTE already requires for flows.

8. A healthy connection is declared dead after last RTT + 50 ms (S2 risk, UI plus backend)

Evidence: checkLiveness retires the socket when no pong has arrived within livenessRtt + 50 ms (2000 ms before the first sample). Under the host load here (60+) the browser opened 3 to 5 new sockets in 30 s while idle (1, 2 and 4 windows; close code 4000 "connection unresponsive" on several). A phone on a jittery cellular link or a busy main thread (finding 1) can trip the same rule, and every false trip costs 4 round trips (D267) plus a stale-looking window.
Needs: re-measure on the perf VM and on a throttled CPU before deciding. Proposed fix: require two missed probes, and never retire while the main thread had a long task in that window.

Steps: returning visit with the 150 ms RTT proxy.
Experience: flat background for about 1.5 s (first contentful paint 1452 ms), the canvas at about 2.6 s. At that moment the window pill is already drawn with a grey dot and a blinking cursor while it is not connected (TASTE: a blinking cursor means you can type).
Evidence: s2-desk-reload-1200.png s2-desk-reload-2600.png
Proposed fix (UI): paint the sign-in wordmark/skeleton from the HTML shell before JS arrives; hide the cursor until the stream is attached.

10. Hostnames are cut in window pills although there is room (S2, UI)

.ui-window-pill { max-width: calc(50% - 26px) } cuts "infraternal-dev" to "infraternal-d..." at the default one-third width on 1440 px, and "build-server-01.prod.example" to "build-server-01...", with 150 px free before the actions pill. TASTE: "the hostname is never cut off while the pill has room".
Evidence: r14-desk-dark-sidebar.png (three windows). Proposed fix (UI): let the pill grow to the free space left of the actions pill (flex, not a percentage).

11. "Host connections are locked" toast: covers the terminal, duplicates the wizard, polling (S2, UI plus backend)

Steps: fresh server with the remote server enabled, Add hosts, Continue.
Experience: a persistent toast sits over the bottom lines of the windows (where the prompt is) while the wizard card in the middle already asks for the same passkey. Meanwhile POST /remote/ca/status is called every 0.5 to 1 s (10 calls in the 6 s after Continue).
Evidence: r15-desk-dark-kayg_127_0_0_1-3go100.png and the mockup with ca=locked: m6-desk-0.png
Proposed fix: UI: put the unlock in the Inbox/sidebar after the first sign-in (TASTE "pending actions come to the person") and hide the toast while the wizard shows it. Backend: push the CA state over the existing event subscription instead of polling.

12. Identical "shell" rows everywhere (S2, known: #178)

Sidebar shows three "shell" rows, the palette 21 identical "shell . infraternal-dev . detached" rows after a few reloads (test double). TASTE: "Session rows say what is in them".
Evidence: r14-desk-dark-sidebar.png r3-phone-dark-pal-empty.png (phone palette: the search placeholder is also cut mid-sentence, "Go to a host, a session or an").

13. Neighbouring views bleed into the current view (S3, UI)

In Mesh (desktop) the Console window's frame with its action pills hangs at the left edge, a dashed empty "Hosts" frame sits at the top right of Console, Settings windows peek at the bottom. Reads as a rendering leak. Evidence: r3-desk-dark-go-mesh.png

14. Smaller items (S3)

  • Theme switch: click to next paint 168 ms with one long task of 59 ms; font switch long task 78 ms (inflated by load; the budget is 16 ms of work).
  • Add-host failure card: the middle button "Install from the host" wraps to two lines and is cramped between Back and Retry. r18-3000.png
  • Add-host wizard: the greyed Continue gives no reason when nothing is selected (mockup).
  • Settings > Access and Users (mockup) are read-only lists with numbers ("Rules 7", "NetBird on") that look clickable and open nothing. The real palette has no "Access" entry at all.
  • A flood left running in a closed window keeps burning host CPU forever (the session keeps running, as designed) and nothing in the UI shows that a detached session is busy. Two orphaned test shims plus yes held 46 and 68 percent of a core until killed.
  • Reopen toast after closing a window works and is correctly worded: r13-desk-dark-close700.png

Not covered or not reproducible here

  • Real iOS lock/unlock, keyboard and Safari bars (emulated only). The real remote add-host end to end (the fixture has no reachable SSH host; the unreachable-host error path and the passkey unlock step were walked). Paper theme on the real flows. Mesh with hosts.
  • The harness note: real/server.ts needs remoteListen to exercise the host wizard; without it /remote/ca/status returns 405 and the wizard shows "Host connections could not be unlocked", which is a fixture artefact, not a product bug.

Suggested order

1, 2+3 (one connection-state job), 4, 5, 6, 7, 10, 9, 11, 8 (after a perf-VM run), then 12 to 14.

Owner request: "actively look out for ux gaps like these" (typing lag in one window while another floods: the UI looks fine, it feels broken). This is the ranked result of walking the real flows by hand. No product code was changed. ## How it was measured - Build: `origin/dev` at b182529f. Web bundle built from that commit, server binary built from the same commit (`cargo build --release`, musl), real PTYs through `apps/tracer/real/server.ts` (no test double) for everything marked "real". The mock test double (`?mock=1&proto=clusters`, `proto=product`, plus a 150 ms RTT proxy) was used for sign-in timings, the offline-host case and the concept views. - Viewports: 1440x900, 393x852 (iPhone 14 Pro profile, DPR 2), 375x667 (iPhone SE profile, DPR 2). Themes: ink on the real app; paper on Settings, the sign-in card and the mockup. Most real-app states were walked in ink only, so paper coverage of the real flows is incomplete. - Probe: Event Timing (key/click to next paint), rAF frame gaps, long tasks, CDP CPU profile. - **Caveat on every absolute number:** the host's load average was 40 to 95 for the whole session (other jobs compiling). Absolute milliseconds are inflated. Idle/flood pairs were run back to back, so the ratios hold; the absolute values must be re-measured on the perf VM. Findings 2, 3 and 8 describe behaviour that follows from the code (cited), not from timing. ## Ranked gaps Severity: S1 = the person loses work, time or trust; S2 = feels broken or confusing; S3 = polish. "UI" = apps/tracer or packages/ui; "backend" = server/agent. ### 1. Typing and canvas gestures lag while another window prints a lot (S1, UI mainly; server part shipped under D268) Steps: sign in, open two windows, run `yes` in window 1, click window 2, type. Or pan/switch views/split while it runs. Experience: characters land late and in clumps; panning the canvas stutters. Nothing on screen says anything is wrong. Evidence (real server, back-to-back, 0 ms RTT; 5 typed lines each): - Key to next paint (Event Timing), median per run: **flood 48 to 72 ms (max 144)**, idle 16 to 24 ms (max 24 to 104). - Frames over 33 ms while typing: flood 12 to 28 of ~100, idle 0 to 4. - Canvas pan by wheel with a window flooding: p50 frame **33 ms**, 72 of 83 frames over 33 ms, 15 over 50 ms, long tasks 58 to 84 ms. Idle: p50 16.7, 12 of 98 over 33 ms. - View switch Ctrl+3/Ctrl+1: 18 frames over 33 ms with flood, 0 idle. Split right: long tasks 50 to 77 ms with flood. - At 150 ms RTT the server echo for window 2 is 100 to 161 ms from Enter during the flood vs 84 to 89 ms idle. - CPU profile over 5 s of flood in the other window: the main thread is busy **74 percent** (idle 26 percent). About 1.3 s of it is the terminal emulator WASM, 1.8 s "(program)" (draw/compositing), GC 0.1 s. Nothing is left for keystrokes. - Screenshot: ![r12-flood-three.png](https://git.kayg.org/attachments/45138b1a-04f0-41af-a4f6-ae6a3deb4869) Proposed fix (UI): feed unfocused windows' output through a separate worker lane and draw them at a capped rate (at most the focused window's cadence, or every 4th frame when not focused); keep the focused window's keystroke to paint path first (D268 Q19 browser part). Measure with the existing clusters-bench specs plus this idle/flood pair. ### 2. After the network comes back, or the phone is unlocked, the app waits out a backoff and says nothing (S1, UI) Steps: go offline for 6 s and back (or lock/unlock a phone for 20 s). Experience: the window sits in "connecting" for seconds after the network is already back, with no hint when it will retry. Evidence: - `connection.ts` has no `online`, `visibilitychange` or `pageshow` listener (grep: none). `reconnectDelay` is 50 ms doubling to a 5 s ceiling plus up to 50 percent jitter, so up to 7.5 s. - Real server, offline 6 s then online: live again after 505 to 1007 ms at 0 ms RTT, **2760 ms at 150 ms RTT**. Emulated phone lock (network off, page frozen 20 s) then unlock at 0 ms RTT: **"connecting" for 6.9 s**. Emulated, so confirm on a device. - Screenshot at unlock+1.2 s (last screen is back, which is right; the only sign is a 6 px grey dot): ![r10-phone-2unlock1200.png](https://git.kayg.org/attachments/60d9b580-c423-4ee2-bcca-c666467c21d7) Proposed fix (UI): on `online`, `pageshow` and visible, reset the attempt counter and retry at once (first try within one frame); show a visible "Reconnecting" state (see 3). ### 3. Offline looks almost the same as online (S1, UI) Steps: go offline in a window while typing. Experience: the top pill dot stays green, the window gets a 6 px grey static dot, typed text does not appear at all (no local echo, no "held" marker), and the pill count says "0 sessions" after coming back (it was 1). TASTE: "Status is an icon with motion... plus a warm tooltip". Evidence: ![r2-desk-2off3s.png](https://git.kayg.org/attachments/dd1c345e-d508-42e9-8914-f2b037d96cef) ![r2-desk-4back5000.png](https://git.kayg.org/attachments/563d4f7f-e8e8-473b-b8a7-bde53cfbc761) (5 s after the network returned the window was still "connecting"; keys typed offline were delivered only after the next reconnect). Proposed fix (UI): one animated connection icon per window (connected, reconnecting, offline) with the shared tooltip; the top pill dot follows the worst state; show held keys (dim echo) and a "Reconnecting, keys are kept" line; recompute the session count after resume. ### 4. Mesh view on a phone: the empty state is cut off (S1 on phones, UI) Steps: phone, palette, "Go to Mesh" on an install with no mesh hosts. Experience: only "yet" and "are added." are visible; the Add host button is off screen. The title spans x -159 to 29 on a 375 px screen (-141 to 47 on 393). Evidence: ![r21-phone-dark-mesh.png](https://git.kayg.org/attachments/40962462-324c-45a7-a6c4-869f85773b45) ![r21-se-light-mesh.png](https://git.kayg.org/attachments/1e1ee3ab-237b-491c-9b60-8db0c08b9bab). Compare the Console empty state, which is centred correctly: ![r20-phone-empty.png](https://git.kayg.org/attachments/080f9413-4c07-4623-bd74-d43768042a25) Proposed fix (UI): the camera centres on the view region, not its content origin; add a Playwright check that every view's empty state is inside the viewport at 375 and 393. ### 5. Opening a shell on an offline host leaves a dead window that looks alive (S1, UI; backend returns the right error) Steps (test double with a forced `unavailable` reply): palette, "Open shell on <offline host>". Experience: a window opens at once with a blinking cursor, then an error toast appears for about 5 s and goes. The window stays empty with a grey dot, no message and no Retry. The palette row does not say "offline" (the hint column is cut: "terminal . ssh . conso..."). One click produced 4 open attempts. Evidence: ![o1-desk-palette-offline.png](https://git.kayg.org/attachments/d1252a79-6bca-47c1-bc4f-c00db444503b) ![o1-desk-click4000.png](https://git.kayg.org/attachments/fc915e70-01ed-4167-bcac-57896e8a6ded) Proposed fix (UI): show the failure inside the window ("build-server-01 is offline. Retry"), no cursor until attached; offer Retry and Close; put "offline" at the start of the row hint; stop the automatic retries or show them. ### 6. After closing the last window the view says "No hosts yet" (S2, UI) Steps: close the only window. Experience: "No hosts yet. Add a host and its shell opens here." appears while the pill says "Console 1" and the server host exists. The one button adds a host instead of opening a shell on the existing host. Evidence: ![r20-phone-empty.png](https://git.kayg.org/attachments/080f9413-4c07-4623-bd74-d43768042a25) Proposed fix (UI): when hosts exist, say "No windows open" with "New shell on <host>" as the main action; keep "Add host" secondary. ### 7. Sign-in step 4 on phones: the main button is below the fold (S2, UI) Steps: first enrolment at 393x852 or 375x667, "Save your recovery key". Experience: on 393x852 the "Open infraternal" button shows as a 10 px sliver; on 375x667 the checkbox (y 823) and button (y 893) are 160 to 230 px below the fold. The card scrolls (`.auth-screen` overflow auto) but nothing says so, and scrolled to the end the button touches the screen bottom with no safe-area gap. Evidence: ![s3-phone-recovery-initial.png](https://git.kayg.org/attachments/a5395c74-32e2-44cc-88bb-85b54760a042) ![s1-se-recovery.png](https://git.kayg.org/attachments/84823d58-6a2c-4d0b-b0e9-358bbd587d98) Proposed fix (UI): pin the actions row to the bottom (words list scrolls) with the safe-area inset, as TASTE already requires for flows. ### 8. A healthy connection is declared dead after last RTT + 50 ms (S2 risk, UI plus backend) Evidence: `checkLiveness` retires the socket when no pong has arrived within `livenessRtt + 50` ms (2000 ms before the first sample). Under the host load here (60+) the browser opened 3 to 5 new sockets in 30 s while idle (1, 2 and 4 windows; close code 4000 "connection unresponsive" on several). A phone on a jittery cellular link or a busy main thread (finding 1) can trip the same rule, and every false trip costs 4 round trips (D267) plus a stale-looking window. Needs: re-measure on the perf VM and on a throttled CPU before deciding. Proposed fix: require two missed probes, and never retire while the main thread had a long task in that window. ### 9. Cold load on a slow link shows a blank screen (S2, UI) Steps: returning visit with the 150 ms RTT proxy. Experience: flat background for about 1.5 s (first contentful paint 1452 ms), the canvas at about 2.6 s. At that moment the window pill is already drawn with a grey dot and a **blinking cursor while it is not connected** (TASTE: a blinking cursor means you can type). Evidence: ![s2-desk-reload-1200.png](https://git.kayg.org/attachments/098e0dfd-5e87-48b1-9cc4-b767b0439c88) ![s2-desk-reload-2600.png](https://git.kayg.org/attachments/f1209984-6e8a-40bf-b336-4624e8d60ced) Proposed fix (UI): paint the sign-in wordmark/skeleton from the HTML shell before JS arrives; hide the cursor until the stream is attached. ### 10. Hostnames are cut in window pills although there is room (S2, UI) `.ui-window-pill { max-width: calc(50% - 26px) }` cuts "infraternal-dev" to "infraternal-d..." at the default one-third width on 1440 px, and "build-server-01.prod.example" to "build-server-01...", with 150 px free before the actions pill. TASTE: "the hostname is never cut off while the pill has room". Evidence: ![r14-desk-dark-sidebar.png](https://git.kayg.org/attachments/d6258bf8-4abb-4698-bc2a-a7595e66ef20) (three windows). Proposed fix (UI): let the pill grow to the free space left of the actions pill (flex, not a percentage). ### 11. "Host connections are locked" toast: covers the terminal, duplicates the wizard, polling (S2, UI plus backend) Steps: fresh server with the remote server enabled, Add hosts, Continue. Experience: a persistent toast sits over the bottom lines of the windows (where the prompt is) while the wizard card in the middle already asks for the same passkey. Meanwhile `POST /remote/ca/status` is called every 0.5 to 1 s (10 calls in the 6 s after Continue). Evidence: ![r15-desk-dark-kayg_127_0_0_1-3go100.png](https://git.kayg.org/attachments/b25efa69-9026-4954-8866-b20f3e644969) and the mockup with `ca=locked`: ![m6-desk-0.png](https://git.kayg.org/attachments/fa04fdea-6508-4e97-96ce-f1d341f6a4f8) Proposed fix: UI: put the unlock in the Inbox/sidebar after the first sign-in (TASTE "pending actions come to the person") and hide the toast while the wizard shows it. Backend: push the CA state over the existing event subscription instead of polling. ### 12. Identical "shell" rows everywhere (S2, known: #178) Sidebar shows three "shell" rows, the palette 21 identical "shell . infraternal-dev . detached" rows after a few reloads (test double). TASTE: "Session rows say what is in them". Evidence: ![r14-desk-dark-sidebar.png](https://git.kayg.org/attachments/d6258bf8-4abb-4698-bc2a-a7595e66ef20) ![r3-phone-dark-pal-empty.png](https://git.kayg.org/attachments/f495d701-a72f-4f1e-9955-a75bb62efab3) (phone palette: the search placeholder is also cut mid-sentence, "Go to a host, a session or an"). ### 13. Neighbouring views bleed into the current view (S3, UI) In Mesh (desktop) the Console window's frame with its action pills hangs at the left edge, a dashed empty "Hosts" frame sits at the top right of Console, Settings windows peek at the bottom. Reads as a rendering leak. Evidence: ![r3-desk-dark-go-mesh.png](https://git.kayg.org/attachments/9091c11c-f393-4c2f-9119-6989d34dbd36) ### 14. Smaller items (S3) - Theme switch: click to next paint 168 ms with one long task of 59 ms; font switch long task 78 ms (inflated by load; the budget is 16 ms of work). - Add-host failure card: the middle button "Install from the host" wraps to two lines and is cramped between Back and Retry. ![r18-3000.png](https://git.kayg.org/attachments/c92ebc9b-eecd-4d6b-865b-eef82e851152) - Add-host wizard: the greyed Continue gives no reason when nothing is selected (mockup). - Settings > Access and Users (mockup) are read-only lists with numbers ("Rules 7", "NetBird on") that look clickable and open nothing. The real palette has no "Access" entry at all. - A flood left running in a closed window keeps burning host CPU forever (the session keeps running, as designed) and nothing in the UI shows that a detached session is busy. Two orphaned test shims plus `yes` held 46 and 68 percent of a core until killed. - Reopen toast after closing a window works and is correctly worded: ![r13-desk-dark-close700.png](https://git.kayg.org/attachments/68c9a5ae-f2aa-4d0f-b69c-5fea3b3e7eb0) ## Not covered or not reproducible here - Real iOS lock/unlock, keyboard and Safari bars (emulated only). The real remote add-host end to end (the fixture has no reachable SSH host; the unreachable-host error path and the passkey unlock step were walked). Paper theme on the real flows. Mesh with hosts. - The harness note: `real/server.ts` needs `remoteListen` to exercise the host wizard; without it `/remote/ca/status` returns 405 and the wizard shows "Host connections could not be unlocked", which is a fixture artefact, not a product bug. ## Suggested order 1, 2+3 (one connection-state job), 4, 5, 6, 7, 10, 9, 11, 8 (after a perf-VM run), then 12 to 14.
Author
Owner

Start client-resilience at 49e809d910 (dev-merge-199 cut-over candidate). Read #212 body and all comments (0); no parent referenced. Scope: event-driven resume, healthy-link/128-session idle proof on locked perf VM, pushed CA state, one open attempt per click. Push only client-resilience; no deploy. D81/D188/D265/D267 unchanged. Evidence outside checkout; failing regressions precede each fix.

Start client-resilience at 49e809d910ddaf27e99135117eff1a6de2723d21 (dev-merge-199 cut-over candidate). Read #212 body and all comments (0); no parent referenced. Scope: event-driven resume, healthy-link/128-session idle proof on locked perf VM, pushed CA state, one open attempt per click. Push only client-resilience; no deploy. D81/D188/D265/D267 unchanged. Evidence outside checkout; failing regressions precede each fix.
Author
Owner

Step 1 pushed 5ddf4be6: online/pageshow/visible bypass pending backoff synchronously, retained routes rechecked, repeated events share handshake, listeners removed on disposal. Red: 3 event cases failed (10 sockets instead of 11); green: 9 connection cases / 43 assertions, 0 failures. Strict TS passes. Production D188 Brotli: critical 246209/256000B, deferred 42468/45056B, largest on-demand 14182/18432B. VM measurements pending; no build-host timing claim. Finding gap5: a definitive offline refusal was retried on welcome; failing unit observed 3 calls for one intent. Candidate refusal latch passes (1 call), not committed yet. Finding CA: no fixed status poll timer; product.ts refreshes on each reconnect, authority control also refreshes on palette/visibility/Settings. CA MemoryCaSource already publishes lock changes but no browser topic adapter exists in this base.

Step 1 pushed 5ddf4be6: online/pageshow/visible bypass pending backoff synchronously, retained routes rechecked, repeated events share handshake, listeners removed on disposal. Red: 3 event cases failed (10 sockets instead of 11); green: 9 connection cases / 43 assertions, 0 failures. Strict TS passes. Production D188 Brotli: critical 246209/256000B, deferred 42468/45056B, largest on-demand 14182/18432B. VM measurements pending; no build-host timing claim. Finding gap5: a definitive offline refusal was retried on welcome; failing unit observed 3 calls for one intent. Candidate refusal latch passes (1 call), not committed yet. Finding CA: no fixed status poll timer; product.ts refreshes on each reconnect, authority control also refreshes on palette/visibility/Settings. CA MemoryCaSource already publishes lock changes but no browser topic adapter exists in this base.
Author
Owner

Perf-VM baseline finding: production browser + real TLS + real PTY at unchanged server artifact infraternal-transport-x86 produced 9 additional routes in 30 seconds idle (2 -> 11). VM load before 1.26/0.68/0.41, after 1.21/0.78/0.46; no stress generator. The 128-session setup then refused session open at 9/28 in its first auxiliary socket (unavailable); no CPU-at-scale claim from this failed setup. Exact-head local baseline build is continuing. Raw receipt perf-baseline.log outside checkout. Code: browser liveness expires since last answer before accepting queued correlated replies; native Liveness uses RTT+25ms (50ms minimum), and browser proof/reply calls perform authority SQL at probe frequency. Will reproduce these invariants with paused-clock tests and preserve revoked/dead/stale-reply negative controls. D81 zero periodic idle work conflicts with D265 continuously probing idle attached routes; removing avoidable authority SQL is possible without changing probe cadence or dead-link budgets.

Perf-VM baseline finding: production browser + real TLS + real PTY at unchanged server artifact infraternal-transport-x86 produced 9 additional routes in 30 seconds idle (2 -> 11). VM load before 1.26/0.68/0.41, after 1.21/0.78/0.46; no stress generator. The 128-session setup then refused session open at 9/28 in its first auxiliary socket (unavailable); no CPU-at-scale claim from this failed setup. Exact-head local baseline build is continuing. Raw receipt perf-baseline.log outside checkout. Code: browser liveness expires since last answer before accepting queued correlated replies; native Liveness uses RTT+25ms (50ms minimum), and browser proof/reply calls perform authority SQL at probe frequency. Will reproduce these invariants with paused-clock tests and preserve revoked/dead/stale-reply negative controls. D81 zero periodic idle work conflicts with D265 continuously probing idle attached routes; removing avoidable authority SQL is possible without changing probe cadence or dead-link budgets.
Author
Owner

Additive CA delivery contract for #212: declare remote.ca.status read action and remote.ca.status topic in a build-removable remote crate plugin. Input remains exactly {}; output/event carries only initialized and locked booleans. Source uses existing MemoryCaSource subscribe_locked; subscribe before reading initial snapshot. Recheck existing CA administrator membership/session generation before every snapshot, and retain plugin host authorization through outbound backpressure. Runtime disable cancels worker/subscriptions. Product discovers availability by the status action, then uses subscription snapshots and reconnect resubscription instead of HTTP status refreshes from palette/Settings/visibility/welcome. Ceremony endpoints and trust/secret handling remain unchanged. No new frame tag or foundational dependency.

Additive CA delivery contract for #212: declare remote.ca.status read action and remote.ca.status topic in a build-removable remote crate plugin. Input remains exactly {}; output/event carries only initialized and locked booleans. Source uses existing MemoryCaSource subscribe_locked; subscribe before reading initial snapshot. Recheck existing CA administrator membership/session generation before every snapshot, and retain plugin host authorization through outbound backpressure. Runtime disable cancels worker/subscriptions. Product discovers availability by the status action, then uses subscription snapshots and reconnect resubscription instead of HTTP status refreshes from palette/Settings/visibility/welcome. Ceremony endpoints and trust/secret handling remain unchanged. No new frame tag or foundational dependency.
Author
Owner

Step 2 pushed cc53d710: definitive open refusal survives reconnect, explicit new-shell resets it; transport failure remains retryable. Red 3 calls -> green 1; 8 terminal cases pass. CA functional red on real TLS/PTY fixture: 5 HTTP /remote/ca/status reads across lifecycle reconnects where at most 1 is allowed; ca-http-red.log. Push unit red kept unlocked after locked event; green updates shared control with no extra read, and adapter controls cover unavailable capability, resubscription and pending-reader disposal (5 cases /18 assertions).

Baseline and failing receipts:
perf-baseline.log
resume-events-red.log
open-red.log
browser-deadline-red.log

Step 2 pushed cc53d710: definitive open refusal survives reconnect, explicit new-shell resets it; transport failure remains retryable. Red 3 calls -> green 1; 8 terminal cases pass. CA functional red on real TLS/PTY fixture: 5 HTTP /remote/ca/status reads across lifecycle reconnects where at most 1 is allowed; ca-http-red.log. Push unit red kept unlocked after locked event; green updates shared control with no extra read, and adapter controls cover unavailable capability, resubscription and pending-reader disposal (5 cases /18 assertions). Baseline and failing receipts: [perf-baseline.log](https://git.kayg.org/attachments/aae8ddc0-f6ae-4848-bb88-43b2f5a677aa) [resume-events-red.log](https://git.kayg.org/attachments/a27974e6-522e-4e50-93eb-967c275f4ae6) [open-red.log](https://git.kayg.org/attachments/7fda0a3d-b87e-4a26-8caf-929138f94efa) [browser-deadline-red.log](https://git.kayg.org/attachments/8b77923f-694b-4376-b57c-d189a5631f6d)
Author
Owner

UI gap fixes, branch ui-gap-fixes (head 38e008ef, base origin/dev-merge-199) and mockup branch mockup-connection-state (head 6a08c77c, owner approval needed). Not merged.

Screenshots are from a production build against the test double (not a real server), 375x667, 393x852 and 1440x900, ink and paper. Before / after:

  • Gap 4, Mesh empty state off screen at 375: before after
  • Gap 7, sign-in step 4 (primary action y 935 on a 667 screen, now 622): before after paper phone
  • Gap 10, window pill: before after and . Note: the lock sits on the frame's centre line, so the pill cannot grow past it; the fix hugs the host and drops the session/login when the header is 560 px or less.
  • Gap 6, closing the last window:
  • Gap 9, cold load at 150 ms RTT, 1.3 s after navigation: before (flat) after (outline from the HTML) . First paint 1.0 s, first content 2.6 to 3.3 s; no cursor until attached.
  • Gap 5 (UI half), refused first shell, reason + Try again inside the window, no cursor, no toast:
  • Gap 3 MOCKUP (?mock=1&proto=clusters&scene=3&conn=1, palette "Mockup: connection - ..."): offline with keys kept reconnecting with keys kept phone, paper tooltip

D188 budgets (gzip, before -> after): critical 295,949 -> 296,353 of 307,200; deferred 47,861 -> 48,462 of 51,200; largest on-demand chunk 15,950 -> 15,947 of 20,480.

Not done: gap 11's wizard-duplicate hiding and CA-state push (backend), gap 5's palette "offline" hint and repeated open attempts (not reproduced), gap 8, 12 to 14. Pre-existing failures on the base build (same on origin/dev-merge-199): onboarding.spec (isConnected after sign-in), clusters-grid camera/phone-split, clusters toolbar x3 + motion rule, cursor-blink first test, two predictive specs.

UI gap fixes, branch `ui-gap-fixes` (head 38e008ef, base origin/dev-merge-199) and mockup branch `mockup-connection-state` (head 6a08c77c, owner approval needed). Not merged. Screenshots are from a production build against the test double (not a real server), 375x667, 393x852 and 1440x900, ink and paper. Before / after: - Gap 4, Mesh empty state off screen at 375: before ![](https://git.kayg.org/attachments/890bf6cc-aeb9-4623-85e3-5a268e0e1f18) after ![](https://git.kayg.org/attachments/27ee7dd8-7755-4a77-a16d-a529219749f5) - Gap 7, sign-in step 4 (primary action y 935 on a 667 screen, now 622): before ![](https://git.kayg.org/attachments/c5e55a65-812f-4ced-8263-7efcf6315cd0) after ![](https://git.kayg.org/attachments/b1c05891-bff7-41d9-ad51-54674397b573) paper phone ![](https://git.kayg.org/attachments/4d169eed-816e-4d5d-9385-424d153a50f9) - Gap 10, window pill: before ![](https://git.kayg.org/attachments/cdbcd23c-ee2d-44ec-8d29-ae1d24d4cfe7) after ![](https://git.kayg.org/attachments/b4452114-c86a-4ea6-b882-ff3e2576d9aa) and ![](https://git.kayg.org/attachments/ce6f7909-ab61-4568-b8f2-4995da0ac3ec). Note: the lock sits on the frame's centre line, so the pill cannot grow past it; the fix hugs the host and drops the session/login when the header is 560 px or less. - Gap 6, closing the last window: ![](https://git.kayg.org/attachments/8e08d57b-757c-46d4-9a7f-d48e57dd30d6) ![](https://git.kayg.org/attachments/9a18f4aa-7c12-4677-840e-fc1a59a4b365) - Gap 9, cold load at 150 ms RTT, 1.3 s after navigation: before (flat) ![](https://git.kayg.org/attachments/d62b2ba7-115c-438f-a75d-dc0e84f8f0e5) after (outline from the HTML) ![](https://git.kayg.org/attachments/a62faa11-45e1-4368-9383-17bbede8cbe7). First paint 1.0 s, first content 2.6 to 3.3 s; no cursor until attached. - Gap 5 (UI half), refused first shell, reason + Try again inside the window, no cursor, no toast: ![](https://git.kayg.org/attachments/fd731d7f-7363-465f-8ec8-4ea6efcb0437) ![](https://git.kayg.org/attachments/8695bb7d-55ea-4db7-b3d3-ef0c80e7bd13) - Gap 3 MOCKUP (`?mock=1&proto=clusters&scene=3&conn=1`, palette "Mockup: connection - ..."): offline with keys kept ![](https://git.kayg.org/attachments/cb228a3e-e03f-48ce-a14a-b1b0e2f7d9cd) reconnecting with keys kept ![](https://git.kayg.org/attachments/f8850a0e-1bf3-4809-b3a9-d40ec6801b5f) phone, paper ![](https://git.kayg.org/attachments/654dd1f3-6590-41b7-b722-0c20c10cb328) tooltip ![](https://git.kayg.org/attachments/75f25100-df48-4fc9-9fc8-5306396430a0) D188 budgets (gzip, before -> after): critical 295,949 -> 296,353 of 307,200; deferred 47,861 -> 48,462 of 51,200; largest on-demand chunk 15,950 -> 15,947 of 20,480. Not done: gap 11's wizard-duplicate hiding and CA-state push (backend), gap 5's palette "offline" hint and repeated open attempts (not reproduced), gap 8, 12 to 14. Pre-existing failures on the base build (same on origin/dev-merge-199): onboarding.spec (isConnected after sign-in), clusters-grid camera/phone-split, clusters toolbar x3 + motion rule, cursor-blink first test, two predictive specs.
Author
Owner

UI gap fixes, branch ui-gap-fixes (head 38e008ef, base origin/dev-merge-199) and mockup branch mockup-connection-state (head 6a08c77c, owner approval needed). Not merged.

Screenshots are from a production build against the test double (not a real server), 375x667, 393x852 and 1440x900, ink and paper. Before / after:

  • Gap 4, Mesh empty state off screen at 375: before after
  • Gap 7, sign-in step 4 (primary action y 935 on a 667 screen, now 622): before after paper phone
  • Gap 10, window pill: before after and . Note: the lock sits on the frame's centre line, so the pill cannot grow past it; the fix hugs the host and drops the session/login when the header is 560 px or less.
  • Gap 6, closing the last window:
  • Gap 9, cold load at 150 ms RTT, 1.3 s after navigation: before (flat) after (outline from the HTML) . First paint 1.0 s, first content 2.6 to 3.3 s; no cursor until attached.
  • Gap 5 (UI half), refused first shell, reason + Try again inside the window, no cursor, no toast:
  • Gap 3 MOCKUP (?mock=1&proto=clusters&scene=3&conn=1, palette "Mockup: connection - ..."): offline with keys kept reconnecting with keys kept phone, paper tooltip

D188 budgets (gzip, before -> after): critical 295,949 -> 296,353 of 307,200; deferred 47,861 -> 48,462 of 51,200; largest on-demand chunk 15,950 -> 15,947 of 20,480.

Not done: gap 11's wizard-duplicate hiding and CA-state push (backend), gap 5's palette "offline" hint and repeated open attempts (not reproduced), gap 8, 12 to 14. Pre-existing failures on the base build (same on origin/dev-merge-199): onboarding.spec (isConnected after sign-in), clusters-grid camera/phone-split, clusters toolbar x3 + motion rule, cursor-blink first test, two predictive specs.

UI gap fixes, branch `ui-gap-fixes` (head 38e008ef, base origin/dev-merge-199) and mockup branch `mockup-connection-state` (head 6a08c77c, owner approval needed). Not merged. Screenshots are from a production build against the test double (not a real server), 375x667, 393x852 and 1440x900, ink and paper. Before / after: - Gap 4, Mesh empty state off screen at 375: before ![](https://git.kayg.org/attachments/890bf6cc-aeb9-4623-85e3-5a268e0e1f18) after ![](https://git.kayg.org/attachments/27ee7dd8-7755-4a77-a16d-a529219749f5) - Gap 7, sign-in step 4 (primary action y 935 on a 667 screen, now 622): before ![](https://git.kayg.org/attachments/c5e55a65-812f-4ced-8263-7efcf6315cd0) after ![](https://git.kayg.org/attachments/b1c05891-bff7-41d9-ad51-54674397b573) paper phone ![](https://git.kayg.org/attachments/4d169eed-816e-4d5d-9385-424d153a50f9) - Gap 10, window pill: before ![](https://git.kayg.org/attachments/cdbcd23c-ee2d-44ec-8d29-ae1d24d4cfe7) after ![](https://git.kayg.org/attachments/b4452114-c86a-4ea6-b882-ff3e2576d9aa) and ![](https://git.kayg.org/attachments/ce6f7909-ab61-4568-b8f2-4995da0ac3ec). Note: the lock sits on the frame's centre line, so the pill cannot grow past it; the fix hugs the host and drops the session/login when the header is 560 px or less. - Gap 6, closing the last window: ![](https://git.kayg.org/attachments/8e08d57b-757c-46d4-9a7f-d48e57dd30d6) ![](https://git.kayg.org/attachments/9a18f4aa-7c12-4677-840e-fc1a59a4b365) - Gap 9, cold load at 150 ms RTT, 1.3 s after navigation: before (flat) ![](https://git.kayg.org/attachments/d62b2ba7-115c-438f-a75d-dc0e84f8f0e5) after (outline from the HTML) ![](https://git.kayg.org/attachments/a62faa11-45e1-4368-9383-17bbede8cbe7). First paint 1.0 s, first content 2.6 to 3.3 s; no cursor until attached. - Gap 5 (UI half), refused first shell, reason + Try again inside the window, no cursor, no toast: ![](https://git.kayg.org/attachments/fd731d7f-7363-465f-8ec8-4ea6efcb0437) ![](https://git.kayg.org/attachments/8695bb7d-55ea-4db7-b3d3-ef0c80e7bd13) - Gap 3 MOCKUP (`?mock=1&proto=clusters&scene=3&conn=1`, palette "Mockup: connection - ..."): offline with keys kept ![](https://git.kayg.org/attachments/cb228a3e-e03f-48ce-a14a-b1b0e2f7d9cd) reconnecting with keys kept ![](https://git.kayg.org/attachments/f8850a0e-1bf3-4809-b3a9-d40ec6801b5f) phone, paper ![](https://git.kayg.org/attachments/654dd1f3-6590-41b7-b722-0c20c10cb328) tooltip ![](https://git.kayg.org/attachments/75f25100-df48-4fc9-9fc8-5306396430a0) D188 budgets (gzip, before -> after): critical 295,949 -> 296,353 of 307,200; deferred 47,861 -> 48,462 of 51,200; largest on-demand chunk 15,950 -> 15,947 of 20,480. Not done: gap 11's wizard-duplicate hiding and CA-state push (backend), gap 5's palette "offline" hint and repeated open attempts (not reproduced), gap 8, 12 to 14. Pre-existing failures on the base build (same on origin/dev-merge-199): onboarding.spec (isConnected after sign-in), clusters-grid camera/phone-split, clusters toolbar x3 + motion rule, cursor-blink first test, two predictive specs.
Author
Owner

Steps pushed: 6356b449 remote CA status plugin (4 new lifecycle cases plus 4 related controls green, remote clippy/fmt); a2637795 server watch adapter (real membership/session removal control green, server clippy/fmt). Browser adapter commit follows. Native idle proof regression red: 16 pool acquisitions for 16 fixed Ping/Pong round trips; candidate green: 0 repeated acquisitions. Native deadline red compiled exact liveness.rs with cached pinned Tokio: timely queued proof failed, dead-route control passed; candidate both pass, including full server module run. Strict TS: 18 cases /68 assertions green. Revocation, runtime disable/re-enable, held-open creation, 16-device recovery and watched expiry pass isolated. Combined socket run stalled at shared test lock; serial direct run initially omitted CARGO_TARGET_DIR and disk fixtures failed (corrected, no waiver). Remaining failures are being investigated. Host disk fell to ~3GB free; removed only this job's 3.3GB debug incremental cache. Static x86 build continuing, no perf candidate claims yet.

Steps pushed: 6356b449 remote CA status plugin (4 new lifecycle cases plus 4 related controls green, remote clippy/fmt); a2637795 server watch adapter (real membership/session removal control green, server clippy/fmt). Browser adapter commit follows. Native idle proof regression red: 16 pool acquisitions for 16 fixed Ping/Pong round trips; candidate green: 0 repeated acquisitions. Native deadline red compiled exact liveness.rs with cached pinned Tokio: timely queued proof failed, dead-route control passed; candidate both pass, including full server module run. Strict TS: 18 cases /68 assertions green. Revocation, runtime disable/re-enable, held-open creation, 16-device recovery and watched expiry pass isolated. Combined socket run stalled at shared test lock; serial direct run initially omitted CARGO_TARGET_DIR and disk fixtures failed (corrected, no waiver). Remaining failures are being investigated. Host disk fell to ~3GB free; removed only this job's 3.3GB debug incremental cache. Static x86 build continuing, no perf candidate claims yet.
Author
Owner

Pushed through a7c71cfa: 16dcec48 browser CA snapshot cache; e27c6857 native RTT variation/timely proof handling; 0130d927 browser deadline/stalled-handshake fixes; a7c71cfa fixed-proof authority cache. New native regression: 16 repeated SQLite acquisitions before -> 0 after; terminal/action authorization unchanged. Eleven transport cases, five CA cases and two open-intent cases pass; strict TS passes. Production D188 Brotli: critical246584/256000B, deferred42748/45056B, largest on-demand14185/18432B. Shipping x86 musl candidate built and copied to /root/infraternal-bench/client-resilience/infraternal-candidate; VM run queued under flock -w3600, own scope and private network/PID namespace. No new candidate performance claim yet. Local iterate first stopped at loaded-host latency proxy timing; restarted functional iterate with documented INFRATERNAL_TEST_RTT=0. Detached origin/dev baseline97366a3b is compiling to compare auth socket failures in the same load window. Static-size caps and D265/D267 budgets unchanged. Harness/docs still uncommitted; final full fast, VM receipts and screenshots remain before finish. No deploy or issue closure.

Pushed through a7c71cfa: 16dcec48 browser CA snapshot cache; e27c6857 native RTT variation/timely proof handling; 0130d927 browser deadline/stalled-handshake fixes; a7c71cfa fixed-proof authority cache. New native regression: 16 repeated SQLite acquisitions before -> 0 after; terminal/action authorization unchanged. Eleven transport cases, five CA cases and two open-intent cases pass; strict TS passes. Production D188 Brotli: critical246584/256000B, deferred42748/45056B, largest on-demand14185/18432B. Shipping x86 musl candidate built and copied to /root/infraternal-bench/client-resilience/infraternal-candidate; VM run queued under flock -w3600, own scope and private network/PID namespace. No new candidate performance claim yet. Local iterate first stopped at loaded-host latency proxy timing; restarted functional iterate with documented INFRATERNAL_TEST_RTT=0. Detached origin/dev baseline97366a3b is compiling to compare auth socket failures in the same load window. Static-size caps and D265/D267 budgets unchanged. Harness/docs still uncommitted; final full fast, VM receipts and screenshots remain before finish. No deploy or issue closure.
Author
Owner

Pushed contract documentation 2f5ef7ba. Current strict TS and 12 selected transport/CA/open-intent cases (48 assertions) pass; raw client-final.log. VM measurements remain queued behind shared lock. Verification correction: detached dev and candidate builds shared a Cargo target; the dev test executable was reused after the candidate no-run command. Later direct controls using that path are baseline results, not candidate evidence. Preserved baseline executable separately and forced current source recompilation; verifying presence of new idle_proofs/liveness tests before running it. Baseline full socket receipt: 32 passed, 2 failed, 2 ignored (fresh_delete and browser_input_overload unexpected socket closes); no candidate waiver claimed. Final gate remains pending.

Pushed contract documentation 2f5ef7ba. Current strict TS and 12 selected transport/CA/open-intent cases (48 assertions) pass; raw client-final.log. VM measurements remain queued behind shared lock. Verification correction: detached dev and candidate builds shared a Cargo target; the dev test executable was reused after the candidate no-run command. Later direct controls using that path are baseline results, not candidate evidence. Preserved baseline executable separately and forced current source recompilation; verifying presence of new idle_proofs/liveness tests before running it. Baseline full socket receipt: 32 passed, 2 failed, 2 ignored (fresh_delete and browser_input_overload unexpected socket closes); no candidate waiver claimed. Final gate remains pending.
Author
Owner

Functional receipts (no build-host performance claim): fixed proof SQL acquisitions 16 -> 0; native deadline positive/negative controls pass; CA plugin 4 new + 4 related controls pass; real membership/session-removal source control passes; latest selected browser units 12 pass /48 assertions. D188 critical/deferred/largest-on-demand Brotli 246584/42748/14185 bytes remain below 256000/45056/18432.

idle-proofs-read-red.log
idle-proofs-green.log
liveness-full-green.log
ca-plugin-tests.log
ca-source-tests.log
client-final.log
transfer-final.log

Functional receipts (no build-host performance claim): fixed proof SQL acquisitions 16 -> 0; native deadline positive/negative controls pass; CA plugin 4 new + 4 related controls pass; real membership/session-removal source control passes; latest selected browser units 12 pass /48 assertions. D188 critical/deferred/largest-on-demand Brotli 246584/42748/14185 bytes remain below 256000/45056/18432. [idle-proofs-read-red.log](https://git.kayg.org/attachments/99c083a7-ae33-4d85-af61-1ac3bfbdf0f5) [idle-proofs-green.log](https://git.kayg.org/attachments/ce73d1eb-7965-4c3e-b137-e3d5219a496c) [liveness-full-green.log](https://git.kayg.org/attachments/2ce7ef75-3f41-4117-818f-4ac64fdce77d) [ca-plugin-tests.log](https://git.kayg.org/attachments/2a6dee78-8c9b-476a-87bd-b783b05dda0f) [ca-source-tests.log](https://git.kayg.org/attachments/c838f728-d3af-4f98-b8e8-fdf7e8a27fe3) [client-final.log](https://git.kayg.org/attachments/d86592c0-d5d6-4c39-8b3d-4150d8a1cd4f) [transfer-final.log](https://git.kayg.org/attachments/ff08cf2a-10d6-416e-90a0-c07e4d3a6510)
Author
Owner

Measurement queue: perf VM lock is held by flock PID597982 (elapsed1333s at last check); candidate0ms,150ms and capped-server-stress runs are waiting with flock -w3600. VM load then0.13/1.47/2.83; no candidate measurement running and no lock bypass or other-job process intervention. Completion needs the current lock owner to release it; local candidate recompilation/functional gates continue.

Measurement queue: perf VM lock is held by flock PID597982 (elapsed1333s at last check); candidate0ms,150ms and capped-server-stress runs are waiting with flock -w3600. VM load then0.13/1.47/2.83; no candidate measurement running and no lock bypass or other-job process intervention. Completion needs the current lock owner to release it; local candidate recompilation/functional gates continue.
Author
Owner

Step pushed50869c18: keep definitive open refusal delivery after route close so the window can offer explicit retry. New unit red:0 notifications instead of1; green:3 open-intent cases /4 assertions, strict TS pass. Transport failures remain retryable. The added production-browser reconnect-count case exposed a missing refusal surface; rerunning it after the delivery guard change, without yet attributing that browser failure to this unit race.

open-disconnected-red.log
open-disconnected-green.log

Step pushed50869c18: keep definitive open refusal delivery after route close so the window can offer explicit retry. New unit red:0 notifications instead of1; green:3 open-intent cases /4 assertions, strict TS pass. Transport failures remain retryable. The added production-browser reconnect-count case exposed a missing refusal surface; rerunning it after the delivery guard change, without yet attributing that browser failure to this unit race. [open-disconnected-red.log](https://git.kayg.org/attachments/8af5cefc-f313-4eb0-83c5-f416cd60c253) [open-disconnected-green.log](https://git.kayg.org/attachments/3c50c95b-8730-4ea5-a2cf-10f876c68518)
Author
Owner

Pushedd0c918fe: built-browser test-double regression passes:1 refused click,3 forced welcomes,1 open call; explicit retry yields exactly2 total calls and a live window. Fresh production profile (preview off) D188 Brotli critical246505/256000B, deferred42785/45056B, largest on-demand14194/18432B. Iterate fmt/nativefmt/compile-out/clippy/deny pass; workspace test stopped in two infraternal-agent timing tests (healthy_mesh_probes_do_not_inherit_the_previous_paths_rtt, tcp_proxy_preserves_spacing_between_packets_already_in_flight). Serial retry stopped earlier at loaded-host proxy self-test; no waiver claimed. Weighted serial iterate now running; actual new server binary contains idle_proofs and timely_queued regressions and its socket suite is running.

Perf dependency for orchestrator: lock holder PID597982 has held the perf lock3196s (~53min), VM load0.12/0.28/0.82 at last check. Current production0/150ms, capped-server-stress and offline-open-count runs await flock -w3600. Completion needs that owner to release the shared lock. No other-job processes touched or lock bypass. Old queued runs were cancelled by their own validated flock PIDs while replacing the preview test bundle with production; no candidate numbers are claimed from them.

Pushedd0c918fe: built-browser test-double regression passes:1 refused click,3 forced welcomes,1 open call; explicit retry yields exactly2 total calls and a live window. Fresh production profile (preview off) D188 Brotli critical246505/256000B, deferred42785/45056B, largest on-demand14194/18432B. Iterate fmt/nativefmt/compile-out/clippy/deny pass; workspace test stopped in two infraternal-agent timing tests (healthy_mesh_probes_do_not_inherit_the_previous_paths_rtt, tcp_proxy_preserves_spacing_between_packets_already_in_flight). Serial retry stopped earlier at loaded-host proxy self-test; no waiver claimed. Weighted serial iterate now running; actual new server binary contains idle_proofs and timely_queued regressions and its socket suite is running. Perf dependency for orchestrator: lock holder PID597982 has held the perf lock3196s (~53min), VM load0.12/0.28/0.82 at last check. Current production0/150ms, capped-server-stress and offline-open-count runs await flock -w3600. Completion needs that owner to release the shared lock. No other-job processes touched or lock bypass. Old queued runs were cancelled by their own validated flock PIDs while replacing the preview test bundle with production; no candidate numbers are claimed from them.
Author
Owner

Finding before follow-up: MuxConnection only opens/retries/wakes for terminal streams. A CA watcher registered before the first terminal waits forever; after the last terminal closes its topic can lose reconnects. New unit coverage across online/pageshow/visible for subscription and welcome-listener ownership is red:6 failed (0 sockets instead of1),4 existing terminal/stalled-handshake cases pass. Will let retained control interests own the same primary route, preserve immediate wake, and guard connect against duplicate in-flight sockets. No new socket per feature, frame tag, dependency or decision change. ad1036e4 is pushed (d9d3f6e0 attachment counter, f0a400dc real-browser/CA test, ad1036e4 isolated VM runner); default real TLS/PTY test passes with one attached-load smoke, cross-tab unlock delivered,0 HTTP status reads. Current native full fast continues; remaining browser follow-up needs head verification.

Finding before follow-up: MuxConnection only opens/retries/wakes for terminal streams. A CA watcher registered before the first terminal waits forever; after the last terminal closes its topic can lose reconnects. New unit coverage across online/pageshow/visible for subscription and welcome-listener ownership is red:6 failed (0 sockets instead of1),4 existing terminal/stalled-handshake cases pass. Will let retained control interests own the same primary route, preserve immediate wake, and guard connect against duplicate in-flight sockets. No new socket per feature, frame tag, dependency or decision change. ad1036e4 is pushed (d9d3f6e0 attachment counter, f0a400dc real-browser/CA test, ad1036e4 isolated VM runner); default real TLS/PTY test passes with one attached-load smoke, cross-tab unlock delivered,0 HTTP status reads. Current native full fast continues; remaining browser follow-up needs head verification.
Author
Owner

Resuming client-resilience at b4e96e98ea; original base 49e809d910. Read issue body and all 15 comments; no parent referenced. Preserve two uncommitted control-ownership files (six failing cases already recorded). Previous fast stopped on disk-full static link; 156GB free now. Rebuild missing outputs, validate/commit control ownership, run locked perf-VM receipts and iterate/full fast. Push only client-resilience; no deploy.

Resuming client-resilience at b4e96e98ea676c57af90d13d4c0c10de0ab0d58a; original base 49e809d910ddaf27e99135117eff1a6de2723d21. Read issue body and all 15 comments; no parent referenced. Preserve two uncommitted control-ownership files (six failing cases already recorded). Previous fast stopped on disk-full static link; 156GB free now. Rebuild missing outputs, validate/commit control ownership, run locked perf-VM receipts and iterate/full fast. Push only client-resilience; no deploy.
Author
Owner

Step pushed 0befdb24: retained subscriptions/welcome listeners start, retry and wake the existing mux route without terminal streams; stale reconnect callbacks cannot duplicate a new socket. Previous six red controls now green; selected wake/deadline/CA/refusal units: 18 passed, 165 assertions; strict TS passes. Native iterate rebuilding deleted debug outputs. Locked VM receipts will queue behind the existing soak owner (PID597982, elapsed101min at access check); no lock bypass or other-job intervention. Final full fast and measurements still pending.

Step pushed 0befdb24: retained subscriptions/welcome listeners start, retry and wake the existing mux route without terminal streams; stale reconnect callbacks cannot duplicate a new socket. Previous six red controls now green; selected wake/deadline/CA/refusal units: 18 passed, 165 assertions; strict TS passes. Native iterate rebuilding deleted debug outputs. Locked VM receipts will queue behind the existing soak owner (PID597982, elapsed101min at access check); no lock bypass or other-job intervention. Final full fast and measurements still pending.
Author
Owner

Head 0befdb24 functional checks: 25 browser units /186 assertions passed; production real TLS/browser/PTY lifecycle test passed, second tab received CA unlock,0 HTTP CA-status reads. No build-host timing claim. D188 Brotli critical246540/256000B,deferred42754/45056B,largest on-demand14182/18432B. Author review: shared route/components reused, no new engine/dependency/frame; CA snapshots retain live membership and bounded authorized replies; proof-only cache preserves revocation/expiry and leaves action/input authority intact; refusal latch resets only on explicit new-shell. Locked VM0/150ms/server-stress runs queued. Native deleted debug outputs rebuilding; final fast pending.

resume-client-all.log
resume-real-functional.log
resume-transfer.log

Head 0befdb24 functional checks: 25 browser units /186 assertions passed; production real TLS/browser/PTY lifecycle test passed, second tab received CA unlock,0 HTTP CA-status reads. No build-host timing claim. D188 Brotli critical246540/256000B,deferred42754/45056B,largest on-demand14182/18432B. Author review: shared route/components reused, no new engine/dependency/frame; CA snapshots retain live membership and bounded authorized replies; proof-only cache preserves revocation/expiry and leaves action/input authority intact; refusal latch resets only on explicit new-shell. Locked VM0/150ms/server-stress runs queued. Native deleted debug outputs rebuilding; final fast pending. [resume-client-all.log](https://git.kayg.org/attachments/d6d8e3dc-06c9-442b-a0f0-3a2d0d624761) [resume-real-functional.log](https://git.kayg.org/attachments/c802ab56-1a7d-4d55-bcc2-94c654576e65) [resume-transfer.log](https://git.kayg.org/attachments/c25b2f89-8e50-4bf2-985b-f982f370e93f)
Author
Owner

Head0befdb24 iterate: fmt,VTfmt,compile-out,clippy,cargo-deny pass; native tests failed component_down_proves_tcp_fallback_when_enrolled_udp_is_unavailable (Disconnected vs Fallback,96 passed/1 failed/14 ignored). Isolated serial rerun compiling; no waiver. Browser refusal regression preserved1 call across3 forced reconnects, but explicit Try again produced3 total calls instead of2. Reproducing with call diagnostics before changing code. Full fast started with serial native tests; not yet a pass. Perf lock owner597982 elapsed109min; VM load0.00/0.12/0.60; all own runs still queued under flock-w3600.

Head0befdb24 iterate: fmt,VTfmt,compile-out,clippy,cargo-deny pass; native tests failed component_down_proves_tcp_fallback_when_enrolled_udp_is_unavailable (Disconnected vs Fallback,96 passed/1 failed/14 ignored). Isolated serial rerun compiling; no waiver. Browser refusal regression preserved1 call across3 forced reconnects, but explicit Try again produced3 total calls instead of2. Reproducing with call diagnostics before changing code. Full fast started with serial native tests; not yet a pass. Perf lock owner597982 elapsed109min; VM load0.00/0.12/0.60; all own runs still queued under flock-w3600.
Author
Owner

Verification correction: first mock runs set TRACER_DIST but mock-server.ts serves fixed apps/tracer/dist, so those runs used the previous bundle (real/server.ts does honor TRACER_DIST). Fresh-head runs now rebuild default dist. At0ms the retry stayed connecting (not an observed3-call assertion); at150ms welcomes reached12 then failed to advance after a forced drop. Test double still has the old last-RTT+50ms liveness model; will use the locked-VM refusal run before attributing this to product idempotency. Saved-layout fixture race is independently reproduced (null canvas document), pending atomic test fix. Rebuilt native candidate matches VM artifact SHA256 ddff15d9ac005d4c3792ca9c633b849ba287431831307da435396f0f53fc64e7. Direct exact native fallback control passed1 test; initial cargo filter without remote feature ran0 and is not evidence. Fast failed vt_credit; separate detached dev97366a3b baseline is rebuilding for required comparison. Static candidate22347536B vs unchanged22204304B ceiling; VM baseline artifact22318448B (prior-build provenance, not yet a waiver). No ceilings changed.

Verification correction: first mock runs set TRACER_DIST but mock-server.ts serves fixed apps/tracer/dist, so those runs used the previous bundle (real/server.ts does honor TRACER_DIST). Fresh-head runs now rebuild default dist. At0ms the retry stayed connecting (not an observed3-call assertion); at150ms welcomes reached12 then failed to advance after a forced drop. Test double still has the old last-RTT+50ms liveness model; will use the locked-VM refusal run before attributing this to product idempotency. Saved-layout fixture race is independently reproduced (null canvas document), pending atomic test fix. Rebuilt native candidate matches VM artifact SHA256 ddff15d9ac005d4c3792ca9c633b849ba287431831307da435396f0f53fc64e7. Direct exact native fallback control passed1 test; initial cargo filter without remote feature ran0 and is not evidence. Fast failed vt_credit; separate detached dev97366a3b baseline is rebuilding for required comparison. Static candidate22347536B vs unchanged22204304B ceiling; VM baseline artifact22318448B (prior-build provenance, not yet a waiver). No ceilings changed.
Author
Owner

Orchestrator, 14:23 IST — new gap from the owner (screenshot): the sign-in screen says "Could not reach the server / The request could not be completed" when the server DID answer, with HTTP 404 (/remote/hosts/actions, /remote/ca/status, seen on the preview without ?mock=1). The message must follow what happened: unreachable (network error, timeout) vs the server answered with an error (status code: "The server answered but could not do this (404)") vs a version mismatch (old server, new web app). Severity P2; UI + client error mapping.

Orchestrator, 14:23 IST — new gap from the owner (screenshot): the sign-in screen says "Could not reach the server / The request could not be completed" when the server DID answer, with HTTP 404 (`/remote/hosts/actions`, `/remote/ca/status`, seen on the preview without `?mock=1`). The message must follow what happened: unreachable (network error, timeout) vs the server answered with an error (status code: "The server answered but could not do this (404)") vs a version mismatch (old server, new web app). Severity P2; UI + client error mapping.
Author
Owner

Locked perf-VM candidate ddff15d9 real TLS/PTY failed gap8:0ms median PingRTT1.572ms,p957.428ms;5 extra routes/30s (2->7),load9.10/3.48/2.06 before and6.70/3.56/2.15 after.128-session setup closed1005 at2/28.150ms median152.072ms,p95160.593ms;2 extra routes/30s (1->3),load6.70/3.56/2.15 before; scale open refused unavailable. No128-sessionCPU/stress/resume claims from these failed setups. Candidate and detached dev97366a3b vt_credit now both pass isolated (1 actual test each); initial fast timeout has no matching-baseline waiver. Investigating estimator memory: mean1/8 and deviation1/4 applied every25ms forget observed jitter within hundreds of milliseconds. Will retain recent measured RTT variation, keep+50ms scheduling and stale/missing proof fences, add a failing regression before change. Native sizes remainover unchanged ceilings; full gatefailed,not done.resume-perf-zero.log
resume-perf-150.log
resume-fast.log

Locked perf-VM candidate ddff15d9 real TLS/PTY failed gap8:0ms median PingRTT1.572ms,p957.428ms;5 extra routes/30s (2->7),load9.10/3.48/2.06 before and6.70/3.56/2.15 after.128-session setup closed1005 at2/28.150ms median152.072ms,p95160.593ms;2 extra routes/30s (1->3),load6.70/3.56/2.15 before; scale open refused unavailable. No128-sessionCPU/stress/resume claims from these failed setups. Candidate and detached dev97366a3b vt_credit now both pass isolated (1 actual test each); initial fast timeout has no matching-baseline waiver. Investigating estimator memory: mean1/8 and deviation1/4 applied every25ms forget observed jitter within hundreds of milliseconds. Will retain recent measured RTT variation, keep+50ms scheduling and stale/missing proof fences, add a failing regression before change. Native sizes remainover unchanged ceilings; full gatefailed,not done.[resume-perf-zero.log](https://git.kayg.org/attachments/188791b3-a920-473e-9046-773d2d9fa890) [resume-perf-150.log](https://git.kayg.org/attachments/949534f2-bc72-425e-9e04-8e4959d839cc) [resume-fast.log](https://git.kayg.org/attachments/8b6903fb-3369-46f1-b224-83c1618cf3c8)
Author
Owner

Steps pushed419c4358 browser and2b35d230 native: preserve recent measured RTT envelope by elapsed-time decay over2s, alongside smoothing, rather than discarding jitter per25ms reply. No new deadline floor or missed-probe grace;50ms allowance and missing/stale/future-proof guards unchanged. Browser red then green25selected cases/187assertions,strictTS. Native stronger30-reply regression red(2pass/1fail),green3cases with actual pinnedTokio;fmt and server all-target clippy remote/mesh/ssh pass. Initial native20-reply variant passed and is not red evidence. Serialiterate completed PASS;fullfast still needs new head. Prior socket controls35pass/2ignored. VMscale failures prevented stressCPU and wake receipts; adding wake-only diagnostic to keep event/CA budgets independently measurable without claiming128sessions. Rebuilt candidate is linking; all VM runsfinished,lock released. D243 caps untouched.

Steps pushed419c4358 browser and2b35d230 native: preserve recent measured RTT envelope by elapsed-time decay over2s, alongside smoothing, rather than discarding jitter per25ms reply. No new deadline floor or missed-probe grace;50ms allowance and missing/stale/future-proof guards unchanged. Browser red then green25selected cases/187assertions,strictTS. Native stronger30-reply regression red(2pass/1fail),green3cases with actual pinnedTokio;fmt and server all-target clippy remote/mesh/ssh pass. Initial native20-reply variant passed and is not red evidence. Serialiterate completed PASS;fullfast still needs new head. Prior socket controls35pass/2ignored. VMscale failures prevented stressCPU and wake receipts; adding wake-only diagnostic to keep event/CA budgets independently measurable without claiming128sessions. Rebuilt candidate is linking; all VM runsfinished,lock released. D243 caps untouched.
Author
Owner

Updated native/browser envelope VM artifact d813bbc5:0ms idle0 extra routes/30s (1->1),RTTmedian0.965ms,p953.826ms,scale open refused unavailable at18/28.150ms idle1 extra route/30s,RTTmedian151.912ms,p95158.642ms,scale closed1005 before first open. Stress profile never reached stress:2 idle extras,scale unavailable15/28. No128-sessionCPU claim. Browser-envelope/old-native wake diagnostic:reusable events0.8/8.0/7.1ms at150msRTT (budget200); network-change online5391.4ms, frozen20s pageshow4015.7ms, visible1053.4ms (budget650),all fail. CA peer unlock delivered,0 HTTPstatusreads; screenshots saved for attachment. New-native wake queued.

Step pushedbc2ec76a: a delayed older Pong wrongly retired an unexpired route. Red older-proof regression then green26clientcases/189assertions,strictTS. Ignore old response while the last accepted lease remains valid; do not renew it or extend deadlines. New bundle being shipped.477c4bb4 fixture save prerequisite also pushed (restored-window test/TS pass).

Latest fast: native daemon oracle stalled on replay; isolated exact test then passed all24 restart positions. No unsupported waiver. Static ceilings stillfail22348304B(+144000)x86 and19775704B(+136960)ARM. Final head fast remains required; notdone.

Updated native/browser envelope VM artifact d813bbc5:0ms idle0 extra routes/30s (1->1),RTTmedian0.965ms,p953.826ms,scale open refused unavailable at18/28.150ms idle1 extra route/30s,RTTmedian151.912ms,p95158.642ms,scale closed1005 before first open. Stress profile never reached stress:2 idle extras,scale unavailable15/28. No128-sessionCPU claim. Browser-envelope/old-native wake diagnostic:reusable events0.8/8.0/7.1ms at150msRTT (budget200); network-change online5391.4ms, frozen20s pageshow4015.7ms, visible1053.4ms (budget650),all fail. CA peer unlock delivered,0 HTTPstatusreads; screenshots saved for attachment. New-native wake queued. Step pushedbc2ec76a: a delayed older Pong wrongly retired an unexpired route. Red older-proof regression then green26clientcases/189assertions,strictTS. Ignore old response while the last accepted lease remains valid; do not renew it or extend deadlines. New bundle being shipped.477c4bb4 fixture save prerequisite also pushed (restored-window test/TS pass). Latest fast: native daemon oracle stalled on replay; isolated exact test then passed all24 restart positions. No unsupported waiver. Static ceilings stillfail22348304B(+144000)x86 and19775704B(+136960)ARM. Final head fast remains required; notdone.
Author
Owner

Finding: embedded.rs run_actor uses unbiased select between ticks.tick (expiry before read) and read_incoming. liveness.rs timely-queued proof fix only helps if Pong wins that selection. This can discard an already-ready current proof under executor load. Candidate approach: combine read/tick readiness, poll already-queued frames before an expired tick, cap that check at32 frames so ordinary data cannot indefinitely suppress dead detection. No network wait, extra missed-probe grace, new engine/library/wire tag, or budget change. Add real Unix/wire ordering and missing-proof controls before implementation. Current new-native wake stillfails:online4201.4ms,frozenpageshow5036.3ms,visible3632.1ms at150msRTT; CA push/zeroHTTP reads pass. This is not completion.

Finding: embedded.rs run_actor uses unbiased select between ticks.tick (expiry before read) and read_incoming. liveness.rs timely-queued proof fix only helps if Pong wins that selection. This can discard an already-ready current proof under executor load. Candidate approach: combine read/tick readiness, poll already-queued frames before an expired tick, cap that check at32 frames so ordinary data cannot indefinitely suppress dead detection. No network wait, extra missed-probe grace, new engine/library/wire tag, or budget change. Add real Unix/wire ordering and missing-proof controls before implementation. Current new-native wake stillfails:online4201.4ms,frozenpageshow5036.3ms,visible3632.1ms at150msRTT; CA push/zeroHTTP reads pass. This is not completion.
Author
Owner

Pushed8ab3dbc1: embedded actor now checks already-ready native input before expired ticks, bounded32frames,no network wait/deadlineextension. Old selection regressed both controls; new2pass plus49embeddedcontrols/3ignored pass,fmt/clippy. Native shipping build linking.

Pushed3a5f6f0a: explicit offline navigator state prevents handshake/retry storms while retaining stream/subscription/welcome owners; lifecycle wake creates shared route once reachable. Red3owner cases (1socket vs0); green29clientcases/207assertions,strictTS. VMframe trace had ~4s before next server Hello, then prompt Hello/Resume/Attach and Welcome. Browser engine throttles repeated failures before handshakes: https://chromium.googlesource.com/chromium/src/+/b0627068678d2062ecf4948e391e3901d0cd3db8/services/network/websocket_throttler.cc . Fast recovery used5–10ms attempts for5s, making that throttle consistent with the observed delay; remeasureguard on VM rather than claiming unit socket count proves D267. New bundle ready.

Uncommitted harness diagnostics (wake-only mode, safe HTTP status refusal) remain under validation; no reporteddone/deploy/cap changes.

Pushed8ab3dbc1: embedded actor now checks already-ready native input before expired ticks, bounded32frames,no network wait/deadlineextension. Old selection regressed both controls; new2pass plus49embeddedcontrols/3ignored pass,fmt/clippy. Native shipping build linking. Pushed3a5f6f0a: explicit offline navigator state prevents handshake/retry storms while retaining stream/subscription/welcome owners; lifecycle wake creates shared route once reachable. Red3owner cases (1socket vs0); green29clientcases/207assertions,strictTS. VMframe trace had ~4s before next server Hello, then prompt Hello/Resume/Attach and Welcome. Browser engine throttles repeated failures before handshakes: https://chromium.googlesource.com/chromium/src/+/b0627068678d2062ecf4948e391e3901d0cd3db8/services/network/websocket_throttler.cc . Fast recovery used5–10ms attempts for5s, making that throttle consistent with the observed delay; remeasureguard on VM rather than claiming unit socket count proves D267. New bundle ready. Uncommitted harness diagnostics (wake-only mode, safe HTTP status refusal) remain under validation; no reporteddone/deploy/cap changes.
Author
Owner

Latest d583f519 native/3a5f6f0a browser150ms run reached128attached sessions,0 browser false reconnects/30s,observedRTTmedian152.380ms/p95187.931ms. Idle server253ticks/10.035s at100Hz=25.211%core; serverRSS19017728B(1session)->23117824B(128),32284.2B/additional,projected200sessions25442288B. This fails D81; no near-zero claim. Per-session websocket.rs tick expiry competes with queued TerminalOutput::Pong just as embedded actor did. Counting stream reattachments to determine whether false rebinds drive the CPU cost; reuse bounded ready-input selection there, preserving all authority/data handling. Reusable events0.9/0.3/3.2ms,network-online942.9ms>650budget.0ms run2extra browser routes andscale unavailable25/28; noCPUclaimfrom that run. Adding navigator-state/public event-kind diagnostics (no bodies) to distinguish native browser delay from reattach round trips. IteratePASS at3a5f6f0a; finalfastpendingnewhead; D243capsunchanged.

Latest d583f519 native/3a5f6f0a browser150ms run reached128attached sessions,0 browser false reconnects/30s,observedRTTmedian152.380ms/p95187.931ms. Idle server253ticks/10.035s at100Hz=25.211%core; serverRSS19017728B(1session)->23117824B(128),32284.2B/additional,projected200sessions25442288B. This fails D81; no near-zero claim. Per-session websocket.rs tick expiry competes with queued TerminalOutput::Pong just as embedded actor did. Counting stream reattachments to determine whether false rebinds drive the CPU cost; reuse bounded ready-input selection there, preserving all authority/data handling. Reusable events0.9/0.3/3.2ms,network-online942.9ms>650budget.0ms run2extra browser routes andscale unavailable25/28; noCPUclaimfrom that run. Adding navigator-state/public event-kind diagnostics (no bodies) to distinguish native browser delay from reattach round trips. IteratePASS at3a5f6f0a; finalfastpendingnewhead; D243capsunchanged.
Author
Owner

Head b4d50e155d pushed, no deploy. NOT DONE / not a green-budget handoff. Atomic resume commits retain control-route owners, preserve measured jitter by elapsed time, ignore delayed replies while current proof remains valid, inspect queued native proofs before expired ticks, and avoid explicit-offline handshake storms; shared helper/fixture diagnostics are committed.29selectedclientcontrols/207assertions,49embeddedcontrols/3ignored,3leasecontrols,2orderingcontrols,strictTS/clippy/fmt pass. Iterate passed at3a5f6f0a; headfastretry running.

Perf-VM d583f519 shipping artifact /3a5f6f0a browser:150ms idle0 false browser routes/30s;128survivingattachments,0streamreattachments during10.002s sample,112CPUticks/100Hz=11.198%core (D81 FAIL),serverRSS18931712->23072768B,32606.7B/additional,projected200=25420453B. Prior cold sample25.211%core; not discarded.0ms run2extra routes/30s andfailedscale25/28. Stressflagrunhad0browserreconnects butscale failed3/28 before stress; no valid stressed128sessionnumber.

Wake-only realTLS150ms:reusable0.9/1.8/4.1ms within200budget; explicitnavigatoroffline=true; freshonline1357.6ms,pageshowafter20sfreeze1748.4ms,visible2573.2ms allover650budget. TLS1.3/TCP_NODELAY fixture doesnotfix that. CA peer unlock delivered2tabs,0HTTPstatusreads. Gap5 refusal latch unit/earlier built-browser1intent3welcomes1call controls pass, but latest VMmockrefusal test failed before refusal surface: no final perfVM gap5 pass claim.

D188Brotli critical246766/256000B,deferred42726/45056B,largestondemand14187/18432B PASS. Author review retained parser/secret boundaries,liveCA membership/revocation/expiry,data/actionauthority,andboundedproofchecks; noengine/library/tag/decisionchanges. Raw receipts and production-build screenshots below; emulated viewports,notphysicaliOS/visualsignoff. Remaining work: fresh-link650ms,0msfalseclosures,near-zero128idleCPU,validstressedscaleandfinalbrowserrefusalproof. No budgetloosening or issueclosure.

idle-cost-diagnostic.log
tls-fixed-wake-perf.log
explicit-offline-red.log
explicit-offline-green.log
embedded-proof-red.log
embedded-all-green.log
final-transfer.log
resumed-1440x900.png
resumed-393x852.png
resumed-375x667.png

Head b4d50e155df9c3b80bf6f99a2ba53aee74bcbe06 pushed, no deploy. NOT DONE / not a green-budget handoff. Atomic resume commits retain control-route owners, preserve measured jitter by elapsed time, ignore delayed replies while current proof remains valid, inspect queued native proofs before expired ticks, and avoid explicit-offline handshake storms; shared helper/fixture diagnostics are committed.29selectedclientcontrols/207assertions,49embeddedcontrols/3ignored,3leasecontrols,2orderingcontrols,strictTS/clippy/fmt pass. Iterate passed at3a5f6f0a; headfastretry running. Perf-VM d583f519 shipping artifact /3a5f6f0a browser:150ms idle0 false browser routes/30s;128survivingattachments,0streamreattachments during10.002s sample,112CPUticks/100Hz=11.198%core (D81 FAIL),serverRSS18931712->23072768B,32606.7B/additional,projected200=25420453B. Prior cold sample25.211%core; not discarded.0ms run2extra routes/30s andfailedscale25/28. Stressflagrunhad0browserreconnects butscale failed3/28 before stress; no valid stressed128sessionnumber. Wake-only realTLS150ms:reusable0.9/1.8/4.1ms within200budget; explicitnavigatoroffline=true; freshonline1357.6ms,pageshowafter20sfreeze1748.4ms,visible2573.2ms allover650budget. TLS1.3/TCP_NODELAY fixture doesnotfix that. CA peer unlock delivered2tabs,0HTTPstatusreads. Gap5 refusal latch unit/earlier built-browser1intent3welcomes1call controls pass, but latest VMmockrefusal test failed before refusal surface: no final perfVM gap5 pass claim. D188Brotli critical246766/256000B,deferred42726/45056B,largestondemand14187/18432B PASS. Author review retained parser/secret boundaries,liveCA membership/revocation/expiry,data/actionauthority,andboundedproofchecks; noengine/library/tag/decisionchanges. Raw receipts and production-build screenshots below; emulated viewports,notphysicaliOS/visualsignoff. Remaining work: fresh-link650ms,0msfalseclosures,near-zero128idleCPU,validstressedscaleandfinalbrowserrefusalproof. No budgetloosening or issueclosure. [idle-cost-diagnostic.log](https://git.kayg.org/attachments/d9edf612-613b-4a6c-8602-90da80702b84) [tls-fixed-wake-perf.log](https://git.kayg.org/attachments/2082482d-eb4a-4301-8b50-ae907ac97cf9) [explicit-offline-red.log](https://git.kayg.org/attachments/167b06de-d346-4f16-9fb1-14b8428d511c) [explicit-offline-green.log](https://git.kayg.org/attachments/dcfa5958-071d-43c6-8fd7-8d1c355dcc6c) [embedded-proof-red.log](https://git.kayg.org/attachments/bf52b4e4-082a-4454-ad28-e0548d8b4f42) [embedded-all-green.log](https://git.kayg.org/attachments/040d51cf-873a-415a-97f3-fdf3e0ecbfbf) [final-transfer.log](https://git.kayg.org/attachments/81fcfd60-8735-46e2-9ef1-23b1517e0509) ![resumed-1440x900.png](https://git.kayg.org/attachments/be3cbab2-183b-46bc-b69b-d78c9be33a89) ![resumed-393x852.png](https://git.kayg.org/attachments/a0033ddd-fa4a-490a-bebd-d322ed842cb5) ![resumed-375x667.png](https://git.kayg.org/attachments/e8ddd044-665a-455c-ba1d-635704770bc9)
Author
Owner

Stopping for review at b4d50e155d; remote client-resilience matches, checkout clean, no deploy, issue stays open. TASK INCOMPLETE: fresh-link D267,0msfalseclosure,D81 idleCPU,validstress128sessionandfinalVMrefusalproof remain.

Head scripts/verify fast (INFRATERNAL_TEST_RTT=0,RUST_TEST_THREADS=1,own weighted scope) output, verbatim:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| CLI plugin compile-out    | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+

Static output, verbatim:

PT_INTERP: absent; size: 22354512 bytes; cap: 22204304 bytes; delta: +150208 bytes
PT_INTERP: absent; size: 19777944 bytes; cap: 19638744 bytes; delta: +139200 bytes

No cap changed or unsupported waiver. Earlier head attempt stopped at loaded-host latency proxy; final retry passed all non-size Rust rows. Strict TypeScript passes. Separate full TS gate:194pass/1timingfail (1000node layout,290ms buildhost); locked VM same layout suite8pass/9444assertions,8.70ms layout,load0.53/0.48/0.87. Host failure retained,no waiver/fullTSgreen claim.29selectedclient/207assertions,49embedded/3ignored,3lease,2ordering controls pass. Iterate passed before final diagnostic-only commits.

Final performance status (validVMreceipts alreadyattached):150ms idle0browserextras/30s,128survivingattachments,0streamreattachments,11.198%core over10.002s;RSS18931712->23072768B,32606.7B/additional,projected200=25420453B. D81 FAIL; periodic per-session proof traffic remains,not hidden as a reconnect cost.0msstill2extra browser routes andscale failure25/28. Stress setupfailed3/28 beforestress:no valid stressedscale number. FreshTLS150ms wake1357.6/1748.4/2573.2ms foronline/frozenpageshow/visible vs650budget:FAIL; reusable0.9/1.8/4.1ms vs200:PASS. CApush2tabs/zeroHTTPstatusreads:PASS. Refusal latchunit/earlierbuilt-browser1intent/3welcomes/1call pass; finalVMrefusal surface case notgreen. D188Brotli246766/42726/14187B critical/deferred/largestondemand allwithin256000/45056/18432.

Author checklist: bounded queues/proof scans,missing/stale/future proof controls,liveCA membership/revocation/expiry,data/actionauthority,secret/parser boundaries and runtime feature cancellation retained; no new engine/library/tag or decision change. Screenshots are real production-bundle emulated viewports,notphysicaliOSorindependentvisualsignoff.

Resume priorities: profile/coalesce periodic per-session proof work without dropping liveness; explain six-RTT/fresh replaydelay and occasional terminal.reconnecting event; remeasure0/150/stressed128 andrefusal; satisfy D243 through owner/integration,sizecapsunchanged. Final source-equivalent shipping artifact kept at /root/infraternal-bench/client-resilience/infraternal-head SHA2568a61d471c25f4f5c9ad1e63e1fc2269cbe1c31c81b575a119bba65d4b727016a; it is not a new performance pass. Native measured d583f519artifact remains separately. Job baseline checkout and Cargo targets removed; receipts retained outside checkout. No processes from the measurement runs remain running; other jobs untouched.

head-fast-retry.log
head-fast.log

head-ts-full.log
head-layout-perf.log
head-final-check.log

head-layout-perf.log
head-ts-full.log

Stopping for review at b4d50e155df9c3b80bf6f99a2ba53aee74bcbe06; remote client-resilience matches, checkout clean, no deploy, issue stays open. TASK INCOMPLETE: fresh-link D267,0msfalseclosure,D81 idleCPU,validstress128sessionandfinalVMrefusalproof remain. Head scripts/verify fast (INFRATERNAL_TEST_RTT=0,RUST_TEST_THREADS=1,own weighted scope) output, verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ``` Static output, verbatim: ``` PT_INTERP: absent; size: 22354512 bytes; cap: 22204304 bytes; delta: +150208 bytes PT_INTERP: absent; size: 19777944 bytes; cap: 19638744 bytes; delta: +139200 bytes ``` No cap changed or unsupported waiver. Earlier head attempt stopped at loaded-host latency proxy; final retry passed all non-size Rust rows. Strict TypeScript passes. Separate full TS gate:194pass/1timingfail (1000node layout,290ms buildhost); locked VM same layout suite8pass/9444assertions,8.70ms layout,load0.53/0.48/0.87. Host failure retained,no waiver/fullTSgreen claim.29selectedclient/207assertions,49embedded/3ignored,3lease,2ordering controls pass. Iterate passed before final diagnostic-only commits. Final performance status (validVMreceipts alreadyattached):150ms idle0browserextras/30s,128survivingattachments,0streamreattachments,11.198%core over10.002s;RSS18931712->23072768B,32606.7B/additional,projected200=25420453B. D81 FAIL; periodic per-session proof traffic remains,not hidden as a reconnect cost.0msstill2extra browser routes andscale failure25/28. Stress setupfailed3/28 beforestress:no valid stressedscale number. FreshTLS150ms wake1357.6/1748.4/2573.2ms foronline/frozenpageshow/visible vs650budget:FAIL; reusable0.9/1.8/4.1ms vs200:PASS. CApush2tabs/zeroHTTPstatusreads:PASS. Refusal latchunit/earlierbuilt-browser1intent/3welcomes/1call pass; finalVMrefusal surface case notgreen. D188Brotli246766/42726/14187B critical/deferred/largestondemand allwithin256000/45056/18432. Author checklist: bounded queues/proof scans,missing/stale/future proof controls,liveCA membership/revocation/expiry,data/actionauthority,secret/parser boundaries and runtime feature cancellation retained; no new engine/library/tag or decision change. Screenshots are real production-bundle emulated viewports,notphysicaliOSorindependentvisualsignoff. Resume priorities: profile/coalesce periodic per-session proof work without dropping liveness; explain six-RTT/fresh replaydelay and occasional terminal.reconnecting event; remeasure0/150/stressed128 andrefusal; satisfy D243 through owner/integration,sizecapsunchanged. Final source-equivalent shipping artifact kept at /root/infraternal-bench/client-resilience/infraternal-head SHA2568a61d471c25f4f5c9ad1e63e1fc2269cbe1c31c81b575a119bba65d4b727016a; it is not a new performance pass. Native measured d583f519artifact remains separately. Job baseline checkout and Cargo targets removed; receipts retained outside checkout. No processes from the measurement runs remain running; other jobs untouched. [head-fast-retry.log](https://git.kayg.org/attachments/e114777f-7cf2-4a60-883d-ffd6880776a6) [head-fast.log](https://git.kayg.org/attachments/234f5cdd-c054-4d4f-ae0c-c4c6222c7626) [head-ts-full.log](https://git.kayg.org/attachments/a423e668-6688-4c9d-b232-da87dae084cf) [head-layout-perf.log](https://git.kayg.org/attachments/cbfff86f-057e-4466-a6e4-4eb2a2b7f79c) [head-final-check.log](https://git.kayg.org/attachments/cb15d4f5-c12c-4457-948f-9e8d77658818) [head-layout-perf.log](https://git.kayg.org/attachments/d868d1d6-90d3-4501-bd23-f302f0706532) [head-ts-full.log](https://git.kayg.org/attachments/5bedbd5b-ade5-4e6f-b97e-ce812076a50a)
Author
Owner

Continuation r2 starts on client-resilience at b4d50e155d; original base 49e809d910 (dev-merge-199). Clean checkout; read #212 body/all 29 comments, no parent referenced. Scope: stage fresh TLS recovery at 150ms on locked perf VM, remove non-RTT waits, compare static size to original base with <=16KB delta. Idle CPU delegated by owner to idle-cpu-199; merge its ready fix and remeasure, no independent idle-CPU changes. Push only client-resilience, no deploy.

Continuation r2 starts on client-resilience at b4d50e155df9c3b80bf6f99a2ba53aee74bcbe06; original base 49e809d910ddaf27e99135117eff1a6de2723d21 (dev-merge-199). Clean checkout; read #212 body/all 29 comments, no parent referenced. Scope: stage fresh TLS recovery at 150ms on locked perf VM, remove non-RTT waits, compare static size to original base with <=16KB delta. Idle CPU delegated by owner to idle-cpu-199; merge its ready fix and remeasure, no independent idle-CPU changes. Push only client-resilience, no deploy.
Author
Owner

Pushed e3c72d2e: delayed local browser probe scheduling no longer closes a fully answered route; unanswered probes still expire at the existing deadline. Independent #199 regression reproduced here: 0 pass/2 fail before; wake/deadline/scheduling suite 17 pass/171 assertions afterwards. Strict TypeScript passes. D265/D267, no deadline widening.

Measurement correction: r2-stages/r2-stages-new/r2-stages-tls used the retained production-current bundle, which lacks the already-committed navigator.onLine offline guard (only production-offline carries it). Their socket-open delays are diagnostic older-bundle numbers, not current branch measurements. Fresh e3c72d2e bundle rebuilt/copied as r2-production; locked real TLS 150ms rerun queued. Head native rebuild/iterate in progress. #199 idle branch latest comment says implementation validation still pending; not merged yet.

Pushed e3c72d2e: delayed local browser probe scheduling no longer closes a fully answered route; unanswered probes still expire at the existing deadline. Independent #199 regression reproduced here: 0 pass/2 fail before; wake/deadline/scheduling suite 17 pass/171 assertions afterwards. Strict TypeScript passes. D265/D267, no deadline widening. Measurement correction: r2-stages/r2-stages-new/r2-stages-tls used the retained production-current bundle, which lacks the already-committed navigator.onLine offline guard (only production-offline carries it). Their socket-open delays are diagnostic older-bundle numbers, not current branch measurements. Fresh e3c72d2e bundle rebuilt/copied as r2-production; locked real TLS 150ms rerun queued. Head native rebuild/iterate in progress. #199 idle branch latest comment says implementation validation still pending; not merged yet.
Author
Owner

Fresh e3c72d2e browser bundle + retained b4d50e15 native artifact, locked perf VM 4vCPU, 150ms RTT, load 0.98/1.29/1.34: lifecycle callback creates the socket within 0.2ms (capture listener runs just after mux listener); no backoff remains, no token fetch. Initial socket opens 765-777ms; Hello+Resume+Attach travel immediately and Welcome costs one RTT. Packet-header-only receipt shows two TLS attempts: first closes with a 30-byte encrypted alert after the fixture self-signed certificate, then retries. Context ignoreHTTPSErrors was not sufficient to avoid the extra fixture-only handshake. Explicit browser acceptance before TLS removes it.

Corrected fixture (same product code/native artifact), VM load 0.85/1.04/1.16: socket-open 453.7/451.7/451.6ms for online/frozen pageshow/visible; first resume message is within 0.2ms of open, server Welcome about 150ms later. Painted readiness 1030.5/1433.4/626.3ms vs650 budget: 1/3 passes. Residual delay includes terminal.reconnecting; integrate already-published d64e12c8 native scheduling repair while retaining #212 RTT-variation/queued-reply controls (functional old-source regression red, merged four controls green). Idle CPU refactor remains owned by idle-cpu-199 and is not claimed here. Native release/iterate rebuilding. TLS-stage fixture callbacks occur at TLS completion in this runtime; kernel TCP timestamps come from packet headers, not that callback.

r2-browser-scheduling-red.log
r2-browser-scheduling-green.log
r2-current.log
r2-tcp-fixed.log
r2-tcp-headers.log
r2-cert.log

Fresh e3c72d2e browser bundle + retained b4d50e15 native artifact, locked perf VM 4vCPU, 150ms RTT, load 0.98/1.29/1.34: lifecycle callback creates the socket within 0.2ms (capture listener runs just after mux listener); no backoff remains, no token fetch. Initial socket opens 765-777ms; Hello+Resume+Attach travel immediately and Welcome costs one RTT. Packet-header-only receipt shows two TLS attempts: first closes with a 30-byte encrypted alert after the fixture self-signed certificate, then retries. Context ignoreHTTPSErrors was not sufficient to avoid the extra fixture-only handshake. Explicit browser acceptance before TLS removes it. Corrected fixture (same product code/native artifact), VM load 0.85/1.04/1.16: socket-open 453.7/451.7/451.6ms for online/frozen pageshow/visible; first resume message is within 0.2ms of open, server Welcome about 150ms later. Painted readiness 1030.5/1433.4/626.3ms vs650 budget: 1/3 passes. Residual delay includes terminal.reconnecting; integrate already-published d64e12c8 native scheduling repair while retaining #212 RTT-variation/queued-reply controls (functional old-source regression red, merged four controls green). Idle CPU refactor remains owned by idle-cpu-199 and is not claimed here. Native release/iterate rebuilding. TLS-stage fixture callbacks occur at TLS completion in this runtime; kernel TCP timestamps come from packet headers, not that callback. [r2-browser-scheduling-red.log](https://git.kayg.org/attachments/216c6828-aa35-4d51-bff9-799cba27f4ea) [r2-browser-scheduling-green.log](https://git.kayg.org/attachments/1fd76f5b-a8d7-42b6-a894-4708e39cc65e) [r2-current.log](https://git.kayg.org/attachments/ec1bcb3e-29cc-48d6-a6d3-5a293793dca0) [r2-tcp-fixed.log](https://git.kayg.org/attachments/e1e668ff-f53d-48c4-be0d-3b884b6c157e) [r2-tcp-headers.log](https://git.kayg.org/attachments/774f5e3e-1c51-4e05-8a3b-2cbb4819b02d) [r2-cert.log](https://git.kayg.org/attachments/8e73e207-6899-4b0a-ab41-4c96f6e20a41)
Author
Owner

Pushed 3459d93e: merge published d64e12c8 native scheduling repair, retaining #212 RTT-variation/queued-proof controls. Exact old-source scheduling regression fails; merged pinned-Tokio module four controls pass, touched-server all-target clippy/fmt pass. Full cargo liveness filter is also rebuilding separately.

idle-cpu-199 published 90e17439 (batch shim proofs in existing host actor, no browser payload notifications). Integrating it now as requested. One conflict in embedded.rs: keep #212 bounded ready-input-before-expiry selection and perform the new route-proof batch in that existing Tick arm, rather than adding a second timer selection. No independent idle optimization; remeasurement must use the merged shipping artifact. Native full gate/source rebuild and 128-session quiet/stress receipts still pending. A build-host browser attempt failed at initial live readiness before disruption under shared load; retained as failed functional setup, not a timing or pass claim.

Artifacts and evidence remain outside checkout. No deploy; issue stays open.

Pushed 3459d93e: merge published d64e12c8 native scheduling repair, retaining #212 RTT-variation/queued-proof controls. Exact old-source scheduling regression fails; merged pinned-Tokio module four controls pass, touched-server all-target clippy/fmt pass. Full cargo liveness filter is also rebuilding separately. idle-cpu-199 published 90e17439 (batch shim proofs in existing host actor, no browser payload notifications). Integrating it now as requested. One conflict in embedded.rs: keep #212 bounded ready-input-before-expiry selection and perform the new route-proof batch in that existing Tick arm, rather than adding a second timer selection. No independent idle optimization; remeasurement must use the merged shipping artifact. Native full gate/source rebuild and 128-session quiet/stress receipts still pending. A build-host browser attempt failed at initial live readiness before disruption under shared load; retained as failed functional setup, not a timing or pass claim. Artifacts and evidence remain outside checkout. No deploy; issue stays open.
Author
Owner

Size follow-up: merged x86 shipping image is 22355504B (before-idle image22354384B; idle integration+1120B in this recipe), SHA2565e578433c3957b3301bf490206ed30015dd1ce74ecf6319ad872edfe02164edb. Fresh original-base49e809d same-target build is running. To meet the requested <=16KB delta, replace the new CA watch internal Value result with a two-boolean snapshot and fixed wire encodings for the four permitted states, retaining identical JSON fields/error text and live membership/outbound authority gates. This changes only the newly-added internal source trait, not the wire/action contract or frozen frames. No new serializer/dependency/engine. Also measure a bounded integer decay for the native two-second RTT variation envelope instead of floating-point Duration multiplication; liveness semantics and 50ms allowance remain unchanged. Each optimization will be gated/committed separately and measured against the same base. No ceiling change or performance claim yet.

Size follow-up: merged x86 shipping image is 22355504B (before-idle image22354384B; idle integration+1120B in this recipe), SHA2565e578433c3957b3301bf490206ed30015dd1ce74ecf6319ad872edfe02164edb. Fresh original-base49e809d same-target build is running. To meet the requested <=16KB delta, replace the new CA watch internal Value result with a two-boolean snapshot and fixed wire encodings for the four permitted states, retaining identical JSON fields/error text and live membership/outbound authority gates. This changes only the newly-added internal source trait, not the wire/action contract or frozen frames. No new serializer/dependency/engine. Also measure a bounded integer decay for the native two-second RTT variation envelope instead of floating-point Duration multiplication; liveness semantics and 50ms allowance remain unchanged. Each optimization will be gated/committed separately and measured against the same base. No ceiling change or performance claim yet.
Author
Owner

Merged shipping artifact5e578433c3957b3301bf490206ed30015dd1ce74ecf6319ad872edfe02164edb (native source after413db545), fresh e3c72d2e equivalent browser logic, locked perf VM4vCPU,150msnetem,load1.05/0.81/0.90 before and1.75/0.96/0.96 after: real TLS/PTY128 test PASSES. Observed Ping median151.610ms/p95162.545ms; 0 extra browser routes/30s,128 retained attachments,0 session reconnections. Fresh event-to-painted typable online621.5/frozen-pageshow626.3/visible613.0ms vs650ms; socket-open458.2/455.2/456.0ms, first Resume follows within0.4ms, Welcome about1RTT later. Reusable0.8/0.3/0.8ms vs200. CA push reaches2tabs;0HTTPstatusreads,5subscriptions.

Idle remains FAIL:D81:86serverCPUticks/10.005s/100Hz=8.596%onecore, down from preceding11.198% but not near-zero. RSS1session19038208B,128sessions26845184B;61472.3B/additional,projected20031271186B. This is the requested remeasurement of idle-cpu-19990e17439 integrated here; remaining idle optimization stays with that job, not this lane. Stress/zero/final-source measurements pending.

Merged iterate: fmt/VTfmt/compile-out/clippy/denyPASS; testFAIL initial_attach_requires_explicit_credit_before_replay (agent_review, scriptline29) because an unsolicited control census Event0x33 arrived during its no-credit window. Direct repeatpasses, but no load-waiver claimed: wire contract permits census control frames without terminal credit, and the fixture already provides read_without_inventory/ping helpers. Repair that probe to admit only validated control censuses and Ack, still reject terminal data/fences and preserve exact1-byte credit. Recorded failing full-gate transcript is the red regression. Final fast will rerun all rows. No product-agent change.

Merged shipping artifact5e578433c3957b3301bf490206ed30015dd1ce74ecf6319ad872edfe02164edb (native source after413db545), fresh e3c72d2e equivalent browser logic, locked perf VM4vCPU,150msnetem,load1.05/0.81/0.90 before and1.75/0.96/0.96 after: real TLS/PTY128 test PASSES. Observed Ping median151.610ms/p95162.545ms; 0 extra browser routes/30s,128 retained attachments,0 session reconnections. Fresh event-to-painted typable online621.5/frozen-pageshow626.3/visible613.0ms vs650ms; socket-open458.2/455.2/456.0ms, first Resume follows within0.4ms, Welcome about1RTT later. Reusable0.8/0.3/0.8ms vs200. CA push reaches2tabs;0HTTPstatusreads,5subscriptions. Idle remains FAIL:D81:86serverCPUticks/10.005s/100Hz=8.596%onecore, down from preceding11.198% but not near-zero. RSS1session19038208B,128sessions26845184B;61472.3B/additional,projected20031271186B. This is the requested remeasurement of idle-cpu-19990e17439 integrated here; remaining idle optimization stays with that job, not this lane. Stress/zero/final-source measurements pending. Merged iterate: fmt/VTfmt/compile-out/clippy/denyPASS; testFAIL initial_attach_requires_explicit_credit_before_replay (agent_review, scriptline29) because an unsolicited control census Event0x33 arrived during its no-credit window. Direct repeatpasses, but no load-waiver claimed: wire contract permits census control frames without terminal credit, and the fixture already provides read_without_inventory/ping helpers. Repair that probe to admit only validated control censuses and Ack, still reject terminal data/fences and preserve exact1-byte credit. Recorded failing full-gate transcript is the red regression. Final fast will rerun all rows. No product-agent change.
Author
Owner

Size status: original-base49e809d same-recipe x86 image is 22,319,760 B (SHA25622e5a4c6a0087269d16446d21cd9b0993bf6f76a6f2957bec1184239aa40e95c). Fixed boolean CA snapshots plus integer native RTT decay reduce the pre-lease image to22,348,848 B, delta+29,088 B: still above16KB. Integrating039a5502 replaces the overlapping #212 proof cache rather than retaining two caches; its 10 idle/auth/route controls and workspace clippy pass. A first intermediate build used a shadowed cache and emitted unused-code warnings; superseded, not a candidate.

Next size experiment: share the new proof-authority state machine behind the existing boxed Operation boundary, and encode CA replies before entering their channel-send future. This avoids repeated generic/select/encoder state without changing authority, cadence, wire schema or deadlines. A small allocation on content-free probes is the trade-off; retain only with same-recipe size and locked-VM idle/stress/recovery numbers. No new library or profile/ceiling change.

Corrections: r2-merged-150 load BEFORE was0.74/0.61/0.86, not the earlier comment transcription; AFTER1.75/0.96/0.96 unchanged. Stress at128 kept attachments but1 extra browser route/30s, so healthy-link stress remains FAIL; wake633.0/609.0/631.8ms stillwithin650. Short10s CPU samples do not isolate setup work; a dedicated60s settle/60s sample will provide the steady receipt. Attach-credit probe also needed to admit a validated empty replay_complete marker, not only censuses; d42611c7 corrects the first attempted fix, with strict no-data/one-byte assertions retained. First failing correction receipt preserved.

r2-merged-150.log
r2-merged-stress.log
r2-iterate-merged.log
r2-variation-clock-red.log
r2-variation-clock-green.log
r2-browser-variation-clock-red.log
r2-browser-variation-clock-green.log

Size status: original-base49e809d same-recipe x86 image is 22,319,760 B (SHA25622e5a4c6a0087269d16446d21cd9b0993bf6f76a6f2957bec1184239aa40e95c). Fixed boolean CA snapshots plus integer native RTT decay reduce the pre-lease image to22,348,848 B, delta+29,088 B: still above16KB. Integrating039a5502 replaces the overlapping #212 proof cache rather than retaining two caches; its 10 idle/auth/route controls and workspace clippy pass. A first intermediate build used a shadowed cache and emitted unused-code warnings; superseded, not a candidate. Next size experiment: share the new proof-authority state machine behind the existing boxed Operation boundary, and encode CA replies before entering their channel-send future. This avoids repeated generic/select/encoder state without changing authority, cadence, wire schema or deadlines. A small allocation on content-free probes is the trade-off; retain only with same-recipe size and locked-VM idle/stress/recovery numbers. No new library or profile/ceiling change. Corrections: r2-merged-150 load BEFORE was0.74/0.61/0.86, not the earlier comment transcription; AFTER1.75/0.96/0.96 unchanged. Stress at128 kept attachments but1 extra browser route/30s, so healthy-link stress remains FAIL; wake633.0/609.0/631.8ms stillwithin650. Short10s CPU samples do not isolate setup work; a dedicated60s settle/60s sample will provide the steady receipt. Attach-credit probe also needed to admit a validated empty replay_complete marker, not only censuses; d42611c7 corrects the first attempted fix, with strict no-data/one-byte assertions retained. First failing correction receipt preserved. [r2-merged-150.log](https://git.kayg.org/attachments/b9cbd59b-310d-4ce1-a337-4a3818ed2d0a) [r2-merged-stress.log](https://git.kayg.org/attachments/dd514360-14f2-487d-927f-1fdb7c8809df) [r2-iterate-merged.log](https://git.kayg.org/attachments/5f957e65-6dd2-4ac3-a700-a245b88afd73) [r2-variation-clock-red.log](https://git.kayg.org/attachments/977f2dec-933f-45f1-9e33-58bbbfec56ef) [r2-variation-clock-green.log](https://git.kayg.org/attachments/78e3388d-debf-4e79-8a3e-58643c5a9ced) [r2-browser-variation-clock-red.log](https://git.kayg.org/attachments/415e4aec-8579-4b12-8e48-31e6f9eadbd8) [r2-browser-variation-clock-green.log](https://git.kayg.org/attachments/abd72612-c7ab-4e37-9cbe-facce5e39056)
Author
Owner

New gate finding during continuation: cargo-deny now reports RUSTSEC-2026-0346/0347/0348/0349 on the existing rustls0.23.45. The earlier iterate advisory row passed; the database changed during this run. cargo-deny identifies0.23.46 as the patched release for all four. Update this existing TLS dependency to that patch release, preserving provider/features and all engine choices; no advisory suppression. Dependency update is a separate atomic change, with full native/QUIC/auth tests and new final-size/VM receipts required. The exact original-base size remains recorded separately so this security delta is visible.

Other iterate failure is real_binary_preserves_input_and_output_across_24_abrupt_stops: first restart oracle timed out before forwarding, observed0/received406014; not one of the #118 waiver rows. Direct weighted repeat is running with unchanged assertions. No baseline waiver or pass claim. Latest steady128 receipt:60s settle +60.002s sample,209ticks at100Hz=3.483%onecore,0reconnects and final executed-marker proof passes; RSS19,005,440->24,616,960B (44,185.2B/additional;200projection27,798,294B). VM load1.11/1.74/1.55 before and0.71/1.24/1.38 after. Raw links:

r2-steady-before-box.log
r2-lease-merge-idle-tests.log
r2-ca-typed-tests-final.log
r2-ca-source-typed-tests.log

New gate finding during continuation: cargo-deny now reports RUSTSEC-2026-0346/0347/0348/0349 on the existing rustls0.23.45. The earlier iterate advisory row passed; the database changed during this run. cargo-deny identifies0.23.46 as the patched release for all four. Update this existing TLS dependency to that patch release, preserving provider/features and all engine choices; no advisory suppression. Dependency update is a separate atomic change, with full native/QUIC/auth tests and new final-size/VM receipts required. The exact original-base size remains recorded separately so this security delta is visible. Other iterate failure is real_binary_preserves_input_and_output_across_24_abrupt_stops: first restart oracle timed out before forwarding, observed0/received406014; not one of the #118 waiver rows. Direct weighted repeat is running with unchanged assertions. No baseline waiver or pass claim. Latest steady128 receipt:60s settle +60.002s sample,209ticks at100Hz=3.483%onecore,0reconnects and final executed-marker proof passes; RSS19,005,440->24,616,960B (44,185.2B/additional;200projection27,798,294B). VM load1.11/1.74/1.55 before and0.71/1.24/1.38 after. Raw links: [r2-steady-before-box.log](https://git.kayg.org/attachments/1c1e4767-20b3-4cea-8d8b-8983411d2df3) [r2-lease-merge-idle-tests.log](https://git.kayg.org/attachments/5903f89d-e52a-4c23-9f29-3126e84853df) [r2-ca-typed-tests-final.log](https://git.kayg.org/attachments/9b79c3e2-6ffb-4f63-8159-6d05371f2321) [r2-ca-source-typed-tests.log](https://git.kayg.org/attachments/24cc0389-f7e8-4000-b049-8ab1e22c8fc3)
Author
Owner

Size isolation experiment under D198: the CA push worker is currently compiled inside the remote transport crate at opt-level3; server orchestration already uses opt-level s, while transport/crypto remain speed-optimized. Move the new public-status plugin into its own build-removable crate (AGPL, same plugin API/actions/topic/settings/role dependencies), retain the remote::authority re-export for internal compatibility, and apply the existing orchestration-size recipe only to that crate. No transport/crypto profile, engine, wire/action contract, authority check, runtime switch or cadence changes. This targets the remaining >16KB delta without slowing remote transport. Compare same-recipe static sizes and repeat real TLS/PTY/CA/idle/stress gates on the VM; discard cold-hint experiment that was stopped before a result.

Disk filled again; stopped only own pending cold/base-ARM scopes and removed only own completed GNU debug outputs. Space has recovered (67GB currently); continue native rebuild and final gates. The patched lockfile rustls0.23.46 makes cargo-deny pass; direct daemon-oracle repeat passes unchanged. All unfinished steps and failures remain recorded; no final fast/pass or completion claim yet.

Size isolation experiment under D198: the CA push worker is currently compiled inside the remote transport crate at opt-level3; server orchestration already uses opt-level s, while transport/crypto remain speed-optimized. Move the new public-status plugin into its own build-removable crate (AGPL, same plugin API/actions/topic/settings/role dependencies), retain the remote::authority re-export for internal compatibility, and apply the existing orchestration-size recipe only to that crate. No transport/crypto profile, engine, wire/action contract, authority check, runtime switch or cadence changes. This targets the remaining >16KB delta without slowing remote transport. Compare same-recipe static sizes and repeat real TLS/PTY/CA/idle/stress gates on the VM; discard cold-hint experiment that was stopped before a result. Disk filled again; stopped only own pending cold/base-ARM scopes and removed only own completed GNU debug outputs. Space has recovered (67GB currently); continue native rebuild and final gates. The patched lockfile rustls0.23.46 makes cargo-deny pass; direct daemon-oracle repeat passes unchanged. All unfinished steps and failures remain recorded; no final fast/pass or completion claim yet.
Author
Owner

Rebuilt on current dev for the owner's review. Branch mockups-2026-10-31, head 586cd2b13 (base dev 42ab33035, 2026-10-31). Test double only; nothing is real or saved. Not merged, not deployed. Old previews are gone; this replaces them.

Preview (NetBird, bound to infraternal-dev-02-std; index of every mockup: http://10.69.69.117:47650/mockups.html):

How: One indicator per window in the machine pill's place. Palette: "Mockup: connection" rows set each state; "play every state" cycles them. The captures show the window pills' icon per state.

Note: Rebased only (the mockup of #212 gap 3).

Captures are Chromium on the production build of the mockup, taken by apps/tracer/test/capture-mockups.ts; I have read them for wrong states, not judged them as final.

Desktop 1440×900 @2x, ink

connected
offline
offline-keys-kept
reconnecting
reconnecting-keys-kept
slow

Desktop 1440×900 @2x, paper

connected
offline
offline-keys-kept
reconnecting
reconnecting-keys-kept
slow

Phone 393×852 @3x, ink

connected
offline-keys-kept
offline
reconnecting-keys-kept
reconnecting
slow

Phone 393×852 @3x, paper (first state only)

connected

Rebuilt on current dev for the owner's review. Branch `mockups-2026-10-31`, head `586cd2b13` (base dev `42ab33035`, 2026-10-31). Test double only; nothing is real or saved. Not merged, not deployed. Old previews are gone; this replaces them. **Preview** (NetBird, bound to infraternal-dev-02-std; index of every mockup: http://10.69.69.117:47650/mockups.html): - http://10.69.69.117:47650/?mock=1&proto=clusters&scene=3&conn=1 **How:** One indicator per window in the machine pill's place. Palette: "Mockup: connection" rows set each state; "play every state" cycles them. The captures show the window pills' icon per state. **Note:** Rebased only (the mockup of #212 gap 3). Captures are Chromium on the production build of the mockup, taken by `apps/tracer/test/capture-mockups.ts`; I have read them for wrong states, not judged them as final. **Desktop 1440×900 @2x, ink** ![connected](https://git.kayg.org/attachments/ce118115-b081-4297-9b13-c519b213f2ad) ![offline](https://git.kayg.org/attachments/378de0bc-332e-4997-80ec-cb92c4176631) ![offline-keys-kept](https://git.kayg.org/attachments/89eeaaa2-1a41-486c-a455-95b9397cca19) ![reconnecting](https://git.kayg.org/attachments/28b22b44-bf10-4871-b395-43cc83b6021f) ![reconnecting-keys-kept](https://git.kayg.org/attachments/a601343b-44d7-4789-b98c-997c2a48d265) ![slow](https://git.kayg.org/attachments/9278babf-e96e-4cdb-9c7d-286ece66f271) **Desktop 1440×900 @2x, paper** ![connected](https://git.kayg.org/attachments/3ee271ce-209f-4c85-9b72-7e48a0cf03e5) ![offline](https://git.kayg.org/attachments/17244013-6d4c-4f02-876d-cd04b21f8c3c) ![offline-keys-kept](https://git.kayg.org/attachments/5ec04370-5b48-4a2b-8db3-8ab1cb2d9c22) ![reconnecting](https://git.kayg.org/attachments/a3cd1ada-43c2-4af3-ba89-d4edf7705e02) ![reconnecting-keys-kept](https://git.kayg.org/attachments/ddb96435-7d25-4716-8c36-d0a48ad54315) ![slow](https://git.kayg.org/attachments/bbf07eb9-4032-41da-a0d5-84d3155d919f) **Phone 393×852 @3x, ink** ![connected](https://git.kayg.org/attachments/655a9cc1-24a2-4f13-9577-52adb207b6e3) ![offline-keys-kept](https://git.kayg.org/attachments/28fca4fe-54a1-4452-94d7-9f763d0065e9) ![offline](https://git.kayg.org/attachments/63fa5973-03d9-4a2a-b1fa-82ef69f0b47f) ![reconnecting-keys-kept](https://git.kayg.org/attachments/cd4e72f4-c3df-408a-9745-c47105f003bc) ![reconnecting](https://git.kayg.org/attachments/e0a9c462-97b9-42a7-b5e1-ea999b044793) ![slow](https://git.kayg.org/attachments/67e84690-e925-41f0-9464-123d0bdb5831) **Phone 393×852 @3x, paper (first state only)** ![connected](https://git.kayg.org/attachments/5b18ce6b-f965-4c7a-bf14-80915160dfb2)
Author
Owner

Update to the comment above: the branch head is now 57871651f (the preview at http://10.69.69.117:47650/mockups.html runs it). The captures above were taken one build earlier; the only difference is that the window terminals there hide their cursor until attached, a production change that was since removed from the branch. Gate output, what is left out, and the budget finding: #272.

Update to the comment above: the branch head is now `57871651f` (the preview at http://10.69.69.117:47650/mockups.html runs it). The captures above were taken one build earlier; the only difference is that the window terminals there hide their cursor until attached, a production change that was since removed from the branch. Gate output, what is left out, and the budget finding: #272.
Author
Owner

J56 started (Claude Sonnet 5.5). Branch ui-approved-189-212-216, base origin/dev f4b61cd6c. Building the owner-approved mockups (mockups-2026-10-31) into the product. Owner 2026-11-01: "add-host pill is approved. connection states is approved. version pill is mostly approved." plus the value-tap changes (in-place clipboard + Copied, contextual default action, one Updates key).

**J56 started** (Claude Sonnet 5.5). Branch `ui-approved-189-212-216`, base origin/dev `f4b61cd6c`. Building the owner-approved mockups (mockups-2026-10-31) into the product. Owner 2026-11-01: "add-host pill is approved. connection states is approved. version pill is mostly approved." plus the value-tap changes (in-place clipboard + Copied, contextual default action, one Updates key).
Author
Owner

Progress (J56). Branch ui-approved-189-212-216 pushed (head: copy/press commit). Done: shared sidebar card shell (Inbox rebuilt on it); in-place "clipboard + Copied" confirmation and the contextual press action in the shared key/value list (no tooltip, reduced-motion safe). Next: version pill + panel with the one merged Updates row, then the connection indicator in the window pill. Finding: no update-check or licence backend exists on dev (#211 is backend-only and unmerged), so the panel will be wired to an update source with the action stubbed behind a TODO linked to #211.

**Progress (J56).** Branch `ui-approved-189-212-216` pushed (head: copy/press commit). Done: shared sidebar card shell (Inbox rebuilt on it); in-place "clipboard + Copied" confirmation and the contextual `press` action in the shared key/value list (no tooltip, reduced-motion safe). Next: version pill + panel with the one merged Updates row, then the connection indicator in the window pill. Finding: no update-check or licence backend exists on dev (#211 is backend-only and unmerged), so the panel will be wired to an update source with the action stubbed behind a TODO linked to #211.
Author
Owner

Progress (J56), WIP pushed to ui-approved-189-212-216. Written: version pill + panel (canvas/version/*, packages/ui/src/version-pill.on-demand.ts), the merged Updates row and its update controller with unit tests (24 pass on compute01), the window-pill connection indicator wired to the real binding (windows/link.ts, kept-keys count, resumed/approximate moments) and the TASTE rows (separate docs commit). tsc clean. Waiting for a build slot on compute01 (queue ~11) for the first browser batch; log ~/j56-logs/b1.log there. Not built yet: nothing blocking. Decisions I made that need a look: (1) the kept-keys dim text line of the mockup is NOT shipped (a secret typed into a hidden prompt would appear on screen); only the count and the amber key are; (2) no licence-key entry and no release notes row in the product until there is a backend for them.

**Progress (J56), WIP pushed to `ui-approved-189-212-216`.** Written: version pill + panel (`canvas/version/*`, `packages/ui/src/version-pill.on-demand.ts`), the merged Updates row and its update controller with unit tests (24 pass on compute01), the window-pill connection indicator wired to the real binding (`windows/link.ts`, kept-keys count, resumed/approximate moments) and the TASTE rows (separate docs commit). `tsc` clean. Waiting for a build slot on compute01 (queue ~11) for the first browser batch; log `~/j56-logs/b1.log` there. Not built yet: nothing blocking. Decisions I made that need a look: (1) the kept-keys dim text line of the mockup is NOT shipped (a secret typed into a hidden prompt would appear on screen); only the count and the amber key are; (2) no licence-key entry and no release notes row in the product until there is a backend for them.
Author
Owner

Progress (J56). History is now atomic and pushed (ui-approved-189-212-216 head 0176caf22): sidebar-card refactor, in-place copy + contextual press, About list on demand (keeps the critical transfer budget green: critical gzip 305441/307200, brotli 254299/256000), connection icon in the window pill (#212), version pill + panel (#216), TASTE rows. Browser specs on dev-02 (arm64): connection-pill 12/12, version-pill 13/13 after fixes, add-host pill specs 4/4 + stream 9/9 (the unmodified-dev baseline has 4 failures in canvas.spec/sessions-canvas on this VM that I reproduced there: touch grip 43.99px, footer Settings, Linux key glyphs, session badge). Final batch + captures running; scripts/verify fast is queued on compute01.

**Progress (J56).** History is now atomic and pushed (`ui-approved-189-212-216` head `0176caf22`): sidebar-card refactor, in-place copy + contextual press, About list on demand (keeps the critical transfer budget green: critical gzip 305441/307200, brotli 254299/256000), connection icon in the window pill (#212), version pill + panel (#216), TASTE rows. Browser specs on dev-02 (arm64): connection-pill 12/12, version-pill 13/13 after fixes, add-host pill specs 4/4 + stream 9/9 (the unmodified-dev baseline has 4 failures in canvas.spec/sessions-canvas on this VM that I reproduced there: touch grip 43.99px, footer Settings, Linux key glyphs, session badge). Final batch + captures running; `scripts/verify fast` is queued on compute01.
Author
Owner

J56: connection states, built into the product (branch ui-approved-189-212-216, head bd2671f8a; commit 1e9369200). One icon per window in the machine pill's place, warm tooltip with the sentence, no text box. Chromium on the production build, 1440×900 @2x and 393×852 @3x, ink (paper for three). The test double's palette rows "Mockup: connection – …" put the icon in each state; in the product the states come from the window's binding (windows/link.ts): connecting, reconnecting (+ amber key and count while keys are kept), resumed (a tick for 1.8 s), approximate (screen rebuilt, 3.2 s), offline (session ended / host refused, each in words), slow (page round trip). Specs also drive the product canvas against the mock server: a dropped socket turns the icon to reconnecting and back.

Deviation from the mockup, deliberate: the dim line that showed the typed text at the cursor is not built (a password typed into a hidden prompt would appear on screen). Only the count and the amber key show. Needs your word if you want the text.

**J56: connection states, built into the product** (branch `ui-approved-189-212-216`, head `bd2671f8a`; commit `1e9369200`). One icon per window in the machine pill's place, warm tooltip with the sentence, no text box. Chromium on the production build, 1440×900 @2x and 393×852 @3x, ink (paper for three). The test double's palette rows "Mockup: connection – …" put the icon in each state; in the product the states come from the window's binding (`windows/link.ts`): connecting, reconnecting (+ amber key and count while keys are kept), resumed (a tick for 1.8 s), approximate (screen rebuilt, 3.2 s), offline (session ended / host refused, each in words), slow (page round trip). Specs also drive the product canvas against the mock server: a dropped socket turns the icon to reconnecting and back. Deviation from the mockup, deliberate: the dim line that showed the typed text at the cursor is **not** built (a password typed into a hidden prompt would appear on screen). Only the count and the amber key show. Needs your word if you want the text.
Author
Owner

J56 finished. Branch ui-approved-189-212-216, head bd2671f8abb5fa32ae5279e440cb309d8214bc96, base origin/dev f4b61cd6c. Pushed, not merged.

Commits: 9845b0ec7 sidebar-card refactor · 9652ae0ce in-place copy + contextual press · 5c15bd0c0 About list on demand (D188 budget) · 1e9369200 connection icon in the window pill (#212) · 22032d9ba version pill and panel (#216) · bd2671f8a TASTE rows.

Gate. scripts/verify fast on compute01 (x86), copy of this head: Rust half failed for lack of disk, not for code: No space left on device (os error 28) at target/debug/deps (the VM was 100% full, 2.5 GB free, from other jobs; my target was 8.6 GB, now deleted). Table, verbatim:

| fmt | PASS | VT native fmt | PASS | CLI plugin compile-out | PASS | clippy | PASS |
| SSH runtime test helper | PASS | real-binary fixture paths | PASS |
| test | FAIL (101) | SSH inode reuse fixture | FAIL (101) | shim process-per-user | FAIL (101) |
| cargo-deny | FAIL (1) | gate architecture | PASS | static builds | FAIL (1) |

No Rust file changed in this branch. A re-run needs ≥25 GB free there (build-slot waits for it). The TypeScript half of verify fast (its exact commands from scripts/verify.d/ts.sh) was run on dev-02 instead: bun run check clean; unit tests 394 + 105 + 17 pass, 0 fail; protocol tsc clean; transfer budget critical gzip 305448/307200 brotli 254318/256000, deferred 58585/61440, onDemand not limited (largest chunk 15456/20480); log TS_GATE_OK.

Browser specs (dev-02, arm64, production build). Final batch: 107 passed, 5 failed: 4 fail identically on unmodified f4b61cd6c on the same VM (canvas.spec touch grip 43.99999 px < 44; canvas.spec sidebar footer Settings; canvas.spec Linux key glyphs; sessions-canvas badge); 1 version-pill timing flake (6/6 on repeat, assertion timeout raised). Add-host pill specs 4/4 alone (a run next to other heavy jobs hit 2 s long tasks; same spec passes on dev when alone).

Not built / for kayg: (1) typed-text echo under a lost link (secret risk); (2) licence-key entry and release notes (no backend); (3) the product's update check is stubbed behind TODO(#211) in apps/tracer/src/canvas/version/source.ts, so the row ends in "Couldn't check — try again" until #211 exists; (4) the pill number is the build's short commit id (the web app has no version number).

**J56 finished.** Branch `ui-approved-189-212-216`, head `bd2671f8abb5fa32ae5279e440cb309d8214bc96`, base origin/dev `f4b61cd6c`. Pushed, not merged. Commits: `9845b0ec7` sidebar-card refactor · `9652ae0ce` in-place copy + contextual `press` · `5c15bd0c0` About list on demand (D188 budget) · `1e9369200` connection icon in the window pill (#212) · `22032d9ba` version pill and panel (#216) · `bd2671f8a` TASTE rows. **Gate.** `scripts/verify fast` on compute01 (x86), copy of this head: Rust half failed for lack of disk, not for code: `No space left on device (os error 28)` at `target/debug/deps` (the VM was 100% full, 2.5 GB free, from other jobs; my target was 8.6 GB, now deleted). Table, verbatim: ``` | fmt | PASS | VT native fmt | PASS | CLI plugin compile-out | PASS | clippy | PASS | | SSH runtime test helper | PASS | real-binary fixture paths | PASS | | test | FAIL (101) | SSH inode reuse fixture | FAIL (101) | shim process-per-user | FAIL (101) | | cargo-deny | FAIL (1) | gate architecture | PASS | static builds | FAIL (1) | ``` No Rust file changed in this branch. A re-run needs ≥25 GB free there (build-slot waits for it). The TypeScript half of `verify fast` (its exact commands from `scripts/verify.d/ts.sh`) was run on dev-02 instead: `bun run check` clean; unit tests 394 + 105 + 17 pass, 0 fail; protocol tsc clean; transfer budget `critical gzip 305448/307200 brotli 254318/256000, deferred 58585/61440, onDemand not limited (largest chunk 15456/20480)`; log `TS_GATE_OK`. **Browser specs (dev-02, arm64, production build).** Final batch: 107 passed, 5 failed: 4 fail identically on unmodified `f4b61cd6c` on the same VM (canvas.spec touch grip 43.99999 px < 44; canvas.spec sidebar footer Settings; canvas.spec Linux key glyphs; sessions-canvas badge); 1 version-pill timing flake (6/6 on repeat, assertion timeout raised). Add-host pill specs 4/4 alone (a run next to other heavy jobs hit 2 s long tasks; same spec passes on dev when alone). **Not built / for kayg:** (1) typed-text echo under a lost link (secret risk); (2) licence-key entry and release notes (no backend); (3) the product's update check is stubbed behind `TODO(#211)` in `apps/tracer/src/canvas/version/source.ts`, so the row ends in "Couldn't check — try again" until #211 exists; (4) the pill number is the build's short commit id (the web app has no version number).
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#212
No description provided.