S1 integration: merge tracer lanes into dev, deploy to monitor01 #34
Closed
opened 2026-10-06 15:42:36 +00:00 by kayg
·
95 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#34
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?
Integration: merge the S1 tracer lanes into
dev, then deploy to monitor01.Order and gates:
6c64ede, gate green; the LF budget is met only with vt-ghostty.After each merge, run
scripts/verify faston the merge result. Then deploy to monitor01 (~/.local/bin/infraternal, user unitinfraternal-server) and post the "how to test" note.Owner action still open: the DNS A record
infraternal.kayg.org → 10.69.69.50(#6).What lives where on monitor01 (checked 2026-10-06, user kayg). A fresh deploy wipes the data directory only.
~/.local/bin/infraternal~/.local/share/infraternal/infraternal.sqlite~/.local/share/infraternal/setup-token.sock~/.local/share/infraternal-web/~/.config/systemd/user/infraternal-server.service$XDG_RUNTIME_DIR/infraternal/sessions/*.sock(/run/infraternalwhen root)/opt/infra/traefik/dynamic/infraternal.ymlOutside the server: the passkey itself lives on the owner's device (iCloud Keychain). After a wipe, delete the old "infraternal.kayg.org" passkey in the Passwords app, or the browser may offer a passkey the server no longer knows.
Not yet on disk (future slices): the internal CA and mTLS certificates for remote infraternal agents (D64), and plugin data.
After merging t-server, extend the idle canary (scripts/idle_canary.py from t-agent
48d7bab) to the long-running server process. Currently only the infraternal agent and shim are measured.Starting integration on dev at
8e0c5c2(t-agent already merged). Following the job order: t-servere4809d4, exact t-web845c293, t-web-auth58040df; each merge gated before the next. No push or deploy. docs/PROCESS.md is absent; supplied process rules apply. Reading #28 history and retaining prior integration/replay limitations until real merged-build evidence resolves them.Finding: server writer identities (websocket.rs) conflict with t-agent daemon.rs: AttachTerm rejects a second stream for the same session (line 186), and terminal forwards the session-wide shim written Ack (line 303). Multi-device acceptance therefore requires a reproduced integration fix. Additive contract proposal: negotiate a new shim capability and writer-select frame keyed by the stable leg-B writer id; retain independent accepted/written cursors and multiple bounded viewers in the surviving shim. Keep caps-zero and sequenced-input v1 frames unchanged; no new engine/library. Existing 120s browser-writer authority boundary remains.
Real-binary reproduction: first writer reaches Ack 23; attaching writer 2 to the same PTY exits leg B with terminal stream already attached or limit reached. First merge gate also caught one startup scheduler activation in 2.201s; isolated unchanged daemon rerun passed with 24 abrupt restarts and 4,710,396 exact replay bytes. Full gate rerun required; no idle threshold change. Another integration gap: tracer TerminalClient keeps session_id only in memory (terminal.ts), so browser reload creates a new PTY rather than reattaching. Will retain only a nonsecret session id scoped to the authenticated user; replay authority remains in memory.
Completed t-server merge
f5ea2c9(parents 8e0c5c2/e4809d4). Required fast gate exit0: fmt/clippy/test/deny/static PASS; protocol7/7, 34390 assertions, 134 streams/11439 schedules/zero divergences. Three conflicts resolved additively (main real daemon+synchronous shim+server CLI, both Cargo dependencies, both wire flow-control clauses). Startup fixture correction preserves zero steady-state activations. Real daemon24 crashes/4710396 bytes exact; fresh static server0 activations/10.002s. Exact t-web845c293 now merges without conflicts; its gate is running.Completed exact t-web845c293 merge
9e82c28: no conflicts, required fast exit0/all Rust rows PASS; pinned vendor hashes valid; protocol7/7/34390 assertions/zero differential divergences. Production tracer builds. t-web-auth58040df now merges without conflicts (mock-server.ts auto-merged); third merge gate running. No newer t-web tip used.Completed t-web-auth58040df merge; all three ordered merge results passed the required fast gate before the next merge. Auth merge had no conflicts; tracer check/build pass; native Chromium149 auth gate4 isolated scenarios PASS. Continuing real PTY multi-writer, reload persistence and merged static-browser evidence. No push/deploy.
Codec step
e3c6d09adds negotiated shim capability bit1 and SelectWriter(u32)/0x1b; existing v1 layouts unchanged. fmt/workspace clippy/shim tests PASS. Next step: shim per-writer queue accounting plus concurrent viewer pump. Native auth gate4/4 passes at merged client auth6f4214e; third merge fast exit0.Shim step completed: independent surviving cursors (512 writer identities + legacy0), bounded32 viewers and last-typist size [74]. Direct real-shim probe writer2 Ack30 / writer4 starts0 then30; writer2 reconnect retains30 and duplicate replay trimmed. fmt/workspace clippy/unit shim/seven real-PTY integration tests PASS. Agent integration follows; no process-local acceptance authority.
Multi-device leg-B/real-shim oracle now PASS: first Ack45; device2 starts0; two viewers receive37 exact bytes and full-range replay after daemon SIGKILL does not duplicate input. Existing24-stop/4710396-byte oracle also passes. Shim
de73267; writer helper1ea6b8a; subsequent daemon/canary commits recorded in dev history. Production browser first-open repro FAILS at merged static binary: browser sends ssh.session.open {} but server accepts only terminal.open dimensions; legB server omits uid and returns32hex while client expects canonical UUID. These additional cross-lane schema mismatches need adapters, preserving both existing contracts; no new transport/library.Additional schema regressions reproduced before fixing: real legB Call contains cols/rows/px_w/px_h but required uid is absent; canonical agent UUID Result rejected. Both red tests now pass via embedded adapter1468776. Existing actor gate7/7:511 healthy readers/102200 events p50<1us/p994us, load2.45/5.11/7.85. LegA adapter preserves terminal.open and adds tracer ssh.session.open default embedded host; explicit remote host requests fail closed until inventory/plugin routing exists. Browser replay/reload run now uses the rebuilt debug binary to reach the next boundary before final static build.
Browser action adapter01ce197: server56 tests pass/3 existing measurements ignored, full authority guards shared by both action names. Rebuilt debug production-browser test now creates/types real PTY successfully, then fails with reload opened a new PTY (retained red log). Terminal restore APIb768bf4 passes strict TypeScript/build; main-module fix retains only public per-user/tab session id and puts it in a shareable session URL for another authenticated device. No resume tokens or queued input persisted. Per-file/module adapter history kept atomic.
Real latency finding (fresh native auth + real backend WS/PTY, event-driven500 keys, 3 attached viewers): debug p50=48.021ms/p99=68.082ms, fails D41 5ms overhead. runtime.rs plain proxy listener lacks TCP_NODELAY; axum-server TLS acceptor already sets it. Adding the same policy to accepted plain sockets, preserving the server engine. CDP-intercepted and incomplete380-key paint runs are invalid timing evidence and excluded. Fixture now uses native TLS/WebSockets with certificate only in pipes/memory, full500 echoes and numeric resume; no TLS-key file. Ten-second no-session/shared-idle server observations are0; a620s canary is checking SQLx periodic housekeeping.
Retained real-engine regressions:
04c140fadds two simultaneous PTY writers, independent Acks, identical exact output, and full acknowledged-range replay after daemon SIGKILL; agent_review: 4 passed in 47.41s.a1eeaf6retains the two real embedded actor regressions that failed on uid/dimensions and UUID spelling before the boundary adapters; server suite: 56 passed, 3 ignored.5926049matches the existing TLS acceptor with TCP_NODELAY on the plain proxy listener. Same real 500-key debug echo: before p50/p99 48.021/68.082 ms; after 3.705/12.033 ms. Optimized static budget verification remains pending.1d2fc98measures the full 32-peer shim limit: 32 writers/viewers x 200 distinct inputs, independent Acks, identical exact output, 6400 inputs / 614400 delivered bytes in 0.804s; daemon RSS 13764 KiB, x86_64 / 8 cores, load 4.14/5.21/6.14.3fd35e7pins additive writer framing and partial-write accounting; shim tests 17 passed, 5 ignored. Strict clippy literal correction is65f5b29.ba6a560retains real PTY geometry evidence for decision 74: simultaneous 80x24 and 120x40 viewers, stty size reports 24 80 after device A input and 40 120 after device B input, visible to both viewers; real Rust-launched regression passes in 0.17s. The merged x86_64 binary is static-pie, no PT_INTERP, 15063104 bytes. Native browser acceptance is moving from debug to that optimized binary; 620-second idle observation is approaching the default SQLx 600-second reaper boundary.Failing idle oracle before fix: fresh static server, no sessions or requests, 620.001 seconds; idle_canary reports 4 scheduler activations on tokio-rt-worker tid 3058434. SQLx 0.8.6 pool/inner.rs installs a maintenance task at min(idle_timeout,max_lifetime); runtime.rs uses defaults 600s/1800s. Ten-second samples missed this. Proposed bounded fix: keep max_connections(8), set both lifetime/idle timeouts to None for local SQLite; reject polling/reaping and retain the zero-activation threshold. No engine/dependency change. Evidence: .codex-integration/server-idle-long-red.log.
Fast-gate finding: the old 12-session queue oracle prepared every session on writer 1, then replayed writers 2..12 using writer 1 Ack. Independent writers correctly refuse that gap. Updated the oracle to start new writers 2..12 at zero while preserving writer 1 and each overload/replay identity; unchanged real saturation assertion now passes: 12 streams x 65 replay frames, 2640000 payload bytes exactly once, dead-shim isolation and daemon Ping. This is fixture compatibility with #28, not relaxed queue bounds. The first aggregate gate also caught a pedantic literal lint already corrected in
65f5b29.Production acceptance PASS on merged static binary + built tracer: native WebAuthn setup/sign-in, real PTY, reload same public session, two separately signed-in device contexts, first writer Ack10 then second Ack0, exact shared input, logout socket revocation. All 500 painted echoes: p50/p95/p99 15.00/15.60/15.90 ms; resume 94.70 ms. Isolated 500-key real leg-A/server/daemon/shim/PTY echo: p50 0.968 ms, p99 1.713 ms (<5 ms). Browser renderer/proxy contention was excluded from this latter server-overhead measurement; earlier concurrent 3-viewer samples remain recorded (debug p99 12.033 ms, static loaded p99 15.121 ms). Static server canaries: 0/10.001s without session and 0/10.001s with two-viewer idle PTY, RSS 11452/15364 KiB.
724fc33disables only SQLite periodic reaping, retaining 8 connections; 620s static retest running. Safe production screenshots preserved in target/integration-evidence/screenshots/; no recovery words or capabilities captured.Idle fix and contract steps:
724fc33retains the eight-connection local SQLite pool with no idle/lifetime reaper; five runtime tests pass (0.80s), optimized x86_64 rebuild passes.a3c6224retains the request-free 620s server canary (zero-activation short smoke 10.001s); the full static observation is running.2a659a6documents the previously proposed additive shim capability, writer/peer/queue bounds and legacy browser plus trusted leg-B action adapters; preserves all legacy fields and the longer-drop capability gap. No new foundational library or engine was selected.Static capacity proof (70a0 pending exact SHA in next step): 32 simultaneous writers/viewers x 200 inputs = 6400 real PTY-write Acks; p50/p99 0.473/2.825 ms, 19200 exact bytes per viewer / 614400 delivered bytes, 0.413s. Daemon RSS 6212 KiB; shim RSS 9732 KiB. x86_64, 8 cores, load 3.92/3.30/4.64. The first optimized scale probe saturated the intentional eight-command queue by refunding every tiny output frame; initial 1MiB credit already covers 19200 bytes, so the retained probe now uses that bounded window instead. No production queue bound or assertion was relaxed. These are 32 live peers on one shared PTY, not an extrapolation to 512 live sessions.
The exact static capacity-probe commit is
62dedf0(the previous comment included an unintentional pending-SHA placeholder). It records all 6400 Ack timings and both RSS values with the unchanged 32-viewer exact-output assertion. The request-free static idle observation is past four minutes with its final 620-second result still pending. Final aggregate Rust tests, including retained multi-writer, queue saturation and geometry regressions, now pass; final ARM static rebuild is finishing.Long no-session static canary PASS after
724fc33: 0 scheduler activations / 620.004s, x86_64 / 8 cores, load 4.07/3.53/4.25; before fix 4 / 620.001s. Two-viewer production-browser 620s idle canary is still running.412bd39adds writer-frame fuzz seeds: sanitizer/libFuzzer completed 1138785 executions in 61s, no crash, final coverage 567 / features 1599. Static daemon crash/latency evidence: all 24 stops / 4710396 bytes exact; 1000 real PTY-write Acks p50/p99 150.053/337.246 us. Alacritty flood exceeds the old 20s diagnostic window; dedicated nonblocking throughput report follows. Final fast gate is green and native auth gate passes 4 isolated scenarios.Alacritty credited flood (nonblocking as requested): 52429168 bytes in 28.763s = 1.738 MiB/s, no Snapshot/raw-output loss, daemon RSS 6068 KiB; x86_64, 8 cores, load 16.29/7.23/5.48 with unrelated concurrent builds. The earlier combined probe timed out at its 20s flood observation; the separate retained diagnostic reports actual throughput with a bounded 120s observation and no throughput-budget relaxation. No engine change. Extra per-byte payload validation is now running before committing that diagnostic.
The retained flood diagnostic additionally validated every 50MiB payload byte: 52429019 total bytes / 57.210s = 0.874 MiB/s, daemon RSS 6048 KiB, load 33.87/17.07/9.37 on the eight-core host. Both loaded-host samples are retained. Host load rose substantially due to unrelated jobs; these are actual Alacritty/protocol observations, not pinned-VM renderer numbers. New diagnostic remains nonblocking and makes no engine or budget change.
Long open-PTY red oracle: native production devices reconnect every 30 seconds; 7761 server scheduler activations / 620.002s. websocket.rs receive_wire starts MESSAGE_TIMEOUT while receive is empty, so a healthy silent socket is closed repeatedly. Contract proposal before change: authenticated empty-buffer waits should have only event-driven authority expiry/revocation, preserving 5s Hello/Resume and partial mux-frame deadlines, 1s writes, 16/user and 256/global permits, and 4MiB message/frame bounds. No wire field or engine changes. Axum exposes reassembled messages, so unseen post-Hello RFC fragments retain size/permit/authority bounds rather than the old idle-read 30s timer; that exact boundary must be explicit in the draft contract and review. The 30s liveness rule cannot coexist with required zero idle scheduler activations without transport progress instrumentation. Retain a real >30s socket regression plus existing partial-frame/revocation gates; repeat long native canary after the fix.
29fcb05removes only the empty-buffer authenticated read timer;80ecde1retains the real >30s regression that failed first and the unfinished-RFC logout regression (0.78s). Six socket tests pass, one release benchmark ignored; strict server clippy passes. Existing partial mux-frame completion, pre-Hello admission/deadlines and revocation remain green. The explicit RFC-fragment policy proposal is now reflected in the draft contract. Browser gate initially could not start because another job owns localhost:4173 (PID3100607); test-only TRACER_TEST_PORT isolates this job at4391, without stopping that process. Found inherited onboarding screenshots unmasked browser-generated recovery words; removed this job capture files and masked recovery-grid/setup-token fields before the next gate.Browser gate on isolated port4391: 12 passed, 2 performance failures on the loaded host (500-key paint p99 64.2ms vs20ms; setup render p99 1151.4ms vs1000ms, actual FCP p99 541ms). All ten pinned renderer fixtures including full behemoth/mixed/binary survive and paint canaries. Host load ~29-35 on 8 cores with unrelated Rust/OpenSSL/VT jobs. Thresholds are unchanged; final rerun will use the corrected privacy masks and stable assets. Final fast gate is currently exercising four real 12MiB tiny-credit floods and rebuilding the socket-idle fix. New real native fixture snapshots its production assets so separate builds cannot invalidate its ceremonies.
Final fast gate with
29fcb05idle-socket fix passes: fmt/clippy/test/cargo-deny/static builds all PASS; protocol 7 pass /0 fail, 34390 assertions and 11439 differential schedules. Fresh fixed production no-session and two-device open-PTY 620-second canaries are running (past six minutes). Browser gate with privacy masks: all renderer/auth/functional cases pass, same two timing failures remain under ~20-35 load on 8 cores; thresholds unchanged. Waiting for a quieter measurement window before the required final browser gate. No push or deployment.Awaiting a quiet CPU measurement window from the orchestrator for the final browser timing gate: current 8-core host load20-35, two repeated full suites pass all12 functional/renderer cases but fail unchanged20ms paint and1s render budgets. No unrelated process was stopped. Long fixed-production idle observations and independent review continue while the resource question is pending. Test-only port isolation, privacy masks and fresh-probe tab state are committed as separate logical steps; strict tracer check passes.
Main-dispatch self-review: the inherited t-agent arm still constructed a current-thread Tokio runtime directly in main.rs. It was fork-safe (shim execs a separate synchronous process), but the job explicitly requires the CLI runtime only in the server arm. Move the unchanged daemon reactor into an additive blocking infraternal-agent entry point and call it from the agent arm; preserve synchronous shim dispatch and the existing async daemon API. No protocol/engine change. Real daemon regression and strict clippy will gate each module step.
Steps
19379a7/506e1f5: synchronous host-daemon library entry point and separate CLI caller commit; main constructs a runtime only in the server arm, preserving synchronous shim forks [9][13]. Workspace all-target clippy passed (4.29s); real binary 24-stop regression passed (11.76s). Final fast gate rebuilding both static targets. Open-PTY long idle remained connected but counted one activation / 620.004s; timestamp diagnostics added, zero threshold unchanged, investigation continues.Step
c0686ac: optional timestamped positive-activation events in scripts/idle_canary.py, strict zero threshold and default API unchanged. Actual 1Hz SIGALRM child yielded two events at 0.908s and 1.913s over 2.200s. Long native two-viewer canary running with events; isolated wake still under investigation. Final full browser gate needs a quiet CPU window; functional and renderer checks pass, unchanged paint/render timing budgets failed under competing builds.Final fast gate PASS at
c0686ac(exit 0), including 134 streams / 11439 differential schedules / zero divergences and both static binaries without PT_INTERP. x86_64: 15,065,920 bytes. Full verbatim output retained for finish comment. Our compiler work is complete; rerunning all 14 Playwright cases on isolated port 4391 with unchanged timing budgets. Fresh final static no-session native canary: 0 / 10.005s. Long shared-PTY observation running after explicit post-auth startup settling.Finding: timestamped shared-PTY canary counted exactly one activation at 273.991s / 620.015s (tokio worker tid 3382815), both native viewers remained connected. This rules out the guessed ten-second blocking-worker retirement; startup settling is not a fix. Investigating long-lived socket-expiry timer/driver wheel, preserving expiry and revocation enforcement and strict zero threshold. Evidence: .codex-integration/browser-idle-events.log.
Finding: the second idle wake moved to 264.405s when startup settling increased by 11s, ruling out settling as a solution. Native fixture now closes its initial Bun health HTTP connection explicitly and asserts procfs established backend count 0 before no-session observation, exactly 2 before shared idle (the intended WebSockets). Production source unchanged. Controlled fresh-server/no-auth pooled-health reproduction running for 310s to verify the late EOF. Third full browser suite: 12/14 pass, both unchanged timing gates fail at host load ~27; quiet CPU window required from orchestrator, no unrelated processes changed.
Browser timing blocker evidence: third full 14-case run passed all 12 functional/renderer cases; paint p99 38.7ms vs 20ms, setup screenshot-confirmed render upper bound p99 1189.4ms vs 1000ms (actual FCP p99 527.3ms). Host load 27–28 on 8 cores; 2s procfs CPU sample: 83.7% user, 16.1% system, 0.0% idle. No test thresholds/cases/samples relaxed. Corrected health-closed long idle window running; retained native fixture now completes logout/raw-echo functional checks before reporting any timing-budget failures, still exits nonzero on every budget failure.
Controlled idle finding confirmed: a fresh static server with no auth/PTYS and only a default Bun startup health fetch retained one established HTTP connection. Canary observed exactly one activation at 299.091s / 310.007s; established connections became zero. Native fixture now explicitly closes that probe before observation (0 connections, then exactly 2 intended WebSockets). No production timers changed for this fixture EOF. Latest short native run at load 28 failed 500-key completion after Ack129, then repeated pre-Ack reconnects; investigating with safe close-code diagnostics, not treating this as a passing or merely slow run.
Long idle proof on final x86_64 static: zero scheduler activations / 620.002s with exactly two authenticated WebSockets and shared idle PTY; no-session 0 / 10.008s (independent fresh-server 0 / 620.002s previously). Controlled pooled-health test reproduced one EOF wake at 299.091s / 310.007s, eliminated by fixture Connection: close. Long native UI completed all 500 keys, p50/p99 27.70/86.20ms, resume 141.00ms; paint budget failed at load 22.8/19.95/19.39. Server idle and byte completion proved; loaded-host performance remains blocked.
Final-static native functional acceptance PASS with retained fixture: real owner setup/sign-in, typing/output, same-session reload, independent signed-in device cookies, fresh B Ack0 after A Ack10, exact shared input, B logout/socket revocation, all 500 painted echoes and 500 exact isolated raw echoes. Per-browser paint p50/p99 15.00/62.30ms; resume 156.10ms; isolated server p50/p99 1.015/19.920ms. Timing budgets remain FAIL under competing workload; no weakening. Native fixture finishes device logout then measures one active frontend, and reports all timing failures at end. Production screenshots preserved in target/integration-evidence/screenshots.
Steps
0f4e830/acf83c7: retained native merged-build fixture and separate integration evidence docs. Fixture closes/fences startup health sockets, freezes built assets, keeps secrets in memory/pipes, finishes full native functional acceptance before collecting every timing failure. Native functional PASS; shared idle 0 / 620.002s; long no-session 0 / 620.002s. Docs retain all failed samples, 32-peer numbers, crash/fuzz/flood evidence and 120s writer-capability boundary. Re-running fast at final headacf83c7a06. Completion remains blocked on quiet CPU window for required timing gates; no push/deploy.Fast gate at dev
acf83c7a06: PASS (exit 0). Command: nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl -c scripts/verify fast. Verbatim output, part 1/4:Fast gate at dev
acf83c7a06: PASS (exit 0). Command: nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl -c scripts/verify fast. Verbatim output, part 2/4:Fast gate at dev
acf83c7a06: PASS (exit 0). Command: nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl -c scripts/verify fast. Verbatim output, part 3/4:Fast gate at dev
acf83c7a06: PASS (exit 0). Command: nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl -c scripts/verify fast. Verbatim output, part 4/4:Final complete browser gate at dev
acf83c7a06: FAIL (12 passed, 2 timing failures; exit 1). Command: cd apps/tracer && TRACER_TEST_PORT=4391 bun x playwright test. Verbatim output, part 1/1:Checkpoint / blocked handoff at dev
acf83c7a06. Final fast PASS (exit 0), complete output quoted above in four parts; final full Playwright FAIL (12 passed, 2 timing failures), complete output quoted above. Native static full functional acceptance PASS; both long idle conditions 0 / 620.002s; latest 500-key paint p50/p99 15.00/62.30ms, resume 156.10ms, isolated echo 1.015/19.920ms. Required quiet CPU window must come from orchestrator; timing budgets and all cases unchanged. Two loaded native retry/replay failures remain recorded for quiet-window rerun/investigation if they persist. All historical .codex-integration/*.log paths are now preserved by basename under target/integration-evidence/; safe production screenshots in its screenshots/ directory; native fixture scripts/browser-auth/check-merged.mjs; report docs/verification/integration.md. Native/health processes and private data dirs removed, scratch removed (HOME fuzz scratch removed earlier), git worktree clean. No push/deploy; issues remain open. Resume: reserve CPU, run full TRACER_TEST_PORT=4391 bun x playwright test in apps/tracer, then bun scripts/browser-auth/check-merged.mjs from root; freeze assets is automatic. No implementation permission is pending.Deploy 1 is live on https://infraternal.kayg.org (2026-10-07 ~01:25 CEST): dev
0c47cd4, binary sha256 ae2005e6d35d330b….Contents:
Old state moved aside, not deleted, as
*.bak-20261006T232451Z(data dir, web root, binary) on monitor01.Hands-on check:
agent --fd 3(5.4 MB) are running, with no warnings./and/healthreturn 200.server setup-tokenworks (exit 0, 43 characters; the value is not printed).Two bugs found by hand (fix-setup job running):
Merge-result verification:
Starting integrate2 at base
0c47cd42e6; merging exact vt-ghostty565105fde0with --no-ff. Read #34/#22/#26 history and repository decisions/architecture. Preserve per-writer Ack/trusted open plus flagged recovery and ordering; evidence target/integrate2-evidence. No push/deploy. docs/PROCESS.md absent.Merge finding: both branches assigned capability bit1 and frame type 27. Preserve deployed MULTI_WRITER bit1/SelectWriter type27; allocate APPROXIMATE_SNAPSHOT bit2/SnapshotWithFlags type28. Keep borrowed decoder, trusted terminal-open, independent writer cursors, ordered detached State fence, retained-ring-first replay and refusal recovery on explicit and last-typist resize. Ghostty reviewed indivisible repaint credit accounting supersedes dev repaint borrowing to preserve positive-insufficient-credit pause regression. Merge gate building; no budget changes.
Full-path source finding: embedded.rs read_incoming accepts Output/Snapshot/Ack but rejects terminal Event; tracer terminal.ts also rejects Event on its terminal stream. Ghostty approximate recovery emits an ordered notice before Snapshot, so a ring-gap reconnect would currently retire the embedded connection. Will reproduce with a retained socket regression after the merge gate, then forward bounded terminal lifecycle/recovery events through server and client. Evidence locations embedded.rs:934-948 and terminal.ts:446-474.
Ack129 hypothesis with source evidence: tracer terminal.ts tryAttach sends lastInSeq=nextInSeq (generated/submitted bytes), websocket.rs:886 refuses last_in_seq above owned writer Ack. A lost in-flight Input can therefore make every resume fail while the browser retains that key. Preparing deterministic native proxy loss of single-byte Input at sequence129; will retain failing run before changing attachment to the acknowledged cursor. Resume queue remains in memory and is replayed separately.
Initial full browser gate on port4441: 15 passed, 1 failed; 500-key paint p99 46.5ms versus unchanged20ms. Setup render p99 848ms, FCP p99 475.4ms; all renderer/functional cases pass. Unisolated dev box, 8 cores, load36-38 during compilation. Initial merge fast caught omitted shared InputCursors helper and dangling scratch target links; corrected before commit. Explicit/last-typist geometry now share reviewed recovery and roll back remembered size after refusal. Exact fast rerun in merge-fast-2.log.
Merged real test finding: dev verify-agent-snapshot.py explicitly expects a full repaint funded by one byte plus debt; this contradicts reviewed #26 indivisible repaint/positive-insufficient-credit pause. Initial merged test timed out at that old expectation. Updating only credit oracle to require no repaint/cursor movement at1 byte, then exactly1 repaint after a full grant; retain all four12MiB producer-completion checks and final ring-gap attach. Native #26 faithful/approximate ×1/16384-byte regression remains unchanged.
Real geometry repro: 20 repeated two-writer runs,18 pass/2 fail. Both Close diagnostics identify command queue capacity, not shim disconnect; retained geometry-*.log/geometry-close.bin. Fixture refunded every tiny prompt frame despite initial1MiB/viewer, reproducing the same deliberate eight-command saturation previously seen in integrate1 scale probe. Remove redundant refunds, assert total output remains below initial credit, preserve both real stty observations. Green20-run repeat underway; production bounds unchanged.
Geometry correction20/20 PASS, unchanged sizes/output/bounds. #26 credit fixture initially waited for1MiB after startup, but deployed agent_fixture.py retains sub64KiB refunds; it stalled at exhausted actual credit. Flushing that startup refund once restores an exact1MiB measurement window: approximate/1-byte case PASS,2MiB producer202.0ms, zero early notices/repaints, one funded recovery. Native debug full-path check currently fails first output (Close1011 before Ack129 injection); safe frame-metadata diagnostics underway. Static x86 build16,058,800 bytes/no PT_INTERP; ARM build continues.
Native first-open red: built production tracer sends Attach/Credit/Resize(150x40,1238x642)/terminal-stream Ping; real server replies Ack0 then control Close1011, no output. Metadata in native-first-open-diagnostic.log. terminal.ts:811 sends Ping on stream1; websocket.rs:779 permits control stream0 only. Same RTT sampler installs a2s interval, violating required zero-idle window. Proposing event-driven RTT: one control-stream sample on attachment, then at most one per2s while typing, no idle timer. Native timer-only red uses disclosed proxy stream remap to isolate idle activations; source unchanged.
Completed no-ff engine merge
d5831143ca(parents0c47cd4/565105f). Exact fast exit0, log target/integrate2-evidence/merge-fast-4.log. Verbatim summary:Static raw50MiB floods zero Snapshot substitutions: LF14.921, CRLF19.623, printable80.632 MB/s; minimum exceeds10. 32 writers/viewers×200:6400 Acks, p50/p99 0.536/4.377ms,614400 exact delivered bytes,0.511s; daemon/shim RSS5544/6188KiB. Wrapped/less reconnect harness PASS; exact retained replay and one negotiated gap notice. Dev box x86_64/8 cores/load2.46; not perf VM. Continuing native client/notice boundary fixes separately; no push/deploy.
Deterministic native fault injection reproduced the Ack129 reconnect loop: dropping one submitted single-byte Input before PTY delivery causes repeated resumes with no Ack. apps/tracer/src/terminal.ts sends nextInSeq in Resume rather than ackedInSeq. The retained queue already replays separately. Native first-open additionally fails on RTT Ping sent on terminal stream 1; server accepts control stream 0. With only a diagnostic stream remap, two idle native viewers caused 103 activations/10s. Fixing client resume cursor and removing idle RTT intervals. Evidence: target/integrate2-evidence/native-ack129-red.log, native-first-open-diagnostic.log, native-rtt-idle-red.log. At 128 full-history sessions, daemon RSS 5496 KiB, summed shim RSS 4209752 KiB, simultaneous recovery n=1280 p99=58.404ms; 8 CPUs, load14.95. scale-128-static.log.
Full-path native flood exposed a further leg-B scheduling failure: the authenticated terminal stream closes during sustained output, before ring-gap recovery. The embedded actor uses try_send into a four-frame queue; immediately-ready socket frames can fill it before a healthy receiver is scheduled. Existing slow-viewer isolation must remain bounded/nonblocking. Proposing a cooperative scheduling point after queued Output rather than enlarging buffers or awaiting a slow reader; benchmark the merged full path afterward. Evidence: native-event-red.log (native flood terminal stream closed), embedded.rs OUTPUT_CAPACITY=4 and process_incoming Output try_send.
Completed tests-first steps: native harness
4ed4af9704adds opt-in 20 reconnects/stress8, one-byte sequence129 fault injection, full-path flood and browser ring-gap oracle. Server regression modulee67918031fretains ignored Event/Snapshot and healthy four-frame burst oracles; both explicit ignored runs failed. Baseline gates native-harness-fast.log and regression-fast.log exited 0, 34390 TS assertions, 134 streams/11439 schedules/no divergences. Gate output:+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+
7 pass
0 fail
34390 expect() calls
Completed client RTT and parser-seed steps:
740e6f9test(fuzz): seed approximate snapshot flags alongside writer identity7eaa8ddfix(tracer): route RTT samples on control and leave idle terminals asleepRTT fix uses control Ping and samples only attachment/typing; native two-viewer idle 0/10.006s and no-session 0/10.002s. Native functional acceptance and all 500 echoed keys passed with sequence129 loss; timing budgets were exceeded during concurrent builds, retained in client-native-green.log and scheduled for quiet final static measurement. Shim fuzz: 1144058 runs/61s, coverage602/features1621, no sanitizer failure. scripts/verify fast rtt-fast.log exited0: six Rust gates PASS; 7 pass, 0 fail,34390 assertions. The optional repeat loop initially ran before viewers existed (ReferenceError), corrected placement after two-viewer setup; no reconnect trials claimed for that fixture failure.
Completed resume/harness steps:
282d0absends ackedInSeq in Resume, retaining queued replay;a21ad0cplaces repeat trials after native two-viewer setup. ack-fast.log exits0 (six Rust gates PASS;7 pass/0 fail/34390 TS assertions). A real repeat passed both independent resumes plus device-A restoration/replay/exact shared input in101.17ms (reconnect-harness-placement.log). A subsequent native probe mount failed before measurements; bounded diagnostics added, investigation ongoing. Dev advanced to7d17212 with reviewed Snapshot-callback ordering fix (#39); will incorporate before final acceptance. No push/deploy.Finding resolved in native fixture: repeat+probe generated32 auth HTTP requests (counts:status9/session10/other13) from the same loopback source in one minute. runtime.rs source_admission correctly enforces30/source/minute independently of the120 aggregate browser partition. This explains the probe mount429; not an engine or auth defect. Added request-count diagnostics and pacing before extra reload/probe reads, preserving all production limits. Evidence: reconnect-auth-counts.log; actual reconnect/restoration still passed101.04ms before admission refusal. Healthy native burst red regression now passes after bounded cooperative scheduling; static gate building final binaries.
Completed bounded scheduling/native admission steps:12dbc82 yields after a queued Output so healthy receivers drain the unchanged four-frame queue; red128-output oracle now passes. Held slow-viewer queues still retire without blocking siblings.
f24e766paces repeated native reload/probe auth reads within the unchanged30/source/minute limit and records content-free diagnostics. Native harness parses. burst-fast.log exits0; gate output:| Rust gate | Result |
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
7 pass
0 fail
34390 expect() calls
Native full-path throughput and20stress repetitions follow on the finished merged binary.
Real merged static full-path benchmark after12dbc82 scheduling fix: authenticated leg-A/server/embedded infraternal-agent/shim/PTY flood delivered52428800 exact bytes,0Snapshots,11.113MB/s in4.718s (8CPU dev box,load2.82/3.34/6.72). All500 browser echoes completed; paintp99=16.1ms, nativeecho p99=4.121ms. Pacing respects unchanged source admission. Subsequent browser ring-gap oracle fails as expected before Event adapter fix (native-event-red-after-fairness.log), independently of successful flood/latency. Metrics:
static server without session: 0 scheduler activations / 10.001s (0.000/min); RSS=11504 KiB; threads=13
static server with shared idle PTY: 0 scheduler activations / 10.001s (0.000/min); RSS=15312 KiB; threads=19
p99: 16.10 ms
Time to resume: 93.10 ms
real leg-A/agent/shim/PTY echo: n=500 p50=1.032ms p99=4.121ms
Native full path flood: 52428800 exact payload bytes; 4.718s; 11.113 MB/s; snapshots=0; load=2.82/3.34/6.72
Deploy 1.1 is live (dev
7d2d0a5, binary sha256 33213e12ed8a9ee3…). The data dir was kept (no owner had been created yet). Old binary and web root are saved as*.bak-20261007T-d11.New since deploy 1:
POST /auth/setup-check, non-consuming, 401 for a wrong token), and Continue is right-aligned.Hands-on check on production (iPhone 15 viewport): the page loads in 0.67 s, a wrong token shows "That token doesn't match. Run infraternal server setup-token on the server.", and the button sits at the right edge. The server (10.8 MB) and agent (5.4 MB) are up.
Merge-result checks:
7d2d0a5);Further full-path finding: cooperative scheduling alone is insufficient. native-event-green.log completed500echoes (paintp99=19.6ms, rawp99=1.654ms) then the flood retired its terminal during concurrent ARM linking, before Event recovery. Four embedded frame slots cannot hold the already credited default1MiB burst while authenticated WebSocket forwarding awaits I/O. Proposing256 bounded frame slots for common4KiB PTY bulk frames, retaining credit ceilings, nonblocking slow-viewer retirement and all existing parser bounds. Add a red credited-burst/I/O-pause oracle and measure128 attachments with1MiB each plus final throughput/RSS; no production admission or wire changes. Evidence: native-event-green.log; embedded.rs OUTPUT_CAPACITY4, websocket.rs authenticated output forwarding.
Tests-first follow-up: credited_bulk_output_survives_forwarder_io_pause fails before queue sizing; uncredited_output_or_repaint_is_rejected_before_queueing also fails on existing saturating subtraction. The256-frame fix must enforce granted Output/Snapshot bytes before enqueueing, preserving an8MiB outstanding-credit payload ceiling plus bounded1KiB notices/frame metadata, rather than permitting256 maximum4MiB frames. Default1MiB credited bursts ×128 streams will be measured with unique payload allocations. Red logs: credited-burst-red.log and credit-bound-red.log. Production wire credit limits remain unchanged.
Completed Event/UI steps and latest-dev merge:76e2efc forwards bounded/session-bound ordered notices and activates real-socket/isolation/credit/order regressions;
d7524abdisplays static approximation/pause labels;de37976arms seq129 loss on the fresh probe writer. event-fast.log exits0, three Event/ready-burst regressions pass, TS strict check/build pass. Merge6a350e9 includes devcac64e6 (reviewed Snapshot ordering/Unicode #39 and additive native setup check/UI #32); clean merge, DECISIONS unchanged. dev-merge-fast.log exits0; gate output:| Rust gate | Result |
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
7 pass
0 fail
34390 expect() calls
Follow-up credited burst/strict byte-bound red tests are being gated separately before queue sizing. Current dev-only7d2d0a5 layout-tolerance test adjustment will be included before final browser acceptance.
Completed credited queue step:806b2ee retains two ignored red regressions and128-stream measurement (first tests-only Clippy gate rejected2casts; checked conversions fixed, queue-regressions-fast-2 exits0).
0e8d7dcactivates256frame slots, rejects over-credit Output/Snapshot before queueing, preserves8MiB credit and bounded notice/frame counts; credit-queue-fast exits0, all new credit/order/isolation oracles pass;6 Rust PASS,7 TS pass/0fail/34390assertions. Measurement with32768unique4KiB buffers:debug actor scale: streams=128 frames=32768 payload_bytes=134217728 baseline_RSS_KiB=9064 idle_queues_RSS_KiB=11484 full_queues_RSS_KiB=145164 dispatch_p99_ms=0.032832 CPUs=8 load=7.18 4.44 4.33 12/748 4189331
Payload128MiB plus measured metadata/allocator cost at128streams. Hard outstanding payload limit remains128×8MiB=1GiB, plus bounded notices/frame metadata; default browser grant remains1MiB. Native stress run passed6trials (101.59–132.47ms) then next attachment pair timed out; inspecting frame-type/DB capacity counts, no final acceptance claim. native-final-2.log. Initial first-command oracle also followed a closed proxy connection while the replacement accepted all46bytes: fixing logical-viewer tracking/sequence dedup in the native fixture.
Detached output finding: native two-device CPU8 runs completed 6 then 8 trials before device B sent Hello/Resume and received Welcome without Attach. Database remained at 2 active connections (not admission). Real Ghostty browser regression held render callbacks across disconnect: received 16,454 bytes but painted stopped at 16,384 (detached-output-red.log). drainOutput required attached while tryAttach required an empty queue, creating a lifecycle deadlock. Removing that guard drains already-owned bytes without sending detached credit; targeted real-renderer regression now passes (detached-output-green.log). Evidence: target/integrate2-evidence/.
Committed tests-first detached callback oracle
b8d120d, logical viewer tracking1ad5582, and detached owned-byte drain fix008aa36. Real Ghostty targeted browser test passes; TypeScript check passes. detached-tests-fast.log: fmt/VT native fmt/clippy/test/cargo-deny/static builds PASS; protocol7pass/0fail/34390 assertions,134streams11439schedules zero divergences. Fixed native run currently11/20 successful CPU8 two-device reconnect/reload trials; prior reproduction stalled at trial9. Final reconnect harness passes raw/starved/approximate/legacy paths (reconnect-final.log).Fixed build native-final-4.log: 20/20 two-device reconnect+device-A reload restoration+exact shared input PASS under stress-ng --cpu8. Resume min100.54ms median106.99ms max189.67ms; measured load reached12.33/6.64/5.06. CPU stress stopped before620-second open-idle and latency/flood checks. agent-functional-final.log:24/24 abrupt stop/restart cases,4710396 exact payload bytes; idle daemon0/2.201s RSS5176KiB, attached daemon0/2.200s, shim0/2.201s. Full Playwright currently19passed including500-key mock paintp9915.8ms. Final native throughput and gates pending.
Verification checkpoint head008aa36: exact requested Nix fast command exits0; ALL Playwright port4441 exits0,21passed(2.4m), including real Ghostty detached callback regression. Production screenshots preserved target/integrate2-evidence/screenshots/. Native20/20CPU8 and24/24stop/restart pass;620s open-idle/finalnative500/flood/recovery/logout still running. Gate output verbatim:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.10s]
Final native-final-4: open sharedPTY idle0activations/620.002s RSS16312KiB;500-keypaintp9918.8ms, resume95.5ms; real authenticated echo500p995.404ms; full-path52428800exactbytes in4.159s=12.606MB/s,0Snapshots. All20CPU8runs passed. Final gap assertion failed despite live stream(Hello/Welcome/Ack/Event2/Snapshot1, noClose): oracle counted all notices rather than exactly one approximate notice. Attach-before-Credit permits output-paused notification before funded repaint. Correcting only harness cardinality while requiring oneapproxnotice/oneSnapshot/matchingseq/live stream; fresh fullfunctional rerun pending. Handoff fast gate alreadyPASS6Rust+7protocol/0fail (handoff-fast.log).
Recovery oracle rerun native-final-5: browser500paintp9917.9ms/resume94.7ms, idle0/10s; subsequent direct-native echo timed out before recovery check. Added content-free direct frame-kind/Ack/sample counts to distinguish transport retirement, replays and terminal response. Existing native-final-4 direct500echo completed butp995.404ms exceeds its5ms decision41 gate; full combined run is not yet accepted. Native20CPU8/620sidle/12.606MB/s evidence remains valid; fresh repeat running without input-loss injection (seq129 recovery already proved in final4/final5).
native-final-6 confirms corrected recovery oracle: oneapproxnotice/oneSnapshot/matchingseq/visiblelabel/live stream PASS; full native setup/sign-in/independent Acks/reload/resume/logout functional acceptance PASS. Full-path50MiB12.730MB/s0Snapshots. Timing repeat failed: browserpaintp9931ms and direct500echop996.050ms, vs final4paint18.8ms/echo5.404ms. Shared-boxCPU pressure avg10=1.33%, no cgroup throttle. Preserve failures; quieter repeat running. No performance thresholds relaxed or production changes added.
Resolved harness oracle committed3655a44; native-final-7 exits0: FULL native functional acceptance PASS (setup/sign-in/realPTY/independent-deviceAck0/reload/resume/logout), browser gap recovery one orderedapproxnotice/repaint +visiblelabel/live stream PASS; ALL performance budgets PASS. 500paintp9917.2ms, resume94.4ms, rawauthenticated500echop992.382ms;52428800exactfloodbytes/4.416s=11.873MB/s0Snapshots, load5.08/3.95/4.37. Earlier timing failures preserved. Same production implementation passed20CPU8reconnects and0activations/620.002s in final4; seq129loss500/500replay in final4/final5. Full21Playwrightpassed. Final docs/gate/cleanup in progress; nothing pushed or deployed.
Finished integrate2 head
7b1ed777fc; no push/deploy. No-ff Ghostty merged583114and dev merge6a350e9 (dev7d2d0a5); DECISIONS unchanged; worktree clean. Atomic follow-ups record regression tests/fixes/harness/docs. Native final7 exits0 FULL functional and performance PASS: setup/sign-in/PTY/two independentAcks/reload/resume/logout; one ordered approximate recovery with visiblelabel/live stream. 500paintp9917.2ms; rawauthenticated500echop992.382ms; resume94.4ms; full-path50MiB11.873MB/s0Snapshots (repeats12.606/12.730). Native final4:20/20CPU8reconnect+restoration/exactsharedinput, median106.99/max189.67ms; idle0activations/620.002s; seq129loss500/500replay. Final reconnect native harnessPASS;24/24abruptstop/restartPASS; daemon/shimidle0/2.2s. Scale32writersAckp994.377ms;128fullhistorysessions recoveryp9958.404ms;128queueRSS145164KiB/default1MiB credit,8MiB hard credit cap. Fuzz1144058runs/61s no sanitizerfailure. ALL21PlaywrightPASS port4441 (production assets), TScheckPASS. Earlier timing failures and rawecho timeout retained, no thresholds relaxed.Evidence: docs/verification/ghostty-integration.md and target/integrate2-evidence/ (native-final-4/6/7.log, reconnect-final.log, agent-functional-final.log, playwright-accepted.log, complete-fast.log, scale/memory/fuzz logs, binary-sha256.txt, machine.txt). Production screenshots: screenshots/merged-real-terminal.png, merged-real-probe.png, merged-approximate-recovery.png, merged-mobile-setup/login.png and core mobile/desktop. Self-review recorded; physicaliPhone and independent visual/security review external. HOME job scratch removed; verified staticx86/ARM binaries retained in target. Exact requested Nix fast exits0; gate output verbatim:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.44s]
Deploy 2 is live (the new terminal engine): dev
a5250c3, binary sha256 0c9b6193f437a89e…. Data dir kept; old binary and web saved as*.bak-20261007T-d2. Server 10.7 MB, agent 5.1 MB, 0 warnings,/and/health200.The orchestrator's hands-on checks with the same release binary (local, native, real PTY):
lessreconnect keeps the live stream; legacy retry PASS).Production itself can't be tested beyond setup without claiming the owner account; the owner does setup in the morning.
Deploy 2.1 is live (dev
4daf8c0): web-only change (the binary hash is unchanged, 0c9b6193…). Contents: the motion audit fixes plus the restored approved designs (#40; D111 and D112), and main's docs merged into dev (DECISIONS up to 112, PROCESS.md). Checked by hand: the setup page loads in 0.67 s, wrong-token rejection works, server and agent are up with 0 warnings. The merge result had a green gate and 22/22 Playwright; idle trace 0 rAF and 0 timers over 10 s; 500-key p50/p99 15.0/15.9 ms.Deploy 2.2 is live (dev
191c283, binary 9d3978559ab9ec98…): the #43 PRF normalisation (1Password extension output) and the passkey provider record. The data was kept, with a pre-deploy copy at~/.local/share/infraternal.predeploy-20261007T071239Z. Owner account intact (1 user, 1 passkey). Gate green; Playwright 31/32, then the flaky blur assertion was fixed (191c283) and passes. Waiting for the owner's desktop 1Password sign-in.Deploy 2.3 live (dev
fca6e09, binary 2d226eada8d24dea…), data kept with a pre-deploy copy. Contains: #66 part 1 (precompressed assets, and the explicit-credit fix for the 400 ms attach stall), the keytray modifiers (#53), the scroll fix (#44) and the caret fix. Checked through Traefik: main.js br 24,767 B / gzip 28,488 B / identity 75,896 B with the correct Content-Encoding. 0 warnings after start. The merge result had a green gate and Playwright 35/35.Remote phase1 #78 data-layout extension proposed: $XDG_DATA_HOME/infraternal/ca/ (default ~/.local/share/infraternal/ca/), 0700, encrypted internal CA key envelopes and public issuer generations, files0600; outside infraternal.sqlite. Retain current+previous issuer generations during overlap [D133]. CA unlock source is an owner question on #78; never persist a plaintext adjacent unlock key. Rootless host identity belongs under its XDG data directory, separate from XDG_RUNTIME_DIR/infraternal/sessions. No production path changed or remote state installed.
Data-layout table extension for remote phase1 #78 (proposed; no files created):
The independent CA unlock source is pending owner clarification on #78. No plaintext adjacent unlock-key file is proposed. This checkpoint creates no CA state and changes no production directory.
Deploy 2026-10-07 ~16:15 (orchestrator): owner asked to remove the user deploy and redeploy fresh as root (D170). Removed the user unit, binary, data, web and the three surviving shims plus /run/user/1001/infraternal. Installed dev
ac03b19(x86_64 musl): /usr/local/bin/infraternal, web /usr/local/share/infraternal/web, data /var/lib/infraternal (0700 root), system unit /etc/systemd/system/infraternal-server.service (same listen 172.18.0.1:7011 behind Traefik). Public origin answers 200. Owner re-enrolls with a fresh setup token (given to the owner directly, not recorded).Data-layout table extension for rootless remote infraternal agents (#78, operator commit
baf36bb; no remote host installed):Join publishes via fsynced same-filesystem hard link with atomic no-replace semantics. Initial operator join never overwrites an existing identity. Rootless shims continue to use their existing XDG runtime/state location separately. The CA directory/encrypted administrator envelopes remain as already documented above; no plaintext CA unlock file or CA storage implementation is added by this step.
Remote #78 cold-start loader specifies the public current issuer file in the existing CA layout:\n\n| Path | What | On a fresh deploy |\n|---|---|---|\n| $XDG_DATA_HOME/infraternal/ca/issuer.pem (default ~/.local/share/infraternal/ca/issuer.pem) | Retained public Ed25519 issuer for cold-locked signing and existing-host mTLS verification; directory0700, file0600; no private CA/unlock key | Ordinary restart retains it; missing/invalid public trust refuses remote startup without regeneration |\n\nThe explicit test/operator --remote-ca-dir override uses the same private-directory/file checks. Normal standalone HTTPS leaf/key remain independently configured TLS files; for this startup slice the leaf must chain to issuer.pem. Encrypted administrator envelopes and rotation overlap are still pending; no production filesystem changed.
Formatting correction: remote #78 public-issuer row for the existing CA data-layout table.
--remote-ca-dir is an explicit test/operator override with the same private metadata checks. No private CA or unlock-key file is read by this loader. Encrypted administrator envelopes and rotation overlap remain pending. No production filesystem changed.
Lifecycle storage row for the existing “What lives where on monitor01” table (D183):
|
$XDG_DATA_HOME/infraternal/infraternal.sqlite(default~/.local/share/infraternal/infraternal.sqlite; directory selected by--data) | Account-owned exited-session status/time, final screen (up to 1 MiB), output tail (up to 256 KiB), working directory and command; at most 128 retained exits/account (up to 160 MiB payload/account) | Explicit data-directory wipe removes it; each payload expires after 7 days or is removed on dismissal |Data-layout table extension for D168 per-administrator encrypted CA copies (#78; implementation in progress, no production paths changed):
Bounded8192-byte no-follow reads, same-directory atomic rename and file/directory fsync. Role generation is checked under the SQLite writer lock before decrypt/install or publication. Server/browser HTTP never sends encrypted copies or seed. This extends existing CA root/public-issuer rows, not a new directory convention.
Documented the Feedback report path and rotation policy against the existing private data-directory layout from #34. Commit:
7f358e08. Paths:<data>/feedback/frames.jsonland<data>/feedback/frames.1.jsonl; each file is capped at 8 MiB, directory 0700, files 0600, two files retained.Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: Lanes merged into dev and deployed to monitor01 (
acf83c7in dev and prod; prod now runs release 9.4 line); later comments are layout-table notes. Reopen if anything is still missing.kayg referenced this issue2026-10-28 17:53:54 +00:00