J448: reconnect after a network change runs ~0.75 RTT over D375 (4 RTT + 50 ms) #478
Open
opened 2026-11-09 16:07:46 +00:00 by kayg
·
20 comments
No Branch/Tag specified
main
j470b-server-mesh-rejoin
mesh-compat-382
j444b-d381-key-wins-flood
j461b-macos-utun-reader-thread
j475b-remove-host-motion
fix-reconnect-new-link
j481-d380
dev
j479-mesh-soak
fix/j476-host-facts
j475-motion-pill-split
j470-mac-node-join
root-upgrade-d376
j474-review-merge
latency-targets-120hz
nightly-suite-shards
gotatun-pin-j469
macos-utun-reader-thread
fix-flood-echo-stall
wip/j416
motion-fast-ease-out
mesh-addhost-j259
takeover-close-terminals-d368
kbd-instant-followups
fix-trust-key-double-click
nightly-suite-partial-report
appwin-icons-j207
rusqlite-slice1
swipe-content-first-d374
mesh-mtu-381
addhost-instant-open
glass-contrast-d365-mock
glass-contrast-d365
signout-followups-442
fix-startup-toast-red
research-gotatun-matrix-j317
themes-sync-j304
fix-load-flakes
fix-nix-zig-patch
fix-compute01-browser-baseline
ratchet-size-baseline-419
predict-auto-d130
revoke-coverage-d367
nightly-suite-queue-timeout
nightly-browser-suite
fix-rustsec-2026-0459
fonts-ioskeley-obel
log-retention-d375
fix-kbd-no-anim-427
fix-dev-red-specs-2
takeover-proof-305-j205
wip/j410-server-pump
ui-consistency-d372
fix-osc52-clipboard
libghostty-vt-1.0
forget-retired-host-d369
j404-merge-426
fix-setup-lock-race
fix-touch-select-426
revoke-access-report-ui
fix-predictive-echo-specs
fix-selinux-agent-exec
wip/j395-checkpoint2
wip/j395
j391-review-scratch
ui-consistency-j195-deferred-rebased
fix-rustc-paths-421
decisions-wording-341
fix-install-suite-red
fix-dev-rtt-specs
fix-pending-removal-align
fix-privileged-skip
fix-install-suite-404
review-j368
mesh-dns-j254
revoke-access-report-d356b
revoke-privilege-round5
fix-removal-confirm
review-j360
gotatun-rotation-367
deps-refresh-340
review-j354
review-J351
review-j350
addhost-takeover-d359
revoke-report-items-347
revoke-end-sessions-d362
review-j348
size-mesh-ssh-346
size-trim-337
revoke-access-diff-d356
j259-pre-rebase-b06c5a6
j305-ended-at-start-spec
addhost-sudo-consent
fix-layout-real-specs-411
fix-shell-open-411
fix-console-hosts-373
fix-shell-exit
fuzz-host-name-353
fix-host-details-410
macos-filter-j197
research-gotatun-tricks
revoke-p3-j216l
stale-state-pill
revoke-followups-j216k
revoke-progress-j216e
backup/macos01-20261106/lume/j197
backup/macos01-20261106/lume/appwin-icons-j207-stash0
backup/macos01-20261106/claude/stash-0
backup/macos01-20261106/claude/stash-1
backup/macos01-20261106/claude/J80-macos-s1
backup/macos01-20261106/claude/J80
backup/macos01-20261106/claude/J80-slice1-20261102
backup/macos01-20261106/claude/J16b-appwin-on-dev
backup/macos01-20261106/claude/appwin-launch-idle-146
backup/macos01-20261106/claude/J80-s1-run
wip/j259
trust-285-p3c
runtime-lock-j216f
mesh-ssh-p3-j175
tun-proof-p3b
trust-285-p3
terminal-polish-j271
tun-proof-p3
ssh-install-flakes-j216i
fuzz-fixes-j264
trust-285-a
trust-285-b
restart-oversized-fixture-j198
backup/macos01-20261106/lume/appwin-icons-j207
restart-bound-j216h
up-preflight-p3-j198
backup/macos01-20261106/lume/j251
up-preflight-j198
wip/up-preflight-j198-j245-p2
wip/up-preflight-j198-j245-p1
agent-fsync-offloop-j196
wip/up-preflight-j198-j245
settings-offscreen-j231
wip/up-preflight-j198-j226-inspection
wip/j103f
themes-j206
wip/up-preflight-j198-j226
flakes-j216c
backup/macos01-20261106/claude/j197
flakes-j216b
backup/macos01-20261106/claude/j197-red
wip/up-preflight-j198-review
flakes-j216
backup/macos01-20261106/claude/appwin-icons-j207
engineering-j208b
appwin-mock-j209
toast-stack-j165
engineering-j208
decisions-d351
decisions-d350
decisions-d349
appearance-presets-mock-j129
decisions-d348
docs-audit-spec
doc-coverage-baseline-raise
decisions-d347
decisions-d346b
decisions-d346
j88h-profile
ui-consistency-j195-deferred
ui-consistency-j195
engineering-practices-j194
preferred-login-ui-j166
signin-pools-263-j174
macos-node-265-s1
decisions-d345
decisions-d344
proxy-cgroup-j164
verify-quick-fuzz-329
proxy-start-io-j168
timing-flakes-j163
up-263-s1
mcp-events-j147
verify-quick-fuzz-j158
proxy-p3-j159
agent-resource-j157-detect
wip/j103d-final
remote-cancel-hang-j155
proxy-traefik-281-j62d
j149-verify-quick
proxy-traefik-281-j62b
j150-drop-unnamed
wip/j79d-red-r4
wip/j103d-d332
rootless-toast-j142
wip/j103d-head
wip/j103d
j125c-mcp
macos-build-j136
backup/macos01-20261106/claude/j136
wip/j79d-red-cli
wip/j79d-red-server
j121-link-liveness
j118c-tracer-failures
wip/j79c-head
release-desktop-j131
j124c-signed-macos
wip/j79c-red-p3
wip/j79c-red-p23
wip/j79c-red-p22
merge-j128-check
perf-deferred-j128
sidebar-toggle-260
j127-shortcut-changed-dot
j125-mcp
j118-tracer-failures
j126-account-summary
settings-sections-mock-j92
j120-pinch-lock
sidebar-292
backup/macos01-20261106/claude/j120
taste-2026-11-03
row-actions-242-215
backup/macos01-20261106/claude/stash-0-untracked
backup/macos01-20261106/claude/J80-265-s1-run
backup/macos01-20261106/claude/J80-macos-s1-20261102
j112-canvas-commands
ui-no-overshoot-scroll
fix-recovery-restart
backup/macos01-20261106/claude/stash-1-untracked
taste-2026-11-02
size-baseline-ratchet
machine-cards-structure-j108
j109-boot-copy-mockups
fix-dev-red
wip/up-263-s1
j95b-settings-rows
proxy-traefik-281
j95-option-rows
docs-human-j91
docs-keys-palette
fix-flood-1013-270-j38d
mesh-ssh-s1
mesh-ssh-s0
addhost-d291-tunnel
test-stability-load
mesh-relay-220
repro-296
shim-thp-off-24
mesh-pins-258-v2
mesh-dns
signin-d311-merged
docs-pages
ui-size-283
fix-ui-batch-specs
wip/j12b-edge-update
gate-on-arm
fix-rename-sync-293
trust-285-j60b
fix-focus-ring-clip
integ-ui-1101
edge-update-v2
signin-d311
taste-2026-11-01
layout-per-tab-250
ui-approved-splitopt-224
ui-approved-splitopt-224-on-dev
icon-text-centre-282
ui-approved-189-212-216
research-reverse-proxy
transfer-budget-320
review-mesh-pins-258-r2
sidebar-pill-259
review-mesh-relay-220
wip/j12-edge-update-v2
nix-package
status-crash-loop-237
fix-dev-test-failures
fix-fixture-socket-path
wip/mesh-relay-220-pre-dev-advance-rebase
fix-canvas-side-clip
research-head-to-head
frosted-real-256
review-mesh-pins-258
wip/mesh-relay-220-pre-final-rebase
review-layout-per-tab-250-r2
broad-suite-triage
nix-devshell
review-status-crash-loop-237-r3
wip/nix-devshell-pre-p3
taste-frosted-real
wip/code-serve-demo-2026-10-30
wip/code-serve-glass-2026-10-30
wip/code-serve-clusters-2026-10-30
wip/code-merge-release94-dev-2026-10-30
wip/rproxy-delta-scratch-2026-10-30
wip/stale-note-257-staged-2026-10-30
wip/d241-size-staged-2026-10-30
review-broad-suite-207
wip/mesh-pins-258-pre-split
wip/mesh-relay-220-pre-rebase
mesh-measure-220
plan-211-update
review-edge-autoupdate-r3
perf24-reconnect
review-stale-note-r2
release-prod-live
d241-shell-marker
review-mesh-pins-server-258
review-revocation-r3
review-setup-token-r2
review-sync-journal-r3
wip/review-mesh-pins-258-prune-review-1995fee46
frosted-scroll-256
sync-journal-r3
revocation-per-account-wip
review-tokio-asyncfd-0386
review-sync-p3s
wip/stash-8by64-stash0-2026-10-30
mesh-drag-r2
setup-token-data-wip
release-9-4
auth-busy-1013
mesh-view-overlap
sync-p3s
review-auth-busy-wake
review-readd-r8-wip
mesh-drag-bounds
audit-auth-93
app-windows-stream-start
review-authority-cap-r3
app-windows-r7-measure
readd-minimal-r6
readd-minimal-r5
app-windows-r7-soak
readd-minimal-r4
app-windows-r7
app-windows-r6
readd-minimal-r3
readd-minimal-r2
readd-minimal
merge-release8-dev
review-busy-page-liveness-r2
review-busy-page-liveness
mesh-view-trim
review-authority-read-retry-r2
review-remove-uninstall-r2
release-retry-reattach
release-retry
review-remove-uninstall
review-authority-read-retry
app-windows-ship
mesh-autoswitch-p2
mesh-ssh
mesh-relay
mesh-macos-node
screen-and-control
session-labels
review-real-logins-r5
review-real-logins-r4
review-real-logins-r3
shim-memory-r2
review-real-logins-r2
shim-memory
shadow-addhost-instant
shadow-real-logins
shadow-same-session-flood
shadow-prod-perf-fix
hosts-from-server
app-windows-real
app-windows-transport
release-prod-6w
mesh-policy-verify
quiet-close-toast
dev-merge-r4
review-mesh-agent-transport
review-app-windows-transport
settings-roundtrip
review-release-pipeline-r4
mesh-agent-transport
ended-strip-fix
review-audit-ca-update-d244
settings-rows
phone-width
signout-clear
fix-restart-tests
dev-merge-rp
signer-hardening
review-audit-ca-update
terminal-fidelity
review-audit-ca-update-wip
mesh-integrate
review-mesh-agent-transport-515d3712
review-mesh-dataplane-feec1988
mesh-dataplane
signout
research-canvas-node
wip/review-renderer-cost
wip/review-terminal-fidelity
padlock-glyph
review-release-pipeline-2e95b689
phone-polish
sidebar-polish
inbox-generic
review-mesh-dataplane-378d4055
prod-batch
ui-inbox
ui-ca-unlock
ui-machine-sections
review-mesh-dataplane-a5f744fb
tls-session-prod
session-bounds-prod
fix-dead-session
session-bounds
tls-session
palette-polish
shortcuts-d222
research-appmeta
phone-gutter
ui-centre-button
wip/ui-centre-button
wip/tls-session
review-addhost-breakit
ui-platform
renderer-cost
remote-agents
mesh-api
ssh-bootstrap
prod-hotfix2
prod-fixes
review-remote-agents
review-mesh-dataplane
session-life
research-browser
review-mesh-api
research-capture
review-mesh-api-round3
review-mesh-api-round1
gate-stability
review-gate-stability
review-relay-direct
review-mesh-api-findings
proto-sessions
font-picker
proto-addhost
proto-windows
mesh-core
latency-gate
research-bsd
research-discovery
keytray-mods
mock-core
ui-tweaks
fix-motion-sel
fix-motion
integrate2
fix-robust
t-web
t-server
vt-ghostty
fix-snap-echo
t-web-auth
review-vt2
t-agent
lane-protocol
lane-shim
lane-auth
s1-base
s1-contracts
s1-workspace
No results found.
No labels
launch-qa
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
kayg/infraternal#478
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
J448, from #447 (J407): after a network change, reconnect-until-typable takes 1469.6 ms at 300 ms RTT on quiet dev-02 (tracer scenario row
reconnect_network_change), against the D375/D267 budget of 4 RTT + 50 ms = 1370 ms. The resumed-link reconnect is in budget (328.8 ms).Plan (about 3 h):
latency-targets-120hz,174127529) at all three RTTs; before/after per step; resumed-link and first paint must not regress.verify quick, thenverify fast.Branch:
fix-reconnect-new-linkfrom origin/dev.Start: branch
fix-reconnect-new-linkfrom origin/dev5eb968744. Trace venue: dev-02, production tracer build behindscripts/latency_proxy.py(TCP relay, no DNS/TLS: the test double is plainws://localhost), J407's branch merged locally plus temporaryperformance.markprobes (not committed).Finding 1: one isolated reconnect is already at the protocol minimum, 3 round trips. Per-step trace of one forced drop at 300 ms RTT (ms from the drop click):
openAt 150 ms: 11.6 connect → 190.7 open → 367.6 Welcome → 561.4 echo painted. No liveness check, backoff or extra auth round trip sits on the path: the resume token rides in the first message, and attach is pipelined with it.
Isolated drops (each waits for the previous resume to finish), n=20 per RTT:
Log:
dev-02:~/.cache/codex-scratch/j448/evidence/trace2-rtt300-170437.log.Finding 2 (in progress): the 1426–1470 ms in J407's row come from how the scenario paces drops. The scenario polls
#probe-resultsforTime to resume: <n> ms, but a forced drop does not clear the previous number, so the poll returns at once with the previous sample and the next drop is clicked while the current resume is still running. With the same pacing my first trace also gave p50 1431 / p99 1530.7 at 300 ms (trace-rtt300-165143.log), and the samples repeat the previous value. Tracing now what a drop during an unfinished resume costs (whether it is a real client delay or only the measurement).Finding 2 confirmed: the over-budget samples span two reconnects. Scenario-paced trace at 300 ms (
dev-02:~/.cache/codex-scratch/j448/evidence/overlap-rtt300-171339.log), ms from the first drop:The 2nd drop's marker sample ends at 3312.7, measured from 1880.5: 1432 ms, which is two reconnects, not one. Samples from that run: 895, 895, 895 (stale repeats), then 1432, 1480, 1528, 1474, 1446.
Fix (commit
8b69b99ea):apps/tracer/src/perf-probe.ts. A forced drop shows "pending" until its own marker echo paints, the run and drop buttons stay disabled while a resume is being measured, and a marker that the terminal refused is forgotten. New unit testapps/tracer/src/perf-probe.test.ts: on dev's probe it fails 0/2 (Received: "Time to resume: 900.00 ms"where "pending" was expected;1550.00 mswhere 800 was expected), and with the fix it passes 2/2.J407's row (terminal.spec.ts,
INFRATERNAL_LATENCY_PROFILE=1, dev-02), red = origin/devbd551e549+latency-targets-120hz, green = this branch +latency-targets-120hz:terminal-scenario.ts:118, both red and green)At 150 ms the overlap seldom happens: the marker echo usually returns before the 100 ms quiet timer re-enables the button. A 40 ms run with J407's loop alone (no prediction steps) is queued, along with a repeat at 300 ms and the phone first-paint row.
Round-trip breakdown, one reconnect after a forced drop (production tracer build, latency proxy, dev-02; ms from the drop click; first isolated drop of each run; logs
dev-02:~/.cache/codex-scratch/j448/evidence/trace-rtt{40,150,300}-*.log,trace2-rtt300-170437.log):localhost(a real page reuses its cached host lookup)ws://open; Hello, Welcome, Ack and the replay come back together: 1 RTTThe protocol minimum on this venue is 3 RTT (upgrade, resume, echo), and that is what one reconnect takes. No liveness check gates the path: the probes start after Welcome and do not delay attach. There is no separate auth request, because the resume token rides in the first message, and the snapshot (replay) comes with the attach reply. Nothing on the path is excess, so I cut nothing. The 1426–1470 ms came from the probe's sampling (findings 2 and 3 above).
What the venue does not show (for the orchestrator/owner, no change made):
releaseReplayResponsesAfterPaint→resendUnacknowledgedInput). If they rode in the same flight as Resume + AttachTerm, their echo would come back with the Welcome flight, which saves 1 RTT for those keys. That changes input ordering against the replay and the server's handling of frames before Welcome, which is protocol and auth-adjacent (CLAUDE.md priority 2). It needs its own design and review, so I have not done it here.terminal-scenario.ts:118).Progress: head
eb4135818pushed (test helper doc comments and a typecheck fix folded into the one commit).verify quickon dev-02: all rows PASS,QUICK_EXIT=0(dev-02:~/.cache/codex-scratch/j448/evidence/verify-quick2.log).verify fastis running on dev-02, slot 2, since 19:12 UTC. compute01 had 9 queued. First paint, red vs green alternated 3x (p99 ms): red 184.7 / 217.2 / 159.1, green 180.3 / 166.4 / 143.5, so no regression (red-fp*/green-fp*logs). The resumed-link row (verify-latency.py, real agent PTY) runs no tracer code, so this change cannot move it.Finish (J448). Head
17d45da23onfix-reconnect-new-link: the probe fixeb4135818merged with origin/dev97928be8a. Pushed and confirmed withgit ls-remote. Not merged.Red/green on the new base (dev-02; red = origin/dev
97928be8a+latency-targets-120hz6458fdcb5, green = this head + the same J407 head; the two differ only by this change; p50 / p99 ms):terminal-scenario.ts:118)r3-green-rtt300-044707.log(outlier),tr{1,2,3}-rtt300-*.log(traced).latency-targets-120hzand this branch both touchperf-probe.tsnext toforceDrop. The conflict is trivial: keep J407'sarmIdleTimeoutabove this branch'sforceDropdoc. Resolved that way for these runs, and the tsc and unit tests pass.verify quick(dev-02,17d45da23): every row PASS,QUICK_EXIT=0.verify fast(dev-02,HEAD 17d45da23c9d309656336c235728b35681b38781; compute01 and dev-02 queues were both empty, and the target stays on dev-02 as asked):Static sizes (report only): x86 28328824 bytes (+60384 vs the gate baseline), aarch64 25428888 bytes (+50384 vs baseline). This branch changes no Rust. The delta is dev's drift against the gate's stored baseline. Privileged integration: SKIP (no change to install, proxy, mesh or shim code).
Evidence:
dev-02:~/.cache/codex-scratch/j448/evidence/(verify-fast.log,verify-quick2.log,r3-*,tr*,*-fp*).Correction: the
verify fastblock in my finish comment cut off the gate table. Here it is verbatim (dev-02:~/.cache/codex-scratch/j448/evidence/verify-fast.log, HEAD17d45da23):On J468's reading of
reconnect_network_changeat 1435.8 ms against the 1370 gate onlatency-targets-120hz(6458fdcb5): that branch does not contain this fix. Checked withgit merge-base --is-ancestor eb4135818: no for bothorigin/latency-targets-120hzandorigin/dev(3c0b20252). Without it the probe still shows the previous drop's number, so the loop clicks the next drop mid-resume and a sample spans two reconnects. 1435.8 sits right in that range (red on dev+J407: p50 1410–1446, p99 1442–1553 across 5 runs). The same J407 head with this branch merged reads p99 962.7–1016.8 at 300 ms (loop and traced scenario runs above).To get the row green, merge
fix-reconnect-new-link(17d45da23) together with or beforelatency-targets-120hz. The one conflict, inperf-probe.ts, is trivial: keep J407'sarmIdleTimeout, then this branch'sforceDropdoc. Nothing of J448 is running on any VM, and the target and worktrees have been removed.J473 review start: reviewing fix-reconnect-new-link at
17d45da23c(fixeb4135818), with current origin/devd7b2e4dc1and latency-targets-120hzaf543ecd6. Plan, about 45 minutes: inspect sample and failure lifecycles plus perf-only gating; reproduce the two tests red/green on dev-02; trial-merge both branches into current dev and run tracer unit tests; post verdict and D382 follow-up. No branch pushes. Per BRIEF-COMMON review rule, read author gate receipts rather than rerun verify quick/fast.J473 finding P2: the overlap fix is red 0/2 on current dev and green 2/2 on
17d45da23. A separate fake-clock check preserves a 60300 ms successful sample, but missing-marker-echo and no-attach cases never finish: after 60000 ms both still show "Dropping the socket and measuring the first resumed echo…", with drop disabled. Source has no resume deadline or failure path for either case; the key-run timeout only calls finishRun when runActive is true. Evidence: dev-02:~/.cache/codex-scratch/J473/evidence/{red.log,green.log,lifecycle.log,green/review-lifecycle.test.ts}. A bounded, explicit failed resume result must survive reporting, clean up the marker and release measurement state without accepting a late echo as the next sample. Trial merge into devd7b2e4dc1has the expected sole conflict next to forceDrop, resolved by keeping armIdleTimeout and the new forceDrop documentation. Unit checks in progress; no branch changes pushed.J473 verdict: REQUEST CHANGES on
fix-reconnect-new-linkat17d45da23c9d309656336c235728b35681b38781(fixeb4135818).P2, blocking: a forced-drop measurement can lock the probe indefinitely.
apps/tracer/src/perf-probe.ts:188–203,227–243,400–403startsresumeStartedAtand disables both controls, but never arms a resume deadline. If attachment never succeeds, or attachment succeeds but the accepted marker never echoes (for example a terminal program with echo disabled), nothing clears the measurement or records failure. The key-run timeout is unrelated: it is only armed byrun(), andfinishRun()immediately returns when no key run is active. The new lock makes the latter case unrecoverable even though the terminal is connected and quiet.Reproducer: the author's fake panel/terminal plus two fake-clock cases, advancing 60,000 ms after a drop with (a) no attachment, and (b) a resumed attachment with no painted marker. Both remain at
Dropping the socket and measuring the first resumed echo…, reportNo painted key echoes yet., and keep drop disabled. Source inspection confirms there is no eventual timer beyond that interval.lifecycle.log: 3 pass, 2 fail (the 3 passes include the author's two tests). This is a lifecycle check, not a wall-clock performance assertion.Required: terminate unavailable/never-echoing resumes as explicit failed measurements, retain the failure for the scenario/report rather than omit it from percentiles, and clean up the marker/timer and measurement lock. Late output from an expired sample must not finish a subsequent sample. Cover missing attach, missing echo, failure cleanup and late echo; keep the ordinary slow-success path honest. The refused-marker cleanup itself is correct and shows an error message, but should use the same explicit failure/reporting contract.
What passes review:
900.00 msand misattributed1550.00 ms; reviewed probe: 2 pass / 0 fail. Both files and logs are attached.?probe=1flag:main.ts:482,618–619constructs the probe/hooks only there. The module is statically bundled, so this is runtime flag isolation, not compile-out. This branch changes only the probe and its unit test; no terminal, reconnect, auth or protocol implementation changes.Trial merge: current
origin/devwasd7b2e4dc1bf767787b05e4ce287d885841f7aa5f. Merged reviewed17d45da23, thenlatency-targets-120hz/ #447 ataf543ecd609630e8aa3a7b943236bea88ccaa7a1, in a detached local review worktree. Sole conflict: next toforceDropinperf-probe.ts; kept #447'sarmIdleTimeoutand this branch's expandedforceDropdoc. Trial head46fb0830977a980020914506f2881a900752d4ca, resolution attached. Nothing pushed.On dev-02, through build-slot/nice/nix, with CARGO_INCREMENTAL=0 and CARGO_BUILD_JOBS=3:
bun run check: exit 0.bun run build: exit 0.bun test --isolate ./src ./precompress.test.ts ./browser-build.test.ts ./docs-build.test.ts ./chunk-classes.test.ts ./test/*.test.ts ./real/*.test.ts: 1004 pass, 1 fail, 7 errors; 1005 tests across 153 files; exit 1. The two probe tests pass in this trial.d7b2e4dc1: 1002 pass, 1 fail, 7 errors; 1003 tests across 152 files; exit 1. Same failure:dead-session-transfer-review.test.ts, deferred Brotli 50876 > 45056 bytes on dev and 50915 > 45056 in the combined trial. Same seven unhandleddocument is not definederrors atpackages/ui/src/host-icons.ts:55. Thus the broad suite is not green, and these failures reproduce without either reviewed branch. The combined +39 bytes is not attributable to #478 alone.*-ready.logresults above. The non-isolated initial run also exposed shared module mocks; the matched baseline/trial comparison uses--isolate.D382: the stopwatch endpoint fits: forced drop through resumed attach to the first marker echo painted. The branch does not establish the new deployment budget: the author's numbers use a plain-WS loopback relay without TCP/TLS handshake latency, and #447 still gates that endpoint at
4 * roundTripBoundMs + 50. Follow-up must run WSS behind real TLS with TCP handshake latency represented on the shaped link, preserve this echo endpoint, and update the network-change target/report/docs to resume's 4 RTT + one echo RTT + 50 ms (5 RTT + 50; nominal 1550 ms at 300 ms RTT, or 1700 ms with #447's 330 ms bound). Rerun the required sample count there and keep timeouts/failures visible. No auth/input-ordering optimization is needed or authorized by D382. The reported ~957–1017 ms plain-WS p99 values demonstrate the sampling correction, not D382 compliance; I did not rerun those performance measurements.Author gate, read rather than rerun per BRIEF-COMMON's reviewer exception:
dev-02:~/.cache/codex-scratch/j448/evidence/verify-fast.log, reviewed head17d45da23, copied to the review evidence directory. Table verbatim:Review evidence lives at
/home/kayg/.cache/codex-scratch/J473/evidence/anddev-02:~/.cache/codex-scratch/J473/evidence/; selected raw receipts and the lifecycle reproducer are attached. No repository implementation edits, branch pushes, deployment or issue closure. Review did not rerun verify quick/fast. VM target/worktree cleanup follows the completed tests.J473 cleanup complete: dev-02 /home/claude/worktrees/J473 (including its sole target directory) removed after all commands exited. Evidence retained outside the checkout; J473-review-evidence.zip is attached to verdict comment 89632. No test server or browser was started, and nothing was pushed.
J448c round 2 starting on fix-reconnect-new-link, base
17d45da23c, isolated checkout /home/kayg/Developer/Worktrees/infraternal/t3-c77461c5 (detached while the branch is checked out by J448). Plan: red-first lifecycle tests for no attach/no echo and late output; add a bounded explicit FAIL result with cleanup; tracer unit suite, quick and fast on compute01; commit/push this branch only and report receipts. Estimate: 90 minutes including shared build queue, with gate queue time uncertain. No deployment or integration merge.J448c finding and fix: the resume stopwatch had no deadline independent of a key run. Red-first fake-clock tests reproduce both no-attach and no-echo failures, plus marker-refusal reporting: 3 pass / 3 fail. Current targeted green run: 6 pass / 0 fail, 31 assertions, including a 60300.00 ms success, one reconnect per sample, timeout cleanup, disposal and late-marker isolation. These are deterministic lifecycle assertions, not wall-clock performance claims.
The new deadline is 120000 ms, over 70× the 1700 ms 300 ms-RTT-plus-jitter worst-case bound and above the reviewed minute-long slow-success case. Every failure is counted as FAIL and remains in the copyable panel report (cumulative count plus latest duration/reason), including after later successes. Each sample uses a unique printable marker matched across painted chunks, so an expired echo cannot complete a later sample. Buttons unlock once the measurement ends, subject to the existing connected/quiet requirement; a disconnected terminal remains unavailable until attachment.
D382 follow-up opened separately as #488. No TLS/budget changes in this round. Unit red/green artifacts: compute01 and control host
/.cache/codex-scratch/j448c/evidence/{red,green}.log. Quick, tracer units and fast are queued sequentially on compute01 as explicitly requested (launcher PID 4018429; one slot at a time); logs live in compute01:/.cache/codex-scratch/j448c/evidence/. One target: /home/claude/worktrees/j448c/target, removed at finish. No integration merge or deployment.J448c fix committed and pushed:
b539991a0con fix-reconnect-new-link.git ls-remote origin refs/heads/fix-reconnect-new-linkconfirms that exact SHA. compute01 checkout matches both changed-file SHA256 digests and has no tracked changes. Targeted probe tests: 6 pass, 0 fail; tracer typecheck exit 0. Red/green logs attached to the prior progress comment. Quick/full tracer unit suite/fast remain queued on compute01, one slot at a time; no finish claim yet. D382 follow-up: #488.J448c compute01 update, pushed head
b539991a0c: quick pre-check passed (QUICK_EXIT=0). Production tracer build passed. Full isolated tracer unit command completed with 990 pass, 1 fail, 7 errors across 152 files; UNIT_EXIT=1. Failure: dead-session production canvas fits the deferred Brotli budget. Seven errors: document is not defined from packages/ui/src/host-icons.ts. J473 documented both failure classes independently; I will run the matching unmodified origin/dev comparison after fast completes, without overlapping build slots. All six probe lifecycle tests pass in the broad run. Full fast is now compiling on compute01. Receipts: ~/.cache/codex-scratch/j448c/evidence/{quick,tracer-unit,verify-fast}.log on compute01.J448c remains on pushed head
b539991a0c. No implementation edits since that commit. The compute01 final gate is still active in CLI plugin compile-out, which runs three compilation/test variants; recorded compiler children are active. This is a cold per-job target, not a hung probe test. Launcher PID 4018429, sole target /home/claude/worktrees/j448c/target. Full live log: compute01:~/.cache/codex-scratch/j448c/evidence/verify-fast.log. Quick/typecheck/broad unit logs are attached to comment 89753. The six probe lifecycle tests pass in both focused and broad runs.A clean origin/dev comparison checkout is ready at /home/claude/worktrees/j448c-baseline, SHA
4889dfaf16, with verified vendor checksums; no baseline build slot is running concurrently. After fast finishes, I will run the same broad unit command there to qualify the deferred-budget failure and seven document-global errors, then attach results and remove the target. No final gate verdict yet; no integration merge or deployment.J448c self-review found a P11 concern in my new marker matcher: a rolling string window allocated on every painted byte. Replaced it with a bounded integer prefix position. The generated marker has
~only at its ends, so mismatch recovery retains only a new leading~; split and expired marker coverage still passes. Six focused tests, 31 assertions: 6 pass / 0 fail, receipt compute01:~/.cache/codex-scratch/j448c/evidence/green-index.log. No timing-performance claim or new dependency.Refinement committed and pushed separately as
203f60909(fix-reconnect-new-link). Current compute01 fast remains on the first commitb539991a0and has passed clippy and reached workspace tests. I will let it finish safely, retain its log as an intermediate receipt, then run quick, the broad tracer units and fast on the final pushed head using the same target cache. The final finish will quote only that final-head gate, not the intermediate run. Clean origin/dev baseline comparison remains queued after the branch checks, without overlapping slots. No merge or deployment.Correction to J448c progress: advancing to the next gate row did not mean the workspace test row passed; verify records a failure and continues. Intermediate
b539991a0fast has a Rust failure in remote_client::tests::idle_timers::copy_cost::udp_drop_receipt_counts_only_owned_live_sockets at crates/infraternal-agent/src/remote_mesh_copy_cost_tests.rs:128: observed Number(2), expected 1. Package result: 292 passed, 1 failed, 23 ignored. Raw receipt: compute01:~/.cache/codex-scratch/j448c/evidence/verify-fast.log, lines 2499–2516. No Rust code changed in this job.The initial gate is still compiling the shim variant and must not be called green. Final pushed head is
203f60909a, which still needs its complete gate rerun. I will report this intermediate failure even if that final run passes, and qualify on unmodified dev if it persists. The separate broad tracer-unit failure and seven document-global errors also remain tracked for baseline comparison.J448c timing update: the original 90-minute estimate is being exceeded by cold native/release gate builds on compute01. The sole launcher has been running about 82 minutes including its queued quick/unit phases, and is now in probe release exclusion after shim checks. It is active, not waiting on the probe timeout tests. I expect roughly another 60–75 minutes for remaining cold static builds, the cached final-head gate/unit rerun, and the unmodified-dev unit comparison; this remains within the original 2× estimate guard for now. No additional implementation scope or unrelated Rust fix is being taken on.
Pushed final implementation head remains
203f60909a. Single target remains /home/claude/worktrees/j448c/target and will be removed after checks. Current intermediate fast has the explicitly recorded UDP test failure from comment 89837; it is not green. The final report will retain that failure and quote the final-head gate separately.The exact UDP test that failed in the intermediate full gate passed when rerun alone from the same already-compiled test executable: 1 passed, 0 failed, 315 filtered out; UDP_FOCUSED_EXIT=0. No Rust source, dependency, binary or build flags changed. This focused retry is investigation evidence only; it does not turn the intermediate full gate green and does not replace the final-head full gate. Receipt: compute01:~/.cache/codex-scratch/j448c/evidence/udp-focused-retry.log.
The intermediate gate is now compiling static builds. Final implementation remains pushed at
203f60909a.