Research: typing feels local anywhere #192
Open
opened 2026-10-12 15:02:30 +00:00 by kayg
·
96 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#192
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?
Research whether terminal typing and output can feel local across slow, lossy, roaming links, and bring measured options to the owner without selecting a foundational transport or engine.
Scope:
Deliverable: research/feels-local/README.md. Related decisions: D63, D114, D130, D214, D215, D235. Related work: #50, #55, #162.
Started on branch
research-feels-local, based onorigin/devatbb5219a482507f952331b9d0491b82f34030298e; worktree clean. Read issue #192 (no prior comments), related predictive echo #50 and parent #9 comments, high-latency gate #55 comments, and mesh SSH research #162 comments.Source finding: Mosh’s official README documents SSP-style state sync, per-key speculative echo with underlines until server confirmation, roaming by authenticated increasing sequence numbers, UDP keepalives, and Ctrl-C within one RTT by adapting output rate; it also says no SSH port forwarding and missed scrollback is not preserved (https://github.com/mobile-shell/mosh, https://mosh.org/mosh-paper-draft.pdf). tssh/tsshd’s official docs describe SSH bootstrap then QUIC by default or KCP mode, per-session UDP server, 3 s heartbeat timeout before reconnect, 10 day alive timeout, optional cross-device session attach, and no local echo/line editing; its feature table claims scrollback and SSH forwarding support (https://github.com/trzsz/tsshd, https://github.com/trzsz/trzsz-ssh). Superlogical’s product is Rex, announced in beta Oct 5; official material says durable sessions, remote connections, and libghostty, but publishes no numeric latency results or complete wire/screen-sync design in the material reviewed so far (https://www.superlogical.com/updates/public-testing-beginning, https://www.superlogical.com/rex/docs/installation).
Code finding: the current browser prediction path is still opt-in (
?predict=1) although D130 calls for automatic activation above ~60 ms; it only predicts on the visible normal screen and backs off on mismatches (apps/tracer/README.md:110,apps/tracer/src/predictive-echo.ts:22,apps/tracer/src/terminal.ts:1815). The session model is byte-exact: a surviving shim owns PTY state and an 8 MiB absolute-offset ring; the relay deduplicates input at the shim-confirmed offset, replays contiguous output when retained, and sends a screen repaint when replay is unavailable (DECISIONS.md:45,crates/infraternal-shim/src/ring.rs:1,crates/infraternal-agent/src/relay.rs:1). A full live-shim census reconciles session liveness after reconnect (apps/tracer/src/canvas/sessions/live-inventory.ts:1). Mosh’s latest-screen semantics would change scrollback/replay behavior. D63 still keeps the browser leg on WebSocket; D214 leaves the active-terminal isolation strategy as a measured choice; D235 puts mesh SSH behind network access and login access checks while reusing surviving sessions.Perf environment finding: the locked perf VM is Debian 13, x86_64, 4 vCPU; load average at the inventory check was 1.01/0.76/0.60.
mosh,sshd,tc, andipare present;tssh,tsshd, and Chromium were not found in PATH. There is noscripts/perf-vmin the worktree; the existing tracer latency proxy is available and declares packet loss unsupported for its TCP stream. I’ll keep all test setup and outputs under/root/infraternal-bench/feels-localand use a private network namespace for netem if the VM capabilities permit it.The branch has been rebased onto the updated origin/dev after two commits landed there. New base:
ef6c61ec6f; worktree remains clean.Perf VM setup check completed under the benchmark lock. A disposable network namespace accepted
tc netemon loopback (NETNS_NETEM_OK);systemd-run --user --scopeis available. Installed versions: mosh 1.4.0, OpenSSH 10.0p2, Bun 1.4.2. tssh/tsshd and a Chromium executable were absent in the initial tool scan; checking user-scoped install options before collecting the tracer samples.The first tracer run exposed a benchmark-script typo: it tagged 150 ms but passed a misspelled RTT variable, so the harness used its 300 ms default. The production build trace measured 308.90 ms; this run is reclassified as an unplanned 300 ms / 0% loss observation and will not count toward the 150 ms profile. Corrected runner before the requested 150 ms rerun.
First perf-VM observation completed 2026-10-12, 4 vCPU, CPUWeight=30, load average 0.05 at start / 1.25 at end. Production tracer bundle through the repository test double, n=20 keys; actual proxy profile 300 ms configured, 308.90 ms measured, 0% qdisc drops. Prediction on glyph p50/p99 14.10/14.80 ms; off 315.50/332.60 ms; host-confirmed echo 314.10/331.20 ms. Mock resume p50/p99 697.20/962.40 ms against 900 ms budget (assertion failed). Loopback qdisc counted 12,357 packets / 59,938,910 bytes across the whole Playwright run. Log: /root/infraternal-bench/feels-local/results/tracer-150ms-0loss.log (mis-tagged; run used default 300 ms after the RTT env typo). Other full-spec paint failures reflect the 300 ms link; not accepted as timing results for the requested 150 ms profile.
Corrected 150 ms attempt (port 4795) built the frontend but Playwright's anchored title filter matched no tests. It transferred only 56 loopback packets / 4,888 bytes with 0 drops and produced no timings. Switched to the unique
latencytest-title token; rerunning on port 4796.Corrected 150 ms / 0% tracer run completed on the perf VM at port 4796. Measured RTT 152.10 ms; load average 1.15/2.58/1.85 at start and 0.67/2.19/1.76 at end. For 20 prompt keys, prediction-on visible glyph p50/p99 was 13.60/14.10 ms; host-confirmed echo 164.30/164.90 ms; prediction-off glyph 165.30/165.80 ms. Mock resume was 417.00/879.40 ms p50/p99 against a 600 ms budget (assertion failed). Loopback qdisc: 4,996 packets, 0 drops, 10,792,162 bytes for the benchmark. Log: /root/infraternal-bench/feels-local/results/tracer-150ms-0loss-port4796.log.
Perf-VM 150 ms / 1% loss canvas observation (#192): measured RTT 160.40 ms; n=20 predicted glyph 13.80/14.60 ms p50/p99, confirmed echo 164.50/165.30 ms, prediction off 132.10/145.30 ms. Reconnect p99 1529.40 ms vs 600 ms budget (assertion failed). qdisc: 5,050 packets, 54 drops, 10,814,588 bytes; load avg 0.14/0.52/1.05 → 0.17/0.46/0.99. CPUWeight=30. Log: /root/infraternal-bench/feels-local/results/tracer-150ms-1loss-port4797.log.
Harness finding (#192): the first 150 ms SSH transport attempt produced no timing samples. Its SSHD readiness probe timed out TCP connect after 100 ms while loopback netem added 75 ms per direction; the server process remained alive, and the probe repeatedly failed before the 150 ms handshake could complete. The qdisc had 124 packets / 8,356 bytes. I’m increasing only the fixture readiness timeout before retrying; failed setup log: /root/infraternal-bench/feels-local/results/transport-150ms-0loss.log.
Perf-VM 150 ms / 0% first real-PTY comparison (#192): OpenSSH plain typing n=20 163.81/167.47 ms p50/p99; Vim 154.29/170.25 ms. UDP mode n=20: 150.79/151.05 ms plain; 151.07/151.47 ms Vim. Mosh produced no samples; phase details are being isolated. Ctrl-C and 10 s recovery did not produce metrics in this run, so these figures cover typing only. Whole loopback qdisc: 2,227 packets, 0 drops, 2,479,561 bytes; load avg 0.05/0.33/0.88 → 0.21/0.32/0.83; CPUWeight=30. Log: /root/infraternal-bench/feels-local/results/transport-150ms-0loss.log.
150 ms / 0% real-PTY diagnostic rerun (#192): OpenSSH plain n=20 168.13/171.09 ms p50/p99, Vim 161.86/165.28 ms; 10 s drop recovery after network restore 2312.18 ms. UDP mode plain 150.86/151.07 ms and Vim 151.11/151.47 ms. Mosh still yielded no samples pending correction of its remote-command argument. The CTRL-C marker check failed for all transports; qdisc recorded 113 drops with configured 0% loss during the unbounded flood (queue limit 1000), so I’m changing the probe to time prompt return and will preserve the overload observation separately. The UDP drop-recovery marker was not observed. qdisc total 2,500 packets / 2,122,053 bytes; load avg 1.06/0.95/0.95 → 0.23/0.66/0.84; CPUWeight=30. Log: /root/infraternal-bench/feels-local/results/transport-150ms-0loss.log.
Measurement-harness finding (#192): loopback placed client→server input and server→client output in one qdisc. During
yes X, it dropped 113 packets at configured 0% loss with the 1,000-packet queue, so that topology cannot cleanly attribute Ctrl-C delay to the output path. I’m replacing it with client/server network namespaces joined by a veth pair, with independent delay/loss queues in each direction; byte totals will sum both egress counters. No application code changed.Method step complete (#192): the report now specifies the real-PTY fixture (separate client/server network namespaces, veth, independent per-direction netem) and strict fixture-only host-key pinning with generated in-memory identities. Perf-VM executable sizes recorded: mosh-client 400,320 B, mosh-server 392,096 B, tssh 22,384,824 B, tsshd 10,666,146 B. Results pending the corrected directional-queue run. Draft: research/feels-local/README.md.
Status (#192): directional veth fixture is staged on the perf VM; its 150 ms / 0% validation is waiting behind other holders/waiters of
/var/lock/perf-bench.lock. No measurements overlap and no extra load is running from this job.Perf-VM lock status (#192): the 150 ms / 0% veth validation waited the full
flock -w 1800window and timed out before starting; no namespace or benchmark process was created. I’m retrying the same measurement with the required lock. The earlier loopback-only figures remain diagnostic and are excluded from the final comparison.Status (#192): a second
flock -w 1800request for the veth validation is still queued after the first request timed out. No benchmark has started; the client/server veth matrix runner is staged at/root/infraternal-bench/feels-local/.Status (#192): the retry is still waiting under
flock -w 1800(about 22 minutes elapsed); the shared perf lock remains held by another run. No veth fixture or benchmark has started in this attempt.Perf-VM veth 150 ms / 0% profile completed (#192; 4 vCPU, CPUWeight=30; load avg 1.72/1.27/0.92 → 0.86/1.59/1.17). OpenSSH Ctrl-C under flood n=20: 171.50/1087.85 ms p50/p99; same-connection recovery after the 10 s drop: 2290.84 ms. tssh default QUIC n=20: plain 150.83/151.08 ms, Vim 151.09/151.65 ms, Ctrl-C 166.74/280.53 ms; its drop-recovery marker was not observed. OpenSSH plain/Vim marker probes failed; Mosh did not reach its prompt. Per-transport egress: OpenSSH 59,332,139 B; Mosh 2,758 B (failed setup); tssh 40,826,965 B. Across both directional qdiscs: 100,162,364 B, 137,441 packets, 273,327 queue drops at configured 0% loss during the unbounded output flood (limit 1,000). Log: /root/infraternal-bench/feels-local/results/transport-150ms-0loss.log. I’m correcting probe markers and Mosh startup before running the remaining profiles.
Mosh harness finding (#192): the 150 ms diagnostic run shows
moshprinted its usage text instead of starting the shell; the expected#prompt marker (hex2320) was absent and the sanitized PTY tail ended in Mosh help text. The command vector passed Bash's--noprofile --norc -ioptions as separate trailing arguments, which the Mosh option parser treated as its own options. I’m changing the remote command to one shell-command argument and will verify it in the next locked profile. Evidence: /root/infraternal-bench/feels-local/results/transport-150ms-0loss.log.Directional-veth 150 ms / 0% corrected run (#192): OpenSSH n=20 plain 163.84/168.08 ms, Vim 165.48/167.90 ms, Ctrl-C 170.29/491.90 ms p50/p99; 10 s drop recovery 2470.49 ms after restore. tssh default QUIC n=20: plain 150.93/151.79 ms, Vim 151.14/154.12 ms, Ctrl-C 168.29/273.45 ms; no recovery marker within 30 s after the 10 s drop. Mosh yielded no measurements because it printed usage; the expected initial prompt was absent. Per-transport veth bytes: OpenSSH 62,541,995; Mosh 1,916 (failed startup); tssh 41,922,412. Both qdiscs together: 104,466,911 bytes, 142,114 packets, 274,306 queue-overflow drops at configured 0% loss; limit 1,000. Load avg 0.20/1.15/1.05 → 0.33/0.81/0.94, 4 vCPU, CPUWeight=30. Log: /root/infraternal-bench/feels-local/results/transport-150ms-0loss.log.
Mosh startup finding (#192): after fixing the remote command vector, its prompt diagnostic reported
Did not find remote IP address (is SSH ProxyCommand disabled?). The perf-VM man page confirms Mosh's defaultproxydiscovery uses OpenSSH proxy-command address reporting; this isolated SSH wrapper has no ProxyCommand. The server namespace exposes the correct address inSSH_CONNECTION, so I’m setting--experimental-remote-ip=remotefor this fixture. This changes only address discovery for the synthetic test.Recovery probe finding (#192): in the 150 ms / 0% run, sending one
Rimmediately when the link returned did not produce a tssh recovery marker within 30 s. That can conflate path recovery with losing the first post-outage input. I’m replacing this probe with a signal-triggered server output from the still-running PTY after the link is restored; timing begins at that trigger and ends when the client renders the response. This tests session/output recovery without relying on a key buffered during reconnect.Mosh port finding (#192): the next 150 ms run confirms address discovery is fixed, but Mosh's bootstrap SSH wrapper connected to TCP port 22 while the disposable SSHD listens on its generated port; the sanitized PTY tail reports
connect to host 198.18.0.2 port 22: Connection refused. I’m adding a fixture-only SSH wrapper that injects the generated server port before rerunning Mosh.Recovery-probe fixture finding (#192): the first signal-triggered probe did not start because its absolute temp path exceeded the PTY's 120-column width; the echoed command wrapped and the exact marker match failed. I’ve added a fixture-only
FEELS_LOCAL_FIXTUREenvironment variable and shortened the remote command tocd "$FEELS_LOCAL_FIXTURE" && python3 recovery_probe.py state/recovery.pidbefore rerunning.Mosh command finding (#192): its SSH bootstrap now reaches the server on the generated port and the UDP session starts, but the remote command exits with
-noprofile --norc -i: No such file or directory. Mosh's remote command handling split the Bash option vector incorrectly. I’m dropping the custom command and letting Mosh start the fixture's empty-home login shell, then setting the prompt through the PTY as with the other transports.Directional-veth 150 ms / 0% run with signal-based recovery (#192): OpenSSH n=20 plain 165.60/171.12 ms p50/p99, Vim 157.88/161.47 ms, Ctrl-C 164.84/508.58 ms; 10 s drop recovery 2075.05 ms. tssh default QUIC n=20: plain 152.41/156.67 ms, Vim 153.29/164.54 ms, Ctrl-C 297.37/380.09 ms, recovery 355.30 ms after the server signal. Mosh did not produce data; its custom remote command still failed, and the no-command login-shell fix is staged for the next run. Per-transport egress: OpenSSH 59,064,551 B, Mosh 56,085 B (failed), tssh 11,285,169 B. Both qdiscs: 70,406,479 B, 115,282 packets, 170,315 queue-overflow drops at configured 0% loss (limit 1,000). Load avg 0.76/1.08/1.00 → 0.52/0.83/0.91; 4 vCPU; CPUWeight=30. Log: /root/infraternal-bench/feels-local/results/transport-150ms-0loss.log.
Mosh-only directional-veth 150 ms / 0% run (#192; 4 vCPU, CPUWeight=30; load 2.01/1.66/1.30 → 0.94/1.41/1.23): plain typing n=20 203.79/221.15 ms p50/p99; Ctrl-C under flood 177.77/259.44 ms; signal-triggered recovery after 10 s loss 83.81 ms. Vim launch did not expose the expected
-- INSERT --marker, so no Vim timing yet. Mosh egress 110,403 B; both qdiscs 110,991 B / 662 packets / 129 queue drops at configured 0% loss (limit 1,000). Log: /root/infraternal-bench/feels-local/results/transport-150ms-0loss.log. I’ll use a visible-buffer sentinel for the Vim probe and verify Mosh prediction at 300 ms.Mosh directional-veth 150 ms / 0% run with visible Vim sentinel (#192; 4 vCPU, CPUWeight=30; load avg 0.27/0.98/1.09 → 0.27/0.89/1.05): plain typing n=20 204.52/213.45 ms p50/p99; Vim n=20 0.09/171.38 ms; Ctrl-C under flood n=20 176.17/186.16 ms; signal-triggered 10 s drop recovery 83.86 ms. The near-zero Vim p50 shows prediction in the full-screen case; p99 still includes confirmation/transport delay. Per-transport egress 111,177 B; both qdiscs 111,589 B / 668 packets / 130 queue drops at configured 0% loss (limit 1,000). Log: /root/infraternal-bench/feels-local/results/transport-150ms-0loss.log.
Perf-VM directional-veth 150 ms / 1% profile complete (#192; 4 vCPU, CPUWeight=30; load avg 1.23/1.05/1.10 → 0.17/0.71/0.96). OpenSSH n=20 plain 153.69/226.68 ms, Vim 162.98/252.60 ms, Ctrl-C 318.91/841.48 ms p50/p99; 10 s drop recovery 2219.87 ms. Mosh n=20 plain 205.56/277.93 ms, Vim 0.10/234.55 ms, Ctrl-C 177.92/255.77 ms; drop recovery 83.08 ms. tssh QUIC n=20 plain 150.92/330.88 ms, Vim 151.22/154.75 ms, Ctrl-C 786.76/1305.29 ms; drop recovery 364.09 ms. Egress bytes SSH 35,857,829; Mosh 110,682; tssh 5,189,772. Both qdiscs: 41,158,785 B / 61,186 packets / 120,546 queue drops (configured 1% plus 1,000-packet queue saturation during floods). Log: /root/infraternal-bench/feels-local/results/transport-matrix-150ms-1loss.log.
The remaining tracer matrix has not started: its
flock -w 1800request is queued behind another perf-VM benchmark. A read-only process check showed about 7 minutes of lock wait and no profile log yet. It remains within the requested wait window; I’ll report the profiles after the lock is acquired.Harness finding: the remaining tracer matrix request acquired the perf-VM lock, then exited before any profile because
/root/infraternal-bench/feels-local/run-tracer-matrix.shhad not been staged there. No tracer profile ran and no timing output was produced. I’m transferring the wrapper through NetBird SSH, verifying its single-profile dependency, and retrying under the same lock.Perf-VM directional-veth 150 ms / 5% profile (#192; 4 vCPU, CPUWeight=30; load 0.17/0.71/0.96 → 0.05/0.40/0.79). p50/p99 ms, n=20: OpenSSH plain 228.42/520.34, Vim 160.51/533.17, Ctrl-C 562.17/970.11; recovery 2,111.41 ms, 36,592,501 B. Mosh plain 0.20/210.65, Vim 0.11/236.39, Ctrl-C 177.76/329.74; recovery 83.87 ms, 103,100 B. tssh QUIC plain 150.84/498.46, Vim 151.15/320.83, Ctrl-C 2,647.12/3,718.81; recovery 329.83 ms, 3,478,134 B. SSH Vim timing samples are retained, but its terminal-end marker was not observed. Both qdiscs: 60,907 packets / 123,688 drops (configured loss plus flood queue overflow). Log: /root/infraternal-bench/feels-local/results/transport-150ms-5loss.log.
Perf-VM directional-veth 300 ms / 0% profile (#192; 4 vCPU, CPUWeight=30; load 0.05/0.40/0.79 → 0.00/0.19/0.61). p50/p99 ms, n=20: OpenSSH plain 312.45/318.84, Vim 306.72/445.62, Ctrl-C 370.76/1,132.35; recovery 7,892.49 ms, 63,360,649 B. Mosh plain 354.66/359.18, Vim 311.47/459.83, Ctrl-C 401.86/404.11; recovery 158.83 ms, 119,894 B. tssh QUIC plain 300.78/300.95, Vim 300.93/301.28, Ctrl-C 315.36/586.32; recovery 664.68 ms, 56,749,520 B. Both qdiscs: 138,084 packets / 441,549 drops, chiefly queue overflow during the output flood despite configured 0% random loss. Log: /root/infraternal-bench/feels-local/results/transport-300ms-0loss.log.
Perf-VM directional-veth 300 ms / 1% profile (#192; 4 vCPU, CPUWeight=30; load 0.00/0.19/0.61 → 0.07/0.17/0.49). p50/p99 ms, n=20: OpenSSH plain 305.56/648.84, Vim 303.52/622.96, Ctrl-C 620.06/1,407.51; recovery 7,925.78 ms, 41,732,661 B. Mosh plain 352.57/367.41, Vim 312.71/461.25, Ctrl-C 403.29/413.42; recovery 158.90 ms, 117,854 B. tssh QUIC plain 300.90/301.58, Vim 301.17/304.44, Ctrl-C 2,059.08/3,257.41; recovery 667.47 ms, 4,263,505 B. Both qdiscs: 53,843 packets / 103,082 drops (configured loss plus flood queue overflow). Log: /root/infraternal-bench/feels-local/results/transport-300ms-1loss.log.
Perf-VM directional-veth 300 ms / 5% profile (#192; 4 vCPU, CPUWeight=30; load 0.07/0.17/0.49 → 0.06/0.13/0.37). p50/p99 ms, n=20: OpenSSH plain 468.28/1,111.66, Vim 461.47/1,342.73, Ctrl-C 1,094.69/1,791.17; recovery 1,090.34 ms, 39,053,103 B. Mosh plain 0.25/404.77, Vim 310.81/561.05, Ctrl-C 403.19/813.69; recovery 159.05 ms, 112,634 B. tssh QUIC plain 300.94/1,371.64, Vim 301.29/303.14, Ctrl-C 3,872.57/7,655.00; recovery 938.53 ms, 3,478,941 B. Both qdiscs: 57,457 packets / 74,674 drops (configured loss plus flood queue overflow). Log: /root/infraternal-bench/feels-local/results/transport-300ms-5loss.log.
Perf-VM tracer harness finding (#192): 150 ms / 5% loss completed the sign-in timing (2,963.60 ms) but exited before the terminal keystroke probe. Its predictive-mutation test timed out expecting one mismatch and received zero; the single-loopback qdisc counted 1,653 packets / 87 drops, and load average was 0.56/0.78/0.74 → 0.51/0.74/0.73. No canvas keystroke timing is accepted from this run. Log: /root/infraternal-bench/feels-local/results/tracer-matrix-150ms-5loss-port4800.log. I’ll isolate the timing-only browser path for the remaining profiles and retain this failure as a harness limitation.
Perf-VM tracer harness finding (#192): 300 ms / 1% loss exited before the keystroke probe because the mock terminal did not reconnect within the 5 s connection assertion. Sign-in timing was 5,055.50 ms (budget 5,000 ms); no canvas keystroke samples are accepted. Loopback qdisc: 4,177 packets / 44 drops; load 0.51/0.74/0.73 → 0.63/0.72/0.72. Log: /root/infraternal-bench/feels-local/results/tracer-matrix-300ms-1loss-port4801.log.
Perf-VM tracer harness finding (#192): 300 ms / 5% loss completed sign-in timing at 4,921.20 ms, then exited before the keystroke probe when the test double did not expose the predicted “Z” glyph. No canvas keystroke samples are accepted. Loopback qdisc: 1,821 packets / 88 drops; load 0.63/0.72/0.72 → 0.70/0.75/0.73. Log: /root/infraternal-bench/feels-local/results/tracer-matrix-300ms-5loss-port4802.log.
Perf-VM timing-only production-tracer probe, 150 ms / 5% (#192; 4 vCPU, CPUWeight=30; load 1.52/1.57/1.13 → 1.23/1.50/1.12). n=20: prediction-on confirmed echo 164.00/596.60 ms p50/p99; prediction-on visible glyph 11.90/28.10 ms over 19 predicted overlays; prediction-off glyph 149.10/361.80 ms. The isolated probe passed and bypasses the full spec's unrelated mutation assertions. Loopback qdisc: 1,490 packets / 66 drops. Log: /root/infraternal-bench/feels-local/results/tracer-timing-only-150ms-5loss-port4810.log.
Perf-VM timing-only production-tracer probe, 300 ms / 1% (#192; 4 vCPU, CPUWeight=30; load 1.23/1.50/1.12 → 0.96/1.40/1.10). n=20: prediction-on confirmed echo 312.80/332.30 ms p50/p99; visible glyph 11.20/12.80 ms over 18 predicted overlays; prediction-off glyph 313.40/336.10 ms. The isolated probe passed. Loopback qdisc: 1,492 packets / 13 drops. Log: /root/infraternal-bench/feels-local/results/tracer-timing-only-300ms-1loss-port4811.log.
Perf-VM timing-only production-tracer probe, 300 ms / 5% (#192; 4 vCPU, CPUWeight=30; load 0.96/1.40/1.10 → 1.29/1.45/1.13). 20 confirmed echoes: p50/p99 316.60/649.80 ms with prediction and 316.70/511.60 ms prediction-off. Trace captured 18 speculative glyphs at 11.10/24.80 ms; including one paint fallback, visible glyph trace was n=19 at 11.10/332.30 ms. The isolated probe passed. Loopback qdisc: 1,494 packets / 85 drops. Log: /root/infraternal-bench/feels-local/results/tracer-timing-only-300ms-5loss-port4812.log.
Finish (#192): committed the research note at
4574b65dae. The worktree is clean. Final branch-head gate attempts:scripts/verify fast (attempt 1):
latency proxy: configured 300 ms RTT did not arrive: p50=441.48 ms p99=525.95 ms
scripts/verify fast (attempt 2):
latency proxy: configured 300 ms RTT did not arrive: p50=556.71 ms p99=564.06 ms
Both exited 1 at the latency-proxy assertion. These timings came from the shared build host and are not used as report evidence. No baseline exception was applied because this failure is outside the listed host-load cases. All research measurements in the note were collected on the perf VM.
Orchestrator: Q1, Q5, Q7 of the research are already decided (D130, D214); production gating prediction behind ?predict=1 is a defect. Queued job 05-predict-auto (automatic prediction above ~60 ms, compose per D130, interrupt priority with Ctrl-C-under-flood numbers). Q2, Q3, Q4, Q6 go to the owner.
Owner 2026-10-12 on the research questions: Q1 (prediction in full-screen apps), Q2 (latest-screen view lane over the durable byte stream) and Q3 (UDP/QUIC for mesh SSH): measure before deciding — no build until a real-PTY/vim benchmark (Q1, Q2) and a measured D235 mesh-SSH comparison incl. direct/relay/fallback (Q3) exist. Q4 recovery budget: owner asked how a "<1 ms" claim is possible; orchestrator proposed two numbers pending owner OK — (a) last screen shown from the local copy within one frame; (b) up to date and typable within 1 RTT + 50 ms after the path recovers.
Started on branch
research-feels-instant, based onorigin/devat13f1617c44279870bd706232f604ffe2cb2a8c9f. Worktree was clean; fast-forwarded the stale branch to origin/dev before starting. Read all #192 comments and parent #9 comments.Code finding: the held-screen/reconcile pattern is partly present.
apps/tracer/src/canvas/sessions/screen-cache.on-demand.tsstores up to 4 desktop or 2 phone ImageBitmaps, capped at 12M pixels, clears them when hidden, and draws a cached screen before the new server screen paints.apps/tracer/src/canvas/sessions/live.tsloads that cache at idle and marks ghost/paint;apps/tracer/src/terminal.tskeeps renderer state while its stream reconnects and resumes from confirmed cursors. This covers session switching and transport continuity, but not yet proof of the D259 one-frame / 1 RTT + 50 ms budgets.scripts/perf-vmis absent in this checkout (ls scripts/perf-vmreturned ENOENT); the existing browser harness uses the repository test double, so measured flow results will be labelled as production tracer bundle + test double, not a real server.Base update: the clean worktree was behind origin/dev by two decision commits when I resumed. Fast-forwarded research-feels-instant to
d100cfe5(D261) on top of the original base13f1617c; no task files changed.Started predict-auto at base
5e383c3da8(origin/dev); clean worktree. Read CLAUDE.md, DECISIONS.md (D130/D214/D256), architecture/process, all #192 comments and parent #9 comments, and research-feels-local README. Tests first; perf VM authorized by this brief; no deployment. Task-specific push instruction applies.Finding at base
5e383c3d: apps/tracer/src/terminal.ts:1815-1828 considers attached normal-screen visible cursor safe; no shell-prompt evidence is checked. Prediction can speculate at a password prompt until echo timeout. Will require positive OSC 133 A/B prompt evidence and invalidate it on command submission/interrupt/snapshot/disconnect. Blocking compose: no compose-mode implementation or per-window switch exists anywhere in apps/, packages/, contracts/ (rg compose mode|composeMode|compose-mode|send on Enter found none). Research says it exists, but this checkout does not. Per brief no new UI: owner/designers must supply/identify the existing compose switch before that step can be wired. Continuing independent prediction and priority work.Completed sustained RTT state at
28461872(3 tests / 23 assertions) and bounded prompt evidence atda477224(5 tests / 2055 assertions, 1000 seeded chunk-boundary fuzz cases). Both pushed; tracer bun run check passed for each. Positive OSC 133 A/B evidence required; Enter/control operations, execution markers, newlines and private mode changes invalidate it. Existing overlay already distinguishes unconfirmed glyphs with opacity 0.72 (packages/ui/src/terminal-text-overlay.ts:94), so no visual change needed for prediction. Compose remains blocked on absent per-window implementation.Finding at base
5e383c3d: apps/tracer/src/terminal.ts:1815-1828 considers attached normal-screen visible cursor safe; no shell-prompt evidence is checked. Prediction can speculate at a password prompt until echo timeout. Will require positive OSC 133 A/B prompt evidence and invalidate it on command submission/interrupt/snapshot/disconnect. Blocking compose: no compose-mode implementation or per-window switch exists anywhere in apps/, packages/, contracts/ (rg compose mode|composeMode|compose-mode|send on Enter found none). Research says it exists, but this checkout does not. Per brief no new UI: owner/designers must supply/identify the existing compose switch before that step can be wired. Continuing independent prediction and priority work.Perf-VM prompt parser scan: 50 MiB plain output/sample, n=20, 4 vCPU, load 0.20/0.49/0.71 -> 0.43/0.52/0.72. Original per-byte parser p50/p99 917.17/969.44 ms; native-indexOf skip p50/p99 0.80/0.92 ms. Log /root/infraternal-bench/predict-auto/results/prompt-scan.log. Sustained RTT tests and parser fuzz pass. Scheduler tests pass (5): priority, per-PTY ordering, focus change, cancellation, shared capacity and sibling fairness. Original GNU baseline could not run on perf VM (Nix ELF loader absent); static baseline at
5e383c3dis building on the build host. No accepted Ctrl-C measurements yet. Compose remains blocked: no existing switch/implementation at this base.Completed and pushed native flood scanning
36bed85e, editing-key prompt evidencea9de8336, automatic prediction wiring46f5ebed, and shared-connection priorityfeec992d. Prediction: 9 unit tests / 2089 assertions, 3 production-browser regressions plus rapid-backspace fixture pass; bun run check passes. Priority: 5 scheduler tests and 4 real-actor input-credit regressions pass; fmt and server all-targets clippy -D warnings pass. Loaded broader socket suite failed Mesh inventory and stalled lifecycle; both exact cases pass in isolation (0.76 s / 0.85 s diagnostic test durations, not performance evidence). Static baseline5e383c3dbuilt and shipped; Ctrl-C perf-VM runs queued. Milestone scripts/verify fast stopped at latency proxy on build host: latency proxy: configured 300 ms RTT did not arrive: p50=506.08 ms p99=507.84 ms. No allowed exception applied; final head gate still required. Compose blocked on absent switch; no UI added.Perf-VM Ctrl-C to prompt receipt, 50 real PTYs / 28 streams on the measured socket / two controlled 2 MiB/s producers, n=50 per profile, CPUWeight=100, 4 vCPU, latency_proxy RTT with +/-30 ms jitter:
150 ms p50/p99 before 154.57/198.41 ms -> after 160.16/175.34 ms. Load before 0.47/0.67/0.67 -> 2.02/0.99/0.77; after 1.66/1.29/0.93 -> 1.72/1.35/0.97.
300 ms before 334.47/366.79 ms -> after 332.15/350.39 ms. Load before 1.58/0.96/0.77 -> 3.06/1.40/0.93; after 0.62/1.06/0.97 -> 2.10/1.31/1.06. All ordered=true, snapshots=0. Server RSS KiB before/after: 150 ms 19780/19836, 300 ms 19960/18024. Daemon RSS not collected. These are raw prompt receipt, not rendered-glyph timings; n=50 p99 is max. Jitter and differing load prevent attributing every millisecond to scheduling. Logs /root/infraternal-bench/predict-auto/results/{before,after}-{150,300}-controlled.log, copied to evidence/predict-auto. Unrestricted producer fixture failed before its first interrupt; no accepted number from it.
Static gate blocker: x86 current 22539824 > max 16404816 bytes; before baseline already 22534320 (+5504 in this lane). Aarch64 current 19956216 > max 13817816 bytes. Weighted fast native fmt/clippy/tests/cargo-deny all PASS; static builds FAIL. No baseline exception applies to size. Compose remains blocked on missing implementation/design.
Partial handoff at head
8d09d557ef, pushed on predict-auto. Prediction and input/output priority are implemented, with 9 unit tests, production renderer tests, real password/alternate-screen tests and 50-PTY perf-VM receipts in evidence/predict-auto. Compose remains blocked on the absent approved implementation/per-window switch; source/design is needed from the owner/designers. No deployment.Final branch-head gate: systemd-run --user --scope -p CPUWeight=10000 env RUST_TEST_THREADS=1 CARGO_TARGET_DIR= INFRATERNAL_TEST_STATE_ROOT= TRACER_TEST_PORT=4902 scripts/verify fast; exit 1. Native fmt, clippy, tests and cargo-deny pass. Static sizes fail: x86 22539824 > 16404816 bytes, aarch64 19956216 > 13817816. The x86 baseline is already 22534320; lane delta 5504 bytes. No size exception or budget change applied. The test runner is serial because one parallel run transiently lost audit-capture events (0 vs4); that independent HTTP test passed in isolation and the serial full run. A prior GUI runtime alias caused restart path-security tests to fail; the final run uses a canonical path. Full output below is verbatim; host test durations are diagnostics, not performance evidence.
How to test: (1) normal-screen shell with OSC 133 A/B markers, type through three high-RTT samples; (2) verify Ctrl-C, read -s and alternate-screen suppression; (3) compare predict=0. The existing 0.72 opacity is unchanged; capture awaits external visual review.
Independent verification started on review-predict-auto at
8d09d557ef. Merge base with local dev:8e7467c07c(4887 changed paths); author lane base:5e383c3da8. Read #192 and parent #9 histories, contracts/decisions and report. No implementation edits, push, deployment or perf VM access. Functional verification only; performance receipts cannot be independently remeasured under this brief. Compose absence and static size failures already reported by author.Review step: R1 P2 confirmed and committed
ad845181. OSC 133 A/B followed by RIS and Password: retains safe=true; expected false. Failing test apps/tracer/test/prompt-reset-review.test.ts (0 pass, 1 fail, 2 assertions); evidence R1-red.log in predict-auto-review scratch. No implementation edits or push.Review step: R2 P2 confirmed and committed
b3b3e0a1. Interrupted CSI hides execution OSC 133 C; cancelled OSC 133 A followed by B creates safe=true. Two failing tests in apps/tracer/test/prompt-cancellation-review.test.ts (0 pass, 2 fail, 3 assertions), R2-red.log. Proceeding to production renderer verification and default-shell behavior.P1 R1 confirmed: no-echo input is speculated after RIS in the production renderer. apps/tracer/src/prompt-evidence.ts:43-51 preserves completed OSC 133 A/B evidence across ESC c. Regression establishes prediction of a, disables host echo, delivers reset, then types public fixture s; expected pendingText empty, received s. Failing test apps/tracer/test/predict-reset-review.spec.ts, committed
38e80a35. Unit reproductionad845181also fails. Evidence: R1-browser-red.log and reset-no-echo.png in $HOME/.cache/codex-scratch/predict-auto-review/browser-results/predict-reset-review-revie-effa5-side-the-prediction-overlay/. D130 no-echo safety is violated. Severity escalated from P2 to P1; counted once. Implementation unchanged.P1 R2 confirmed: cancelled OSC prompt metadata authorizes no-echo prediction in the production renderer. apps/tracer/src/prompt-evidence.ts:51-72,78-85 ignores CAN/SUB cancellation (and fresh ESC within CSI). Normal Output delivers cancelled A then standalone B with Password: and echo_input=false; no seedPrompt hook. Public fixture s enters pendingText (expected empty). Failing test apps/tracer/test/predict-cancellation-review.spec.ts committed
d019c685; two unit failures atb3b3e0a1. Screenshot/log in predict-auto-review scratch, cancellation-browser-results/predict-cancellation-revie-533fb-o-input-outside-the-overlay/cancelled-prompt-no-echo.png and R2-browser-red.log. R2 escalated from P2 to P1, counted once. Two P1 findings total; implementation unchanged.Review evidence archived at
22aa340a, evidence/predict-auto-review/README.md, raw failing logs and two production-build screenshots. Counts: P0=0, P1=2 (R1/R2), P2=0, P3=0. Existing 9 unit tests / 2089 assertions pass; strict tracer TypeScript including new regression files passes. Gate at target implementation head still running. No implementation fix or push.Review step: author real/predict-auto.spec.ts passed unchanged on retry against rebuilt x86 static binary and production tracer bundle. Durable Ack/no echoed password/alternate-screen suppression verified. First attempt failed before password assertion (overlay count 0 vs1); both receipts will be archived. No production defect attributed to the transient first failure. Confirmed findings stay P0=0/P1=2/P2=0/P3=0. Native gate passes; x86 static size reproduces 22539824 >16404816 bytes; aarch64 gate still building.
Independent review verdict: HOLD — merge after fixes (P0=0, P1=2, P2=0, P3=0).
Target:
8d09d557ef. Review branch: review-predict-auto, head5f11904f42. No implementation changes, push, deployment or perf VM access. Merge base with local dev:8e7467c07c; author lane base:5e383c3da8. The large inherited diff is not certified as a whole; verification concentrates on the author's nine-commit lane.R1 P1: RIS retains prior OSC 133 A/B evidence. A production renderer with echo disabled accepts public fixture s into pendingText (expected empty) after reset. Failing tests: apps/tracer/test/prompt-reset-review.test.ts (
ad845181) and apps/tracer/test/predict-reset-review.spec.ts (38e80a35).R2 P1: escape cancellation is not respected. Cancelled OSC A followed by B creates false evidence; interrupted CSI also hides execution OSC C. The production renderer with echo disabled again accepts s into pendingText. Failing tests: apps/tracer/test/prompt-cancellation-review.test.ts (
b3b3e0a1) and apps/tracer/test/predict-cancellation-review.spec.ts (d019c685).Evidence and screenshots: evidence/predict-auto-review/README.md, reset-no-echo.png, cancelled-prompt-no-echo.png; committed locally. Findings state: /home/kayg/.local/state/codex-jobs/infraternal/review-predict-auto/findings.md. No actual secret captured. Both findings violate D130 and are counted once each.
Validation: original unit tests 9 pass / 2089 assertions; debug-disable and echo-backoff browser specs 2 pass; author real-server password/alternate-screen spec passes unchanged on retry (first overlay-allocation failure retained). All five scheduler and four real-actor input-credit tests pass in the native gate. Separately run TypeScript gate passes: 176 tracer/UI tests plus 37 protocol tests / 34463 assertions, compilers, artifact hashes, differential oracle and transfer-byte budgets.
scripts/verify fast against the unchanged job-head implementation exits 1: native checks PASS; static sizes FAIL, exactly reproducing the author's x86 22539824 >16404816 and aarch64 19956216 >13817816 bytes. These already reported sizes are not additional findings and size alone does not determine HOLD (D205). Compose remains absent as already reported. No independent performance certification was permitted.
Completed command: systemd-run --user --scope -p CPUWeight=10000 env RUST_TEST_THREADS=1 CARGO_TARGET_DIR=$HOME/.cache/codex-scratch/predict-auto-review/target INFRATERNAL_TEST_STATE_ROOT=$HOME/.cache/codex-scratch/p192r TRACER_TEST_PORT=4913 scripts/verify fast. The first attempt's long Unix-socket path was corrected without an implementation change or baseline exception. Full raw gate output is archived at evidence/predict-auto-review/fast.log and follows verbatim. Scratch build/fixture directories will be removed after this record is posted.
Fix round started on predict-auto at base/head
8d09d557ef; clean worktree. Read all 66 comments on #192 and parent #9, D130/D214/D262 and review5f11904f. Porting only the four failing review tests (no evidence commits). Reproduce first, then audit resets, cancellation, mode and reconnect boundaries; no UI changes or deployment. Existing compose absence and static size blockers remain recorded. Task-specific push authorization applies.Reproduced review R1/R2 unchanged: 3 unit failures and both production-renderer failures (pendingText received public fixture s, expected empty). Additional failing case: CSI ! p soft reset and standard h/l modes retain evidence. Root cause is parser state handling, not RTT activation or rendering. Ported review tests only; raw red logs will be attached per D262. Audited reconnect/snapshot paths: snapshots and attachment already reset evidence; disconnect currently leaves an already-visible overlay until later input/output and needs a regression.
Completed reset boundary fix
c7aa77fc(pushed). RIS, DECSTR soft reset, standard echo/input h/l modes and private modes require a fresh A/B pair. Ported R1 review unit/browser tests; added five mode/reset cases. Tracer check PASS; 11 unit tests/2101 assertions PASS; unchanged production reset regression PASS after failing with public s before fix. No rendering change.Completed parser cancellation/validation fix
18d2c198(pushed). CAN/SUB cancel sequences; fresh ESC within CSI is recognized; aborted/overlong/non-ASCII/control-containing OSC and unsupported escapes clear ownership. Only exact supported OSC 133 A/B forms arm, B consumes A. Additional reproduced defect: Enter/Ctrl-C could finish an A buffered before submission; input boundaries now reset partial parser state. Tracer check PASS; 17 unit tests/2906 assertions PASS; reset/cancellation/disconnect production regressions PASS. Original cancellation browser expected enabled=true after unsafe output; adapted setup establishes enabled=true before invalid metadata, then asserts pendingText empty (enabled=false is valid fail-closed behavior). Correction to earlier disconnect finding: connection.resetPings already notifies undefined RTT and clears the overlay; no disconnect implementation change needed.Completed gate/fixture integration
17f5dffc(pushed). Fast gate now runs all 17 prompt/RTT tests, 2906 assertions including 1000 seeded chunk-boundary fuzz cases; tracer check PASS. Production activation/debug-disable/disconnect suite PASS. Captures now use Playwright output and attachments (D262), no evidence committed. Build-host runs are functional diagnostics only. Perf VM scanner (4 vCPU, CPUWeight100, load 0.04/0.31/0.53 unchanged, lock only during measurement): 50 MiB/sample, n20, before/after unarmed p50/p99 2.834/3.523 -> 2.725/3.872 ms; armed 5.056/5.744 -> 5.033/5.868 ms. Medians unchanged, small tail variation; native scan path retained. Production JS size vs fix-round base8d09d557: raw 1285423 ->1285775 (+352) B, Brotli 355882 ->355865 (-17) B, gzip 419493 ->419597 (+104) B. Static gate is building; final head gate and real PTY test pending.Additional parser-audit finding reproduced before fix: clearing the entire parser on Enter/Ctrl-C exposes nested OSC A/B inside an unfinished DCS/APC/PM/SOS that the renderer still treats as opaque. Failing regression input-string-red.log. Fix retains output-parser framing while clearing prompt ownership and discarding partial OSC through its terminator; 18 unit tests/2922 assertions PASS, tracer check PASS. Socket disconnect remains covered by existing RTT reset and reattachment evidence reset. Native gate is still compiling this cold target; no Rust implementation changes.
Completed input framing fix
1d9be718(pushed; clean). Tracer check PASS; 18 safety unit tests/2922 assertions PASS; six production functional browser tests PASS on final source (activation, debug disable, reset, cancellation, disconnect, rapid backspace). No visual-quality judgment; captures attached for independent review. Final bundle delta vs8d09d557: raw JS +541 B (1285423 ->1285964), Brotli +133 B (355882 ->356015), gzip +148 B (419493 ->419641). Final-source locked perf-VM scanner n20 x50 MiB: before/after unarmed p50/p99 2.539/3.285 ->2.533/3.135 ms; armed 4.940/6.240 ->5.336/6.305 ms. VM load 0.73/0.44/0.50 unchanged, 4 vCPU, CPUWeight100. Retained both rounds; small tail deltas and variable armed median do not certify renderer throughput. Safety checks retain native flood skips, no per-byte plain-output loop. Native gate is executing tests; real PTY test awaits the static binary.Final parser step
112115b6e1pushed: after an aborted/overlong OSC, ESC can start DCS/APC/PM/SOS; BEL then cannot prove framing ended. Reproduced nested A/B false evidence first, now require ST (or explicit cancellation) before new evidence. Added ten introducer/prefix cases with recovery: 19 safety tests/2942 assertions PASS; tracer check PASS; six final production functional browser checks PASS. Unchanged real-server/PTY password and alternate-screen test PASS using the built GNU development binary plus final production frontend, with separate strict real-file type check PASS. This is functional evidence, no timing certification. Final production JS vs8d09d557: raw +583 B, Brotli +163 B, gzip +150 B. Final head scripts/verify fast started; native inputs unchanged from fix-round base.Branch-head gate progress at
112115b6: 1020 native test passes, zero failures; fmt, VT fmt, compile-out, clippy and cargo-deny pass. x86 static artifact is22539824 B, exactly the independently reviewed fix-round base (delta0), but still exceeds max16404816 B. Existing static-size blocker needs the size-ratchet lane/owner resolution; no budget change here. Aarch64 still building. Real server/shim/PTY password/alternate-screen spec now also PASS on the shipping x86 static binary with final production frontend (earlier GNU-development receipt retained). No timing claims from build-host tests. Pinned WASM characterization also checked unsupported C1 CSI forms: neither raw nor UTF8 C1 entered alternate screen; ESC [ did. Soft reset is unimplemented in the pinned WASM, but the evidence parser deliberately disarms its canonical form per brief.Final test audit/step
bfb09dc8a1pushed: soft-reset family includes parameter/intermediate variants; fail closed for all CSI ! p forms. Strengthened reset tests assert before a standalone B, which otherwise independently invalidates evidence and could mask a missing boundary reset. Strengthened variant test fails before fix; 19 tests/2956 assertions and tracer check PASS. The pinned renderer currently leaves soft reset unimplemented, so this is conservative evidence handling per brief, not a new renderer claim. Full gate at preceding head112115b6 exited1 only for unchanged x8622539824 and aarch6419956216 B size budgets (delta0 each vs reviewed fix-round base). Final head fast and TypeScript gates now running with cached native artifacts. No budget changes.Fix-round handoff: head
bfb09dc8a1, pushed on predict-auto; base8d09d557ef. Six atomic commits; no deployment, dependencies, rendering or native implementation changes.Both independent P1 tests are ported and pass. RIS, soft-reset variants, private/standard modes, unsupported escapes, cancelled/malformed/overlong OSC and interrupted CSI clear evidence. Only exact supported complete OSC 133 A/B pairs arm it; B consumes A. Input boundaries discard partial markers while retaining opaque output framing. Ambiguous aborted strings require ST or explicit cancellation. Unknown extensions fail closed.
Tests: 19 safety/RTT tests, 2956 assertions; 195 tracer/UI tests, 14303 assertions; 37 protocol tests, 34463 assertions. Strict tracer and real-spec TypeScript checks pass. Six production functional browser regressions and the real shipping-x86-static server/shim/PTY password/alternate-screen test pass on the final frontend. Author checklist completed, captures attached for independent review; no visual-quality verdict.
Size against fix-round base: x86_64 22539824 B and aarch64 19956216 B, delta 0 B each (same sizes as independent review). Production JS raw +591 B (1285423 ->1286014), Brotli +58 B (355882 ->355940), gzip +165 B (419493 ->419658). No evidence files committed (D262). The issue attachment endpoint rejected .ts with HTTP422; identical benchmark sources are attached as plain text.
Final perf-VM Bun scanner diagnostic: 4 vCPU, CPUWeight100, load 0.47/0.55/0.57 at start/end, lock only during execution, n20 x50 MiB per row. Unarmed before/after p50/p99 3.417/3.637 ->3.387/3.948 ms; armed 6.613/7.234 ->7.541/9.115 ms. Observed armed p99 delta +1.881 ms per50 MiB. The fail-closed checks are needed to prevent confirmed local password disclosure; earlier rounds show variable tails and are retained. This is a Bun diagnostic, not browser/renderer throughput or keystroke-budget certification. Unchanged native priority is not remeasured: existing #192 50-PTY prompt-receipt p99 at150 ms 198.41 ->175.34 ms; at300 ms 366.79 ->350.39 ms remains the original evidence.
Final branch-head command: systemd-run --user --scope -p CPUWeight=10000 env RUST_TEST_THREADS=1 CARGO_TARGET_DIR=/target INFRATERNAL_TEST_STATE_ROOT=/pafx TRACER_TEST_PORT=4902 scripts/verify fast; exit1. Native fmt, VT fmt, compile-out, clippy, tests and cargo-deny PASS. Static builds FAIL only their inherited size limits: 22539824 >16404816 and19956216 >13817816 B. Every other row passes; no load exception or budget change applied. TypeScript gate was run separately because the dispatcher stops after the Rust failure. The superseded milestone run was stopped by its exact owned scope; the final output below is the completed branch-head run.
Remaining original blocker: compose has no implementation/approved per-window switch in this base; owner/designers must provide that source/design, as already recorded. Existing static size-budget resolution belongs to its lane/owner. No unrelated fixes or UI added. Jobs do not close issues.
How to test: normal OSC133 A/B prompt at sustained RTT predicts; reset/cancelled/opaque metadata and password input remain unpainted; Ctrl-C, alternate screen, disconnect and predict=0 suppress prediction. Build-host durations/proxy numbers in logs are functional diagnostics only.
Attachments:



review-unit-red.log
review-browser-red.log
reviewer-checklist.txt
head-fast.log
head-ts-final.log
reset-variants-red.log
reset-variants-green.log
last-head-browser.log
last-real-static.log
last-size-delta.txt
last-prompt-scan.log
bfb09dc8-prompt-source.txt
Final scripts/verify fast output, verbatim:
Independent follow-up verification started on review-predict-auto at
bfb09dc8a1; merge base with local dev8e7467c07c, author lane base5e383c3da8. Previous review branch preserved locally as review-predict-auto-prior. Continuing earlier R1/R2 findings and verifying the six fix commits. Functional tests only: brief forbids perf VM, push and deployment. Compose blocker already recorded.Review finding R3 P2 committed locally at be5ff306d95b457354c7cda117afaba454b7733e: websocket_output.rs set_active resets burst on each interactive stream change. With stream 3 oldest and streams 1/2 alternating input and replenished output, all nine dequeue turns go to 1/2; stream 3 receives none. This can repeat indefinitely despite the eight-frame sibling allowance. Failing test review_changing_interactive_stream_preserves_oldest_sibling_turn imports production scheduler; five existing scheduler tests pass, new test fails. No implementation fix or push. Previous R1/R2 unit and production-renderer regressions now pass (19 unit tests/2956 assertions; five browser checks). No P0/P1 confirmed so far.
Review step completed: R3 ordinary cargo regression reproduces (5 existing scheduler tests pass, new test fails; exit101). Final local regression SHA
c6a350fac9supersedes the earlier be5ff306 SHA after adding the normal test-only unwrap lint allowance. TypeScript compiler/transfer budget and 195 tracer/UI tests plus 37 protocol tests (34463 assertions) pass. Real server/shim/PTY/renderer password and alternate-screen test passes with rebuilt GNU development binary. Target-head native/static gate still running; no implementation changes, push or deployment.Shipping-artifact check completed on review-predict-auto at
c6a350fa(implementationbfb09dc8): real/predict-auto.spec.ts passes against rebuilt x86_64 static binary and production frontend; earlier GNU development run also passed. Target-head native workspace gate: 995 pass, 0 fail, 135 ignored; fmt/VT fmt/compile-out/clippy/cargo-deny pass. x86 static size 22539824 B exactly matches prior receipts, exceeds inherited max16404816 B; aarch64 still building. Open findings unchanged: P0=0, P1=0, P2=1 (R3), P3=0.Independent follow-up review verdict: MERGE (no P0/P1) — merge. Open counts: P0=0, P1=0, P2=1 (R3), P3=0. P2 is fixed forward under the owner verdict rule.
Target
bfb09dc8a1; local review-predict-auto headb56c110c84. Regression commitc6a350fac9; separate evidence commitb56c110c84. No implementation changes, push, deployment or perf VM use. Prior local review preserved as review-predict-auto-prior.R1/R2 previous P1 findings are repaired: 19 parser/RTT tests /2956 assertions and both production-renderer no-echo regressions pass. Five functional browser checks pass; real password/alternate-screen check passes on both rebuilt GNU and shipping x86 static binaries. Separate TypeScript gate passes: compiler/hashes/transfer budgets, 195 tracer/UI tests, 37 protocol tests /34463 assertions. Target-head native workspace tests:995 pass,0 fail,135 ignored.
R3 P2: websocket_output.rs set_active resets burst on every interactive stream change. With stream3 oldest and streams1/2 alternating input/replenished output, none of nine dequeue turns services stream3; the pattern can repeat indefinitely. Test review_changing_interactive_stream_preserves_oldest_sibling_turn in crates/infraternal-server/tests/websocket_output_review.rs imports production source; ordinary Cargo run exits101 (5 existing pass,1 new fail). Strict targeted clippy and full formatter pass.
Evidence: docs/verification/predict-auto-review.md and apps/tracer/captures/predict-auto-review/{reset-no-echo,cancelled-prompt-no-echo}.png. Durable findings: /home/kayg/.local/state/codex-jobs/infraternal/review-predict-auto/findings.md. No confidential input captured.
Merge-base diff:4893 paths against local dev base8e7467c07cd2ec1668a775a846076b278f68ef38; review concentrates on author's37-path lane from5e383c3da87336df917720021436d3d4d82d3c5d, not certification of inherited development history. Performance receipts are not independently certified because this brief forbids the perf VM. Compose absence remains the previously recorded blocker.
Target-head scripts/verify fast command: RUST_TEST_THREADS=1 CARGO_TARGET_DIR=$HOME/.cache/codex-scratch/predict-auto-review/target INFRATERNAL_TEST_STATE_ROOT=$HOME/.cache/codex-scratch/p192r TRACER_TEST_PORT=4914 scripts/verify fast. It began before the reviewer regression was added and collected only original targets. Exit1 solely for inherited static size limits:22539824 >16404816 bytes;19956216 >13817816 bytes. Sizes exactly match earlier independently reviewed8d09d557 (native repair-set delta0). No baseline exception or budget change; D205 says size alone does not block merge. TypeScript ran separately to completion because Rust failure stops the dispatcher. Review branch intentionally retains the failing R3 test. Scratch targets/fixtures will be deleted after this record is posted.
Verbatim new regression result:
Verbatim target-head scripts/verify fast output (host durations are functional diagnostics, not performance evidence):
R3 repair started on predict-auto at base
bfb09dc8a1. Read #192 and parent #9 history, repo contract/process, D130/D214, research and local reviewb56c110c. Scope only bounded sibling output across interactive-stream switches. Will portc6a350faregression, add rapid multi-stream alternation coverage, and preserve input priority/order/access checks. No evidence committed (D262); no deployment.R3 reproduced before fix against production websocket_output.rs with rustc --test using built Tokio: 5 existing pass, reviewer nine-turn regression and new six-stream alternating-input regression both fail. Minimal repair retains burst across active-stream switches and renews it only on an oldest-frame dequeue. Both now pass (7/7). No extra allocations/state; earliest per-PTY frame still selected. Every accepted queued frame gets a turn within 9*capacity dequeues (production capacity4 =>36), regardless of input switches; not a wall-clock claim. Ordinary Cargo and per-commit gates pending cold build. Evidence logs will be attached per D262.
R3 scheduler repair completed and pushed at
fe9ac5b256. Ported independentc6a350faregression. Cargo before:5 pass,2 fail (including upcoming multi-stream test); after:6 pass,0 fail. Workspace fmt and server --all-targets clippy -D warnings PASS. Burst now counts overtakes and survives input switches; only oldest-frame service resets it. Bound36 dequeues with production capacity4. No wire/access/input-loop changes or allocations. Six-stream rapid-input regression is the next separate test commit.Multi-stream regression completed and pushed at
e0c266df8e. 6 PTYs x2 queued frames,3 interactive streams,2 input switches/dequeue,1080 output turns: every stream served within108 dequeues; exact per-PTY sequence order preserved. Cargo7/7 PASS (both new regressions failed before repair); server all-targets clippy -D warnings and fmt PASS. Final head scripts/verify fast next. Size baseline is independently reviewed bfb09dc8:x8622539824 B,aarch6419956216 B; unchanged frontend.Head
e0c266df8efull gate progress: fmt, VT fmt, CLI compile-out, workspace clippy, native tests and cargo-deny PASS. Native totals 1027 pass,0 fail,135 ignored (includes compile-out checks). Both static builds still pending. Separate TypeScript compiler/hashes/transfer-byte gate and 195 tracer/UI tests with14303 assertions PASS; differential protocol tests await Cargo lock. Seven scheduler tests passed per-commit; ordinary Cargo red log and both passing commit logs uploaded as issue attachments. No baseline exceptions, timing claims, further source changes or deployment.R3 size finding at
e0c266df: stripped static x86_64 musl binary is22539952 B, +128 B versus independently reviewed repair base bfb09dc8(22539824 B); +5632 B versus original lane base5e383c3d(22534320 B). It still exceeds inherited maximum16404816 B. No dependencies, layout fields or allocation added; D205 applies, no budget edits. Native gate1027 pass/0 fail/135 ignored; all TypeScript checks195 tracer/UI +37 protocol pass. Aarch64 static build ongoing. Final exact gate log and size receipt will be attached perD262.R3 repair finished at head
e0c266df8e, pushed on predict-auto. Repair base:bfb09dc8a1. Two atomic commits:fe9ac5b2scheduler repair + portedc6a350fareviewer regression;e0c266dfrapid multi-stream regression. No deployment or other scope changes.Burst allowance survives interactive-stream changes and resets only when the oldest frame is served. At most eight overtakes between oldest-frame turns guarantees every queued frame a turn within 9 × capacity output dequeues (production capacity 4: at most 36). Input/Ctrl-C priority, per-PTY ordering, access checks and capacity are unchanged; no new state or allocations. This is a dequeue guarantee, not a new wall-clock performance claim.
Tests first: ordinary Cargo baseline gives 5 existing passes and both new regressions fail. Repaired head: 7 scheduler passes, including 1,080 turns with six perpetually queued PTYs, three interactive streams and two input switches per turn; exact PTY sequence order checked. Each commit passed workspace fmt, server all-targets clippy -D warnings and its tests. Full head native checks: 1,027 pass, 0 fail, 135 ignored (including compile-out checks). Separate TypeScript gate PASS: compilers, hashes, transfer-byte budgets, 195 tracer/UI tests / 14,303 assertions and 37 protocol tests / 34,463 assertions. Author checklist attached. No baseline exception used.
Static size versus independently reviewed repair base
bfb09dc8(baseline receipt, not rebuilt here):Frontend unchanged. Existing maxima 16,404,816 / 13,817,816 B remain exceeded; no budget changes (D205). Original-lane x86 base
5e383c3dwas 22,534,320 B, whole-lane delta +5,632 B.Final command: systemd-run --user --scope -p CPUWeight=10000 env RUST_TEST_THREADS=1 CARGO_TARGET_DIR=/home/kayg/.cache/codex-scratch/predict-auto-r3/target INFRATERNAL_TEST_STATE_ROOT=/home/kayg/.cache/codex-scratch/p192r3 TRACER_TEST_PORT=4932 scripts/verify fast
Exit 1 only for existing static size limits. Complete output is attached verbatim as head-fast.log; its final summary verbatim:
D262: no evidence files committed. Build-host test durations in logs are functional diagnostics, not performance evidence. Job scratch targets/fixtures will be deleted after this comment. No issue closed.
How to test: cargo test --locked -p infraternal-server --test websocket_output_review. Both starvation regressions fail on the repair base and pass on this head.
Attachments:
red.log
step1-tests.log
step1-clippy.log
step2-tests.log
step2-clippy.log
head-fast.log
head-ts.log
size-delta.txt
reviewer-checklist.txt
Independent R3 verification started on local review-predict-auto at
e0c266df8e; merge base with local dev is8e7467c07c. Prior review preserved as review-predict-auto-r3-prior (b56c110c). Read #192 and #9 history and author report; checking repair against existing failing regressions plus independent scheduler invariants. No implementation changes, push, deployment or perf VM. Performance receipts remain unverified under the brief. Full fast gate and separate TypeScript checks will run on the target.Independent verification of
e0c266df: 19 parser/RTT tests pass (2956 assertions); five production-renderer functional checks pass (automatic activation, debug disable, cancellation, reset, disconnect); seven production scheduler tests pass, including both R3 regressions. Recompiled the same scheduler tests againstbfb09dc8in scratch: the two R3 regressions fail (exit101); current source passes (exit0). An additional external per-frame identity/order/progress check passes over capacities1/2/4/12 and12000 output turns. No new confirmed findings so far. Native clippy passes; full native/static gate continues. The first separate TS build collided with this review browser build in the shared dist; rerun serially, no product finding attributed. No push, deployment, implementation changes or timing certification.Verification update at unchanged
e0c266df: first full native run fails only auth::tests::socket_tests::review_liveness::review_mesh_watch_reports_liveness_expiry_without_another_edit at review_liveness.rs:51 (initial snapshot live:Null, expected true). Exact ordinary Cargo isolated test passes unchanged,1 pass/0 fail. No exception applied; full cached fast gate will be rerun after initial static builds. Rapid backspace browser check passes. Broader normal-screen/mismatch spec first failed during preparePrediction after alternate-screen exit (enabled:false), then passed unchanged in isolation; direct fixture seed versus pending mode-exit ordering is not attributed to production source. Both initial and retry receipts will be preserved on #192. Separate TS frontend/compiler/budget195 tests14303 assertions passed; protocol oracle previously timed out while Cargo builds overlapped and will rerun after build locks clear. No new confirmed findings, implementation changes, push or deployment.Independent shipping-artifact verification at
e0c266df: real/predict-auto.spec.ts passes unchanged on rebuilt x86 static binary with production frontend; automatic overlay, durable password Ack/no echoed password/hidden overlay and alternate-screen suppression pass. GNU attempt passed activation/password assertions but failed to observe the next alternate-screen command immediately after Ctrl-C; receipt retained, not called a complete GNU pass. Static x8622539952 B matches author and is +128 B versus prior independently reviewedbfb09dc8receipt. No performance claim. Initial gate still building aarch64; second full cached target-head fast run started (port4926) to resolve initial native mesh-liveness failure without exception.Independent review step committed locally at
99a2fd6948: added review_each_accepted_frame_has_bounded_progress_across_capacities, tracking frame identities/FIFO/dequeue-age at capacities 1/2/4/12 for 12,000 turns and draining after producer closure. Ordinary Cargo scheduler suite: 8 pass, 0 fail; workspace fmt and strict targeted clippy PASS. Imported production scheduler, no implementation change. Target-head full cached fast gate: 1,027 pass, 0 fail, 135 ignored; every Rust row PASS except inherited static size limits. Final separate TS gate PASS: 195 tracer/UI tests / 14,303 assertions and 37 protocol tests / 34,463 assertions. Previous R1/R2/R3 resolved; open counts P0=0, P1=0, P2=0, P3=0. No push or deployment. Final verification record next.Independent review supporting receipts for
e0c266df; local review heada5fbb28e33. Final native cached gate has 1,027 passes, zero failures and 135 ignored. The initial failures below are retained without being called passes. No baseline exception or implementation change. Build-host durations and proxy numbers are functional diagnostics, not performance evidence.Initial full gate (superseded by the completed cached rerun) (head-fast.log):
Exact isolated mesh-liveness retry (liveness-isolated.log):
Initial frontend build collision (ts-gate.log):
Protocol oracle attempt overlapping Cargo builds (ts-gate-serial.log):
Final serial TypeScript gate (ts-gate-final.log):
Production-renderer safety/activation checks (browser.log):
Initial broader renderer setup and rapid backspace (browser-editing.log):
Unchanged isolated normal-screen/mismatch retry (browser-normal-retry.log):
Incomplete GNU real-server attempt (real-gnu.log):
Complete shipping-static real-server check (real-static.log):
Repair-base scheduler regressions (expanded-before.log):
Repaired-source scheduler comparison (expanded-standalone.log):
Final ordinary Cargo scheduler suite (review-cargo.log):
Final strict targeted clippy (review-clippy.log):
Independent verification verdict: MERGE (no P0/P1) — merge.
Open counts: P0=0, P1=0, P2=0, P3=0. Previous R1/R2/R3 are resolved; no new confirmed findings.
Reviewed target
e0c266df8e. Local review-predict-auto head:a5fbb28e33. Atomic local commits:99a2fd6948(independent per-frame test) anda5fbb28e33(verification record). No implementation fix, push, deployment or issue closure.The two R3 regressions fail against
bfb09dc8and pass at the target. Added per-frame identity/FIFO/progress/closure coverage at capacities 1/2/4/12 over 12,000 output turns; ordinary Cargo has eight scheduler passes, fmt and strict targeted clippy pass. This verifies a dequeue bound, not wall-clock latency. Production capacity four bounds accepted output frames to 36 output dequeues.Functional checks: 19 parser/RTT tests with 2,956 assertions; five production-renderer activation/safety checks; rapid backspace and unchanged isolated normal-screen/mismatch check; complete shipping-static real-server/shim/PTY password and alternate-screen test pass. Final separate TypeScript gate passes: 195 tracer/UI tests / 14,303 assertions, 37 protocol tests / 34,463 assertions, compiler/hashes/transfer-byte budgets and differential oracle.
Final target-head fast gate: 1,027 native passes, zero failures, 135 ignored. Earlier mesh-watch initial-snapshot failure passes unchanged in both the exact isolated Cargo retry and this full rerun. No baseline exception. Initial frontend-build collision, protocol Cargo-lock timeout, broader renderer fixture-setup failure and incomplete GNU alternate-screen command check are preserved in the supporting-receipts comment; no complete GNU pass or additional product defect is claimed. The shipping-static complete check passes.
Static sizes match the author: x86_64 22,539,952 B (+128 versus prior independently reviewed
bfb09dc8receipt); aarch64 19,956,088 B (-128). Inherited maxima 16,404,816 / 13,817,816 B are still exceeded. D205 applies; no budget changes. Review commits add only tests/documentation and no shipping source/dependency changes.Scope: merge base with local dev
8e7467c07c, 4,894 changed paths; author lane from5e383c3da8has 38 paths. This continues the prior author-lane review and verifies R3, not the entire inherited development history. Perf VM use is forbidden by this brief; performance claims and the latency budget are not independently certified. Compose remains the already recorded missing implementation/design scope.Evidence: docs/verification/predict-auto-review-r3.md; durable finding state: /home/kayg/.local/state/codex-jobs/infraternal/review-predict-auto/findings.md. Prior local review preserved as review-predict-auto-r3-prior (
b56c110c). Scratch builds/fixtures will be deleted after this record.Final target-head command (completed before the added review test):
systemd-run --user --scope -p CPUWeight=10000 env RUST_TEST_THREADS=1 CARGO_TARGET_DIR=/home/kayg/.cache/codex-scratch/predict-auto-review/target INFRATERNAL_TEST_STATE_ROOT=/home/kayg/.cache/codex-scratch/p192r TRACER_TEST_PORT=4926 scripts/verify fast
Exit 1 solely for inherited static size limits; every other Rust row passes. TypeScript was run separately because the dispatcher stops after Rust failure.
Verbatim complete scripts/verify fast output (host durations are functional diagnostics):
kayg referenced this issue2026-10-28 17:53:55 +00:00
kayg referenced this issue2026-10-28 17:53:56 +00:00