Canvas streams: per-window stream visibility (live, marker-only, thumbnail) over the one WebSocket (D183 B1/B2) #107

Open
opened 2026-10-08 13:27:30 +00:00 by kayg · 113 comments
Owner

Server and client protocol support so a device's many canvas windows share one WebSocket (already multiplexed: AttachTerm per stream) and hidden windows cost nearly nothing: a per-stream visibility mode (live bytes / changed-marker only / thumbnail at ~2 Hz), switchable without reattach; snapshot on becoming visible. Numbers: CPU and bytes for 10 busy windows with 1 visible vs 10 visible; switch latency to live.

Server and client protocol support so a device's many canvas windows share one WebSocket (already multiplexed: AttachTerm per stream) and hidden windows cost nearly nothing: a per-stream visibility mode (live bytes / changed-marker only / thumbnail at ~2 Hz), switchable without reattach; snapshot on becoming visible. Numbers: CPU and bytes for 10 busy windows with 1 visible vs 10 visible; switch latency to live.
Author
Owner

Starting #107 on canvas-streams, base f27b3fe7a4. Read full #107/#89/#98/#99 history, repository contract and main D11/D63/D128/D130/D170/D178/D183. Additive proposal: wire capability bit 4 (16), Visibility 0x18 (u8 live=0/marker=1/thumbnail=2), Changed 0x19 (u64 since_seq, u64 head_seq), Thumbnail 0x1A (u64 seq, u8 flags, bounded visible VT repaint). Shim capability bit 4, Visibility 0x1E, Changed 0x1F, Thumbnail 0x22; leaves 0x17 and shim bit 3/0x1D for #99 size. Marker cadence >=250ms, thumbnail >=500ms, event-driven idle with no periodic wakeups. Returning live always snapshots at captured head then raw bytes from that boundary. No new engine; thumbnail uses existing bounded visible repaint. Contract and codec first, then shim, relay, browser multiplex client, real-engine/browser measurements. No push/deploy.

Starting #107 on canvas-streams, base f27b3fe7a4dcfb3e268bdee90405bf1f1d8a0ce9. Read full #107/#89/#98/#99 history, repository contract and main D11/D63/D128/D130/D170/D178/D183. Additive proposal: wire capability bit 4 (16), Visibility 0x18 (u8 live=0/marker=1/thumbnail=2), Changed 0x19 (u64 since_seq, u64 head_seq), Thumbnail 0x1A (u64 seq, u8 flags, bounded visible VT repaint). Shim capability bit 4, Visibility 0x1E, Changed 0x1F, Thumbnail 0x22; leaves 0x17 and shim bit 3/0x1D for #99 size. Marker cadence >=250ms, thumbnail >=500ms, event-driven idle with no periodic wakeups. Returning live always snapshots at captured head then raw bytes from that boundary. No new engine; thumbnail uses existing bounded visible repaint. Contract and codec first, then shim, relay, browser multiplex client, real-engine/browser measurements. No push/deploy.
Author
Owner

Schema evidence: Rust protocol 7/7 and TS codec 6/6 pass with 20 shared golden vectors. Against the unchanged TS codec the new tests fail (4 pass/2 fail); restored implementation passes. Real shim/PTY visibility probe fails at baseline with "shim must advertise visibility". Existing shim peer delivery (crates/infraternal-shim/src/session.rs:310-340) forwards raw output and only allows PTY progress for a caught-up viewer; hidden peers require explicit suppression and must permit PTY progress. Full fast gate is still warming native/static dependencies under load 23.57/30.57/26.26 on 8 CPUs; first Clippy duplicate-arm warning corrected. No performance claims from this load.

Schema evidence: Rust protocol 7/7 and TS codec 6/6 pass with 20 shared golden vectors. Against the unchanged TS codec the new tests fail (4 pass/2 fail); restored implementation passes. Real shim/PTY visibility probe fails at baseline with "shim must advertise visibility". Existing shim peer delivery (`crates/infraternal-shim/src/session.rs:310-340`) forwards raw output and only allows PTY progress for a caught-up viewer; hidden peers require explicit suppression and must permit PTY progress. Full fast gate is still warming native/static dependencies under load 23.57/30.57/26.26 on 8 CPUs; first Clippy duplicate-arm warning corrected. No performance claims from this load.
Author
Owner

First schema fast gate exited 1: fmt/VT fmt/cargo-deny/static builds PASS; Clippy duplicate-arm warning (corrected) and unchanged vt_credit t1-gate-faithful-1 FAIL. Saved stderr identifies verify-vt-credit.py:30: detached initial producer did not finish within 5s. Isolated exact retries also failed; a separate extended-deadline diagnostic completed in 501.65ms (not a gate pass). No deadline/budget changes. Both static targets pass: x86_64 15,966,096 bytes; aarch64 13,426,576 bytes, no PT_INTERP. Baseline binary native 300ms profile under concurrent build load failed: PTY echo baseline p99=356.91ms (budget334), other-session flood growth=15.39ms (PASS<=16.67), same-session growth=268.21ms (FAIL). Repeating full gate after cold static builds; implementation of visibility remains unapplied.

First schema fast gate exited 1: fmt/VT fmt/cargo-deny/static builds PASS; Clippy duplicate-arm warning (corrected) and unchanged vt_credit t1-gate-faithful-1 FAIL. Saved stderr identifies verify-vt-credit.py:30: detached initial producer did not finish within 5s. Isolated exact retries also failed; a separate extended-deadline diagnostic completed in 501.65ms (not a gate pass). No deadline/budget changes. Both static targets pass: x86_64 15,966,096 bytes; aarch64 13,426,576 bytes, no PT_INTERP. Baseline binary native 300ms profile under concurrent build load failed: PTY echo baseline p99=356.91ms (budget334), other-session flood growth=15.39ms (PASS<=16.67), same-session growth=268.21ms (FAIL). Repeating full gate after cold static builds; implementation of visibility remains unapplied.
Author
Owner

Step 1 complete: a73aa8195e. Additive contracts and both codecs, capability bit 4; no conflict with #99. scripts/verify fast exit 0 (CARGO_BUILD_JOBS=2, RUST_TEST_THREADS=1, TRACER_TEST_PORT=4317, CPUWeight=10000). Rust protocol: 8 passed. Verbatim final gate output:

==> cargo-deny
warning[duplicate]: found 2 duplicate entries for crate 'base64'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:24:1
│
24 │ ╭ base64 0.21.7 registry+https://github.com/rust-lang/crates.io-index
25 │ │ base64 0.22.1 registry+https://github.com/rust-lang/crates.io-index
│ ╰───────────────────────────────────────────────────────────────────┘ lock entries
│
├ base64 v0.21.7
├── base64urlsafedata v0.5.5
│ ├── webauthn-attestation-ca v0.5.5
│ │ └── webauthn-rs-core v0.5.5
│ │ └── webauthn-rs v0.5.5
│ │ └── infraternal-server v0.1.0
│ │ └── infraternal v0.1.0
│ ├── webauthn-rs v0.5.5 ()
│ ├── webauthn-rs-core v0.5.5 (
)
│ └── webauthn-rs-proto v0.5.5
│ └── webauthn-rs-core v0.5.5 ()
├── webauthn-rs-core v0.5.5 (
)
└── webauthn-rs-proto v0.5.5 ()
├ base64 v0.22.1
├── axum v0.8.9
│ └── infraternal-server v0.1.0
│ └── infraternal v0.1.0
├── infraternal-server v0.1.0 (
)
└── sqlx-core v0.8.6
├── sqlx v0.8.6
│ ├── infraternal v0.1.0 ()
│ └── infraternal-server v0.1.0 (
)
├── sqlx-macros v0.8.6
│ └── sqlx v0.8.6 ()
├── sqlx-macros-core v0.8.6
│ └── sqlx-macros v0.8.6 (
)
└── sqlx-sqlite v0.8.6
├── sqlx v0.8.6 ()
└── sqlx-macros-core v0.8.6 (
)

warning[duplicate]: found 3 duplicate entries for crate 'getrandom'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:88:1
│
88 │ ╭ getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index
89 │ │ getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index
90 │ │ getrandom 0.4.3 registry+https://github.com/rust-lang/crates.io-index
│ ╰─────────────────────────────────────────────────────────────────────┘ lock entries
│
├ getrandom v0.2.17
└── rand_core v0.6.4
├── bip39 v2.2.2
│ └── infraternal-server v0.1.0
│ └── infraternal v0.1.0
├── crypto-common v0.1.7
│ ├── aead v0.5.2
│ │ └── aes-gcm v0.10.3
│ │ └── (dev) infraternal-server v0.1.0 ()
│ ├── cipher v0.4.4
│ │ ├── aes v0.8.4
│ │ │ └── aes-gcm v0.10.3 (
)
│ │ ├── aes-gcm v0.10.3 ()
│ │ └── ctr v0.9.2
│ │ └── aes-gcm v0.10.3 (
)
│ ├── digest v0.10.7
│ │ ├── blake2 v0.10.6
│ │ │ └── argon2 v0.5.3
│ │ │ └── infraternal-server v0.1.0 ()
│ │ ├── hmac v0.12.1
│ │ │ └── hkdf v0.12.4
│ │ │ └── (dev) infraternal-server v0.1.0 (
)
│ │ ├── sha1 v0.10.7
│ │ │ ├── axum v0.8.9
│ │ │ │ └── infraternal-server v0.1.0 ()
│ │ │ └── tungstenite v0.29.0
│ │ │ └── tokio-tungstenite v0.29.0
│ │ │ ├── axum v0.8.9 (
)
│ │ │ └── (dev) infraternal-server v0.1.0 ()
│ │ └── sha2 v0.10.9
│ │ ├── infraternal-server v0.1.0 (
)
│ │ ├── sqlx-core v0.8.6
│ │ │ ├── sqlx v0.8.6
│ │ │ │ ├── infraternal v0.1.0 ()
│ │ │ │ └── infraternal-server v0.1.0 (
)
│ │ │ ├── sqlx-macros v0.8.6
│ │ │ │ └── sqlx v0.8.6 ()
│ │ │ ├── sqlx-macros-core v0.8.6
│ │ │ │ └── sqlx-macros v0.8.6 (
)
│ │ │ └── sqlx-sqlite v0.8.6
│ │ │ ├── sqlx v0.8.6 ()
│ │ │ └── sqlx-macros-core v0.8.6 (
)
│ │ └── sqlx-macros-core v0.8.6 ()
│ └── universal-hash v0.5.1
│ └── polyval v0.6.2
│ └── ghash v0.5.1
│ └── aes-gcm v0.10.3 (
)
├── password-hash v0.5.0
│ └── argon2 v0.5.3 ()
├── rand v0.8.8
│ └── bip39 v2.2.2 (
)
└── rand_chacha v0.3.1
└── rand v0.8.8 ()
├ getrandom v0.3.4
└── rand_core v0.9.5
├── rand v0.9.5
│ ├── infraternal-server v0.1.0
│ │ └── infraternal v0.1.0
│ ├── tungstenite v0.29.0
│ │ └── tokio-tungstenite v0.29.0
│ │ ├── axum v0.8.9
│ │ │ └── infraternal-server v0.1.0 (
)
│ │ └── (dev) infraternal-server v0.1.0 ()
│ └── webauthn-rs-core v0.5.5
│ └── webauthn-rs v0.5.5
│ └── infraternal-server v0.1.0 (
)
└── rand_chacha v0.9.0
├── rand v0.9.5 ()
└── webauthn-rs-core v0.5.5 (
)
├ getrandom v0.4.3
├── jobserver v0.1.35
│ └── cc v1.6.0
│ ├── (build) libfuzzer-sys v0.4.13
│ │ └── infraternal-fuzz v0.1.0
│ ├── (build) libsqlite3-sys v0.30.1
│ │ └── sqlx-sqlite v0.8.6
│ │ ├── sqlx v0.8.6
│ │ │ ├── infraternal v0.1.0
│ │ │ └── infraternal-server v0.1.0
│ │ │ └── infraternal v0.1.0 ()
│ │ └── sqlx-macros-core v0.8.6
│ │ └── sqlx-macros v0.8.6
│ │ └── sqlx v0.8.6 (
)
│ ├── openssl-src v300.6.1+3.6.3
│ │ └── (build) openssl-sys v0.9.117
│ │ ├── axum-server v0.8.0
│ │ │ └── infraternal-server v0.1.0 ()
│ │ ├── openssl v0.10.81
│ │ │ ├── axum-server v0.8.0 (
)
│ │ │ ├── infraternal-server v0.1.0 ()
│ │ │ ├── tokio-openssl v0.6.5
│ │ │ │ └── axum-server v0.8.0 (
)
│ │ │ ├── webauthn-attestation-ca v0.5.5
│ │ │ │ └── webauthn-rs-core v0.5.5
│ │ │ │ └── webauthn-rs v0.5.5
│ │ │ │ └── infraternal-server v0.1.0 ()
│ │ │ └── webauthn-rs-core v0.5.5 (
)
│ │ ├── tokio-openssl v0.6.5 ()
│ │ ├── webauthn-attestation-ca v0.5.5 (
)
│ │ └── webauthn-rs-core v0.5.5 ()
│ └── (build) openssl-sys v0.9.117 (
)
└── uuid v1.27.0
├── infraternal-agent v0.1.0
│ └── infraternal v0.1.0 ()
├── infraternal-server v0.1.0 (
)
├── webauthn-attestation-ca v0.5.5 ()
├── webauthn-rs v0.5.5 (
)
└── webauthn-rs-core v0.5.5 (*)

warning[duplicate]: found 2 duplicate entries for crate 'hashbrown'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:94:1
│
94 │ ╭ hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index
95 │ │ hashbrown 0.17.1 registry+https://github.com/rust-lang/crates.io-index
│ ╰──────────────────────────────────────────────────────────────────────┘ lock entries
│
├ hashbrown v0.15.5
├── hashlink v0.10.0
│ └── sqlx-core v0.8.6
│ ├── sqlx v0.8.6
│ │ ├── infraternal v0.1.0
│ │ └── infraternal-server v0.1.0
│ │ └── infraternal v0.1.0 ()
│ ├── sqlx-macros v0.8.6
│ │ └── sqlx v0.8.6 (
)
│ ├── sqlx-macros-core v0.8.6
│ │ └── sqlx-macros v0.8.6 ()
│ └── sqlx-sqlite v0.8.6
│ ├── sqlx v0.8.6 (
)
│ └── sqlx-macros-core v0.8.6 ()
└── sqlx-core v0.8.6 (
)
├ hashbrown v0.17.1
└── indexmap v2.14.2
├── h2 v0.4.19
│ └── hyper v1.11.1
│ ├── axum v0.8.9
│ │ └── infraternal-server v0.1.0
│ │ └── infraternal v0.1.0
│ ├── axum-server v0.8.0
│ │ └── infraternal-server v0.1.0 ()
│ └── hyper-util v0.1.21
│ ├── axum v0.8.9 (
)
│ └── axum-server v0.8.0 ()
└── sqlx-core v0.8.6
├── sqlx v0.8.6
│ ├── infraternal v0.1.0 (
)
│ └── infraternal-server v0.1.0 ()
├── sqlx-macros v0.8.6
│ └── sqlx v0.8.6 (
)
├── sqlx-macros-core v0.8.6
│ └── sqlx-macros v0.8.6 ()
└── sqlx-sqlite v0.8.6
├── sqlx v0.8.6 (
)
└── sqlx-macros-core v0.8.6 (*)

warning[duplicate]: found 2 duplicate entries for crate 'r-efi'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:183:1
│
183 │ ╭ r-efi 5.3.0 registry+https://github.com/rust-lang/crates.io-index
184 │ │ r-efi 6.0.0 registry+https://github.com/rust-lang/crates.io-index
│ ╰─────────────────────────────────────────────────────────────────┘ lock entries
│
├ r-efi v5.3.0
└── getrandom v0.3.4
└── rand_core v0.9.5
├── rand v0.9.5
│ ├── infraternal-server v0.1.0
│ │ └── infraternal v0.1.0
│ ├── tungstenite v0.29.0
│ │ └── tokio-tungstenite v0.29.0
│ │ ├── axum v0.8.9
│ │ │ └── infraternal-server v0.1.0 ()
│ │ └── (dev) infraternal-server v0.1.0 (
)
│ └── webauthn-rs-core v0.5.5
│ └── webauthn-rs v0.5.5
│ └── infraternal-server v0.1.0 ()
└── rand_chacha v0.9.0
├── rand v0.9.5 (
)
└── webauthn-rs-core v0.5.5 ()
├ r-efi v6.0.0
└── getrandom v0.4.3
├── jobserver v0.1.35
│ └── cc v1.6.0
│ ├── (build) libfuzzer-sys v0.4.13
│ │ └── infraternal-fuzz v0.1.0
│ ├── (build) libsqlite3-sys v0.30.1
│ │ └── sqlx-sqlite v0.8.6
│ │ ├── sqlx v0.8.6
│ │ │ ├── infraternal v0.1.0
│ │ │ └── infraternal-server v0.1.0
│ │ │ └── infraternal v0.1.0 (
)
│ │ └── sqlx-macros-core v0.8.6
│ │ └── sqlx-macros v0.8.6
│ │ └── sqlx v0.8.6 ()
│ ├── openssl-src v300.6.1+3.6.3
│ │ └── (build) openssl-sys v0.9.117
│ │ ├── axum-server v0.8.0
│ │ │ └── infraternal-server v0.1.0 (
)
│ │ ├── openssl v0.10.81
│ │ │ ├── axum-server v0.8.0 ()
│ │ │ ├── infraternal-server v0.1.0 (
)
│ │ │ ├── tokio-openssl v0.6.5
│ │ │ │ └── axum-server v0.8.0 ()
│ │ │ ├── webauthn-attestation-ca v0.5.5
│ │ │ │ └── webauthn-rs-core v0.5.5
│ │ │ │ └── webauthn-rs v0.5.5
│ │ │ │ └── infraternal-server v0.1.0 (
)
│ │ │ └── webauthn-rs-core v0.5.5 ()
│ │ ├── tokio-openssl v0.6.5 (
)
│ │ ├── webauthn-attestation-ca v0.5.5 ()
│ │ └── webauthn-rs-core v0.5.5 (
)
│ └── (build) openssl-sys v0.9.117 ()
└── uuid v1.27.0
├── infraternal-agent v0.1.0
│ └── infraternal v0.1.0 (
)
├── infraternal-server v0.1.0 ()
├── webauthn-attestation-ca v0.5.5 (
)
├── webauthn-rs v0.5.5 ()
└── webauthn-rs-core v0.5.5 (
)

warning[duplicate]: found 2 duplicate entries for crate 'rand'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:185:1
│
185 │ ╭ rand 0.8.8 registry+https://github.com/rust-lang/crates.io-index
186 │ │ rand 0.9.5 registry+https://github.com/rust-lang/crates.io-index
│ ╰────────────────────────────────────────────────────────────────┘ lock entries
│
├ rand v0.8.8
└── bip39 v2.2.2
└── infraternal-server v0.1.0
└── infraternal v0.1.0
├ rand v0.9.5
├── infraternal-server v0.1.0
│ └── infraternal v0.1.0
├── tungstenite v0.29.0
│ └── tokio-tungstenite v0.29.0
│ ├── axum v0.8.9
│ │ └── infraternal-server v0.1.0 ()
│ └── (dev) infraternal-server v0.1.0 (
)
└── webauthn-rs-core v0.5.5
└── webauthn-rs v0.5.5
└── infraternal-server v0.1.0 (*)

warning[duplicate]: found 2 duplicate entries for crate 'rand_chacha'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:187:1
│
187 │ ╭ rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index
188 │ │ rand_chacha 0.9.0 registry+https://github.com/rust-lang/crates.io-index
│ ╰───────────────────────────────────────────────────────────────────────┘ lock entries
│
├ rand_chacha v0.3.1
└── rand v0.8.8
└── bip39 v2.2.2
└── infraternal-server v0.1.0
└── infraternal v0.1.0
├ rand_chacha v0.9.0
├── rand v0.9.5
│ ├── infraternal-server v0.1.0
│ │ └── infraternal v0.1.0
│ ├── tungstenite v0.29.0
│ │ └── tokio-tungstenite v0.29.0
│ │ ├── axum v0.8.9
│ │ │ └── infraternal-server v0.1.0 ()
│ │ └── (dev) infraternal-server v0.1.0 (
)
│ └── webauthn-rs-core v0.5.5
│ └── webauthn-rs v0.5.5
│ └── infraternal-server v0.1.0 ()
└── webauthn-rs-core v0.5.5 (
)

warning[duplicate]: found 2 duplicate entries for crate 'rand_core'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:189:1
│
189 │ ╭ rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index
190 │ │ rand_core 0.9.5 registry+https://github.com/rust-lang/crates.io-index
│ ╰─────────────────────────────────────────────────────────────────────┘ lock entries
│
├ rand_core v0.6.4
├── bip39 v2.2.2
│ └── infraternal-server v0.1.0
│ └── infraternal v0.1.0
├── crypto-common v0.1.7
│ ├── aead v0.5.2
│ │ └── aes-gcm v0.10.3
│ │ └── (dev) infraternal-server v0.1.0 ()
│ ├── cipher v0.4.4
│ │ ├── aes v0.8.4
│ │ │ └── aes-gcm v0.10.3 (
)
│ │ ├── aes-gcm v0.10.3 ()
│ │ └── ctr v0.9.2
│ │ └── aes-gcm v0.10.3 (
)
│ ├── digest v0.10.7
│ │ ├── blake2 v0.10.6
│ │ │ └── argon2 v0.5.3
│ │ │ └── infraternal-server v0.1.0 ()
│ │ ├── hmac v0.12.1
│ │ │ └── hkdf v0.12.4
│ │ │ └── (dev) infraternal-server v0.1.0 (
)
│ │ ├── sha1 v0.10.7
│ │ │ ├── axum v0.8.9
│ │ │ │ └── infraternal-server v0.1.0 ()
│ │ │ └── tungstenite v0.29.0
│ │ │ └── tokio-tungstenite v0.29.0
│ │ │ ├── axum v0.8.9 (
)
│ │ │ └── (dev) infraternal-server v0.1.0 ()
│ │ └── sha2 v0.10.9
│ │ ├── infraternal-server v0.1.0 (
)
│ │ ├── sqlx-core v0.8.6
│ │ │ ├── sqlx v0.8.6
│ │ │ │ ├── infraternal v0.1.0 ()
│ │ │ │ └── infraternal-server v0.1.0 (
)
│ │ │ ├── sqlx-macros v0.8.6
│ │ │ │ └── sqlx v0.8.6 ()
│ │ │ ├── sqlx-macros-core v0.8.6
│ │ │ │ └── sqlx-macros v0.8.6 (
)
│ │ │ └── sqlx-sqlite v0.8.6
│ │ │ ├── sqlx v0.8.6 ()
│ │ │ └── sqlx-macros-core v0.8.6 (
)
│ │ └── sqlx-macros-core v0.8.6 ()
│ └── universal-hash v0.5.1
│ └── polyval v0.6.2
│ └── ghash v0.5.1
│ └── aes-gcm v0.10.3 (
)
├── password-hash v0.5.0
│ └── argon2 v0.5.3 ()
├── rand v0.8.8
│ └── bip39 v2.2.2 (
)
└── rand_chacha v0.3.1
└── rand v0.8.8 ()
├ rand_core v0.9.5
├── rand v0.9.5
│ ├── infraternal-server v0.1.0
│ │ └── infraternal v0.1.0
│ ├── tungstenite v0.29.0
│ │ └── tokio-tungstenite v0.29.0
│ │ ├── axum v0.8.9
│ │ │ └── infraternal-server v0.1.0 (
)
│ │ └── (dev) infraternal-server v0.1.0 ()
│ └── webauthn-rs-core v0.5.5
│ └── webauthn-rs v0.5.5
│ └── infraternal-server v0.1.0 (
)
└── rand_chacha v0.9.0
├── rand v0.9.5 ()
└── webauthn-rs-core v0.5.5 (
)

warning[duplicate]: found 2 duplicate entries for crate 'syn'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:226:1
│
226 │ ╭ syn 2.0.119 registry+https://github.com/rust-lang/crates.io-index
227 │ │ syn 3.0.6 registry+https://github.com/rust-lang/crates.io-index
│ ╰───────────────────────────────────────────────────────────────┘ lock entries
│
├ syn v2.0.119
├── asn1-rs-derive v0.5.1
│ └── asn1-rs v0.6.2
│ ├── der-parser v9.0.0
│ │ ├── webauthn-rs-core v0.5.5
│ │ │ └── webauthn-rs v0.5.5
│ │ │ └── infraternal-server v0.1.0
│ │ │ └── infraternal v0.1.0
│ │ └── x509-parser v0.16.0
│ │ └── webauthn-rs-core v0.5.5 ()
│ ├── oid-registry v0.7.1
│ │ └── x509-parser v0.16.0 (
)
│ └── x509-parser v0.16.0 ()
├── asn1-rs-impl v0.2.0
│ └── asn1-rs v0.6.2 (
)
├── openssl-macros v0.1.1
│ └── openssl v0.10.81
│ ├── axum-server v0.8.0
│ │ └── infraternal-server v0.1.0 ()
│ ├── infraternal-server v0.1.0 (
)
│ ├── tokio-openssl v0.6.5
│ │ └── axum-server v0.8.0 ()
│ ├── webauthn-attestation-ca v0.5.5
│ │ └── webauthn-rs-core v0.5.5 (
)
│ └── webauthn-rs-core v0.5.5 ()
├── sqlx-macros v0.8.6
│ └── sqlx v0.8.6
│ ├── infraternal v0.1.0 (
)
│ └── infraternal-server v0.1.0 ()
├── sqlx-macros-core v0.8.6
│ └── sqlx-macros v0.8.6 (
)
├── synstructure v0.13.2
│ └── asn1-rs-derive v0.5.1 ()
├── thiserror-impl v1.0.69
│ └── thiserror v1.0.69
│ ├── asn1-rs v0.6.2 (
)
│ ├── webauthn-rs-core v0.5.5 ()
│ └── x509-parser v0.16.0 (
)
├── tracing-attributes v0.1.31
│ └── tracing v0.1.44
│ ├── axum v0.8.9
│ │ └── infraternal-server v0.1.0 ()
│ ├── axum-core v0.5.6
│ │ └── axum v0.8.9 (
)
│ ├── h2 v0.4.19
│ │ └── hyper v1.11.1
│ │ ├── axum v0.8.9 ()
│ │ ├── axum-server v0.8.0 (
)
│ │ └── hyper-util v0.1.21
│ │ ├── axum v0.8.9 ()
│ │ └── axum-server v0.8.0 (
)
│ ├── infraternal-server v0.1.0 ()
│ ├── sqlx-core v0.8.6
│ │ ├── sqlx v0.8.6 (
)
│ │ ├── sqlx-macros v0.8.6 ()
│ │ ├── sqlx-macros-core v0.8.6 (
)
│ │ └── sqlx-sqlite v0.8.6
│ │ ├── sqlx v0.8.6 ()
│ │ └── sqlx-macros-core v0.8.6 (
)
│ ├── sqlx-sqlite v0.8.6 ()
│ ├── tower v0.5.3
│ │ ├── axum v0.8.9 (
)
│ │ └── (dev) infraternal-server v0.1.0 ()
│ ├── tracing-subscriber v0.3.23
│ │ └── infraternal-server v0.1.0 (
)
│ ├── webauthn-attestation-ca v0.5.5 ()
│ ├── webauthn-rs v0.5.5 (
)
│ └── webauthn-rs-core v0.5.5 ()
└── zerocopy-derive v0.8.60
└── zerocopy v0.8.60
├── half v2.7.1
│ ├── ciborium-ll v0.2.2
│ │ └── ciborium v0.2.2
│ │ └── criterion v0.7.0
│ │ └── (dev) infraternal-protocol v0.1.0
│ │ ├── infraternal-agent v0.1.0
│ │ │ └── infraternal v0.1.0 (
)
│ │ ├── infraternal-fuzz v0.1.0
│ │ └── infraternal-server v0.1.0 ()
│ └── serde_cbor_2 v0.13.0
│ ├── infraternal-server v0.1.0 (
)
│ └── webauthn-rs-core v0.5.5 ()
└── ppv-lite86 v0.2.21
├── rand_chacha v0.3.1
│ └── rand v0.8.8
│ └── bip39 v2.2.2
│ └── infraternal-server v0.1.0 (
)
└── rand_chacha v0.9.0
├── rand v0.9.5
│ ├── infraternal-server v0.1.0 ()
│ ├── tungstenite v0.29.0
│ │ └── tokio-tungstenite v0.29.0
│ │ ├── axum v0.8.9 (
)
│ │ └── (dev) infraternal-server v0.1.0 ()
│ └── webauthn-rs-core v0.5.5 (
)
└── webauthn-rs-core v0.5.5 ()
├ syn v3.0.6
├── clap_derive v4.6.7
│ └── clap v4.6.7
│ ├── criterion v0.7.0
│ │ └── (dev) infraternal-protocol v0.1.0
│ │ ├── infraternal-agent v0.1.0
│ │ │ └── infraternal v0.1.0
│ │ ├── infraternal-fuzz v0.1.0
│ │ └── infraternal-server v0.1.0
│ │ └── infraternal v0.1.0 (
)
│ └── infraternal v0.1.0 ()
├── displaydoc v0.2.7
│ ├── asn1-rs v0.6.2
│ │ ├── der-parser v9.0.0
│ │ │ ├── webauthn-rs-core v0.5.5
│ │ │ │ └── webauthn-rs v0.5.5
│ │ │ │ └── infraternal-server v0.1.0 (
)
│ │ │ └── x509-parser v0.16.0
│ │ │ └── webauthn-rs-core v0.5.5 ()
│ │ ├── oid-registry v0.7.1
│ │ │ └── x509-parser v0.16.0 (
)
│ │ └── x509-parser v0.16.0 ()
│ ├── der-parser v9.0.0 (
)
│ ├── icu_collections v2.3.0
│ │ ├── icu_normalizer v2.3.0
│ │ │ └── idna_adapter v1.2.2
│ │ │ └── idna v1.1.0
│ │ │ └── url v2.5.8
│ │ │ ├── infraternal-server v0.1.0 ()
│ │ │ ├── sqlx-core v0.8.6
│ │ │ │ ├── sqlx v0.8.6
│ │ │ │ │ ├── infraternal v0.1.0 (
)
│ │ │ │ │ └── infraternal-server v0.1.0 ()
│ │ │ │ ├── sqlx-macros v0.8.6
│ │ │ │ │ └── sqlx v0.8.6 (
)
│ │ │ │ ├── sqlx-macros-core v0.8.6
│ │ │ │ │ └── sqlx-macros v0.8.6 ()
│ │ │ │ └── sqlx-sqlite v0.8.6
│ │ │ │ ├── sqlx v0.8.6 (
)
│ │ │ │ └── sqlx-macros-core v0.8.6 ()
│ │ │ ├── sqlx-macros-core v0.8.6 (
)
│ │ │ ├── sqlx-sqlite v0.8.6 ()
│ │ │ ├── webauthn-rs v0.5.5 (
)
│ │ │ ├── webauthn-rs-core v0.5.5 ()
│ │ │ └── webauthn-rs-proto v0.5.5
│ │ │ └── webauthn-rs-core v0.5.5 (
)
│ │ └── icu_properties v2.3.0
│ │ └── idna_adapter v1.2.2 ()
│ ├── icu_locale_core v2.3.0
│ │ ├── icu_properties v2.3.0 (
)
│ │ └── icu_provider v2.3.1
│ │ ├── icu_normalizer v2.3.0 ()
│ │ └── icu_properties v2.3.0 (
)
│ ├── icu_properties v2.3.0 ()
│ ├── icu_provider v2.3.1 (
)
│ ├── tinystr v0.8.4
│ │ └── icu_locale_core v2.3.0 ()
│ └── zerotrie v0.2.5
│ ├── icu_properties v2.3.0 (
)
│ └── icu_provider v2.3.1 ()
├── futures-macro v0.3.34
│ └── futures-util v0.3.34
│ ├── axum v0.8.9
│ │ └── infraternal-server v0.1.0 (
)
│ ├── futures-executor v0.3.34
│ │ └── sqlx-sqlite v0.8.6 ()
│ ├── infraternal-server v0.1.0 (
)
│ ├── js-sys v0.3.106
│ │ └── web-sys v0.3.106
│ │ └── plotters v0.3.7
│ │ └── criterion v0.7.0 ()
│ ├── sqlx-core v0.8.6 (
)
│ ├── sqlx-sqlite v0.8.6 ()
│ ├── tokio-tungstenite v0.29.0
│ │ ├── axum v0.8.9 (
)
│ │ └── (dev) infraternal-server v0.1.0 ()
│ ├── tower v0.5.3
│ │ ├── axum v0.8.9 (
)
│ │ └── (dev) infraternal-server v0.1.0 ()
│ └── tower-http v0.6.11
│ └── infraternal-server v0.1.0 (
)
├── serde_derive v1.0.229
│ ├── serde v1.0.229
│ │ ├── base64urlsafedata v0.5.5
│ │ │ ├── webauthn-attestation-ca v0.5.5
│ │ │ │ └── webauthn-rs-core v0.5.5 ()
│ │ │ ├── webauthn-rs v0.5.5 (
)
│ │ │ ├── webauthn-rs-core v0.5.5 ()
│ │ │ └── webauthn-rs-proto v0.5.5 (
)
│ │ ├── bip39 v2.2.2
│ │ │ └── infraternal-server v0.1.0 ()
│ │ ├── ciborium v0.2.2
│ │ │ └── criterion v0.7.0 (
)
│ │ ├── criterion v0.7.0 ()
│ │ ├── either v1.18.0
│ │ │ ├── axum-server v0.8.0
│ │ │ │ └── infraternal-server v0.1.0 (
)
│ │ │ ├── itertools v0.13.0
│ │ │ │ ├── criterion v0.7.0 ()
│ │ │ │ └── criterion-plot v0.6.0
│ │ │ │ └── criterion v0.7.0 (
)
│ │ │ ├── rayon v1.12.0
│ │ │ │ └── criterion v0.7.0 ()
│ │ │ ├── sqlx-core v0.8.6 (
)
│ │ │ └── sqlx-macros-core v0.8.6 ()
│ │ ├── infraternal-agent v0.1.0 (
)
│ │ ├── infraternal-mesh v0.1.0
│ │ ├── infraternal-server v0.1.0 ()
│ │ ├── serde_cbor_2 v0.13.0
│ │ │ ├── infraternal-server v0.1.0 (
)
│ │ │ └── webauthn-rs-core v0.5.5 ()
│ │ ├── serde_urlencoded v0.7.1
│ │ │ ├── axum v0.8.9 (
)
│ │ │ └── sqlx-sqlite v0.8.6 ()
│ │ ├── sqlx-core v0.8.6 (
)
│ │ ├── sqlx-macros-core v0.8.6 ()
│ │ ├── sqlx-sqlite v0.8.6 (
)
│ │ ├── tinytemplate v1.2.1
│ │ │ └── criterion v0.7.0 ()
│ │ ├── tracing-serde v0.2.0
│ │ │ └── tracing-subscriber v0.3.23
│ │ │ └── infraternal-server v0.1.0 (
)
│ │ ├── tracing-subscriber v0.3.23 ()
│ │ ├── url v2.5.8 (
)
│ │ ├── webauthn-attestation-ca v0.5.5 ()
│ │ ├── webauthn-rs v0.5.5 (
)
│ │ ├── webauthn-rs-core v0.5.5 ()
│ │ └── webauthn-rs-proto v0.5.5 (
)
│ └── url v2.5.8 ()
├── synstructure v0.14.0
│ ├── yoke-derive v0.8.4
│ │ └── yoke v0.8.3
│ │ ├── icu_collections v2.3.0 (
)
│ │ ├── icu_provider v2.3.1 ()
│ │ ├── zerotrie v0.2.5 (
)
│ │ └── zerovec v0.11.8
│ │ ├── icu_collections v2.3.0 ()
│ │ ├── icu_locale_core v2.3.0 (
)
│ │ ├── icu_normalizer v2.3.0 ()
│ │ ├── icu_properties v2.3.0 (
)
│ │ ├── icu_provider v2.3.1 ()
│ │ ├── potential_utf v0.1.6
│ │ │ └── icu_collections v2.3.0 (
)
│ │ └── tinystr v0.8.4 ()
│ └── zerofrom-derive v0.1.8
│ └── zerofrom v0.1.8
│ ├── icu_collections v2.3.0 (
)
│ ├── icu_provider v2.3.1 ()
│ ├── yoke v0.8.3 (
)
│ ├── zerotrie v0.2.5 ()
│ └── zerovec v0.11.8 (
)
├── thiserror-impl v2.0.21
│ └── thiserror v2.0.21
│ ├── infraternal v0.1.0 ()
│ ├── infraternal-mesh v0.1.0 (
)
│ ├── infraternal-server v0.1.0 ()
│ ├── sqlx-core v0.8.6 (
)
│ ├── sqlx-sqlite v0.8.6 ()
│ └── tungstenite v0.29.0
│ └── tokio-tungstenite v0.29.0 (
)
├── tokio-macros v2.7.2
│ └── tokio v1.53.2
│ ├── axum v0.8.9 ()
│ ├── axum-server v0.8.0 (
)
│ ├── fs-err v3.3.2
│ │ └── axum-server v0.8.0 ()
│ ├── h2 v0.4.19
│ │ └── hyper v1.11.1
│ │ ├── axum v0.8.9 (
)
│ │ ├── axum-server v0.8.0 ()
│ │ └── hyper-util v0.1.21
│ │ ├── axum v0.8.9 (
)
│ │ └── axum-server v0.8.0 ()
│ ├── hyper v1.11.1 (
)
│ ├── hyper-util v0.1.21 ()
│ ├── infraternal v0.1.0 (
)
│ ├── infraternal-agent v0.1.0 ()
│ ├── infraternal-server v0.1.0 (
)
│ ├── sqlx-core v0.8.6 ()
│ ├── sqlx-macros-core v0.8.6 (
)
│ ├── tokio-openssl v0.6.5
│ │ └── axum-server v0.8.0 ()
│ ├── tokio-stream v0.1.19
│ │ └── sqlx-core v0.8.6 (
)
│ ├── tokio-tungstenite v0.29.0 ()
│ ├── tokio-util v0.7.19
│ │ ├── h2 v0.4.19 (
)
│ │ └── tower-http v0.6.11 ()
│ ├── tower v0.5.3 (
)
│ └── tower-http v0.6.11 ()
├── wasm-bindgen-macro-support v0.2.129
│ └── wasm-bindgen-macro v0.2.129
│ └── wasm-bindgen v0.2.129
│ ├── js-sys v0.3.106 (
)
│ ├── plotters v0.3.7 ()
│ └── web-sys v0.3.106 (
)
├── yoke-derive v0.8.4 ()
├── zerofrom-derive v0.1.8 (
)
└── zerovec-derive v0.11.6
└── zerovec v0.11.8 (*)

warning[duplicate]: found 2 duplicate entries for crate 'synstructure'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:229:1
│
229 │ ╭ synstructure 0.13.2 registry+https://github.com/rust-lang/crates.io-index
230 │ │ synstructure 0.14.0 registry+https://github.com/rust-lang/crates.io-index
│ ╰─────────────────────────────────────────────────────────────────────────┘ lock entries
│
├ synstructure v0.13.2
└── asn1-rs-derive v0.5.1
└── asn1-rs v0.6.2
├── der-parser v9.0.0
│ ├── webauthn-rs-core v0.5.5
│ │ └── webauthn-rs v0.5.5
│ │ └── infraternal-server v0.1.0
│ │ └── infraternal v0.1.0
│ └── x509-parser v0.16.0
│ └── webauthn-rs-core v0.5.5 ()
├── oid-registry v0.7.1
│ └── x509-parser v0.16.0 (
)
└── x509-parser v0.16.0 ()
├ synstructure v0.14.0
├── yoke-derive v0.8.4
│ └── yoke v0.8.3
│ ├── icu_collections v2.3.0
│ │ ├── icu_normalizer v2.3.0
│ │ │ └── idna_adapter v1.2.2
│ │ │ └── idna v1.1.0
│ │ │ └── url v2.5.8
│ │ │ ├── infraternal-server v0.1.0
│ │ │ │ └── infraternal v0.1.0
│ │ │ ├── sqlx-core v0.8.6
│ │ │ │ ├── sqlx v0.8.6
│ │ │ │ │ ├── infraternal v0.1.0 (
)
│ │ │ │ │ └── infraternal-server v0.1.0 ()
│ │ │ │ ├── sqlx-macros v0.8.6
│ │ │ │ │ └── sqlx v0.8.6 (
)
│ │ │ │ ├── sqlx-macros-core v0.8.6
│ │ │ │ │ └── sqlx-macros v0.8.6 ()
│ │ │ │ └── sqlx-sqlite v0.8.6
│ │ │ │ ├── sqlx v0.8.6 (
)
│ │ │ │ └── sqlx-macros-core v0.8.6 ()
│ │ │ ├── sqlx-macros-core v0.8.6 (
)
│ │ │ ├── sqlx-sqlite v0.8.6 ()
│ │ │ ├── webauthn-rs v0.5.5
│ │ │ │ └── infraternal-server v0.1.0 (
)
│ │ │ ├── webauthn-rs-core v0.5.5
│ │ │ │ └── webauthn-rs v0.5.5 ()
│ │ │ └── webauthn-rs-proto v0.5.5
│ │ │ └── webauthn-rs-core v0.5.5 (
)
│ │ └── icu_properties v2.3.0
│ │ └── idna_adapter v1.2.2 ()
│ ├── icu_provider v2.3.1
│ │ ├── icu_normalizer v2.3.0 (
)
│ │ └── icu_properties v2.3.0 ()
│ ├── zerotrie v0.2.5
│ │ ├── icu_properties v2.3.0 (
)
│ │ └── icu_provider v2.3.1 ()
│ └── zerovec v0.11.8
│ ├── icu_collections v2.3.0 (
)
│ ├── icu_locale_core v2.3.0
│ │ ├── icu_properties v2.3.0 ()
│ │ └── icu_provider v2.3.1 (
)
│ ├── icu_normalizer v2.3.0 ()
│ ├── icu_properties v2.3.0 (
)
│ ├── icu_provider v2.3.1 ()
│ ├── potential_utf v0.1.6
│ │ └── icu_collections v2.3.0 (
)
│ └── tinystr v0.8.4
│ └── icu_locale_core v2.3.0 ()
└── zerofrom-derive v0.1.8
└── zerofrom v0.1.8
├── icu_collections v2.3.0 (
)
├── icu_provider v2.3.1 ()
├── yoke v0.8.3 (
)
├── zerotrie v0.2.5 ()
└── zerovec v0.11.8 (
)

warning[duplicate]: found 2 duplicate entries for crate 'thiserror'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:231:1
│
231 │ ╭ thiserror 1.0.69 registry+https://github.com/rust-lang/crates.io-index
232 │ │ thiserror 2.0.21 registry+https://github.com/rust-lang/crates.io-index
│ ╰──────────────────────────────────────────────────────────────────────┘ lock entries
│
├ thiserror v1.0.69
├── asn1-rs v0.6.2
│ ├── der-parser v9.0.0
│ │ ├── webauthn-rs-core v0.5.5
│ │ │ └── webauthn-rs v0.5.5
│ │ │ └── infraternal-server v0.1.0
│ │ │ └── infraternal v0.1.0
│ │ └── x509-parser v0.16.0
│ │ └── webauthn-rs-core v0.5.5 ()
│ ├── oid-registry v0.7.1
│ │ └── x509-parser v0.16.0 (
)
│ └── x509-parser v0.16.0 ()
├── webauthn-rs-core v0.5.5 (
)
└── x509-parser v0.16.0 ()
├ thiserror v2.0.21
├── infraternal v0.1.0
├── infraternal-mesh v0.1.0
├── infraternal-server v0.1.0
│ └── infraternal v0.1.0 (
)
├── sqlx-core v0.8.6
│ ├── sqlx v0.8.6
│ │ ├── infraternal v0.1.0 ()
│ │ └── infraternal-server v0.1.0 (
)
│ ├── sqlx-macros v0.8.6
│ │ └── sqlx v0.8.6 ()
│ ├── sqlx-macros-core v0.8.6
│ │ └── sqlx-macros v0.8.6 (
)
│ └── sqlx-sqlite v0.8.6
│ ├── sqlx v0.8.6 ()
│ └── sqlx-macros-core v0.8.6 (
)
├── sqlx-sqlite v0.8.6 ()
└── tungstenite v0.29.0
└── tokio-tungstenite v0.29.0
├── axum v0.8.9
│ └── infraternal-server v0.1.0 (
)
└── (dev) infraternal-server v0.1.0 (*)

warning[duplicate]: found 2 duplicate entries for crate 'thiserror-impl'
┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:233:1
│
233 │ ╭ thiserror-impl 1.0.69 registry+https://github.com/rust-lang/crates.io-index
234 │ │ thiserror-impl 2.0.21 registry+https://github.com/rust-lang/crates.io-index
│ ╰───────────────────────────────────────────────────────────────────────────┘ lock entries
│
├ thiserror-impl v1.0.69
└── thiserror v1.0.69
├── asn1-rs v0.6.2
│ ├── der-parser v9.0.0
│ │ ├── webauthn-rs-core v0.5.5
│ │ │ └── webauthn-rs v0.5.5
│ │ │ └── infraternal-server v0.1.0
│ │ │ └── infraternal v0.1.0
│ │ └── x509-parser v0.16.0
│ │ └── webauthn-rs-core v0.5.5 ()
│ ├── oid-registry v0.7.1
│ │ └── x509-parser v0.16.0 (
)
│ └── x509-parser v0.16.0 ()
├── webauthn-rs-core v0.5.5 (
)
└── x509-parser v0.16.0 ()
├ thiserror-impl v2.0.21
└── thiserror v2.0.21
├── infraternal v0.1.0
├── infraternal-mesh v0.1.0
├── infraternal-server v0.1.0
│ └── infraternal v0.1.0 (
)
├── sqlx-core v0.8.6
│ ├── sqlx v0.8.6
│ │ ├── infraternal v0.1.0 ()
│ │ └── infraternal-server v0.1.0 (
)
│ ├── sqlx-macros v0.8.6
│ │ └── sqlx v0.8.6 ()
│ ├── sqlx-macros-core v0.8.6
│ │ └── sqlx-macros v0.8.6 (
)
│ └── sqlx-sqlite v0.8.6
│ ├── sqlx v0.8.6 ()
│ └── sqlx-macros-core v0.8.6 (
)
├── sqlx-sqlite v0.8.6 ()
└── tungstenite v0.29.0
└── tokio-tungstenite v0.29.0
├── axum v0.8.9
│ └── infraternal-server v0.1.0 (
)
└── (dev) infraternal-server v0.1.0 (*)

advisories ok, bans ok, licenses ok, sources ok

==> static builds
Finished release profile [optimized] target(s) in 0.42s
/home/kayg/.cache/codex-scratch/canvas-streams/target/x86_64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped
PT_INTERP: absent; size: 15966096 bytes (baseline 16142672 + allowance 262144 = max 16404816)
Finished release profile [optimized] target(s) in 0.46s
/home/kayg/.cache/codex-scratch/canvas-streams/target/aarch64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped
PT_INTERP: absent; size: 13426576 bytes (baseline 13555672 + allowance 262144 = max 13817816)
server subcommand: exit 2, not implemented
agent subcommand: exit 2, not implemented

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

==> Vendored Ghostty artifact checksums
dist/ghostty-web.js: OK
dist/ghostty-vt.wasm: OK
dist/index.d.ts: OK

==> TypeScript protocol compiler

==> Tracer compiler, precompression and bundle transfer budget
bun install v1.4.2 (744846f84)

  • @types/bun@1.3.8
  • @types/node@22.19.0
  • @types/ws@8.5.10
  • playwright@1.61.1
  • typescript@5.9.3
  • ws@8.18.3
  • @scure/bip39@2.2.0
  • geist@1.7.2

38 packages installed [177.00ms]
$ bun x tsc --project tsconfig.json
bun test v1.4.2 (744846f84)

browser-build.test.ts:
(pass) the browser renderer has no unresolved Vite Node-file shim request [21.08ms]

precompress.test.ts:
(pass) text sidecars round-trip deterministically; compressed formats remain identity [15.62ms]

test/recovery-ui.test.ts:
(pass) compiled recovery UI mode off obeys its URL boundary [4.79ms]
(pass) compiled recovery UI mode preview obeys its URL boundary [2.12ms]
(pass) compiled recovery UI mode 1 obeys its URL boundary [4.92ms]

test/recovery-crypto.test.ts:
(pass) HKDF siblings match independent implementation and bind unwrap to domain, account, kind and version [14.37ms]
(pass) 100 repeated wrapping operations generate independent salts and nonces [15.34ms]

test/recovery-wait.test.ts:
(pass) server remaining wait 0s is accepted through the capability policy maximum [3.29ms]
(pass) server remaining wait 86400s is accepted through the capability policy maximum [1.26ms]
(pass) server remaining wait 90000s is accepted through the capability policy maximum [1.70ms]
(pass) server remaining wait 172800s is accepted through the capability policy maximum [1.58ms]
(pass) malformed or excessive remaining wait -1 is denied [1.58ms]
(pass) malformed or excessive remaining wait 0.5 is denied [1.19ms]
(pass) malformed or excessive remaining wait 172801 is denied [1.28ms]
(pass) malformed or excessive remaining wait 9007199254740992 is denied [1.45ms]
(pass) malformed or excessive remaining wait 90000 is denied [1.53ms]

test/recovery-rotation.test.ts:
(pass) signed-in rotation sends only a local envelope and verifier after acknowledgement [7.62ms]
(pass) abandoned word acknowledgement uploads nothing [2.83ms]
(pass) settled acknowledgement cannot upload later (dismissed) [3.14ms]
(pass) settled acknowledgement cannot upload later (no acknowledgement) [2.80ms]

20 pass
0 fail
376 expect() calls
Ran 20 tests across 6 files. [150.00ms]
$ bun run build.ts
built main.js, chunk-662np71y.js, chunk-6nhq7gz1.js, backdrop.worker.js, faulty-terminal.worker.js, chunk-em1aaf2h.js, chunk-bg6rq3gy.js, chunk-efr1w5a7.js, chunk-axbkkqp1.js, chunk-50xk1qdf.js
chunk-662np71y.js: identity=8373 gzip=3573 brotli=3175 bytes
chunk-efr1w5a7.js: identity=24649 gzip=8391 brotli=7510 bytes
chunk-50xk1qdf.js: identity=713008 gzip=206843 brotli=167718 bytes
faulty-terminal.worker.js: identity=1084 gzip=559 brotli=478 bytes
backdrop.worker.js: identity=241 gzip=210 brotli=158 bytes
chunk-axbkkqp1.js: identity=90 gzip=90 brotli=78 bytes
chunk-bg6rq3gy.js: identity=185 gzip=149 brotli=130 bytes
chunk-6nhq7gz1.js: identity=6464 gzip=3106 brotli=2807 bytes
chunk-em1aaf2h.js: identity=9807 gzip=4014 brotli=3449 bytes
main.js: identity=87507 gzip=32668 brotli=28340 bytes
JavaScript transfer: identity=851408 gzip=259603/307200 brotli=213843/256000 bytes
fonts/MapleMonoNF-Italic.latin.woff2: identity=37148 gzip=37148 brotli=37148 bytes
fonts/MapleMonoNF-Medium.latin.woff2: identity=33904 gzip=33904 brotli=33904 bytes
fonts/MapleMonoNF-Regular.latin.woff2: identity=32852 gzip=32852 brotli=32852 bytes
fonts/MapleMonoNF-SemiBold.latin.woff2: identity=34160 gzip=34160 brotli=34160 bytes
fonts/MapleMonoNF-SemiBoldItalic.latin.woff2: identity=38228 gzip=38228 brotli=38228 bytes
fonts/MapleMonoNF-symbols.woff2: identity=223748 gzip=223748 brotli=223748 bytes
Font transfer: critical=32852/36864 latin=176292/184320 symbols=223748/235520 bytes

==> Rust stream oracle (for the differential test)

==> TypeScript protocol tests
bun test v1.4.2 (744846f84)

src/codec.test.ts:
(pass) wire protocol golden vectors > encodes and decodes each frame exactly as the shared manifest describes [7.29ms]
(pass) wire protocol golden vectors > returns borrowed payload views and writes into reusable buffers [0.21ms]
(pass) wire protocol golden vectors > decodes muxed messages split across WebSocket messages [1.03ms]
(pass) wire protocol golden vectors > rejects oversized, non-canonical, unknown, and malformed frame bytes [0.26ms]
(pass) split mux header preserves trailing Close [0.30ms]
(pass) visibility layouts reject unknown modes, reversed ranges and reserved flags [0.18ms]

src/stream.test.ts:
stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [3603.89ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [8.67ms]

8 pass
0 fail
38804 expect() calls
Ran 8 tests across 2 files. [3.63s]

Step 1 complete: a73aa8195e7c99824aa8196cf5e55b19b37ff026. Additive contracts and both codecs, capability bit 4; no conflict with #99. scripts/verify fast exit 0 (CARGO_BUILD_JOBS=2, RUST_TEST_THREADS=1, TRACER_TEST_PORT=4317, CPUWeight=10000). Rust protocol: 8 passed. Verbatim final gate output: ==> cargo-deny warning[duplicate]: found 2 duplicate entries for crate 'base64' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:24:1 │ 24 │ ╭ base64 0.21.7 registry+https://github.com/rust-lang/crates.io-index 25 │ │ base64 0.22.1 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────────┘ lock entries │ ├ base64 v0.21.7 ├── base64urlsafedata v0.5.5 │ ├── webauthn-attestation-ca v0.5.5 │ │ └── webauthn-rs-core v0.5.5 │ │ └── webauthn-rs v0.5.5 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── webauthn-rs v0.5.5 (*) │ ├── webauthn-rs-core v0.5.5 (*) │ └── webauthn-rs-proto v0.5.5 │ └── webauthn-rs-core v0.5.5 (*) ├── webauthn-rs-core v0.5.5 (*) └── webauthn-rs-proto v0.5.5 (*) ├ base64 v0.22.1 ├── axum v0.8.9 │ └── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── infraternal-server v0.1.0 (*) └── sqlx-core v0.8.6 ├── sqlx v0.8.6 │ ├── infraternal v0.1.0 (*) │ └── infraternal-server v0.1.0 (*) ├── sqlx-macros v0.8.6 │ └── sqlx v0.8.6 (*) ├── sqlx-macros-core v0.8.6 │ └── sqlx-macros v0.8.6 (*) └── sqlx-sqlite v0.8.6 ├── sqlx v0.8.6 (*) └── sqlx-macros-core v0.8.6 (*) warning[duplicate]: found 3 duplicate entries for crate 'getrandom' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:88:1 │ 88 │ ╭ getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index 89 │ │ getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index 90 │ │ getrandom 0.4.3 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries │ ├ getrandom v0.2.17 └── rand_core v0.6.4 ├── bip39 v2.2.2 │ └── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── crypto-common v0.1.7 │ ├── aead v0.5.2 │ │ └── aes-gcm v0.10.3 │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── cipher v0.4.4 │ │ ├── aes v0.8.4 │ │ │ └── aes-gcm v0.10.3 (*) │ │ ├── aes-gcm v0.10.3 (*) │ │ └── ctr v0.9.2 │ │ └── aes-gcm v0.10.3 (*) │ ├── digest v0.10.7 │ │ ├── blake2 v0.10.6 │ │ │ └── argon2 v0.5.3 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── hmac v0.12.1 │ │ │ └── hkdf v0.12.4 │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ ├── sha1 v0.10.7 │ │ │ ├── axum v0.8.9 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── tungstenite v0.29.0 │ │ │ └── tokio-tungstenite v0.29.0 │ │ │ ├── axum v0.8.9 (*) │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ └── sha2 v0.10.9 │ │ ├── infraternal-server v0.1.0 (*) │ │ ├── sqlx-core v0.8.6 │ │ │ ├── sqlx v0.8.6 │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ ├── sqlx v0.8.6 (*) │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ └── sqlx-macros-core v0.8.6 (*) │ └── universal-hash v0.5.1 │ └── polyval v0.6.2 │ └── ghash v0.5.1 │ └── aes-gcm v0.10.3 (*) ├── password-hash v0.5.0 │ └── argon2 v0.5.3 (*) ├── rand v0.8.8 │ └── bip39 v2.2.2 (*) └── rand_chacha v0.3.1 └── rand v0.8.8 (*) ├ getrandom v0.3.4 └── rand_core v0.9.5 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 (*) └── webauthn-rs-core v0.5.5 (*) ├ getrandom v0.4.3 ├── jobserver v0.1.35 │ └── cc v1.6.0 │ ├── (build) libfuzzer-sys v0.4.13 │ │ └── infraternal-fuzz v0.1.0 │ ├── (build) libsqlite3-sys v0.30.1 │ │ └── sqlx-sqlite v0.8.6 │ │ ├── sqlx v0.8.6 │ │ │ ├── infraternal v0.1.0 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 (*) │ │ └── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── openssl-src v300.6.1+3.6.3 │ │ └── (build) openssl-sys v0.9.117 │ │ ├── axum-server v0.8.0 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── openssl v0.10.81 │ │ │ ├── axum-server v0.8.0 (*) │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ ├── tokio-openssl v0.6.5 │ │ │ │ └── axum-server v0.8.0 (*) │ │ │ ├── webauthn-attestation-ca v0.5.5 │ │ │ │ └── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── tokio-openssl v0.6.5 (*) │ │ ├── webauthn-attestation-ca v0.5.5 (*) │ │ └── webauthn-rs-core v0.5.5 (*) │ └── (build) openssl-sys v0.9.117 (*) └── uuid v1.27.0 ├── infraternal-agent v0.1.0 │ └── infraternal v0.1.0 (*) ├── infraternal-server v0.1.0 (*) ├── webauthn-attestation-ca v0.5.5 (*) ├── webauthn-rs v0.5.5 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'hashbrown' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:94:1 │ 94 │ ╭ hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index 95 │ │ hashbrown 0.17.1 registry+https://github.com/rust-lang/crates.io-index │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries │ ├ hashbrown v0.15.5 ├── hashlink v0.10.0 │ └── sqlx-core v0.8.6 │ ├── sqlx v0.8.6 │ │ ├── infraternal v0.1.0 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 (*) │ ├── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 │ ├── sqlx v0.8.6 (*) │ └── sqlx-macros-core v0.8.6 (*) └── sqlx-core v0.8.6 (*) ├ hashbrown v0.17.1 └── indexmap v2.14.2 ├── h2 v0.4.19 │ └── hyper v1.11.1 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── axum-server v0.8.0 │ │ └── infraternal-server v0.1.0 (*) │ └── hyper-util v0.1.21 │ ├── axum v0.8.9 (*) │ └── axum-server v0.8.0 (*) └── sqlx-core v0.8.6 ├── sqlx v0.8.6 │ ├── infraternal v0.1.0 (*) │ └── infraternal-server v0.1.0 (*) ├── sqlx-macros v0.8.6 │ └── sqlx v0.8.6 (*) ├── sqlx-macros-core v0.8.6 │ └── sqlx-macros v0.8.6 (*) └── sqlx-sqlite v0.8.6 ├── sqlx v0.8.6 (*) └── sqlx-macros-core v0.8.6 (*) warning[duplicate]: found 2 duplicate entries for crate 'r-efi' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:183:1 │ 183 │ ╭ r-efi 5.3.0 registry+https://github.com/rust-lang/crates.io-index 184 │ │ r-efi 6.0.0 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────┘ lock entries │ ├ r-efi v5.3.0 └── getrandom v0.3.4 └── rand_core v0.9.5 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 (*) └── webauthn-rs-core v0.5.5 (*) ├ r-efi v6.0.0 └── getrandom v0.4.3 ├── jobserver v0.1.35 │ └── cc v1.6.0 │ ├── (build) libfuzzer-sys v0.4.13 │ │ └── infraternal-fuzz v0.1.0 │ ├── (build) libsqlite3-sys v0.30.1 │ │ └── sqlx-sqlite v0.8.6 │ │ ├── sqlx v0.8.6 │ │ │ ├── infraternal v0.1.0 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 (*) │ │ └── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── openssl-src v300.6.1+3.6.3 │ │ └── (build) openssl-sys v0.9.117 │ │ ├── axum-server v0.8.0 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── openssl v0.10.81 │ │ │ ├── axum-server v0.8.0 (*) │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ ├── tokio-openssl v0.6.5 │ │ │ │ └── axum-server v0.8.0 (*) │ │ │ ├── webauthn-attestation-ca v0.5.5 │ │ │ │ └── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── tokio-openssl v0.6.5 (*) │ │ ├── webauthn-attestation-ca v0.5.5 (*) │ │ └── webauthn-rs-core v0.5.5 (*) │ └── (build) openssl-sys v0.9.117 (*) └── uuid v1.27.0 ├── infraternal-agent v0.1.0 │ └── infraternal v0.1.0 (*) ├── infraternal-server v0.1.0 (*) ├── webauthn-attestation-ca v0.5.5 (*) ├── webauthn-rs v0.5.5 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'rand' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:185:1 │ 185 │ ╭ rand 0.8.8 registry+https://github.com/rust-lang/crates.io-index 186 │ │ rand 0.9.5 registry+https://github.com/rust-lang/crates.io-index │ ╰────────────────────────────────────────────────────────────────┘ lock entries │ ├ rand v0.8.8 └── bip39 v2.2.2 └── infraternal-server v0.1.0 └── infraternal v0.1.0 ├ rand v0.9.5 ├── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── tungstenite v0.29.0 │ └── tokio-tungstenite v0.29.0 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 (*) │ └── (dev) infraternal-server v0.1.0 (*) └── webauthn-rs-core v0.5.5 └── webauthn-rs v0.5.5 └── infraternal-server v0.1.0 (*) warning[duplicate]: found 2 duplicate entries for crate 'rand_chacha' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:187:1 │ 187 │ ╭ rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index 188 │ │ rand_chacha 0.9.0 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────────────┘ lock entries │ ├ rand_chacha v0.3.1 └── rand v0.8.8 └── bip39 v2.2.2 └── infraternal-server v0.1.0 └── infraternal v0.1.0 ├ rand_chacha v0.9.0 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'rand_core' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:189:1 │ 189 │ ╭ rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index 190 │ │ rand_core 0.9.5 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries │ ├ rand_core v0.6.4 ├── bip39 v2.2.2 │ └── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── crypto-common v0.1.7 │ ├── aead v0.5.2 │ │ └── aes-gcm v0.10.3 │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── cipher v0.4.4 │ │ ├── aes v0.8.4 │ │ │ └── aes-gcm v0.10.3 (*) │ │ ├── aes-gcm v0.10.3 (*) │ │ └── ctr v0.9.2 │ │ └── aes-gcm v0.10.3 (*) │ ├── digest v0.10.7 │ │ ├── blake2 v0.10.6 │ │ │ └── argon2 v0.5.3 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── hmac v0.12.1 │ │ │ └── hkdf v0.12.4 │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ ├── sha1 v0.10.7 │ │ │ ├── axum v0.8.9 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── tungstenite v0.29.0 │ │ │ └── tokio-tungstenite v0.29.0 │ │ │ ├── axum v0.8.9 (*) │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ └── sha2 v0.10.9 │ │ ├── infraternal-server v0.1.0 (*) │ │ ├── sqlx-core v0.8.6 │ │ │ ├── sqlx v0.8.6 │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ ├── sqlx v0.8.6 (*) │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ └── sqlx-macros-core v0.8.6 (*) │ └── universal-hash v0.5.1 │ └── polyval v0.6.2 │ └── ghash v0.5.1 │ └── aes-gcm v0.10.3 (*) ├── password-hash v0.5.0 │ └── argon2 v0.5.3 (*) ├── rand v0.8.8 │ └── bip39 v2.2.2 (*) └── rand_chacha v0.3.1 └── rand v0.8.8 (*) ├ rand_core v0.9.5 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'syn' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:226:1 │ 226 │ ╭ syn 2.0.119 registry+https://github.com/rust-lang/crates.io-index 227 │ │ syn 3.0.6 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────┘ lock entries │ ├ syn v2.0.119 ├── asn1-rs-derive v0.5.1 │ └── asn1-rs v0.6.2 │ ├── der-parser v9.0.0 │ │ ├── webauthn-rs-core v0.5.5 │ │ │ └── webauthn-rs v0.5.5 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ └── x509-parser v0.16.0 │ │ └── webauthn-rs-core v0.5.5 (*) │ ├── oid-registry v0.7.1 │ │ └── x509-parser v0.16.0 (*) │ └── x509-parser v0.16.0 (*) ├── asn1-rs-impl v0.2.0 │ └── asn1-rs v0.6.2 (*) ├── openssl-macros v0.1.1 │ └── openssl v0.10.81 │ ├── axum-server v0.8.0 │ │ └── infraternal-server v0.1.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── tokio-openssl v0.6.5 │ │ └── axum-server v0.8.0 (*) │ ├── webauthn-attestation-ca v0.5.5 │ │ └── webauthn-rs-core v0.5.5 (*) │ └── webauthn-rs-core v0.5.5 (*) ├── sqlx-macros v0.8.6 │ └── sqlx v0.8.6 │ ├── infraternal v0.1.0 (*) │ └── infraternal-server v0.1.0 (*) ├── sqlx-macros-core v0.8.6 │ └── sqlx-macros v0.8.6 (*) ├── synstructure v0.13.2 │ └── asn1-rs-derive v0.5.1 (*) ├── thiserror-impl v1.0.69 │ └── thiserror v1.0.69 │ ├── asn1-rs v0.6.2 (*) │ ├── webauthn-rs-core v0.5.5 (*) │ └── x509-parser v0.16.0 (*) ├── tracing-attributes v0.1.31 │ └── tracing v0.1.44 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 (*) │ ├── axum-core v0.5.6 │ │ └── axum v0.8.9 (*) │ ├── h2 v0.4.19 │ │ └── hyper v1.11.1 │ │ ├── axum v0.8.9 (*) │ │ ├── axum-server v0.8.0 (*) │ │ └── hyper-util v0.1.21 │ │ ├── axum v0.8.9 (*) │ │ └── axum-server v0.8.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 │ │ ├── sqlx v0.8.6 (*) │ │ ├── sqlx-macros v0.8.6 (*) │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ └── sqlx-sqlite v0.8.6 │ │ ├── sqlx v0.8.6 (*) │ │ └── sqlx-macros-core v0.8.6 (*) │ ├── sqlx-sqlite v0.8.6 (*) │ ├── tower v0.5.3 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── tracing-subscriber v0.3.23 │ │ └── infraternal-server v0.1.0 (*) │ ├── webauthn-attestation-ca v0.5.5 (*) │ ├── webauthn-rs v0.5.5 (*) │ └── webauthn-rs-core v0.5.5 (*) └── zerocopy-derive v0.8.60 └── zerocopy v0.8.60 ├── half v2.7.1 │ ├── ciborium-ll v0.2.2 │ │ └── ciborium v0.2.2 │ │ └── criterion v0.7.0 │ │ └── (dev) infraternal-protocol v0.1.0 │ │ ├── infraternal-agent v0.1.0 │ │ │ └── infraternal v0.1.0 (*) │ │ ├── infraternal-fuzz v0.1.0 │ │ └── infraternal-server v0.1.0 (*) │ └── serde_cbor_2 v0.13.0 │ ├── infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 (*) └── ppv-lite86 v0.2.21 ├── rand_chacha v0.3.1 │ └── rand v0.8.8 │ └── bip39 v2.2.2 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 (*) │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 (*) └── webauthn-rs-core v0.5.5 (*) ├ syn v3.0.6 ├── clap_derive v4.6.7 │ └── clap v4.6.7 │ ├── criterion v0.7.0 │ │ └── (dev) infraternal-protocol v0.1.0 │ │ ├── infraternal-agent v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ ├── infraternal-fuzz v0.1.0 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 (*) │ └── infraternal v0.1.0 (*) ├── displaydoc v0.2.7 │ ├── asn1-rs v0.6.2 │ │ ├── der-parser v9.0.0 │ │ │ ├── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── x509-parser v0.16.0 │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── oid-registry v0.7.1 │ │ │ └── x509-parser v0.16.0 (*) │ │ └── x509-parser v0.16.0 (*) │ ├── der-parser v9.0.0 (*) │ ├── icu_collections v2.3.0 │ │ ├── icu_normalizer v2.3.0 │ │ │ └── idna_adapter v1.2.2 │ │ │ └── idna v1.1.0 │ │ │ └── url v2.5.8 │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ ├── sqlx-core v0.8.6 │ │ │ │ ├── sqlx v0.8.6 │ │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ │ ├── sqlx v0.8.6 (*) │ │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-sqlite v0.8.6 (*) │ │ │ ├── webauthn-rs v0.5.5 (*) │ │ │ ├── webauthn-rs-core v0.5.5 (*) │ │ │ └── webauthn-rs-proto v0.5.5 │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ └── icu_properties v2.3.0 │ │ └── idna_adapter v1.2.2 (*) │ ├── icu_locale_core v2.3.0 │ │ ├── icu_properties v2.3.0 (*) │ │ └── icu_provider v2.3.1 │ │ ├── icu_normalizer v2.3.0 (*) │ │ └── icu_properties v2.3.0 (*) │ ├── icu_properties v2.3.0 (*) │ ├── icu_provider v2.3.1 (*) │ ├── tinystr v0.8.4 │ │ └── icu_locale_core v2.3.0 (*) │ └── zerotrie v0.2.5 │ ├── icu_properties v2.3.0 (*) │ └── icu_provider v2.3.1 (*) ├── futures-macro v0.3.34 │ └── futures-util v0.3.34 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 (*) │ ├── futures-executor v0.3.34 │ │ └── sqlx-sqlite v0.8.6 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── js-sys v0.3.106 │ │ └── web-sys v0.3.106 │ │ └── plotters v0.3.7 │ │ └── criterion v0.7.0 (*) │ ├── sqlx-core v0.8.6 (*) │ ├── sqlx-sqlite v0.8.6 (*) │ ├── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── tower v0.5.3 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── tower-http v0.6.11 │ └── infraternal-server v0.1.0 (*) ├── serde_derive v1.0.229 │ ├── serde v1.0.229 │ │ ├── base64urlsafedata v0.5.5 │ │ │ ├── webauthn-attestation-ca v0.5.5 │ │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ │ ├── webauthn-rs v0.5.5 (*) │ │ │ ├── webauthn-rs-core v0.5.5 (*) │ │ │ └── webauthn-rs-proto v0.5.5 (*) │ │ ├── bip39 v2.2.2 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── ciborium v0.2.2 │ │ │ └── criterion v0.7.0 (*) │ │ ├── criterion v0.7.0 (*) │ │ ├── either v1.18.0 │ │ │ ├── axum-server v0.8.0 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── itertools v0.13.0 │ │ │ │ ├── criterion v0.7.0 (*) │ │ │ │ └── criterion-plot v0.6.0 │ │ │ │ └── criterion v0.7.0 (*) │ │ │ ├── rayon v1.12.0 │ │ │ │ └── criterion v0.7.0 (*) │ │ │ ├── sqlx-core v0.8.6 (*) │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ ├── infraternal-agent v0.1.0 (*) │ │ ├── infraternal-mesh v0.1.0 │ │ ├── infraternal-server v0.1.0 (*) │ │ ├── serde_cbor_2 v0.13.0 │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── serde_urlencoded v0.7.1 │ │ │ ├── axum v0.8.9 (*) │ │ │ └── sqlx-sqlite v0.8.6 (*) │ │ ├── sqlx-core v0.8.6 (*) │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ ├── sqlx-sqlite v0.8.6 (*) │ │ ├── tinytemplate v1.2.1 │ │ │ └── criterion v0.7.0 (*) │ │ ├── tracing-serde v0.2.0 │ │ │ └── tracing-subscriber v0.3.23 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── tracing-subscriber v0.3.23 (*) │ │ ├── url v2.5.8 (*) │ │ ├── webauthn-attestation-ca v0.5.5 (*) │ │ ├── webauthn-rs v0.5.5 (*) │ │ ├── webauthn-rs-core v0.5.5 (*) │ │ └── webauthn-rs-proto v0.5.5 (*) │ └── url v2.5.8 (*) ├── synstructure v0.14.0 │ ├── yoke-derive v0.8.4 │ │ └── yoke v0.8.3 │ │ ├── icu_collections v2.3.0 (*) │ │ ├── icu_provider v2.3.1 (*) │ │ ├── zerotrie v0.2.5 (*) │ │ └── zerovec v0.11.8 │ │ ├── icu_collections v2.3.0 (*) │ │ ├── icu_locale_core v2.3.0 (*) │ │ ├── icu_normalizer v2.3.0 (*) │ │ ├── icu_properties v2.3.0 (*) │ │ ├── icu_provider v2.3.1 (*) │ │ ├── potential_utf v0.1.6 │ │ │ └── icu_collections v2.3.0 (*) │ │ └── tinystr v0.8.4 (*) │ └── zerofrom-derive v0.1.8 │ └── zerofrom v0.1.8 │ ├── icu_collections v2.3.0 (*) │ ├── icu_provider v2.3.1 (*) │ ├── yoke v0.8.3 (*) │ ├── zerotrie v0.2.5 (*) │ └── zerovec v0.11.8 (*) ├── thiserror-impl v2.0.21 │ └── thiserror v2.0.21 │ ├── infraternal v0.1.0 (*) │ ├── infraternal-mesh v0.1.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 (*) │ ├── sqlx-sqlite v0.8.6 (*) │ └── tungstenite v0.29.0 │ └── tokio-tungstenite v0.29.0 (*) ├── tokio-macros v2.7.2 │ └── tokio v1.53.2 │ ├── axum v0.8.9 (*) │ ├── axum-server v0.8.0 (*) │ ├── fs-err v3.3.2 │ │ └── axum-server v0.8.0 (*) │ ├── h2 v0.4.19 │ │ └── hyper v1.11.1 │ │ ├── axum v0.8.9 (*) │ │ ├── axum-server v0.8.0 (*) │ │ └── hyper-util v0.1.21 │ │ ├── axum v0.8.9 (*) │ │ └── axum-server v0.8.0 (*) │ ├── hyper v1.11.1 (*) │ ├── hyper-util v0.1.21 (*) │ ├── infraternal v0.1.0 (*) │ ├── infraternal-agent v0.1.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 (*) │ ├── tokio-openssl v0.6.5 │ │ └── axum-server v0.8.0 (*) │ ├── tokio-stream v0.1.19 │ │ └── sqlx-core v0.8.6 (*) │ ├── tokio-tungstenite v0.29.0 (*) │ ├── tokio-util v0.7.19 │ │ ├── h2 v0.4.19 (*) │ │ └── tower-http v0.6.11 (*) │ ├── tower v0.5.3 (*) │ └── tower-http v0.6.11 (*) ├── wasm-bindgen-macro-support v0.2.129 │ └── wasm-bindgen-macro v0.2.129 │ └── wasm-bindgen v0.2.129 │ ├── js-sys v0.3.106 (*) │ ├── plotters v0.3.7 (*) │ └── web-sys v0.3.106 (*) ├── yoke-derive v0.8.4 (*) ├── zerofrom-derive v0.1.8 (*) └── zerovec-derive v0.11.6 └── zerovec v0.11.8 (*) warning[duplicate]: found 2 duplicate entries for crate 'synstructure' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:229:1 │ 229 │ ╭ synstructure 0.13.2 registry+https://github.com/rust-lang/crates.io-index 230 │ │ synstructure 0.14.0 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────────────┘ lock entries │ ├ synstructure v0.13.2 └── asn1-rs-derive v0.5.1 └── asn1-rs v0.6.2 ├── der-parser v9.0.0 │ ├── webauthn-rs-core v0.5.5 │ │ └── webauthn-rs v0.5.5 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ └── x509-parser v0.16.0 │ └── webauthn-rs-core v0.5.5 (*) ├── oid-registry v0.7.1 │ └── x509-parser v0.16.0 (*) └── x509-parser v0.16.0 (*) ├ synstructure v0.14.0 ├── yoke-derive v0.8.4 │ └── yoke v0.8.3 │ ├── icu_collections v2.3.0 │ │ ├── icu_normalizer v2.3.0 │ │ │ └── idna_adapter v1.2.2 │ │ │ └── idna v1.1.0 │ │ │ └── url v2.5.8 │ │ │ ├── infraternal-server v0.1.0 │ │ │ │ └── infraternal v0.1.0 │ │ │ ├── sqlx-core v0.8.6 │ │ │ │ ├── sqlx v0.8.6 │ │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ │ ├── sqlx v0.8.6 (*) │ │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-sqlite v0.8.6 (*) │ │ │ ├── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 (*) │ │ │ └── webauthn-rs-proto v0.5.5 │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ └── icu_properties v2.3.0 │ │ └── idna_adapter v1.2.2 (*) │ ├── icu_provider v2.3.1 │ │ ├── icu_normalizer v2.3.0 (*) │ │ └── icu_properties v2.3.0 (*) │ ├── zerotrie v0.2.5 │ │ ├── icu_properties v2.3.0 (*) │ │ └── icu_provider v2.3.1 (*) │ └── zerovec v0.11.8 │ ├── icu_collections v2.3.0 (*) │ ├── icu_locale_core v2.3.0 │ │ ├── icu_properties v2.3.0 (*) │ │ └── icu_provider v2.3.1 (*) │ ├── icu_normalizer v2.3.0 (*) │ ├── icu_properties v2.3.0 (*) │ ├── icu_provider v2.3.1 (*) │ ├── potential_utf v0.1.6 │ │ └── icu_collections v2.3.0 (*) │ └── tinystr v0.8.4 │ └── icu_locale_core v2.3.0 (*) └── zerofrom-derive v0.1.8 └── zerofrom v0.1.8 ├── icu_collections v2.3.0 (*) ├── icu_provider v2.3.1 (*) ├── yoke v0.8.3 (*) ├── zerotrie v0.2.5 (*) └── zerovec v0.11.8 (*) warning[duplicate]: found 2 duplicate entries for crate 'thiserror' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:231:1 │ 231 │ ╭ thiserror 1.0.69 registry+https://github.com/rust-lang/crates.io-index 232 │ │ thiserror 2.0.21 registry+https://github.com/rust-lang/crates.io-index │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries │ ├ thiserror v1.0.69 ├── asn1-rs v0.6.2 │ ├── der-parser v9.0.0 │ │ ├── webauthn-rs-core v0.5.5 │ │ │ └── webauthn-rs v0.5.5 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ └── x509-parser v0.16.0 │ │ └── webauthn-rs-core v0.5.5 (*) │ ├── oid-registry v0.7.1 │ │ └── x509-parser v0.16.0 (*) │ └── x509-parser v0.16.0 (*) ├── webauthn-rs-core v0.5.5 (*) └── x509-parser v0.16.0 (*) ├ thiserror v2.0.21 ├── infraternal v0.1.0 ├── infraternal-mesh v0.1.0 ├── infraternal-server v0.1.0 │ └── infraternal v0.1.0 (*) ├── sqlx-core v0.8.6 │ ├── sqlx v0.8.6 │ │ ├── infraternal v0.1.0 (*) │ │ └── infraternal-server v0.1.0 (*) │ ├── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 │ ├── sqlx v0.8.6 (*) │ └── sqlx-macros-core v0.8.6 (*) ├── sqlx-sqlite v0.8.6 (*) └── tungstenite v0.29.0 └── tokio-tungstenite v0.29.0 ├── axum v0.8.9 │ └── infraternal-server v0.1.0 (*) └── (dev) infraternal-server v0.1.0 (*) warning[duplicate]: found 2 duplicate entries for crate 'thiserror-impl' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:233:1 │ 233 │ ╭ thiserror-impl 1.0.69 registry+https://github.com/rust-lang/crates.io-index 234 │ │ thiserror-impl 2.0.21 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────────────────┘ lock entries │ ├ thiserror-impl v1.0.69 └── thiserror v1.0.69 ├── asn1-rs v0.6.2 │ ├── der-parser v9.0.0 │ │ ├── webauthn-rs-core v0.5.5 │ │ │ └── webauthn-rs v0.5.5 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ └── x509-parser v0.16.0 │ │ └── webauthn-rs-core v0.5.5 (*) │ ├── oid-registry v0.7.1 │ │ └── x509-parser v0.16.0 (*) │ └── x509-parser v0.16.0 (*) ├── webauthn-rs-core v0.5.5 (*) └── x509-parser v0.16.0 (*) ├ thiserror-impl v2.0.21 └── thiserror v2.0.21 ├── infraternal v0.1.0 ├── infraternal-mesh v0.1.0 ├── infraternal-server v0.1.0 │ └── infraternal v0.1.0 (*) ├── sqlx-core v0.8.6 │ ├── sqlx v0.8.6 │ │ ├── infraternal v0.1.0 (*) │ │ └── infraternal-server v0.1.0 (*) │ ├── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 │ ├── sqlx v0.8.6 (*) │ └── sqlx-macros-core v0.8.6 (*) ├── sqlx-sqlite v0.8.6 (*) └── tungstenite v0.29.0 └── tokio-tungstenite v0.29.0 ├── axum v0.8.9 │ └── infraternal-server v0.1.0 (*) └── (dev) infraternal-server v0.1.0 (*) advisories ok, bans ok, licenses ok, sources ok ==> static builds Finished `release` profile [optimized] target(s) in 0.42s /home/kayg/.cache/codex-scratch/canvas-streams/target/x86_64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped PT_INTERP: absent; size: 15966096 bytes (baseline 16142672 + allowance 262144 = max 16404816) Finished `release` profile [optimized] target(s) in 0.46s /home/kayg/.cache/codex-scratch/canvas-streams/target/aarch64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped PT_INTERP: absent; size: 13426576 bytes (baseline 13555672 + allowance 262144 = max 13817816) server subcommand: exit 2, not implemented agent subcommand: exit 2, not implemented +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ==> Vendored Ghostty artifact checksums dist/ghostty-web.js: OK dist/ghostty-vt.wasm: OK dist/index.d.ts: OK ==> TypeScript protocol compiler ==> Tracer compiler, precompression and bundle transfer budget bun install v1.4.2 (744846f84) + @types/bun@1.3.8 + @types/node@22.19.0 + @types/ws@8.5.10 + playwright@1.61.1 + typescript@5.9.3 + ws@8.18.3 + @scure/bip39@2.2.0 + geist@1.7.2 38 packages installed [177.00ms] $ bun x tsc --project tsconfig.json bun test v1.4.2 (744846f84) browser-build.test.ts: (pass) the browser renderer has no unresolved Vite Node-file shim request [21.08ms] precompress.test.ts: (pass) text sidecars round-trip deterministically; compressed formats remain identity [15.62ms] test/recovery-ui.test.ts: (pass) compiled recovery UI mode off obeys its URL boundary [4.79ms] (pass) compiled recovery UI mode preview obeys its URL boundary [2.12ms] (pass) compiled recovery UI mode 1 obeys its URL boundary [4.92ms] test/recovery-crypto.test.ts: (pass) HKDF siblings match independent implementation and bind unwrap to domain, account, kind and version [14.37ms] (pass) 100 repeated wrapping operations generate independent salts and nonces [15.34ms] test/recovery-wait.test.ts: (pass) server remaining wait 0s is accepted through the capability policy maximum [3.29ms] (pass) server remaining wait 86400s is accepted through the capability policy maximum [1.26ms] (pass) server remaining wait 90000s is accepted through the capability policy maximum [1.70ms] (pass) server remaining wait 172800s is accepted through the capability policy maximum [1.58ms] (pass) malformed or excessive remaining wait -1 is denied [1.58ms] (pass) malformed or excessive remaining wait 0.5 is denied [1.19ms] (pass) malformed or excessive remaining wait 172801 is denied [1.28ms] (pass) malformed or excessive remaining wait 9007199254740992 is denied [1.45ms] (pass) malformed or excessive remaining wait 90000 is denied [1.53ms] test/recovery-rotation.test.ts: (pass) signed-in rotation sends only a local envelope and verifier after acknowledgement [7.62ms] (pass) abandoned word acknowledgement uploads nothing [2.83ms] (pass) settled acknowledgement cannot upload later (dismissed) [3.14ms] (pass) settled acknowledgement cannot upload later (no acknowledgement) [2.80ms] 20 pass 0 fail 376 expect() calls Ran 20 tests across 6 files. [150.00ms] $ bun run build.ts built main.js, chunk-662np71y.js, chunk-6nhq7gz1.js, backdrop.worker.js, faulty-terminal.worker.js, chunk-em1aaf2h.js, chunk-bg6rq3gy.js, chunk-efr1w5a7.js, chunk-axbkkqp1.js, chunk-50xk1qdf.js chunk-662np71y.js: identity=8373 gzip=3573 brotli=3175 bytes chunk-efr1w5a7.js: identity=24649 gzip=8391 brotli=7510 bytes chunk-50xk1qdf.js: identity=713008 gzip=206843 brotli=167718 bytes faulty-terminal.worker.js: identity=1084 gzip=559 brotli=478 bytes backdrop.worker.js: identity=241 gzip=210 brotli=158 bytes chunk-axbkkqp1.js: identity=90 gzip=90 brotli=78 bytes chunk-bg6rq3gy.js: identity=185 gzip=149 brotli=130 bytes chunk-6nhq7gz1.js: identity=6464 gzip=3106 brotli=2807 bytes chunk-em1aaf2h.js: identity=9807 gzip=4014 brotli=3449 bytes main.js: identity=87507 gzip=32668 brotli=28340 bytes JavaScript transfer: identity=851408 gzip=259603/307200 brotli=213843/256000 bytes fonts/MapleMonoNF-Italic.latin.woff2: identity=37148 gzip=37148 brotli=37148 bytes fonts/MapleMonoNF-Medium.latin.woff2: identity=33904 gzip=33904 brotli=33904 bytes fonts/MapleMonoNF-Regular.latin.woff2: identity=32852 gzip=32852 brotli=32852 bytes fonts/MapleMonoNF-SemiBold.latin.woff2: identity=34160 gzip=34160 brotli=34160 bytes fonts/MapleMonoNF-SemiBoldItalic.latin.woff2: identity=38228 gzip=38228 brotli=38228 bytes fonts/MapleMonoNF-symbols.woff2: identity=223748 gzip=223748 brotli=223748 bytes Font transfer: critical=32852/36864 latin=176292/184320 symbols=223748/235520 bytes ==> Rust stream oracle (for the differential test) ==> TypeScript protocol tests bun test v1.4.2 (744846f84) src/codec.test.ts: (pass) wire protocol golden vectors > encodes and decodes each frame exactly as the shared manifest describes [7.29ms] (pass) wire protocol golden vectors > returns borrowed payload views and writes into reusable buffers [0.21ms] (pass) wire protocol golden vectors > decodes muxed messages split across WebSocket messages [1.03ms] (pass) wire protocol golden vectors > rejects oversized, non-canonical, unknown, and malformed frame bytes [0.26ms] (pass) split mux header preserves trailing Close [0.30ms] (pass) visibility layouts reject unknown modes, reversed ranges and reserved flags [0.18ms] src/stream.test.ts: stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [3603.89ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [8.67ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [3.63s]
Author
Owner

Step 2 complete: 05928c17d3. Shim visibility codec, strict layouts, maximum preview and every fragmentation boundary. scripts/verify fast exit 0 (serialized tests). Verbatim Rust gate summary:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [4059.85ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [8.35ms]

8 pass
0 fail
38804 expect() calls
Ran 8 tests across 2 files. [4.09s]

Step 2 complete: 05928c17d32059a3667bfbe7a0a2675bb634fea6. Shim visibility codec, strict layouts, maximum preview and every fragmentation boundary. scripts/verify fast exit 0 (serialized tests). Verbatim Rust gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [4059.85ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [8.35ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [4.09s]
Author
Owner

Real shim/PTY probe passes: 9 coalesced markers in the two-second sample; observed receiver min interval 239.99 ms (a descheduled receiver can drain queued messages together). Thumbnail seq 709, live Snapshot seq 724, subsequent raw Output contiguous through 749. Local mode changes preserve framing and never reattach. Fixed Peer state measures 160 bytes, 160,000 bytes for D170 200 sessions x 5 viewers; visibility field tuple 32 bytes and no new per-viewer heap allocation. Thumbnail serialization uses the existing visible-cell engine with a 64 KiB cap and omits unfinished VT syntax; live approximate recovery stays unchanged. Full gate in progress. Evidence: scripts/verify-shim-visibility.py, crates/infraternal-shim/tests/unit/session_budgets.rs, crates/infraternal-shim/tests/unit/terminal.rs.

Real shim/PTY probe passes: 9 coalesced markers in the two-second sample; observed receiver min interval 239.99 ms (a descheduled receiver can drain queued messages together). Thumbnail seq 709, live Snapshot seq 724, subsequent raw Output contiguous through 749. Local mode changes preserve framing and never reattach. Fixed Peer state measures 160 bytes, 160,000 bytes for D170 200 sessions x 5 viewers; visibility field tuple 32 bytes and no new per-viewer heap allocation. Thumbnail serialization uses the existing visible-cell engine with a 64 KiB cap and omits unfinished VT syntax; live approximate recovery stays unchanged. Full gate in progress. Evidence: scripts/verify-shim-visibility.py, crates/infraternal-shim/tests/unit/session_budgets.rs, crates/infraternal-shim/tests/unit/terminal.rs.
Author
Owner

Integration surface prepared for the canvas controller: import CanvasConnection from apps/tracer/src/canvas-connection (also re-exported by terminal.ts); create one per canvas, then TerminalClient.open({ connection, host, status, ...existing options }) for each window. terminal.setMode("live" | "marker" | "thumbnail") changes delivery without reattach; terminal.dispose() closes only that window. The controller owns connection.dispose(). CanvasStream also exposes attach/detach with per-window painted/input checkpoints. Modes restore before Credit on reconnect. Codec commits are a73aa81 / 05928c1; real shim/PTY switching passes; scheduling gate in progress. Client and relay implementation is prepared but not yet committed. No canvas UI is duplicated in this lane.

Integration surface prepared for the canvas controller: import CanvasConnection from apps/tracer/src/canvas-connection (also re-exported by terminal.ts); create one per canvas, then TerminalClient.open({ connection, host, status, ...existing options }) for each window. terminal.setMode("live" | "marker" | "thumbnail") changes delivery without reattach; terminal.dispose() closes only that window. The controller owns connection.dispose(). CanvasStream also exposes attach/detach with per-window painted/input checkpoints. Modes restore before Credit on reconnect. Codec commits are a73aa81 / 05928c1; real shim/PTY switching passes; scheduling gate in progress. Client and relay implementation is prepared but not yet committed. No canvas UI is duplicated in this lane.
Author
Owner

Step 3 complete: f2d015d79e. Shim visibility scheduling, bounded complete thumbnails, live snapshot boundaries and real-PTY regression. scripts/verify fast exit 0, toolchain loaded before CPUWeight=10000 scope, RUST_TEST_THREADS=1, TRACER_TEST_PORT=4317. Peer=160 bytes; 200x5 viewers=160000 bytes, added viewer allocations=0. Baseline credit retry completed 2097152 bytes in 393.3 ms; deadlines unchanged. Parser fuzz: shim 527106, direct wire 4511634, stream wire 246003 executions, each 31 seconds, no crash (scratch corpora include proposed seeds). Verbatim gate summary:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [3239.46ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [12.61ms]

8 pass
0 fail
38804 expect() calls
Ran 8 tests across 2 files. [3.27s]

Step 3 complete: f2d015d79ebf35cfde410b7ca16fae12830400a1. Shim visibility scheduling, bounded complete thumbnails, live snapshot boundaries and real-PTY regression. scripts/verify fast exit 0, toolchain loaded before CPUWeight=10000 scope, RUST_TEST_THREADS=1, TRACER_TEST_PORT=4317. Peer=160 bytes; 200x5 viewers=160000 bytes, added viewer allocations=0. Baseline credit retry completed 2097152 bytes in 393.3 ms; deadlines unchanged. Parser fuzz: shim 527106, direct wire 4511634, stream wire 246003 executions, each 31 seconds, no crash (scratch corpora include proposed seeds). Verbatim gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [3239.46ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [12.61ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [3.27s]
Author
Owner

Real daemon/shim/PTY test passes: 12 streams on one mux connection, 8.87 seconds. Stream 24 detaches/reattaches while 11 siblings continue; daemon restart restores each output/input cursor and hidden mode before Credit. Ten marker streams and one thumbnail suppress raw bytes; all hidden streams return through Snapshot and contiguous Output. Preview credit never advances the live cursor. Clippy passes. Evidence: scripts/verify-canvas-streams.py, crates/infraternal/tests/canvas_streams.rs, crates/infraternal-agent/tests/unit/relay.rs. Same test on preserved baseline fails with unexpected leg-B request. Full relay gate in progress.

Real daemon/shim/PTY test passes: 12 streams on one mux connection, 8.87 seconds. Stream 24 detaches/reattaches while 11 siblings continue; daemon restart restores each output/input cursor and hidden mode before Credit. Ten marker streams and one thumbnail suppress raw bytes; all hidden streams return through Snapshot and contiguous Output. Preview credit never advances the live cursor. Clippy passes. Evidence: scripts/verify-canvas-streams.py, crates/infraternal/tests/canvas_streams.rs, crates/infraternal-agent/tests/unit/relay.rs. Same test on preserved baseline fails with unexpected leg-B request. Full relay gate in progress.
Author
Owner

Step 4 complete: f28317a007. Per-stream relay visibility, preview credit and exact snapshot recovery; 12 real PTYs pass independent detach/reattach/restart. Focused test 8.87 s. scripts/verify fast exit 0, RUST_TEST_THREADS=1, TRACER_TEST_PORT=4317, preloaded toolchain + CPUWeight=10000. Verbatim gate summary:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [5370.28ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [13.20ms]

8 pass
0 fail
38804 expect() calls
Ran 8 tests across 2 files. [5.46s]

Step 4 complete: f28317a00711630364e07d8c36eaa78e463782f6. Per-stream relay visibility, preview credit and exact snapshot recovery; 12 real PTYs pass independent detach/reattach/restart. Focused test 8.87 s. scripts/verify fast exit 0, RUST_TEST_THREADS=1, TRACER_TEST_PORT=4317, preloaded toolchain + CPUWeight=10000. Verbatim gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [5370.28ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [13.20ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [5.46s]
Author
Owner

Server relay step: capability-gated visibility and preview routing now preserve independent credit and live checkpoints. Four focused server tests pass (crates/infraternal-server/src/embedded_regressions.rs). Found interrupted thumbnail-to-live recovery: cached mode=live could restore Attach+Credit before its missing Snapshot. A failing real Unix-socket regression reproduced this; recovery now retains awaiting_live and sends marker -> live before Credit. Browser draft has the matching failure test. Full fast gate running; host load 44.68/33.16/26.82 during focused compilation. No deadline or latency budget changed.

Server relay step: capability-gated visibility and preview routing now preserve independent credit and live checkpoints. Four focused server tests pass (crates/infraternal-server/src/embedded_regressions.rs). Found interrupted thumbnail-to-live recovery: cached mode=live could restore Attach+Credit before its missing Snapshot. A failing real Unix-socket regression reproduced this; recovery now retains awaiting_live and sends marker -> live before Credit. Browser draft has the matching failure test. Full fast gate running; host load 44.68/33.16/26.82 during focused compilation. No deadline or latency budget changed.
Author
Owner

Completed server relay step ffce6c0161. Four new real Unix-socket regressions pass; pending live repaint survives daemon recovery. scripts/verify fast exit 0. Verbatim gate output:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [4195.75ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [10.49ms]

 8 pass
 0 fail
 38804 expect() calls
Ran 8 tests across 2 files. [4.25s]

x86 static: 15985424 bytes, no PT_INTERP.

Completed server relay step ffce6c016162344fc2ecf3de5a42a3f0be9f132a. Four new real Unix-socket regressions pass; pending live repaint survives daemon recovery. scripts/verify fast exit 0. Verbatim gate output: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [4195.75ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [10.49ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [4.25s] ``` x86 static: 15985424 bytes, no PT_INTERP.
Author
Owner

Completed shared CanvasConnection step dba4720ed6. apps/tracer/test/canvas-connection.test.ts: 2 real WebSocket tests, 47 assertions, 12 writer IDs, one physical connection per epoch, independent cursors/local close, fragmented RPC routing and unnegotiated mode rejection. Tests included in fast gate. scripts/verify fast exit 0; pinned tracer compiler passes. Verbatim gate output:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [4228.83ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [27.01ms]

 8 pass
 0 fail
 38804 expect() calls
Ran 8 tests across 2 files. [4.30s]
Completed shared CanvasConnection step dba4720ed66db415d984573d3d011e1c1b59e289. apps/tracer/test/canvas-connection.test.ts: 2 real WebSocket tests, 47 assertions, 12 writer IDs, one physical connection per epoch, independent cursors/local close, fragmented RPC routing and unnegotiated mode rejection. Tests included in fast gate. scripts/verify fast exit 0; pinned tracer compiler passes. Verbatim gate output: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [4228.83ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [27.01ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [4.30s] ```
Author
Owner

Completed terminal renderer integration 71c61e406b. TerminalClient accepts one shared CanvasConnection, per-window setMode and dirty/preview hooks. Previews reuse bounded repaint queues without advancing live checkpoints; render loop parks after a preview. Interrupted switching restores Snapshot on both transports. Production-build Playwright: snapshot-resume + detached-output, 2 passed in 21.1s (port 4317, 300ms RTT). scripts/verify fast exit 0; 22 tracer units / 423 assertions. Verbatim gate output:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [2687.13ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [6.56ms]

 8 pass
 0 fail
 38804 expect() calls
Ran 8 tests across 2 files. [2.71s]

Next: real browser/PTY measurements and screenshots, latency gate, evidence.

Completed terminal renderer integration 71c61e406b728feb68d94c533c92b5dc3379233f. TerminalClient accepts one shared CanvasConnection, per-window setMode and dirty/preview hooks. Previews reuse bounded repaint queues without advancing live checkpoints; render loop parks after a preview. Interrupted switching restores Snapshot on both transports. Production-build Playwright: snapshot-resume + detached-output, 2 passed in 21.1s (port 4317, 300ms RTT). scripts/verify fast exit 0; 22 tracer units / 423 assertions. Verbatim gate output: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [2687.13ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [6.56ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [2.71s] ``` Next: real browser/PTY measurements and screenshots, latency gate, evidence.
Author
Owner

Real production browser fixture reaches 12 distinct real terminal sessions on one physical WebSocket. Measurements under host contention are not accepted: on infraternal-dev (8 cores), load 27.93 -> 31.24, the existing 25ms authority-read budget in crates/infraternal-server/src/websocket.rs:authority_deadline expires (temporary cfg(test) diagnostic confirms timeout, not rejection). Browser reconnects during 10-live measurement, invalidating the steady-connection comparison. Deadlines and auth behavior remain unchanged. Preserved raw evidence in scratch canvas-browser-contention.log and browser-fixture-contention.log; continue verification and rerun locally after load settles. Private harness fixes: strict 43-character fixture cookie shape, Rust ready marker prefix, and wait for preview boundary before asserting checkpoint stability.

Real production browser fixture reaches 12 distinct real terminal sessions on one physical WebSocket. Measurements under host contention are not accepted: on infraternal-dev (8 cores), load 27.93 -> 31.24, the existing 25ms authority-read budget in crates/infraternal-server/src/websocket.rs:authority_deadline expires (temporary cfg(test) diagnostic confirms timeout, not rejection). Browser reconnects during 10-live measurement, invalidating the steady-connection comparison. Deadlines and auth behavior remain unchanged. Preserved raw evidence in scratch canvas-browser-contention.log and browser-fixture-contention.log; continue verification and rerun locally after load settles. Private harness fixes: strict 43-character fixture cookie shape, Rust ready marker prefix, and wait for preview boundary before asserting checkpoint stability.
Author
Owner

Client recovery finding: in WebSocket CLOSING before its close event, CanvasStream.setMode threw and TerminalClient.sendFrame retired the writer on a queued keystroke. Failing real-WebSocket unit (closing-mode-red.log) and production Ghostty/Playwright regression (closing-browser-red.log, attached successfully then no reattach after close+q) reproduce it. Fix: persist desired mode without sending while unavailable; keep the keystroke in the existing bounded queue until Attach resumes the same writer. Browser regression now passes (300ms RTT, port 4317, 1 passed/20.9s), with exactly +1 output byte. Full fast gate running before this separate atomic commit. Also correcting benchmark-only assertions: correlate exact painted host echo, not cached screen text, and clear the shell command echo before the unique-tail duplication test. No auth deadlines or latency budgets changed.

Client recovery finding: in WebSocket CLOSING before its close event, CanvasStream.setMode threw and TerminalClient.sendFrame retired the writer on a queued keystroke. Failing real-WebSocket unit (closing-mode-red.log) and production Ghostty/Playwright regression (closing-browser-red.log, attached successfully then no reattach after close+q) reproduce it. Fix: persist desired mode without sending while unavailable; keep the keystroke in the existing bounded queue until Attach resumes the same writer. Browser regression now passes (300ms RTT, port 4317, 1 passed/20.9s), with exactly +1 output byte. Full fast gate running before this separate atomic commit. Also correcting benchmark-only assertions: correlate exact painted host echo, not cached screen text, and clear the shell command echo before the unique-tail duplication test. No auth deadlines or latency budgets changed.
Author
Owner

Completed independent CLOSING recovery fix 494bb1a592. Two failing-before-fix regressions now pass: per-stream mode retained during CLOSING (real WebSocket unit), and production-renderer keystroke queued after close() and painted exactly once after reattach (Playwright, 300ms RTT, port4317, 1 passed/20.9s). Full scripts/verify fast exit0, including twelve real PTYs. Verbatim gate output:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [3181.98ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [11.40ms]

 8 pass
 0 fail
 38804 expect() calls
Ran 8 tests across 2 files. [3.21s]
Completed independent CLOSING recovery fix 494bb1a592e4e7b81e7c272ed776ffc5400b4085. Two failing-before-fix regressions now pass: per-stream mode retained during CLOSING (real WebSocket unit), and production-renderer keystroke queued after close() and painted exactly once after reattach (Playwright, 300ms RTT, port4317, 1 passed/20.9s). Full scripts/verify fast exit0, including twelve real PTYs. Verbatim gate output: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [3181.98ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [11.40ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [3.21s] ```
Author
Owner

Real production browser correctness at 300 ±30 ms RTT passed: 12 distinct PTYs, one shared socket per epoch, independent close (11 remaining), thumbnail checkpoint unchanged (2133-byte preview), interrupted thumbnail→live repaint contains the unique tail once, and input queued during WebSocket CLOSING survives resume. First correct marker→live paint: 360.1 ms. Desktop/mobile evidence: docs/verification/canvas-streams/. Machine infraternal-dev, 8 cores; load 24.98/18.04/20.39.

Performance comparisons remain unaccepted: auth authority-read timeouts under host load 21–27 invalidate steady socket epochs. Four retries discarded; no auth deadlines changed. Full unchanged latency gate still required.

Found shared ssh.session.open expired after 10 seconds although websocket.rs defines the existing #29 connect budget as 60 seconds. Real WebSocket regression with an 11-second response fails before the fix: canvas action timed out at 10125.98 ms (2 pass, 1 fail). Aligning this specific action with the existing server budget; ordinary actions retain 10 seconds and pending calls remain capped at 32.

Real production browser correctness at 300 ±30 ms RTT passed: 12 distinct PTYs, one shared socket per epoch, independent close (11 remaining), thumbnail checkpoint unchanged (2133-byte preview), interrupted thumbnail→live repaint contains the unique tail once, and input queued during WebSocket CLOSING survives resume. First correct marker→live paint: 360.1 ms. Desktop/mobile evidence: docs/verification/canvas-streams/. Machine infraternal-dev, 8 cores; load 24.98/18.04/20.39. Performance comparisons remain unaccepted: auth authority-read timeouts under host load 21–27 invalidate steady socket epochs. Four retries discarded; no auth deadlines changed. Full unchanged latency gate still required. Found shared ssh.session.open expired after 10 seconds although websocket.rs defines the existing #29 connect budget as 60 seconds. Real WebSocket regression with an 11-second response fails before the fix: canvas action timed out at 10125.98 ms (2 pass, 1 fail). Aligning this specific action with the existing server budget; ordinary actions retain 10 seconds and pending calls remain capped at 32.
Author
Owner

Native 12-stream fixture failure diagnosed by explicit Close decoding: stream 18, code 1, terminal command queue full; reattach and replay unacknowledged input. The fixture returned one Credit for every tiny Output frame; under load 31–40 on 8 cores these redundant requests saturated the existing eight-command queue. Changed only the test oracle to batch return credit at 64 KiB (same approach as the existing native latency oracle); production queue capacity and backpressure unchanged. Rerunning the full fast gate.

SSH deadline regression passes after matching #29: 3 pass, 0 fail, 49 expect calls, delayed response accepted at 11016.34 ms.

Native 12-stream fixture failure diagnosed by explicit Close decoding: stream 18, code 1, terminal command queue full; reattach and replay unacknowledged input. The fixture returned one Credit for every tiny Output frame; under load 31–40 on 8 cores these redundant requests saturated the existing eight-command queue. Changed only the test oracle to batch return credit at 64 KiB (same approach as the existing native latency oracle); production queue capacity and backpressure unchanged. Rerunning the full fast gate. SSH deadline regression passes after matching #29: 3 pass, 0 fail, 49 expect calls, delayed response accepted at 11016.34 ms.
Author
Owner

SSH deadline correction committed: 84d908408e. Real delayed-response test: 3 pass, 0 fail, 49 assertions; old code rejected at 10125.98 ms, corrected code accepted at 11016.34 ms. Fast gate exit 0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
8 pass
0 fail
38804 expect() calls

SSH deadline correction committed: 84d908408e5dc94f5bde9d0d090a51ef4f4cd947. Real delayed-response test: 3 pass, 0 fail, 49 assertions; old code rejected at 10125.98 ms, corrected code accepted at 11016.34 ms. Fast gate exit 0. Verbatim gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences 8 pass 0 fail 38804 expect() calls
Author
Owner

Accepted steady-epoch 300 ±30 ms RTT comparison, infraternal-dev, 8 cores, CPUWeight=10000: ten real PTYs producing paced yes-style 1024-byte blocks every 1/30 second (30 KiB/s each). 8-second profiles in the SAME socket epoch, one active WebSocket: 10 live = server 15.124% of one CPU core, 308840.94 application WebSocket payload B/s, browser TaskDuration 548.323 ms/s, load 18.56/18.97/20.77; 1 live +9 marker = 3.125%, 31375.10 B/s, 255.057 ms/s, load 17.87/18.81/20.70. Marker→live first correct paint 350.4 ms. First retry discarded; high-rate 8192-byte profiles still invalidated by auth timeouts and are not claimed. Data: docs/verification/canvas-streams/performance.jsonl.

Same real-browser run verified 12 distinct PTYs, preview checkpoint unchanged (856-byte thumbnail), local close with 11 surviving streams, interrupted live-switch replay tail exactly once. Real unpredicted key→paint diagnostic n=31 p50 394.6 ms/p99 422.9 ms is NOT a passing latency-budget claim. Unchanged full latency gate next.

Accepted steady-epoch 300 ±30 ms RTT comparison, infraternal-dev, 8 cores, CPUWeight=10000: ten real PTYs producing paced yes-style 1024-byte blocks every 1/30 second (30 KiB/s each). 8-second profiles in the SAME socket epoch, one active WebSocket: 10 live = server 15.124% of one CPU core, 308840.94 application WebSocket payload B/s, browser TaskDuration 548.323 ms/s, load 18.56/18.97/20.77; 1 live +9 marker = 3.125%, 31375.10 B/s, 255.057 ms/s, load 17.87/18.81/20.70. Marker→live first correct paint 350.4 ms. First retry discarded; high-rate 8192-byte profiles still invalidated by auth timeouts and are not claimed. Data: docs/verification/canvas-streams/performance.jsonl. Same real-browser run verified 12 distinct PTYs, preview checkpoint unchanged (856-byte thumbnail), local close with 11 surviving streams, interrupted live-switch replay tail exactly once. Real unpredicted key→paint diagnostic n=31 p50 394.6 ms/p99 422.9 ms is NOT a passing latency-budget claim. Unchanged full latency gate next.
Author
Owner

Self-review found an additive-capability edge case: choosing marker before a caps-zero server greeting cached the desired mode, then its Attach threw from the readiness hook and closed the shared connection, disrupting live siblings. Real WebSocket regression fails first (0 pass, 1 fail; canvas fixture timed out at 5092.21 ms). Fix checks negotiated visibility on readiness and locally retires only that hidden/pending-snapshot window with Close 1003 before Attach; live siblings continue. No legacy wire layout changes. Full fast gate required before this separate fix commit.

Release preview serialization, 10,000 iterations, infraternal-dev 8 cores CPUWeight=10000, load 14.41/16.99/19.81: 80x24 thumbnail 21.67 us /365 encoded bytes; 200x60 73.15 us /893 bytes. At 200 sessions x5 viewers x2 Hz: 43.34 and 146.29 CPU ms/s respectively. Existing approximate repaint: 17.55/57.30 us. Live code unchanged; new preview allocation capped at 64 KiB. Evidence docs/verification/canvas-streams/thumbnail.txt.

Self-review found an additive-capability edge case: choosing marker before a caps-zero server greeting cached the desired mode, then its Attach threw from the readiness hook and closed the shared connection, disrupting live siblings. Real WebSocket regression fails first (0 pass, 1 fail; canvas fixture timed out at 5092.21 ms). Fix checks negotiated visibility on readiness and locally retires only that hidden/pending-snapshot window with Close 1003 before Attach; live siblings continue. No legacy wire layout changes. Full fast gate required before this separate fix commit. Release preview serialization, 10,000 iterations, infraternal-dev 8 cores CPUWeight=10000, load 14.41/16.99/19.81: 80x24 thumbnail 21.67 us /365 encoded bytes; 200x60 73.15 us /893 bytes. At 200 sessions x5 viewers x2 Hz: 43.34 and 146.29 CPU ms/s respectively. Existing approximate repaint: 17.55/57.30 us. Live code unchanged; new preview allocation capped at 64 KiB. Evidence docs/verification/canvas-streams/thumbnail.txt.
Author
Owner

Unchanged full scripts/verify latency exited 1: auth-browser passed; tracer 73 passed, 26 skipped, 8 failed (19.2m), including timing/feedback/prediction capture and a mock wrapped-ring HTTP hangup. Canvas closing-input regression passed. Native ordinary confirmed input p99 326.88 ms PASS; PTY echo 338.35 FAIL; other-PTY isolation -10.36 ms PASS; same-PTY flood echo 1691.98 ms FAIL. Host 8 cores, load rose 14→58; no own build/benchmark overlapped measurement phases. Safe metrics/summary: docs/verification/canvas-streams/latency.txt.

Paired native n=100: preserved schema-only baseline ordinary echo p99 438.51 /same-PTY flood 780.13 ms; current 438.96 /2306.52 ms. Host load changed substantially. Reverse n=20: current 411.41 /869.60 ms; baseline 337.13 /1052.44 ms. BOTH versions fail unchanged budgets. These runs do not establish absence of regression. Data + binary digest: latency-paired.txt and latency-environment.json.

Latency sign-off is BLOCKED pending stable-host rerun and diagnosis of the existing baseline same-PTY flood failure. No budget or auth deadline changed. Rerunning all eight failed browser checks now; continuing gated test/evidence commits.

Unchanged full scripts/verify latency exited 1: auth-browser passed; tracer 73 passed, 26 skipped, 8 failed (19.2m), including timing/feedback/prediction capture and a mock wrapped-ring HTTP hangup. Canvas closing-input regression passed. Native ordinary confirmed input p99 326.88 ms PASS; PTY echo 338.35 FAIL; other-PTY isolation -10.36 ms PASS; same-PTY flood echo 1691.98 ms FAIL. Host 8 cores, load rose 14→58; no own build/benchmark overlapped measurement phases. Safe metrics/summary: docs/verification/canvas-streams/latency.txt. Paired native n=100: preserved schema-only baseline ordinary echo p99 438.51 /same-PTY flood 780.13 ms; current 438.96 /2306.52 ms. Host load changed substantially. Reverse n=20: current 411.41 /869.60 ms; baseline 337.13 /1052.44 ms. BOTH versions fail unchanged budgets. These runs do not establish absence of regression. Data + binary digest: latency-paired.txt and latency-environment.json. Latency sign-off is BLOCKED pending stable-host rerun and diagnosis of the existing baseline same-PTY flood failure. No budget or auth deadline changed. Rerunning all eight failed browser checks now; continuing gated test/evidence commits.
Author
Owner

Cached-mode startup correction: low-level marker→live choices before the FIRST Attach must not require preview recovery on a legacy peer. Real WebSocket regression fails first (0 pass/1 fail, 5010.90 ms), then passes (1 pass/0 fail, 2 assertions, 46.37 ms). Track whether a writer has ever attached.

Real production browser caught the corresponding renderer mismatch: all twelve distinct real PTYs attached and raw frames arrived, but initial READY paint timed out after 30000 ms. TerminalClient now follows its shared port snapshot requirement for cached pre-attachment choices. The identical real fixture passes at 300 ±30 ms RTT: initial paint, closing input, preview checkpoint, independent close (11 remaining), interrupted live replay tail once, desktop/mobile screenshots. Exit 0; load 40.22/32.34/29.79. Current correctness artifact: docs/verification/canvas-streams/correctness.txt. First correct marker→live paint 402.6 ms under that load; early proof 360.1 ms retained separately.

Pre-job frontend f27b3fe main/terminal/codec sources also fail all four selected motion/palette/predictive-capture/terminal tests; current sources restored exactly afterward. Baseline predicted glyph p99 12.5 ms; adjacent current 40.1 ms with changing host load and both overall probes failing. Prediction CPU passes current 1.4 ms <=2 ms. No claim of absence of regression or latency sign-off. Evidence browser-baseline.txt/browser-latency-current.txt.

Cached-mode startup correction: low-level marker→live choices before the FIRST Attach must not require preview recovery on a legacy peer. Real WebSocket regression fails first (0 pass/1 fail, 5010.90 ms), then passes (1 pass/0 fail, 2 assertions, 46.37 ms). Track whether a writer has ever attached. Real production browser caught the corresponding renderer mismatch: all twelve distinct real PTYs attached and raw frames arrived, but initial READY paint timed out after 30000 ms. TerminalClient now follows its shared port snapshot requirement for cached pre-attachment choices. The identical real fixture passes at 300 ±30 ms RTT: initial paint, closing input, preview checkpoint, independent close (11 remaining), interrupted live replay tail once, desktop/mobile screenshots. Exit 0; load 40.22/32.34/29.79. Current correctness artifact: docs/verification/canvas-streams/correctness.txt. First correct marker→live paint 402.6 ms under that load; early proof 360.1 ms retained separately. Pre-job frontend f27b3fe main/terminal/codec sources also fail all four selected motion/palette/predictive-capture/terminal tests; current sources restored exactly afterward. Baseline predicted glyph p99 12.5 ms; adjacent current 40.1 ms with changing host load and both overall probes failing. Prediction CPU passes current 1.4 ms <=2 ms. No claim of absence of regression or latency sign-off. Evidence browser-baseline.txt/browser-latency-current.txt.
Author
Owner

Native twelve-stream oracle credit batching committed: bb451039aa. Per-attachment deferred credit resets at detach/restart; unexpected Close reasons retained. Full fast retry exit 0 after the existing detached-producer five-second readiness probe passed. Canvas twelve-PTY restart/mode test passed. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
8 pass
0 fail
38804 expect() calls

Native twelve-stream oracle credit batching committed: bb451039aa28d71e3669136a63cfc458e743afc2. Per-attachment deferred credit resets at detach/restart; unexpected Close reasons retained. Full fast retry exit 0 after the existing detached-producer five-second readiness probe passed. Canvas twelve-PTY restart/mode test passed. Verbatim gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences 8 pass 0 fail 38804 expect() calls
Author
Owner

Cached-mode legacy isolation and renderer startup: real WebSocket red/green plus twelve real PTYs red before first-paint correction, production browser green afterward.
Head: c0ef8eb868. scripts/verify fast exit 0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
8 pass
0 fail
38804 expect() calls

Cached-mode legacy isolation and renderer startup: real WebSocket red/green plus twelve real PTYs red before first-paint correction, production browser green afterward. Head: c0ef8eb8684f6797be49667931b906ca02c55090. scripts/verify fast exit 0. Verbatim gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences 8 pass 0 fail 38804 expect() calls
Author
Owner

Two full fast runs failed in scripts/verify-agent-snapshot.py:48: cursor/Snapshot changed during the one-byte-grant observation. The test drained before waiting for shell completion, leaving output from the original credit grant queued when its cursor was recorded. Moving that existing drain after completion preserves all grant amounts and deadlines and strengthens the independent shell-progress check. No production credit change. Red evidence retained in fixture-fast-contention.log and fixture-fast-contention-2.log. Latency sign-off remains blocked as previously recorded.

Two full fast runs failed in scripts/verify-agent-snapshot.py:48: cursor/Snapshot changed during the one-byte-grant observation. The test drained before waiting for shell completion, leaving output from the original credit grant queued when its cursor was recorded. Moving that existing drain after completion preserves all grant amounts and deadlines and strengthens the independent shell-progress check. No production credit change. Red evidence retained in fixture-fast-contention.log and fixture-fast-contention-2.log. Latency sign-off remains blocked as previously recorded.
Author
Owner

Tiny-credit probe ordering fixed after two failing full fast runs. Four real 12 MiB floods, three unchanged one-byte pauses and three funded 481-byte Snapshots pass; credit sizes and deadlines unchanged.
Head: b7d52dca4d. scripts/verify fast exit 0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
8 pass
0 fail
38804 expect() calls

Tiny-credit probe ordering fixed after two failing full fast runs. Four real 12 MiB floods, three unchanged one-byte pauses and three funded 481-byte Snapshots pass; credit sizes and deadlines unchanged. Head: b7d52dca4dc998ee3d1e861851279d55cfc49dbb. scripts/verify fast exit 0. Verbatim gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences 8 pass 0 fail 38804 expect() calls
Author
Owner

Real HTTPS/daemon/PTY browser measurement harness, twelve-stream resume/close checks, and 80x24/200x60 release serialization. Accepted steady profile: 308841→31375 B/s, server 15.124→3.125% of one core, browser 548.323→255.057 ms/s.
Head: b2df08f508. scripts/verify fast exit 0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
8 pass
0 fail
38804 expect() calls

Real HTTPS/daemon/PTY browser measurement harness, twelve-stream resume/close checks, and 80x24/200x60 release serialization. Accepted steady profile: 308841→31375 B/s, server 15.124→3.125% of one core, browser 548.323→255.057 ms/s. Head: b2df08f508bc73648233af10e70776089519c293. scripts/verify fast exit 0. Verbatim gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences 8 pass 0 fail 38804 expect() calls
Author
Owner

Visibility modes, reserved flags and sequence boundaries added to existing parser seed generator. Seeded 30-second smoke runs: shim 527106, frame 4511634, stream 246003 executions; no crashes.
Head: d54b1b0be4. scripts/verify fast exit 0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
8 pass
0 fail
38804 expect() calls

Visibility modes, reserved flags and sequence boundaries added to existing parser seed generator. Seeded 30-second smoke runs: shim 527106, frame 4511634, stream 246003 executions; no crashes. Head: d54b1b0be49f8e88fb54aed2a11b6c359ec805a3. scripts/verify fast exit 0. Verbatim gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences 8 pass 0 fail 38804 expect() calls
Author
Owner

API, actual production screenshots, accepted comparison and scale evidence recorded. Latency sign-off remains blocked; full unchanged latency gate and both baseline/current failures are retained without changing budgets.
Head: 33440a3462. scripts/verify fast exit 0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
8 pass
0 fail
38804 expect() calls

API, actual production screenshots, accepted comparison and scale evidence recorded. Latency sign-off remains blocked; full unchanged latency gate and both baseline/current failures are retained without changing budgets. Head: 33440a3462e3d03f58768ccf428928721a263dde. scripts/verify fast exit 0. Verbatim gate summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences 8 pass 0 fail 38804 expect() calls
Author
Owner

Implementation and review evidence committed on canvas-streams. Head: 33440a3462. No push/deploy. Final scripts/verify fast exit 0; verbatim summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

stream differential: 155 streams, 12906 schedules, zero divergences
8 pass
0 fail
38804 expect() calls

Twelve real PTYs share one browser WebSocket per epoch; independent close/resume, thumbnail checkpoint preservation, interrupted live repaint and queued closing input verified. Accepted 300±30 ms RTT comparison (10 paced 30 KiB/s PTYs): 10 live vs 1 live+9 marker = 308841 vs 31375 payload B/s; server 15.124 vs 3.125% of one core; browser main thread 548.323 vs 255.057 ms/s. Correct marker→live paint 350.4 ms in that comparison, 402.6 ms in the latest twelve-PTY correctness run. Evidence and production screenshots: docs/verification/canvas-streams/.

BLOCKED acceptance item: no keystroke-regression sign-off. Unchanged scripts/verify latency exit 1:
8 failed
26 skipped
73 passed (19.2m)
Native ordinary PTY echo p99 338.35 ms >334 ms; same-PTY flood 1691.98 ms, growth 1353.63 ms >16.67 ms. Baseline and current native/browser comparisons both fail under varying host load; they do not establish absence of regression. A stable-host rerun and diagnosis of baseline same-PTY flood failure remain necessary. Budgets and authentication deadlines unchanged. Full safe metrics, comparison digest/load and author checklist retained in the evidence directory. The issue remains open.

Implementation and review evidence committed on canvas-streams. Head: 33440a3462e3d03f58768ccf428928721a263dde. No push/deploy. Final scripts/verify fast exit 0; verbatim summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ stream differential: 155 streams, 12906 schedules, zero divergences 8 pass 0 fail 38804 expect() calls Twelve real PTYs share one browser WebSocket per epoch; independent close/resume, thumbnail checkpoint preservation, interrupted live repaint and queued closing input verified. Accepted 300±30 ms RTT comparison (10 paced 30 KiB/s PTYs): 10 live vs 1 live+9 marker = 308841 vs 31375 payload B/s; server 15.124 vs 3.125% of one core; browser main thread 548.323 vs 255.057 ms/s. Correct marker→live paint 350.4 ms in that comparison, 402.6 ms in the latest twelve-PTY correctness run. Evidence and production screenshots: docs/verification/canvas-streams/. BLOCKED acceptance item: no keystroke-regression sign-off. Unchanged scripts/verify latency exit 1: 8 failed 26 skipped 73 passed (19.2m) Native ordinary PTY echo p99 338.35 ms >334 ms; same-PTY flood 1691.98 ms, growth 1353.63 ms >16.67 ms. Baseline and current native/browser comparisons both fail under varying host load; they do not establish absence of regression. A stable-host rerun and diagnosis of baseline same-PTY flood failure remain necessary. Budgets and authentication deadlines unchanged. Full safe metrics, comparison digest/load and author checklist retained in the evidence directory. The issue remains open.
Author
Owner

Independent break-it review starting on review-canvas-streams at target 33440a3462, merge base f27b3fe7a4. Read #107 and parent/backend #98 history and target report. Evidence-only commits; no implementation fixes, push or deploy. Latency acceptance already blocked in author report; testing visibility ordering, shared-stream recovery, decoder boundaries and local performance.

Independent break-it review starting on review-canvas-streams at target 33440a3462e3d03f58768ccf428928721a263dde, merge base f27b3fe7a4dcfb3e268bdee90405bf1f1d8a0ce9. Read #107 and parent/backend #98 history and target report. Evidence-only commits; no implementation fixes, push or deploy. Latency acceptance already blocked in author report; testing visibility ordering, shared-stream recovery, decoder boundaries and local performance.
Author
Owner

CS-R1 — P1 — Browser deadlines cannot close the shared socket

Location: apps/tracer/src/canvas-connection.ts:223, 272–273 (also greeting timeout:215).
Scenario: an otherwise welcomed native browser WebSocket receives incomplete mux bytes 01 14, then no suffix. At its five-second incomplete-frame deadline the new manager calls socket.close(1002), which script APIs forbid. Chromium raises InvalidAccessError, keeps the socket open and performs no resume, stalling every canvas window. Greeting and malformed-frame paths use the same invalid close code.
Failing test: apps/tracer/test/canvas-deadline-review.spec.ts — incomplete-frame deadline closes the native browser WebSocket and resumes.
Evidence: real ws server + native Chromium, port 4402, default 300ms RTT for the test page; 1 failed/16.1s. Expected sockets=2/errors=[] after 10s; actual sockets=1/errors=["Failed to execute 'close' on 'WebSocket': The close code must be either 1000, or between 3000 and 4999. 1002 is neither."]. Full sanitized log will be committed under docs/verification/review-canvas-streams/. Renderer and route mocks are deliberately excluded from this deadline test. Wire §7 completion deadlines and D11/D183 recovery are ineffective.

## CS-R1 — P1 — Browser deadlines cannot close the shared socket Location: apps/tracer/src/canvas-connection.ts:223, 272–273 (also greeting timeout:215). Scenario: an otherwise welcomed native browser WebSocket receives incomplete mux bytes 01 14, then no suffix. At its five-second incomplete-frame deadline the new manager calls socket.close(1002), which script APIs forbid. Chromium raises InvalidAccessError, keeps the socket open and performs no resume, stalling every canvas window. Greeting and malformed-frame paths use the same invalid close code. Failing test: apps/tracer/test/canvas-deadline-review.spec.ts — incomplete-frame deadline closes the native browser WebSocket and resumes. Evidence: real ws server + native Chromium, port 4402, default 300ms RTT for the test page; 1 failed/16.1s. Expected sockets=2/errors=[] after 10s; actual sockets=1/errors=["Failed to execute 'close' on 'WebSocket': The close code must be either 1000, or between 3000 and 4999. 1002 is neither."]. Full sanitized log will be committed under docs/verification/review-canvas-streams/. Renderer and route mocks are deliberately excluded from this deadline test. Wire §7 completion deadlines and D11/D183 recovery are ineffective.
Author
Owner

CS-R2 — P1 — Backpressure retirement permanently strands a canvas window

Location: apps/tracer/src/terminal.ts:852–855, with CanvasStream.receive at canvas-connection.ts:107.
Scenario: server retires only stream 1 with Close(1013) after attachment/output queue pressure. Shared TerminalClient clears attached but neither requests a new AttachTerm nor schedules recovery; its CanvasStream ready hook only runs once per physical socket epoch. The healthy shared socket remains open indefinitely. Queued input is retained but never transmitted until an unrelated whole-socket drop.
Failing test: apps/tracer/test/canvas-stream-close-review.spec.ts — server-retired canvas window reattaches while its sibling remains usable.
Evidence: production Ghostty build + real WebSocket fixture + native Chromium, port 4405; 1 failed/19.2s. Two windows attached; sibling stream 3 echoed one input byte successfully after stream 1 Close. Expected stream 1 attachment count=2 after 10s; actual=1. This breaks wire §6 viewer reattach/replay on stream-local retirement. Unlike the original single-terminal path, shared Close neither closes its socket nor retries the attachment.

## CS-R2 — P1 — Backpressure retirement permanently strands a canvas window Location: apps/tracer/src/terminal.ts:852–855, with CanvasStream.receive at canvas-connection.ts:107. Scenario: server retires only stream 1 with Close(1013) after attachment/output queue pressure. Shared TerminalClient clears attached but neither requests a new AttachTerm nor schedules recovery; its CanvasStream ready hook only runs once per physical socket epoch. The healthy shared socket remains open indefinitely. Queued input is retained but never transmitted until an unrelated whole-socket drop. Failing test: apps/tracer/test/canvas-stream-close-review.spec.ts — server-retired canvas window reattaches while its sibling remains usable. Evidence: production Ghostty build + real WebSocket fixture + native Chromium, port 4405; 1 failed/19.2s. Two windows attached; sibling stream 3 echoed one input byte successfully after stream 1 Close. Expected stream 1 attachment count=2 after 10s; actual=1. This breaks wire §6 viewer reattach/replay on stream-local retirement. Unlike the original single-terminal path, shared Close neither closes its socket nor retries the attachment.
Author
Owner

Independent review evidence committed: CS-R1 (native browser incomplete-frame deadline) at 782b2fa; CS-R2 (stream-local backpressure retirement with live sibling) at 2b152d4. Both tests fail at the behavioral assertion after successful greeting/attachment. Tracer TypeScript check passes. No implementation files changed. Full target-head fast gate still running from a cold private target; Rust clippy passed, workspace test build in progress. Continuing legacy transport and parser checks.

Independent review evidence committed: CS-R1 (native browser incomplete-frame deadline) at 782b2fa; CS-R2 (stream-local backpressure retirement with live sibling) at 2b152d4. Both tests fail at the behavioral assertion after successful greeting/attachment. Tracer TypeScript check passes. No implementation files changed. Full target-head fast gate still running from a cold private target; Rust clippy passed, workspace test build in progress. Continuing legacy transport and parser checks.
Author
Owner

Verification review of 33440a3 (stopped early by the provider filter after committing tests): CS-R1 P1 browser rejects close(1002) so deadlines stall all canvas windows; CS-R2 P1 stream-local Close(1013) strands a window. Tests on review-canvas-streams (782b2fa, 2b152d4, WIP 3f335bc). Relaunched canvas-streams run 2 (Sol medium: data path) to fix both plus main-thread cost (target ≤100 ms/s for 10 live) and the latency gate.

Verification review of 33440a3 (stopped early by the provider filter after committing tests): CS-R1 P1 browser rejects close(1002) so deadlines stall all canvas windows; CS-R2 P1 stream-local Close(1013) strands a window. Tests on review-canvas-streams (782b2fa, 2b152d4, WIP 3f335bc). Relaunched canvas-streams run 2 (Sol medium: data path) to fix both plus main-thread cost (target ≤100 ms/s for 10 live) and the latency gate.
Author
Owner

Repair/performance round starting on canvas-streams, base 33440a3462. Read #107/#98 history and review findings. Reproduce review tests before fixes; preserve engine and budgets. Additive contract proposal for CS-R1: browser client close code 4002 denotes invalid protocol/greeting/incomplete-frame deadline and triggers ordinary resume. Port 4407; all measurements local on infraternal-dev under CPUWeight=10000. No push/deploy. Browser plugin unavailable; production Playwright validation.

Repair/performance round starting on canvas-streams, base 33440a3462e3d03f58768ccf428928721a263dde. Read #107/#98 history and review findings. Reproduce review tests before fixes; preserve engine and budgets. Additive contract proposal for CS-R1: browser client close code 4002 denotes invalid protocol/greeting/incomplete-frame deadline and triggers ordinary resume. Port 4407; all measurements local on infraternal-dev under CPUWeight=10000. No push/deploy. Browser plugin unavailable; production Playwright validation.
Author
Owner

Review tests cherry-picked separately: a095ea5 (CS-R1), a4ad734 (CS-R2), b5a071d (cached-mode WIP). Production browser on port 4407, 300ms RTT: all three fail at behavioral assertions. CS-R1: sockets remains 1 with InvalidAccessError; CS-R2: Attach count remains 1 while sibling echoes. WIP: legacy single-window pre-attach marker->live never paints INITIAL; TerminalClient.setMode unconditionally sets awaitingLiveSnapshot for standalone transport. Keeping and completing this real startup regression. Evidence: scratch canvas-streams/review-red.log. CS-R1 original test now passes (1/1, 14.8s); expanded native greeting/malformed/deadline and resume checks underway.

Review tests cherry-picked separately: a095ea5 (CS-R1), a4ad734 (CS-R2), b5a071d (cached-mode WIP). Production browser on port 4407, 300ms RTT: all three fail at behavioral assertions. CS-R1: sockets remains 1 with InvalidAccessError; CS-R2: Attach count remains 1 while sibling echoes. WIP: legacy single-window pre-attach marker->live never paints INITIAL; TerminalClient.setMode unconditionally sets awaitingLiveSnapshot for standalone transport. Keeping and completing this real startup regression. Evidence: scratch canvas-streams/review-red.log. CS-R1 original test now passes (1/1, 14.8s); expanded native greeting/malformed/deadline and resume checks underway.
Author
Owner

CS-R1 expanded browser checks pass 3/3 (28.7s): greeting, incomplete and malformed frames use 4002; welcomed connections send Resume and replacement becomes ready. First fast run encountered existing vt_credit t1-gate-faithful-1: producer 2097152 bytes completed=False after 1500.7ms; assertion at scripts/verify-vt-credit.py:42. Load 25.73/25.18/26.69 on 8 cores. Formatting/clippy passed, all preceding native suites passed; static builds still running. Will rerun unchanged after cold build. No timeout/budget change.

CS-R1 expanded browser checks pass 3/3 (28.7s): greeting, incomplete and malformed frames use 4002; welcomed connections send Resume and replacement becomes ready. First fast run encountered existing vt_credit t1-gate-faithful-1: producer 2097152 bytes completed=False after 1500.7ms; assertion at scripts/verify-vt-credit.py:42. Load 25.73/25.18/26.69 on 8 cores. Formatting/clippy passed, all preceding native suites passed; static builds still running. Will rerun unchanged after cold build. No timeout/budget change.
Author
Owner

First fast run finished exit 1; both static targets pass, unchanged native vt_credit probe failed as recorded. Tracer check separately passes. Refined regressions still fail before fixes: cached startup plus stream Close codes 1013 and 1; the latter now tests a painted/acknowledged six-byte prefix before retirement. Evidence refined-red.log. Verbatim fast summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | FAIL (101) |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

First fast run finished exit 1; both static targets pass, unchanged native vt_credit probe failed as recorded. Tracer check separately passes. Refined regressions still fail before fixes: cached startup plus stream Close codes 1013 and 1; the latter now tests a painted/acknowledged six-byte prefix before retirement. Evidence refined-red.log. Verbatim fast summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | FAIL (101) | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+
Author
Owner

Unchanged fast retry exit1: vt_credit t1-gate-faithful-1 failed at scripts/verify-vt-credit.py:30 (detached initial producer not ready within5s). Load42-46/8cores; no own benchmark/build overlapped native test phase. Both static targets pass15985424/13439056. Continuing repairs/profiling without changing native deadlines. Verbatim summary:

+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | FAIL (101) |
| cargo-deny | PASS |
| static builds | PASS |
+---------------------------+--------------+

Steady real12PTY production profile accepted after2 discarded epoch pairs: 10live538.907ms/s, 1live+9marker275.710ms/s. ScopeCPUWeight10000, RTT300+/-30ms, load46.22/42.32/35.44 and45.61/42.31/35.51; geometry57x12. VT writes4.450/3.675ms/s, render61.909/10.950ms/s; render calls564.971/60.374 persecond. Native send and empty-buffer WireDecodeError stack work sampled. Evidence before-profile.log and before-profile/profile-*-2.json; independent instrumentation overlaps receive/render time, not additive.

Unchanged fast retry exit1: vt_credit t1-gate-faithful-1 failed at scripts/verify-vt-credit.py:30 (detached initial producer not ready within5s). Load42-46/8cores; no own benchmark/build overlapped native test phase. Both static targets pass15985424/13439056. Continuing repairs/profiling without changing native deadlines. Verbatim summary: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | FAIL (101) | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ Steady real12PTY production profile accepted after2 discarded epoch pairs: 10live538.907ms/s, 1live+9marker275.710ms/s. ScopeCPUWeight10000, RTT300+/-30ms, load46.22/42.32/35.44 and45.61/42.31/35.51; geometry57x12. VT writes4.450/3.675ms/s, render61.909/10.950ms/s; render calls564.971/60.374 persecond. Native send and empty-buffer WireDecodeError stack work sampled. Evidence before-profile.log and before-profile/profile-*-2.json; independent instrumentation overlaps receive/render time, not additive.
Author
Owner

Additional lifecycle finding from completed WIP fixture: a new window disposed before its first rAF fit raises terminal renderer cell metrics are unavailable, because scheduleFit accesses the released renderer. New production browser regression closing a new canvas window cancels its pending fit fails before the guard (dispose-fit-red.log). Cached-mode implementation already paints INITIAL, but exposed this pending-fit race. Adding closed check inside the queued fit; no contract/budget change. R2 repair tests pass2/2 (59.8s), offsets6/6 and queued q7 confirmed, sibling remains on same socket. Repair commits pending the shared native fast gate.

Additional lifecycle finding from completed WIP fixture: a new window disposed before its first rAF fit raises terminal renderer cell metrics are unavailable, because scheduleFit accesses the released renderer. New production browser regression closing a new canvas window cancels its pending fit fails before the guard (dispose-fit-red.log). Cached-mode implementation already paints INITIAL, but exposed this pending-fit race. Adding closed check inside the queued fit; no contract/budget change. R2 repair tests pass2/2 (59.8s), offsets6/6 and queued q7 confirmed, sibling remains on same socket. Repair commits pending the shared native fast gate.
Author
Owner

Cached startup and pending-fit repairs: both real Chromium regressions pass (2/2, 1.6m). Cached/live before first Attach now paints INITIAL on the legacy transport; disposing a new canvas window before its queued fit no longer raises unavailable-cell-metrics and leaves the primary connected. Evidence: apps/tracer/test/canvas-cached-mode-review.spec.ts; scratch cached-and-fit-green.log. No repair commit yet: the third full fast gate is running after two unrelated native VT credit deadline failures under host load.

Cached startup and pending-fit repairs: both real Chromium regressions pass (2/2, 1.6m). Cached/live before first Attach now paints INITIAL on the legacy transport; disposing a new canvas window before its queued fit no longer raises unavailable-cell-metrics and leaves the primary connected. Evidence: apps/tracer/test/canvas-cached-mode-review.spec.ts; scratch cached-and-fit-green.log. No repair commit yet: the third full fast gate is running after two unrelated native VT credit deadline failures under host load.
Author
Owner

Third unchanged native fast retry exits 1: fmt, VT native fmt, clippy, cargo-deny and both static builds PASS; test FAIL (101), now vt_credit t1-gate-approximate-1 rather than the earlier faithful-1 case. Host load reached 72.92/66.68/53.55 on eight cores. No Rust or native gate code changed. Full log: scratch repair-fast-third.log. The unweighted browser repair rerun passed all three deadline and both retirement cases (5/5); cached tests hit primary-connection deadlines under load (2 failures). Repeating cached tests in CPUWeight=10000 scope. Parser empty-tail microbench median complete-message decode 3825ns before / 742ns after (five interleaved samples, local scope, 1024B frames); differential rerun awaits its warmed Rust oracle.

Third unchanged native fast retry exits 1: fmt, VT native fmt, clippy, cargo-deny and both static builds PASS; test FAIL (101), now vt_credit t1-gate-approximate-1 rather than the earlier faithful-1 case. Host load reached 72.92/66.68/53.55 on eight cores. No Rust or native gate code changed. Full log: scratch repair-fast-third.log. The unweighted browser repair rerun passed all three deadline and both retirement cases (5/5); cached tests hit primary-connection deadlines under load (2 failures). Repeating cached tests in CPUWeight=10000 scope. Parser empty-tail microbench median complete-message decode 3825ns before / 742ns after (five interleaved samples, local scope, 1024B frames); differential rerun awaits its warmed Rust oracle.
Author
Owner

Offscreen regression reproduced before viewport tracking: bounded output advanced to offset 6 but renderer painted an offscreen window. IntersectionObserver now parks its loop and paints retained state on visibility; real Ghostty Chromium test passes (1/1, 11.8s). Corrected profiling instrumentation: visibility Snapshot resets replace wasmTerm, so earlier 4.45ms/s VT counter covered only one live stream; aggregate TaskDuration/render/receive numbers remain valid. Re-running corrected before/after VT counters. Warmed streaming differential passes 155 streams / 12906 schedules, zero divergences; package tests 8/8 with 38804 assertions. No terminal engine or dependency changed.

Offscreen regression reproduced before viewport tracking: bounded output advanced to offset 6 but renderer painted an offscreen window. IntersectionObserver now parks its loop and paints retained state on visibility; real Ghostty Chromium test passes (1/1, 11.8s). Corrected profiling instrumentation: visibility Snapshot resets replace wasmTerm, so earlier 4.45ms/s VT counter covered only one live stream; aggregate TaskDuration/render/receive numbers remain valid. Re-running corrected before/after VT counters. Warmed streaming differential passes 155 streams / 12906 schedules, zero divergences; package tests 8/8 with 38804 assertions. No terminal engine or dependency changed.
Author
Owner

Worker transport round in progress: native browser deadline tests all 3/3 pass through the worker, cached startup/disposal and offscreen output also pass (6/6 total). Retirement fixture was redirecting only the page WebSocket global; dedicated workers use their own global. Configuring its production connection with the explicit fixture URL restores the 1013 regression pass (1/1, 22.7s); running both codes next. Transport uses the same browser WebSocket and TS codec; Ghostty unchanged. Pure output batches at 8ms, control/input-response frames dispatch immediately, empty idle schedules nothing. First worker profile discarded three epoch-changing pairs under load 77–88; no valid CPU result yet. Baseline native release build continues in this job’s scratch snapshot, paused only during measurements.

Worker transport round in progress: native browser deadline tests all 3/3 pass through the worker, cached startup/disposal and offscreen output also pass (6/6 total). Retirement fixture was redirecting only the page WebSocket global; dedicated workers use their own global. Configuring its production connection with the explicit fixture URL restores the 1013 regression pass (1/1, 22.7s); running both codes next. Transport uses the same browser WebSocket and TS codec; Ghostty unchanged. Pure output batches at 8ms, control/input-response frames dispatch immediately, empty idle schedules nothing. First worker profile discarded three epoch-changing pairs under load 77–88; no valid CPU result yet. Baseline native release build continues in this job’s scratch snapshot, paused only during measurements.
Author
Owner

Credit batching exposed a liveness gap before commit: the legacy real-engine cached spec painted INITIAL but its final seven-byte refund was withheld indefinitely (credit-remainder-red.log). A one-shot 1s settling flush now restores the advertised window; live transitions flush pending credit immediately and owned writes awaiting live recovery also refund immediately. Test now passes (1/1, 17.7s; credit-remainder-green.log). Native merge-base f27b3fe latency gate: all six keystroke p99 metrics fail at load ~80, n=100 each; baseline confirmed 428.13ms, baseline PTY 697.64ms, same-session flood PTY 4995.34ms, against 334ms. Other-session flood isolation passes; same-session isolation fails. Full baseline gate continues through its cold auth-browser build. Head comparison pending; no claim of no regression yet.

Credit batching exposed a liveness gap before commit: the legacy real-engine cached spec painted INITIAL but its final seven-byte refund was withheld indefinitely (credit-remainder-red.log). A one-shot 1s settling flush now restores the advertised window; live transitions flush pending credit immediately and owned writes awaiting live recovery also refund immediately. Test now passes (1/1, 17.7s; credit-remainder-green.log). Native merge-base f27b3fe latency gate: all six keystroke p99 metrics fail at load ~80, n=100 each; baseline confirmed 428.13ms, baseline PTY 697.64ms, same-session flood PTY 4995.34ms, against 334ms. Other-session flood isolation passes; same-session isolation fails. Full baseline gate continues through its cold auth-browser build. Head comparison pending; no claim of no regression yet.
Author
Owner

Additional real-engine lifecycle regressions: disposing owned output before its paint raised "queue consume exceeds queued bytes" (dispose-output-red.log); restoring document visibility left applied output unpainted (foreground-red.log). Closed write callbacks now stop, paint hooks may close their owning window safely, and visibilitychange schedules a retained-state repaint. Both pass (2/2, 19.6s; lifecycle-green.log). Baseline full latency gate has reached its browser suite on 4407; no parallel browser benchmark while it owns that port. Another existing same-code gap noted for the follow-up: legacy TerminalClient.protocolFailure still calls browser close(1002); not yet repaired/tested.

Additional real-engine lifecycle regressions: disposing owned output before its paint raised "queue consume exceeds queued bytes" (dispose-output-red.log); restoring document visibility left applied output unpainted (foreground-red.log). Closed write callbacks now stop, paint hooks may close their owning window safely, and visibilitychange schedules a retained-state repaint. Both pass (2/2, 19.6s; lifecycle-green.log). Baseline full latency gate has reached its browser suite on 4407; no parallel browser benchmark while it owns that port. Another existing same-code gap noted for the follow-up: legacy TerminalClient.protocolFailure still calls browser close(1002); not yet repaired/tested.
Author
Owner

Full fast gate on the current repair working tree (base b5a071d6) exited 0 after host load dropped. Earlier three native credit deadline failures remain recorded; no native deadlines were changed. Verbatim gate summary:

| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
 8 pass
 0 fail
 38804 expect() calls
Ran 8 tests across 2 files. [3.22s]

Evidence: /home/kayg/.cache/codex-scratch/canvas-streams/repair-fast-quiet.log. Atomic repair commits are next; browser/performance/latency comparison remains in progress.

Full fast gate on the current repair working tree (base b5a071d6) exited 0 after host load dropped. Earlier three native credit deadline failures remain recorded; no native deadlines were changed. Verbatim gate summary: ``` | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [3.22s] ``` Evidence: /home/kayg/.cache/codex-scratch/canvas-streams/repair-fast-quiet.log. Atomic repair commits are next; browser/performance/latency comparison remains in progress.
Author
Owner

CS-R1 committed as 9acc6610: additive browser close 4002, all three deadline/malformed cases recover; 3/3 real-browser tests passed. CS-R2 committed as 2842166a: only the retired writer reattaches for Close(1013)/Close(1); 2/2 real-browser tests passed, offsets 6/6, queued input delivered, sibling unchanged, one physical socket. Full repair-tree scripts/verify fast exited 0 (repair-fast-quiet.log); native deadlines unchanged. Worker performance changes remain uncommitted pending valid measurement. Evidence paths: /home/kayg/.cache/codex-scratch/canvas-streams/r1-all-green.log, r2-green.log, repair-fast-quiet.log.

CS-R1 committed as 9acc6610: additive browser close 4002, all three deadline/malformed cases recover; 3/3 real-browser tests passed. CS-R2 committed as 2842166a: only the retired writer reattaches for Close(1013)/Close(1); 2/2 real-browser tests passed, offsets 6/6, queued input delivered, sibling unchanged, one physical socket. Full repair-tree scripts/verify fast exited 0 (repair-fast-quiet.log); native deadlines unchanged. Worker performance changes remain uncommitted pending valid measurement. Evidence paths: /home/kayg/.cache/codex-scratch/canvas-streams/r1-all-green.log, r2-green.log, repair-fast-quiet.log.
Author
Owner

Completed atomic steps: 0462804b cached pre-attach legacy compatibility (real gap, retained WIP spec); 4841d3c6 pending fit/output disposal guards (red then green browser evidence); cdd1934d bounded 64 KiB credit refunds with one settling timer (partial-refund red then green); 69797563 empty-buffer decoder fast path (median 3825→742 ns, 155 differential streams/12906 schedules, zero divergences); 50334d2e one dirty paint and invisible/background parking (both visibility tests red then green). Transport groundwork split by module: 24032771 shared bounds/messages, c290c00f worker, 341c44df facade. Full repair-tree fast gate exited 0; pinned Ghostty checksum unchanged. Worker integration/performance acceptance pending. Evidence: /home/kayg/.cache/codex-scratch/canvas-streams/{repair-fast-quiet.log,credit-remainder-red.log,credit-remainder-green.log,decoder-bench.log,offscreen-red.log,offscreen-green.log,foreground-red.log,lifecycle-green.log}.

Completed atomic steps: 0462804b cached pre-attach legacy compatibility (real gap, retained WIP spec); 4841d3c6 pending fit/output disposal guards (red then green browser evidence); cdd1934d bounded 64 KiB credit refunds with one settling timer (partial-refund red then green); 69797563 empty-buffer decoder fast path (median 3825→742 ns, 155 differential streams/12906 schedules, zero divergences); 50334d2e one dirty paint and invisible/background parking (both visibility tests red then green). Transport groundwork split by module: 24032771 shared bounds/messages, c290c00f worker, 341c44df facade. Full repair-tree fast gate exited 0; pinned Ghostty checksum unchanged. Worker integration/performance acceptance pending. Evidence: /home/kayg/.cache/codex-scratch/canvas-streams/{repair-fast-quiet.log,credit-remainder-red.log,credit-remainder-green.log,decoder-bench.log,offscreen-red.log,offscreen-green.log,foreground-red.log,lifecycle-green.log}.
Author
Owner

Unchanged merge base f27b3fe7 full scripts/verify latency exited 1 on infraternal-dev under CPUWeight=10000, port 4407. Browser phase: 6 failed, 26 skipped, 74 passed (17.8m), setup load 13.09, finish 11.25/10.98/20.22. Failures: offline access layout, motion audit, palette navigation, predictive cursor, terminal/latency probe, access first-paint budget. Native phase ran earlier at load ~80 and failed 7 metrics; do not compare that phase to a quiet head. A new matched lower-load native pair (base load 10.52, head 6.57) has completed: PTY baseline p99 328.27→339.71 ms; flood-other 304.20→300.14; flood-same 497.82→457.25; same-session isolation growth 169.55→117.54 (budget 16.67), both still fail. Baseline-tail difference needs reverse-order confirmation; no no-regression claim yet. Evidence: /home/kayg/.cache/codex-scratch/canvas-streams/base-latency.log and native-matched-pair.log.

Unchanged merge base f27b3fe7 full scripts/verify latency exited 1 on infraternal-dev under CPUWeight=10000, port 4407. Browser phase: 6 failed, 26 skipped, 74 passed (17.8m), setup load 13.09, finish 11.25/10.98/20.22. Failures: offline access layout, motion audit, palette navigation, predictive cursor, terminal/latency probe, access first-paint budget. Native phase ran earlier at load ~80 and failed 7 metrics; do not compare that phase to a quiet head. A new matched lower-load native pair (base load 10.52, head 6.57) has completed: PTY baseline p99 328.27→339.71 ms; flood-other 304.20→300.14; flood-same 497.82→457.25; same-session isolation growth 169.55→117.54 (budget 16.67), both still fail. Baseline-tail difference needs reverse-order confirmation; no no-regression claim yet. Evidence: /home/kayg/.cache/codex-scratch/canvas-streams/base-latency.log and native-matched-pair.log.
Author
Owner

Worker integration committed as bb7d43d8 (typed modules were split beforehand). Real-browser targeted run: 9 passed, 1 fixture failure; the fixture decoded only the first frame in the legacy combined Hello+Resume message. Corrected it to production WebSocketFrameDecoder; focused rerun 1/1 passed in 13.0 s. Both Close(1013)/Close(1) now pass through the worker with same-writer offsets and sibling continuity; 3 deadline cases, 2 disposal cases, 2 visibility cases also pass. Additional legacy close(1002) path reproduced (replacement peer count stayed 1), corrected to shared 4002, close code/Resume now pass; that follow-up is uncommitted until its final gate. Production repair screenshots: /home/kayg/.cache/codex-scratch/canvas-streams/repair-screens/. Evidence: repairs-all-green.log, legacy-close-red.log, legacy-close-green.log, integration-ts-fast.log. No CPU acceptance claim yet.

Worker integration committed as bb7d43d8 (typed modules were split beforehand). Real-browser targeted run: 9 passed, 1 fixture failure; the fixture decoded only the first frame in the legacy combined Hello+Resume message. Corrected it to production WebSocketFrameDecoder; focused rerun 1/1 passed in 13.0 s. Both Close(1013)/Close(1) now pass through the worker with same-writer offsets and sibling continuity; 3 deadline cases, 2 disposal cases, 2 visibility cases also pass. Additional legacy close(1002) path reproduced (replacement peer count stayed 1), corrected to shared 4002, close code/Resume now pass; that follow-up is uncommitted until its final gate. Production repair screenshots: /home/kayg/.cache/codex-scratch/canvas-streams/repair-screens/. Evidence: repairs-all-green.log, legacy-close-red.log, legacy-close-green.log, integration-ts-fast.log. No CPU acceptance claim yet.
Author
Owner

Performance acceptance remains unmet: valid worker pair with CPU sampling 324.58/141.12 ms/s; without CPU sampling 226.49/109.15; with network observer disabled but physical-byte/epoch counters retained 292.74/94.63. Workload remains 10 × 1024 B at 30 Hz, RTT 300±30 ms, one accepted physical epoch; no target-pass claim. Trace at load 5.78–6.28 shows 4796 native rAF callbacks/8 s for 10 live (two per output), main FunctionCall 534.9 ms and max 4.26 ms. Reusable packages/ui FrameTask prototype now batches owners and yields after 8 ms; 16 KiB VT chunks use a 2 ms per-owner application budget rather than a fixed throughput cap. Red tests observed six callbacks for three windows and 131081-byte single Output/Snapshot writes; green prototype browser run 9 pass + one pre-page /__mock/reset socket hangup, focused retry 1/1 pass. New partial-snapshot overlap regression red: 111 actual fillText operations before complete repaint through engine echo/resize paths; renderer guards and deferred fitting are next. Head bb7d43d8, prototype uncommitted. Evidence logs under /home/kayg/.cache/codex-scratch/canvas-streams/: worker-quiet-profile.log, worker-acceptance.log, worker-unobserved.log, worker-timeline.log, frame-coalescing-red.log, vt-chunks-red.log, shared-frame-browser.log, shared-frame-dispose-retry.log, partial-snapshot-draw-red.log.

Performance acceptance remains unmet: valid worker pair with CPU sampling 324.58/141.12 ms/s; without CPU sampling 226.49/109.15; with network observer disabled but physical-byte/epoch counters retained 292.74/94.63. Workload remains 10 × 1024 B at 30 Hz, RTT 300±30 ms, one accepted physical epoch; no target-pass claim. Trace at load 5.78–6.28 shows 4796 native rAF callbacks/8 s for 10 live (two per output), main FunctionCall 534.9 ms and max 4.26 ms. Reusable packages/ui FrameTask prototype now batches owners and yields after 8 ms; 16 KiB VT chunks use a 2 ms per-owner application budget rather than a fixed throughput cap. Red tests observed six callbacks for three windows and 131081-byte single Output/Snapshot writes; green prototype browser run 9 pass + one pre-page /__mock/reset socket hangup, focused retry 1/1 pass. New partial-snapshot overlap regression red: 111 actual fillText operations before complete repaint through engine echo/resize paths; renderer guards and deferred fitting are next. Head bb7d43d8, prototype uncommitted. Evidence logs under /home/kayg/.cache/codex-scratch/canvas-streams/: worker-quiet-profile.log, worker-acceptance.log, worker-unobserved.log, worker-timeline.log, frame-coalescing-red.log, vt-chunks-red.log, shared-frame-browser.log, shared-frame-dispose-retry.log, partial-snapshot-draw-red.log.
Author
Owner

Atomic steps committed: 54ce74af legacy invalid-frame close/resume; 58807c5d reusable yielding FrameTask module in packages/ui; 32c85394 deterministic coalescing/cancellation/fairness/error tests in fast gate (5/5); 9aa6a43c worker physical receive counters for payload validation without network observer. Full scripts/verify fast on the shared-frame prototype exited 0; native tests, fmt, clippy, deny and static gates all PASS, pinned engine checksum unchanged, differential oracle 8/8 with 38804 assertions. Green fast gate did not cover the newly found partial recovery issue: actual-draw regression failed with 111 partial glyph operations. Renderer boundary guards, paused recovery activity and deferred fitting now pass that exact test with zero partial draws, plus coalescing and bounded Output/Snapshot tests (4/4, 36.4 s). Terminal integration remains uncommitted for performance and predictive-order checks. Logs: shared-frame-fast.log, frame-batch-five-green.log, partial-snapshot-draw-red.log, shared-frame-guard-green.log, all under /home/kayg/.cache/codex-scratch/canvas-streams/.

Atomic steps committed: 54ce74af legacy invalid-frame close/resume; 58807c5d reusable yielding FrameTask module in packages/ui; 32c85394 deterministic coalescing/cancellation/fairness/error tests in fast gate (5/5); 9aa6a43c worker physical receive counters for payload validation without network observer. Full scripts/verify fast on the shared-frame prototype exited 0; native tests, fmt, clippy, deny and static gates all PASS, pinned engine checksum unchanged, differential oracle 8/8 with 38804 assertions. Green fast gate did not cover the newly found partial recovery issue: actual-draw regression failed with 111 partial glyph operations. Renderer boundary guards, paused recovery activity and deferred fitting now pass that exact test with zero partial draws, plus coalescing and bounded Output/Snapshot tests (4/4, 36.4 s). Terminal integration remains uncommitted for performance and predictive-order checks. Logs: shared-frame-fast.log, frame-batch-five-green.log, partial-snapshot-draw-red.log, shared-frame-guard-green.log, all under /home/kayg/.cache/codex-scratch/canvas-streams/.
Author
Owner

Native browser trace finding (head 9aa6a43c, terminal frame integration still uncommitted): 12 real PTYs, 10 paced 1 KiB/30 Hz producers, 300 +/-30 ms RTT, CPUWeight=10000, infraternal-dev/8 cores. Native-task-sources accepted one physical epoch: TaskDuration 179.32 ms/s live, 139.48 ms/s marker; targets 100/30 remain unmet. Load 12.31/30.75/36.73 then 16.26/30.72/36.63. Trace source ScheduledActionSendBeginMainFrame: 1268.79/942.43 ms over eight seconds (223/245 tasks); worker PostMessageToWorkerObject: 71.30/93.84 ms. Shared queue removes thousands of per-window animation callbacks, but compositor work dominates. Diagnostic context hints are being measured, not shipped. Evidence: native-task-sources.log and native-task-sources/timeline-{live,marker}-0.json in the job scratch directory.

Matched reverse-order native latency: head/base PTY baseline p99 329.19/329.10 ms, other-session flood 321.05/315.48 ms; both pass. Same-session flood 446.07/560.39 ms, both fail existing growth budget. First-order head/base same-session tails 457.25/497.82 ms also both fail. Native Rust source unchanged in this repair round; no consistent ordinary-key regression in the paired runs. Evidence native-reverse-pair.log/native-matched-pair.log. Full head latency gate remains pending.

Native browser trace finding (head 9aa6a43c, terminal frame integration still uncommitted): 12 real PTYs, 10 paced 1 KiB/30 Hz producers, 300 +/-30 ms RTT, CPUWeight=10000, infraternal-dev/8 cores. Native-task-sources accepted one physical epoch: TaskDuration 179.32 ms/s live, 139.48 ms/s marker; targets 100/30 remain unmet. Load 12.31/30.75/36.73 then 16.26/30.72/36.63. Trace source ScheduledActionSendBeginMainFrame: 1268.79/942.43 ms over eight seconds (223/245 tasks); worker PostMessageToWorkerObject: 71.30/93.84 ms. Shared queue removes thousands of per-window animation callbacks, but compositor work dominates. Diagnostic context hints are being measured, not shipped. Evidence: native-task-sources.log and native-task-sources/timeline-{live,marker}-0.json in the job scratch directory. Matched reverse-order native latency: head/base PTY baseline p99 329.19/329.10 ms, other-session flood 321.05/315.48 ms; both pass. Same-session flood 446.07/560.39 ms, both fail existing growth budget. First-order head/base same-session tails 457.25/497.82 ms also both fail. Native Rust source unchanged in this repair round; no consistent ordinary-key regression in the paired runs. Evidence native-reverse-pair.log/native-matched-pair.log. Full head latency gate remains pending.
Author
Owner

Browser reporting finding: Playwright request socket-hangup errors include fixture cookie headers in their call log. Two generated gate logs were redacted in place; retained evidence contains no header values. The existing config already disables network traces and arbitrary failure screenshots. Added a first reporter to filter cookie/set-cookie/authorization/proxy-authorization in error message, stack and value before the list reporter. Two header regression tests failed before filtering; an ANSI-styled header test also failed before normalization. All three unit cases now pass. The real request-failure integration exposed the ANSI bypass; its repeat is pending. Source: apps/tracer/redact-reporter.ts and playwright.config.ts. No credential stores inspected.

Full head latency run: exit 1, 11 browser failures, 26 skipped, 84 passed (25.8m), native six failed metrics. Browser load varied through approximately 70 on eight cores, so it is not matched to the merge-base browser load approximately 13. Returning sign-in usable-terminal p99 4099.50 ms passes 5000 ms. Two predictive interleaving tests hooked socket delivery, which now only queues VT; their original assertions pass when the mock hook observes applied VT/reconciled echo before paint (2/2, 21.4s). Current broader repair/prediction rerun is pending. Evidence: head-latency.log (redacted), write-probe-green.log, reporter-{red,ansi-red,final-green}.log.

Browser reporting finding: Playwright request socket-hangup errors include fixture cookie headers in their call log. Two generated gate logs were redacted in place; retained evidence contains no header values. The existing config already disables network traces and arbitrary failure screenshots. Added a first reporter to filter cookie/set-cookie/authorization/proxy-authorization in error message, stack and value before the list reporter. Two header regression tests failed before filtering; an ANSI-styled header test also failed before normalization. All three unit cases now pass. The real request-failure integration exposed the ANSI bypass; its repeat is pending. Source: apps/tracer/redact-reporter.ts and playwright.config.ts. No credential stores inspected. Full head latency run: exit 1, 11 browser failures, 26 skipped, 84 passed (25.8m), native six failed metrics. Browser load varied through approximately 70 on eight cores, so it is not matched to the merge-base browser load approximately 13. Returning sign-in usable-terminal p99 4099.50 ms passes 5000 ms. Two predictive interleaving tests hooked socket delivery, which now only queues VT; their original assertions pass when the mock hook observes applied VT/reconciled echo before paint (2/2, 21.4s). Current broader repair/prediction rerun is pending. Evidence: head-latency.log (redacted), write-probe-green.log, reporter-{red,ansi-red,final-green}.log.
Author
Owner

CPU repeat at head WIP: timestamped 8-second TaskDuration 101.286/38.059 ms/s (10 live / 1 live+9 marker), load 5.98/7.14/11.00 and 7.20/7.37/11.03; first pair was 91.374/25.404. Targets 100/30 are not reliably met yet. Original 33440a3 timestamped pair was 463.812/256.230, different host load. Worker16ms experiment 137.864/46.139 reverted to8ms. Scoped alpha-preserving desynchronized canvas context regression red/green; no engine replacement. Real thumbnail:856bytes,375ms firstpaint,2.1ms VT+0.3ms render; checkpoint unchanged. Twelve windows share one WASM memory:67,764,224bytes, not twelve copies. Counter sample intervals fixed separately for CDP/page/server; now running portable harness on minified production with30-second phases. Baseline mixed-input budget also fails3.7ms vs2ms; head3.1-3.2ms, cursor assertions pass. Real reporter request-error integration passes sensitive-header redaction including ANSI styling. Full final fast and source checks running. No pushes.

CPU repeat at head WIP: timestamped 8-second TaskDuration 101.286/38.059 ms/s (10 live / 1 live+9 marker), load 5.98/7.14/11.00 and 7.20/7.37/11.03; first pair was 91.374/25.404. Targets 100/30 are not reliably met yet. Original 33440a3 timestamped pair was 463.812/256.230, different host load. Worker16ms experiment 137.864/46.139 reverted to8ms. Scoped alpha-preserving desynchronized canvas context regression red/green; no engine replacement. Real thumbnail:856bytes,375ms firstpaint,2.1ms VT+0.3ms render; checkpoint unchanged. Twelve windows share one WASM memory:67,764,224bytes, not twelve copies. Counter sample intervals fixed separately for CDP/page/server; now running portable harness on minified production with30-second phases. Baseline mixed-input budget also fails3.7ms vs2ms; head3.1-3.2ms, cursor assertions pass. Real reporter request-error integration passes sensitive-header redaction including ANSI styling. Full final fast and source checks running. No pushes.
Author
Owner

Completed source steps:00873f04 bounded shared-frame VT/paint; e77890d3 scoped alpha-preserving low-latency context;4a71baa9 explicit applied-output mock probe;f16b1d8f sensitive-header reporter;a9eaedeb redaction regressions/gate;7df7787d real-renderer frame/cursor tests;8ff1c489 portable timestamped benchmark. Full repair-tree scripts/verify fast exited0, current source8ff1c489. Full output retained in docs/verification/canvas-streams/repair-round/fast-final.txt; unchanged vendor checksums, UI5/5, tracer28/28, parser8/8;155 differential streams/12906 schedules/zero divergences.

Verbatim gate output:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+

 8 pass
 0 fail
 38804 expect() calls
Ran 8 tests across 2 files. [2.41s]

Minified production30s accepted pair173.861/46.923 TaskDurationms/s at load16.20/13.41/12.09 and14.46/13.31/12.10:targets100/30 remain unmet. First2 pairs discarded for physical reconnects. Twelve windows share67,764,224bytes of WASM memory. Production desktop/mobile captures saved for independent review. Merge-base latency rerun now running; head follows with unchanged settings. No budgets widened, no push.

Completed source steps:00873f04 bounded shared-frame VT/paint; e77890d3 scoped alpha-preserving low-latency context;4a71baa9 explicit applied-output mock probe;f16b1d8f sensitive-header reporter;a9eaedeb redaction regressions/gate;7df7787d real-renderer frame/cursor tests;8ff1c489 portable timestamped benchmark. Full repair-tree scripts/verify fast exited0, current source8ff1c489. Full output retained in docs/verification/canvas-streams/repair-round/fast-final.txt; unchanged vendor checksums, UI5/5, tracer28/28, parser8/8;155 differential streams/12906 schedules/zero divergences. Verbatim gate output: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [2.41s] ``` Minified production30s accepted pair173.861/46.923 TaskDurationms/s at load16.20/13.41/12.09 and14.46/13.31/12.10:targets100/30 remain unmet. First2 pairs discarded for physical reconnects. Twelve windows share67,764,224bytes of WASM memory. Production desktop/mobile captures saved for independent review. Merge-base latency rerun now running; head follows with unchanged settings. No budgets widened, no push.
Author
Owner

Merge-base f27b3fe7 latency rerun exited 1: 7 browser failures, 26 skips, 73 passes (18.0m); auth browser PASS. Native ordinary and other-session flood checks pass; same-session flood fails. Repaired head starts immediately afterward with the same CPUWeight 10000 scope setting, RTT 300 +/-30ms, port4407 and test configuration. Host load fluctuates; all phase loads retained. Full safe output: docs/verification/canvas-streams/repair-round/latency-base-final.txt. Benchmark diagnostics commit f587f3b4 adds opt-in bounded frame duration/allocation counters; TypeScript check exited0.

Verbatim comparison baseline:

ENVIRONMENT phase=setup machine=infraternal-dev arch=x86_64 cores=8 load=10.56 12.44 11.87 tracer_test_port=4407 rtt_ms=300 jitter_ms=30
ENVIRONMENT phase=native machine=infraternal-dev arch=x86_64 cores=8 load=10.95 12.46 11.89 tracer_test_port=4407 rtt_ms=300 jitter_ms=30
METRIC name=keystroke_pty_echo_baseline source=real-agent-pty n=100 p50_ms=303.96 p99_ms=332.77 budget_ms=334.00 result=PASS
METRIC name=keystroke_pty_echo_flood_other_session source=real-agent-pty n=100 p50_ms=286.24 p99_ms=292.33 budget_ms=334.00 result=PASS
METRIC name=flood_isolation_other_session source=real-agent-pty n=100 baseline_p99_ms=332.77 flood_p99_ms=292.33 growth_ms=-40.44 budget_ms=16.67 result=PASS
METRIC name=keystroke_pty_echo_flood_same_session source=real-agent-pty n=100 p50_ms=356.27 p99_ms=535.50 budget_ms=334.00 result=FAIL
METRIC name=flood_isolation_same_session source=real-agent-pty n=100 baseline_p99_ms=332.77 flood_p99_ms=535.50 growth_ms=202.73 budget_ms=16.67 result=FAIL
ENVIRONMENT phase=auth-browser machine=infraternal-dev arch=x86_64 cores=8 load=9.45 11.53 11.61 tracer_test_port=4407 rtt_ms=300 jitter_ms=30
ENVIRONMENT phase=tracer-browser machine=infraternal-dev arch=x86_64 cores=8 load=7.98 10.90 11.40 tracer_test_port=4407 rtt_ms=300 jitter_ms=30
ENVIRONMENT machine=infraternal-dev cores=8 load_1_5_15=22.82,13.35,11.94
METRIC name=returning_signin_terminal_usable source=tracer-production-build n=10 p50_ms=4030.90 p99_ms=4259.90 budget_ms=5000 result=PASS
  7 failed
  26 skipped
  73 passed (18.0m)
ENVIRONMENT phase=finish machine=infraternal-dev arch=x86_64 cores=8 load=6.51 10.28 11.25 tracer_test_port=4407 rtt_ms=300 jitter_ms=30
Merge-base f27b3fe7 latency rerun exited 1: 7 browser failures, 26 skips, 73 passes (18.0m); auth browser PASS. Native ordinary and other-session flood checks pass; same-session flood fails. Repaired head starts immediately afterward with the same CPUWeight 10000 scope setting, RTT 300 +/-30ms, port4407 and test configuration. Host load fluctuates; all phase loads retained. Full safe output: docs/verification/canvas-streams/repair-round/latency-base-final.txt. Benchmark diagnostics commit f587f3b4 adds opt-in bounded frame duration/allocation counters; TypeScript check exited0. Verbatim comparison baseline: ``` ENVIRONMENT phase=setup machine=infraternal-dev arch=x86_64 cores=8 load=10.56 12.44 11.87 tracer_test_port=4407 rtt_ms=300 jitter_ms=30 ENVIRONMENT phase=native machine=infraternal-dev arch=x86_64 cores=8 load=10.95 12.46 11.89 tracer_test_port=4407 rtt_ms=300 jitter_ms=30 METRIC name=keystroke_pty_echo_baseline source=real-agent-pty n=100 p50_ms=303.96 p99_ms=332.77 budget_ms=334.00 result=PASS METRIC name=keystroke_pty_echo_flood_other_session source=real-agent-pty n=100 p50_ms=286.24 p99_ms=292.33 budget_ms=334.00 result=PASS METRIC name=flood_isolation_other_session source=real-agent-pty n=100 baseline_p99_ms=332.77 flood_p99_ms=292.33 growth_ms=-40.44 budget_ms=16.67 result=PASS METRIC name=keystroke_pty_echo_flood_same_session source=real-agent-pty n=100 p50_ms=356.27 p99_ms=535.50 budget_ms=334.00 result=FAIL METRIC name=flood_isolation_same_session source=real-agent-pty n=100 baseline_p99_ms=332.77 flood_p99_ms=535.50 growth_ms=202.73 budget_ms=16.67 result=FAIL ENVIRONMENT phase=auth-browser machine=infraternal-dev arch=x86_64 cores=8 load=9.45 11.53 11.61 tracer_test_port=4407 rtt_ms=300 jitter_ms=30 ENVIRONMENT phase=tracer-browser machine=infraternal-dev arch=x86_64 cores=8 load=7.98 10.90 11.40 tracer_test_port=4407 rtt_ms=300 jitter_ms=30 ENVIRONMENT machine=infraternal-dev cores=8 load_1_5_15=22.82,13.35,11.94 METRIC name=returning_signin_terminal_usable source=tracer-production-build n=10 p50_ms=4030.90 p99_ms=4259.90 budget_ms=5000 result=PASS 7 failed 26 skipped 73 passed (18.0m) ENVIRONMENT phase=finish machine=infraternal-dev arch=x86_64 cores=8 load=6.51 10.28 11.25 tracer_test_port=4407 rtt_ms=300 jitter_ms=30 ```
Author
Owner

Head f587f3b4 full latency: 5 failed, 26 skipped, 91 passed (20.4m); all repair/frame cases pass. Three failures are fixture API socket hangups; one focused retry follows. Base: 7 failed, 26 skipped, 73 passed. Native ordinary PTY p99 base/head 332.77/323.89 ms; other-flood 292.33/362.92, same-flood 535.50/833.39, with different external loads, so flood regression remains unresolved. Quiet reverse pair ordinary 329.10/329.19 ms at load 8.69/8.62. Plain production 30s head samples: TaskDuration 76.840/29.069 ms/s at load 5.00/4.48, then 133.647/45.635 at load 20.19/19.81; targets are not reliable across observed load. Original 33440a3 plain production now 658.408/569.963 at load 33.59/28.63, not a controlled percentage comparison. Diagnostic head frame callback p99/max 5.7/7.3 ms live, .8/1.4 marker, zero >16 ms in the accepted 8s pair. Original diagnostic max 33.3/25.6 ms, eight/two >16. Main-page sampled allocation head 3.740/.626 MB/s versus original 2.779/.716; different throughput/load, no allocation-reduction claim. Evidence being retained under docs/verification/canvas-streams/repair-round/. Final head plain measurement, API retry and final fast gate remain.

Head f587f3b4 full latency: 5 failed, 26 skipped, 91 passed (20.4m); all repair/frame cases pass. Three failures are fixture API socket hangups; one focused retry follows. Base: 7 failed, 26 skipped, 73 passed. Native ordinary PTY p99 base/head 332.77/323.89 ms; other-flood 292.33/362.92, same-flood 535.50/833.39, with different external loads, so flood regression remains unresolved. Quiet reverse pair ordinary 329.10/329.19 ms at load 8.69/8.62. Plain production 30s head samples: TaskDuration 76.840/29.069 ms/s at load 5.00/4.48, then 133.647/45.635 at load 20.19/19.81; targets are not reliable across observed load. Original 33440a3 plain production now 658.408/569.963 at load 33.59/28.63, not a controlled percentage comparison. Diagnostic head frame callback p99/max 5.7/7.3 ms live, .8/1.4 marker, zero >16 ms in the accepted 8s pair. Original diagnostic max 33.3/25.6 ms, eight/two >16. Main-page sampled allocation head 3.740/.626 MB/s versus original 2.779/.716; different throughput/load, no allocation-reduction claim. Evidence being retained under docs/verification/canvas-streams/repair-round/. Final head plain measurement, API retry and final fast gate remain.
Author
Owner

Final plain production sample accepts epoch 6 after three discarded pairs: all 12 windows attached before/after, socket open throughout endpoints. TaskDuration 145.807/39.609 ms/s at loads 10.48/14.00/17.10 and 10.31/13.54/16.83; targets remain unmet. ThreadTime 138.105/43.426 and ScriptDuration 92.857/18.289. Report retains all passing/missing samples. Focused one-time API retry: key-tray focus PASS, mixed.txt renderer PASS; access first-paint setup p99 1892.50 ms exceeds 1000 ms, reproducing base budget failure. No timing allowances widened. Benchmark endpoint checks/typecheck PASS. Evidence and production screenshots: docs/verification/canvas-streams/repair-round/. Final fast gate follows once browser retry exits. Performance/latency verification remains open.

Final plain production sample accepts epoch 6 after three discarded pairs: all 12 windows attached before/after, socket open throughout endpoints. TaskDuration 145.807/39.609 ms/s at loads 10.48/14.00/17.10 and 10.31/13.54/16.83; targets remain unmet. ThreadTime 138.105/43.426 and ScriptDuration 92.857/18.289. Report retains all passing/missing samples. Focused one-time API retry: key-tray focus PASS, mixed.txt renderer PASS; access first-paint setup p99 1892.50 ms exceeds 1000 ms, reproducing base budget failure. No timing allowances widened. Benchmark endpoint checks/typecheck PASS. Evidence and production screenshots: docs/verification/canvas-streams/repair-round/. Final fast gate follows once browser retry exits. Performance/latency verification remains open.
Author
Owner

Handoff at head badbfc9064; issue remains open. Benchmark step b42601af11: diagnostic work timers opt-in, open-socket/all-attachment endpoint validation, discarded phase evidence. Evidence step badbfc9064: durable production screenshots, final fast output, full base/head latency output and per-item measurements in docs/verification/canvas-streams/repair-round/.

CS-R1, CS-R2 and cached-mode repairs pass the full head browser suite. Final plain production TaskDuration 145.807/39.609 ms/s at loads 10.48/10.31, after three invalidated pairs; all twelve windows attached, one epoch. Quiet sample 76.840/29.069 meets targets, later samples do not. Performance Definition of Done is NOT satisfied. VT remains main-thread; parsing is off-thread. Sampled live allocation increased at different throughput/load; no reduction claim.

Full latency base: 7 failed, 26 skipped, 73 passed; head: 5 failed, 26 skipped, 91 passed. Once-only API retry: key-tray and mixed renderer pass; access first-paint p99 1892.50 ms still fails 1000 ms, also failing at base. Native flood regression is unresolved at unmatched loads; quiet ordinary echo base/head 329.10/329.19 ms at loads 8.69/8.62. No allowance changed. Controlled dev-host load evidence is needed to settle flood comparison; the orchestrator controls job contention. Sustained performance targets, full-scale engine memory and physical iPhone cadence remain open.

Final scripts/verify fast: exit 0, no retry. Complete verbatim output committed in repair-round/fast-final.txt. Verbatim gate summaries:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+

 5 pass
 0 fail
 18 expect() calls
Ran 5 tests across 1 file. [34.00ms]
 28 pass
 0 fail
 437 expect() calls
Ran 28 tests across 8 files. [11.58s]
 8 pass
 0 fail
 38804 expect() calls
Ran 8 tests across 2 files. [5.57s]

Verbatim differential evidence:

stream differential: 155 streams, 12906 schedules, zero divergences

How to test: TRACER_TEST_PORT=4407, run deadline/stream-close/cached/frame specs; retire one stream while typing and check independent sibling checkpoints; run the 30-second real-browser live/marker harness with observer flags unset and retain every load/sample.

Nothing pushed, deployed or closed. Owned build scratch is being removed after durable evidence capture.

Handoff at head badbfc90642c4a99bbb6d78b129a2146bbba18b6; issue remains open. Benchmark step b42601af11fbfa8ae03b7017b61d3067777759f9: diagnostic work timers opt-in, open-socket/all-attachment endpoint validation, discarded phase evidence. Evidence step badbfc90642c4a99bbb6d78b129a2146bbba18b6: durable production screenshots, final fast output, full base/head latency output and per-item measurements in docs/verification/canvas-streams/repair-round/. CS-R1, CS-R2 and cached-mode repairs pass the full head browser suite. Final plain production TaskDuration 145.807/39.609 ms/s at loads 10.48/10.31, after three invalidated pairs; all twelve windows attached, one epoch. Quiet sample 76.840/29.069 meets targets, later samples do not. Performance Definition of Done is NOT satisfied. VT remains main-thread; parsing is off-thread. Sampled live allocation increased at different throughput/load; no reduction claim. Full latency base: 7 failed, 26 skipped, 73 passed; head: 5 failed, 26 skipped, 91 passed. Once-only API retry: key-tray and mixed renderer pass; access first-paint p99 1892.50 ms still fails 1000 ms, also failing at base. Native flood regression is unresolved at unmatched loads; quiet ordinary echo base/head 329.10/329.19 ms at loads 8.69/8.62. No allowance changed. Controlled dev-host load evidence is needed to settle flood comparison; the orchestrator controls job contention. Sustained performance targets, full-scale engine memory and physical iPhone cadence remain open. Final scripts/verify fast: exit 0, no retry. Complete verbatim output committed in repair-round/fast-final.txt. Verbatim gate summaries: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ 5 pass 0 fail 18 expect() calls Ran 5 tests across 1 file. [34.00ms] 28 pass 0 fail 437 expect() calls Ran 28 tests across 8 files. [11.58s] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [5.57s] ``` Verbatim differential evidence: ``` stream differential: 155 streams, 12906 schedules, zero divergences ``` How to test: TRACER_TEST_PORT=4407, run deadline/stream-close/cached/frame specs; retire one stream while typing and check independent sibling checkpoints; run the 30-second real-browser live/marker harness with observer flags unset and retain every load/sample. Nothing pushed, deployed or closed. Owned build scratch is being removed after durable evidence capture.
Author
Owner

Independent review resumed on review-canvas-streams at target badbfc9064; merge base with dev f27b3fe7a4. Read #107 and parent #89 history, project contract, main decisions and author report. Earlier review branch preserved as review-canvas-streams-prior-3f335bc0; prior CS-R1/CS-R2 and cached-mode tests are present in repaired head. Verify repairs and remaining protocol/lifecycle/performance boundaries; implementation unchanged, no push/deploy.

Independent review resumed on review-canvas-streams at target badbfc90642c4a99bbb6d78b129a2146bbba18b6; merge base with dev f27b3fe7a4dcfb3e268bdee90405bf1f1d8a0ce9. Read #107 and parent #89 history, project contract, main decisions and author report. Earlier review branch preserved as review-canvas-streams-prior-3f335bc0; prior CS-R1/CS-R2 and cached-mode tests are present in repaired head. Verify repairs and remaining protocol/lifecycle/performance boundaries; implementation unchanged, no push/deploy.
Author
Owner

CS-R3 (P2): real worker send pressure prevents local writer cleanup. Two bounded Input frames fill exactly 2,097,152 bytes in one main-thread task; CanvasStream.close throws "canvas send queue is full" before removing the writer. TerminalClient.dispose calls this before terminal.dispose, so a closed owner can retain its renderer. Production Ghostty/native Chromium/real module worker/WebSocket, RTT300 +/-30ms, port4425: 1 failed/9.0s; exact-capacity assertion passed. Failing test apps/tracer/test/canvas-dispose-pressure-review.spec.ts; implementation unchanged. Commit follows.

CS-R3 (P2): real worker send pressure prevents local writer cleanup. Two bounded Input frames fill exactly 2,097,152 bytes in one main-thread task; CanvasStream.close throws "canvas send queue is full" before removing the writer. TerminalClient.dispose calls this before terminal.dispose, so a closed owner can retain its renderer. Production Ghostty/native Chromium/real module worker/WebSocket, RTT300 +/-30ms, port4425: 1 failed/9.0s; exact-capacity assertion passed. Failing test apps/tracer/test/canvas-dispose-pressure-review.spec.ts; implementation unchanged. Commit follows.
Author
Owner

Review step complete: evidence commit 8895e104, failing real-worker send-pressure regression CS-R3. Prior CS-R1/CS-R2/cached/frame repairs independently pass: 16/16 Playwright tests, 2.4 minutes, port4419, 300 +/-30ms RTT, production assets. Browser plugin unavailable; repository Playwright used. Fast gate still compiling cold native/static dependencies. New Rust regression is staged in scratch until the target-head gate finishes, preserving its original test set. Next check: unsupported visibility on a surviving older shim must stop local retries rather than return transient code1.

Review step complete: evidence commit 8895e104, failing real-worker send-pressure regression CS-R3. Prior CS-R1/CS-R2/cached/frame repairs independently pass: 16/16 Playwright tests, 2.4 minutes, port4419, 300 +/-30ms RTT, production assets. Browser plugin unavailable; repository Playwright used. Fast gate still compiling cold native/static dependencies. New Rust regression is staged in scratch until the target-head gate finishes, preserving its original test set. Next check: unsupported visibility on a surviving older shim must stop local retries rather than return transient code1.
Author
Owner

CS-R4 (P1): #107 benchmark/screenshot evidence uses an overlapping primary surface. canvas-real-bench.ts:80–83 reparents #terminal-host without resetting position:absolute/inset:0 from style.css:203–205; its section is not a containing block. Real production Ghostty/Chromium at1280x720: primary host1240x680, intended slot408x164. Failing normal browser test canvas-benchmark-layout-review.spec.ts reproduces the exact mounting; width1240>408. Author desktop/mobile captures show the same coverage over sibling windows; independent capture preserved. Reverify intended ten-visible-window geometry/occlusion and CPU evidence after correcting the harness. Implementation unchanged.

CS-R4 (P1): #107 benchmark/screenshot evidence uses an overlapping primary surface. canvas-real-bench.ts:80–83 reparents #terminal-host without resetting position:absolute/inset:0 from style.css:203–205; its section is not a containing block. Real production Ghostty/Chromium at1280x720: primary host1240x680, intended slot408x164. Failing normal browser test canvas-benchmark-layout-review.spec.ts reproduces the exact mounting; width1240>408. Author desktop/mobile captures show the same coverage over sibling windows; independent capture preserved. Reverify intended ten-visible-window geometry/occlusion and CPU evidence after correcting the harness. Implementation unchanged.
Author
Owner

CS-R5 (P2): surviving shims without cap4 are refused with transient Close1 (daemon.rs:491, writer:136–137), which TerminalClient retries at terminal.ts:907. Real daemon/shim/PTY + existing AckBarrier caps_mask=7, RTT300 +/-30ms: three repeated Attach/Visibility cycles returned[1,1,1], expected a single nonretry capability refusal1003. Engine/state remain real; only advertised bit4 is masked. Normal Rust regression canvas_legacy_visibility_review::legacy_visibility_refusal_stops_local_reattachment and Python oracle are committed; implementation unchanged. The browser policy is already covered by passing code1 reattach tests.

CS-R5 (P2): surviving shims without cap4 are refused with transient Close1 (daemon.rs:491, writer:136–137), which TerminalClient retries at terminal.ts:907. Real daemon/shim/PTY + existing AckBarrier caps_mask=7, RTT300 +/-30ms: three repeated Attach/Visibility cycles returned[1,1,1], expected a single nonretry capability refusal1003. Engine/state remain real; only advertised bit4 is masked. Normal Rust regression canvas_legacy_visibility_review::legacy_visibility_refusal_stops_local_reattachment and Python oracle are committed; implementation unchanged. The browser policy is already covered by passing code1 reattach tests.
Author
Owner

Review steps committed: fb603d54 (CS-R4 P1 benchmark primary-host layout:1240x680 over408x164 slot) and e5523c28 (CS-R5 P2 legacy-capability refusals repeat[1,1,1]). CS-R3 send-pressure failure reproduces again without buffer/worker mocks. Prior repair suite16/16 passes. Target-head native test cohort was planned before new Rust regression was restored; fast gate still running, no known failed row yet. Source archive of exact badbfc90 is prepared in owned scratch for latency gates without adding intentional review failures. New performance measurements will be labeled diagnostic because the original layout is invalid; no implementation or budget changes.

Review steps committed: fb603d54 (CS-R4 P1 benchmark primary-host layout:1240x680 over408x164 slot) and e5523c28 (CS-R5 P2 legacy-capability refusals repeat[1,1,1]). CS-R3 send-pressure failure reproduces again without buffer/worker mocks. Prior repair suite16/16 passes. Target-head native test cohort was planned before new Rust regression was restored; fast gate still running, no known failed row yet. Source archive of exact badbfc90 is prepared in owned scratch for latency gates without adding intentional review failures. New performance measurements will be labeled diagnostic because the original layout is invalid; no implementation or budget changes.
Author
Owner

Fuzz instrumentation build encountered a linker error before executing any input: nightly-2026-10-01 address-sanitized wire_frame_decode has unresolved _sancov_gen coverage symbols. Log retained in owned scratch fuzz-wire-frame.txt. Retrying the same existing target/corpus without the sanitizer; no production code or profile change. Original Rust fast test cohort passed; both static target builds remain in progress. Benchmark/latency measurements will wait for owned compiler work to stop.

Fuzz instrumentation build encountered a linker error before executing any input: nightly-2026-10-01 address-sanitized wire_frame_decode has unresolved __sancov_gen_ coverage symbols. Log retained in owned scratch fuzz-wire-frame.txt. Retrying the same existing target/corpus without the sanitizer; no production code or profile change. Original Rust fast test cohort passed; both static target builds remain in progress. Benchmark/latency measurements will wait for owned compiler work to stop.
Author
Owner

Review step: bounded existing wire/shim decoder fuzz targets completed with coverage and sanitizer=none: wire_frame_decode 13,393,713 executions/31s; wire_stream_decode 424,888/31s; shim_frame_decode 1,726,706/31s. No crashes or artifacts. Address-sanitized build did not link (_sancov_gen); this is not an ASan pass. CPUWeight=10000, local infraternal-dev, final load9.11/13.04/13.93. The fast run was interrupted during static compilation after original native tests passed; resuming scripts/verify fast on an exact badbfc90 archive with warm cache. Review head e5523c28.

Review step: bounded existing wire/shim decoder fuzz targets completed with coverage and sanitizer=none: wire_frame_decode 13,393,713 executions/31s; wire_stream_decode 424,888/31s; shim_frame_decode 1,726,706/31s. No crashes or artifacts. Address-sanitized build did not link (__sancov_gen_); this is not an ASan pass. CPUWeight=10000, local infraternal-dev, final load9.11/13.04/13.93. The fast run was interrupted during static compilation after original native tests passed; resuming scripts/verify fast on an exact badbfc90 archive with warm cache. Review head e5523c28.
Author
Owner

Review step: refined CS-R5 test to allow any permanent refusal code rather than prescribing1003; it now mirrors both browser retry codes1/1013. Re-run still fails with[1,1,1]. Atomic CS-R5 commit amended to d729bec5 (supersedes e5523c28). Implementation unchanged. Full log will be committed under docs/verification/review-canvas-streams/legacy-visibility-red.txt.

Review step: refined CS-R5 test to allow any permanent refusal code rather than prescribing1003; it now mirrors both browser retry codes1/1013. Re-run still fails with[1,1,1]. Atomic CS-R5 commit amended to d729bec5 (supersedes e5523c28). Implementation unchanged. Full log will be committed under docs/verification/review-canvas-streams/legacy-visibility-red.txt.
Author
Owner

Verification update: exact-head Rust cohort235 passed/25 ignored; fmt/clippy/deny pass. x86_64 static15,985,424bytes, no PT_INTERP, within16,404,816budget. Aarch64 attempt failed because a review-created cache alias pointed at an unfinished native build (mkdir: File exists). Removed own dangling aliases and queued a full gate rerun; not a target finding. No owner action needed. Raw interrupted/setup-error logs will be retained. Review d729bec5.

Verification update: exact-head Rust cohort235 passed/25 ignored; fmt/clippy/deny pass. x86_64 static15,985,424bytes, no PT_INTERP, within16,404,816budget. Aarch64 attempt failed because a review-created cache alias pointed at an unfinished native build (mkdir: File exists). Removed own dangling aliases and queued a full gate rerun; not a target finding. No owner action needed. Raw interrupted/setup-error logs will be retained. Review d729bec5.
Author
Owner

Completed review evidence step at4dd4e2bd: committed failing logs and production screenshot forCS-R3/P2,CS-R4/P1,CS-R5/P2;16/16 original repair tests pass;15,545,307 bounded decoder executions without crashes (sanitizer=none, ASan linker limitation explicit). Preserved interrupted/cache-error gate attempts. Full corrected gate and scale/latency measurements remain pending. No implementation change.

Completed review evidence step at4dd4e2bd: committed failing logs and production screenshot forCS-R3/P2,CS-R4/P1,CS-R5/P2;16/16 original repair tests pass;15,545,307 bounded decoder executions without crashes (sanitizer=none, ASan linker limitation explicit). Preserved interrupted/cache-error gate attempts. Full corrected gate and scale/latency measurements remain pending. No implementation change.
Author
Owner

Verification step: static gates now pass both targets; independent exact-head ts_verify_fast passes. Target fast attempt failed only vt_credit/t1-gate-faithful-16384 under load39. Detached dev459070fe normal vt_credit passes(24.81s); its fixture has#118 observer changes. Exact head faithful16384 probe against that baseline binary also passes under load43/37/30, so this does not exonerate the head failure under#118. One fresh exact-head gate is running, then sequential12-PTY performance and full latency gates. A shared debug-cache oracle failure was review setup contamination; cleared local fingerprints and rerun TS gate passes. Review4dd4e2bd.

Verification step: static gates now pass both targets; independent exact-head ts_verify_fast passes. Target fast attempt failed only vt_credit/t1-gate-faithful-16384 under load~39. Detached dev459070fe normal vt_credit passes(24.81s); its fixture has#118 observer changes. Exact head faithful16384 probe against that baseline binary also passes under load~43/37/30, so this does not exonerate the head failure under#118. One fresh exact-head gate is running, then sequential12-PTY performance and full latency gates. A shared debug-cache oracle failure was review setup contamination; cleared local fingerprints and rerun TS gate passes. Review4dd4e2bd.
Author
Owner

Completed CS-R4 test refinement6e6d5f25: executes canvas-real-bench.ts actual mounting callback through installed TypeScript transpiler; no copied layout. Still fails host1240x680 versus408x164 slot at1280x720, native Chromium/production renderer, port4427. The twelve DOM slots use the existing mock server for this geometry probe; connection success is not its acceptance criterion. Real12-PTY measurement follows separately. Latest fresh head gate has passed vt_credit so far.

Completed CS-R4 test refinement6e6d5f25: executes canvas-real-bench.ts actual mounting callback through installed TypeScript transpiler; no copied layout. Still fails host1240x680 versus408x164 slot at1280x720, native Chromium/production renderer, port4427. The twelve DOM slots use the existing mock server for this geometry probe; connection success is not its acceptance criterion. Real12-PTY measurement follows separately. Latest fresh head gate has passed vt_credit so far.
Author
Owner

Completed fresh exact-head scripts/verify fast: exit0 on badbfc9064. Rust235 passed/25 ignored; fmt/nativefmt/clippy/deny pass. Static x86_64=15,985,424bytes and aarch64=13,439,056bytes, no PT_INTERP; tracer/protocol/compiler/transfer rows pass. Prior vt_credit failure is retained with passing dev tests; fresh head rerun passed, cause not established. Review6e6d5f25. Real12-PTY/30s measurements now starting; full latency gate follows sequentially. Final comment will include fast output verbatim.

Completed fresh exact-head scripts/verify fast: exit0 on badbfc90642c4a99bbb6d78b129a2146bbba18b6. Rust235 passed/25 ignored; fmt/nativefmt/clippy/deny pass. Static x86_64=15,985,424bytes and aarch64=13,439,056bytes, no PT_INTERP; tracer/protocol/compiler/transfer rows pass. Prior vt_credit failure is retained with passing dev tests; fresh head rerun passed, cause not established. Review6e6d5f25. Real12-PTY/30s measurements now starting; full latency gate follows sequentially. Final comment will include fast output verbatim.
Author
Owner

Completed scale acceptance guard d9e560c8 (opting in CANVAS_REVIEW_PERF=1, exact badbfc90 fixture, port4431, CPUWeight10000). Twelve distinct real PTYs attach and paint; all four30s phase pairs were rejected for changed socket epochs/attachment state. Zero accepted pairs; rejected TaskDuration ranges10live205.245-344.764ms/s, marker51.274-126.766ms/s, loads22.40-39.65. These are diagnostic rows, not valid budget comparisons. Guard fails expected fixture exit0/actual1; rawJSONL/stderr retained for final evidence. No new attributed implementation defect added to counts; existing CS-R4 invalid layout remains a P1 blocker. Read-only native memory snapshot arrived after teardown and is not valid12-PTY evidence. Full latency gate is running sequentially.

Completed scale acceptance guard d9e560c8 (opting in CANVAS_REVIEW_PERF=1, exact badbfc90 fixture, port4431, CPUWeight10000). Twelve distinct real PTYs attach and paint; all four30s phase pairs were rejected for changed socket epochs/attachment state. Zero accepted pairs; rejected TaskDuration ranges10live205.245-344.764ms/s, marker51.274-126.766ms/s, loads22.40-39.65. These are diagnostic rows, not valid budget comparisons. Guard fails expected fixture exit0/actual1; rawJSONL/stderr retained for final evidence. No new attributed implementation defect added to counts; existing CS-R4 invalid layout remains a P1 blocker. Read-only native memory snapshot arrived after teardown and is not valid12-PTY evidence. Full latency gate is running sequentially.
Author
Owner

Completed CS-R3 stronger regression48120d38: dispose the connected primary terminal with real worker buffering at2,097,152bytes. Failure reports retained=true and rendererReleased=false plus Error: canvas send queue is full; native disposal is observed directly, not inferred. Existing getter descriptor restored before pressure; disposal probe forwards actual method; resources cleaned after observation. Port4449/RTT300±30; review TypeScript check passes. Full exact-head latency gate finished exit1: native7 failed metrics; browser87 passed/9 failed/26 skipped25.8min. Alternating50MB prediction throughput passes −1.96% versus−5% budget. Final evidence commit and verdict follow.

Completed CS-R3 stronger regression48120d38: dispose the connected primary terminal with real worker buffering at2,097,152bytes. Failure reports retained=true and rendererReleased=false plus Error: canvas send queue is full; native disposal is observed directly, not inferred. Existing getter descriptor restored before pressure; disposal probe forwards actual method; resources cleaned after observation. Port4449/RTT300±30; review TypeScript check passes. Full exact-head latency gate finished exit1: native7 failed metrics; browser87 passed/9 failed/26 skipped25.8min. Alternating50MB prediction throughput passes −1.96% versus−5% budget. Final evidence commit and verdict follow.
Author
Owner

Verdict: merge after fixes. Confirmed open counts P0=0/P1=1/P2=2/P3=0.
Target badbfc9064; merge base f27b3fe7a4. Local review-canvas-streams head 9a354a9cc0.

CS-R3/P2: connected primary disposal at2,097,152 pending bytes throws, retains writer and skips renderer disposal (48120d38).
CS-R4/P1: actual benchmark mounting puts1240x680 host in408x164 slot, invalidating independent visible-window layout (6e6d5f25).
CS-R5/P2: real surviving-shim capability refusal retries[1,1,1] instead of stopping; normal Rust regression fails (d729bec5).
Original CS-R1/CS-R2 resolved; independent repair cohort16/16 passes.

Exact-head scripts/verify fast exit0 (235 Rust passed/25 ignored; static15,985,424 and13,439,056bytes; tracer/protocol gates pass). Review TypeScript and Rust formatting pass. Four real12-PTY/30s scale pairs rejected, zero accepted; geometry also remains red. Full latency exit1: seven native metrics failed, browser87 passed/9 failed/26 skipped25.8min. PTY p99 baseline593.60ms/same-session flood1,026.35ms versus334ms; growth432.75ms versus16.67ms at load40.50/34.37/32.30. Paired50MB prediction throughput passes−1.96% versus−5%. No controlled base attribution is claimed. Fuzz15,545,307 executions/three31s runs without crashes, sanitizer=none; ASan linkage incomplete.

Evidence: docs/verification/review-canvas-streams/README.md, full logs and production screenshots. Each confirmed finding has a committed failing regression. Native memory at expected count and physical iPhone behavior remain unverified. No implementation fix. Issue remains open.

scripts/verify fast on exact badbfc90 — complete output, verbatim:

METRIC name=network_rtt_selftest configured_rtt_ms=300 jitter_ms=30 loss=unsupported transport=tcp-stream n=3 p50_ms=300.97 p99_ms=346.93 result=PASS

==> fmt

==> VT native fmt

==> clippy
   Compiling infraternal-shim v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-shim)
    Checking infraternal-protocol v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-protocol)
   Compiling infraternal-server v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-server)
    Checking infraternal-agent v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-agent)
    Checking infraternal-mesh v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-mesh)
    Checking infraternal v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal)
    Checking infraternal-fuzz v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/fuzz)
    Checking infraternal-plugin-ssh v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/plugins/ssh)
    Checking infraternal-plugin-api v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-plugin-api)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 27.76s

==> test
   Compiling infraternal-shim v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-shim)
   Compiling infraternal-server v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-server)
   Compiling infraternal-agent v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-agent)
   Compiling infraternal-mesh v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-mesh)
   Compiling infraternal-plugin-ssh v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/plugins/ssh)
   Compiling infraternal-plugin-api v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-plugin-api)
   Compiling infraternal v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal)
   Compiling infraternal-protocol v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-protocol)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 38s
     Running unittests src/main.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal-2c06fb1e08b40f8f)

running 2 tests
test install::tests::dry_run_prints_a_process_surviving_user_unit ... ok
test setup_token_tests::setup_token_command_reads_only_the_expected_socket_response ... ok

test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running tests/agent_daemon.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/agent_daemon-e5ef77258cbf600a)

running 1 test
test real_binary_preserves_input_and_output_across_24_abrupt_stops ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 44.60s

     Running tests/agent_queues.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/agent_queues-57c449079990d909)

running 1 test
test saturated_terminal_queues_preserve_every_byte_and_daemon_liveness ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 36.97s

     Running tests/agent_review.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/agent_review-f08a739d87080819)

running 6 tests
test initial_attach_requires_explicit_credit_before_replay ... ok
test last_typist_selects_its_own_real_pty_dimensions ... ok
test repeated_tiny_credit_pauses_preserve_shell_progress ... ok
test retained_unwritten_input_survives_interleaved_ack_restart ... ok
test stalled_terminal_never_delays_control_or_sibling_dispatch ... ok
test two_writers_keep_independent_ack_and_exact_input_after_restart ... ok

test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 33.26s

     Running tests/agent_sessions.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/agent_sessions-dac341911fe4ca5b)

running 1 test
test detached_shim_is_discovered_and_replays_from_the_last_observed_offset ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s

     Running tests/canvas_streams.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/canvas_streams-e02e1308f94c61a6)

running 1 test
test twelve_real_streams_restore_independent_modes_and_cursors ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.95s

     Running tests/idle_canary.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/idle_canary-9930563708e7154e)

running 1 test
test one_hertz_wakeup_is_detected_past_the_legacy_half_second_window ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.19s

     Running tests/shim.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/shim-282e2bf3b629b4b1)

running 7 tests
test attached_backpressure_and_detached_progress ... ok
test disallowed_signal_only_disconnects_peer ... ok
test double_fork_survives_parent_death ... ok
test real_shell_reconnect_resize_and_retained_exit ... ok
test replacement_connection_and_malformed_limit ... ok
test ring_wrap_snapshot_repaints_real_vim ... ok
test user_scope_survives_parent_unit_stop ... active
ok

test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.88s

     Running tests/shim_visibility.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/shim_visibility-deae2c15f2672d7e)

running 1 test
test hidden_modes_coalesce_and_live_resumes_at_snapshot_boundary ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.50s

     Running tests/vt_credit.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/vt_credit-bb3623465253747d)

running 1 test
test unaffordable_repaints_park_until_sufficient_credit ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 17.80s

     Running tests/vt_reconnect.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/vt_reconnect-d5a72f7c3162f374)

running 1 test
test snapshot_limits_never_close_live_reconnect ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 17.16s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_agent-396a49ee47a2dca8)

running 17 tests
test relay::tests::attachment_has_no_implicit_output_or_snapshot_credit ... ok
test relay::tests::expired_credit_resumes_retained_bytes_at_the_same_cursor ... ok
test relay::tests::input_overlap_gap_and_restart_from_confirmed_offset ... ok
test relay::tests::output_partial_credit_and_dedup ... ok
test relay::tests::output_payload_move_measurement ... ignored, release ownership versus payload-copy measurement
test relay::tests::overflowing_ranges_never_mutate_cursors ... ok
test relay::tests::positive_insufficient_credit_arms_a_one_shot_deadline ... ok
test relay::tests::previews_spend_credit_without_changing_live_checkpoint ... ok
test relay::tests::returned_credit_cancels_starvation_and_state_has_no_payload_buffer ... ok
test relay::tests::starvation_is_one_shot_and_snapshot_length_does_not_advance_sequence ... ok
test sessions::tests::borrowed_reader_payload_uses_reusable_cancel_safe_storage ... ok
test sessions::tests::cancelled_fragmented_shim_read_retains_header_and_body_progress ... ok
test sessions::tests::post_listen_chmod_wakes_a_connection_refused_at_bind ... ok
test sessions::tests::reader_borrow_measurement ... ignored, release borrowed versus owned asynchronous receive measurement
test sessions::tests::refused_socket_is_removed_but_insecure_directory_is_rejected ... ok
test sessions::tests::sequenced_attach_intersects_caps_and_legacy_attach_stays_zero ... ok
test sessions::tests::symlink_state_cannot_redirect_private_runtime_storage ... ok

test result: ok. 15 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.06s

     Running tests/transport.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/transport-ef669c6e5837f1df)

running 2 tests
test fragmented_headers_coalesced_frames_and_reusable_transmit ... ok
test oversized_header_and_truncated_frame_are_rejected ... ok

test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_mesh-3f967587718407e9)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running tests/default_arrow.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/default_arrow-312553ba19630584)

running 1 test
test omitted_arrow_ports_default_to_all_services ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running tests/properties.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/properties-78f35bbe1b57dcd5)

running 14 tests
test addresses_are_unique_stable_and_not_recycled ... ok
test arrow_replacement_is_atomic_and_unrelated_nodes_keep_their_versions ... ok
test checkpoint_after_suffix_change_restores_without_reallocating_addresses ... ok
test directional_grants_union_and_minimal_updates ... ok
test exhausted_versions_reject_mutations_without_changing_state ... ok
test join_to_same_tag_grants_both_initiation_directions ... ok
test names_versions_and_backend_status ... ok
test overlaps_are_reported_without_silent_range_changes ... ok
test private_material_never_enters_debug_or_coordination_serialization ... ok
test protocol_port_unions_never_grant_an_unlisted_service ... ok
test public_checkpoint_preserves_addresses_rules_versions_and_overlap ... ok
test rotation_waits_for_overlap_and_delivery_and_removal_drops_every_key ... ok
test seeded_random_sequences_equal_full_compile_and_deny_without_grants ... ok
test server_rotation_has_continuous_keys_for_every_node_during_delivery ... ok

test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.55s

     Running tests/rotation_time.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/rotation_time-a58dd287253d611d)

running 1 test
test unrepresentable_rotation_overlap_rejects_before_mutation ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_plugin_api-4480fd7032f11ca2)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_plugin_ssh-22a9a893799c7f17)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_protocol-67b9a310ef49abf9)

running 8 tests
test stream_tests::all_short_frame_splits_match_direct_decoding ... ok
test stream_tests::maximum_sized_fragmented_frame_is_not_rejected ... ok
test stream_tests::split_mux_header_preserves_trailing_close ... ok
test tests::golden_vectors_encode_and_decode_every_contract_frame ... ok
test tests::mux_round_trip_and_incremental_decoders_preserve_frame_order ... ok
test tests::oversized_encode_keeps_the_reusable_output_unchanged ... ok
test tests::rejects_oversized_noncanonical_and_malformed_frames_before_buffering_body ... ok
test tests::visibility_frames_refuse_unknown_modes_ranges_and_flags ... ok

test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_server-7b0058424c5209fd)

running 114 tests
test auth::crypto::verifier_tests::browser_secret_hashing_is_canonical_and_bounded ... ok
test auth::crypto::verifier_tests::recovery_capacity_denial_is_not_a_legacy_credential_signal ... ok
test auth::http::hostname_tests::authenticated_session_response_includes_system_hostname ... ok
test auth::http::tests::admission_partitions_reset_without_trusting_forwarded_headers ... ok
test auth::tests::aaguid_migration_preserves_legacy_credentials_and_sessions ... ok
test auth::tests::aaguid_projection_rejects_malformed_cbor_corpus ... ok
test auth::tests::account_identity_migration_backfills_legacy_users ... ok
test auth::tests::account_identity_schema_has_unique_usernames_and_display_names ... ok
test auth::tests::audit_ceremony_browser_binding ... ok
test auth::tests::audit_logout_survives_admission_exhaustion ... ok
test auth::tests::audit_no_public_credential_listing ... ok
test auth::tests::audit_recovery_after_page_discard_can_resume_at_original_deadline ... ok
test auth::tests::audit_recovery_pending_is_visible_to_signed_in_device ... ok
test auth::tests::audit_recovery_session_expiring_during_verification_keeps_delay ... ok
test auth::tests::authenticated_prf_metadata_preserves_legacy_envelopes ... ok
test auth::tests::ceremony_prf_wraps_and_optional_second_passkey ... ok
test auth::tests::concurrent_owner_and_optional_passkey_enrollment_fail_closed ... ok
test auth::tests::discoverable_latency_at_pending_capacity ... ignored, run --release --ignored --nocapture without concurrent builds
test auth::tests::discoverable_login_handle_credential_counter_and_replay ... ok
test auth::tests::enrollment_prf_input_matches_discoverable_login ... ok
test auth::tests::http_csrf_cookie_flags_body_limit_and_latency_evidence ... ok
test auth::tests::pending_unlock_expires_without_terminal_authority ... ok
test auth::tests::provider_labels_cover_the_cited_registry_without_guessing ... ok
test auth::tests::provider_session_latency_at_50_devices ... ignored, local auth session scale measurement; run without concurrent builds
test auth::tests::public_status_and_discoverable_http_login ... ok
test auth::tests::recovery_audit_commits_once_with_start_cancel_and_complete ... ok
test auth::tests::recovery_delay_cancel_and_replacement_revokes_every_capability ... ok
test auth::tests::recovery_expiry_revocation_and_cross_user_isolation ... ok
test auth::tests::recovery_http_live_same_account_is_immediate ... ok
test auth::tests::recovery_http_other_expired_pending_and_missing_sessions_wait ... ok
test auth::tests::recovery_live_session_cannot_accelerate_an_active_delayed_request ... ok
test auth::tests::recovery_live_session_revoked_during_verification_cannot_waive_delay ... ok
test auth::tests::recovery_session_delay_latency_at_capacity ... ignored, release-only recovery measurement at 50 live sessions; run without concurrent compilation
test auth::tests::recovery_unknown_identity_pays_the_same_database_and_verifier_work ... ok
test auth::tests::recovery_username_identity_is_additive_and_ambiguous_forms_fail ... ok
test auth::tests::recovery_verifier_latency_at_capacity ... ignored, release-only v2 diagnostic at 50 live session rows; record host load separately
test auth::tests::redacted_unknown_and_failed_registrations_do_not_claim_a_provider ... ok
test auth::tests::registration_aaguid_survives_none_attestation_and_binds_session_provider ... ok
test auth::tests::rejected_origin_uv_challenge_signature_prf_and_expired_ceremonies ... ok
test auth::tests::review3_tests::review3_backend_reply_has_a_deadline ... ok
test auth::tests::review3_tests::review3_busy_expiry ... ok
test auth::tests::review3_tests::review3_busy_logout ... ok
test auth::tests::review3_tests::review3_busy_recovery ... ok
test auth::tests::review3_tests::review3_completion_and_cleanup_are_transaction_bound ... ok
test auth::tests::review3_tests::review3_expired_handshake_must_not_welcome ... ok
test auth::tests::review3_tests::review3_identified_privacy_timing_and_binding_replays ... ok
test auth::tests::review3_tests::review3_pending_routes_and_idle_expiry_recovery ... ok
test auth::tests::review3_tests::review3_revoked_handshake_must_not_welcome ... ok
test auth::tests::review3_tests::review3_revoked_resume_must_not_welcome ... ok
test auth::tests::review3_tests::review3_unwrap_cannot_be_skipped ... ok
test auth::tests::review3_tests::review3_waiting_handshake_loses_authority ... ok
test auth::tests::review3_tests::review4_open_reply_and_revocation_preserve_authority ... ok
test auth::tests::review3_tests::review4_slow_open_at_user_capacity ... ignored, release-only connect scale measurement; run without concurrent builds
test auth::tests::review_invalid_device_polling_exhausts_browser_budget ... ok
test auth::tests::review_old_words_race_rotation ... ok
test auth::tests::reviewer_tests::reviewer_disk_cancel_complete_races ... ok
test auth::tests::reviewer_tests::reviewer_disk_restart_and_concurrent_resume ... ok
test auth::tests::reviewer_tests::reviewer_http_denials_and_recovery_admission ... ok
test auth::tests::reviewer_tests::reviewer_http_expired_capability_cannot_complete_after_writer_wait ... ok
test auth::tests::reviewer_tests::reviewer_http_expired_ceremony_cannot_complete_after_writer_wait ... ok
test auth::tests::reviewer_tests::reviewer_server_clock_rollback_retains_deadline_and_reports_more_than_day ... ok
test auth::tests::rotation_tests::recovery_phrase_routes_are_removed_and_words_fail_closed ... ok
test auth::tests::rotation_tests::recovery_rotation_cannot_follow_a_cookie_account_switch ... ok
test auth::tests::rotation_tests::recovery_rotation_denies_pending_expired_and_stale_sessions ... ok
test auth::tests::rotation_tests::recovery_rotation_requires_session_and_replaces_legacy_envelope ... ok
test auth::tests::rotation_tests::reviewer_concurrent_signed_in_rotations_commit_once ... ok
test auth::tests::server_setup_terminal_echo_and_resume_preserve_offsets_once ... ok
test auth::tests::sessions_slide_but_fresh_tap_does_not_and_device_keys_are_scoped ... ok
test auth::tests::setup_check_is_non_consuming_and_closes_after_owner_creation ... ok
test auth::tests::setup_identity_validation_and_uniqueness ... ok
test auth::tests::setup_restart_rotation_expiry_and_parallel_redemption ... ok
test auth::tests::setup_start_accepts_username_and_display_name ... ok
test auth::tests::socket_tests::authenticated_idle_socket_survives_the_former_read_timeout ... ok
test auth::tests::socket_tests::clean_control_close_is_not_an_internal_error ... ok
test auth::tests::socket_tests::expired_handshake_releases_user_permits ... ok
test auth::tests::socket_tests::fragmented_wire_frame_has_a_completion_deadline ... ok
test auth::tests::socket_tests::half_open_sockets_obey_user_limit ... ok
test auth::tests::socket_tests::incomplete_rfc_message_still_loses_authority_on_revocation ... ok
test auth::tests::socket_tests::recovery_subscription_updates_every_signed_in_socket ... ok
test auth::tests::socket_tests::revoked_idle_socket_loses_all_authority ... ok
test auth::tests::socket_tests::socket_authority_latency_at_user_capacity ... ignored, release-only measurement without concurrent compilation
test auth::tests::stale_counters_recovery_cancellation_and_wrap_tampering ... ok
test canvas_fixture::canvas_browser_fixture ... ignored, real production-browser fixture; explicit port and private scratch required
test embedded::regressions::credited_bulk_output_survives_forwarder_io_pause ... ok
test embedded::regressions::credited_output_queue_at_stream_capacity ... ignored, debug actor memory/scheduling measurement; run without concurrent builds
test embedded::regressions::full_output_queue_must_not_block_shared_actor ... ok
test embedded::regressions::healthy_receiver_survives_ready_native_output_burst ... ok
test embedded::regressions::healthy_streams_progress_at_user_attachment_capacity ... ok
test embedded::regressions::output_and_snapshot_spend_remaining_restart_credit ... ok
test embedded::regressions::real_agent_canonical_uuid_result_is_accepted ... ok
test embedded::regressions::real_agent_open_uses_uid_and_character_dimensions ... ok
test embedded::regressions::reattach_must_restore_output_credit ... ok
test embedded::regressions::recovery_event_then_snapshot_keeps_embedded_connection_live ... ok
test embedded::regressions::recovery_notices_preserve_order_credit_and_session_isolation ... ok
test embedded::regressions::stream_close_must_not_restart_all_sessions ... ok
test embedded::regressions::uncredited_output_or_repaint_is_rejected_before_queueing ... ok
test embedded::regressions::visibility_interrupted_live_switch_restores_snapshot_before_credit ... ok
test embedded::regressions::visibility_preview_credit_preserves_live_cursor_and_marker_uses_no_credit ... ok
test embedded::regressions::visibility_reader_requires_negotiation_and_terminal_stream_identity ... ok
test embedded::regressions::visibility_restart_restores_mode_before_byte_credit ... ok
test runtime::reviewer_admission::reviewer_recovery_source_limit_covers_all_routes_without_forwarding_bypass ... ok
test runtime::tests::proxy_mode_requires_an_explicit_peer_allowlist ... ok
test runtime::tests::proxy_networks_match_only_their_address_family_and_prefix ... ok
test runtime::tests::restart_serves_fresh_setup_token_and_completes_owner_enrollment ... ok
test runtime::tests::router_migrates_private_storage_and_serves_health ... ok
test runtime::tests::setup_socket_cleanup_preserves_symlinks_and_regular_files ... ok
test runtime::tests::setup_token_socket_is_private_and_requires_explicit_request ... ok
test runtime::tests::startup_with_owner_unlinks_stale_setup_token_socket ... ok
test web_assets::tests::encodings_and_identity_have_correct_headers_and_sizes ... ok
test web_assets::tests::spa_and_mutable_assets_revalidate_and_missing_brotli_uses_gzip ... ok
test websocket::recovery_notification_bench::recovery_notification_state_at_socket_capacity ... ignored, notification state sizing diagnostic, not allocator-inclusive RSS certification
test websocket::writer_tests::second_device_does_not_inherit_first_device_input_ack ... ok
test websocket::writer_tests::writer_admission_at_user_capacity ... ignored, release-only scale measurement; run without concurrent builds
test websocket::writer_tests::writer_ownership_capacity_unsigned_offsets_and_identity_reuse ... ok

test result: ok. 104 passed; 0 failed; 10 ignored; 0 measured; 0 filtered out; finished in 212.08s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_shim-67ffc9c8d51fcf5c)

running 77 tests
test frame::checks::approximate_snapshot_codec_is_bounded_and_canonical ... ok
test frame::checks::borrowed_and_owned_decoders_agree_at_every_fragment_boundary ... ok
test frame::checks::codec_reuse_measurement ... ignored, release codec and allocation-path measurement
test frame::checks::golden::every_frozen_message ... ok
test frame::checks::golden::exact_maximum_and_coalesced_frames ... ok
test frame::checks::tests::golden_and_fragmented ... ok
test frame::checks::tests::invalid_lengths_types_and_utf8 ... ok
test frame::checks::visibility_frames_are_canonical_bounded_and_fragmentable ... ok
test ring::checks::tests::wrap_and_exact_offsets ... ok
test session::inputs::tests::identity_cap_preserves_all_existing_cursors ... ok
test session::inputs::tests::partial_writes_credit_only_the_owner_and_replay_trims_per_writer ... ok
test session::measurements::budgets::input_to_pty_write ... ignored, real-PTY performance measurement; set ZDOTDIR to tests/profile
test session::measurements::poll_storage_measurement ... ignored, release poll-storage allocation measurement
test session::measurements::visibility_state_scale_measurement ... ok
test session::resize_checks::native_resize_refusal_preserves_peer_and_pty ... ok
test session::resize_checks::resize_refusal_session_probe ... ignored, isolated session probe invoked by its parent with a controlled shell profile
test session::sequenced_checks::coalesced_ack_never_overwrites_a_partial_output_and_cursors_survive_peer_loss ... ok
test session::sequenced_checks::new_frames_roundtrip_and_refuse_noncanonical_payloads ... ok
test session::sequenced_checks::reusable_encoder_retains_capacity_and_refuses_growth_before_mutation ... ok
test session::sequenced_checks::trim_duplicates_gaps_overflow_and_capacity_are_transactional ... ok
test session::sequenced_checks::writer_selection_has_a_frozen_little_endian_layout ... ok
test terminal::checks::approximate_repaint_is_bounded_clips_at_complete_cells_and_preserves_source ... ok
test terminal::checks::approximate_repaint_keeps_complete_pending_syntax_or_omits_it_whole ... ok
test terminal::checks::tests::alternate_variants_and_nested_switches_repaint ... ok
test terminal::checks::tests::byte_budget_prunes_history_and_resize_remains_repaintable ... ok
test terminal::checks::tests::fixtures_and_continuations_repaint ... ok
test terminal::checks::tests::implicit_hyperlinks_retain_groups_across_rows_and_continuation ... ok
test terminal::checks::tests::long_unfinished_hyperlink_and_control_strings_continue ... ok
test terminal::checks::tests::margins_tabs_charsets_and_modes_continue ... ok
test terminal::checks::tests::partial_csi_and_utf8_continue ... ok
test terminal::checks::tests::pending_wrap_and_saved_wrap_continue_with_wide_cells ... ok
test terminal::checks::tests::retained_alternate_saved_cursor_and_keyboard_stack_continue ... ok
test terminal::checks::tests::saved_origin_survives_changed_margins ... ok
test terminal::checks::tests::unfinished_sequence_over_frame_limit_fails_without_losing_runtime_state ... ok
test terminal::checks::thumbnail_omits_unfinished_syntax_and_is_independently_repaintable ... ok
test terminal::checks::thumbnail_serialization_scale_measurement ... ignored, release thumbnail allocation/serialization scale measurement
test terminal::fidelity::fidelity_charset_mapped_wide_space_is_explicitly_rejected ... ok
test terminal::fidelity::fidelity_cursor ... ok
test terminal::fidelity::fidelity_diagnostic_fixture ... ignored, diagnostic replay of an explicitly selected fixture file
test terminal::fidelity::fidelity_edge ... ok
test terminal::fidelity::fidelity_extended_nightly ... ignored, nightly expanded differential corpus: 20,000 deterministic cases
test terminal::fidelity::fidelity_extended_smoke ... ok
test terminal::fidelity::fidelity_f1_rep ... ok
test terminal::fidelity::fidelity_fresh_c_redraw_default_is_explicitly_rejected ... ok
test terminal::fidelity::fidelity_handwritten ... ok
test terminal::fidelity::fidelity_inherited_protection_off_mode_is_explicitly_rejected ... ok
test terminal::fidelity::fidelity_iso_protection_does_not_keep_rep_scratch ... ok
test terminal::fidelity::fidelity_iso_protection_erase ... ok
test terminal::fidelity::fidelity_mouse_effective_fields_follow_order_independently_of_booleans ... ok
test terminal::fidelity::fidelity_oracle_detects_hidden_state ... ok
test terminal::fidelity::fidelity_oracle_observes_archived_cells_with_equal_active_screens ... ok
test terminal::fidelity::fidelity_orphaned_spacer_head ... ok
test terminal::fidelity::fidelity_prompt_resize_requires_explicit_rejection ... ok
test terminal::fidelity::fidelity_recorded_corpus ... ok
test terminal::fidelity::fidelity_rejects_unrepresentable_rep_without_mutating_source ... ok
test terminal::fidelity::fidelity_saved_cursor_over_changed_edge ... ok
test terminal::fidelity::fidelity_saved_modes_future_restore ... ok
test terminal::fidelity::fidelity_screen_entry_consumes_inherited_shift_before_saving ... ok
test terminal::fidelity::fidelity_seeded_nightly ... ignored, nightly differential corpus: 20,000 deterministic cases
test terminal::fidelity::fidelity_seeded_smoke ... ok
test terminal::fidelity::fidelity_semantic_validation_matches_exported_history_extent ... ok
test terminal::fidelity::fidelity_single_shift_survives_rep_seed ... ok
test terminal::fidelity::fidelity_snapshot_history_tail_contains_no_padding_rows ... ok
test terminal::fidelity::fidelity_snapshot_resets_stale_viewer_color_overrides ... ok
test terminal::fidelity::fidelity_spacer_head_attributes ... ok
test terminal::fidelity::fidelity_variation_tail_attributes ... ok
test terminal::fidelity::fidelity_variation_wrap_attributes ... ok
test terminal::fidelity::fresh_captures::fidelity_fresh_real_program_captures ... ignored, manual fresh capture oracle; set VT_CAPTURE_DIR after real program capture
test terminal::measurements::budgets::snapshot_200x60 ... ignored, performance measurement; run release on the perf host
test terminal::measurements::memory::measured_terminal_rss ... ignored, RSS measurement; run this filter alone in a fresh release process
test terminal::measurements::throughput::measured_parser ... ignored, VT observer and history throughput measurement
test terminal::recovery_measurements::measured_full_ring_reconstruction ... ignored, release reconstruction measurement; old healthy handles permit repeated cleanup
test terminal::resize_recovery::absent_ring_keeps_last_good_size_and_later_output_usable ... ok
test terminal::resize_recovery::complete_ring_restores_screens_mouse_and_unfinished_syntax ... ok
test terminal::resize_recovery::earlier_geometry_changes_require_approximation_even_with_origin_coverage ... ok
test terminal::resize_recovery::ring_gap_requires_clean_approximate_recovery ... ok
test terminal_native::allocation::resize_allocation_refusal_retires_native_handle ... ok

test result: ok. 64 passed; 0 failed; 13 ignored; 0 measured; 0 filtered out; finished in 98.79s

     Running tests/detach.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/detach-c502cd554fb112ce)

running 1 test
test closed_standard_descriptors_become_dev_null ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.39s

     Running tests/mouse.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/mouse-523bfdef43cc46cb)

running 1 test
test faithful_snapshot_preserves_public_mouse_encoder_reports ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.48s

   Doc-tests infraternal_agent

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_mesh

running 1 test
test crates/infraternal-mesh/src/model.rs - model::LocalPrivateKey (line 20) - compile fail ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s

   Doc-tests infraternal_plugin_api

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_plugin_ssh

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_protocol

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_server

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_shim

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s


==> cargo-deny
warning[duplicate]: found 2 duplicate entries for crate 'base64'
   ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:24:1
   │  
24 │ ╭ base64 0.21.7 registry+https://github.com/rust-lang/crates.io-index
25 │ │ base64 0.22.1 registry+https://github.com/rust-lang/crates.io-index
   │ ╰───────────────────────────────────────────────────────────────────┘ lock entries
   │  
   ├ base64 v0.21.7
     ├── base64urlsafedata v0.5.5
     │   ├── webauthn-attestation-ca v0.5.5
     │   │   └── webauthn-rs-core v0.5.5
     │   │       └── webauthn-rs v0.5.5
     │   │           └── infraternal-server v0.1.0
     │   │               └── infraternal v0.1.0
     │   ├── webauthn-rs v0.5.5 (*)
     │   ├── webauthn-rs-core v0.5.5 (*)
     │   └── webauthn-rs-proto v0.5.5
     │       └── webauthn-rs-core v0.5.5 (*)
     ├── webauthn-rs-core v0.5.5 (*)
     └── webauthn-rs-proto v0.5.5 (*)
   ├ base64 v0.22.1
     ├── axum v0.8.9
     │   └── infraternal-server v0.1.0
     │       └── infraternal v0.1.0
     ├── infraternal-server v0.1.0 (*)
     └── sqlx-core v0.8.6
         ├── sqlx v0.8.6
         │   ├── infraternal v0.1.0 (*)
         │   └── infraternal-server v0.1.0 (*)
         ├── sqlx-macros v0.8.6
         │   └── sqlx v0.8.6 (*)
         ├── sqlx-macros-core v0.8.6
         │   └── sqlx-macros v0.8.6 (*)
         └── sqlx-sqlite v0.8.6
             ├── sqlx v0.8.6 (*)
             └── sqlx-macros-core v0.8.6 (*)

warning[duplicate]: found 3 duplicate entries for crate 'getrandom'
   ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:88:1
   │  
88 │ ╭ getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index
89 │ │ getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index
90 │ │ getrandom 0.4.3 registry+https://github.com/rust-lang/crates.io-index
   │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries
   │  
   ├ getrandom v0.2.17
     └── rand_core v0.6.4
         ├── bip39 v2.2.2
         │   └── infraternal-server v0.1.0
         │       └── infraternal v0.1.0
         ├── crypto-common v0.1.7
         │   ├── aead v0.5.2
         │   │   └── aes-gcm v0.10.3
         │   │       └── (dev) infraternal-server v0.1.0 (*)
         │   ├── cipher v0.4.4
         │   │   ├── aes v0.8.4
         │   │   │   └── aes-gcm v0.10.3 (*)
         │   │   ├── aes-gcm v0.10.3 (*)
         │   │   └── ctr v0.9.2
         │   │       └── aes-gcm v0.10.3 (*)
         │   ├── digest v0.10.7
         │   │   ├── blake2 v0.10.6
         │   │   │   └── argon2 v0.5.3
         │   │   │       └── infraternal-server v0.1.0 (*)
         │   │   ├── hmac v0.12.1
         │   │   │   └── hkdf v0.12.4
         │   │   │       └── (dev) infraternal-server v0.1.0 (*)
         │   │   ├── sha1 v0.10.7
         │   │   │   ├── axum v0.8.9
         │   │   │   │   └── infraternal-server v0.1.0 (*)
         │   │   │   └── tungstenite v0.29.0
         │   │   │       └── tokio-tungstenite v0.29.0
         │   │   │           ├── axum v0.8.9 (*)
         │   │   │           └── (dev) infraternal-server v0.1.0 (*)
         │   │   └── sha2 v0.10.9
         │   │       ├── infraternal-server v0.1.0 (*)
         │   │       ├── sqlx-core v0.8.6
         │   │       │   ├── sqlx v0.8.6
         │   │       │   │   ├── infraternal v0.1.0 (*)
         │   │       │   │   └── infraternal-server v0.1.0 (*)
         │   │       │   ├── sqlx-macros v0.8.6
         │   │       │   │   └── sqlx v0.8.6 (*)
         │   │       │   ├── sqlx-macros-core v0.8.6
         │   │       │   │   └── sqlx-macros v0.8.6 (*)
         │   │       │   └── sqlx-sqlite v0.8.6
         │   │       │       ├── sqlx v0.8.6 (*)
         │   │       │       └── sqlx-macros-core v0.8.6 (*)
         │   │       └── sqlx-macros-core v0.8.6 (*)
         │   └── universal-hash v0.5.1
         │       └── polyval v0.6.2
         │           └── ghash v0.5.1
         │               └── aes-gcm v0.10.3 (*)
         ├── password-hash v0.5.0
         │   └── argon2 v0.5.3 (*)
         ├── rand v0.8.8
         │   └── bip39 v2.2.2 (*)
         └── rand_chacha v0.3.1
             └── rand v0.8.8 (*)
   ├ getrandom v0.3.4
     └── rand_core v0.9.5
         ├── rand v0.9.5
         │   ├── infraternal-server v0.1.0
         │   │   └── infraternal v0.1.0
         │   ├── tungstenite v0.29.0
         │   │   └── tokio-tungstenite v0.29.0
         │   │       ├── axum v0.8.9
         │   │       │   └── infraternal-server v0.1.0 (*)
         │   │       └── (dev) infraternal-server v0.1.0 (*)
         │   └── webauthn-rs-core v0.5.5
         │       └── webauthn-rs v0.5.5
         │           └── infraternal-server v0.1.0 (*)
         └── rand_chacha v0.9.0
             ├── rand v0.9.5 (*)
             └── webauthn-rs-core v0.5.5 (*)
   ├ getrandom v0.4.3
     ├── jobserver v0.1.35
     │   └── cc v1.6.0
     │       ├── (build) libfuzzer-sys v0.4.13
     │       │   └── infraternal-fuzz v0.1.0
     │       ├── (build) libsqlite3-sys v0.30.1
     │       │   └── sqlx-sqlite v0.8.6
     │       │       ├── sqlx v0.8.6
     │       │       │   ├── infraternal v0.1.0
     │       │       │   └── infraternal-server v0.1.0
     │       │       │       └── infraternal v0.1.0 (*)
     │       │       └── sqlx-macros-core v0.8.6
     │       │           └── sqlx-macros v0.8.6
     │       │               └── sqlx v0.8.6 (*)
     │       ├── openssl-src v300.6.1+3.6.3
     │       │   └── (build) openssl-sys v0.9.117
     │       │       ├── axum-server v0.8.0
     │       │       │   └── infraternal-server v0.1.0 (*)
     │       │       ├── openssl v0.10.81
     │       │       │   ├── axum-server v0.8.0 (*)
     │       │       │   ├── infraternal-server v0.1.0 (*)
     │       │       │   ├── tokio-openssl v0.6.5
     │       │       │   │   └── axum-server v0.8.0 (*)
     │       │       │   ├── webauthn-attestation-ca v0.5.5
     │       │       │   │   └── webauthn-rs-core v0.5.5
     │       │       │   │       └── webauthn-rs v0.5.5
     │       │       │   │           └── infraternal-server v0.1.0 (*)
     │       │       │   └── webauthn-rs-core v0.5.5 (*)
     │       │       ├── tokio-openssl v0.6.5 (*)
     │       │       ├── webauthn-attestation-ca v0.5.5 (*)
     │       │       └── webauthn-rs-core v0.5.5 (*)
     │       └── (build) openssl-sys v0.9.117 (*)
     └── uuid v1.27.0
         ├── infraternal-agent v0.1.0
         │   └── infraternal v0.1.0 (*)
         ├── infraternal-server v0.1.0 (*)
         ├── webauthn-attestation-ca v0.5.5 (*)
         ├── webauthn-rs v0.5.5 (*)
         └── webauthn-rs-core v0.5.5 (*)

warning[duplicate]: found 2 duplicate entries for crate 'hashbrown'
   ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:94:1
   │  
94 │ ╭ hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index
95 │ │ hashbrown 0.17.1 registry+https://github.com/rust-lang/crates.io-index
   │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries
   │  
   ├ hashbrown v0.15.5
     ├── hashlink v0.10.0
     │   └── sqlx-core v0.8.6
     │       ├── sqlx v0.8.6
     │       │   ├── infraternal v0.1.0
     │       │   └── infraternal-server v0.1.0
     │       │       └── infraternal v0.1.0 (*)
     │       ├── sqlx-macros v0.8.6
     │       │   └── sqlx v0.8.6 (*)
     │       ├── sqlx-macros-core v0.8.6
     │       │   └── sqlx-macros v0.8.6 (*)
     │       └── sqlx-sqlite v0.8.6
     │           ├── sqlx v0.8.6 (*)
     │           └── sqlx-macros-core v0.8.6 (*)
     └── sqlx-core v0.8.6 (*)
   ├ hashbrown v0.17.1
     └── indexmap v2.14.2
         ├── h2 v0.4.19
         │   └── hyper v1.11.1
         │       ├── axum v0.8.9
         │       │   └── infraternal-server v0.1.0
         │       │       └── infraternal v0.1.0
         │       ├── axum-server v0.8.0
         │       │   └── infraternal-server v0.1.0 (*)
         │       └── hyper-util v0.1.21
         │           ├── axum v0.8.9 (*)
         │           └── axum-server v0.8.0 (*)
         └── sqlx-core v0.8.6
             ├── sqlx v0.8.6
             │   ├── infraternal v0.1.0 (*)
             │   └── infraternal-server v0.1.0 (*)
             ├── sqlx-macros v0.8.6
             │   └── sqlx v0.8.6 (*)
             ├── sqlx-macros-core v0.8.6
             │   └── sqlx-macros v0.8.6 (*)
             └── sqlx-sqlite v0.8.6
                 ├── sqlx v0.8.6 (*)
                 └── sqlx-macros-core v0.8.6 (*)

warning[duplicate]: found 2 duplicate entries for crate 'r-efi'
    ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:183:1
    │  
183 │ ╭ r-efi 5.3.0 registry+https://github.com/rust-lang/crates.io-index
184 │ │ r-efi 6.0.0 registry+https://github.com/rust-lang/crates.io-index
    │ ╰─────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ r-efi v5.3.0
      └── getrandom v0.3.4
          └── rand_core v0.9.5
              ├── rand v0.9.5
              │   ├── infraternal-server v0.1.0
              │   │   └── infraternal v0.1.0
              │   ├── tungstenite v0.29.0
              │   │   └── tokio-tungstenite v0.29.0
              │   │       ├── axum v0.8.9
              │   │       │   └── infraternal-server v0.1.0 (*)
              │   │       └── (dev) infraternal-server v0.1.0 (*)
              │   └── webauthn-rs-core v0.5.5
              │       └── webauthn-rs v0.5.5
              │           └── infraternal-server v0.1.0 (*)
              └── rand_chacha v0.9.0
                  ├── rand v0.9.5 (*)
                  └── webauthn-rs-core v0.5.5 (*)
    ├ r-efi v6.0.0
      └── getrandom v0.4.3
          ├── jobserver v0.1.35
          │   └── cc v1.6.0
          │       ├── (build) libfuzzer-sys v0.4.13
          │       │   └── infraternal-fuzz v0.1.0
          │       ├── (build) libsqlite3-sys v0.30.1
          │       │   └── sqlx-sqlite v0.8.6
          │       │       ├── sqlx v0.8.6
          │       │       │   ├── infraternal v0.1.0
          │       │       │   └── infraternal-server v0.1.0
          │       │       │       └── infraternal v0.1.0 (*)
          │       │       └── sqlx-macros-core v0.8.6
          │       │           └── sqlx-macros v0.8.6
          │       │               └── sqlx v0.8.6 (*)
          │       ├── openssl-src v300.6.1+3.6.3
          │       │   └── (build) openssl-sys v0.9.117
          │       │       ├── axum-server v0.8.0
          │       │       │   └── infraternal-server v0.1.0 (*)
          │       │       ├── openssl v0.10.81
          │       │       │   ├── axum-server v0.8.0 (*)
          │       │       │   ├── infraternal-server v0.1.0 (*)
          │       │       │   ├── tokio-openssl v0.6.5
          │       │       │   │   └── axum-server v0.8.0 (*)
          │       │       │   ├── webauthn-attestation-ca v0.5.5
          │       │       │   │   └── webauthn-rs-core v0.5.5
          │       │       │   │       └── webauthn-rs v0.5.5
          │       │       │   │           └── infraternal-server v0.1.0 (*)
          │       │       │   └── webauthn-rs-core v0.5.5 (*)
          │       │       ├── tokio-openssl v0.6.5 (*)
          │       │       ├── webauthn-attestation-ca v0.5.5 (*)
          │       │       └── webauthn-rs-core v0.5.5 (*)
          │       └── (build) openssl-sys v0.9.117 (*)
          └── uuid v1.27.0
              ├── infraternal-agent v0.1.0
              │   └── infraternal v0.1.0 (*)
              ├── infraternal-server v0.1.0 (*)
              ├── webauthn-attestation-ca v0.5.5 (*)
              ├── webauthn-rs v0.5.5 (*)
              └── webauthn-rs-core v0.5.5 (*)

warning[duplicate]: found 2 duplicate entries for crate 'rand'
    ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:185:1
    │  
185 │ ╭ rand 0.8.8 registry+https://github.com/rust-lang/crates.io-index
186 │ │ rand 0.9.5 registry+https://github.com/rust-lang/crates.io-index
    │ ╰────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ rand v0.8.8
      └── bip39 v2.2.2
          └── infraternal-server v0.1.0
              └── infraternal v0.1.0
    ├ rand v0.9.5
      ├── infraternal-server v0.1.0
      │   └── infraternal v0.1.0
      ├── tungstenite v0.29.0
      │   └── tokio-tungstenite v0.29.0
      │       ├── axum v0.8.9
      │       │   └── infraternal-server v0.1.0 (*)
      │       └── (dev) infraternal-server v0.1.0 (*)
      └── webauthn-rs-core v0.5.5
          └── webauthn-rs v0.5.5
              └── infraternal-server v0.1.0 (*)

warning[duplicate]: found 2 duplicate entries for crate 'rand_chacha'
    ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:187:1
    │  
187 │ ╭ rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index
188 │ │ rand_chacha 0.9.0 registry+https://github.com/rust-lang/crates.io-index
    │ ╰───────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ rand_chacha v0.3.1
      └── rand v0.8.8
          └── bip39 v2.2.2
              └── infraternal-server v0.1.0
                  └── infraternal v0.1.0
    ├ rand_chacha v0.9.0
      ├── rand v0.9.5
      │   ├── infraternal-server v0.1.0
      │   │   └── infraternal v0.1.0
      │   ├── tungstenite v0.29.0
      │   │   └── tokio-tungstenite v0.29.0
      │   │       ├── axum v0.8.9
      │   │       │   └── infraternal-server v0.1.0 (*)
      │   │       └── (dev) infraternal-server v0.1.0 (*)
      │   └── webauthn-rs-core v0.5.5
      │       └── webauthn-rs v0.5.5
      │           └── infraternal-server v0.1.0 (*)
      └── webauthn-rs-core v0.5.5 (*)

warning[duplicate]: found 2 duplicate entries for crate 'rand_core'
    ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:189:1
    │  
189 │ ╭ rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index
190 │ │ rand_core 0.9.5 registry+https://github.com/rust-lang/crates.io-index
    │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ rand_core v0.6.4
      ├── bip39 v2.2.2
      │   └── infraternal-server v0.1.0
      │       └── infraternal v0.1.0
      ├── crypto-common v0.1.7
      │   ├── aead v0.5.2
      │   │   └── aes-gcm v0.10.3
      │   │       └── (dev) infraternal-server v0.1.0 (*)
      │   ├── cipher v0.4.4
      │   │   ├── aes v0.8.4
      │   │   │   └── aes-gcm v0.10.3 (*)
      │   │   ├── aes-gcm v0.10.3 (*)
      │   │   └── ctr v0.9.2
      │   │       └── aes-gcm v0.10.3 (*)
      │   ├── digest v0.10.7
      │   │   ├── blake2 v0.10.6
      │   │   │   └── argon2 v0.5.3
      │   │   │       └── infraternal-server v0.1.0 (*)
      │   │   ├── hmac v0.12.1
      │   │   │   └── hkdf v0.12.4
      │   │   │       └── (dev) infraternal-server v0.1.0 (*)
      │   │   ├── sha1 v0.10.7
      │   │   │   ├── axum v0.8.9
      │   │   │   │   └── infraternal-server v0.1.0 (*)
      │   │   │   └── tungstenite v0.29.0
      │   │   │       └── tokio-tungstenite v0.29.0
      │   │   │           ├── axum v0.8.9 (*)
      │   │   │           └── (dev) infraternal-server v0.1.0 (*)
      │   │   └── sha2 v0.10.9
      │   │       ├── infraternal-server v0.1.0 (*)
      │   │       ├── sqlx-core v0.8.6
      │   │       │   ├── sqlx v0.8.6
      │   │       │   │   ├── infraternal v0.1.0 (*)
      │   │       │   │   └── infraternal-server v0.1.0 (*)
      │   │       │   ├── sqlx-macros v0.8.6
      │   │       │   │   └── sqlx v0.8.6 (*)
      │   │       │   ├── sqlx-macros-core v0.8.6
      │   │       │   │   └── sqlx-macros v0.8.6 (*)
      │   │       │   └── sqlx-sqlite v0.8.6
      │   │       │       ├── sqlx v0.8.6 (*)
      │   │       │       └── sqlx-macros-core v0.8.6 (*)
      │   │       └── sqlx-macros-core v0.8.6 (*)
      │   └── universal-hash v0.5.1
      │       └── polyval v0.6.2
      │           └── ghash v0.5.1
      │               └── aes-gcm v0.10.3 (*)
      ├── password-hash v0.5.0
      │   └── argon2 v0.5.3 (*)
      ├── rand v0.8.8
      │   └── bip39 v2.2.2 (*)
      └── rand_chacha v0.3.1
          └── rand v0.8.8 (*)
    ├ rand_core v0.9.5
      ├── rand v0.9.5
      │   ├── infraternal-server v0.1.0
      │   │   └── infraternal v0.1.0
      │   ├── tungstenite v0.29.0
      │   │   └── tokio-tungstenite v0.29.0
      │   │       ├── axum v0.8.9
      │   │       │   └── infraternal-server v0.1.0 (*)
      │   │       └── (dev) infraternal-server v0.1.0 (*)
      │   └── webauthn-rs-core v0.5.5
      │       └── webauthn-rs v0.5.5
      │           └── infraternal-server v0.1.0 (*)
      └── rand_chacha v0.9.0
          ├── rand v0.9.5 (*)
          └── webauthn-rs-core v0.5.5 (*)

warning[duplicate]: found 2 duplicate entries for crate 'syn'
    ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:226:1
    │  
226 │ ╭ syn 2.0.119 registry+https://github.com/rust-lang/crates.io-index
227 │ │ syn 3.0.6 registry+https://github.com/rust-lang/crates.io-index
    │ ╰───────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ syn v2.0.119
      ├── asn1-rs-derive v0.5.1
      │   └── asn1-rs v0.6.2
      │       ├── der-parser v9.0.0
      │       │   ├── webauthn-rs-core v0.5.5
      │       │   │   └── webauthn-rs v0.5.5
      │       │   │       └── infraternal-server v0.1.0
      │       │   │           └── infraternal v0.1.0
      │       │   └── x509-parser v0.16.0
      │       │       └── webauthn-rs-core v0.5.5 (*)
      │       ├── oid-registry v0.7.1
      │       │   └── x509-parser v0.16.0 (*)
      │       └── x509-parser v0.16.0 (*)
      ├── asn1-rs-impl v0.2.0
      │   └── asn1-rs v0.6.2 (*)
      ├── openssl-macros v0.1.1
      │   └── openssl v0.10.81
      │       ├── axum-server v0.8.0
      │       │   └── infraternal-server v0.1.0 (*)
      │       ├── infraternal-server v0.1.0 (*)
      │       ├── tokio-openssl v0.6.5
      │       │   └── axum-server v0.8.0 (*)
      │       ├── webauthn-attestation-ca v0.5.5
      │       │   └── webauthn-rs-core v0.5.5 (*)
      │       └── webauthn-rs-core v0.5.5 (*)
      ├── sqlx-macros v0.8.6
      │   └── sqlx v0.8.6
      │       ├── infraternal v0.1.0 (*)
      │       └── infraternal-server v0.1.0 (*)
      ├── sqlx-macros-core v0.8.6
      │   └── sqlx-macros v0.8.6 (*)
      ├── synstructure v0.13.2
      │   └── asn1-rs-derive v0.5.1 (*)
      ├── thiserror-impl v1.0.69
      │   └── thiserror v1.0.69
      │       ├── asn1-rs v0.6.2 (*)
      │       ├── webauthn-rs-core v0.5.5 (*)
      │       └── x509-parser v0.16.0 (*)
      ├── tracing-attributes v0.1.31
      │   └── tracing v0.1.44
      │       ├── axum v0.8.9
      │       │   └── infraternal-server v0.1.0 (*)
      │       ├── axum-core v0.5.6
      │       │   └── axum v0.8.9 (*)
      │       ├── h2 v0.4.19
      │       │   └── hyper v1.11.1
      │       │       ├── axum v0.8.9 (*)
      │       │       ├── axum-server v0.8.0 (*)
      │       │       └── hyper-util v0.1.21
      │       │           ├── axum v0.8.9 (*)
      │       │           └── axum-server v0.8.0 (*)
      │       ├── infraternal-server v0.1.0 (*)
      │       ├── sqlx-core v0.8.6
      │       │   ├── sqlx v0.8.6 (*)
      │       │   ├── sqlx-macros v0.8.6 (*)
      │       │   ├── sqlx-macros-core v0.8.6 (*)
      │       │   └── sqlx-sqlite v0.8.6
      │       │       ├── sqlx v0.8.6 (*)
      │       │       └── sqlx-macros-core v0.8.6 (*)
      │       ├── sqlx-sqlite v0.8.6 (*)
      │       ├── tower v0.5.3
      │       │   ├── axum v0.8.9 (*)
      │       │   └── (dev) infraternal-server v0.1.0 (*)
      │       ├── tracing-subscriber v0.3.23
      │       │   └── infraternal-server v0.1.0 (*)
      │       ├── webauthn-attestation-ca v0.5.5 (*)
      │       ├── webauthn-rs v0.5.5 (*)
      │       └── webauthn-rs-core v0.5.5 (*)
      └── zerocopy-derive v0.8.60
          └── zerocopy v0.8.60
              ├── half v2.7.1
              │   ├── ciborium-ll v0.2.2
              │   │   └── ciborium v0.2.2
              │   │       └── criterion v0.7.0
              │   │           └── (dev) infraternal-protocol v0.1.0
              │   │               ├── infraternal-agent v0.1.0
              │   │               │   └── infraternal v0.1.0 (*)
              │   │               ├── infraternal-fuzz v0.1.0
              │   │               └── infraternal-server v0.1.0 (*)
              │   └── serde_cbor_2 v0.13.0
              │       ├── infraternal-server v0.1.0 (*)
              │       └── webauthn-rs-core v0.5.5 (*)
              └── ppv-lite86 v0.2.21
                  ├── rand_chacha v0.3.1
                  │   └── rand v0.8.8
                  │       └── bip39 v2.2.2
                  │           └── infraternal-server v0.1.0 (*)
                  └── rand_chacha v0.9.0
                      ├── rand v0.9.5
                      │   ├── infraternal-server v0.1.0 (*)
                      │   ├── tungstenite v0.29.0
                      │   │   └── tokio-tungstenite v0.29.0
                      │   │       ├── axum v0.8.9 (*)
                      │   │       └── (dev) infraternal-server v0.1.0 (*)
                      │   └── webauthn-rs-core v0.5.5 (*)
                      └── webauthn-rs-core v0.5.5 (*)
    ├ syn v3.0.6
      ├── clap_derive v4.6.7
      │   └── clap v4.6.7
      │       ├── criterion v0.7.0
      │       │   └── (dev) infraternal-protocol v0.1.0
      │       │       ├── infraternal-agent v0.1.0
      │       │       │   └── infraternal v0.1.0
      │       │       ├── infraternal-fuzz v0.1.0
      │       │       └── infraternal-server v0.1.0
      │       │           └── infraternal v0.1.0 (*)
      │       └── infraternal v0.1.0 (*)
      ├── displaydoc v0.2.7
      │   ├── asn1-rs v0.6.2
      │   │   ├── der-parser v9.0.0
      │   │   │   ├── webauthn-rs-core v0.5.5
      │   │   │   │   └── webauthn-rs v0.5.5
      │   │   │   │       └── infraternal-server v0.1.0 (*)
      │   │   │   └── x509-parser v0.16.0
      │   │   │       └── webauthn-rs-core v0.5.5 (*)
      │   │   ├── oid-registry v0.7.1
      │   │   │   └── x509-parser v0.16.0 (*)
      │   │   └── x509-parser v0.16.0 (*)
      │   ├── der-parser v9.0.0 (*)
      │   ├── icu_collections v2.3.0
      │   │   ├── icu_normalizer v2.3.0
      │   │   │   └── idna_adapter v1.2.2
      │   │   │       └── idna v1.1.0
      │   │   │           └── url v2.5.8
      │   │   │               ├── infraternal-server v0.1.0 (*)
      │   │   │               ├── sqlx-core v0.8.6
      │   │   │               │   ├── sqlx v0.8.6
      │   │   │               │   │   ├── infraternal v0.1.0 (*)
      │   │   │               │   │   └── infraternal-server v0.1.0 (*)
      │   │   │               │   ├── sqlx-macros v0.8.6
      │   │   │               │   │   └── sqlx v0.8.6 (*)
      │   │   │               │   ├── sqlx-macros-core v0.8.6
      │   │   │               │   │   └── sqlx-macros v0.8.6 (*)
      │   │   │               │   └── sqlx-sqlite v0.8.6
      │   │   │               │       ├── sqlx v0.8.6 (*)
      │   │   │               │       └── sqlx-macros-core v0.8.6 (*)
      │   │   │               ├── sqlx-macros-core v0.8.6 (*)
      │   │   │               ├── sqlx-sqlite v0.8.6 (*)
      │   │   │               ├── webauthn-rs v0.5.5 (*)
      │   │   │               ├── webauthn-rs-core v0.5.5 (*)
      │   │   │               └── webauthn-rs-proto v0.5.5
      │   │   │                   └── webauthn-rs-core v0.5.5 (*)
      │   │   └── icu_properties v2.3.0
      │   │       └── idna_adapter v1.2.2 (*)
      │   ├── icu_locale_core v2.3.0
      │   │   ├── icu_properties v2.3.0 (*)
      │   │   └── icu_provider v2.3.1
      │   │       ├── icu_normalizer v2.3.0 (*)
      │   │       └── icu_properties v2.3.0 (*)
      │   ├── icu_properties v2.3.0 (*)
      │   ├── icu_provider v2.3.1 (*)
      │   ├── tinystr v0.8.4
      │   │   └── icu_locale_core v2.3.0 (*)
      │   └── zerotrie v0.2.5
      │       ├── icu_properties v2.3.0 (*)
      │       └── icu_provider v2.3.1 (*)
      ├── futures-macro v0.3.34
      │   └── futures-util v0.3.34
      │       ├── axum v0.8.9
      │       │   └── infraternal-server v0.1.0 (*)
      │       ├── futures-executor v0.3.34
      │       │   └── sqlx-sqlite v0.8.6 (*)
      │       ├── infraternal-server v0.1.0 (*)
      │       ├── js-sys v0.3.106
      │       │   └── web-sys v0.3.106
      │       │       └── plotters v0.3.7
      │       │           └── criterion v0.7.0 (*)
      │       ├── sqlx-core v0.8.6 (*)
      │       ├── sqlx-sqlite v0.8.6 (*)
      │       ├── tokio-tungstenite v0.29.0
      │       │   ├── axum v0.8.9 (*)
      │       │   └── (dev) infraternal-server v0.1.0 (*)
      │       ├── tower v0.5.3
      │       │   ├── axum v0.8.9 (*)
      │       │   └── (dev) infraternal-server v0.1.0 (*)
      │       └── tower-http v0.6.11
      │           └── infraternal-server v0.1.0 (*)
      ├── serde_derive v1.0.229
      │   ├── serde v1.0.229
      │   │   ├── base64urlsafedata v0.5.5
      │   │   │   ├── webauthn-attestation-ca v0.5.5
      │   │   │   │   └── webauthn-rs-core v0.5.5 (*)
      │   │   │   ├── webauthn-rs v0.5.5 (*)
      │   │   │   ├── webauthn-rs-core v0.5.5 (*)
      │   │   │   └── webauthn-rs-proto v0.5.5 (*)
      │   │   ├── bip39 v2.2.2
      │   │   │   └── infraternal-server v0.1.0 (*)
      │   │   ├── ciborium v0.2.2
      │   │   │   └── criterion v0.7.0 (*)
      │   │   ├── criterion v0.7.0 (*)
      │   │   ├── either v1.18.0
      │   │   │   ├── axum-server v0.8.0
      │   │   │   │   └── infraternal-server v0.1.0 (*)
      │   │   │   ├── itertools v0.13.0
      │   │   │   │   ├── criterion v0.7.0 (*)
      │   │   │   │   └── criterion-plot v0.6.0
      │   │   │   │       └── criterion v0.7.0 (*)
      │   │   │   ├── rayon v1.12.0
      │   │   │   │   └── criterion v0.7.0 (*)
      │   │   │   ├── sqlx-core v0.8.6 (*)
      │   │   │   └── sqlx-macros-core v0.8.6 (*)
      │   │   ├── infraternal-agent v0.1.0 (*)
      │   │   ├── infraternal-mesh v0.1.0
      │   │   ├── infraternal-server v0.1.0 (*)
      │   │   ├── serde_cbor_2 v0.13.0
      │   │   │   ├── infraternal-server v0.1.0 (*)
      │   │   │   └── webauthn-rs-core v0.5.5 (*)
      │   │   ├── serde_urlencoded v0.7.1
      │   │   │   ├── axum v0.8.9 (*)
      │   │   │   └── sqlx-sqlite v0.8.6 (*)
      │   │   ├── sqlx-core v0.8.6 (*)
      │   │   ├── sqlx-macros-core v0.8.6 (*)
      │   │   ├── sqlx-sqlite v0.8.6 (*)
      │   │   ├── tinytemplate v1.2.1
      │   │   │   └── criterion v0.7.0 (*)
      │   │   ├── tracing-serde v0.2.0
      │   │   │   └── tracing-subscriber v0.3.23
      │   │   │       └── infraternal-server v0.1.0 (*)
      │   │   ├── tracing-subscriber v0.3.23 (*)
      │   │   ├── url v2.5.8 (*)
      │   │   ├── webauthn-attestation-ca v0.5.5 (*)
      │   │   ├── webauthn-rs v0.5.5 (*)
      │   │   ├── webauthn-rs-core v0.5.5 (*)
      │   │   └── webauthn-rs-proto v0.5.5 (*)
      │   └── url v2.5.8 (*)
      ├── synstructure v0.14.0
      │   ├── yoke-derive v0.8.4
      │   │   └── yoke v0.8.3
      │   │       ├── icu_collections v2.3.0 (*)
      │   │       ├── icu_provider v2.3.1 (*)
      │   │       ├── zerotrie v0.2.5 (*)
      │   │       └── zerovec v0.11.8
      │   │           ├── icu_collections v2.3.0 (*)
      │   │           ├── icu_locale_core v2.3.0 (*)
      │   │           ├── icu_normalizer v2.3.0 (*)
      │   │           ├── icu_properties v2.3.0 (*)
      │   │           ├── icu_provider v2.3.1 (*)
      │   │           ├── potential_utf v0.1.6
      │   │           │   └── icu_collections v2.3.0 (*)
      │   │           └── tinystr v0.8.4 (*)
      │   └── zerofrom-derive v0.1.8
      │       └── zerofrom v0.1.8
      │           ├── icu_collections v2.3.0 (*)
      │           ├── icu_provider v2.3.1 (*)
      │           ├── yoke v0.8.3 (*)
      │           ├── zerotrie v0.2.5 (*)
      │           └── zerovec v0.11.8 (*)
      ├── thiserror-impl v2.0.21
      │   └── thiserror v2.0.21
      │       ├── infraternal v0.1.0 (*)
      │       ├── infraternal-mesh v0.1.0 (*)
      │       ├── infraternal-server v0.1.0 (*)
      │       ├── sqlx-core v0.8.6 (*)
      │       ├── sqlx-sqlite v0.8.6 (*)
      │       └── tungstenite v0.29.0
      │           └── tokio-tungstenite v0.29.0 (*)
      ├── tokio-macros v2.7.2
      │   └── tokio v1.53.2
      │       ├── axum v0.8.9 (*)
      │       ├── axum-server v0.8.0 (*)
      │       ├── fs-err v3.3.2
      │       │   └── axum-server v0.8.0 (*)
      │       ├── h2 v0.4.19
      │       │   └── hyper v1.11.1
      │       │       ├── axum v0.8.9 (*)
      │       │       ├── axum-server v0.8.0 (*)
      │       │       └── hyper-util v0.1.21
      │       │           ├── axum v0.8.9 (*)
      │       │           └── axum-server v0.8.0 (*)
      │       ├── hyper v1.11.1 (*)
      │       ├── hyper-util v0.1.21 (*)
      │       ├── infraternal v0.1.0 (*)
      │       ├── infraternal-agent v0.1.0 (*)
      │       ├── infraternal-server v0.1.0 (*)
      │       ├── sqlx-core v0.8.6 (*)
      │       ├── sqlx-macros-core v0.8.6 (*)
      │       ├── tokio-openssl v0.6.5
      │       │   └── axum-server v0.8.0 (*)
      │       ├── tokio-stream v0.1.19
      │       │   └── sqlx-core v0.8.6 (*)
      │       ├── tokio-tungstenite v0.29.0 (*)
      │       ├── tokio-util v0.7.19
      │       │   ├── h2 v0.4.19 (*)
      │       │   └── tower-http v0.6.11 (*)
      │       ├── tower v0.5.3 (*)
      │       └── tower-http v0.6.11 (*)
      ├── wasm-bindgen-macro-support v0.2.129
      │   └── wasm-bindgen-macro v0.2.129
      │       └── wasm-bindgen v0.2.129
      │           ├── js-sys v0.3.106 (*)
      │           ├── plotters v0.3.7 (*)
      │           └── web-sys v0.3.106 (*)
      ├── yoke-derive v0.8.4 (*)
      ├── zerofrom-derive v0.1.8 (*)
      └── zerovec-derive v0.11.6
          └── zerovec v0.11.8 (*)

warning[duplicate]: found 2 duplicate entries for crate 'synstructure'
    ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:229:1
    │  
229 │ ╭ synstructure 0.13.2 registry+https://github.com/rust-lang/crates.io-index
230 │ │ synstructure 0.14.0 registry+https://github.com/rust-lang/crates.io-index
    │ ╰─────────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ synstructure v0.13.2
      └── asn1-rs-derive v0.5.1
          └── asn1-rs v0.6.2
              ├── der-parser v9.0.0
              │   ├── webauthn-rs-core v0.5.5
              │   │   └── webauthn-rs v0.5.5
              │   │       └── infraternal-server v0.1.0
              │   │           └── infraternal v0.1.0
              │   └── x509-parser v0.16.0
              │       └── webauthn-rs-core v0.5.5 (*)
              ├── oid-registry v0.7.1
              │   └── x509-parser v0.16.0 (*)
              └── x509-parser v0.16.0 (*)
    ├ synstructure v0.14.0
      ├── yoke-derive v0.8.4
      │   └── yoke v0.8.3
      │       ├── icu_collections v2.3.0
      │       │   ├── icu_normalizer v2.3.0
      │       │   │   └── idna_adapter v1.2.2
      │       │   │       └── idna v1.1.0
      │       │   │           └── url v2.5.8
      │       │   │               ├── infraternal-server v0.1.0
      │       │   │               │   └── infraternal v0.1.0
      │       │   │               ├── sqlx-core v0.8.6
      │       │   │               │   ├── sqlx v0.8.6
      │       │   │               │   │   ├── infraternal v0.1.0 (*)
      │       │   │               │   │   └── infraternal-server v0.1.0 (*)
      │       │   │               │   ├── sqlx-macros v0.8.6
      │       │   │               │   │   └── sqlx v0.8.6 (*)
      │       │   │               │   ├── sqlx-macros-core v0.8.6
      │       │   │               │   │   └── sqlx-macros v0.8.6 (*)
      │       │   │               │   └── sqlx-sqlite v0.8.6
      │       │   │               │       ├── sqlx v0.8.6 (*)
      │       │   │               │       └── sqlx-macros-core v0.8.6 (*)
      │       │   │               ├── sqlx-macros-core v0.8.6 (*)
      │       │   │               ├── sqlx-sqlite v0.8.6 (*)
      │       │   │               ├── webauthn-rs v0.5.5
      │       │   │               │   └── infraternal-server v0.1.0 (*)
      │       │   │               ├── webauthn-rs-core v0.5.5
      │       │   │               │   └── webauthn-rs v0.5.5 (*)
      │       │   │               └── webauthn-rs-proto v0.5.5
      │       │   │                   └── webauthn-rs-core v0.5.5 (*)
      │       │   └── icu_properties v2.3.0
      │       │       └── idna_adapter v1.2.2 (*)
      │       ├── icu_provider v2.3.1
      │       │   ├── icu_normalizer v2.3.0 (*)
      │       │   └── icu_properties v2.3.0 (*)
      │       ├── zerotrie v0.2.5
      │       │   ├── icu_properties v2.3.0 (*)
      │       │   └── icu_provider v2.3.1 (*)
      │       └── zerovec v0.11.8
      │           ├── icu_collections v2.3.0 (*)
      │           ├── icu_locale_core v2.3.0
      │           │   ├── icu_properties v2.3.0 (*)
      │           │   └── icu_provider v2.3.1 (*)
      │           ├── icu_normalizer v2.3.0 (*)
      │           ├── icu_properties v2.3.0 (*)
      │           ├── icu_provider v2.3.1 (*)
      │           ├── potential_utf v0.1.6
      │           │   └── icu_collections v2.3.0 (*)
      │           └── tinystr v0.8.4
      │               └── icu_locale_core v2.3.0 (*)
      └── zerofrom-derive v0.1.8
          └── zerofrom v0.1.8
              ├── icu_collections v2.3.0 (*)
              ├── icu_provider v2.3.1 (*)
              ├── yoke v0.8.3 (*)
              ├── zerotrie v0.2.5 (*)
              └── zerovec v0.11.8 (*)

warning[duplicate]: found 2 duplicate entries for crate 'thiserror'
    ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:231:1
    │  
231 │ ╭ thiserror 1.0.69 registry+https://github.com/rust-lang/crates.io-index
232 │ │ thiserror 2.0.21 registry+https://github.com/rust-lang/crates.io-index
    │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ thiserror v1.0.69
      ├── asn1-rs v0.6.2
      │   ├── der-parser v9.0.0
      │   │   ├── webauthn-rs-core v0.5.5
      │   │   │   └── webauthn-rs v0.5.5
      │   │   │       └── infraternal-server v0.1.0
      │   │   │           └── infraternal v0.1.0
      │   │   └── x509-parser v0.16.0
      │   │       └── webauthn-rs-core v0.5.5 (*)
      │   ├── oid-registry v0.7.1
      │   │   └── x509-parser v0.16.0 (*)
      │   └── x509-parser v0.16.0 (*)
      ├── webauthn-rs-core v0.5.5 (*)
      └── x509-parser v0.16.0 (*)
    ├ thiserror v2.0.21
      ├── infraternal v0.1.0
      ├── infraternal-mesh v0.1.0
      ├── infraternal-server v0.1.0
      │   └── infraternal v0.1.0 (*)
      ├── sqlx-core v0.8.6
      │   ├── sqlx v0.8.6
      │   │   ├── infraternal v0.1.0 (*)
      │   │   └── infraternal-server v0.1.0 (*)
      │   ├── sqlx-macros v0.8.6
      │   │   └── sqlx v0.8.6 (*)
      │   ├── sqlx-macros-core v0.8.6
      │   │   └── sqlx-macros v0.8.6 (*)
      │   └── sqlx-sqlite v0.8.6
      │       ├── sqlx v0.8.6 (*)
      │       └── sqlx-macros-core v0.8.6 (*)
      ├── sqlx-sqlite v0.8.6 (*)
      └── tungstenite v0.29.0
          └── tokio-tungstenite v0.29.0
              ├── axum v0.8.9
              │   └── infraternal-server v0.1.0 (*)
              └── (dev) infraternal-server v0.1.0 (*)

warning[duplicate]: found 2 duplicate entries for crate 'thiserror-impl'
    ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:233:1
    │  
233 │ ╭ thiserror-impl 1.0.69 registry+https://github.com/rust-lang/crates.io-index
234 │ │ thiserror-impl 2.0.21 registry+https://github.com/rust-lang/crates.io-index
    │ ╰───────────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ thiserror-impl v1.0.69
      └── thiserror v1.0.69
          ├── asn1-rs v0.6.2
          │   ├── der-parser v9.0.0
          │   │   ├── webauthn-rs-core v0.5.5
          │   │   │   └── webauthn-rs v0.5.5
          │   │   │       └── infraternal-server v0.1.0
          │   │   │           └── infraternal v0.1.0
          │   │   └── x509-parser v0.16.0
          │   │       └── webauthn-rs-core v0.5.5 (*)
          │   ├── oid-registry v0.7.1
          │   │   └── x509-parser v0.16.0 (*)
          │   └── x509-parser v0.16.0 (*)
          ├── webauthn-rs-core v0.5.5 (*)
          └── x509-parser v0.16.0 (*)
    ├ thiserror-impl v2.0.21
      └── thiserror v2.0.21
          ├── infraternal v0.1.0
          ├── infraternal-mesh v0.1.0
          ├── infraternal-server v0.1.0
          │   └── infraternal v0.1.0 (*)
          ├── sqlx-core v0.8.6
          │   ├── sqlx v0.8.6
          │   │   ├── infraternal v0.1.0 (*)
          │   │   └── infraternal-server v0.1.0 (*)
          │   ├── sqlx-macros v0.8.6
          │   │   └── sqlx v0.8.6 (*)
          │   ├── sqlx-macros-core v0.8.6
          │   │   └── sqlx-macros v0.8.6 (*)
          │   └── sqlx-sqlite v0.8.6
          │       ├── sqlx v0.8.6 (*)
          │       └── sqlx-macros-core v0.8.6 (*)
          ├── sqlx-sqlite v0.8.6 (*)
          └── tungstenite v0.29.0
              └── tokio-tungstenite v0.29.0
                  ├── axum v0.8.9
                  │   └── infraternal-server v0.1.0 (*)
                  └── (dev) infraternal-server v0.1.0 (*)

advisories ok, bans ok, licenses ok, sources ok

==> static builds
    Finished `release` profile [optimized] target(s) in 0.95s
/home/kayg/.cache/codex-scratch/canvas-streams-review/target/x86_64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped
PT_INTERP: absent; size: 15985424 bytes (baseline 16142672 + allowance 262144 = max 16404816)
    Finished `release` profile [optimized] target(s) in 0.73s
/home/kayg/.cache/codex-scratch/canvas-streams-review/target/aarch64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped
PT_INTERP: absent; size: 13439056 bytes (baseline 13555672 + allowance 262144 = max 13817816)
server subcommand: exit 2, not implemented
agent subcommand: exit 2, not implemented

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+

==> Vendored Ghostty artifact checksums
dist/ghostty-web.js: OK
dist/ghostty-vt.wasm: OK
dist/index.d.ts: OK

==> Shared UI frame queue
bun test v1.4.2 (744846f84)

src/frame-batch.test.ts:
(pass) many owners share one frame and repeated requests coalesce [3.01ms]
(pass) cancel releases idle work and a callback can request only the next frame [0.18ms]
(pass) a frame yields remaining owners after its work budget [0.13ms]
(pass) older owners keep their order when a yielding callback queues newer work [0.10ms]
(pass) one callback failure surfaces without stranding another owner [1.14ms]

 5 pass
 0 fail
 18 expect() calls
Ran 5 tests across 1 file. [30.00ms]

==> TypeScript protocol compiler

==> Tracer compiler, precompression and bundle transfer budget
bun install v1.4.2 (744846f84)

Checked 38 installs across 69 packages (no changes) [26.00ms]
$ bun x tsc --project tsconfig.json
bun test v1.4.2 (744846f84)

browser-build.test.ts:
(pass) the browser renderer has no unresolved Vite Node-file shim request [45.80ms]

precompress.test.ts:
(pass) text sidecars round-trip deterministically; compressed formats remain identity [50.24ms]

redact-reporter.test.ts:
(pass) request failure messages and stacks reach later reporters without sensitive headers [8.19ms]
(pass) worker errors and non-Error values receive the same header filtering [0.17ms]
(pass) terminal styling cannot hide request headers from filtering [0.04ms]

test/recovery-ui.test.ts:
(pass) compiled recovery UI mode off obeys its URL boundary [6.76ms]
(pass) compiled recovery UI mode preview obeys its URL boundary [2.46ms]
(pass) compiled recovery UI mode 1 obeys its URL boundary [1.99ms]

test/recovery-crypto.test.ts:
(pass) HKDF siblings match independent implementation and bind unwrap to domain, account, kind and version [26.45ms]
(pass) 100 repeated wrapping operations generate independent salts and nonces [19.86ms]

test/recovery-wait.test.ts:
(pass) server remaining wait 0s is accepted through the capability policy maximum [9.16ms]
(pass) server remaining wait 86400s is accepted through the capability policy maximum [1.17ms]
(pass) server remaining wait 90000s is accepted through the capability policy maximum [0.67ms]
(pass) server remaining wait 172800s is accepted through the capability policy maximum [0.67ms]
(pass) malformed or excessive remaining wait -1 is denied [1.08ms]
(pass) malformed or excessive remaining wait 0.5 is denied [1.05ms]
(pass) malformed or excessive remaining wait 172801 is denied [0.95ms]
(pass) malformed or excessive remaining wait 9007199254740992 is denied [1.29ms]
(pass) malformed or excessive remaining wait 90000 is denied [0.86ms]

test/recovery-rotation.test.ts:
(pass) signed-in rotation sends only a local envelope and verifier after acknowledgement [16.14ms]
(pass) abandoned word acknowledgement uploads nothing [2.02ms]
(pass) settled acknowledgement cannot upload later (dismissed) [8.03ms]
(pass) settled acknowledgement cannot upload later (no acknowledgement) [2.61ms]

test/canvas-connection.test.ts:
(pass) 12 window writers use one WebSocket, route calls independently and resume their own cursors [184.52ms]
(pass) unnegotiated visibility is rejected before transmission without disconnecting live siblings [7.48ms]
(pass) shared SSH session opening respects the server's sixty-second connect budget [11011.52ms]
(pass) a hidden window created before legacy greeting fails locally while its live sibling attaches [7.55ms]
(pass) a live mode selected before the first greeting needs no preview recovery capability [17.87ms]

 28 pass
 0 fail
 437 expect() calls
Ran 28 tests across 8 files. [11.52s]
$ bun run build.ts
built main.js, chunk-39rcg6ed.js, chunk-jm7rf2y8.js, chunk-wtka05eg.js, chunk-ez799f1c.js, canvas-socket.worker.js, backdrop.worker.js, faulty-terminal.worker.js, chunk-gcgc2eze.js, chunk-4ptbtsw2.js, chunk-csa187yf.js, chunk-axbkkqp1.js
faulty-terminal.worker.js: identity=1084 gzip=559 brotli=477 bytes
backdrop.worker.js: identity=241 gzip=209 brotli=158 bytes
chunk-wtka05eg.js: identity=6464 gzip=3106 brotli=2806 bytes
chunk-jm7rf2y8.js: identity=8373 gzip=3573 brotli=3178 bytes
chunk-39rcg6ed.js: identity=11879 gzip=3749 brotli=3325 bytes
chunk-axbkkqp1.js: identity=90 gzip=90 brotli=78 bytes
chunk-gcgc2eze.js: identity=9807 gzip=4011 brotli=3450 bytes
chunk-ez799f1c.js: identity=720024 gzip=208425 brotli=169021 bytes
chunk-csa187yf.js: identity=24649 gzip=8379 brotli=7458 bytes
chunk-4ptbtsw2.js: identity=185 gzip=151 brotli=129 bytes
main.js: identity=87892 gzip=32834 brotli=28544 bytes
canvas-socket.worker.js: identity=2134 gzip=1006 brotli=901 bytes
JavaScript transfer: identity=872822 gzip=266092/307200 brotli=219525/256000 bytes
fonts/MapleMonoNF-Italic.latin.woff2: identity=37148 gzip=37148 brotli=37148 bytes
fonts/MapleMonoNF-Medium.latin.woff2: identity=33904 gzip=33904 brotli=33904 bytes
fonts/MapleMonoNF-Regular.latin.woff2: identity=32852 gzip=32852 brotli=32852 bytes
fonts/MapleMonoNF-SemiBold.latin.woff2: identity=34160 gzip=34160 brotli=34160 bytes
fonts/MapleMonoNF-SemiBoldItalic.latin.woff2: identity=38228 gzip=38228 brotli=38228 bytes
fonts/MapleMonoNF-symbols.woff2: identity=223748 gzip=223748 brotli=223748 bytes
Font transfer: critical=32852/36864 latin=176292/184320 symbols=223748/235520 bytes

==> Rust stream oracle (for the differential test)

==> TypeScript protocol tests
bun test v1.4.2 (744846f84)

src/codec.test.ts:
(pass) wire protocol golden vectors > encodes and decodes each frame exactly as the shared manifest describes [20.45ms]
(pass) wire protocol golden vectors > returns borrowed payload views and writes into reusable buffers [0.30ms]
(pass) wire protocol golden vectors > decodes muxed messages split across WebSocket messages [1.11ms]
(pass) wire protocol golden vectors > rejects oversized, non-canonical, unknown, and malformed frame bytes [0.34ms]
(pass) split mux header preserves trailing Close [0.38ms]
(pass) visibility layouts reject unknown modes, reversed ranges and reserved flags [0.21ms]

src/stream.test.ts:
stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [4892.64ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [11.05ms]

 8 pass
 0 fail
 38804 expect() calls
Ran 8 tests across 2 files. [4.95s]
Verdict: merge after fixes. Confirmed open counts P0=0/P1=1/P2=2/P3=0. Target badbfc90642c4a99bbb6d78b129a2146bbba18b6; merge base f27b3fe7a4dcfb3e268bdee90405bf1f1d8a0ce9. Local review-canvas-streams head 9a354a9cc01ce337861381a89b50999eb59918fd. CS-R3/P2: connected primary disposal at2,097,152 pending bytes throws, retains writer and skips renderer disposal (48120d38). CS-R4/P1: actual benchmark mounting puts1240x680 host in408x164 slot, invalidating independent visible-window layout (6e6d5f25). CS-R5/P2: real surviving-shim capability refusal retries[1,1,1] instead of stopping; normal Rust regression fails (d729bec5). Original CS-R1/CS-R2 resolved; independent repair cohort16/16 passes. Exact-head scripts/verify fast exit0 (235 Rust passed/25 ignored; static15,985,424 and13,439,056bytes; tracer/protocol gates pass). Review TypeScript and Rust formatting pass. Four real12-PTY/30s scale pairs rejected, zero accepted; geometry also remains red. Full latency exit1: seven native metrics failed, browser87 passed/9 failed/26 skipped25.8min. PTY p99 baseline593.60ms/same-session flood1,026.35ms versus334ms; growth432.75ms versus16.67ms at load40.50/34.37/32.30. Paired50MB prediction throughput passes−1.96% versus−5%. No controlled base attribution is claimed. Fuzz15,545,307 executions/three31s runs without crashes, sanitizer=none; ASan linkage incomplete. Evidence: docs/verification/review-canvas-streams/README.md, full logs and production screenshots. Each confirmed finding has a committed failing regression. Native memory at expected count and physical iPhone behavior remain unverified. No implementation fix. Issue remains open. scripts/verify fast on exact badbfc90 — complete output, verbatim: ````text METRIC name=network_rtt_selftest configured_rtt_ms=300 jitter_ms=30 loss=unsupported transport=tcp-stream n=3 p50_ms=300.97 p99_ms=346.93 result=PASS ==> fmt ==> VT native fmt ==> clippy Compiling infraternal-shim v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-shim) Checking infraternal-protocol v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-protocol) Compiling infraternal-server v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-server) Checking infraternal-agent v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-agent) Checking infraternal-mesh v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-mesh) Checking infraternal v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal) Checking infraternal-fuzz v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/fuzz) Checking infraternal-plugin-ssh v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/plugins/ssh) Checking infraternal-plugin-api v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-plugin-api) Finished `dev` profile [unoptimized + debuginfo] target(s) in 27.76s ==> test Compiling infraternal-shim v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-shim) Compiling infraternal-server v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-server) Compiling infraternal-agent v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-agent) Compiling infraternal-mesh v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-mesh) Compiling infraternal-plugin-ssh v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/plugins/ssh) Compiling infraternal-plugin-api v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-plugin-api) Compiling infraternal v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal) Compiling infraternal-protocol v0.1.0 (/home/kayg/.cache/codex-scratch/canvas-streams-review/head/crates/infraternal-protocol) Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 38s Running unittests src/main.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal-2c06fb1e08b40f8f) running 2 tests test install::tests::dry_run_prints_a_process_surviving_user_unit ... ok test setup_token_tests::setup_token_command_reads_only_the_expected_socket_response ... ok test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/agent_daemon.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/agent_daemon-e5ef77258cbf600a) running 1 test test real_binary_preserves_input_and_output_across_24_abrupt_stops ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 44.60s Running tests/agent_queues.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/agent_queues-57c449079990d909) running 1 test test saturated_terminal_queues_preserve_every_byte_and_daemon_liveness ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 36.97s Running tests/agent_review.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/agent_review-f08a739d87080819) running 6 tests test initial_attach_requires_explicit_credit_before_replay ... ok test last_typist_selects_its_own_real_pty_dimensions ... ok test repeated_tiny_credit_pauses_preserve_shell_progress ... ok test retained_unwritten_input_survives_interleaved_ack_restart ... ok test stalled_terminal_never_delays_control_or_sibling_dispatch ... ok test two_writers_keep_independent_ack_and_exact_input_after_restart ... ok test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 33.26s Running tests/agent_sessions.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/agent_sessions-dac341911fe4ca5b) running 1 test test detached_shim_is_discovered_and_replays_from_the_last_observed_offset ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s Running tests/canvas_streams.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/canvas_streams-e02e1308f94c61a6) running 1 test test twelve_real_streams_restore_independent_modes_and_cursors ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.95s Running tests/idle_canary.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/idle_canary-9930563708e7154e) running 1 test test one_hertz_wakeup_is_detected_past_the_legacy_half_second_window ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.19s Running tests/shim.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/shim-282e2bf3b629b4b1) running 7 tests test attached_backpressure_and_detached_progress ... ok test disallowed_signal_only_disconnects_peer ... ok test double_fork_survives_parent_death ... ok test real_shell_reconnect_resize_and_retained_exit ... ok test replacement_connection_and_malformed_limit ... ok test ring_wrap_snapshot_repaints_real_vim ... ok test user_scope_survives_parent_unit_stop ... active ok test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.88s Running tests/shim_visibility.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/shim_visibility-deae2c15f2672d7e) running 1 test test hidden_modes_coalesce_and_live_resumes_at_snapshot_boundary ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.50s Running tests/vt_credit.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/vt_credit-bb3623465253747d) running 1 test test unaffordable_repaints_park_until_sufficient_credit ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 17.80s Running tests/vt_reconnect.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/vt_reconnect-d5a72f7c3162f374) running 1 test test snapshot_limits_never_close_live_reconnect ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 17.16s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_agent-396a49ee47a2dca8) running 17 tests test relay::tests::attachment_has_no_implicit_output_or_snapshot_credit ... ok test relay::tests::expired_credit_resumes_retained_bytes_at_the_same_cursor ... ok test relay::tests::input_overlap_gap_and_restart_from_confirmed_offset ... ok test relay::tests::output_partial_credit_and_dedup ... ok test relay::tests::output_payload_move_measurement ... ignored, release ownership versus payload-copy measurement test relay::tests::overflowing_ranges_never_mutate_cursors ... ok test relay::tests::positive_insufficient_credit_arms_a_one_shot_deadline ... ok test relay::tests::previews_spend_credit_without_changing_live_checkpoint ... ok test relay::tests::returned_credit_cancels_starvation_and_state_has_no_payload_buffer ... ok test relay::tests::starvation_is_one_shot_and_snapshot_length_does_not_advance_sequence ... ok test sessions::tests::borrowed_reader_payload_uses_reusable_cancel_safe_storage ... ok test sessions::tests::cancelled_fragmented_shim_read_retains_header_and_body_progress ... ok test sessions::tests::post_listen_chmod_wakes_a_connection_refused_at_bind ... ok test sessions::tests::reader_borrow_measurement ... ignored, release borrowed versus owned asynchronous receive measurement test sessions::tests::refused_socket_is_removed_but_insecure_directory_is_rejected ... ok test sessions::tests::sequenced_attach_intersects_caps_and_legacy_attach_stays_zero ... ok test sessions::tests::symlink_state_cannot_redirect_private_runtime_storage ... ok test result: ok. 15 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.06s Running tests/transport.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/transport-ef669c6e5837f1df) running 2 tests test fragmented_headers_coalesced_frames_and_reusable_transmit ... ok test oversized_header_and_truncated_frame_are_rejected ... ok test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_mesh-3f967587718407e9) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/default_arrow.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/default_arrow-312553ba19630584) running 1 test test omitted_arrow_ports_default_to_all_services ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/properties.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/properties-78f35bbe1b57dcd5) running 14 tests test addresses_are_unique_stable_and_not_recycled ... ok test arrow_replacement_is_atomic_and_unrelated_nodes_keep_their_versions ... ok test checkpoint_after_suffix_change_restores_without_reallocating_addresses ... ok test directional_grants_union_and_minimal_updates ... ok test exhausted_versions_reject_mutations_without_changing_state ... ok test join_to_same_tag_grants_both_initiation_directions ... ok test names_versions_and_backend_status ... ok test overlaps_are_reported_without_silent_range_changes ... ok test private_material_never_enters_debug_or_coordination_serialization ... ok test protocol_port_unions_never_grant_an_unlisted_service ... ok test public_checkpoint_preserves_addresses_rules_versions_and_overlap ... ok test rotation_waits_for_overlap_and_delivery_and_removal_drops_every_key ... ok test seeded_random_sequences_equal_full_compile_and_deny_without_grants ... ok test server_rotation_has_continuous_keys_for_every_node_during_delivery ... ok test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.55s Running tests/rotation_time.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/rotation_time-a58dd287253d611d) running 1 test test unrepresentable_rotation_overlap_rejects_before_mutation ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_plugin_api-4480fd7032f11ca2) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_plugin_ssh-22a9a893799c7f17) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_protocol-67b9a310ef49abf9) running 8 tests test stream_tests::all_short_frame_splits_match_direct_decoding ... ok test stream_tests::maximum_sized_fragmented_frame_is_not_rejected ... ok test stream_tests::split_mux_header_preserves_trailing_close ... ok test tests::golden_vectors_encode_and_decode_every_contract_frame ... ok test tests::mux_round_trip_and_incremental_decoders_preserve_frame_order ... ok test tests::oversized_encode_keeps_the_reusable_output_unchanged ... ok test tests::rejects_oversized_noncanonical_and_malformed_frames_before_buffering_body ... ok test tests::visibility_frames_refuse_unknown_modes_ranges_and_flags ... ok test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_server-7b0058424c5209fd) running 114 tests test auth::crypto::verifier_tests::browser_secret_hashing_is_canonical_and_bounded ... ok test auth::crypto::verifier_tests::recovery_capacity_denial_is_not_a_legacy_credential_signal ... ok test auth::http::hostname_tests::authenticated_session_response_includes_system_hostname ... ok test auth::http::tests::admission_partitions_reset_without_trusting_forwarded_headers ... ok test auth::tests::aaguid_migration_preserves_legacy_credentials_and_sessions ... ok test auth::tests::aaguid_projection_rejects_malformed_cbor_corpus ... ok test auth::tests::account_identity_migration_backfills_legacy_users ... ok test auth::tests::account_identity_schema_has_unique_usernames_and_display_names ... ok test auth::tests::audit_ceremony_browser_binding ... ok test auth::tests::audit_logout_survives_admission_exhaustion ... ok test auth::tests::audit_no_public_credential_listing ... ok test auth::tests::audit_recovery_after_page_discard_can_resume_at_original_deadline ... ok test auth::tests::audit_recovery_pending_is_visible_to_signed_in_device ... ok test auth::tests::audit_recovery_session_expiring_during_verification_keeps_delay ... ok test auth::tests::authenticated_prf_metadata_preserves_legacy_envelopes ... ok test auth::tests::ceremony_prf_wraps_and_optional_second_passkey ... ok test auth::tests::concurrent_owner_and_optional_passkey_enrollment_fail_closed ... ok test auth::tests::discoverable_latency_at_pending_capacity ... ignored, run --release --ignored --nocapture without concurrent builds test auth::tests::discoverable_login_handle_credential_counter_and_replay ... ok test auth::tests::enrollment_prf_input_matches_discoverable_login ... ok test auth::tests::http_csrf_cookie_flags_body_limit_and_latency_evidence ... ok test auth::tests::pending_unlock_expires_without_terminal_authority ... ok test auth::tests::provider_labels_cover_the_cited_registry_without_guessing ... ok test auth::tests::provider_session_latency_at_50_devices ... ignored, local auth session scale measurement; run without concurrent builds test auth::tests::public_status_and_discoverable_http_login ... ok test auth::tests::recovery_audit_commits_once_with_start_cancel_and_complete ... ok test auth::tests::recovery_delay_cancel_and_replacement_revokes_every_capability ... ok test auth::tests::recovery_expiry_revocation_and_cross_user_isolation ... ok test auth::tests::recovery_http_live_same_account_is_immediate ... ok test auth::tests::recovery_http_other_expired_pending_and_missing_sessions_wait ... ok test auth::tests::recovery_live_session_cannot_accelerate_an_active_delayed_request ... ok test auth::tests::recovery_live_session_revoked_during_verification_cannot_waive_delay ... ok test auth::tests::recovery_session_delay_latency_at_capacity ... ignored, release-only recovery measurement at 50 live sessions; run without concurrent compilation test auth::tests::recovery_unknown_identity_pays_the_same_database_and_verifier_work ... ok test auth::tests::recovery_username_identity_is_additive_and_ambiguous_forms_fail ... ok test auth::tests::recovery_verifier_latency_at_capacity ... ignored, release-only v2 diagnostic at 50 live session rows; record host load separately test auth::tests::redacted_unknown_and_failed_registrations_do_not_claim_a_provider ... ok test auth::tests::registration_aaguid_survives_none_attestation_and_binds_session_provider ... ok test auth::tests::rejected_origin_uv_challenge_signature_prf_and_expired_ceremonies ... ok test auth::tests::review3_tests::review3_backend_reply_has_a_deadline ... ok test auth::tests::review3_tests::review3_busy_expiry ... ok test auth::tests::review3_tests::review3_busy_logout ... ok test auth::tests::review3_tests::review3_busy_recovery ... ok test auth::tests::review3_tests::review3_completion_and_cleanup_are_transaction_bound ... ok test auth::tests::review3_tests::review3_expired_handshake_must_not_welcome ... ok test auth::tests::review3_tests::review3_identified_privacy_timing_and_binding_replays ... ok test auth::tests::review3_tests::review3_pending_routes_and_idle_expiry_recovery ... ok test auth::tests::review3_tests::review3_revoked_handshake_must_not_welcome ... ok test auth::tests::review3_tests::review3_revoked_resume_must_not_welcome ... ok test auth::tests::review3_tests::review3_unwrap_cannot_be_skipped ... ok test auth::tests::review3_tests::review3_waiting_handshake_loses_authority ... ok test auth::tests::review3_tests::review4_open_reply_and_revocation_preserve_authority ... ok test auth::tests::review3_tests::review4_slow_open_at_user_capacity ... ignored, release-only connect scale measurement; run without concurrent builds test auth::tests::review_invalid_device_polling_exhausts_browser_budget ... ok test auth::tests::review_old_words_race_rotation ... ok test auth::tests::reviewer_tests::reviewer_disk_cancel_complete_races ... ok test auth::tests::reviewer_tests::reviewer_disk_restart_and_concurrent_resume ... ok test auth::tests::reviewer_tests::reviewer_http_denials_and_recovery_admission ... ok test auth::tests::reviewer_tests::reviewer_http_expired_capability_cannot_complete_after_writer_wait ... ok test auth::tests::reviewer_tests::reviewer_http_expired_ceremony_cannot_complete_after_writer_wait ... ok test auth::tests::reviewer_tests::reviewer_server_clock_rollback_retains_deadline_and_reports_more_than_day ... ok test auth::tests::rotation_tests::recovery_phrase_routes_are_removed_and_words_fail_closed ... ok test auth::tests::rotation_tests::recovery_rotation_cannot_follow_a_cookie_account_switch ... ok test auth::tests::rotation_tests::recovery_rotation_denies_pending_expired_and_stale_sessions ... ok test auth::tests::rotation_tests::recovery_rotation_requires_session_and_replaces_legacy_envelope ... ok test auth::tests::rotation_tests::reviewer_concurrent_signed_in_rotations_commit_once ... ok test auth::tests::server_setup_terminal_echo_and_resume_preserve_offsets_once ... ok test auth::tests::sessions_slide_but_fresh_tap_does_not_and_device_keys_are_scoped ... ok test auth::tests::setup_check_is_non_consuming_and_closes_after_owner_creation ... ok test auth::tests::setup_identity_validation_and_uniqueness ... ok test auth::tests::setup_restart_rotation_expiry_and_parallel_redemption ... ok test auth::tests::setup_start_accepts_username_and_display_name ... ok test auth::tests::socket_tests::authenticated_idle_socket_survives_the_former_read_timeout ... ok test auth::tests::socket_tests::clean_control_close_is_not_an_internal_error ... ok test auth::tests::socket_tests::expired_handshake_releases_user_permits ... ok test auth::tests::socket_tests::fragmented_wire_frame_has_a_completion_deadline ... ok test auth::tests::socket_tests::half_open_sockets_obey_user_limit ... ok test auth::tests::socket_tests::incomplete_rfc_message_still_loses_authority_on_revocation ... ok test auth::tests::socket_tests::recovery_subscription_updates_every_signed_in_socket ... ok test auth::tests::socket_tests::revoked_idle_socket_loses_all_authority ... ok test auth::tests::socket_tests::socket_authority_latency_at_user_capacity ... ignored, release-only measurement without concurrent compilation test auth::tests::stale_counters_recovery_cancellation_and_wrap_tampering ... ok test canvas_fixture::canvas_browser_fixture ... ignored, real production-browser fixture; explicit port and private scratch required test embedded::regressions::credited_bulk_output_survives_forwarder_io_pause ... ok test embedded::regressions::credited_output_queue_at_stream_capacity ... ignored, debug actor memory/scheduling measurement; run without concurrent builds test embedded::regressions::full_output_queue_must_not_block_shared_actor ... ok test embedded::regressions::healthy_receiver_survives_ready_native_output_burst ... ok test embedded::regressions::healthy_streams_progress_at_user_attachment_capacity ... ok test embedded::regressions::output_and_snapshot_spend_remaining_restart_credit ... ok test embedded::regressions::real_agent_canonical_uuid_result_is_accepted ... ok test embedded::regressions::real_agent_open_uses_uid_and_character_dimensions ... ok test embedded::regressions::reattach_must_restore_output_credit ... ok test embedded::regressions::recovery_event_then_snapshot_keeps_embedded_connection_live ... ok test embedded::regressions::recovery_notices_preserve_order_credit_and_session_isolation ... ok test embedded::regressions::stream_close_must_not_restart_all_sessions ... ok test embedded::regressions::uncredited_output_or_repaint_is_rejected_before_queueing ... ok test embedded::regressions::visibility_interrupted_live_switch_restores_snapshot_before_credit ... ok test embedded::regressions::visibility_preview_credit_preserves_live_cursor_and_marker_uses_no_credit ... ok test embedded::regressions::visibility_reader_requires_negotiation_and_terminal_stream_identity ... ok test embedded::regressions::visibility_restart_restores_mode_before_byte_credit ... ok test runtime::reviewer_admission::reviewer_recovery_source_limit_covers_all_routes_without_forwarding_bypass ... ok test runtime::tests::proxy_mode_requires_an_explicit_peer_allowlist ... ok test runtime::tests::proxy_networks_match_only_their_address_family_and_prefix ... ok test runtime::tests::restart_serves_fresh_setup_token_and_completes_owner_enrollment ... ok test runtime::tests::router_migrates_private_storage_and_serves_health ... ok test runtime::tests::setup_socket_cleanup_preserves_symlinks_and_regular_files ... ok test runtime::tests::setup_token_socket_is_private_and_requires_explicit_request ... ok test runtime::tests::startup_with_owner_unlinks_stale_setup_token_socket ... ok test web_assets::tests::encodings_and_identity_have_correct_headers_and_sizes ... ok test web_assets::tests::spa_and_mutable_assets_revalidate_and_missing_brotli_uses_gzip ... ok test websocket::recovery_notification_bench::recovery_notification_state_at_socket_capacity ... ignored, notification state sizing diagnostic, not allocator-inclusive RSS certification test websocket::writer_tests::second_device_does_not_inherit_first_device_input_ack ... ok test websocket::writer_tests::writer_admission_at_user_capacity ... ignored, release-only scale measurement; run without concurrent builds test websocket::writer_tests::writer_ownership_capacity_unsigned_offsets_and_identity_reuse ... ok test result: ok. 104 passed; 0 failed; 10 ignored; 0 measured; 0 filtered out; finished in 212.08s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/infraternal_shim-67ffc9c8d51fcf5c) running 77 tests test frame::checks::approximate_snapshot_codec_is_bounded_and_canonical ... ok test frame::checks::borrowed_and_owned_decoders_agree_at_every_fragment_boundary ... ok test frame::checks::codec_reuse_measurement ... ignored, release codec and allocation-path measurement test frame::checks::golden::every_frozen_message ... ok test frame::checks::golden::exact_maximum_and_coalesced_frames ... ok test frame::checks::tests::golden_and_fragmented ... ok test frame::checks::tests::invalid_lengths_types_and_utf8 ... ok test frame::checks::visibility_frames_are_canonical_bounded_and_fragmentable ... ok test ring::checks::tests::wrap_and_exact_offsets ... ok test session::inputs::tests::identity_cap_preserves_all_existing_cursors ... ok test session::inputs::tests::partial_writes_credit_only_the_owner_and_replay_trims_per_writer ... ok test session::measurements::budgets::input_to_pty_write ... ignored, real-PTY performance measurement; set ZDOTDIR to tests/profile test session::measurements::poll_storage_measurement ... ignored, release poll-storage allocation measurement test session::measurements::visibility_state_scale_measurement ... ok test session::resize_checks::native_resize_refusal_preserves_peer_and_pty ... ok test session::resize_checks::resize_refusal_session_probe ... ignored, isolated session probe invoked by its parent with a controlled shell profile test session::sequenced_checks::coalesced_ack_never_overwrites_a_partial_output_and_cursors_survive_peer_loss ... ok test session::sequenced_checks::new_frames_roundtrip_and_refuse_noncanonical_payloads ... ok test session::sequenced_checks::reusable_encoder_retains_capacity_and_refuses_growth_before_mutation ... ok test session::sequenced_checks::trim_duplicates_gaps_overflow_and_capacity_are_transactional ... ok test session::sequenced_checks::writer_selection_has_a_frozen_little_endian_layout ... ok test terminal::checks::approximate_repaint_is_bounded_clips_at_complete_cells_and_preserves_source ... ok test terminal::checks::approximate_repaint_keeps_complete_pending_syntax_or_omits_it_whole ... ok test terminal::checks::tests::alternate_variants_and_nested_switches_repaint ... ok test terminal::checks::tests::byte_budget_prunes_history_and_resize_remains_repaintable ... ok test terminal::checks::tests::fixtures_and_continuations_repaint ... ok test terminal::checks::tests::implicit_hyperlinks_retain_groups_across_rows_and_continuation ... ok test terminal::checks::tests::long_unfinished_hyperlink_and_control_strings_continue ... ok test terminal::checks::tests::margins_tabs_charsets_and_modes_continue ... ok test terminal::checks::tests::partial_csi_and_utf8_continue ... ok test terminal::checks::tests::pending_wrap_and_saved_wrap_continue_with_wide_cells ... ok test terminal::checks::tests::retained_alternate_saved_cursor_and_keyboard_stack_continue ... ok test terminal::checks::tests::saved_origin_survives_changed_margins ... ok test terminal::checks::tests::unfinished_sequence_over_frame_limit_fails_without_losing_runtime_state ... ok test terminal::checks::thumbnail_omits_unfinished_syntax_and_is_independently_repaintable ... ok test terminal::checks::thumbnail_serialization_scale_measurement ... ignored, release thumbnail allocation/serialization scale measurement test terminal::fidelity::fidelity_charset_mapped_wide_space_is_explicitly_rejected ... ok test terminal::fidelity::fidelity_cursor ... ok test terminal::fidelity::fidelity_diagnostic_fixture ... ignored, diagnostic replay of an explicitly selected fixture file test terminal::fidelity::fidelity_edge ... ok test terminal::fidelity::fidelity_extended_nightly ... ignored, nightly expanded differential corpus: 20,000 deterministic cases test terminal::fidelity::fidelity_extended_smoke ... ok test terminal::fidelity::fidelity_f1_rep ... ok test terminal::fidelity::fidelity_fresh_c_redraw_default_is_explicitly_rejected ... ok test terminal::fidelity::fidelity_handwritten ... ok test terminal::fidelity::fidelity_inherited_protection_off_mode_is_explicitly_rejected ... ok test terminal::fidelity::fidelity_iso_protection_does_not_keep_rep_scratch ... ok test terminal::fidelity::fidelity_iso_protection_erase ... ok test terminal::fidelity::fidelity_mouse_effective_fields_follow_order_independently_of_booleans ... ok test terminal::fidelity::fidelity_oracle_detects_hidden_state ... ok test terminal::fidelity::fidelity_oracle_observes_archived_cells_with_equal_active_screens ... ok test terminal::fidelity::fidelity_orphaned_spacer_head ... ok test terminal::fidelity::fidelity_prompt_resize_requires_explicit_rejection ... ok test terminal::fidelity::fidelity_recorded_corpus ... ok test terminal::fidelity::fidelity_rejects_unrepresentable_rep_without_mutating_source ... ok test terminal::fidelity::fidelity_saved_cursor_over_changed_edge ... ok test terminal::fidelity::fidelity_saved_modes_future_restore ... ok test terminal::fidelity::fidelity_screen_entry_consumes_inherited_shift_before_saving ... ok test terminal::fidelity::fidelity_seeded_nightly ... ignored, nightly differential corpus: 20,000 deterministic cases test terminal::fidelity::fidelity_seeded_smoke ... ok test terminal::fidelity::fidelity_semantic_validation_matches_exported_history_extent ... ok test terminal::fidelity::fidelity_single_shift_survives_rep_seed ... ok test terminal::fidelity::fidelity_snapshot_history_tail_contains_no_padding_rows ... ok test terminal::fidelity::fidelity_snapshot_resets_stale_viewer_color_overrides ... ok test terminal::fidelity::fidelity_spacer_head_attributes ... ok test terminal::fidelity::fidelity_variation_tail_attributes ... ok test terminal::fidelity::fidelity_variation_wrap_attributes ... ok test terminal::fidelity::fresh_captures::fidelity_fresh_real_program_captures ... ignored, manual fresh capture oracle; set VT_CAPTURE_DIR after real program capture test terminal::measurements::budgets::snapshot_200x60 ... ignored, performance measurement; run release on the perf host test terminal::measurements::memory::measured_terminal_rss ... ignored, RSS measurement; run this filter alone in a fresh release process test terminal::measurements::throughput::measured_parser ... ignored, VT observer and history throughput measurement test terminal::recovery_measurements::measured_full_ring_reconstruction ... ignored, release reconstruction measurement; old healthy handles permit repeated cleanup test terminal::resize_recovery::absent_ring_keeps_last_good_size_and_later_output_usable ... ok test terminal::resize_recovery::complete_ring_restores_screens_mouse_and_unfinished_syntax ... ok test terminal::resize_recovery::earlier_geometry_changes_require_approximation_even_with_origin_coverage ... ok test terminal::resize_recovery::ring_gap_requires_clean_approximate_recovery ... ok test terminal_native::allocation::resize_allocation_refusal_retires_native_handle ... ok test result: ok. 64 passed; 0 failed; 13 ignored; 0 measured; 0 filtered out; finished in 98.79s Running tests/detach.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/detach-c502cd554fb112ce) running 1 test test closed_standard_descriptors_become_dev_null ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.39s Running tests/mouse.rs (/home/kayg/.cache/codex-scratch/canvas-streams-review/target/debug/deps/mouse-523bfdef43cc46cb) running 1 test test faithful_snapshot_preserves_public_mouse_encoder_reports ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.48s Doc-tests infraternal_agent running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_mesh running 1 test test crates/infraternal-mesh/src/model.rs - model::LocalPrivateKey (line 20) - compile fail ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.11s Doc-tests infraternal_plugin_api running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_plugin_ssh running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_protocol running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_server running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_shim running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ==> cargo-deny warning[duplicate]: found 2 duplicate entries for crate 'base64' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:24:1 │ 24 │ ╭ base64 0.21.7 registry+https://github.com/rust-lang/crates.io-index 25 │ │ base64 0.22.1 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────────┘ lock entries │ ├ base64 v0.21.7 ├── base64urlsafedata v0.5.5 │ ├── webauthn-attestation-ca v0.5.5 │ │ └── webauthn-rs-core v0.5.5 │ │ └── webauthn-rs v0.5.5 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── webauthn-rs v0.5.5 (*) │ ├── webauthn-rs-core v0.5.5 (*) │ └── webauthn-rs-proto v0.5.5 │ └── webauthn-rs-core v0.5.5 (*) ├── webauthn-rs-core v0.5.5 (*) └── webauthn-rs-proto v0.5.5 (*) ├ base64 v0.22.1 ├── axum v0.8.9 │ └── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── infraternal-server v0.1.0 (*) └── sqlx-core v0.8.6 ├── sqlx v0.8.6 │ ├── infraternal v0.1.0 (*) │ └── infraternal-server v0.1.0 (*) ├── sqlx-macros v0.8.6 │ └── sqlx v0.8.6 (*) ├── sqlx-macros-core v0.8.6 │ └── sqlx-macros v0.8.6 (*) └── sqlx-sqlite v0.8.6 ├── sqlx v0.8.6 (*) └── sqlx-macros-core v0.8.6 (*) warning[duplicate]: found 3 duplicate entries for crate 'getrandom' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:88:1 │ 88 │ ╭ getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index 89 │ │ getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index 90 │ │ getrandom 0.4.3 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries │ ├ getrandom v0.2.17 └── rand_core v0.6.4 ├── bip39 v2.2.2 │ └── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── crypto-common v0.1.7 │ ├── aead v0.5.2 │ │ └── aes-gcm v0.10.3 │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── cipher v0.4.4 │ │ ├── aes v0.8.4 │ │ │ └── aes-gcm v0.10.3 (*) │ │ ├── aes-gcm v0.10.3 (*) │ │ └── ctr v0.9.2 │ │ └── aes-gcm v0.10.3 (*) │ ├── digest v0.10.7 │ │ ├── blake2 v0.10.6 │ │ │ └── argon2 v0.5.3 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── hmac v0.12.1 │ │ │ └── hkdf v0.12.4 │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ ├── sha1 v0.10.7 │ │ │ ├── axum v0.8.9 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── tungstenite v0.29.0 │ │ │ └── tokio-tungstenite v0.29.0 │ │ │ ├── axum v0.8.9 (*) │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ └── sha2 v0.10.9 │ │ ├── infraternal-server v0.1.0 (*) │ │ ├── sqlx-core v0.8.6 │ │ │ ├── sqlx v0.8.6 │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ ├── sqlx v0.8.6 (*) │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ └── sqlx-macros-core v0.8.6 (*) │ └── universal-hash v0.5.1 │ └── polyval v0.6.2 │ └── ghash v0.5.1 │ └── aes-gcm v0.10.3 (*) ├── password-hash v0.5.0 │ └── argon2 v0.5.3 (*) ├── rand v0.8.8 │ └── bip39 v2.2.2 (*) └── rand_chacha v0.3.1 └── rand v0.8.8 (*) ├ getrandom v0.3.4 └── rand_core v0.9.5 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 (*) └── webauthn-rs-core v0.5.5 (*) ├ getrandom v0.4.3 ├── jobserver v0.1.35 │ └── cc v1.6.0 │ ├── (build) libfuzzer-sys v0.4.13 │ │ └── infraternal-fuzz v0.1.0 │ ├── (build) libsqlite3-sys v0.30.1 │ │ └── sqlx-sqlite v0.8.6 │ │ ├── sqlx v0.8.6 │ │ │ ├── infraternal v0.1.0 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 (*) │ │ └── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── openssl-src v300.6.1+3.6.3 │ │ └── (build) openssl-sys v0.9.117 │ │ ├── axum-server v0.8.0 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── openssl v0.10.81 │ │ │ ├── axum-server v0.8.0 (*) │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ ├── tokio-openssl v0.6.5 │ │ │ │ └── axum-server v0.8.0 (*) │ │ │ ├── webauthn-attestation-ca v0.5.5 │ │ │ │ └── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── tokio-openssl v0.6.5 (*) │ │ ├── webauthn-attestation-ca v0.5.5 (*) │ │ └── webauthn-rs-core v0.5.5 (*) │ └── (build) openssl-sys v0.9.117 (*) └── uuid v1.27.0 ├── infraternal-agent v0.1.0 │ └── infraternal v0.1.0 (*) ├── infraternal-server v0.1.0 (*) ├── webauthn-attestation-ca v0.5.5 (*) ├── webauthn-rs v0.5.5 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'hashbrown' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:94:1 │ 94 │ ╭ hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index 95 │ │ hashbrown 0.17.1 registry+https://github.com/rust-lang/crates.io-index │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries │ ├ hashbrown v0.15.5 ├── hashlink v0.10.0 │ └── sqlx-core v0.8.6 │ ├── sqlx v0.8.6 │ │ ├── infraternal v0.1.0 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 (*) │ ├── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 │ ├── sqlx v0.8.6 (*) │ └── sqlx-macros-core v0.8.6 (*) └── sqlx-core v0.8.6 (*) ├ hashbrown v0.17.1 └── indexmap v2.14.2 ├── h2 v0.4.19 │ └── hyper v1.11.1 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── axum-server v0.8.0 │ │ └── infraternal-server v0.1.0 (*) │ └── hyper-util v0.1.21 │ ├── axum v0.8.9 (*) │ └── axum-server v0.8.0 (*) └── sqlx-core v0.8.6 ├── sqlx v0.8.6 │ ├── infraternal v0.1.0 (*) │ └── infraternal-server v0.1.0 (*) ├── sqlx-macros v0.8.6 │ └── sqlx v0.8.6 (*) ├── sqlx-macros-core v0.8.6 │ └── sqlx-macros v0.8.6 (*) └── sqlx-sqlite v0.8.6 ├── sqlx v0.8.6 (*) └── sqlx-macros-core v0.8.6 (*) warning[duplicate]: found 2 duplicate entries for crate 'r-efi' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:183:1 │ 183 │ ╭ r-efi 5.3.0 registry+https://github.com/rust-lang/crates.io-index 184 │ │ r-efi 6.0.0 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────┘ lock entries │ ├ r-efi v5.3.0 └── getrandom v0.3.4 └── rand_core v0.9.5 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 (*) └── webauthn-rs-core v0.5.5 (*) ├ r-efi v6.0.0 └── getrandom v0.4.3 ├── jobserver v0.1.35 │ └── cc v1.6.0 │ ├── (build) libfuzzer-sys v0.4.13 │ │ └── infraternal-fuzz v0.1.0 │ ├── (build) libsqlite3-sys v0.30.1 │ │ └── sqlx-sqlite v0.8.6 │ │ ├── sqlx v0.8.6 │ │ │ ├── infraternal v0.1.0 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 (*) │ │ └── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── openssl-src v300.6.1+3.6.3 │ │ └── (build) openssl-sys v0.9.117 │ │ ├── axum-server v0.8.0 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── openssl v0.10.81 │ │ │ ├── axum-server v0.8.0 (*) │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ ├── tokio-openssl v0.6.5 │ │ │ │ └── axum-server v0.8.0 (*) │ │ │ ├── webauthn-attestation-ca v0.5.5 │ │ │ │ └── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── tokio-openssl v0.6.5 (*) │ │ ├── webauthn-attestation-ca v0.5.5 (*) │ │ └── webauthn-rs-core v0.5.5 (*) │ └── (build) openssl-sys v0.9.117 (*) └── uuid v1.27.0 ├── infraternal-agent v0.1.0 │ └── infraternal v0.1.0 (*) ├── infraternal-server v0.1.0 (*) ├── webauthn-attestation-ca v0.5.5 (*) ├── webauthn-rs v0.5.5 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'rand' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:185:1 │ 185 │ ╭ rand 0.8.8 registry+https://github.com/rust-lang/crates.io-index 186 │ │ rand 0.9.5 registry+https://github.com/rust-lang/crates.io-index │ ╰────────────────────────────────────────────────────────────────┘ lock entries │ ├ rand v0.8.8 └── bip39 v2.2.2 └── infraternal-server v0.1.0 └── infraternal v0.1.0 ├ rand v0.9.5 ├── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── tungstenite v0.29.0 │ └── tokio-tungstenite v0.29.0 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 (*) │ └── (dev) infraternal-server v0.1.0 (*) └── webauthn-rs-core v0.5.5 └── webauthn-rs v0.5.5 └── infraternal-server v0.1.0 (*) warning[duplicate]: found 2 duplicate entries for crate 'rand_chacha' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:187:1 │ 187 │ ╭ rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index 188 │ │ rand_chacha 0.9.0 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────────────┘ lock entries │ ├ rand_chacha v0.3.1 └── rand v0.8.8 └── bip39 v2.2.2 └── infraternal-server v0.1.0 └── infraternal v0.1.0 ├ rand_chacha v0.9.0 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'rand_core' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:189:1 │ 189 │ ╭ rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index 190 │ │ rand_core 0.9.5 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries │ ├ rand_core v0.6.4 ├── bip39 v2.2.2 │ └── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── crypto-common v0.1.7 │ ├── aead v0.5.2 │ │ └── aes-gcm v0.10.3 │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── cipher v0.4.4 │ │ ├── aes v0.8.4 │ │ │ └── aes-gcm v0.10.3 (*) │ │ ├── aes-gcm v0.10.3 (*) │ │ └── ctr v0.9.2 │ │ └── aes-gcm v0.10.3 (*) │ ├── digest v0.10.7 │ │ ├── blake2 v0.10.6 │ │ │ └── argon2 v0.5.3 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── hmac v0.12.1 │ │ │ └── hkdf v0.12.4 │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ ├── sha1 v0.10.7 │ │ │ ├── axum v0.8.9 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── tungstenite v0.29.0 │ │ │ └── tokio-tungstenite v0.29.0 │ │ │ ├── axum v0.8.9 (*) │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ └── sha2 v0.10.9 │ │ ├── infraternal-server v0.1.0 (*) │ │ ├── sqlx-core v0.8.6 │ │ │ ├── sqlx v0.8.6 │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ ├── sqlx v0.8.6 (*) │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ └── sqlx-macros-core v0.8.6 (*) │ └── universal-hash v0.5.1 │ └── polyval v0.6.2 │ └── ghash v0.5.1 │ └── aes-gcm v0.10.3 (*) ├── password-hash v0.5.0 │ └── argon2 v0.5.3 (*) ├── rand v0.8.8 │ └── bip39 v2.2.2 (*) └── rand_chacha v0.3.1 └── rand v0.8.8 (*) ├ rand_core v0.9.5 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'syn' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:226:1 │ 226 │ ╭ syn 2.0.119 registry+https://github.com/rust-lang/crates.io-index 227 │ │ syn 3.0.6 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────┘ lock entries │ ├ syn v2.0.119 ├── asn1-rs-derive v0.5.1 │ └── asn1-rs v0.6.2 │ ├── der-parser v9.0.0 │ │ ├── webauthn-rs-core v0.5.5 │ │ │ └── webauthn-rs v0.5.5 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ └── x509-parser v0.16.0 │ │ └── webauthn-rs-core v0.5.5 (*) │ ├── oid-registry v0.7.1 │ │ └── x509-parser v0.16.0 (*) │ └── x509-parser v0.16.0 (*) ├── asn1-rs-impl v0.2.0 │ └── asn1-rs v0.6.2 (*) ├── openssl-macros v0.1.1 │ └── openssl v0.10.81 │ ├── axum-server v0.8.0 │ │ └── infraternal-server v0.1.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── tokio-openssl v0.6.5 │ │ └── axum-server v0.8.0 (*) │ ├── webauthn-attestation-ca v0.5.5 │ │ └── webauthn-rs-core v0.5.5 (*) │ └── webauthn-rs-core v0.5.5 (*) ├── sqlx-macros v0.8.6 │ └── sqlx v0.8.6 │ ├── infraternal v0.1.0 (*) │ └── infraternal-server v0.1.0 (*) ├── sqlx-macros-core v0.8.6 │ └── sqlx-macros v0.8.6 (*) ├── synstructure v0.13.2 │ └── asn1-rs-derive v0.5.1 (*) ├── thiserror-impl v1.0.69 │ └── thiserror v1.0.69 │ ├── asn1-rs v0.6.2 (*) │ ├── webauthn-rs-core v0.5.5 (*) │ └── x509-parser v0.16.0 (*) ├── tracing-attributes v0.1.31 │ └── tracing v0.1.44 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 (*) │ ├── axum-core v0.5.6 │ │ └── axum v0.8.9 (*) │ ├── h2 v0.4.19 │ │ └── hyper v1.11.1 │ │ ├── axum v0.8.9 (*) │ │ ├── axum-server v0.8.0 (*) │ │ └── hyper-util v0.1.21 │ │ ├── axum v0.8.9 (*) │ │ └── axum-server v0.8.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 │ │ ├── sqlx v0.8.6 (*) │ │ ├── sqlx-macros v0.8.6 (*) │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ └── sqlx-sqlite v0.8.6 │ │ ├── sqlx v0.8.6 (*) │ │ └── sqlx-macros-core v0.8.6 (*) │ ├── sqlx-sqlite v0.8.6 (*) │ ├── tower v0.5.3 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── tracing-subscriber v0.3.23 │ │ └── infraternal-server v0.1.0 (*) │ ├── webauthn-attestation-ca v0.5.5 (*) │ ├── webauthn-rs v0.5.5 (*) │ └── webauthn-rs-core v0.5.5 (*) └── zerocopy-derive v0.8.60 └── zerocopy v0.8.60 ├── half v2.7.1 │ ├── ciborium-ll v0.2.2 │ │ └── ciborium v0.2.2 │ │ └── criterion v0.7.0 │ │ └── (dev) infraternal-protocol v0.1.0 │ │ ├── infraternal-agent v0.1.0 │ │ │ └── infraternal v0.1.0 (*) │ │ ├── infraternal-fuzz v0.1.0 │ │ └── infraternal-server v0.1.0 (*) │ └── serde_cbor_2 v0.13.0 │ ├── infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 (*) └── ppv-lite86 v0.2.21 ├── rand_chacha v0.3.1 │ └── rand v0.8.8 │ └── bip39 v2.2.2 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 (*) │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 (*) └── webauthn-rs-core v0.5.5 (*) ├ syn v3.0.6 ├── clap_derive v4.6.7 │ └── clap v4.6.7 │ ├── criterion v0.7.0 │ │ └── (dev) infraternal-protocol v0.1.0 │ │ ├── infraternal-agent v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ ├── infraternal-fuzz v0.1.0 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 (*) │ └── infraternal v0.1.0 (*) ├── displaydoc v0.2.7 │ ├── asn1-rs v0.6.2 │ │ ├── der-parser v9.0.0 │ │ │ ├── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── x509-parser v0.16.0 │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── oid-registry v0.7.1 │ │ │ └── x509-parser v0.16.0 (*) │ │ └── x509-parser v0.16.0 (*) │ ├── der-parser v9.0.0 (*) │ ├── icu_collections v2.3.0 │ │ ├── icu_normalizer v2.3.0 │ │ │ └── idna_adapter v1.2.2 │ │ │ └── idna v1.1.0 │ │ │ └── url v2.5.8 │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ ├── sqlx-core v0.8.6 │ │ │ │ ├── sqlx v0.8.6 │ │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ │ ├── sqlx v0.8.6 (*) │ │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-sqlite v0.8.6 (*) │ │ │ ├── webauthn-rs v0.5.5 (*) │ │ │ ├── webauthn-rs-core v0.5.5 (*) │ │ │ └── webauthn-rs-proto v0.5.5 │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ └── icu_properties v2.3.0 │ │ └── idna_adapter v1.2.2 (*) │ ├── icu_locale_core v2.3.0 │ │ ├── icu_properties v2.3.0 (*) │ │ └── icu_provider v2.3.1 │ │ ├── icu_normalizer v2.3.0 (*) │ │ └── icu_properties v2.3.0 (*) │ ├── icu_properties v2.3.0 (*) │ ├── icu_provider v2.3.1 (*) │ ├── tinystr v0.8.4 │ │ └── icu_locale_core v2.3.0 (*) │ └── zerotrie v0.2.5 │ ├── icu_properties v2.3.0 (*) │ └── icu_provider v2.3.1 (*) ├── futures-macro v0.3.34 │ └── futures-util v0.3.34 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 (*) │ ├── futures-executor v0.3.34 │ │ └── sqlx-sqlite v0.8.6 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── js-sys v0.3.106 │ │ └── web-sys v0.3.106 │ │ └── plotters v0.3.7 │ │ └── criterion v0.7.0 (*) │ ├── sqlx-core v0.8.6 (*) │ ├── sqlx-sqlite v0.8.6 (*) │ ├── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── tower v0.5.3 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── tower-http v0.6.11 │ └── infraternal-server v0.1.0 (*) ├── serde_derive v1.0.229 │ ├── serde v1.0.229 │ │ ├── base64urlsafedata v0.5.5 │ │ │ ├── webauthn-attestation-ca v0.5.5 │ │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ │ ├── webauthn-rs v0.5.5 (*) │ │ │ ├── webauthn-rs-core v0.5.5 (*) │ │ │ └── webauthn-rs-proto v0.5.5 (*) │ │ ├── bip39 v2.2.2 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── ciborium v0.2.2 │ │ │ └── criterion v0.7.0 (*) │ │ ├── criterion v0.7.0 (*) │ │ ├── either v1.18.0 │ │ │ ├── axum-server v0.8.0 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── itertools v0.13.0 │ │ │ │ ├── criterion v0.7.0 (*) │ │ │ │ └── criterion-plot v0.6.0 │ │ │ │ └── criterion v0.7.0 (*) │ │ │ ├── rayon v1.12.0 │ │ │ │ └── criterion v0.7.0 (*) │ │ │ ├── sqlx-core v0.8.6 (*) │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ ├── infraternal-agent v0.1.0 (*) │ │ ├── infraternal-mesh v0.1.0 │ │ ├── infraternal-server v0.1.0 (*) │ │ ├── serde_cbor_2 v0.13.0 │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── serde_urlencoded v0.7.1 │ │ │ ├── axum v0.8.9 (*) │ │ │ └── sqlx-sqlite v0.8.6 (*) │ │ ├── sqlx-core v0.8.6 (*) │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ ├── sqlx-sqlite v0.8.6 (*) │ │ ├── tinytemplate v1.2.1 │ │ │ └── criterion v0.7.0 (*) │ │ ├── tracing-serde v0.2.0 │ │ │ └── tracing-subscriber v0.3.23 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── tracing-subscriber v0.3.23 (*) │ │ ├── url v2.5.8 (*) │ │ ├── webauthn-attestation-ca v0.5.5 (*) │ │ ├── webauthn-rs v0.5.5 (*) │ │ ├── webauthn-rs-core v0.5.5 (*) │ │ └── webauthn-rs-proto v0.5.5 (*) │ └── url v2.5.8 (*) ├── synstructure v0.14.0 │ ├── yoke-derive v0.8.4 │ │ └── yoke v0.8.3 │ │ ├── icu_collections v2.3.0 (*) │ │ ├── icu_provider v2.3.1 (*) │ │ ├── zerotrie v0.2.5 (*) │ │ └── zerovec v0.11.8 │ │ ├── icu_collections v2.3.0 (*) │ │ ├── icu_locale_core v2.3.0 (*) │ │ ├── icu_normalizer v2.3.0 (*) │ │ ├── icu_properties v2.3.0 (*) │ │ ├── icu_provider v2.3.1 (*) │ │ ├── potential_utf v0.1.6 │ │ │ └── icu_collections v2.3.0 (*) │ │ └── tinystr v0.8.4 (*) │ └── zerofrom-derive v0.1.8 │ └── zerofrom v0.1.8 │ ├── icu_collections v2.3.0 (*) │ ├── icu_provider v2.3.1 (*) │ ├── yoke v0.8.3 (*) │ ├── zerotrie v0.2.5 (*) │ └── zerovec v0.11.8 (*) ├── thiserror-impl v2.0.21 │ └── thiserror v2.0.21 │ ├── infraternal v0.1.0 (*) │ ├── infraternal-mesh v0.1.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 (*) │ ├── sqlx-sqlite v0.8.6 (*) │ └── tungstenite v0.29.0 │ └── tokio-tungstenite v0.29.0 (*) ├── tokio-macros v2.7.2 │ └── tokio v1.53.2 │ ├── axum v0.8.9 (*) │ ├── axum-server v0.8.0 (*) │ ├── fs-err v3.3.2 │ │ └── axum-server v0.8.0 (*) │ ├── h2 v0.4.19 │ │ └── hyper v1.11.1 │ │ ├── axum v0.8.9 (*) │ │ ├── axum-server v0.8.0 (*) │ │ └── hyper-util v0.1.21 │ │ ├── axum v0.8.9 (*) │ │ └── axum-server v0.8.0 (*) │ ├── hyper v1.11.1 (*) │ ├── hyper-util v0.1.21 (*) │ ├── infraternal v0.1.0 (*) │ ├── infraternal-agent v0.1.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 (*) │ ├── tokio-openssl v0.6.5 │ │ └── axum-server v0.8.0 (*) │ ├── tokio-stream v0.1.19 │ │ └── sqlx-core v0.8.6 (*) │ ├── tokio-tungstenite v0.29.0 (*) │ ├── tokio-util v0.7.19 │ │ ├── h2 v0.4.19 (*) │ │ └── tower-http v0.6.11 (*) │ ├── tower v0.5.3 (*) │ └── tower-http v0.6.11 (*) ├── wasm-bindgen-macro-support v0.2.129 │ └── wasm-bindgen-macro v0.2.129 │ └── wasm-bindgen v0.2.129 │ ├── js-sys v0.3.106 (*) │ ├── plotters v0.3.7 (*) │ └── web-sys v0.3.106 (*) ├── yoke-derive v0.8.4 (*) ├── zerofrom-derive v0.1.8 (*) └── zerovec-derive v0.11.6 └── zerovec v0.11.8 (*) warning[duplicate]: found 2 duplicate entries for crate 'synstructure' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:229:1 │ 229 │ ╭ synstructure 0.13.2 registry+https://github.com/rust-lang/crates.io-index 230 │ │ synstructure 0.14.0 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────────────┘ lock entries │ ├ synstructure v0.13.2 └── asn1-rs-derive v0.5.1 └── asn1-rs v0.6.2 ├── der-parser v9.0.0 │ ├── webauthn-rs-core v0.5.5 │ │ └── webauthn-rs v0.5.5 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ └── x509-parser v0.16.0 │ └── webauthn-rs-core v0.5.5 (*) ├── oid-registry v0.7.1 │ └── x509-parser v0.16.0 (*) └── x509-parser v0.16.0 (*) ├ synstructure v0.14.0 ├── yoke-derive v0.8.4 │ └── yoke v0.8.3 │ ├── icu_collections v2.3.0 │ │ ├── icu_normalizer v2.3.0 │ │ │ └── idna_adapter v1.2.2 │ │ │ └── idna v1.1.0 │ │ │ └── url v2.5.8 │ │ │ ├── infraternal-server v0.1.0 │ │ │ │ └── infraternal v0.1.0 │ │ │ ├── sqlx-core v0.8.6 │ │ │ │ ├── sqlx v0.8.6 │ │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ │ ├── sqlx v0.8.6 (*) │ │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-sqlite v0.8.6 (*) │ │ │ ├── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 (*) │ │ │ └── webauthn-rs-proto v0.5.5 │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ └── icu_properties v2.3.0 │ │ └── idna_adapter v1.2.2 (*) │ ├── icu_provider v2.3.1 │ │ ├── icu_normalizer v2.3.0 (*) │ │ └── icu_properties v2.3.0 (*) │ ├── zerotrie v0.2.5 │ │ ├── icu_properties v2.3.0 (*) │ │ └── icu_provider v2.3.1 (*) │ └── zerovec v0.11.8 │ ├── icu_collections v2.3.0 (*) │ ├── icu_locale_core v2.3.0 │ │ ├── icu_properties v2.3.0 (*) │ │ └── icu_provider v2.3.1 (*) │ ├── icu_normalizer v2.3.0 (*) │ ├── icu_properties v2.3.0 (*) │ ├── icu_provider v2.3.1 (*) │ ├── potential_utf v0.1.6 │ │ └── icu_collections v2.3.0 (*) │ └── tinystr v0.8.4 │ └── icu_locale_core v2.3.0 (*) └── zerofrom-derive v0.1.8 └── zerofrom v0.1.8 ├── icu_collections v2.3.0 (*) ├── icu_provider v2.3.1 (*) ├── yoke v0.8.3 (*) ├── zerotrie v0.2.5 (*) └── zerovec v0.11.8 (*) warning[duplicate]: found 2 duplicate entries for crate 'thiserror' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:231:1 │ 231 │ ╭ thiserror 1.0.69 registry+https://github.com/rust-lang/crates.io-index 232 │ │ thiserror 2.0.21 registry+https://github.com/rust-lang/crates.io-index │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries │ ├ thiserror v1.0.69 ├── asn1-rs v0.6.2 │ ├── der-parser v9.0.0 │ │ ├── webauthn-rs-core v0.5.5 │ │ │ └── webauthn-rs v0.5.5 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ └── x509-parser v0.16.0 │ │ └── webauthn-rs-core v0.5.5 (*) │ ├── oid-registry v0.7.1 │ │ └── x509-parser v0.16.0 (*) │ └── x509-parser v0.16.0 (*) ├── webauthn-rs-core v0.5.5 (*) └── x509-parser v0.16.0 (*) ├ thiserror v2.0.21 ├── infraternal v0.1.0 ├── infraternal-mesh v0.1.0 ├── infraternal-server v0.1.0 │ └── infraternal v0.1.0 (*) ├── sqlx-core v0.8.6 │ ├── sqlx v0.8.6 │ │ ├── infraternal v0.1.0 (*) │ │ └── infraternal-server v0.1.0 (*) │ ├── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 │ ├── sqlx v0.8.6 (*) │ └── sqlx-macros-core v0.8.6 (*) ├── sqlx-sqlite v0.8.6 (*) └── tungstenite v0.29.0 └── tokio-tungstenite v0.29.0 ├── axum v0.8.9 │ └── infraternal-server v0.1.0 (*) └── (dev) infraternal-server v0.1.0 (*) warning[duplicate]: found 2 duplicate entries for crate 'thiserror-impl' ┌─ /home/kayg/.cache/codex-scratch/canvas-streams-review/head/Cargo.lock:233:1 │ 233 │ ╭ thiserror-impl 1.0.69 registry+https://github.com/rust-lang/crates.io-index 234 │ │ thiserror-impl 2.0.21 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────────────────┘ lock entries │ ├ thiserror-impl v1.0.69 └── thiserror v1.0.69 ├── asn1-rs v0.6.2 │ ├── der-parser v9.0.0 │ │ ├── webauthn-rs-core v0.5.5 │ │ │ └── webauthn-rs v0.5.5 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ └── x509-parser v0.16.0 │ │ └── webauthn-rs-core v0.5.5 (*) │ ├── oid-registry v0.7.1 │ │ └── x509-parser v0.16.0 (*) │ └── x509-parser v0.16.0 (*) ├── webauthn-rs-core v0.5.5 (*) └── x509-parser v0.16.0 (*) ├ thiserror-impl v2.0.21 └── thiserror v2.0.21 ├── infraternal v0.1.0 ├── infraternal-mesh v0.1.0 ├── infraternal-server v0.1.0 │ └── infraternal v0.1.0 (*) ├── sqlx-core v0.8.6 │ ├── sqlx v0.8.6 │ │ ├── infraternal v0.1.0 (*) │ │ └── infraternal-server v0.1.0 (*) │ ├── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 │ ├── sqlx v0.8.6 (*) │ └── sqlx-macros-core v0.8.6 (*) ├── sqlx-sqlite v0.8.6 (*) └── tungstenite v0.29.0 └── tokio-tungstenite v0.29.0 ├── axum v0.8.9 │ └── infraternal-server v0.1.0 (*) └── (dev) infraternal-server v0.1.0 (*) advisories ok, bans ok, licenses ok, sources ok ==> static builds Finished `release` profile [optimized] target(s) in 0.95s /home/kayg/.cache/codex-scratch/canvas-streams-review/target/x86_64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped PT_INTERP: absent; size: 15985424 bytes (baseline 16142672 + allowance 262144 = max 16404816) Finished `release` profile [optimized] target(s) in 0.73s /home/kayg/.cache/codex-scratch/canvas-streams-review/target/aarch64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped PT_INTERP: absent; size: 13439056 bytes (baseline 13555672 + allowance 262144 = max 13817816) server subcommand: exit 2, not implemented agent subcommand: exit 2, not implemented +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ==> Vendored Ghostty artifact checksums dist/ghostty-web.js: OK dist/ghostty-vt.wasm: OK dist/index.d.ts: OK ==> Shared UI frame queue bun test v1.4.2 (744846f84) src/frame-batch.test.ts: (pass) many owners share one frame and repeated requests coalesce [3.01ms] (pass) cancel releases idle work and a callback can request only the next frame [0.18ms] (pass) a frame yields remaining owners after its work budget [0.13ms] (pass) older owners keep their order when a yielding callback queues newer work [0.10ms] (pass) one callback failure surfaces without stranding another owner [1.14ms] 5 pass 0 fail 18 expect() calls Ran 5 tests across 1 file. [30.00ms] ==> TypeScript protocol compiler ==> Tracer compiler, precompression and bundle transfer budget bun install v1.4.2 (744846f84) Checked 38 installs across 69 packages (no changes) [26.00ms] $ bun x tsc --project tsconfig.json bun test v1.4.2 (744846f84) browser-build.test.ts: (pass) the browser renderer has no unresolved Vite Node-file shim request [45.80ms] precompress.test.ts: (pass) text sidecars round-trip deterministically; compressed formats remain identity [50.24ms] redact-reporter.test.ts: (pass) request failure messages and stacks reach later reporters without sensitive headers [8.19ms] (pass) worker errors and non-Error values receive the same header filtering [0.17ms] (pass) terminal styling cannot hide request headers from filtering [0.04ms] test/recovery-ui.test.ts: (pass) compiled recovery UI mode off obeys its URL boundary [6.76ms] (pass) compiled recovery UI mode preview obeys its URL boundary [2.46ms] (pass) compiled recovery UI mode 1 obeys its URL boundary [1.99ms] test/recovery-crypto.test.ts: (pass) HKDF siblings match independent implementation and bind unwrap to domain, account, kind and version [26.45ms] (pass) 100 repeated wrapping operations generate independent salts and nonces [19.86ms] test/recovery-wait.test.ts: (pass) server remaining wait 0s is accepted through the capability policy maximum [9.16ms] (pass) server remaining wait 86400s is accepted through the capability policy maximum [1.17ms] (pass) server remaining wait 90000s is accepted through the capability policy maximum [0.67ms] (pass) server remaining wait 172800s is accepted through the capability policy maximum [0.67ms] (pass) malformed or excessive remaining wait -1 is denied [1.08ms] (pass) malformed or excessive remaining wait 0.5 is denied [1.05ms] (pass) malformed or excessive remaining wait 172801 is denied [0.95ms] (pass) malformed or excessive remaining wait 9007199254740992 is denied [1.29ms] (pass) malformed or excessive remaining wait 90000 is denied [0.86ms] test/recovery-rotation.test.ts: (pass) signed-in rotation sends only a local envelope and verifier after acknowledgement [16.14ms] (pass) abandoned word acknowledgement uploads nothing [2.02ms] (pass) settled acknowledgement cannot upload later (dismissed) [8.03ms] (pass) settled acknowledgement cannot upload later (no acknowledgement) [2.61ms] test/canvas-connection.test.ts: (pass) 12 window writers use one WebSocket, route calls independently and resume their own cursors [184.52ms] (pass) unnegotiated visibility is rejected before transmission without disconnecting live siblings [7.48ms] (pass) shared SSH session opening respects the server's sixty-second connect budget [11011.52ms] (pass) a hidden window created before legacy greeting fails locally while its live sibling attaches [7.55ms] (pass) a live mode selected before the first greeting needs no preview recovery capability [17.87ms] 28 pass 0 fail 437 expect() calls Ran 28 tests across 8 files. [11.52s] $ bun run build.ts built main.js, chunk-39rcg6ed.js, chunk-jm7rf2y8.js, chunk-wtka05eg.js, chunk-ez799f1c.js, canvas-socket.worker.js, backdrop.worker.js, faulty-terminal.worker.js, chunk-gcgc2eze.js, chunk-4ptbtsw2.js, chunk-csa187yf.js, chunk-axbkkqp1.js faulty-terminal.worker.js: identity=1084 gzip=559 brotli=477 bytes backdrop.worker.js: identity=241 gzip=209 brotli=158 bytes chunk-wtka05eg.js: identity=6464 gzip=3106 brotli=2806 bytes chunk-jm7rf2y8.js: identity=8373 gzip=3573 brotli=3178 bytes chunk-39rcg6ed.js: identity=11879 gzip=3749 brotli=3325 bytes chunk-axbkkqp1.js: identity=90 gzip=90 brotli=78 bytes chunk-gcgc2eze.js: identity=9807 gzip=4011 brotli=3450 bytes chunk-ez799f1c.js: identity=720024 gzip=208425 brotli=169021 bytes chunk-csa187yf.js: identity=24649 gzip=8379 brotli=7458 bytes chunk-4ptbtsw2.js: identity=185 gzip=151 brotli=129 bytes main.js: identity=87892 gzip=32834 brotli=28544 bytes canvas-socket.worker.js: identity=2134 gzip=1006 brotli=901 bytes JavaScript transfer: identity=872822 gzip=266092/307200 brotli=219525/256000 bytes fonts/MapleMonoNF-Italic.latin.woff2: identity=37148 gzip=37148 brotli=37148 bytes fonts/MapleMonoNF-Medium.latin.woff2: identity=33904 gzip=33904 brotli=33904 bytes fonts/MapleMonoNF-Regular.latin.woff2: identity=32852 gzip=32852 brotli=32852 bytes fonts/MapleMonoNF-SemiBold.latin.woff2: identity=34160 gzip=34160 brotli=34160 bytes fonts/MapleMonoNF-SemiBoldItalic.latin.woff2: identity=38228 gzip=38228 brotli=38228 bytes fonts/MapleMonoNF-symbols.woff2: identity=223748 gzip=223748 brotli=223748 bytes Font transfer: critical=32852/36864 latin=176292/184320 symbols=223748/235520 bytes ==> Rust stream oracle (for the differential test) ==> TypeScript protocol tests bun test v1.4.2 (744846f84) src/codec.test.ts: (pass) wire protocol golden vectors > encodes and decodes each frame exactly as the shared manifest describes [20.45ms] (pass) wire protocol golden vectors > returns borrowed payload views and writes into reusable buffers [0.30ms] (pass) wire protocol golden vectors > decodes muxed messages split across WebSocket messages [1.11ms] (pass) wire protocol golden vectors > rejects oversized, non-canonical, unknown, and malformed frame bytes [0.34ms] (pass) split mux header preserves trailing Close [0.38ms] (pass) visibility layouts reject unknown modes, reversed ranges and reserved flags [0.21ms] src/stream.test.ts: stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [4892.64ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [11.05ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [4.95s] ````
Author
Owner

Repair round 3 started on canvas-streams, base badbfc9064. Read #107 and parent #89 history and review2 findings. Merge local dev 63b1f10e first, import review regressions, confirm CS-R4/R3/R5 failures, fix separately. Corrected real-window benchmark and paired dev/head latency measurements run locally on infraternal-dev under CPUWeight=10000. No push/deploy.

Repair round 3 started on canvas-streams, base badbfc90642c4a99bbb6d78b129a2146bbba18b6. Read #107 and parent #89 history and review2 findings. Merge local dev 63b1f10e first, import review regressions, confirm CS-R4/R3/R5 failures, fix separately. Corrected real-window benchmark and paired dev/head latency measurements run locally on infraternal-dev under CPUWeight=10000. No push/deploy.
Author
Owner

Merge dev 63b1f10e conflicts in terminal.ts (product MuxConnection/font/mobile changes versus visibility/bounded rendering), build.ts worker entrypoint, ts gate coverage, and snapshot oracle. Resolved by retaining dev product API/mobile/font behavior, lane CanvasConnection streams and bounded renderer, both gate cohorts, and dev #118 credit observation. TypeScript check passes; production Chromium stream Close 1013/1 cohort 2/2 passes in 25.7s, port4507, RTT300±30. Full fast gate warming private target cache.

Merge dev 63b1f10e conflicts in terminal.ts (product MuxConnection/font/mobile changes versus visibility/bounded rendering), build.ts worker entrypoint, ts gate coverage, and snapshot oracle. Resolved by retaining dev product API/mobile/font behavior, lane CanvasConnection streams and bounded renderer, both gate cohorts, and dev #118 credit observation. TypeScript check passes; production Chromium stream Close 1013/1 cohort 2/2 passes in 25.7s, port4507, RTT300±30. Full fast gate warming private target cache.
Author
Owner

Merge verification setup finding: fast test initial_attach_requires_explicit_credit_before_replay failed before spawning the engine: scripts/verify-agent-attach-credit.py:17 FileNotFoundError target/ac3957497. CARGO_TARGET_DIR was private scratch but worktree target/ was absent. Added ignored target symlink to own private build directory; focused unchanged probe rerunning. Other completed Rust rows pass; static cold builds remain active. Browser cohort12/14; focused disposal retry1/1 and closing-input recheck pass. No production deadline/budget changes.

Merge verification setup finding: fast test initial_attach_requires_explicit_credit_before_replay failed before spawning the engine: scripts/verify-agent-attach-credit.py:17 FileNotFoundError target/ac3957497. CARGO_TARGET_DIR was private scratch but worktree target/ was absent. Added ignored target symlink to own private build directory; focused unchanged probe rerunning. Other completed Rust rows pass; static cold builds remain active. Browser cohort12/14; focused disposal retry1/1 and closing-input recheck pass. No production deadline/budget changes.
Author
Owner

CS-R5 repair contract clarification: existing permanent capability-refusal Close1003 (already used by server mixed-version visibility) will also identify surviving shim visibility refusal. Retrying codes1/1013 remain transient queue pressure. Browser remembers unsupported visibility for that stream across reconnects and reattaches once in ordinary live mode without sending further hints; sibling streams remain unchanged. No wire layout, capability bit, parser, engine, timeout or budget change. Native regression must observe one permanent refusal; renderer regression will prove continued echo and no subsequent Visibility after new mode requests.

CS-R5 repair contract clarification: existing permanent capability-refusal Close1003 (already used by server mixed-version visibility) will also identify surviving shim visibility refusal. Retrying codes1/1013 remain transient queue pressure. Browser remembers unsupported visibility for that stream across reconnects and reattaches once in ordinary live mode without sending further hints; sibling streams remain unchanged. No wire layout, capability bit, parser, engine, timeout or budget change. Native regression must observe one permanent refusal; renderer regression will prove continued echo and no subsequent Visibility after new mode requests.
Author
Owner

Merge gate finding: twelve_real_streams_restore_independent_modes_and_cursors failed at scripts/verify-canvas-streams.py:98: live not yet received. The preceding until predicate waits for all input Acks, hidden markers and thumbnail, but not live Output. Input Ack confirms PTY write, not echo delivery. Keep every existing assertion and the 30s bound; include the live marker in that readiness predicate, as the existing READY/RESUME/LIVE phases already do. Integration-only oracle ordering fix will be recorded in the merge commit. Prior merge fast failure was auth expired_handshake_releases_user_permits; detached dev exact test passes0.73s, so no #118 exoneration claimed. Frontend gates pass with zero protocol divergences.

Merge gate finding: twelve_real_streams_restore_independent_modes_and_cursors failed at scripts/verify-canvas-streams.py:98: live <WINDOW-02> not yet received. The preceding until predicate waits for all input Acks, hidden markers and thumbnail, but not live Output. Input Ack confirms PTY write, not echo delivery. Keep every existing assertion and the 30s bound; include the live marker in that readiness predicate, as the existing READY/RESUME/LIVE phases already do. Integration-only oracle ordering fix will be recorded in the merge commit. Prior merge fast failure was auth expired_handshake_releases_user_permits; detached dev exact test passes0.73s, so no #118 exoneration claimed. Frontend gates pass with zero protocol divergences.
Author
Owner

Merge step complete: 5c5e9412, dev63b1f10e merged into canvas-streams. Integration reconciles Mux product API/mobile/fonts with Canvas visibility/bounded renderer; twelve-stream oracle now waits for live echo rather than only PTY Ack. Full scripts/verify fast exit0, every row passes. Static x86_64 15,981,072bytes / aarch64 13,439,056bytes, both no PT_INTERP. Critical JS gzip289,870/307,200 and brotli241,009/256,000; deferred49,860/51,200 and43,635/45,056. Imported CS-R4 tests2300da98/51dfb536; reproduce next. Full gate retained in scratch merge-fast-ready.log; final durable evidence will include it.

Merge step complete: 5c5e9412, dev63b1f10e merged into canvas-streams. Integration reconciles Mux product API/mobile/fonts with Canvas visibility/bounded renderer; twelve-stream oracle now waits for live echo rather than only PTY Ack. Full scripts/verify fast exit0, every row passes. Static x86_64 15,981,072bytes / aarch64 13,439,056bytes, both no PT_INTERP. Critical JS gzip289,870/307,200 and brotli241,009/256,000; deferred49,860/51,200 and43,635/45,056. Imported CS-R4 tests2300da98/51dfb536; reproduce next. Full gate retained in scratch merge-fast-ready.log; final durable evidence will include it.
Author
Owner

CS-R4 reproduced after importing fb603d54 and 6e6d5f25: actual benchmark mount gives primary host 1240x680 vs grid slot 408x164 at 1280x720. Production screenshot: scratch/r4-red/benchmark-primary-layout.png (will retain with final evidence). Fix uses bounded relative flex hosts consistently for all twelve windows and persistent headings. Primary regression now passes (1/1, 17.6s); strengthening it to check all twelve canvas bounds. Corrected before measurement uses badbfc90 frontend and current real twelve-PTY fixture, 300 +/-30 ms RTT, CPUWeight=10000, load at start 15.48 16.05 17.96. Run-2 146/40 ms/s remains invalid; new numbers pending. D41/D183 unchanged.

CS-R4 reproduced after importing fb603d54 and 6e6d5f25: actual benchmark mount gives primary host 1240x680 vs grid slot 408x164 at 1280x720. Production screenshot: scratch/r4-red/benchmark-primary-layout.png (will retain with final evidence). Fix uses bounded relative flex hosts consistently for all twelve windows and persistent headings. Primary regression now passes (1/1, 17.6s); strengthening it to check all twelve canvas bounds. Corrected before measurement uses badbfc90 frontend and current real twelve-PTY fixture, 300 +/-30 ms RTT, CPUWeight=10000, load at start 15.48 16.05 17.96. Run-2 146/40 ms/s remains invalid; new numbers pending. D41/D183 unchanged.
Author
Owner

CS-R3 reproduced with imported 8895e104/48120d38 regression against a production Chromium build and real worker transport. Exact pending-byte precondition: 2097152. dispose outcome: {"buffered":2097152,"error":"Error: canvas send queue is full","retained":true,"rendererReleased":false}. Evidence: scratch/r4-green-r3-red.log. The strengthened CS-R4 regression checks all twelve host/canvas bounds and passes. Corrected badbfc90 before-run discarded all four pairs (socket epochs 5/8,13/14,17/19,22/23); load rose 15.48 to 56.99. Those CPU results are explicitly invalid, not baseline acceptance. Next: local cleanup before best-effort wire Close, retaining existing shared send bound and healthy sibling socket.

CS-R3 reproduced with imported 8895e104/48120d38 regression against a production Chromium build and real worker transport. Exact pending-byte precondition: 2097152. dispose outcome: {"buffered":2097152,"error":"Error: canvas send queue is full","retained":true,"rendererReleased":false}. Evidence: scratch/r4-green-r3-red.log. The strengthened CS-R4 regression checks all twelve host/canvas bounds and passes. Corrected badbfc90 before-run discarded all four pairs (socket epochs 5/8,13/14,17/19,22/23); load rose 15.48 to 56.99. Those CPU results are explicitly invalid, not baseline acceptance. Next: local cleanup before best-effort wire Close, retaining existing shared send bound and healthy sibling socket.
Author
Owner

Completed CS-R4 layout repair: f0dafe17. Imported review evidence/acceptance commits as 61aef3ec, ecd236e0, d75937dd. Actual mounting regression now verifies all twelve host/canvas bounds and passes; production screenshot r4-green/benchmark-primary-layout.png. scripts/verify fast exits 0 (scratch/r4-fast-ready.log): protocol differential 155 streams / 12906 schedules, 38804 assertions, zero failures; static x86_64 15981072 B, aarch64 13439056 B, both without PT_INTERP. First gate caught only two TypeScript unchecked array accesses in new assertions; corrected before the passing gate. Corrected before-run rejected four socket-changing pairs; no accepted CPU baseline yet. Short head profile is running with unchanged 300 +/-30ms RTT and CPUWeight=10000; acceptance 100/30 remains pending. CS-R3 will release local writer state before a bounded best-effort Close.

Completed CS-R4 layout repair: f0dafe17. Imported review evidence/acceptance commits as 61aef3ec, ecd236e0, d75937dd. Actual mounting regression now verifies all twelve host/canvas bounds and passes; production screenshot r4-green/benchmark-primary-layout.png. scripts/verify fast exits 0 (scratch/r4-fast-ready.log): protocol differential 155 streams / 12906 schedules, 38804 assertions, zero failures; static x86_64 15981072 B, aarch64 13439056 B, both without PT_INTERP. First gate caught only two TypeScript unchecked array accesses in new assertions; corrected before the passing gate. Corrected before-run rejected four socket-changing pairs; no accepted CPU baseline yet. Short head profile is running with unchanged 300 +/-30ms RTT and CPUWeight=10000; acceptance 100/30 remains pending. CS-R3 will release local writer state before a bounded best-effort Close.
Author
Owner

CS-R3 red-to-green: real worker pending send window remains exactly 2097152 B. Before: dispose threw, writer retained=true, rendererReleased=false. After local retirement before best-effort Close: no exception, writer removed, renderer disposed; production browser regression passes 1/1 (8.1s test, 15.6s total) under CPUWeight=10000. Two initial unweighted attempts did not reach the assertion (startup under load >50, then build starvation); retained separately, not counted as behavioral verification. scripts/verify fast running with RUST_TEST_THREADS=2. The corrected head diagnostic also rejected all four reconnecting pairs; profiles/trace retained but no CPU acceptance claim.

CS-R3 red-to-green: real worker pending send window remains exactly 2097152 B. Before: dispose threw, writer retained=true, rendererReleased=false. After local retirement before best-effort Close: no exception, writer removed, renderer disposed; production browser regression passes 1/1 (8.1s test, 15.6s total) under CPUWeight=10000. Two initial unweighted attempts did not reach the assertion (startup under load >50, then build starvation); retained separately, not counted as behavioral verification. scripts/verify fast running with RUST_TEST_THREADS=2. The corrected head diagnostic also rejected all four reconnecting pairs; profiles/trace retained but no CPU acceptance claim.
Author
Owner

CS-R3 committed 1742f2bd after scripts/verify fast exit 0 (r3-fast.log); exact 2097152 B pressure regression and five connection tests pass. Final review regression imported as ffcbb5a4; all eight review-canvas-streams commits are now imported.

CS-R5 reproduced: native real shim/PTY refusal codes [1,1,1]; production worker client with generic server reason fails to reattach after Close1003. Saved pre-fix merged bundle also reproduces main-thread transport failure. Fix assigns existing permanent Close1003 only to unsupported visibility, preserving transient 1/1013; remembers refusal per writer across socket epochs; reattaches live once, suppressing future hints. Reasons are not inspected because websocket.rs forwards generic attachment-ended text.

Green: worker and main-thread browser paths pass 2/2 (26.2s), continued input and reconnect tested, exactly one hint observed; real native test codes [1003], live fallback acknowledged_bytes=29, executed_marker=True. Transient-code cases pass too. Fixture resume handshake corrected to one Welcome; new native echo extension initially reversed Input/Output tags, corrected before passing. TS check exits 0. Full fast gate running. No parser layout, engine, auth deadline, send bound, or performance budget changed (D17/D41/D183).

CS-R3 committed 1742f2bd after scripts/verify fast exit 0 (r3-fast.log); exact 2097152 B pressure regression and five connection tests pass. Final review regression imported as ffcbb5a4; all eight review-canvas-streams commits are now imported. CS-R5 reproduced: native real shim/PTY refusal codes [1,1,1]; production worker client with generic server reason fails to reattach after Close1003. Saved pre-fix merged bundle also reproduces main-thread transport failure. Fix assigns existing permanent Close1003 only to unsupported visibility, preserving transient 1/1013; remembers refusal per writer across socket epochs; reattaches live once, suppressing future hints. Reasons are not inspected because websocket.rs forwards generic attachment-ended text. Green: worker and main-thread browser paths pass 2/2 (26.2s), continued input and reconnect tested, exactly one hint observed; real native test codes [1003], live fallback acknowledged_bytes=29, executed_marker=True. Transient-code cases pass too. Fixture resume handshake corrected to one Welcome; new native echo extension initially reversed Input/Output tags, corrected before passing. TS check exits 0. Full fast gate running. No parser layout, engine, auth deadline, send bound, or performance budget changed (D17/D41/D183).
Author
Owner

CS-R5 completed: b1c75bd9; scripts/verify fast exit 0 (r5-fast.log). Native real-shim regression: one refusal [1003], then 29 input bytes acknowledged and executed live without a hint. Production worker and main-thread clients: both pass continued input and reconnect, exactly one visibility hint each. Existing transient Close1/1013 browser cases also pass. Static x86_64 15981136 B, aarch64 13439056 B, no PT_INTERP; protocol differential 155 streams / 12906 schedules / 38804 assertions, zero failures.

Corrected scale repeat is running original badbfc90 frontend on the same current real server/daemon fixture used for the after comparison. All twelve canvases are 424x180, hosts about459x211, slots about461x234 at1440x1000; old full-grid primary is eliminated. RTT300 +/-30ms, CPUWeight10000, load now about12.7. No accepted before/after CPU pair or latency comparison yet. Builds stopped during measurements. Prepared focused real-PTY browser latency driver using the existing production key probe.

CS-R5 completed: b1c75bd9; scripts/verify fast exit 0 (r5-fast.log). Native real-shim regression: one refusal [1003], then 29 input bytes acknowledged and executed live without a hint. Production worker and main-thread clients: both pass continued input and reconnect, exactly one visibility hint each. Existing transient Close1/1013 browser cases also pass. Static x86_64 15981136 B, aarch64 13439056 B, no PT_INTERP; protocol differential 155 streams / 12906 schedules / 38804 assertions, zero failures. Corrected scale repeat is running original badbfc90 frontend on the same current real server/daemon fixture used for the after comparison. All twelve canvases are 424x180, hosts about459x211, slots about461x234 at1440x1000; old full-grid primary is eliminated. RTT300 +/-30ms, CPUWeight10000, load now about12.7. No accepted before/after CPU pair or latency comparison yet. Builds stopped during measurements. Prepared focused real-PTY browser latency driver using the existing production key probe.
Author
Owner

Corrected before comparison (badbfc90 frontend, same current backend for both): accepted 30s pair on epoch5, all12 connected: 118.916 /41.961 main-thread ms/s at loads13.53/15.73/21.21 and14.70/15.72/21.00; live payload306496 B/s vs requested307200 B/s. Full correctness driver exits0. First repaired-head30s guard rejected four reconnecting pairs; no after acceptance yet.

Short8s diagnostic without method/frame/CPU observers accepts continuous twelve-window pair:147.127/41.449 ms/s at load about22 (auth-only marker enabled). Optional wire observation separately shows Close1011 on control stream. New test-only opt-in fixed marker confirms3 authority reads exceeded existing25ms limit during that run; auth deadline/policy unchanged. Profiling shows text drawing and native browser frame work alongside VT work.

Next optimization candidate stays within the pinned renderer: skip a fully dirty but exactly unchanged plain viewport, with bounded exact packed-cell comparisons, stable cursor/theme, no selection/hover/scrollbar, and invalidation on direct drawing, clear/resize/dispose. Complex text/styles retain original path; explicit repaint always draws. No engine or protocol/API choice/change. Measure CPU and keystrokes before acceptance.

Corrected before comparison (badbfc90 frontend, same current backend for both): accepted 30s pair on epoch5, all12 connected: 118.916 /41.961 main-thread ms/s at loads13.53/15.73/21.21 and14.70/15.72/21.00; live payload306496 B/s vs requested307200 B/s. Full correctness driver exits0. First repaired-head30s guard rejected four reconnecting pairs; no after acceptance yet. Short8s diagnostic without method/frame/CPU observers accepts continuous twelve-window pair:147.127/41.449 ms/s at load about22 (auth-only marker enabled). Optional wire observation separately shows Close1011 on control stream. New test-only opt-in fixed marker confirms3 authority reads exceeded existing25ms limit during that run; auth deadline/policy unchanged. Profiling shows text drawing and native browser frame work alongside VT work. Next optimization candidate stays within the pinned renderer: skip a fully dirty but exactly unchanged plain viewport, with bounded exact packed-cell comparisons, stable cursor/theme, no selection/hover/scrollbar, and invalidation on direct drawing, clear/resize/dispose. Complex text/styles retain original path; explicit repaint always draws. No engine or protocol/API choice/change. Measure CPU and keystrokes before acceptance.
Author
Owner

Renderer profile follow-up: existing draw path paints a fully dirty ASCII viewport even when all visible cells/cursor are identical. New regression fails on current vendor (expected 72 canvas calls, received 109); proposed pinned-source change passes 11 assertions. Exact cache uses 3 uint32/cell, capped at 8192 cells = 96 KiB/renderer, 32 renderers = 3 MiB; actual 53x10 cohort = 6,360 B/renderer, 12 = 76,320 B. No hashes, parser/credit bypass, new engine or wire change. Explicit redraw/resize, cursor changes, selection/hover/scrollbar and styled/complex text retain existing rendering. Production pixel comparisons and corrected 30s perf guard still pending; no budget success claimed.

Renderer profile follow-up: existing draw path paints a fully dirty ASCII viewport even when all visible cells/cursor are identical. New regression fails on current vendor (expected 72 canvas calls, received 109); proposed pinned-source change passes 11 assertions. Exact cache uses 3 uint32/cell, capped at 8192 cells = 96 KiB/renderer, 32 renderers = 3 MiB; actual 53x10 cohort = 6,360 B/renderer, 12 = 76,320 B. No hashes, parser/credit bypass, new engine or wire change. Explicit redraw/resize, cursor changes, selection/hover/scrollbar and styled/complex text retain existing rendering. Production pixel comparisons and corrected 30s perf guard still pending; no budget success claimed.
Author
Owner

Completed diagnostic step e6422d64: test-only opt-in CANVAS_AUTH_PROBE emits only CANVAS_AUTHORITY_READ_TIMEOUT; observed 3 markers in the earlier real-fixture diagnostic. Production deadline/auth policy unchanged. scripts/verify fast exit 0: all six Rust gate rows PASS; protocol differential 155 streams / 12,906 schedules / 38,804 assertions, 8 pass / 0 fail. Static binaries 15,981,136 B x86_64 and 13,439,056 B aarch64, PT_INTERP absent. Raw gate: scratch canvas-streams/auth-probe-fast.log (will be retained in repair evidence).
Added standalone renderer cache regressions; production Chromium pixel test fails on unchanged current vendor at skipped=false, as expected. Cache patch not yet installed; no performance success claimed.

Completed diagnostic step e6422d64: test-only opt-in CANVAS_AUTH_PROBE emits only CANVAS_AUTHORITY_READ_TIMEOUT; observed 3 markers in the earlier real-fixture diagnostic. Production deadline/auth policy unchanged. scripts/verify fast exit 0: all six Rust gate rows PASS; protocol differential 155 streams / 12,906 schedules / 38,804 assertions, 8 pass / 0 fail. Static binaries 15,981,136 B x86_64 and 13,439,056 B aarch64, PT_INTERP absent. Raw gate: scratch canvas-streams/auth-probe-fast.log (will be retained in repair evidence). Added standalone renderer cache regressions; production Chromium pixel test fails on unchanged current vendor at skipped=false, as expected. Cache patch not yet installed; no performance success claimed.
Author
Owner

Renderer regression preparation: cache-tests-fast.log ended with exit 143 during vt_reconnect, without a failure assertion or gate summary. Cause not established; full gate rerun in cache-tests-fast-retry.log is in progress. Existing production bundle remains unchanged. Unit regression: 0 pass / 1 fail (expected 72 canvas calls, received 109); Chromium pixel regression: 0 pass / 1 fail, expected skipped=true, received false. Both expose repeated drawing before the proposed fix.

Renderer regression preparation: cache-tests-fast.log ended with exit 143 during vt_reconnect, without a failure assertion or gate summary. Cause not established; full gate rerun in cache-tests-fast-retry.log is in progress. Existing production bundle remains unchanged. Unit regression: 0 pass / 1 fail (expected 72 canvas calls, received 109); Chromium pixel regression: 0 pass / 1 fail, expected skipped=true, received false. Both expose repeated drawing before the proposed fix.
Author
Owner

Completed regression step 81afc431: isolated renderer-call and production Chromium pixel tests both reproduced unchanged-viewport redraws on the prior bundle. Full serialized scripts/verify fast exit 0, six Rust rows PASS, TS compiler and production transfer gates passed, differential 155 streams / 12,906 schedules / 38,804 assertions (8 pass / 0 fail). Earlier interrupted and failed runs retained; isolated dev expired-handshake baseline passed in 0.82s, so no #118 exception taken.
Strict pinned vendor rebuild completed in scratch; WASM SHA256 remains 5335687263d92325b6736201a107a46cf324a3503f94ac336bf6aa0a184a8d4d. Installed exact bounded renderer cache and added its unit regression to the fast gate. Unit now 1 pass / 0 fail, 11 assertions; Chromium pixels and corrected 30s budgets pending.

Completed regression step 81afc431: isolated renderer-call and production Chromium pixel tests both reproduced unchanged-viewport redraws on the prior bundle. Full serialized scripts/verify fast exit 0, six Rust rows PASS, TS compiler and production transfer gates passed, differential 155 streams / 12,906 schedules / 38,804 assertions (8 pass / 0 fail). Earlier interrupted and failed runs retained; isolated dev expired-handshake baseline passed in 0.82s, so no #118 exception taken. Strict pinned vendor rebuild completed in scratch; WASM SHA256 remains 5335687263d92325b6736201a107a46cf324a3503f94ac336bf6aa0a184a8d4d. Installed exact bounded renderer cache and added its unit regression to the fast gate. Unit now 1 pass / 0 fail, 11 assertions; Chromium pixels and corrected 30s budgets pending.
Author
Owner

Corrected 30s production acceptance guard PASS (2 pass / 0 fail): twelve real PTYs, every canvas 424x180 in its own window, 300±30 ms RTT, profiling/work/network observers disabled. First attempt accepted: all 12 attached before/after both phases, one physical socket, epoch 1.
10 live: CDP TaskDuration 68.271 ms/s (budget 100), payload 309,107 B/s, server 8.466% of one core, load 2.57/4.00/8.62. 1 live + 9 marker: 27.885 ms/s (budget 30), payload 31,658 B/s, server 2.433% core, load 1.84/3.68/8.36. Additional ThreadTime counters 96.977/36.473 ms/s retained, not the guard's TaskDuration metric.
Corrected original frontend before (same real current backend): 118.916/41.961 ms/s; loads 13.53/15.73/21.21 and 14.70/15.72/21.00. Before/after were different load windows; no attribution of the entire delta to code. Old run-2 146/40 remains invalid due primary geometry. Full renderer-module fast gate and back-to-back dev/head keystrokes pending. Evidence scratch cache-after/benchmark.jsonl, screenshots and cache-after-guard.log; will retain in repository.

Corrected 30s production acceptance guard PASS (2 pass / 0 fail): twelve real PTYs, every canvas 424x180 in its own window, 300±30 ms RTT, profiling/work/network observers disabled. First attempt accepted: all 12 attached before/after both phases, one physical socket, epoch 1. 10 live: CDP TaskDuration 68.271 ms/s (budget 100), payload 309,107 B/s, server 8.466% of one core, load 2.57/4.00/8.62. 1 live + 9 marker: 27.885 ms/s (budget 30), payload 31,658 B/s, server 2.433% core, load 1.84/3.68/8.36. Additional ThreadTime counters 96.977/36.473 ms/s retained, not the guard's TaskDuration metric. Corrected original frontend before (same real current backend): 118.916/41.961 ms/s; loads 13.53/15.73/21.21 and 14.70/15.72/21.00. Before/after were different load windows; no attribution of the entire delta to code. Old run-2 146/40 remains invalid due primary geometry. Full renderer-module fast gate and back-to-back dev/head keystrokes pending. Evidence scratch cache-after/benchmark.jsonl, screenshots and cache-after-guard.log; will retain in repository.
Author
Owner

Renderer-module fast gate failed only expired_handshake_releases_user_permits at auth/socket_tests.rs:151 (103 server tests passed / 1 failed / 10 ignored); fmt, native fmt, clippy, deny and both static binaries PASS. Pinned dev 63b1f10e reproduced the same assertion in the same load window: isolated rerun failed on first attempt, 0 passed / 1 failed, 0.52s (baseline source unchanged). Earlier isolated baseline pass 0.82s and green serialized full run retained as evidence of intermittence.
Applying the brief's explicit #118 baseline exception for this row; no deadline/auth test change. Raw outputs: scratch cache-module-fast.log and cache-module-baseline-auth-repeat.log; standalone full TS gate still running because scripts/verify fast stops before TS after a Rust-row failure. Corrected 30s browser guard remains 68.271/27.885 ms/s with intact 12 streams and one epoch.

Renderer-module fast gate failed only expired_handshake_releases_user_permits at auth/socket_tests.rs:151 (103 server tests passed / 1 failed / 10 ignored); fmt, native fmt, clippy, deny and both static binaries PASS. Pinned dev 63b1f10e reproduced the same assertion in the same load window: isolated rerun failed on first attempt, 0 passed / 1 failed, 0.52s (baseline source unchanged). Earlier isolated baseline pass 0.82s and green serialized full run retained as evidence of intermittence. Applying the brief's explicit #118 baseline exception for this row; no deadline/auth test change. Raw outputs: scratch cache-module-fast.log and cache-module-baseline-auth-repeat.log; standalone full TS gate still running because scripts/verify fast stops before TS after a Rust-row failure. Corrected 30s browser guard remains 68.271/27.885 ms/s with intact 12 streams and one epoch.
Author
Owner

Completed renderer fix c792efb9: bounded exact plain-viewport cache in the existing pinned renderer, byte-identical WASM, no dependency/public API/wire change. Unit regression 1 pass / 0 fail / 11 assertions; production pixel comparisons 1 pass / 0 fail (10.6s); full TS/transfer/differential gate exit 0, 38,804 assertions. Native gate uses the documented #118 exception: only expired-handshake assertion failed and pinned dev reproduced it, all other Rust rows passed. Raw head/baseline/TS outputs retained.
Corrected 30s guard passes 68.271 ms/s (10 live, budget100) / 27.885 (1 live+9marker, budget30), first attempt, 12 attached, socket epoch1; server CPU 8.466/2.433% core, payload309107/31658B/s. Marker→live303ms, thumbnail checkpoint stable, close/resume11streams. Cache storage6360B per53x10 window, 76320B at12; max96KiB each ×32=3MiB.
Now collecting a same-window uncached/repaired renderer pair on the same backend to separate the earlier load difference, then pinned dev/head keystrokes. No push/deploy.

Completed renderer fix c792efb9: bounded exact plain-viewport cache in the existing pinned renderer, byte-identical WASM, no dependency/public API/wire change. Unit regression 1 pass / 0 fail / 11 assertions; production pixel comparisons 1 pass / 0 fail (10.6s); full TS/transfer/differential gate exit 0, 38,804 assertions. Native gate uses the documented #118 exception: only expired-handshake assertion failed and pinned dev reproduced it, all other Rust rows passed. Raw head/baseline/TS outputs retained. Corrected 30s guard passes 68.271 ms/s (10 live, budget100) / 27.885 (1 live+9marker, budget30), first attempt, 12 attached, socket epoch1; server CPU 8.466/2.433% core, payload309107/31658B/s. Marker→live303ms, thumbnail checkpoint stable, close/resume11streams. Cache storage6360B per53x10 window, 76320B at12; max96KiB each ×32=3MiB. Now collecting a same-window uncached/repaired renderer pair on the same backend to separate the earlier load difference, then pinned dev/head keystrokes. No push/deploy.
Author
Owner

Back-to-back same-backend 30s pair exposed an implementation error: uncached b1c frontend 76.291/30.738 ms/s; c792 frontend 78.394/33.093, both epoch1 / 12 attached, loads roughly4–5. Therefore the earlier 68.271/27.885 pass is insufficient evidence of a robust improvement; latest marker phase exceeds30.
Cause in pinned lib/ghostty.ts initCellPool(): pool grows but never shrinks after resize, while new comparePlainViewport incorrectly required cells.length === visible cols*rows. All real benchmark windows shrink from initial geometry, disabling the cache. New regression retains16cells for a4x3viewport, with non-ASCII spare tail: current bundle fails (0 pass /1fail); fix compares only the visible prefix, retaining memory cap and pixel checks. Strict vendor rebuild in progress; no final performance claim.

Back-to-back same-backend 30s pair exposed an implementation error: uncached b1c frontend 76.291/30.738 ms/s; c792 frontend 78.394/33.093, both epoch1 / 12 attached, loads roughly4–5. Therefore the earlier 68.271/27.885 pass is insufficient evidence of a robust improvement; latest marker phase exceeds30. Cause in pinned lib/ghostty.ts initCellPool(): pool grows but never shrinks after resize, while new comparePlainViewport incorrectly required cells.length === visible cols*rows. All real benchmark windows shrink from initial geometry, disabling the cache. New regression retains16cells for a4x3viewport, with non-ASCII spare tail: current bundle fails (0 pass /1fail); fix compares only the visible prefix, retaining memory cap and pixel checks. Strict vendor rebuild in progress; no final performance claim.
Author
Owner

Visible-prefix follow-up now passes the retained-pool regression (1 unit pass /11 assertions) and Chromium pixel comparisons (1 pass,10.2s). Strict pinned rebuild succeeded; WASM unchanged.
Corrected 30s real guard PASS first attempt: 10live TaskDuration50.288ms/s, ThreadTime50.877, payload308825B/s, server8.466%core, load2.21/2.48/4.43; 1live+9marker TaskDuration18.519ms/s, ThreadTime20.327, payload31622B/s, server2.300%core, load2.20/2.45/4.36. All12attached, one socket, epoch1 both phases, profiling disabled. Raw cache-pool-after/benchmark.jsonl and screenshots retained.
For comparison, uncached same-backend pair76.291/30.738ms/s and initial ineffective-cache pair78.394/33.093ms/s (loads4–5); original corrected badb frontend118.916/41.961(loads13–15). Loads differ; report all, no selective pass claim. Full follow-up fast gate and native dev build in progress, then back-to-back real keystrokes.

Visible-prefix follow-up now passes the retained-pool regression (1 unit pass /11 assertions) and Chromium pixel comparisons (1 pass,10.2s). Strict pinned rebuild succeeded; WASM unchanged. Corrected 30s real guard PASS first attempt: 10live TaskDuration50.288ms/s, ThreadTime50.877, payload308825B/s, server8.466%core, load2.21/2.48/4.43; 1live+9marker TaskDuration18.519ms/s, ThreadTime20.327, payload31622B/s, server2.300%core, load2.20/2.45/4.36. All12attached, one socket, epoch1 both phases, profiling disabled. Raw cache-pool-after/benchmark.jsonl and screenshots retained. For comparison, uncached same-backend pair76.291/30.738ms/s and initial ineffective-cache pair78.394/33.093ms/s (loads4–5); original corrected badb frontend118.916/41.961(loads13–15). Loads differ; report all, no selective pass claim. Full follow-up fast gate and native dev build in progress, then back-to-back real keystrokes.
Author
Owner

Completed visible-prefix fix e9aa4f67. scripts/verify fast exit0: all six Rust rows PASS, retained-pool unit included (1 pass/11 assertions), TS compiler/production transfer passed, differential155streams/12906schedules/38804assertions (8pass/0fail). No #118 exception needed for this gate. Raw cache-pool-fast.log will be retained verbatim.
Final corrected30s guard50.288/18.519ms/s vs100/30 budgets; separate ThreadTime50.877/20.327; real throughput308825/31622B/s, server8.466/2.300%core; 12windows remain attached through both phases on epoch1. Loads2.21/2.48/4.43 and2.20/2.45/4.36. Visible cache6360B/window ×12=76320B; cap96KiB ×32=3MiB. Earlier passes/failures and ineffective-cache pair retained transparently.
Dev63b1f10e native binary built15965392B; head static binary15981136B (no PT_INTERP). Preparing real fixture and focused browser rerun, then back-to-back latency, final evidence/docs and final fast transcript.

Completed visible-prefix fix e9aa4f67. scripts/verify fast exit0: all six Rust rows PASS, retained-pool unit included (1 pass/11 assertions), TS compiler/production transfer passed, differential155streams/12906schedules/38804assertions (8pass/0fail). No #118 exception needed for this gate. Raw cache-pool-fast.log will be retained verbatim. Final corrected30s guard50.288/18.519ms/s vs100/30 budgets; separate ThreadTime50.877/20.327; real throughput308825/31622B/s, server8.466/2.300%core; 12windows remain attached through both phases on epoch1. Loads2.21/2.48/4.43 and2.20/2.45/4.36. Visible cache6360B/window ×12=76320B; cap96KiB ×32=3MiB. Earlier passes/failures and ineffective-cache pair retained transparently. Dev63b1f10e native binary built15965392B; head static binary15981136B (no PT_INTERP). Preparing real fixture and focused browser rerun, then back-to-back latency, final evidence/docs and final fast transcript.
Author
Owner

Back-to-back real browser/raw-PTY latency completed: pinned dev63b1f10e then heade9aa4f67, each own production bundle/native binary; common real current fixture/300±30ms relay, Chromium149.0.7827.55, no compiler during sampling, 120keys/mode ×2modes/head (4serialized batches30).
Prediction ON: confirmed echo p50/p99 dev398.0/432.4ms → head363.6/398.1ms; local prediction p9915.9→13.9ms. Loads dev7.69/8.12/6.88, head7.62/8.62/7.34.
Prediction OFF: confirmed echo dev392.6/430.8→head364.5/382.4ms; loads dev10.62/8.76/7.16, head5.55/7.96/7.17. No observed echo/prediction latency regression; lower OFF load means do not attribute its whole improvement to code.
Raw field cpuP99Ms is input-onData→wire-send wall span, not CPU: ON0.9→1.0ms, OFF2.8→0.3ms. These and all480individual samples retained in latency-dev.log/latency-head.log; screenshots retained. Focused final browser regressions7/7passed59.8s. Final corrected CPU50.288/18.519ms/s; evidence/docs and final fast transcript remain.

Back-to-back real browser/raw-PTY latency completed: pinned dev63b1f10e then heade9aa4f67, each own production bundle/native binary; common real current fixture/300±30ms relay, Chromium149.0.7827.55, no compiler during sampling, 120keys/mode ×2modes/head (4serialized batches30). Prediction ON: confirmed echo p50/p99 dev398.0/432.4ms → head363.6/398.1ms; local prediction p9915.9→13.9ms. Loads dev7.69/8.12/6.88, head7.62/8.62/7.34. Prediction OFF: confirmed echo dev392.6/430.8→head364.5/382.4ms; loads dev10.62/8.76/7.16, head5.55/7.96/7.17. No observed echo/prediction latency regression; lower OFF load means do not attribute its whole improvement to code. Raw field cpuP99Ms is input-onData→wire-send wall span, not CPU: ON0.9→1.0ms, OFF2.8→0.3ms. These and all480individual samples retained in latency-dev.log/latency-head.log; screenshots retained. Focused final browser regressions7/7passed59.8s. Final corrected CPU50.288/18.519ms/s; evidence/docs and final fast transcript remain.
Author
Owner

Finished repair round 3 on canvas-streams, head 23895a5b90. Dev63b1f10e merged; all review-canvas-streams commits through9a354a9c imported. CS-R4/R3/R5 fixed in separate logical commits; renderer CPU follow-ups and evidence separately committed. No push/deploy, issue stays open.
Corrected original before118.916/41.961ms/s → final50.288/18.519 (budgets100/30), 30s/phase, twelve real PTYs, every canvas424x180 in its own window, 300±30ms RTT. Final one socket/epoch1, all12attached throughout, observers disabled; loads2.21/2.48/4.43 and2.20/2.45/4.36. Additional ThreadTime50.877/20.327; payload308825/31622B/s, server8.466/2.300%core. Loads differ and all superseded/failed attempts are retained. Old146/40 run2 remains invalid.
Back-to-back pinned dev/head, real raw PTY/production browser, 120keys/mode: echo p99 predictionON432.4→398.1ms; OFF430.8→382.4ms. Local prediction p9915.9→13.9ms. Input-to-send wall p99 ON0.9→1.0ms/OFF2.8→0.3ms (not CPU). No observed echo/prediction latency regression; loads and all480samples retained.
Final focused browser7/7 pass; DPR3 layout/pixels2/2 pass. Cache typed-array payload6360B/window ×12=76320B, cap96KiB ×32=3MiB; native WASM byte-identical. Production screenshots/raw red-green tests/gates/profiles/latency + author checklist: docs/verification/canvas-streams/repair-round-3/README.md. Every evidence link verified tracked. Final scripts/verify fast exit0, six Rust rows PASS, TS/transfer PASS, differential155streams/12906schedules/38804assertions. No #118 exception needed for final run; earlier baseline-proven exception remains recorded. Temporary baseline/targets will be removed after this record is posted.
Complete final gate output follows verbatim in 3 parts; concatenated raw transcript SHA256 f4c7c3c3416089bd28a2f81c4fc4054f35c10a8a0d302e76358c70f3a19e2e4f.

Part 1/3:

Running as unit: run-p1241733-i22209805.scope; invocation ID: 7c66f32e2c5c46b1961c9b53e662f600
METRIC name=network_rtt_selftest configured_rtt_ms=300 jitter_ms=30 loss=unsupported transport=tcp-stream n=3 p50_ms=301.63 p99_ms=322.75 result=PASS

==> fmt

==> VT native fmt

==> clippy
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.51s

==> test
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.44s
     Running unittests src/main.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal-e5690224bd303581)

running 2 tests
test install::tests::dry_run_prints_a_process_surviving_user_unit ... ok
test setup_token_tests::setup_token_command_reads_only_the_expected_socket_response ... ok

test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running tests/agent_daemon.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/agent_daemon-c1009f458483aa8f)

running 1 test
test real_binary_preserves_input_and_output_across_24_abrupt_stops ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 40.03s

     Running tests/agent_queues.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/agent_queues-6c04c309be0957c1)

running 1 test
test saturated_terminal_queues_preserve_every_byte_and_daemon_liveness ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 35.47s

     Running tests/agent_review.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/agent_review-54f50cf057262edb)

running 6 tests
test initial_attach_requires_explicit_credit_before_replay ... ok
test last_typist_selects_its_own_real_pty_dimensions ... ok
test repeated_tiny_credit_pauses_preserve_shell_progress ... ok
test retained_unwritten_input_survives_interleaved_ack_restart ... ok
test stalled_terminal_never_delays_control_or_sibling_dispatch ... ok
test two_writers_keep_independent_ack_and_exact_input_after_restart ... ok

test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 27.26s

     Running tests/agent_sessions.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/agent_sessions-ff521b125a460892)

running 1 test
test detached_shim_is_discovered_and_replays_from_the_last_observed_offset ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s

     Running tests/canvas_legacy_visibility_review.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/canvas_legacy_visibility_review-3e63de25ab3d56d1)

running 1 test
test legacy_visibility_refusal_stops_local_reattachment ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.58s

     Running tests/canvas_streams.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/canvas_streams-d91cce38de72fa99)

running 1 test
test twelve_real_streams_restore_independent_modes_and_cursors ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.57s

     Running tests/idle_canary.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/idle_canary-f539ea7494e88d68)

running 1 test
test one_hertz_wakeup_is_detected_past_the_legacy_half_second_window ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.13s

     Running tests/shim.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/shim-ab657005a3347209)

running 7 tests
test attached_backpressure_and_detached_progress ... ok
test disallowed_signal_only_disconnects_peer ... ok
test double_fork_survives_parent_death ... ok
test real_shell_reconnect_resize_and_retained_exit ... ok
test replacement_connection_and_malformed_limit ... ok
test ring_wrap_snapshot_repaints_real_vim ... ok
test user_scope_survives_parent_unit_stop ... active
ok

test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.30s

     Running tests/shim_visibility.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/shim_visibility-4eb2a3ba5a11370a)

running 1 test
test hidden_modes_coalesce_and_live_resumes_at_snapshot_boundary ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.40s

     Running tests/vt_credit.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/vt_credit-51d52cc011d1b6d3)

running 1 test
test unaffordable_repaints_park_until_sufficient_credit ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 19.86s

     Running tests/vt_reconnect.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/vt_reconnect-ebce90a6a196ada5)

running 1 test
test snapshot_limits_never_close_live_reconnect ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.65s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_agent-211380b0185e0960)

running 17 tests
test relay::tests::attachment_has_no_implicit_output_or_snapshot_credit ... ok
test relay::tests::expired_credit_resumes_retained_bytes_at_the_same_cursor ... ok
test relay::tests::input_overlap_gap_and_restart_from_confirmed_offset ... ok
test relay::tests::output_partial_credit_and_dedup ... ok
test relay::tests::output_payload_move_measurement ... ignored, release ownership versus payload-copy measurement
test relay::tests::overflowing_ranges_never_mutate_cursors ... ok
test relay::tests::positive_insufficient_credit_arms_a_one_shot_deadline ... ok
test relay::tests::previews_spend_credit_without_changing_live_checkpoint ... ok
test relay::tests::returned_credit_cancels_starvation_and_state_has_no_payload_buffer ... ok
test relay::tests::starvation_is_one_shot_and_snapshot_length_does_not_advance_sequence ... ok
test sessions::tests::borrowed_reader_payload_uses_reusable_cancel_safe_storage ... ok
test sessions::tests::cancelled_fragmented_shim_read_retains_header_and_body_progress ... ok
test sessions::tests::post_listen_chmod_wakes_a_connection_refused_at_bind ... ok
test sessions::tests::reader_borrow_measurement ... ignored, release borrowed versus owned asynchronous receive measurement
test sessions::tests::refused_socket_is_removed_but_insecure_directory_is_rejected ... ok
test sessions::tests::sequenced_attach_intersects_caps_and_legacy_attach_stays_zero ... ok
test sessions::tests::symlink_state_cannot_redirect_private_runtime_storage ... ok

test result: ok. 15 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.06s

     Running tests/transport.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/transport-a619415ba769b0e5)

running 2 tests
test fragmented_headers_coalesced_frames_and_reusable_transmit ... ok
test oversized_header_and_truncated_frame_are_rejected ... ok

test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_mesh-3f967587718407e9)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running tests/default_arrow.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/default_arrow-312553ba19630584)

running 1 test
test omitted_arrow_ports_default_to_all_services ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running tests/properties.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/properties-78f35bbe1b57dcd5)

running 14 tests
test addresses_are_unique_stable_and_not_recycled ... ok
test arrow_replacement_is_atomic_and_unrelated_nodes_keep_their_versions ... ok
test checkpoint_after_suffix_change_restores_without_reallocating_addresses ... ok
test directional_grants_union_and_minimal_updates ... ok
test exhausted_versions_reject_mutations_without_changing_state ... ok
test join_to_same_tag_grants_both_initiation_directions ... ok
test names_versions_and_backend_status ... ok
test overlaps_are_reported_without_silent_range_changes ... ok
test private_material_never_enters_debug_or_coordination_serialization ... ok
test protocol_port_unions_never_grant_an_unlisted_service ... ok
test public_checkpoint_preserves_addresses_rules_versions_and_overlap ... ok
test rotation_waits_for_overlap_and_delivery_and_removal_drops_every_key ... ok
test seeded_random_sequences_equal_full_compile_and_deny_without_grants ... ok
test server_rotation_has_continuous_keys_for_every_node_during_delivery ... ok

test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.51s

     Running tests/rotation_time.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/rotation_time-a58dd287253d611d)

running 1 test
test unrepresentable_rotation_overlap_rejects_before_mutation ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_plugin_api-4480fd7032f11ca2)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_plugin_ssh-22a9a893799c7f17)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_protocol-67b9a310ef49abf9)

running 8 tests
test stream_tests::all_short_frame_splits_match_direct_decoding ... ok
test stream_tests::maximum_sized_fragmented_frame_is_not_rejected ... ok
test stream_tests::split_mux_header_preserves_trailing_close ... ok
test tests::golden_vectors_encode_and_decode_every_contract_frame ... ok
test tests::mux_round_trip_and_incremental_decoders_preserve_frame_order ... ok
test tests::oversized_encode_keeps_the_reusable_output_unchanged ... ok
test tests::rejects_oversized_noncanonical_and_malformed_frames_before_buffering_body ... ok
test tests::visibility_frames_refuse_unknown_modes_ranges_and_flags ... ok

test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_server-1fc3be3a3786e8db)

running 114 tests
test auth::crypto::verifier_tests::browser_secret_hashing_is_canonical_and_bounded ... ok
test auth::crypto::verifier_tests::recovery_capacity_denial_is_not_a_legacy_credential_signal ... ok
test auth::http::hostname_tests::authenticated_session_response_includes_system_hostname ... ok
test auth::http::tests::admission_partitions_reset_without_trusting_forwarded_headers ... ok
test auth::tests::aaguid_migration_preserves_legacy_credentials_and_sessions ... ok
test auth::tests::aaguid_projection_rejects_malformed_cbor_corpus ... ok
test auth::tests::account_identity_migration_backfills_legacy_users ... ok
test auth::tests::account_identity_schema_has_unique_usernames_and_display_names ... ok
test auth::tests::audit_ceremony_browser_binding ... ok
test auth::tests::audit_logout_survives_admission_exhaustion ... ok
test auth::tests::audit_no_public_credential_listing ... ok
test auth::tests::audit_recovery_after_page_discard_can_resume_at_original_deadline ... ok
test auth::tests::audit_recovery_pending_is_visible_to_signed_in_device ... ok
test auth::tests::audit_recovery_session_expiring_during_verification_keeps_delay ... ok
test auth::tests::authenticated_prf_metadata_preserves_legacy_envelopes ... ok
test auth::tests::ceremony_prf_wraps_and_optional_second_passkey ... ok
test auth::tests::concurrent_owner_and_optional_passkey_enrollment_fail_closed ... ok
test auth::tests::discoverable_latency_at_pending_capacity ... ignored, run --release --ignored --nocapture without concurrent builds
test auth::tests::discoverable_login_handle_credential_counter_and_replay ... ok
test auth::tests::enrollment_prf_input_matches_discoverable_login ... ok
test auth::tests::http_csrf_cookie_flags_body_limit_and_latency_evidence ... ok
test auth::tests::pending_unlock_expires_without_terminal_authority ... ok
test auth::tests::provider_labels_cover_the_cited_registry_without_guessing ... ok
test auth::tests::provider_session_latency_at_50_devices ... ignored, local auth session scale measurement; run without concurrent builds
test auth::tests::public_status_and_discoverable_http_login ... ok
test auth::tests::recovery_audit_commits_once_with_start_cancel_and_complete ... ok
test auth::tests::recovery_delay_cancel_and_replacement_revokes_every_capability ... ok
test auth::tests::recovery_expiry_revocation_and_cross_user_isolation ... ok
test auth::tests::recovery_http_live_same_account_is_immediate ... ok
test auth::tests::recovery_http_other_expired_pending_and_missing_sessions_wait ... ok
test auth::tests::recovery_live_session_cannot_accelerate_an_active_delayed_request ... ok
test auth::tests::recovery_live_session_revoked_during_verification_cannot_waive_delay ... ok
test auth::tests::recovery_session_delay_latency_at_capacity ... ignored, release-only recovery measurement at 50 live sessions; run without concurrent compilation
test auth::tests::recovery_unknown_identity_pays_the_same_database_and_verifier_work ... ok
test auth::tests::recovery_username_identity_is_additive_and_ambiguous_forms_fail ... ok
test auth::tests::recovery_verifier_latency_at_capacity ... ignored, release-only v2 diagnostic at 50 live session rows; record host load separately
test auth::tests::redacted_unknown_and_failed_registrations_do_not_claim_a_provider ... ok
test auth::tests::registration_aaguid_survives_none_attestation_and_binds_session_provider ... ok
test auth::tests::rejected_origin_uv_challenge_signature_prf_and_expired_ceremonies ... ok
test auth::tests::review3_tests::review3_backend_reply_has_a_deadline ... ok
test auth::tests::review3_tests::review3_busy_expiry ... ok
test auth::tests::review3_tests::review3_busy_logout ... ok
test auth::tests::review3_tests::review3_busy_recovery ... ok
test auth::tests::review3_tests::review3_completion_and_cleanup_are_transaction_bound ... ok
test auth::tests::review3_tests::review3_expired_handshake_must_not_welcome ... ok
test auth::tests::review3_tests::review3_identified_privacy_timing_and_binding_replays ... ok
test auth::tests::review3_tests::review3_pending_routes_and_idle_expiry_recovery ... ok
test auth::tests::review3_tests::review3_revoked_handshake_must_not_welcome ... ok
test auth::tests::review3_tests::review3_revoked_resume_must_not_welcome ... ok
test auth::tests::review3_tests::review3_unwrap_cannot_be_skipped ... ok
test auth::tests::review3_tests::review3_waiting_handshake_loses_authority ... ok
test auth::tests::review3_tests::review4_open_reply_and_revocation_preserve_authority ... ok
test auth::tests::review3_tests::review4_slow_open_at_user_capacity ... ignored, release-only connect scale measurement; run without concurrent builds
test auth::tests::review_invalid_device_polling_exhausts_browser_budget ... ok
test auth::tests::review_old_words_race_rotation ... ok
test auth::tests::reviewer_tests::reviewer_disk_cancel_complete_races ... ok
test auth::tests::reviewer_tests::reviewer_disk_restart_and_concurrent_resume ... ok
test auth::tests::reviewer_tests::reviewer_http_denials_and_recovery_admission ... ok
test auth::tests::reviewer_tests::reviewer_http_expired_capability_cannot_complete_after_writer_wait ... ok
test auth::tests::reviewer_tests::reviewer_http_expired_ceremony_cannot_complete_after_writer_wait ... ok
test auth::tests::reviewer_tests::reviewer_server_clock_rollback_retains_deadline_and_reports_more_than_day ... ok
test auth::tests::rotation_tests::recovery_phrase_routes_are_removed_and_words_fail_closed ... ok
test auth::tests::rotation_tests::recovery_rotation_cannot_follow_a_cookie_account_switch ... ok
test auth::tests::rotation_tests::recovery_rotation_denies_pending_expired_and_stale_sessions ... ok
test auth::tests::rotation_tests::recovery_rotation_requires_session_and_replaces_legacy_envelope ... ok
test auth::tests::rotation_tests::reviewer_concurrent_signed_in_rotations_commit_once ... ok
test auth::tests::server_setup_terminal_echo_and_resume_preserve_offsets_once ... ok
test auth::tests::sessions_slide_but_fresh_tap_does_not_and_device_keys_are_scoped ... ok
test auth::tests::setup_check_is_non_consuming_and_closes_after_owner_creation ... ok
test auth::tests::setup_identity_validation_and_uniqueness ... ok
test auth::tests::setup_restart_rotation_expiry_and_parallel_redemption ... ok
test auth::tests::setup_start_accepts_username_and_display_name ... ok
test auth::tests::socket_tests::authenticated_idle_socket_survives_the_former_read_timeout ... ok
test auth::tests::socket_tests::clean_control_close_is_not_an_internal_error ... ok
test auth::tests::socket_tests::expired_handshake_releases_user_permits ... ok
test auth::tests::socket_tests::fragmented_wire_frame_has_a_completion_deadline ... ok
test auth::tests::socket_tests::half_open_sockets_obey_user_limit ... ok
test auth::tests::socket_tests::incomplete_rfc_message_still_loses_authority_on_revocation ... ok
test auth::tests::socket_tests::recovery_subscription_updates_every_signed_in_socket ... ok
test auth::tests::socket_tests::revoked_idle_socket_loses_all_authority ... ok
test auth::tests::socket_tests::socket_authority_latency_at_user_capacity ... ignored, release-only measurement without concurrent compilation
test auth::tests::stale_counters_recovery_cancellation_and_wrap_tampering ... ok
test canvas_fixture::canvas_browser_fixture ... ignored, real production-browser fixture; explicit port and private scratch required
test embedded::regressions::credited_bulk_output_survives_forwarder_io_pause ... ok
test embedded::regressions::credited_output_queue_at_stream_capacity ... ignored, debug actor memory/scheduling measurement; run without concurrent builds
test embedded::regressions::full_output_queue_must_not_block_shared_actor ... ok
test embedded::regressions::healthy_receiver_survives_ready_native_output_burst ... ok
test embedded::regressions::healthy_streams_progress_at_user_attachment_capacity ... ok
test embedded::regressions::output_and_snapshot_spend_remaining_restart_credit ... ok
test embedded::regressions::real_agent_canonical_uuid_result_is_accepted ... ok
test embedded::regressions::real_agent_open_uses_uid_and_character_dimensions ... ok
test embedded::regressions::reattach_must_restore_output_credit ... ok
test embedded::regressions::recovery_event_then_snapshot_keeps_embedded_connection_live ... ok
test embedded::regressions::recovery_notices_preserve_order_credit_and_session_isolation ... ok
test embedded::regressions::stream_close_must_not_restart_all_sessions ... ok
test embedded::regressions::uncredited_output_or_repaint_is_rejected_before_queueing ... ok
test embedded::regressions::visibility_interrupted_live_switch_restores_snapshot_before_credit ... ok
test embedded::regressions::visibility_preview_credit_preserves_live_cursor_and_marker_uses_no_credit ... ok
test embedded::regressions::visibility_reader_requires_negotiation_and_terminal_stream_identity ... ok
test embedded::regressions::visibility_restart_restores_mode_before_byte_credit ... ok
test runtime::reviewer_admission::reviewer_recovery_source_limit_covers_all_routes_without_forwarding_bypass ... ok
test runtime::tests::proxy_mode_requires_an_explicit_peer_allowlist ... ok
test runtime::tests::proxy_networks_match_only_their_address_family_and_prefix ... ok
test runtime::tests::restart_serves_fresh_setup_token_and_completes_owner_enrollment ... ok
test runtime::tests::router_migrates_private_storage_and_serves_health ... ok
test runtime::tests::setup_socket_cleanup_preserves_symlinks_and_regular_files ... ok
test runtime::tests::setup_token_socket_is_private_and_requires_explicit_request ... ok
test runtime::tests::startup_with_owner_unlinks_stale_setup_token_socket ... ok
test web_assets::tests::encodings_and_identity_have_correct_headers_and_sizes ... ok
test web_assets::tests::spa_and_mutable_assets_revalidate_and_missing_brotli_uses_gzip ... ok
test websocket::recovery_notification_bench::recovery_notification_state_at_socket_capacity ... ignored, notification state sizing diagnostic, not allocator-inclusive RSS certification
test websocket::writer_tests::second_device_does_not_inherit_first_device_input_ack ... ok
test websocket::writer_tests::writer_admission_at_user_capacity ... ignored, release-only scale measurement; run without concurrent builds
test websocket::writer_tests::writer_ownership_capacity_unsigned_offsets_and_identity_reuse ... ok

test result: ok. 104 passed; 0 failed; 10 ignored; 0 measured; 0 filtered out; finished in 119.61s

     Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_shim-67ffc9c8d51fcf5c)

running 77 tests
test frame::checks::approximate_snapshot_codec_is_bounded_and_canonical ... ok
test frame::checks::borrowed_and_owned_decoders_agree_at_every_fragment_boundary ... ok
test frame::checks::codec_reuse_measurement ... ignored, release codec and allocation-path measurement
test frame::checks::golden::every_frozen_message ... ok
test frame::checks::golden::exact_maximum_and_coalesced_frames ... ok
test frame::checks::tests::golden_and_fragmented ... ok
test frame::checks::tests::invalid_lengths_types_and_utf8 ... ok
test frame::checks::visibility_frames_are_canonical_bounded_and_fragmentable ... ok
test ring::checks::tests::wrap_and_exact_offsets ... ok
test session::inputs::tests::identity_cap_preserves_all_existing_cursors ... ok
test session::inputs::tests::partial_writes_credit_only_the_owner_and_replay_trims_per_writer ... ok
test session::measurements::budgets::input_to_pty_write ... ignored, real-PTY performance measurement; set ZDOTDIR to tests/profile
test session::measurements::poll_storage_measurement ... ignored, release poll-storage allocation measurement
test session::measurements::visibility_state_scale_measurement ... ok
test session::resize_checks::native_resize_refusal_preserves_peer_and_pty ... ok
test session::resize_checks::resize_refusal_session_probe ... ignored, isolated session probe invoked by its parent with a controlled shell profile
test session::sequenced_checks::coalesced_ack_never_overwrites_a_partial_output_and_cursors_survive_peer_loss ... ok
test session::sequenced_checks::new_frames_roundtrip_and_refuse_noncanonical_payloads ... ok
test session::sequenced_checks::reusable_encoder_retains_capacity_and_refuses_growth_before_mutation ... ok
test session::sequenced_checks::trim_duplicates_gaps_overflow_and_capacity_are_transactional ... ok
test session::sequenced_checks::writer_selection_has_a_frozen_little_endian_layout ... ok
test terminal::checks::approximate_repaint_is_bounded_clips_at_complete_cells_and_preserves_source ... ok
test terminal::checks::approximate_repaint_keeps_complete_pending_syntax_or_omits_it_whole ... ok
test terminal::checks::tests::alternate_variants_and_nested_switches_repaint ... ok
test terminal::checks::tests::byte_budget_prunes_history_and_resize_remains_repaintable ... ok
test terminal::checks::tests::fixtures_and_continuations_repaint ... ok
test terminal::checks::tests::implicit_hyperlinks_retain_groups_across_rows_and_continuation ... ok
test terminal::checks::tests::long_unfinished_hyperlink_and_control_strings_continue ... ok
test terminal::checks::tests::margins_tabs_charsets_and_modes_continue ... ok
test terminal::checks::tests::partial_csi_and_utf8_continue ... ok
test terminal::checks::tests::pending_wrap_and_saved_wrap_continue_with_wide_cells ... ok
test terminal::checks::tests::retained_alternate_saved_cursor_and_keyboard_stack_continue ... ok
test terminal::checks::tests::saved_origin_survives_changed_margins ... ok
test terminal::checks::tests::unfinished_sequence_over_frame_limit_fails_without_losing_runtime_state ... ok
test terminal::checks::thumbnail_omits_unfinished_syntax_and_is_independently_repaintable ... ok
test terminal::checks::thumbnail_serialization_scale_measurement ... ignored, release thumbnail allocation/serialization scale measurement
test terminal::fidelity::fidelity_charset_mapped_wide_space_is_explicitly_rejected ... ok
test terminal::fidelity::fidelity_cursor ... ok
test terminal::fidelity::fidelity_diagnostic_fixture ... ignored, diagnostic replay of an explicitly selected fixture file
test terminal::fidelity::fidelity_edge ... ok
test terminal::fidelity::fidelity_extended_nightly ... ignored, nightly expanded differential corpus: 20,000 deterministic cases
test terminal::fidelity::fidelity_extended_smoke ... ok
test terminal::fidelity::fidelity_f1_rep ... ok
test terminal::fidelity::fidelity_fresh_c_redraw_default_is_explicitly_rejected ... ok
test terminal::fidelity::fidelity_handwritten ... ok
test terminal::fidelity::fidelity_inherited_protection_off_mode_is_explicitly_rejected ... ok
test terminal::fidelity::fidelity_iso_protection_does_not_keep_rep_scratch ... ok
test terminal::fidelity::fidelity_iso_protection_erase ... ok
test terminal::fidelity::fidelity_mouse_effective_fields_follow_order_independently_of_booleans ... ok
test terminal::fidelity::fidelity_oracle_detects_hidden_state ... ok
test terminal::fidelity::fidelity_oracle_observes_archived_cells_with_equal_active_screens ... ok
test terminal::fidelity::fidelity_orphaned_spacer_head ... ok
test terminal::fidelity::fidelity_prompt_resize_requires_explicit_rejection ... ok
test terminal::fidelity::fidelity_recorded_corpus ... ok
test terminal::fidelity::fidelity_rejects_unrepresentable_rep_without_mutating_source ... ok
test terminal::fidelity::fidelity_saved_cursor_over_changed_edge ... ok
test terminal::fidelity::fidelity_saved_modes_future_restore ... ok
test terminal::fidelity::fidelity_screen_entry_consumes_inherited_shift_before_saving ... ok
test terminal::fidelity::fidelity_seeded_nightly ... ignored, nightly differential corpus: 20,000 deterministic cases
test terminal::fidelity::fidelity_seeded_smoke ... ok
test terminal::fidelity::fidelity_semantic_validation_matches_exported_history_extent ... ok
test terminal::fidelity::fidelity_single_shift_survives_rep_seed ... ok
test terminal::fidelity::fidelity_snapshot_history_tail_contains_no_padding_rows ... ok
test terminal::fidelity::fidelity_snapshot_resets_stale_viewer_color_overrides ... ok
test terminal::fidelity::fidelity_spacer_head_attributes ... ok
test terminal::fidelity::fidelity_variation_tail_attributes ... ok
test terminal::fidelity::fidelity_variation_wrap_attributes ... ok
test terminal::fidelity::fresh_captures::fidelity_fresh_real_program_captures ... ignored, manual fresh capture oracle; set VT_CAPTURE_DIR after real program capture
test terminal::measurements::budgets::snapshot_200x60 ... ignored, performance measurement; run release on the perf host
test terminal::measurements::memory::measured_terminal_rss ... ignored, RSS measurement; run this filter alone in a fresh release process
test terminal::measurements::throughput::measured_parser ... ignored, VT observer and history throughput measurement
test terminal::recovery_measurements::measured_full_ring_reconstruction ... ignored, release reconstruction measurement; old healthy handles permit repeated cleanup
test terminal::resize_recovery::absent_ring_keeps_last_good_size_and_later_output_usable ... ok
test terminal::resize_recovery::complete_ring_restores_screens_mouse_and_unfinished_syntax ... ok
test terminal::resize_recovery::earlier_geometry_changes_require_approximation_even_with_origin_coverage ... ok
test terminal::resize_recovery::ring_gap_requires_clean_approximate_recovery ... ok
test terminal_native::allocation::resize_allocation_refusal_retires_native_handle ... ok

test result: ok. 64 passed; 0 failed; 13 ignored; 0 measured; 0 filtered out; finished in 50.25s

     Running tests/detach.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/detach-c502cd554fb112ce)

running 1 test
test closed_standard_descriptors_become_dev_null ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.66s

     Running tests/mouse.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/mouse-523bfdef43cc46cb)

running 1 test
test faithful_snapshot_preserves_public_mouse_encoder_reports ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s

   Doc-tests infraternal_agent

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_mesh

running 1 test
test crates/infraternal-mesh/src/model.rs - model::LocalPrivateKey (line 20) - compile fail ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s

   Doc-tests infraternal_plugin_api

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_plugin_ssh

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_protocol

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_server

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

   Doc-tests infraternal_shim

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s


==> cargo-deny
warning[duplicate]: found 2 duplicate entries for crate 'base64'
   ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:24:1
   │  
24 │ ╭ base64 0.21.7 registry+https://github.com/rust-lang/crates.io-index
25 │ │ base64 0.22.1 registry+https://github.com/rust-lang/crates.io-index
   │ ╰───────────────────────────────────────────────────────────────────┘ lock entries
   │  
   ├ base64 v0.21.7
     ├── base64urlsafedata v0.5.5
     │   ├── webauthn-attestation-ca v0.5.5
     │   │   └── webauthn-rs-core v0.5.5
     │   │       └── webauthn-rs v0.5.5
     │   │           └── infraternal-server v0.1.0
     │   │               └── infraternal v0.1.0
     │   ├── webauthn-rs v0.5.5 (*)
     │   ├── webauthn-rs-core v0.5.5 (*)
     │   └── webauthn-rs-proto v0.5.5
     │       └── webauthn-rs-core v0.5.5 (*)
     ├── webauthn-rs-core v0.5.5 (*)
     └── webauthn-rs-proto v0.5.5 (*)
   ├ base64 v0.22.1
     ├── axum v0.8.9
     │   └── infraternal-server v0.1.0
     │       └── infraternal v0.1.0
     ├── infraternal-server v0.1.0 (*)
     └── sqlx-core v0.8.6
         ├── sqlx v0.8.6
         │   ├── infraternal v0.1.0 (*)
         │   └── infraternal-server v0.1.0 (*)
         ├── sqlx-macros v0.8.6
         │   └── sqlx v0.8.6 (*)
         ├── sqlx-macros-core v0.8.6
         │   └── sqlx-macros v0.8.6 (*)
         └── sqlx-sqlite v0.8.6
             ├── sqlx v0.8.6 (*)
             └── sqlx-macros-core v0.8.6 (*)

warning[duplicate]: found 3 duplicate entries for crate 'getrandom'
   ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:88:1
   │  
88 │ ╭ getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index
89 │ │ getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index
90 │ │ getrandom 0.4.3 registry+https://github.com/rust-lang/crates.io-index
   │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries
   │  
   ├ getrandom v0.2.17
     └── rand_core v0.6.4
         ├── bip39 v2.2.2
         │   └── infraternal-server v0.1.0
         │       └── infraternal v0.1.0
         ├── crypto-common v0.1.7
         │   ├── aead v0.5.2
         │   │   └── aes-gcm v0.10.3
         │   │       └── (dev) infraternal-server v0.1.0 (*)
         │   ├── cipher v0.4.4
         │   │   ├── aes v0.8.4
         │   │   │   └── aes-gcm v0.10.3 (*)
         │   │   ├── aes-gcm v0.10.3 (*)
         │   │   └── ctr v0.9.2
         │   │       └── aes-gcm v0.10.3 (*)
         │   ├── digest v0.10.7
         │   │   ├── blake2 v0.10.6
         │   │   │   └── argon2 v0.5.3
         │   │   │       └── infraternal-server v0.1.0 (*)
         │   │   ├── hmac v0.12.1
         │   │   │   └── hkdf v0.12.4
         │   │   │       └── (dev) infraternal-server v0.1.0 (*)
         │   │   ├── sha1 v0.10.7
         │   │   │   ├── axum v0.8.9
         │   │   │   │   └── infraternal-server v0.1.0 (*)
         │   │   │   └── tungstenite v0.29.0
         │   │   │       └── tokio-tungstenite v0.29.0
         │   │   │           ├── axum v0.8.9 (*)
         │   │   │           └── (dev) infraternal-server v0.1.0 (*)
         │   │   └── sha2 v0.10.9
         │   │       ├── infraternal-server v0.1.0 (*)
         │   │       ├── sqlx-core v0.8.6
         │   │       │   ├── sqlx v0.8.6
         │   │       │   │   ├── infraternal v0.1.0 (*)
         │   │       │   │   └── infraternal-server v0.1.0 (*)
         │   │       │   ├── sqlx-macros v0.8.6
         │   │       │   │   └── sqlx v0.8.6 (*)
         │   │       │   ├── sqlx-macros-core v0.8.6
         │   │       │   │   └── sqlx-macros v0.8.6 (*)
         │   │       │   └── sqlx-sqlite v0.8.6
         │   │       │       ├── sqlx v0.8.6 (*)
         │   │       │       └── sqlx-macros-core v0.8.6 (*)
         │   │       └── sqlx-macros-core v0.8.6 (*)
         │   └── universal-hash v0.5.1
         │       └── polyval v0.6.2
         │           └── ghash v0.5.1
         │               └── aes-gcm v0.10.3 (*)
         ├── password-hash v0.5.0
         │   └── argon2 v0.5.3 (*)
         ├── rand v0.8.8
         │   └── bip39 v2.2.2 (*)
         └── rand_chacha v0.3.1
             └── rand v0.8.8 (*)
   ├ getrandom v0.3.4
     └── rand_core v0.9.5
         ├── rand v0.9.5
         │   ├── infraternal-server v0.1.0
         │   │   └── infraternal v0.1.0
         │   ├── tungstenite v0.29.0
         │   │   └── tokio-tungstenite v0.29.0
         │   │       ├── axum v0.8.9
         │   │       │   └── infraternal-server v0.1.0 (*)
         │   │       └── (dev) infraternal-server v0.1.0 (*)
         │   └── webauthn-rs-core v0.5.5
         │       └── webauthn-rs v0.5.5
         │           └── infraternal-server v0.1.0 (*)
         └── rand_chacha v0.9.0
             ├── rand v0.9.5 (*)
             └── webauthn-rs-core v0.5.5 (*)
   ├ getrandom v0.4.3
     ├── jobserver v0.1.35
     │   └── cc v1.6.0
     │       ├── (build) libfuzzer-sys v0.4.13
     │       │   └── infraternal-fuzz v0.1.0
     │       ├── (build) libsqlite3-sys v0.30.1
     │       │   └── sqlx-sqlite v0.8.6
     │       │       ├── sqlx v0.8.6
     │       │       │   ├── infraternal v0.1.0
     │       │       │   └── infraternal-server v0.1.0
     │       │       │       └── infraternal v0.1.0 (*)
     │       │       └── sqlx-macros-core v0.8.6
     │       │           └── sqlx-macros v0.8.6
     │       │               └── sqlx v0.8.6 (*)
     │       ├── openssl-src v300.6.1+3.6.3
     │       │   └── (build) openssl-sys v0.9.117
     │       │       ├── axum-server v0.8.0
     │       │       │   └── infraternal-server v0.1.0 (*)
     │       │       ├── openssl v0.10.81
     │       │       │   ├── axum-server v0.8.0 (*)
     │       │       │   ├── infraternal-server v0.1.0 (*)
     │       │       │   ├── tokio-openssl v0.6.5
     │       │       │   │   └── axum-server v0.8.0 (*)
     │       │       │   ├── webauthn-attestation-ca v0.5.5
     │       │       │   │   └── webauthn-rs-core v0.5.5
     │       │       │   │       └── webauthn-rs v0.5.5
     │       │       │   │           └── infraternal-server v0.1.0 (*)
     │       │       │   └── webauthn-rs-core v0.5.5 (*)
     │       │       ├── tokio-openssl v0.6.5 (*)
     │       │       ├── webauthn-attestation-ca v0.5.5 (*)
     │       │       └── webauthn-rs-core v0.5.5 (*)
     │       └── (build) openssl-sys v0.9.117 (*)
     └── uuid v1.27.0
         ├── infraternal-agent v0.1.0
         │   └── infraternal v0.1.0 (*)
         ├── infraternal-server v0.1.0 (*)
         ├── webauthn-attestation-ca v0.5.5 (*)
         ├── webauthn-rs v0.5.5 (*)
         └── webauthn-rs-core v0.5.5 (*)

warning[duplicate]: found 2 duplicate entries for crate 'hashbrown'
   ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:94:1
   │  
94 │ ╭ hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index
95 │ │ hashbrown 0.17.1 registry+https://github.com/rust-lang/crates.io-index
   │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries
   │  
   ├ hashbrown v0.15.5
     ├── hashlink v0.10.0
     │   └── sqlx-core v0.8.6
     │       ├── sqlx v0.8.6
     │       │   ├── infraternal v0.1.0
     │       │   └── infraternal-server v0.1.0
     │       │       └── infraternal v0.1.0 (*)
     │       ├── sqlx-macros v0.8.6
     │       │   └── sqlx v0.8.6 (*)
     │       ├── sqlx-macros-core v0.8.6
     │       │   └── sqlx-macros v0.8.6 (*)
     │       └── sqlx-sqlite v0.8.6
     │           ├── sqlx v0.8.6 (*)
     │           └── sqlx-macros-core v0.8.6 (*)
     └── sqlx-core v0.8.6 (*)
   ├ hashbrown v0.17.1
     └── indexmap v2.14.2
         ├── h2 v0.4.19
         │   └── hyper v1.11.1
         │       ├── axum v0.8.9
         │       │   └── infraternal-server v0.1.0
         │       │       └── infraternal v0.1.0
         │       ├── axum-server v0.8.0
         │       │   └── infraternal-server v0.1.0 (*)
         │       └── hyper-util v0.1.21
         │           ├── axum v0.8.9 (*)
Finished repair round 3 on canvas-streams, head 23895a5b90f50afdaed9116de788f6928bc12f57. Dev63b1f10e merged; all review-canvas-streams commits through9a354a9c imported. CS-R4/R3/R5 fixed in separate logical commits; renderer CPU follow-ups and evidence separately committed. No push/deploy, issue stays open. Corrected original before118.916/41.961ms/s → final50.288/18.519 (budgets100/30), 30s/phase, twelve real PTYs, every canvas424x180 in its own window, 300±30ms RTT. Final one socket/epoch1, all12attached throughout, observers disabled; loads2.21/2.48/4.43 and2.20/2.45/4.36. Additional ThreadTime50.877/20.327; payload308825/31622B/s, server8.466/2.300%core. Loads differ and all superseded/failed attempts are retained. Old146/40 run2 remains invalid. Back-to-back pinned dev/head, real raw PTY/production browser, 120keys/mode: echo p99 predictionON432.4→398.1ms; OFF430.8→382.4ms. Local prediction p9915.9→13.9ms. Input-to-send wall p99 ON0.9→1.0ms/OFF2.8→0.3ms (not CPU). No observed echo/prediction latency regression; loads and all480samples retained. Final focused browser7/7 pass; DPR3 layout/pixels2/2 pass. Cache typed-array payload6360B/window ×12=76320B, cap96KiB ×32=3MiB; native WASM byte-identical. Production screenshots/raw red-green tests/gates/profiles/latency + author checklist: docs/verification/canvas-streams/repair-round-3/README.md. Every evidence link verified tracked. Final scripts/verify fast exit0, six Rust rows PASS, TS/transfer PASS, differential155streams/12906schedules/38804assertions. No #118 exception needed for final run; earlier baseline-proven exception remains recorded. Temporary baseline/targets will be removed after this record is posted. Complete final gate output follows verbatim in 3 parts; concatenated raw transcript SHA256 f4c7c3c3416089bd28a2f81c4fc4054f35c10a8a0d302e76358c70f3a19e2e4f. Part 1/3: ````text Running as unit: run-p1241733-i22209805.scope; invocation ID: 7c66f32e2c5c46b1961c9b53e662f600 METRIC name=network_rtt_selftest configured_rtt_ms=300 jitter_ms=30 loss=unsupported transport=tcp-stream n=3 p50_ms=301.63 p99_ms=322.75 result=PASS ==> fmt ==> VT native fmt ==> clippy Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.51s ==> test Finished `test` profile [unoptimized + debuginfo] target(s) in 0.44s Running unittests src/main.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal-e5690224bd303581) running 2 tests test install::tests::dry_run_prints_a_process_surviving_user_unit ... ok test setup_token_tests::setup_token_command_reads_only_the_expected_socket_response ... ok test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/agent_daemon.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/agent_daemon-c1009f458483aa8f) running 1 test test real_binary_preserves_input_and_output_across_24_abrupt_stops ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 40.03s Running tests/agent_queues.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/agent_queues-6c04c309be0957c1) running 1 test test saturated_terminal_queues_preserve_every_byte_and_daemon_liveness ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 35.47s Running tests/agent_review.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/agent_review-54f50cf057262edb) running 6 tests test initial_attach_requires_explicit_credit_before_replay ... ok test last_typist_selects_its_own_real_pty_dimensions ... ok test repeated_tiny_credit_pauses_preserve_shell_progress ... ok test retained_unwritten_input_survives_interleaved_ack_restart ... ok test stalled_terminal_never_delays_control_or_sibling_dispatch ... ok test two_writers_keep_independent_ack_and_exact_input_after_restart ... ok test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 27.26s Running tests/agent_sessions.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/agent_sessions-ff521b125a460892) running 1 test test detached_shim_is_discovered_and_replays_from_the_last_observed_offset ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s Running tests/canvas_legacy_visibility_review.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/canvas_legacy_visibility_review-3e63de25ab3d56d1) running 1 test test legacy_visibility_refusal_stops_local_reattachment ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.58s Running tests/canvas_streams.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/canvas_streams-d91cce38de72fa99) running 1 test test twelve_real_streams_restore_independent_modes_and_cursors ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 7.57s Running tests/idle_canary.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/idle_canary-f539ea7494e88d68) running 1 test test one_hertz_wakeup_is_detected_past_the_legacy_half_second_window ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.13s Running tests/shim.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/shim-ab657005a3347209) running 7 tests test attached_backpressure_and_detached_progress ... ok test disallowed_signal_only_disconnects_peer ... ok test double_fork_survives_parent_death ... ok test real_shell_reconnect_resize_and_retained_exit ... ok test replacement_connection_and_malformed_limit ... ok test ring_wrap_snapshot_repaints_real_vim ... ok test user_scope_survives_parent_unit_stop ... active ok test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.30s Running tests/shim_visibility.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/shim_visibility-4eb2a3ba5a11370a) running 1 test test hidden_modes_coalesce_and_live_resumes_at_snapshot_boundary ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.40s Running tests/vt_credit.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/vt_credit-51d52cc011d1b6d3) running 1 test test unaffordable_repaints_park_until_sufficient_credit ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 19.86s Running tests/vt_reconnect.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/vt_reconnect-ebce90a6a196ada5) running 1 test test snapshot_limits_never_close_live_reconnect ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.65s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_agent-211380b0185e0960) running 17 tests test relay::tests::attachment_has_no_implicit_output_or_snapshot_credit ... ok test relay::tests::expired_credit_resumes_retained_bytes_at_the_same_cursor ... ok test relay::tests::input_overlap_gap_and_restart_from_confirmed_offset ... ok test relay::tests::output_partial_credit_and_dedup ... ok test relay::tests::output_payload_move_measurement ... ignored, release ownership versus payload-copy measurement test relay::tests::overflowing_ranges_never_mutate_cursors ... ok test relay::tests::positive_insufficient_credit_arms_a_one_shot_deadline ... ok test relay::tests::previews_spend_credit_without_changing_live_checkpoint ... ok test relay::tests::returned_credit_cancels_starvation_and_state_has_no_payload_buffer ... ok test relay::tests::starvation_is_one_shot_and_snapshot_length_does_not_advance_sequence ... ok test sessions::tests::borrowed_reader_payload_uses_reusable_cancel_safe_storage ... ok test sessions::tests::cancelled_fragmented_shim_read_retains_header_and_body_progress ... ok test sessions::tests::post_listen_chmod_wakes_a_connection_refused_at_bind ... ok test sessions::tests::reader_borrow_measurement ... ignored, release borrowed versus owned asynchronous receive measurement test sessions::tests::refused_socket_is_removed_but_insecure_directory_is_rejected ... ok test sessions::tests::sequenced_attach_intersects_caps_and_legacy_attach_stays_zero ... ok test sessions::tests::symlink_state_cannot_redirect_private_runtime_storage ... ok test result: ok. 15 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.06s Running tests/transport.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/transport-a619415ba769b0e5) running 2 tests test fragmented_headers_coalesced_frames_and_reusable_transmit ... ok test oversized_header_and_truncated_frame_are_rejected ... ok test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_mesh-3f967587718407e9) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/default_arrow.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/default_arrow-312553ba19630584) running 1 test test omitted_arrow_ports_default_to_all_services ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/properties.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/properties-78f35bbe1b57dcd5) running 14 tests test addresses_are_unique_stable_and_not_recycled ... ok test arrow_replacement_is_atomic_and_unrelated_nodes_keep_their_versions ... ok test checkpoint_after_suffix_change_restores_without_reallocating_addresses ... ok test directional_grants_union_and_minimal_updates ... ok test exhausted_versions_reject_mutations_without_changing_state ... ok test join_to_same_tag_grants_both_initiation_directions ... ok test names_versions_and_backend_status ... ok test overlaps_are_reported_without_silent_range_changes ... ok test private_material_never_enters_debug_or_coordination_serialization ... ok test protocol_port_unions_never_grant_an_unlisted_service ... ok test public_checkpoint_preserves_addresses_rules_versions_and_overlap ... ok test rotation_waits_for_overlap_and_delivery_and_removal_drops_every_key ... ok test seeded_random_sequences_equal_full_compile_and_deny_without_grants ... ok test server_rotation_has_continuous_keys_for_every_node_during_delivery ... ok test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 4.51s Running tests/rotation_time.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/rotation_time-a58dd287253d611d) running 1 test test unrepresentable_rotation_overlap_rejects_before_mutation ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_plugin_api-4480fd7032f11ca2) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_plugin_ssh-22a9a893799c7f17) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_protocol-67b9a310ef49abf9) running 8 tests test stream_tests::all_short_frame_splits_match_direct_decoding ... ok test stream_tests::maximum_sized_fragmented_frame_is_not_rejected ... ok test stream_tests::split_mux_header_preserves_trailing_close ... ok test tests::golden_vectors_encode_and_decode_every_contract_frame ... ok test tests::mux_round_trip_and_incremental_decoders_preserve_frame_order ... ok test tests::oversized_encode_keeps_the_reusable_output_unchanged ... ok test tests::rejects_oversized_noncanonical_and_malformed_frames_before_buffering_body ... ok test tests::visibility_frames_refuse_unknown_modes_ranges_and_flags ... ok test result: ok. 8 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_server-1fc3be3a3786e8db) running 114 tests test auth::crypto::verifier_tests::browser_secret_hashing_is_canonical_and_bounded ... ok test auth::crypto::verifier_tests::recovery_capacity_denial_is_not_a_legacy_credential_signal ... ok test auth::http::hostname_tests::authenticated_session_response_includes_system_hostname ... ok test auth::http::tests::admission_partitions_reset_without_trusting_forwarded_headers ... ok test auth::tests::aaguid_migration_preserves_legacy_credentials_and_sessions ... ok test auth::tests::aaguid_projection_rejects_malformed_cbor_corpus ... ok test auth::tests::account_identity_migration_backfills_legacy_users ... ok test auth::tests::account_identity_schema_has_unique_usernames_and_display_names ... ok test auth::tests::audit_ceremony_browser_binding ... ok test auth::tests::audit_logout_survives_admission_exhaustion ... ok test auth::tests::audit_no_public_credential_listing ... ok test auth::tests::audit_recovery_after_page_discard_can_resume_at_original_deadline ... ok test auth::tests::audit_recovery_pending_is_visible_to_signed_in_device ... ok test auth::tests::audit_recovery_session_expiring_during_verification_keeps_delay ... ok test auth::tests::authenticated_prf_metadata_preserves_legacy_envelopes ... ok test auth::tests::ceremony_prf_wraps_and_optional_second_passkey ... ok test auth::tests::concurrent_owner_and_optional_passkey_enrollment_fail_closed ... ok test auth::tests::discoverable_latency_at_pending_capacity ... ignored, run --release --ignored --nocapture without concurrent builds test auth::tests::discoverable_login_handle_credential_counter_and_replay ... ok test auth::tests::enrollment_prf_input_matches_discoverable_login ... ok test auth::tests::http_csrf_cookie_flags_body_limit_and_latency_evidence ... ok test auth::tests::pending_unlock_expires_without_terminal_authority ... ok test auth::tests::provider_labels_cover_the_cited_registry_without_guessing ... ok test auth::tests::provider_session_latency_at_50_devices ... ignored, local auth session scale measurement; run without concurrent builds test auth::tests::public_status_and_discoverable_http_login ... ok test auth::tests::recovery_audit_commits_once_with_start_cancel_and_complete ... ok test auth::tests::recovery_delay_cancel_and_replacement_revokes_every_capability ... ok test auth::tests::recovery_expiry_revocation_and_cross_user_isolation ... ok test auth::tests::recovery_http_live_same_account_is_immediate ... ok test auth::tests::recovery_http_other_expired_pending_and_missing_sessions_wait ... ok test auth::tests::recovery_live_session_cannot_accelerate_an_active_delayed_request ... ok test auth::tests::recovery_live_session_revoked_during_verification_cannot_waive_delay ... ok test auth::tests::recovery_session_delay_latency_at_capacity ... ignored, release-only recovery measurement at 50 live sessions; run without concurrent compilation test auth::tests::recovery_unknown_identity_pays_the_same_database_and_verifier_work ... ok test auth::tests::recovery_username_identity_is_additive_and_ambiguous_forms_fail ... ok test auth::tests::recovery_verifier_latency_at_capacity ... ignored, release-only v2 diagnostic at 50 live session rows; record host load separately test auth::tests::redacted_unknown_and_failed_registrations_do_not_claim_a_provider ... ok test auth::tests::registration_aaguid_survives_none_attestation_and_binds_session_provider ... ok test auth::tests::rejected_origin_uv_challenge_signature_prf_and_expired_ceremonies ... ok test auth::tests::review3_tests::review3_backend_reply_has_a_deadline ... ok test auth::tests::review3_tests::review3_busy_expiry ... ok test auth::tests::review3_tests::review3_busy_logout ... ok test auth::tests::review3_tests::review3_busy_recovery ... ok test auth::tests::review3_tests::review3_completion_and_cleanup_are_transaction_bound ... ok test auth::tests::review3_tests::review3_expired_handshake_must_not_welcome ... ok test auth::tests::review3_tests::review3_identified_privacy_timing_and_binding_replays ... ok test auth::tests::review3_tests::review3_pending_routes_and_idle_expiry_recovery ... ok test auth::tests::review3_tests::review3_revoked_handshake_must_not_welcome ... ok test auth::tests::review3_tests::review3_revoked_resume_must_not_welcome ... ok test auth::tests::review3_tests::review3_unwrap_cannot_be_skipped ... ok test auth::tests::review3_tests::review3_waiting_handshake_loses_authority ... ok test auth::tests::review3_tests::review4_open_reply_and_revocation_preserve_authority ... ok test auth::tests::review3_tests::review4_slow_open_at_user_capacity ... ignored, release-only connect scale measurement; run without concurrent builds test auth::tests::review_invalid_device_polling_exhausts_browser_budget ... ok test auth::tests::review_old_words_race_rotation ... ok test auth::tests::reviewer_tests::reviewer_disk_cancel_complete_races ... ok test auth::tests::reviewer_tests::reviewer_disk_restart_and_concurrent_resume ... ok test auth::tests::reviewer_tests::reviewer_http_denials_and_recovery_admission ... ok test auth::tests::reviewer_tests::reviewer_http_expired_capability_cannot_complete_after_writer_wait ... ok test auth::tests::reviewer_tests::reviewer_http_expired_ceremony_cannot_complete_after_writer_wait ... ok test auth::tests::reviewer_tests::reviewer_server_clock_rollback_retains_deadline_and_reports_more_than_day ... ok test auth::tests::rotation_tests::recovery_phrase_routes_are_removed_and_words_fail_closed ... ok test auth::tests::rotation_tests::recovery_rotation_cannot_follow_a_cookie_account_switch ... ok test auth::tests::rotation_tests::recovery_rotation_denies_pending_expired_and_stale_sessions ... ok test auth::tests::rotation_tests::recovery_rotation_requires_session_and_replaces_legacy_envelope ... ok test auth::tests::rotation_tests::reviewer_concurrent_signed_in_rotations_commit_once ... ok test auth::tests::server_setup_terminal_echo_and_resume_preserve_offsets_once ... ok test auth::tests::sessions_slide_but_fresh_tap_does_not_and_device_keys_are_scoped ... ok test auth::tests::setup_check_is_non_consuming_and_closes_after_owner_creation ... ok test auth::tests::setup_identity_validation_and_uniqueness ... ok test auth::tests::setup_restart_rotation_expiry_and_parallel_redemption ... ok test auth::tests::setup_start_accepts_username_and_display_name ... ok test auth::tests::socket_tests::authenticated_idle_socket_survives_the_former_read_timeout ... ok test auth::tests::socket_tests::clean_control_close_is_not_an_internal_error ... ok test auth::tests::socket_tests::expired_handshake_releases_user_permits ... ok test auth::tests::socket_tests::fragmented_wire_frame_has_a_completion_deadline ... ok test auth::tests::socket_tests::half_open_sockets_obey_user_limit ... ok test auth::tests::socket_tests::incomplete_rfc_message_still_loses_authority_on_revocation ... ok test auth::tests::socket_tests::recovery_subscription_updates_every_signed_in_socket ... ok test auth::tests::socket_tests::revoked_idle_socket_loses_all_authority ... ok test auth::tests::socket_tests::socket_authority_latency_at_user_capacity ... ignored, release-only measurement without concurrent compilation test auth::tests::stale_counters_recovery_cancellation_and_wrap_tampering ... ok test canvas_fixture::canvas_browser_fixture ... ignored, real production-browser fixture; explicit port and private scratch required test embedded::regressions::credited_bulk_output_survives_forwarder_io_pause ... ok test embedded::regressions::credited_output_queue_at_stream_capacity ... ignored, debug actor memory/scheduling measurement; run without concurrent builds test embedded::regressions::full_output_queue_must_not_block_shared_actor ... ok test embedded::regressions::healthy_receiver_survives_ready_native_output_burst ... ok test embedded::regressions::healthy_streams_progress_at_user_attachment_capacity ... ok test embedded::regressions::output_and_snapshot_spend_remaining_restart_credit ... ok test embedded::regressions::real_agent_canonical_uuid_result_is_accepted ... ok test embedded::regressions::real_agent_open_uses_uid_and_character_dimensions ... ok test embedded::regressions::reattach_must_restore_output_credit ... ok test embedded::regressions::recovery_event_then_snapshot_keeps_embedded_connection_live ... ok test embedded::regressions::recovery_notices_preserve_order_credit_and_session_isolation ... ok test embedded::regressions::stream_close_must_not_restart_all_sessions ... ok test embedded::regressions::uncredited_output_or_repaint_is_rejected_before_queueing ... ok test embedded::regressions::visibility_interrupted_live_switch_restores_snapshot_before_credit ... ok test embedded::regressions::visibility_preview_credit_preserves_live_cursor_and_marker_uses_no_credit ... ok test embedded::regressions::visibility_reader_requires_negotiation_and_terminal_stream_identity ... ok test embedded::regressions::visibility_restart_restores_mode_before_byte_credit ... ok test runtime::reviewer_admission::reviewer_recovery_source_limit_covers_all_routes_without_forwarding_bypass ... ok test runtime::tests::proxy_mode_requires_an_explicit_peer_allowlist ... ok test runtime::tests::proxy_networks_match_only_their_address_family_and_prefix ... ok test runtime::tests::restart_serves_fresh_setup_token_and_completes_owner_enrollment ... ok test runtime::tests::router_migrates_private_storage_and_serves_health ... ok test runtime::tests::setup_socket_cleanup_preserves_symlinks_and_regular_files ... ok test runtime::tests::setup_token_socket_is_private_and_requires_explicit_request ... ok test runtime::tests::startup_with_owner_unlinks_stale_setup_token_socket ... ok test web_assets::tests::encodings_and_identity_have_correct_headers_and_sizes ... ok test web_assets::tests::spa_and_mutable_assets_revalidate_and_missing_brotli_uses_gzip ... ok test websocket::recovery_notification_bench::recovery_notification_state_at_socket_capacity ... ignored, notification state sizing diagnostic, not allocator-inclusive RSS certification test websocket::writer_tests::second_device_does_not_inherit_first_device_input_ack ... ok test websocket::writer_tests::writer_admission_at_user_capacity ... ignored, release-only scale measurement; run without concurrent builds test websocket::writer_tests::writer_ownership_capacity_unsigned_offsets_and_identity_reuse ... ok test result: ok. 104 passed; 0 failed; 10 ignored; 0 measured; 0 filtered out; finished in 119.61s Running unittests src/lib.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/infraternal_shim-67ffc9c8d51fcf5c) running 77 tests test frame::checks::approximate_snapshot_codec_is_bounded_and_canonical ... ok test frame::checks::borrowed_and_owned_decoders_agree_at_every_fragment_boundary ... ok test frame::checks::codec_reuse_measurement ... ignored, release codec and allocation-path measurement test frame::checks::golden::every_frozen_message ... ok test frame::checks::golden::exact_maximum_and_coalesced_frames ... ok test frame::checks::tests::golden_and_fragmented ... ok test frame::checks::tests::invalid_lengths_types_and_utf8 ... ok test frame::checks::visibility_frames_are_canonical_bounded_and_fragmentable ... ok test ring::checks::tests::wrap_and_exact_offsets ... ok test session::inputs::tests::identity_cap_preserves_all_existing_cursors ... ok test session::inputs::tests::partial_writes_credit_only_the_owner_and_replay_trims_per_writer ... ok test session::measurements::budgets::input_to_pty_write ... ignored, real-PTY performance measurement; set ZDOTDIR to tests/profile test session::measurements::poll_storage_measurement ... ignored, release poll-storage allocation measurement test session::measurements::visibility_state_scale_measurement ... ok test session::resize_checks::native_resize_refusal_preserves_peer_and_pty ... ok test session::resize_checks::resize_refusal_session_probe ... ignored, isolated session probe invoked by its parent with a controlled shell profile test session::sequenced_checks::coalesced_ack_never_overwrites_a_partial_output_and_cursors_survive_peer_loss ... ok test session::sequenced_checks::new_frames_roundtrip_and_refuse_noncanonical_payloads ... ok test session::sequenced_checks::reusable_encoder_retains_capacity_and_refuses_growth_before_mutation ... ok test session::sequenced_checks::trim_duplicates_gaps_overflow_and_capacity_are_transactional ... ok test session::sequenced_checks::writer_selection_has_a_frozen_little_endian_layout ... ok test terminal::checks::approximate_repaint_is_bounded_clips_at_complete_cells_and_preserves_source ... ok test terminal::checks::approximate_repaint_keeps_complete_pending_syntax_or_omits_it_whole ... ok test terminal::checks::tests::alternate_variants_and_nested_switches_repaint ... ok test terminal::checks::tests::byte_budget_prunes_history_and_resize_remains_repaintable ... ok test terminal::checks::tests::fixtures_and_continuations_repaint ... ok test terminal::checks::tests::implicit_hyperlinks_retain_groups_across_rows_and_continuation ... ok test terminal::checks::tests::long_unfinished_hyperlink_and_control_strings_continue ... ok test terminal::checks::tests::margins_tabs_charsets_and_modes_continue ... ok test terminal::checks::tests::partial_csi_and_utf8_continue ... ok test terminal::checks::tests::pending_wrap_and_saved_wrap_continue_with_wide_cells ... ok test terminal::checks::tests::retained_alternate_saved_cursor_and_keyboard_stack_continue ... ok test terminal::checks::tests::saved_origin_survives_changed_margins ... ok test terminal::checks::tests::unfinished_sequence_over_frame_limit_fails_without_losing_runtime_state ... ok test terminal::checks::thumbnail_omits_unfinished_syntax_and_is_independently_repaintable ... ok test terminal::checks::thumbnail_serialization_scale_measurement ... ignored, release thumbnail allocation/serialization scale measurement test terminal::fidelity::fidelity_charset_mapped_wide_space_is_explicitly_rejected ... ok test terminal::fidelity::fidelity_cursor ... ok test terminal::fidelity::fidelity_diagnostic_fixture ... ignored, diagnostic replay of an explicitly selected fixture file test terminal::fidelity::fidelity_edge ... ok test terminal::fidelity::fidelity_extended_nightly ... ignored, nightly expanded differential corpus: 20,000 deterministic cases test terminal::fidelity::fidelity_extended_smoke ... ok test terminal::fidelity::fidelity_f1_rep ... ok test terminal::fidelity::fidelity_fresh_c_redraw_default_is_explicitly_rejected ... ok test terminal::fidelity::fidelity_handwritten ... ok test terminal::fidelity::fidelity_inherited_protection_off_mode_is_explicitly_rejected ... ok test terminal::fidelity::fidelity_iso_protection_does_not_keep_rep_scratch ... ok test terminal::fidelity::fidelity_iso_protection_erase ... ok test terminal::fidelity::fidelity_mouse_effective_fields_follow_order_independently_of_booleans ... ok test terminal::fidelity::fidelity_oracle_detects_hidden_state ... ok test terminal::fidelity::fidelity_oracle_observes_archived_cells_with_equal_active_screens ... ok test terminal::fidelity::fidelity_orphaned_spacer_head ... ok test terminal::fidelity::fidelity_prompt_resize_requires_explicit_rejection ... ok test terminal::fidelity::fidelity_recorded_corpus ... ok test terminal::fidelity::fidelity_rejects_unrepresentable_rep_without_mutating_source ... ok test terminal::fidelity::fidelity_saved_cursor_over_changed_edge ... ok test terminal::fidelity::fidelity_saved_modes_future_restore ... ok test terminal::fidelity::fidelity_screen_entry_consumes_inherited_shift_before_saving ... ok test terminal::fidelity::fidelity_seeded_nightly ... ignored, nightly differential corpus: 20,000 deterministic cases test terminal::fidelity::fidelity_seeded_smoke ... ok test terminal::fidelity::fidelity_semantic_validation_matches_exported_history_extent ... ok test terminal::fidelity::fidelity_single_shift_survives_rep_seed ... ok test terminal::fidelity::fidelity_snapshot_history_tail_contains_no_padding_rows ... ok test terminal::fidelity::fidelity_snapshot_resets_stale_viewer_color_overrides ... ok test terminal::fidelity::fidelity_spacer_head_attributes ... ok test terminal::fidelity::fidelity_variation_tail_attributes ... ok test terminal::fidelity::fidelity_variation_wrap_attributes ... ok test terminal::fidelity::fresh_captures::fidelity_fresh_real_program_captures ... ignored, manual fresh capture oracle; set VT_CAPTURE_DIR after real program capture test terminal::measurements::budgets::snapshot_200x60 ... ignored, performance measurement; run release on the perf host test terminal::measurements::memory::measured_terminal_rss ... ignored, RSS measurement; run this filter alone in a fresh release process test terminal::measurements::throughput::measured_parser ... ignored, VT observer and history throughput measurement test terminal::recovery_measurements::measured_full_ring_reconstruction ... ignored, release reconstruction measurement; old healthy handles permit repeated cleanup test terminal::resize_recovery::absent_ring_keeps_last_good_size_and_later_output_usable ... ok test terminal::resize_recovery::complete_ring_restores_screens_mouse_and_unfinished_syntax ... ok test terminal::resize_recovery::earlier_geometry_changes_require_approximation_even_with_origin_coverage ... ok test terminal::resize_recovery::ring_gap_requires_clean_approximate_recovery ... ok test terminal_native::allocation::resize_allocation_refusal_retires_native_handle ... ok test result: ok. 64 passed; 0 failed; 13 ignored; 0 measured; 0 filtered out; finished in 50.25s Running tests/detach.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/detach-c502cd554fb112ce) running 1 test test closed_standard_descriptors_become_dev_null ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.66s Running tests/mouse.rs (/home/kayg/.cache/codex-scratch/canvas-streams/target/debug/deps/mouse-523bfdef43cc46cb) running 1 test test faithful_snapshot_preserves_public_mouse_encoder_reports ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.19s Doc-tests infraternal_agent running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_mesh running 1 test test crates/infraternal-mesh/src/model.rs - model::LocalPrivateKey (line 20) - compile fail ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s Doc-tests infraternal_plugin_api running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_plugin_ssh running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_protocol running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_server running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests infraternal_shim running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s ==> cargo-deny warning[duplicate]: found 2 duplicate entries for crate 'base64' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:24:1 │ 24 │ ╭ base64 0.21.7 registry+https://github.com/rust-lang/crates.io-index 25 │ │ base64 0.22.1 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────────┘ lock entries │ ├ base64 v0.21.7 ├── base64urlsafedata v0.5.5 │ ├── webauthn-attestation-ca v0.5.5 │ │ └── webauthn-rs-core v0.5.5 │ │ └── webauthn-rs v0.5.5 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── webauthn-rs v0.5.5 (*) │ ├── webauthn-rs-core v0.5.5 (*) │ └── webauthn-rs-proto v0.5.5 │ └── webauthn-rs-core v0.5.5 (*) ├── webauthn-rs-core v0.5.5 (*) └── webauthn-rs-proto v0.5.5 (*) ├ base64 v0.22.1 ├── axum v0.8.9 │ └── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── infraternal-server v0.1.0 (*) └── sqlx-core v0.8.6 ├── sqlx v0.8.6 │ ├── infraternal v0.1.0 (*) │ └── infraternal-server v0.1.0 (*) ├── sqlx-macros v0.8.6 │ └── sqlx v0.8.6 (*) ├── sqlx-macros-core v0.8.6 │ └── sqlx-macros v0.8.6 (*) └── sqlx-sqlite v0.8.6 ├── sqlx v0.8.6 (*) └── sqlx-macros-core v0.8.6 (*) warning[duplicate]: found 3 duplicate entries for crate 'getrandom' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:88:1 │ 88 │ ╭ getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index 89 │ │ getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index 90 │ │ getrandom 0.4.3 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries │ ├ getrandom v0.2.17 └── rand_core v0.6.4 ├── bip39 v2.2.2 │ └── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── crypto-common v0.1.7 │ ├── aead v0.5.2 │ │ └── aes-gcm v0.10.3 │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── cipher v0.4.4 │ │ ├── aes v0.8.4 │ │ │ └── aes-gcm v0.10.3 (*) │ │ ├── aes-gcm v0.10.3 (*) │ │ └── ctr v0.9.2 │ │ └── aes-gcm v0.10.3 (*) │ ├── digest v0.10.7 │ │ ├── blake2 v0.10.6 │ │ │ └── argon2 v0.5.3 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── hmac v0.12.1 │ │ │ └── hkdf v0.12.4 │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ ├── sha1 v0.10.7 │ │ │ ├── axum v0.8.9 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── tungstenite v0.29.0 │ │ │ └── tokio-tungstenite v0.29.0 │ │ │ ├── axum v0.8.9 (*) │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ └── sha2 v0.10.9 │ │ ├── infraternal-server v0.1.0 (*) │ │ ├── sqlx-core v0.8.6 │ │ │ ├── sqlx v0.8.6 │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ ├── sqlx v0.8.6 (*) │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ └── sqlx-macros-core v0.8.6 (*) │ └── universal-hash v0.5.1 │ └── polyval v0.6.2 │ └── ghash v0.5.1 │ └── aes-gcm v0.10.3 (*) ├── password-hash v0.5.0 │ └── argon2 v0.5.3 (*) ├── rand v0.8.8 │ └── bip39 v2.2.2 (*) └── rand_chacha v0.3.1 └── rand v0.8.8 (*) ├ getrandom v0.3.4 └── rand_core v0.9.5 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 (*) └── webauthn-rs-core v0.5.5 (*) ├ getrandom v0.4.3 ├── jobserver v0.1.35 │ └── cc v1.6.0 │ ├── (build) libfuzzer-sys v0.4.13 │ │ └── infraternal-fuzz v0.1.0 │ ├── (build) libsqlite3-sys v0.30.1 │ │ └── sqlx-sqlite v0.8.6 │ │ ├── sqlx v0.8.6 │ │ │ ├── infraternal v0.1.0 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 (*) │ │ └── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── openssl-src v300.6.1+3.6.3 │ │ └── (build) openssl-sys v0.9.117 │ │ ├── axum-server v0.8.0 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── openssl v0.10.81 │ │ │ ├── axum-server v0.8.0 (*) │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ ├── tokio-openssl v0.6.5 │ │ │ │ └── axum-server v0.8.0 (*) │ │ │ ├── webauthn-attestation-ca v0.5.5 │ │ │ │ └── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── tokio-openssl v0.6.5 (*) │ │ ├── webauthn-attestation-ca v0.5.5 (*) │ │ └── webauthn-rs-core v0.5.5 (*) │ └── (build) openssl-sys v0.9.117 (*) └── uuid v1.27.0 ├── infraternal-agent v0.1.0 │ └── infraternal v0.1.0 (*) ├── infraternal-server v0.1.0 (*) ├── webauthn-attestation-ca v0.5.5 (*) ├── webauthn-rs v0.5.5 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'hashbrown' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:94:1 │ 94 │ ╭ hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index 95 │ │ hashbrown 0.17.1 registry+https://github.com/rust-lang/crates.io-index │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries │ ├ hashbrown v0.15.5 ├── hashlink v0.10.0 │ └── sqlx-core v0.8.6 │ ├── sqlx v0.8.6 │ │ ├── infraternal v0.1.0 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 (*) │ ├── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 │ ├── sqlx v0.8.6 (*) │ └── sqlx-macros-core v0.8.6 (*) └── sqlx-core v0.8.6 (*) ├ hashbrown v0.17.1 └── indexmap v2.14.2 ├── h2 v0.4.19 │ └── hyper v1.11.1 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── axum-server v0.8.0 │ │ └── infraternal-server v0.1.0 (*) │ └── hyper-util v0.1.21 │ ├── axum v0.8.9 (*) ````
Author
Owner

Final gate verbatim continuation; head 23895a5b90.

Part 2/3:

         │           └── axum-server v0.8.0 (*)
         └── sqlx-core v0.8.6
             ├── sqlx v0.8.6
             │   ├── infraternal v0.1.0 (*)
             │   └── infraternal-server v0.1.0 (*)
             ├── sqlx-macros v0.8.6
             │   └── sqlx v0.8.6 (*)
             ├── sqlx-macros-core v0.8.6
             │   └── sqlx-macros v0.8.6 (*)
             └── sqlx-sqlite v0.8.6
                 ├── sqlx v0.8.6 (*)
                 └── sqlx-macros-core v0.8.6 (*)

warning[duplicate]: found 2 duplicate entries for crate 'r-efi'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:183:1
    │  
183 │ ╭ r-efi 5.3.0 registry+https://github.com/rust-lang/crates.io-index
184 │ │ r-efi 6.0.0 registry+https://github.com/rust-lang/crates.io-index
    │ ╰─────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ r-efi v5.3.0
      └── getrandom v0.3.4
          └── rand_core v0.9.5
              ├── rand v0.9.5
              │   ├── infraternal-server v0.1.0
              │   │   └── infraternal v0.1.0
              │   ├── tungstenite v0.29.0
              │   │   └── tokio-tungstenite v0.29.0
              │   │       ├── axum v0.8.9
              │   │       │   └── infraternal-server v0.1.0 (*)
              │   │       └── (dev) infraternal-server v0.1.0 (*)
              │   └── webauthn-rs-core v0.5.5
              │       └── webauthn-rs v0.5.5
              │           └── infraternal-server v0.1.0 (*)
              └── rand_chacha v0.9.0
                  ├── rand v0.9.5 (*)
                  └── webauthn-rs-core v0.5.5 (*)
    ├ r-efi v6.0.0
      └── getrandom v0.4.3
          ├── jobserver v0.1.35
          │   └── cc v1.6.0
          │       ├── (build) libfuzzer-sys v0.4.13
          │       │   └── infraternal-fuzz v0.1.0
          │       ├── (build) libsqlite3-sys v0.30.1
          │       │   └── sqlx-sqlite v0.8.6
          │       │       ├── sqlx v0.8.6
          │       │       │   ├── infraternal v0.1.0
          │       │       │   └── infraternal-server v0.1.0
          │       │       │       └── infraternal v0.1.0 (*)
          │       │       └── sqlx-macros-core v0.8.6
          │       │           └── sqlx-macros v0.8.6
          │       │               └── sqlx v0.8.6 (*)
          │       ├── openssl-src v300.6.1+3.6.3
          │       │   └── (build) openssl-sys v0.9.117
          │       │       ├── axum-server v0.8.0
          │       │       │   └── infraternal-server v0.1.0 (*)
          │       │       ├── openssl v0.10.81
          │       │       │   ├── axum-server v0.8.0 (*)
          │       │       │   ├── infraternal-server v0.1.0 (*)
          │       │       │   ├── tokio-openssl v0.6.5
          │       │       │   │   └── axum-server v0.8.0 (*)
          │       │       │   ├── webauthn-attestation-ca v0.5.5
          │       │       │   │   └── webauthn-rs-core v0.5.5
          │       │       │   │       └── webauthn-rs v0.5.5
          │       │       │   │           └── infraternal-server v0.1.0 (*)
          │       │       │   └── webauthn-rs-core v0.5.5 (*)
          │       │       ├── tokio-openssl v0.6.5 (*)
          │       │       ├── webauthn-attestation-ca v0.5.5 (*)
          │       │       └── webauthn-rs-core v0.5.5 (*)
          │       └── (build) openssl-sys v0.9.117 (*)
          └── uuid v1.27.0
              ├── infraternal-agent v0.1.0
              │   └── infraternal v0.1.0 (*)
              ├── infraternal-server v0.1.0 (*)
              ├── webauthn-attestation-ca v0.5.5 (*)
              ├── webauthn-rs v0.5.5 (*)
              └── webauthn-rs-core v0.5.5 (*)

warning[duplicate]: found 2 duplicate entries for crate 'rand'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:185:1
    │  
185 │ ╭ rand 0.8.8 registry+https://github.com/rust-lang/crates.io-index
186 │ │ rand 0.9.5 registry+https://github.com/rust-lang/crates.io-index
    │ ╰────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ rand v0.8.8
      └── bip39 v2.2.2
          └── infraternal-server v0.1.0
              └── infraternal v0.1.0
    ├ rand v0.9.5
      ├── infraternal-server v0.1.0
      │   └── infraternal v0.1.0
      ├── tungstenite v0.29.0
      │   └── tokio-tungstenite v0.29.0
      │       ├── axum v0.8.9
      │       │   └── infraternal-server v0.1.0 (*)
      │       └── (dev) infraternal-server v0.1.0 (*)
      └── webauthn-rs-core v0.5.5
          └── webauthn-rs v0.5.5
              └── infraternal-server v0.1.0 (*)

warning[duplicate]: found 2 duplicate entries for crate 'rand_chacha'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:187:1
    │  
187 │ ╭ rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index
188 │ │ rand_chacha 0.9.0 registry+https://github.com/rust-lang/crates.io-index
    │ ╰───────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ rand_chacha v0.3.1
      └── rand v0.8.8
          └── bip39 v2.2.2
              └── infraternal-server v0.1.0
                  └── infraternal v0.1.0
    ├ rand_chacha v0.9.0
      ├── rand v0.9.5
      │   ├── infraternal-server v0.1.0
      │   │   └── infraternal v0.1.0
      │   ├── tungstenite v0.29.0
      │   │   └── tokio-tungstenite v0.29.0
      │   │       ├── axum v0.8.9
      │   │       │   └── infraternal-server v0.1.0 (*)
      │   │       └── (dev) infraternal-server v0.1.0 (*)
      │   └── webauthn-rs-core v0.5.5
      │       └── webauthn-rs v0.5.5
      │           └── infraternal-server v0.1.0 (*)
      └── webauthn-rs-core v0.5.5 (*)

warning[duplicate]: found 2 duplicate entries for crate 'rand_core'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:189:1
    │  
189 │ ╭ rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index
190 │ │ rand_core 0.9.5 registry+https://github.com/rust-lang/crates.io-index
    │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ rand_core v0.6.4
      ├── bip39 v2.2.2
      │   └── infraternal-server v0.1.0
      │       └── infraternal v0.1.0
      ├── crypto-common v0.1.7
      │   ├── aead v0.5.2
      │   │   └── aes-gcm v0.10.3
      │   │       └── (dev) infraternal-server v0.1.0 (*)
      │   ├── cipher v0.4.4
      │   │   ├── aes v0.8.4
      │   │   │   └── aes-gcm v0.10.3 (*)
      │   │   ├── aes-gcm v0.10.3 (*)
      │   │   └── ctr v0.9.2
      │   │       └── aes-gcm v0.10.3 (*)
      │   ├── digest v0.10.7
      │   │   ├── blake2 v0.10.6
      │   │   │   └── argon2 v0.5.3
      │   │   │       └── infraternal-server v0.1.0 (*)
      │   │   ├── hmac v0.12.1
      │   │   │   └── hkdf v0.12.4
      │   │   │       └── (dev) infraternal-server v0.1.0 (*)
      │   │   ├── sha1 v0.10.7
      │   │   │   ├── axum v0.8.9
      │   │   │   │   └── infraternal-server v0.1.0 (*)
      │   │   │   └── tungstenite v0.29.0
      │   │   │       └── tokio-tungstenite v0.29.0
      │   │   │           ├── axum v0.8.9 (*)
      │   │   │           └── (dev) infraternal-server v0.1.0 (*)
      │   │   └── sha2 v0.10.9
      │   │       ├── infraternal-server v0.1.0 (*)
      │   │       ├── sqlx-core v0.8.6
      │   │       │   ├── sqlx v0.8.6
      │   │       │   │   ├── infraternal v0.1.0 (*)
      │   │       │   │   └── infraternal-server v0.1.0 (*)
      │   │       │   ├── sqlx-macros v0.8.6
      │   │       │   │   └── sqlx v0.8.6 (*)
      │   │       │   ├── sqlx-macros-core v0.8.6
      │   │       │   │   └── sqlx-macros v0.8.6 (*)
      │   │       │   └── sqlx-sqlite v0.8.6
      │   │       │       ├── sqlx v0.8.6 (*)
      │   │       │       └── sqlx-macros-core v0.8.6 (*)
      │   │       └── sqlx-macros-core v0.8.6 (*)
      │   └── universal-hash v0.5.1
      │       └── polyval v0.6.2
      │           └── ghash v0.5.1
      │               └── aes-gcm v0.10.3 (*)
      ├── password-hash v0.5.0
      │   └── argon2 v0.5.3 (*)
      ├── rand v0.8.8
      │   └── bip39 v2.2.2 (*)
      └── rand_chacha v0.3.1
          └── rand v0.8.8 (*)
    ├ rand_core v0.9.5
      ├── rand v0.9.5
      │   ├── infraternal-server v0.1.0
      │   │   └── infraternal v0.1.0
      │   ├── tungstenite v0.29.0
      │   │   └── tokio-tungstenite v0.29.0
      │   │       ├── axum v0.8.9
      │   │       │   └── infraternal-server v0.1.0 (*)
      │   │       └── (dev) infraternal-server v0.1.0 (*)
      │   └── webauthn-rs-core v0.5.5
      │       └── webauthn-rs v0.5.5
      │           └── infraternal-server v0.1.0 (*)
      └── rand_chacha v0.9.0
          ├── rand v0.9.5 (*)
          └── webauthn-rs-core v0.5.5 (*)

warning[duplicate]: found 2 duplicate entries for crate 'syn'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:226:1
    │  
226 │ ╭ syn 2.0.119 registry+https://github.com/rust-lang/crates.io-index
227 │ │ syn 3.0.6 registry+https://github.com/rust-lang/crates.io-index
    │ ╰───────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ syn v2.0.119
      ├── asn1-rs-derive v0.5.1
      │   └── asn1-rs v0.6.2
      │       ├── der-parser v9.0.0
      │       │   ├── webauthn-rs-core v0.5.5
      │       │   │   └── webauthn-rs v0.5.5
      │       │   │       └── infraternal-server v0.1.0
      │       │   │           └── infraternal v0.1.0
      │       │   └── x509-parser v0.16.0
      │       │       └── webauthn-rs-core v0.5.5 (*)
      │       ├── oid-registry v0.7.1
      │       │   └── x509-parser v0.16.0 (*)
      │       └── x509-parser v0.16.0 (*)
      ├── asn1-rs-impl v0.2.0
      │   └── asn1-rs v0.6.2 (*)
      ├── openssl-macros v0.1.1
      │   └── openssl v0.10.81
      │       ├── axum-server v0.8.0
      │       │   └── infraternal-server v0.1.0 (*)
      │       ├── infraternal-server v0.1.0 (*)
      │       ├── tokio-openssl v0.6.5
      │       │   └── axum-server v0.8.0 (*)
      │       ├── webauthn-attestation-ca v0.5.5
      │       │   └── webauthn-rs-core v0.5.5 (*)
      │       └── webauthn-rs-core v0.5.5 (*)
      ├── sqlx-macros v0.8.6
      │   └── sqlx v0.8.6
      │       ├── infraternal v0.1.0 (*)
      │       └── infraternal-server v0.1.0 (*)
      ├── sqlx-macros-core v0.8.6
      │   └── sqlx-macros v0.8.6 (*)
      ├── synstructure v0.13.2
      │   └── asn1-rs-derive v0.5.1 (*)
      ├── thiserror-impl v1.0.69
      │   └── thiserror v1.0.69
      │       ├── asn1-rs v0.6.2 (*)
      │       ├── webauthn-rs-core v0.5.5 (*)
      │       └── x509-parser v0.16.0 (*)
      ├── tracing-attributes v0.1.31
      │   └── tracing v0.1.44
      │       ├── axum v0.8.9
      │       │   └── infraternal-server v0.1.0 (*)
      │       ├── axum-core v0.5.6
      │       │   └── axum v0.8.9 (*)
      │       ├── h2 v0.4.19
      │       │   └── hyper v1.11.1
      │       │       ├── axum v0.8.9 (*)
      │       │       ├── axum-server v0.8.0 (*)
      │       │       └── hyper-util v0.1.21
      │       │           ├── axum v0.8.9 (*)
      │       │           └── axum-server v0.8.0 (*)
      │       ├── infraternal-server v0.1.0 (*)
      │       ├── sqlx-core v0.8.6
      │       │   ├── sqlx v0.8.6 (*)
      │       │   ├── sqlx-macros v0.8.6 (*)
      │       │   ├── sqlx-macros-core v0.8.6 (*)
      │       │   └── sqlx-sqlite v0.8.6
      │       │       ├── sqlx v0.8.6 (*)
      │       │       └── sqlx-macros-core v0.8.6 (*)
      │       ├── sqlx-sqlite v0.8.6 (*)
      │       ├── tower v0.5.3
      │       │   ├── axum v0.8.9 (*)
      │       │   └── (dev) infraternal-server v0.1.0 (*)
      │       ├── tracing-subscriber v0.3.23
      │       │   └── infraternal-server v0.1.0 (*)
      │       ├── webauthn-attestation-ca v0.5.5 (*)
      │       ├── webauthn-rs v0.5.5 (*)
      │       └── webauthn-rs-core v0.5.5 (*)
      └── zerocopy-derive v0.8.60
          └── zerocopy v0.8.60
              ├── half v2.7.1
              │   ├── ciborium-ll v0.2.2
              │   │   └── ciborium v0.2.2
              │   │       └── criterion v0.7.0
              │   │           └── (dev) infraternal-protocol v0.1.0
              │   │               ├── infraternal-agent v0.1.0
              │   │               │   └── infraternal v0.1.0 (*)
              │   │               ├── infraternal-fuzz v0.1.0
              │   │               └── infraternal-server v0.1.0 (*)
              │   └── serde_cbor_2 v0.13.0
              │       ├── infraternal-server v0.1.0 (*)
              │       └── webauthn-rs-core v0.5.5 (*)
              └── ppv-lite86 v0.2.21
                  ├── rand_chacha v0.3.1
                  │   └── rand v0.8.8
                  │       └── bip39 v2.2.2
                  │           └── infraternal-server v0.1.0 (*)
                  └── rand_chacha v0.9.0
                      ├── rand v0.9.5
                      │   ├── infraternal-server v0.1.0 (*)
                      │   ├── tungstenite v0.29.0
                      │   │   └── tokio-tungstenite v0.29.0
                      │   │       ├── axum v0.8.9 (*)
                      │   │       └── (dev) infraternal-server v0.1.0 (*)
                      │   └── webauthn-rs-core v0.5.5 (*)
                      └── webauthn-rs-core v0.5.5 (*)
    ├ syn v3.0.6
      ├── clap_derive v4.6.7
      │   └── clap v4.6.7
      │       ├── criterion v0.7.0
      │       │   └── (dev) infraternal-protocol v0.1.0
      │       │       ├── infraternal-agent v0.1.0
      │       │       │   └── infraternal v0.1.0
      │       │       ├── infraternal-fuzz v0.1.0
      │       │       └── infraternal-server v0.1.0
      │       │           └── infraternal v0.1.0 (*)
      │       └── infraternal v0.1.0 (*)
      ├── displaydoc v0.2.7
      │   ├── asn1-rs v0.6.2
      │   │   ├── der-parser v9.0.0
      │   │   │   ├── webauthn-rs-core v0.5.5
      │   │   │   │   └── webauthn-rs v0.5.5
      │   │   │   │       └── infraternal-server v0.1.0 (*)
      │   │   │   └── x509-parser v0.16.0
      │   │   │       └── webauthn-rs-core v0.5.5 (*)
      │   │   ├── oid-registry v0.7.1
      │   │   │   └── x509-parser v0.16.0 (*)
      │   │   └── x509-parser v0.16.0 (*)
      │   ├── der-parser v9.0.0 (*)
      │   ├── icu_collections v2.3.0
      │   │   ├── icu_normalizer v2.3.0
      │   │   │   └── idna_adapter v1.2.2
      │   │   │       └── idna v1.1.0
      │   │   │           └── url v2.5.8
      │   │   │               ├── infraternal-server v0.1.0 (*)
      │   │   │               ├── sqlx-core v0.8.6
      │   │   │               │   ├── sqlx v0.8.6
      │   │   │               │   │   ├── infraternal v0.1.0 (*)
      │   │   │               │   │   └── infraternal-server v0.1.0 (*)
      │   │   │               │   ├── sqlx-macros v0.8.6
      │   │   │               │   │   └── sqlx v0.8.6 (*)
      │   │   │               │   ├── sqlx-macros-core v0.8.6
      │   │   │               │   │   └── sqlx-macros v0.8.6 (*)
      │   │   │               │   └── sqlx-sqlite v0.8.6
      │   │   │               │       ├── sqlx v0.8.6 (*)
      │   │   │               │       └── sqlx-macros-core v0.8.6 (*)
      │   │   │               ├── sqlx-macros-core v0.8.6 (*)
      │   │   │               ├── sqlx-sqlite v0.8.6 (*)
      │   │   │               ├── webauthn-rs v0.5.5 (*)
      │   │   │               ├── webauthn-rs-core v0.5.5 (*)
      │   │   │               └── webauthn-rs-proto v0.5.5
      │   │   │                   └── webauthn-rs-core v0.5.5 (*)
      │   │   └── icu_properties v2.3.0
      │   │       └── idna_adapter v1.2.2 (*)
      │   ├── icu_locale_core v2.3.0
      │   │   ├── icu_properties v2.3.0 (*)
      │   │   └── icu_provider v2.3.1
      │   │       ├── icu_normalizer v2.3.0 (*)
      │   │       └── icu_properties v2.3.0 (*)
      │   ├── icu_properties v2.3.0 (*)
      │   ├── icu_provider v2.3.1 (*)
      │   ├── tinystr v0.8.4
      │   │   └── icu_locale_core v2.3.0 (*)
      │   └── zerotrie v0.2.5
      │       ├── icu_properties v2.3.0 (*)
      │       └── icu_provider v2.3.1 (*)
      ├── futures-macro v0.3.34
      │   └── futures-util v0.3.34
      │       ├── axum v0.8.9
      │       │   └── infraternal-server v0.1.0 (*)
      │       ├── futures-executor v0.3.34
      │       │   └── sqlx-sqlite v0.8.6 (*)
      │       ├── infraternal-server v0.1.0 (*)
      │       ├── js-sys v0.3.106
      │       │   └── web-sys v0.3.106
      │       │       └── plotters v0.3.7
      │       │           └── criterion v0.7.0 (*)
      │       ├── sqlx-core v0.8.6 (*)
      │       ├── sqlx-sqlite v0.8.6 (*)
      │       ├── tokio-tungstenite v0.29.0
      │       │   ├── axum v0.8.9 (*)
      │       │   └── (dev) infraternal-server v0.1.0 (*)
      │       ├── tower v0.5.3
      │       │   ├── axum v0.8.9 (*)
      │       │   └── (dev) infraternal-server v0.1.0 (*)
      │       └── tower-http v0.6.11
      │           └── infraternal-server v0.1.0 (*)
      ├── serde_derive v1.0.229
      │   ├── serde v1.0.229
      │   │   ├── base64urlsafedata v0.5.5
      │   │   │   ├── webauthn-attestation-ca v0.5.5
      │   │   │   │   └── webauthn-rs-core v0.5.5 (*)
      │   │   │   ├── webauthn-rs v0.5.5 (*)
      │   │   │   ├── webauthn-rs-core v0.5.5 (*)
      │   │   │   └── webauthn-rs-proto v0.5.5 (*)
      │   │   ├── bip39 v2.2.2
      │   │   │   └── infraternal-server v0.1.0 (*)
      │   │   ├── ciborium v0.2.2
      │   │   │   └── criterion v0.7.0 (*)
      │   │   ├── criterion v0.7.0 (*)
      │   │   ├── either v1.18.0
      │   │   │   ├── axum-server v0.8.0
      │   │   │   │   └── infraternal-server v0.1.0 (*)
      │   │   │   ├── itertools v0.13.0
      │   │   │   │   ├── criterion v0.7.0 (*)
      │   │   │   │   └── criterion-plot v0.6.0
      │   │   │   │       └── criterion v0.7.0 (*)
      │   │   │   ├── rayon v1.12.0
      │   │   │   │   └── criterion v0.7.0 (*)
      │   │   │   ├── sqlx-core v0.8.6 (*)
      │   │   │   └── sqlx-macros-core v0.8.6 (*)
      │   │   ├── infraternal-agent v0.1.0 (*)
      │   │   ├── infraternal-mesh v0.1.0
      │   │   ├── infraternal-server v0.1.0 (*)
      │   │   ├── serde_cbor_2 v0.13.0
      │   │   │   ├── infraternal-server v0.1.0 (*)
      │   │   │   └── webauthn-rs-core v0.5.5 (*)
      │   │   ├── serde_urlencoded v0.7.1
      │   │   │   ├── axum v0.8.9 (*)
      │   │   │   └── sqlx-sqlite v0.8.6 (*)
      │   │   ├── sqlx-core v0.8.6 (*)
      │   │   ├── sqlx-macros-core v0.8.6 (*)
      │   │   ├── sqlx-sqlite v0.8.6 (*)
      │   │   ├── tinytemplate v1.2.1
      │   │   │   └── criterion v0.7.0 (*)
      │   │   ├── tracing-serde v0.2.0
      │   │   │   └── tracing-subscriber v0.3.23
      │   │   │       └── infraternal-server v0.1.0 (*)
      │   │   ├── tracing-subscriber v0.3.23 (*)
      │   │   ├── url v2.5.8 (*)
      │   │   ├── webauthn-attestation-ca v0.5.5 (*)
      │   │   ├── webauthn-rs v0.5.5 (*)
      │   │   ├── webauthn-rs-core v0.5.5 (*)
      │   │   └── webauthn-rs-proto v0.5.5 (*)
      │   └── url v2.5.8 (*)
      ├── synstructure v0.14.0
      │   ├── yoke-derive v0.8.4
      │   │   └── yoke v0.8.3
      │   │       ├── icu_collections v2.3.0 (*)
      │   │       ├── icu_provider v2.3.1 (*)
      │   │       ├── zerotrie v0.2.5 (*)
      │   │       └── zerovec v0.11.8
      │   │           ├── icu_collections v2.3.0 (*)
      │   │           ├── icu_locale_core v2.3.0 (*)
      │   │           ├── icu_normalizer v2.3.0 (*)
      │   │           ├── icu_properties v2.3.0 (*)
      │   │           ├── icu_provider v2.3.1 (*)
      │   │           ├── potential_utf v0.1.6
      │   │           │   └── icu_collections v2.3.0 (*)
      │   │           └── tinystr v0.8.4 (*)
      │   └── zerofrom-derive v0.1.8
      │       └── zerofrom v0.1.8
      │           ├── icu_collections v2.3.0 (*)
      │           ├── icu_provider v2.3.1 (*)
      │           ├── yoke v0.8.3 (*)
      │           ├── zerotrie v0.2.5 (*)
      │           └── zerovec v0.11.8 (*)
      ├── thiserror-impl v2.0.21
      │   └── thiserror v2.0.21
      │       ├── infraternal v0.1.0 (*)
      │       ├── infraternal-mesh v0.1.0 (*)
      │       ├── infraternal-server v0.1.0 (*)
      │       ├── sqlx-core v0.8.6 (*)
      │       ├── sqlx-sqlite v0.8.6 (*)
      │       └── tungstenite v0.29.0
      │           └── tokio-tungstenite v0.29.0 (*)
      ├── tokio-macros v2.7.2
      │   └── tokio v1.53.2
      │       ├── axum v0.8.9 (*)
      │       ├── axum-server v0.8.0 (*)
      │       ├── fs-err v3.3.2
      │       │   └── axum-server v0.8.0 (*)
      │       ├── h2 v0.4.19
      │       │   └── hyper v1.11.1
      │       │       ├── axum v0.8.9 (*)
      │       │       ├── axum-server v0.8.0 (*)
      │       │       └── hyper-util v0.1.21
      │       │           ├── axum v0.8.9 (*)
      │       │           └── axum-server v0.8.0 (*)
      │       ├── hyper v1.11.1 (*)
      │       ├── hyper-util v0.1.21 (*)
      │       ├── infraternal v0.1.0 (*)
      │       ├── infraternal-agent v0.1.0 (*)
      │       ├── (dev) infraternal-server v0.1.0 (*)
      │       ├── sqlx-core v0.8.6 (*)
      │       ├── sqlx-macros-core v0.8.6 (*)
      │       ├── tokio-openssl v0.6.5
      │       │   └── axum-server v0.8.0 (*)
      │       ├── tokio-stream v0.1.19
      │       │   └── sqlx-core v0.8.6 (*)
      │       ├── tokio-tungstenite v0.29.0 (*)
      │       ├── tokio-util v0.7.19
      │       │   ├── h2 v0.4.19 (*)
      │       │   └── tower-http v0.6.11 (*)
      │       ├── tower v0.5.3 (*)
      │       └── tower-http v0.6.11 (*)
      ├── wasm-bindgen-macro-support v0.2.129
      │   └── wasm-bindgen-macro v0.2.129
      │       └── wasm-bindgen v0.2.129
      │           ├── js-sys v0.3.106 (*)
      │           ├── plotters v0.3.7 (*)
      │           └── web-sys v0.3.106 (*)
      ├── yoke-derive v0.8.4 (*)
      ├── zerofrom-derive v0.1.8 (*)
      └── zerovec-derive v0.11.6
          └── zerovec v0.11.8 (*)

warning[duplicate]: found 2 duplicate entries for crate 'synstructure'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:229:1
    │  
229 │ ╭ synstructure 0.13.2 registry+https://github.com/rust-lang/crates.io-index
230 │ │ synstructure 0.14.0 registry+https://github.com/rust-lang/crates.io-index
    │ ╰─────────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ synstructure v0.13.2
      └── asn1-rs-derive v0.5.1
          └── asn1-rs v0.6.2
              ├── der-parser v9.0.0
              │   ├── webauthn-rs-core v0.5.5
              │   │   └── webauthn-rs v0.5.5
              │   │       └── infraternal-server v0.1.0
              │   │           └── infraternal v0.1.0
              │   └── x509-parser v0.16.0
              │       └── webauthn-rs-core v0.5.5 (*)
              ├── oid-registry v0.7.1
              │   └── x509-parser v0.16.0 (*)
              └── x509-parser v0.16.0 (*)
    ├ synstructure v0.14.0
      ├── yoke-derive v0.8.4
      │   └── yoke v0.8.3
      │       ├── icu_collections v2.3.0
      │       │   ├── icu_normalizer v2.3.0
      │       │   │   └── idna_adapter v1.2.2
      │       │   │       └── idna v1.1.0
      │       │   │           └── url v2.5.8
      │       │   │               ├── infraternal-server v0.1.0
      │       │   │               │   └── infraternal v0.1.0
      │       │   │               ├── sqlx-core v0.8.6
      │       │   │               │   ├── sqlx v0.8.6
      │       │   │               │   │   ├── infraternal v0.1.0 (*)
      │       │   │               │   │   └── infraternal-server v0.1.0 (*)
      │       │   │               │   ├── sqlx-macros v0.8.6
      │       │   │               │   │   └── sqlx v0.8.6 (*)
      │       │   │               │   ├── sqlx-macros-core v0.8.6
      │       │   │               │   │   └── sqlx-macros v0.8.6 (*)
      │       │   │               │   └── sqlx-sqlite v0.8.6
      │       │   │               │       ├── sqlx v0.8.6 (*)
      │       │   │               │       └── sqlx-macros-core v0.8.6 (*)
      │       │   │               ├── sqlx-macros-core v0.8.6 (*)
      │       │   │               ├── sqlx-sqlite v0.8.6 (*)
      │       │   │               ├── webauthn-rs v0.5.5
      │       │   │               │   └── infraternal-server v0.1.0 (*)
      │       │   │               ├── webauthn-rs-core v0.5.5
      │       │   │               │   └── webauthn-rs v0.5.5 (*)
      │       │   │               └── webauthn-rs-proto v0.5.5
      │       │   │                   └── webauthn-rs-core v0.5.5 (*)
      │       │   └── icu_properties v2.3.0
      │       │       └── idna_adapter v1.2.2 (*)
      │       ├── icu_provider v2.3.1
      │       │   ├── icu_normalizer v2.3.0 (*)
      │       │   └── icu_properties v2.3.0 (*)
      │       ├── zerotrie v0.2.5
      │       │   ├── icu_properties v2.3.0 (*)
      │       │   └── icu_provider v2.3.1 (*)
      │       └── zerovec v0.11.8
      │           ├── icu_collections v2.3.0 (*)
      │           ├── icu_locale_core v2.3.0
      │           │   ├── icu_properties v2.3.0 (*)
      │           │   └── icu_provider v2.3.1 (*)
      │           ├── icu_normalizer v2.3.0 (*)
      │           ├── icu_properties v2.3.0 (*)
      │           ├── icu_provider v2.3.1 (*)
      │           ├── potential_utf v0.1.6
      │           │   └── icu_collections v2.3.0 (*)
      │           └── tinystr v0.8.4
      │               └── icu_locale_core v2.3.0 (*)
      └── zerofrom-derive v0.1.8
          └── zerofrom v0.1.8
              ├── icu_collections v2.3.0 (*)
              ├── icu_provider v2.3.1 (*)
              ├── yoke v0.8.3 (*)
              ├── zerotrie v0.2.5 (*)
              └── zerovec v0.11.8 (*)

warning[duplicate]: found 2 duplicate entries for crate 'thiserror'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:231:1
    │  
231 │ ╭ thiserror 1.0.69 registry+https://github.com/rust-lang/crates.io-index
232 │ │ thiserror 2.0.21 registry+https://github.com/rust-lang/crates.io-index
    │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ thiserror v1.0.69
      ├── asn1-rs v0.6.2
      │   ├── der-parser v9.0.0
      │   │   ├── webauthn-rs-core v0.5.5
      │   │   │   └── webauthn-rs v0.5.5
      │   │   │       └── infraternal-server v0.1.0
      │   │   │           └── infraternal v0.1.0
      │   │   └── x509-parser v0.16.0
      │   │       └── webauthn-rs-core v0.5.5 (*)
      │   ├── oid-registry v0.7.1
      │   │   └── x509-parser v0.16.0 (*)
      │   └── x509-parser v0.16.0 (*)
      ├── webauthn-rs-core v0.5.5 (*)
      └── x509-parser v0.16.0 (*)
    ├ thiserror v2.0.21
      ├── infraternal v0.1.0
      ├── infraternal-mesh v0.1.0
      ├── infraternal-server v0.1.0
      │   └── infraternal v0.1.0 (*)
      ├── sqlx-core v0.8.6
      │   ├── sqlx v0.8.6
      │   │   ├── infraternal v0.1.0 (*)
      │   │   └── infraternal-server v0.1.0 (*)
      │   ├── sqlx-macros v0.8.6
      │   │   └── sqlx v0.8.6 (*)
      │   ├── sqlx-macros-core v0.8.6
      │   │   └── sqlx-macros v0.8.6 (*)
      │   └── sqlx-sqlite v0.8.6
      │       ├── sqlx v0.8.6 (*)
      │       └── sqlx-macros-core v0.8.6 (*)
      ├── sqlx-sqlite v0.8.6 (*)
      └── tungstenite v0.29.0
          └── tokio-tungstenite v0.29.0
              ├── axum v0.8.9
              │   └── infraternal-server v0.1.0 (*)
              └── (dev) infraternal-server v0.1.0 (*)

warning[duplicate]: found 2 duplicate entries for crate 'thiserror-impl'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:233:1
    │  
233 │ ╭ thiserror-impl 1.0.69 registry+https://github.com/rust-lang/crates.io-index
234 │ │ thiserror-impl 2.0.21 registry+https://github.com/rust-lang/crates.io-index
    │ ╰───────────────────────────────────────────────────────────────────────────┘ lock entries
    │  
    ├ thiserror-impl v1.0.69
      └── thiserror v1.0.69
          ├── asn1-rs v0.6.2
          │   ├── der-parser v9.0.0
          │   │   ├── webauthn-rs-core v0.5.5
          │   │   │   └── webauthn-rs v0.5.5
          │   │   │       └── infraternal-server v0.1.0
          │   │   │           └── infraternal v0.1.0
          │   │   └── x509-parser v0.16.0
          │   │       └── webauthn-rs-core v0.5.5 (*)
          │   ├── oid-registry v0.7.1
          │   │   └── x509-parser v0.16.0 (*)
          │   └── x509-parser v0.16.0 (*)
          ├── webauthn-rs-core v0.5.5 (*)
          └── x509-parser v0.16.0 (*)
    ├ thiserror-impl v2.0.21
      └── thiserror v2.0.21
          ├── infraternal v0.1.0
          ├── infraternal-mesh v0.1.0
          ├── infraternal-server v0.1.0
          │   └── infraternal v0.1.0 (*)
          ├── sqlx-core v0.8.6
          │   ├── sqlx v0.8.6
          │   │   ├── infraternal v0.1.0 (*)
          │   │   └── infraternal-server v0.1.0 (*)
          │   ├── sqlx-macros v0.8.6
          │   │   └── sqlx v0.8.6 (*)
          │   ├── sqlx-macros-core v0.8.6
          │   │   └── sqlx-macros v0.8.6 (*)
          │   └── sqlx-sqlite v0.8.6
          │       ├── sqlx v0.8.6 (*)
          │       └── sqlx-macros-core v0.8.6 (*)
          ├── sqlx-sqlite v0.8.6 (*)
          └── tungstenite v0.29.0
              └── tokio-tungstenite v0.29.0
                  ├── axum v0.8.9
                  │   └── infraternal-server v0.1.0 (*)
                  └── (dev) infraternal-server v0.1.0 (*)

advisories ok, bans ok, licenses ok, sources ok

==> static builds
    Finished `release` profile [optimized] target(s) in 0.33s
/home/kayg/.cache/codex-scratch/canvas-streams/target/x86_64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped
PT_INTERP: absent; size: 15985488 bytes (baseline 16142672 + allowance 262144 = max 16404816)
    Finished `release` profile [optimized] target(s) in 0.24s
/home/kayg/.cache/codex-scratch/canvas-streams/target/aarch64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped
PT_INTERP: absent; size: 13439056 bytes (baseline 13555672 + allowance 262144 = max 13817816)
server subcommand: exit 2, not implemented
agent subcommand: exit 2, not implemented

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+

==> Vendored Ghostty artifact checksums
dist/ghostty-web.js: OK
dist/ghostty-vt.wasm: OK
dist/index.d.ts: OK

==> Shared UI frame queue
bun test v1.4.2 (744846f84)

src/frame-batch.test.ts:
(pass) many owners share one frame and repeated requests coalesce [0.86ms]
(pass) cancel releases idle work and a callback can request only the next frame [0.11ms]
(pass) a frame yields remaining owners after its work budget [0.10ms]
(pass) older owners keep their order when a yielding callback queues newer work [0.13ms]
(pass) one callback failure surfaces without stranding another owner [0.20ms]

 5 pass
 0 fail
 18 expect() calls
Ran 5 tests across 1 file. [6.00ms]

==> TypeScript protocol compiler

==> Tracer compiler, precompression and bundle transfer budget
bun install v1.4.2 (744846f84)

Checked 38 installs across 69 packages (no changes) [6.00ms]
$ bun x tsc --project tsconfig.json
bun test v1.4.2 (744846f84)

browser-build.test.ts:
(pass) the browser renderer has no unresolved Vite Node-file shim request [17.32ms]

chunk-classes.test.ts:
(pass) the first screen is critical, the canvas product module and what only it uses are deferred [1.72ms]
(pass) a chunk that both sides use stays critical [0.38ms]
(pass) code only an action loads is on demand, even when the lazy canvas is what loads it [0.65ms]

precompress.test.ts:
(pass) text sidecars round-trip deterministically; compressed formats remain identity [16.81ms]

test/recovery-ui.test.ts:
(pass) compiled recovery UI mode off obeys its URL boundary [3.12ms]
(pass) compiled recovery UI mode preview obeys its URL boundary [2.53ms]
(pass) compiled recovery UI mode 1 obeys its URL boundary [2.08ms]

test/recovery-crypto.test.ts:
(pass) HKDF siblings match independent implementation and bind unwrap to domain, account, kind and version [8.03ms]
(pass) 100 repeated wrapping operations generate independent salts and nonces [18.29ms]

test/renderer-plain-cache.test.ts:
(pass) unchanged full plain viewport skips drawing while changed pixels and forced redraws remain visible [4.14ms]

test/recovery-wait.test.ts:
(pass) server remaining wait 0s is accepted through the capability policy maximum [2.23ms]
(pass) server remaining wait 86400s is accepted through the capability policy maximum [1.21ms]
Final gate verbatim continuation; head 23895a5b90f50afdaed9116de788f6928bc12f57. Part 2/3: ````text │ └── axum-server v0.8.0 (*) └── sqlx-core v0.8.6 ├── sqlx v0.8.6 │ ├── infraternal v0.1.0 (*) │ └── infraternal-server v0.1.0 (*) ├── sqlx-macros v0.8.6 │ └── sqlx v0.8.6 (*) ├── sqlx-macros-core v0.8.6 │ └── sqlx-macros v0.8.6 (*) └── sqlx-sqlite v0.8.6 ├── sqlx v0.8.6 (*) └── sqlx-macros-core v0.8.6 (*) warning[duplicate]: found 2 duplicate entries for crate 'r-efi' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:183:1 │ 183 │ ╭ r-efi 5.3.0 registry+https://github.com/rust-lang/crates.io-index 184 │ │ r-efi 6.0.0 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────┘ lock entries │ ├ r-efi v5.3.0 └── getrandom v0.3.4 └── rand_core v0.9.5 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 (*) └── webauthn-rs-core v0.5.5 (*) ├ r-efi v6.0.0 └── getrandom v0.4.3 ├── jobserver v0.1.35 │ └── cc v1.6.0 │ ├── (build) libfuzzer-sys v0.4.13 │ │ └── infraternal-fuzz v0.1.0 │ ├── (build) libsqlite3-sys v0.30.1 │ │ └── sqlx-sqlite v0.8.6 │ │ ├── sqlx v0.8.6 │ │ │ ├── infraternal v0.1.0 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 (*) │ │ └── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── openssl-src v300.6.1+3.6.3 │ │ └── (build) openssl-sys v0.9.117 │ │ ├── axum-server v0.8.0 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── openssl v0.10.81 │ │ │ ├── axum-server v0.8.0 (*) │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ ├── tokio-openssl v0.6.5 │ │ │ │ └── axum-server v0.8.0 (*) │ │ │ ├── webauthn-attestation-ca v0.5.5 │ │ │ │ └── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── tokio-openssl v0.6.5 (*) │ │ ├── webauthn-attestation-ca v0.5.5 (*) │ │ └── webauthn-rs-core v0.5.5 (*) │ └── (build) openssl-sys v0.9.117 (*) └── uuid v1.27.0 ├── infraternal-agent v0.1.0 │ └── infraternal v0.1.0 (*) ├── infraternal-server v0.1.0 (*) ├── webauthn-attestation-ca v0.5.5 (*) ├── webauthn-rs v0.5.5 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'rand' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:185:1 │ 185 │ ╭ rand 0.8.8 registry+https://github.com/rust-lang/crates.io-index 186 │ │ rand 0.9.5 registry+https://github.com/rust-lang/crates.io-index │ ╰────────────────────────────────────────────────────────────────┘ lock entries │ ├ rand v0.8.8 └── bip39 v2.2.2 └── infraternal-server v0.1.0 └── infraternal v0.1.0 ├ rand v0.9.5 ├── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── tungstenite v0.29.0 │ └── tokio-tungstenite v0.29.0 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 (*) │ └── (dev) infraternal-server v0.1.0 (*) └── webauthn-rs-core v0.5.5 └── webauthn-rs v0.5.5 └── infraternal-server v0.1.0 (*) warning[duplicate]: found 2 duplicate entries for crate 'rand_chacha' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:187:1 │ 187 │ ╭ rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index 188 │ │ rand_chacha 0.9.0 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────────────┘ lock entries │ ├ rand_chacha v0.3.1 └── rand v0.8.8 └── bip39 v2.2.2 └── infraternal-server v0.1.0 └── infraternal v0.1.0 ├ rand_chacha v0.9.0 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'rand_core' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:189:1 │ 189 │ ╭ rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index 190 │ │ rand_core 0.9.5 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────────┘ lock entries │ ├ rand_core v0.6.4 ├── bip39 v2.2.2 │ └── infraternal-server v0.1.0 │ └── infraternal v0.1.0 ├── crypto-common v0.1.7 │ ├── aead v0.5.2 │ │ └── aes-gcm v0.10.3 │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── cipher v0.4.4 │ │ ├── aes v0.8.4 │ │ │ └── aes-gcm v0.10.3 (*) │ │ ├── aes-gcm v0.10.3 (*) │ │ └── ctr v0.9.2 │ │ └── aes-gcm v0.10.3 (*) │ ├── digest v0.10.7 │ │ ├── blake2 v0.10.6 │ │ │ └── argon2 v0.5.3 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── hmac v0.12.1 │ │ │ └── hkdf v0.12.4 │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ ├── sha1 v0.10.7 │ │ │ ├── axum v0.8.9 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── tungstenite v0.29.0 │ │ │ └── tokio-tungstenite v0.29.0 │ │ │ ├── axum v0.8.9 (*) │ │ │ └── (dev) infraternal-server v0.1.0 (*) │ │ └── sha2 v0.10.9 │ │ ├── infraternal-server v0.1.0 (*) │ │ ├── sqlx-core v0.8.6 │ │ │ ├── sqlx v0.8.6 │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ ├── sqlx v0.8.6 (*) │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ └── sqlx-macros-core v0.8.6 (*) │ └── universal-hash v0.5.1 │ └── polyval v0.6.2 │ └── ghash v0.5.1 │ └── aes-gcm v0.10.3 (*) ├── password-hash v0.5.0 │ └── argon2 v0.5.3 (*) ├── rand v0.8.8 │ └── bip39 v2.2.2 (*) └── rand_chacha v0.3.1 └── rand v0.8.8 (*) ├ rand_core v0.9.5 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 │ │ │ └── infraternal-server v0.1.0 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 │ └── webauthn-rs v0.5.5 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 (*) └── webauthn-rs-core v0.5.5 (*) warning[duplicate]: found 2 duplicate entries for crate 'syn' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:226:1 │ 226 │ ╭ syn 2.0.119 registry+https://github.com/rust-lang/crates.io-index 227 │ │ syn 3.0.6 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────┘ lock entries │ ├ syn v2.0.119 ├── asn1-rs-derive v0.5.1 │ └── asn1-rs v0.6.2 │ ├── der-parser v9.0.0 │ │ ├── webauthn-rs-core v0.5.5 │ │ │ └── webauthn-rs v0.5.5 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ └── x509-parser v0.16.0 │ │ └── webauthn-rs-core v0.5.5 (*) │ ├── oid-registry v0.7.1 │ │ └── x509-parser v0.16.0 (*) │ └── x509-parser v0.16.0 (*) ├── asn1-rs-impl v0.2.0 │ └── asn1-rs v0.6.2 (*) ├── openssl-macros v0.1.1 │ └── openssl v0.10.81 │ ├── axum-server v0.8.0 │ │ └── infraternal-server v0.1.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── tokio-openssl v0.6.5 │ │ └── axum-server v0.8.0 (*) │ ├── webauthn-attestation-ca v0.5.5 │ │ └── webauthn-rs-core v0.5.5 (*) │ └── webauthn-rs-core v0.5.5 (*) ├── sqlx-macros v0.8.6 │ └── sqlx v0.8.6 │ ├── infraternal v0.1.0 (*) │ └── infraternal-server v0.1.0 (*) ├── sqlx-macros-core v0.8.6 │ └── sqlx-macros v0.8.6 (*) ├── synstructure v0.13.2 │ └── asn1-rs-derive v0.5.1 (*) ├── thiserror-impl v1.0.69 │ └── thiserror v1.0.69 │ ├── asn1-rs v0.6.2 (*) │ ├── webauthn-rs-core v0.5.5 (*) │ └── x509-parser v0.16.0 (*) ├── tracing-attributes v0.1.31 │ └── tracing v0.1.44 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 (*) │ ├── axum-core v0.5.6 │ │ └── axum v0.8.9 (*) │ ├── h2 v0.4.19 │ │ └── hyper v1.11.1 │ │ ├── axum v0.8.9 (*) │ │ ├── axum-server v0.8.0 (*) │ │ └── hyper-util v0.1.21 │ │ ├── axum v0.8.9 (*) │ │ └── axum-server v0.8.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 │ │ ├── sqlx v0.8.6 (*) │ │ ├── sqlx-macros v0.8.6 (*) │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ └── sqlx-sqlite v0.8.6 │ │ ├── sqlx v0.8.6 (*) │ │ └── sqlx-macros-core v0.8.6 (*) │ ├── sqlx-sqlite v0.8.6 (*) │ ├── tower v0.5.3 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── tracing-subscriber v0.3.23 │ │ └── infraternal-server v0.1.0 (*) │ ├── webauthn-attestation-ca v0.5.5 (*) │ ├── webauthn-rs v0.5.5 (*) │ └── webauthn-rs-core v0.5.5 (*) └── zerocopy-derive v0.8.60 └── zerocopy v0.8.60 ├── half v2.7.1 │ ├── ciborium-ll v0.2.2 │ │ └── ciborium v0.2.2 │ │ └── criterion v0.7.0 │ │ └── (dev) infraternal-protocol v0.1.0 │ │ ├── infraternal-agent v0.1.0 │ │ │ └── infraternal v0.1.0 (*) │ │ ├── infraternal-fuzz v0.1.0 │ │ └── infraternal-server v0.1.0 (*) │ └── serde_cbor_2 v0.13.0 │ ├── infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 (*) └── ppv-lite86 v0.2.21 ├── rand_chacha v0.3.1 │ └── rand v0.8.8 │ └── bip39 v2.2.2 │ └── infraternal-server v0.1.0 (*) └── rand_chacha v0.9.0 ├── rand v0.9.5 │ ├── infraternal-server v0.1.0 (*) │ ├── tungstenite v0.29.0 │ │ └── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── webauthn-rs-core v0.5.5 (*) └── webauthn-rs-core v0.5.5 (*) ├ syn v3.0.6 ├── clap_derive v4.6.7 │ └── clap v4.6.7 │ ├── criterion v0.7.0 │ │ └── (dev) infraternal-protocol v0.1.0 │ │ ├── infraternal-agent v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ ├── infraternal-fuzz v0.1.0 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 (*) │ └── infraternal v0.1.0 (*) ├── displaydoc v0.2.7 │ ├── asn1-rs v0.6.2 │ │ ├── der-parser v9.0.0 │ │ │ ├── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── x509-parser v0.16.0 │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── oid-registry v0.7.1 │ │ │ └── x509-parser v0.16.0 (*) │ │ └── x509-parser v0.16.0 (*) │ ├── der-parser v9.0.0 (*) │ ├── icu_collections v2.3.0 │ │ ├── icu_normalizer v2.3.0 │ │ │ └── idna_adapter v1.2.2 │ │ │ └── idna v1.1.0 │ │ │ └── url v2.5.8 │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ ├── sqlx-core v0.8.6 │ │ │ │ ├── sqlx v0.8.6 │ │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ │ ├── sqlx v0.8.6 (*) │ │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-sqlite v0.8.6 (*) │ │ │ ├── webauthn-rs v0.5.5 (*) │ │ │ ├── webauthn-rs-core v0.5.5 (*) │ │ │ └── webauthn-rs-proto v0.5.5 │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ └── icu_properties v2.3.0 │ │ └── idna_adapter v1.2.2 (*) │ ├── icu_locale_core v2.3.0 │ │ ├── icu_properties v2.3.0 (*) │ │ └── icu_provider v2.3.1 │ │ ├── icu_normalizer v2.3.0 (*) │ │ └── icu_properties v2.3.0 (*) │ ├── icu_properties v2.3.0 (*) │ ├── icu_provider v2.3.1 (*) │ ├── tinystr v0.8.4 │ │ └── icu_locale_core v2.3.0 (*) │ └── zerotrie v0.2.5 │ ├── icu_properties v2.3.0 (*) │ └── icu_provider v2.3.1 (*) ├── futures-macro v0.3.34 │ └── futures-util v0.3.34 │ ├── axum v0.8.9 │ │ └── infraternal-server v0.1.0 (*) │ ├── futures-executor v0.3.34 │ │ └── sqlx-sqlite v0.8.6 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── js-sys v0.3.106 │ │ └── web-sys v0.3.106 │ │ └── plotters v0.3.7 │ │ └── criterion v0.7.0 (*) │ ├── sqlx-core v0.8.6 (*) │ ├── sqlx-sqlite v0.8.6 (*) │ ├── tokio-tungstenite v0.29.0 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ ├── tower v0.5.3 │ │ ├── axum v0.8.9 (*) │ │ └── (dev) infraternal-server v0.1.0 (*) │ └── tower-http v0.6.11 │ └── infraternal-server v0.1.0 (*) ├── serde_derive v1.0.229 │ ├── serde v1.0.229 │ │ ├── base64urlsafedata v0.5.5 │ │ │ ├── webauthn-attestation-ca v0.5.5 │ │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ │ ├── webauthn-rs v0.5.5 (*) │ │ │ ├── webauthn-rs-core v0.5.5 (*) │ │ │ └── webauthn-rs-proto v0.5.5 (*) │ │ ├── bip39 v2.2.2 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── ciborium v0.2.2 │ │ │ └── criterion v0.7.0 (*) │ │ ├── criterion v0.7.0 (*) │ │ ├── either v1.18.0 │ │ │ ├── axum-server v0.8.0 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── itertools v0.13.0 │ │ │ │ ├── criterion v0.7.0 (*) │ │ │ │ └── criterion-plot v0.6.0 │ │ │ │ └── criterion v0.7.0 (*) │ │ │ ├── rayon v1.12.0 │ │ │ │ └── criterion v0.7.0 (*) │ │ │ ├── sqlx-core v0.8.6 (*) │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ ├── infraternal-agent v0.1.0 (*) │ │ ├── infraternal-mesh v0.1.0 │ │ ├── infraternal-server v0.1.0 (*) │ │ ├── serde_cbor_2 v0.13.0 │ │ │ ├── infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── serde_urlencoded v0.7.1 │ │ │ ├── axum v0.8.9 (*) │ │ │ └── sqlx-sqlite v0.8.6 (*) │ │ ├── sqlx-core v0.8.6 (*) │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ ├── sqlx-sqlite v0.8.6 (*) │ │ ├── tinytemplate v1.2.1 │ │ │ └── criterion v0.7.0 (*) │ │ ├── tracing-serde v0.2.0 │ │ │ └── tracing-subscriber v0.3.23 │ │ │ └── infraternal-server v0.1.0 (*) │ │ ├── tracing-subscriber v0.3.23 (*) │ │ ├── url v2.5.8 (*) │ │ ├── webauthn-attestation-ca v0.5.5 (*) │ │ ├── webauthn-rs v0.5.5 (*) │ │ ├── webauthn-rs-core v0.5.5 (*) │ │ └── webauthn-rs-proto v0.5.5 (*) │ └── url v2.5.8 (*) ├── synstructure v0.14.0 │ ├── yoke-derive v0.8.4 │ │ └── yoke v0.8.3 │ │ ├── icu_collections v2.3.0 (*) │ │ ├── icu_provider v2.3.1 (*) │ │ ├── zerotrie v0.2.5 (*) │ │ └── zerovec v0.11.8 │ │ ├── icu_collections v2.3.0 (*) │ │ ├── icu_locale_core v2.3.0 (*) │ │ ├── icu_normalizer v2.3.0 (*) │ │ ├── icu_properties v2.3.0 (*) │ │ ├── icu_provider v2.3.1 (*) │ │ ├── potential_utf v0.1.6 │ │ │ └── icu_collections v2.3.0 (*) │ │ └── tinystr v0.8.4 (*) │ └── zerofrom-derive v0.1.8 │ └── zerofrom v0.1.8 │ ├── icu_collections v2.3.0 (*) │ ├── icu_provider v2.3.1 (*) │ ├── yoke v0.8.3 (*) │ ├── zerotrie v0.2.5 (*) │ └── zerovec v0.11.8 (*) ├── thiserror-impl v2.0.21 │ └── thiserror v2.0.21 │ ├── infraternal v0.1.0 (*) │ ├── infraternal-mesh v0.1.0 (*) │ ├── infraternal-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 (*) │ ├── sqlx-sqlite v0.8.6 (*) │ └── tungstenite v0.29.0 │ └── tokio-tungstenite v0.29.0 (*) ├── tokio-macros v2.7.2 │ └── tokio v1.53.2 │ ├── axum v0.8.9 (*) │ ├── axum-server v0.8.0 (*) │ ├── fs-err v3.3.2 │ │ └── axum-server v0.8.0 (*) │ ├── h2 v0.4.19 │ │ └── hyper v1.11.1 │ │ ├── axum v0.8.9 (*) │ │ ├── axum-server v0.8.0 (*) │ │ └── hyper-util v0.1.21 │ │ ├── axum v0.8.9 (*) │ │ └── axum-server v0.8.0 (*) │ ├── hyper v1.11.1 (*) │ ├── hyper-util v0.1.21 (*) │ ├── infraternal v0.1.0 (*) │ ├── infraternal-agent v0.1.0 (*) │ ├── (dev) infraternal-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 (*) │ ├── tokio-openssl v0.6.5 │ │ └── axum-server v0.8.0 (*) │ ├── tokio-stream v0.1.19 │ │ └── sqlx-core v0.8.6 (*) │ ├── tokio-tungstenite v0.29.0 (*) │ ├── tokio-util v0.7.19 │ │ ├── h2 v0.4.19 (*) │ │ └── tower-http v0.6.11 (*) │ ├── tower v0.5.3 (*) │ └── tower-http v0.6.11 (*) ├── wasm-bindgen-macro-support v0.2.129 │ └── wasm-bindgen-macro v0.2.129 │ └── wasm-bindgen v0.2.129 │ ├── js-sys v0.3.106 (*) │ ├── plotters v0.3.7 (*) │ └── web-sys v0.3.106 (*) ├── yoke-derive v0.8.4 (*) ├── zerofrom-derive v0.1.8 (*) └── zerovec-derive v0.11.6 └── zerovec v0.11.8 (*) warning[duplicate]: found 2 duplicate entries for crate 'synstructure' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:229:1 │ 229 │ ╭ synstructure 0.13.2 registry+https://github.com/rust-lang/crates.io-index 230 │ │ synstructure 0.14.0 registry+https://github.com/rust-lang/crates.io-index │ ╰─────────────────────────────────────────────────────────────────────────┘ lock entries │ ├ synstructure v0.13.2 └── asn1-rs-derive v0.5.1 └── asn1-rs v0.6.2 ├── der-parser v9.0.0 │ ├── webauthn-rs-core v0.5.5 │ │ └── webauthn-rs v0.5.5 │ │ └── infraternal-server v0.1.0 │ │ └── infraternal v0.1.0 │ └── x509-parser v0.16.0 │ └── webauthn-rs-core v0.5.5 (*) ├── oid-registry v0.7.1 │ └── x509-parser v0.16.0 (*) └── x509-parser v0.16.0 (*) ├ synstructure v0.14.0 ├── yoke-derive v0.8.4 │ └── yoke v0.8.3 │ ├── icu_collections v2.3.0 │ │ ├── icu_normalizer v2.3.0 │ │ │ └── idna_adapter v1.2.2 │ │ │ └── idna v1.1.0 │ │ │ └── url v2.5.8 │ │ │ ├── infraternal-server v0.1.0 │ │ │ │ └── infraternal v0.1.0 │ │ │ ├── sqlx-core v0.8.6 │ │ │ │ ├── sqlx v0.8.6 │ │ │ │ │ ├── infraternal v0.1.0 (*) │ │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ │ ├── sqlx-macros v0.8.6 │ │ │ │ │ └── sqlx v0.8.6 (*) │ │ │ │ ├── sqlx-macros-core v0.8.6 │ │ │ │ │ └── sqlx-macros v0.8.6 (*) │ │ │ │ └── sqlx-sqlite v0.8.6 │ │ │ │ ├── sqlx v0.8.6 (*) │ │ │ │ └── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-macros-core v0.8.6 (*) │ │ │ ├── sqlx-sqlite v0.8.6 (*) │ │ │ ├── webauthn-rs v0.5.5 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ ├── webauthn-rs-core v0.5.5 │ │ │ │ └── webauthn-rs v0.5.5 (*) │ │ │ └── webauthn-rs-proto v0.5.5 │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ └── icu_properties v2.3.0 │ │ └── idna_adapter v1.2.2 (*) │ ├── icu_provider v2.3.1 │ │ ├── icu_normalizer v2.3.0 (*) │ │ └── icu_properties v2.3.0 (*) │ ├── zerotrie v0.2.5 │ │ ├── icu_properties v2.3.0 (*) │ │ └── icu_provider v2.3.1 (*) │ └── zerovec v0.11.8 │ ├── icu_collections v2.3.0 (*) │ ├── icu_locale_core v2.3.0 │ │ ├── icu_properties v2.3.0 (*) │ │ └── icu_provider v2.3.1 (*) │ ├── icu_normalizer v2.3.0 (*) │ ├── icu_properties v2.3.0 (*) │ ├── icu_provider v2.3.1 (*) │ ├── potential_utf v0.1.6 │ │ └── icu_collections v2.3.0 (*) │ └── tinystr v0.8.4 │ └── icu_locale_core v2.3.0 (*) └── zerofrom-derive v0.1.8 └── zerofrom v0.1.8 ├── icu_collections v2.3.0 (*) ├── icu_provider v2.3.1 (*) ├── yoke v0.8.3 (*) ├── zerotrie v0.2.5 (*) └── zerovec v0.11.8 (*) warning[duplicate]: found 2 duplicate entries for crate 'thiserror' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:231:1 │ 231 │ ╭ thiserror 1.0.69 registry+https://github.com/rust-lang/crates.io-index 232 │ │ thiserror 2.0.21 registry+https://github.com/rust-lang/crates.io-index │ ╰──────────────────────────────────────────────────────────────────────┘ lock entries │ ├ thiserror v1.0.69 ├── asn1-rs v0.6.2 │ ├── der-parser v9.0.0 │ │ ├── webauthn-rs-core v0.5.5 │ │ │ └── webauthn-rs v0.5.5 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ └── x509-parser v0.16.0 │ │ └── webauthn-rs-core v0.5.5 (*) │ ├── oid-registry v0.7.1 │ │ └── x509-parser v0.16.0 (*) │ └── x509-parser v0.16.0 (*) ├── webauthn-rs-core v0.5.5 (*) └── x509-parser v0.16.0 (*) ├ thiserror v2.0.21 ├── infraternal v0.1.0 ├── infraternal-mesh v0.1.0 ├── infraternal-server v0.1.0 │ └── infraternal v0.1.0 (*) ├── sqlx-core v0.8.6 │ ├── sqlx v0.8.6 │ │ ├── infraternal v0.1.0 (*) │ │ └── infraternal-server v0.1.0 (*) │ ├── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 │ ├── sqlx v0.8.6 (*) │ └── sqlx-macros-core v0.8.6 (*) ├── sqlx-sqlite v0.8.6 (*) └── tungstenite v0.29.0 └── tokio-tungstenite v0.29.0 ├── axum v0.8.9 │ └── infraternal-server v0.1.0 (*) └── (dev) infraternal-server v0.1.0 (*) warning[duplicate]: found 2 duplicate entries for crate 'thiserror-impl' ┌─ /home/kayg/Developer/infraternal/.worktrees/canvas-streams/Cargo.lock:233:1 │ 233 │ ╭ thiserror-impl 1.0.69 registry+https://github.com/rust-lang/crates.io-index 234 │ │ thiserror-impl 2.0.21 registry+https://github.com/rust-lang/crates.io-index │ ╰───────────────────────────────────────────────────────────────────────────┘ lock entries │ ├ thiserror-impl v1.0.69 └── thiserror v1.0.69 ├── asn1-rs v0.6.2 │ ├── der-parser v9.0.0 │ │ ├── webauthn-rs-core v0.5.5 │ │ │ └── webauthn-rs v0.5.5 │ │ │ └── infraternal-server v0.1.0 │ │ │ └── infraternal v0.1.0 │ │ └── x509-parser v0.16.0 │ │ └── webauthn-rs-core v0.5.5 (*) │ ├── oid-registry v0.7.1 │ │ └── x509-parser v0.16.0 (*) │ └── x509-parser v0.16.0 (*) ├── webauthn-rs-core v0.5.5 (*) └── x509-parser v0.16.0 (*) ├ thiserror-impl v2.0.21 └── thiserror v2.0.21 ├── infraternal v0.1.0 ├── infraternal-mesh v0.1.0 ├── infraternal-server v0.1.0 │ └── infraternal v0.1.0 (*) ├── sqlx-core v0.8.6 │ ├── sqlx v0.8.6 │ │ ├── infraternal v0.1.0 (*) │ │ └── infraternal-server v0.1.0 (*) │ ├── sqlx-macros v0.8.6 │ │ └── sqlx v0.8.6 (*) │ ├── sqlx-macros-core v0.8.6 │ │ └── sqlx-macros v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 │ ├── sqlx v0.8.6 (*) │ └── sqlx-macros-core v0.8.6 (*) ├── sqlx-sqlite v0.8.6 (*) └── tungstenite v0.29.0 └── tokio-tungstenite v0.29.0 ├── axum v0.8.9 │ └── infraternal-server v0.1.0 (*) └── (dev) infraternal-server v0.1.0 (*) advisories ok, bans ok, licenses ok, sources ok ==> static builds Finished `release` profile [optimized] target(s) in 0.33s /home/kayg/.cache/codex-scratch/canvas-streams/target/x86_64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), static-pie linked, stripped PT_INTERP: absent; size: 15985488 bytes (baseline 16142672 + allowance 262144 = max 16404816) Finished `release` profile [optimized] target(s) in 0.24s /home/kayg/.cache/codex-scratch/canvas-streams/target/aarch64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped PT_INTERP: absent; size: 13439056 bytes (baseline 13555672 + allowance 262144 = max 13817816) server subcommand: exit 2, not implemented agent subcommand: exit 2, not implemented +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ==> Vendored Ghostty artifact checksums dist/ghostty-web.js: OK dist/ghostty-vt.wasm: OK dist/index.d.ts: OK ==> Shared UI frame queue bun test v1.4.2 (744846f84) src/frame-batch.test.ts: (pass) many owners share one frame and repeated requests coalesce [0.86ms] (pass) cancel releases idle work and a callback can request only the next frame [0.11ms] (pass) a frame yields remaining owners after its work budget [0.10ms] (pass) older owners keep their order when a yielding callback queues newer work [0.13ms] (pass) one callback failure surfaces without stranding another owner [0.20ms] 5 pass 0 fail 18 expect() calls Ran 5 tests across 1 file. [6.00ms] ==> TypeScript protocol compiler ==> Tracer compiler, precompression and bundle transfer budget bun install v1.4.2 (744846f84) Checked 38 installs across 69 packages (no changes) [6.00ms] $ bun x tsc --project tsconfig.json bun test v1.4.2 (744846f84) browser-build.test.ts: (pass) the browser renderer has no unresolved Vite Node-file shim request [17.32ms] chunk-classes.test.ts: (pass) the first screen is critical, the canvas product module and what only it uses are deferred [1.72ms] (pass) a chunk that both sides use stays critical [0.38ms] (pass) code only an action loads is on demand, even when the lazy canvas is what loads it [0.65ms] precompress.test.ts: (pass) text sidecars round-trip deterministically; compressed formats remain identity [16.81ms] test/recovery-ui.test.ts: (pass) compiled recovery UI mode off obeys its URL boundary [3.12ms] (pass) compiled recovery UI mode preview obeys its URL boundary [2.53ms] (pass) compiled recovery UI mode 1 obeys its URL boundary [2.08ms] test/recovery-crypto.test.ts: (pass) HKDF siblings match independent implementation and bind unwrap to domain, account, kind and version [8.03ms] (pass) 100 repeated wrapping operations generate independent salts and nonces [18.29ms] test/renderer-plain-cache.test.ts: (pass) unchanged full plain viewport skips drawing while changed pixels and forced redraws remain visible [4.14ms] test/recovery-wait.test.ts: (pass) server remaining wait 0s is accepted through the capability policy maximum [2.23ms] (pass) server remaining wait 86400s is accepted through the capability policy maximum [1.21ms] ````
Author
Owner

Final gate verbatim continuation; head 23895a5b90.

Part 3/3:

(pass) server remaining wait 90000s is accepted through the capability policy maximum [5.93ms]
(pass) server remaining wait 172800s is accepted through the capability policy maximum [1.82ms]
(pass) malformed or excessive remaining wait -1 is denied [1.53ms]
(pass) malformed or excessive remaining wait 0.5 is denied [1.16ms]
(pass) malformed or excessive remaining wait 172801 is denied [1.45ms]
(pass) malformed or excessive remaining wait 9007199254740992 is denied [1.43ms]
(pass) malformed or excessive remaining wait 90000 is denied [1.44ms]

test/recovery-rotation.test.ts:
(pass) signed-in rotation sends only a local envelope and verifier after acknowledgement [7.17ms]
(pass) abandoned word acknowledgement uploads nothing [2.19ms]
(pass) settled acknowledgement cannot upload later (dismissed) [1.83ms]
(pass) settled acknowledgement cannot upload later (no acknowledgement) [1.89ms]

test/canvas-connection.test.ts:
(pass) 12 window writers use one WebSocket, route calls independently and resume their own cursors [193.86ms]
(pass) unnegotiated visibility is rejected before transmission without disconnecting live siblings [7.37ms]
(pass) shared SSH session opening respects the server's sixty-second connect budget [11007.43ms]
(pass) a hidden window created before legacy greeting fails locally while its live sibling attaches [7.34ms]
(pass) a live mode selected before the first greeting needs no preview recovery capability [7.03ms]

src/canvas/mesh/protocol.test.ts:
(pass) the server's own list becomes nodes, tags and grants, by name [0.83ms]
(pass) without `access` (today's server) the person may view and may not edit [0.29ms]
(pass) fields the server does not send are absent, never invented [0.29ms]
(pass) anything that is not a list is refused, whole [2.68ms]
(pass) a node's own tag list and the tag table agree even when a server sends only one [0.10ms]
(pass) the subscription's events: a pushed list, a revision that invalidates, and the end of the subscription [0.30ms]
(pass) answers carry the new revision, and a create the new arrow's id [0.10ms]
(pass) endpoints go out as the server writes them: a node by id, a tag by name [0.06ms]

src/canvas/mesh/layout.test.ts:
(pass) a small mesh keeps the approved arrangement: tags down the left, hosts two to a row [0.70ms]
(pass) the layout is deterministic and does not depend on input order [1.91ms]
(pass) no two cards overlap, and every card lies inside the graph [4.76ms]
(pass) the sheet is wider than tall, roughly 16:10 [0.97ms]
(pass) a pinned node stays where it was put and the others do not move [1.45ms]
(pass) a pin beyond the sheet grows the graph [0.14ms]
(pass) a host's other tags do not move it; a tag nobody carries still has its node [0.09ms]
(pass) 1,000 nodes lay out in a few milliseconds [14.13ms]

src/canvas/layout/stops.test.ts:
(pass) a view that fits the viewport has one stop, centred [0.22ms]
(pass) a wide view has one stop per column and the last stop ends at the right edge [0.13ms]
(pass) a view taller than the viewport is scaled down so it fits [0.02ms]
(pass) nearestStop picks the stop whose centre is closest [0.13ms]
(pass) a big graph opens fitted whole, in one stop, and its canvas is free [0.22ms]
(pass) a small graph keeps one stop per node column [0.13ms]
(pass) on a narrow screen a big graph does not shrink past where its names can be read: it starts at the top left [0.07ms]

src/canvas/layout/geometry.test.ts:
(pass) a dropped view pushes the one it lands on along the axis of least overlap, never itself [0.34ms]
(pass) a chain of neighbours is pushed in turn [0.11ms]
(pass) snapping rounds to whole cells [0.06ms]
(pass) reach follows grants through tags and keeps the relay [0.20ms]

src/canvas/model/document.test.ts:
(pass) a document holds references and layout, never content [0.26ms]
(pass) a document survives JSON and rebuilds the same columns [0.73ms]
(pass) a target that no longer exists is dropped, and an emptied column with it [0.13ms]
(pass) parseDocument rejects anything that is not a document of this format [0.26ms]

 60 pass
 0 fail
 9995 expect() calls
Ran 60 tests across 14 files. [11.44s]
$ bun run build.ts
built chunk-mz4d9rec.js, chunk-gadjkmzw.js, main.js, chunk-pq9n101m.js, chunk-teawrtp0.js, chunk-2rzffs1p.js, chunk-xxn783n1.js, chunk-zzz5exkd.js, chunk-fy2z4vxa.js, chunk-axbkkqp1.js, chunk-7cstcnng.js, chunk-r95pgwbk.js, chunk-cmc3x3e5.js, chunk-1hfqw9kz.js, chunk-0p8vbe12.js, chunk-f32a5b05.js, chunk-cn9dfnkq.js, chunk-nkdrbbpq.js, chunk-ceqmtvhq.js, chunk-6w9nt9p1.js, canvas-socket.worker.js, backdrop.worker.js, faulty-terminal.worker.js, chunk-jy0adc03.js, chunk-ca64jgar.js, chunk-gjmcxpxr.js, chunk-y667rdh9.js
critical chunk-cmc3x3e5.js: identity=39 gzip=39 brotli=39 bytes
critical chunk-gjmcxpxr.js: identity=57370 gzip=18729 brotli=16792 bytes
critical chunk-mz4d9rec.js: identity=9526 gzip=3420 brotli=3031 bytes
onDemand chunk-cn9dfnkq.js: identity=6409 gzip=2523 brotli=2209 bytes
onDemand chunk-nkdrbbpq.js: identity=538 gzip=349 brotli=311 bytes
critical chunk-7cstcnng.js: identity=722248 gzip=208906 brotli=169467 bytes
onDemand chunk-f32a5b05.js: identity=20840 gzip=8491 brotli=7638 bytes
critical faulty-terminal.worker.js: identity=1086 gzip=560 brotli=480 bytes
critical backdrop.worker.js: identity=243 gzip=216 brotli=163 bytes
critical chunk-ca64jgar.js: identity=199 gzip=161 brotli=137 bytes
critical chunk-fy2z4vxa.js: identity=1805 gzip=805 brotli=688 bytes
critical chunk-xxn783n1.js: identity=6483 gzip=3110 brotli=2820 bytes
critical chunk-axbkkqp1.js: identity=90 gzip=90 brotli=78 bytes
critical chunk-2rzffs1p.js: identity=8377 gzip=3575 brotli=3187 bytes
critical chunk-zzz5exkd.js: identity=8548 gzip=3651 brotli=3226 bytes
critical chunk-teawrtp0.js: identity=11864 gzip=3730 brotli=3317 bytes
critical chunk-1hfqw9kz.js: identity=49 gzip=49 brotli=49 bytes
critical chunk-jy0adc03.js: identity=9810 gzip=4016 brotli=3452 bytes
deferred chunk-r95pgwbk.js: identity=101179 gzip=35310 brotli=30896 bytes
critical chunk-y667rdh9.js: identity=39 gzip=39 brotli=39 bytes
onDemand chunk-0p8vbe12.js: identity=5749 gzip=2762 brotli=2497 bytes
onDemand chunk-ceqmtvhq.js: identity=5329 gzip=2567 brotli=2291 bytes
critical main.js: identity=105261 gzip=38268 brotli=33159 bytes
onDemand chunk-6w9nt9p1.js: identity=14863 gzip=5464 brotli=4891 bytes
critical canvas-socket.worker.js: identity=2172 gzip=1022 brotli=911 bytes
deferred chunk-gadjkmzw.js: identity=37185 gzip=14553 brotli=12737 bytes
critical chunk-pq9n101m.js: identity=35 gzip=35 brotli=35 bytes
JavaScript transfer, critical: identity=945244 gzip=290421/307200 brotli=241070/256000 bytes
JavaScript transfer, deferred: identity=138364 gzip=49863/51200 brotli=43633/45056 bytes
JavaScript transfer, onDemand: identity=53728 gzip=22156/20480 brotli=19837/18432 bytes
JavaScript transfer, onDemand largest chunk chunk-f32a5b05.js: gzip=8491/20480 brotli=7638/18432 bytes (class total gzip=22156 brotli=19837, not limited)
fonts/monaspace-neon/italic.latin.woff2: identity=44324 gzip=44324 brotli=44324 bytes
fonts/monaspace-neon/roman.latin.woff2: identity=40016 gzip=40016 brotli=40016 bytes
fonts/jetbrains-mono/italic.latin.woff2: identity=36316 gzip=36316 brotli=36316 bytes
fonts/jetbrains-mono/roman.latin.woff2: identity=34068 gzip=34068 brotli=34068 bytes
fonts/source-code-pro/italic.latin.woff2: identity=23612 gzip=23612 brotli=23612 bytes
fonts/source-code-pro/roman.latin.woff2: identity=22872 gzip=22872 brotli=22872 bytes
fonts/geist-mono/italic.latin.woff2: identity=21380 gzip=21380 brotli=21380 bytes
fonts/geist-mono/roman.latin.woff2: identity=19984 gzip=19984 brotli=19981 bytes
fonts/ibm-plex-mono/italic.latin.woff2: identity=22296 gzip=22296 brotli=22296 bytes
fonts/ibm-plex-mono/roman.latin.woff2: identity=19048 gzip=19048 brotli=19047 bytes
fonts/cascadia-code/italic.latin.woff2: identity=44404 gzip=44404 brotli=44404 bytes
fonts/cascadia-code/roman.latin.woff2: identity=40604 gzip=40604 brotli=40604 bytes
fonts/maple-mono-nf/italic.latin.woff2: identity=53444 gzip=53444 brotli=53444 bytes
fonts/maple-mono-nf/roman.latin.woff2: identity=46432 gzip=46432 brotli=46432 bytes
fonts/nerd-symbols.woff2: identity=223748 gzip=223748 brotli=223748 bytes
fonts/fira-code/roman.latin.woff2: identity=36756 gzip=36756 brotli=36756 bytes
fonts/commit-mono/italic-400.latin.woff2: identity=18716 gzip=18716 brotli=18716 bytes
fonts/commit-mono/italic-700.latin.woff2: identity=18352 gzip=18352 brotli=18352 bytes
fonts/commit-mono/roman-400.latin.woff2: identity=17484 gzip=17484 brotli=17484 bytes
fonts/commit-mono/roman-700.latin.woff2: identity=17260 gzip=17260 brotli=17260 bytes
Font transfer: monaspace-neon=84340/88064 jetbrains-mono=70384/75776 source-code-pro=46484/49152 geist-mono=41364/45056 ibm-plex-mono=41344/45056 cascadia-code=85008/88064 maple-mono-nf=99876/106496 (critical 46432/51200) symbols=223748/235520 fira-code=36756/40960 commit-mono=71812/75776 bytes

==> Rust stream oracle (for the differential test)

==> TypeScript protocol tests
bun test v1.4.2 (744846f84)

src/codec.test.ts:
(pass) wire protocol golden vectors > encodes and decodes each frame exactly as the shared manifest describes [7.97ms]
(pass) wire protocol golden vectors > returns borrowed payload views and writes into reusable buffers [0.25ms]
(pass) wire protocol golden vectors > decodes muxed messages split across WebSocket messages [1.08ms]
(pass) wire protocol golden vectors > rejects oversized, non-canonical, unknown, and malformed frame bytes [0.25ms]
(pass) split mux header preserves trailing Close [0.26ms]
(pass) visibility layouts reject unknown modes, reversed ranges and reserved flags [0.18ms]

src/stream.test.ts:
stream differential: 155 streams, 12906 schedules, zero divergences
(pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [2650.62ms]
(pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [7.85ms]

 8 pass
 0 fail
 38804 expect() calls
Ran 8 tests across 2 files. [2.68s]
Final gate verbatim continuation; head 23895a5b90f50afdaed9116de788f6928bc12f57. Part 3/3: ````text (pass) server remaining wait 90000s is accepted through the capability policy maximum [5.93ms] (pass) server remaining wait 172800s is accepted through the capability policy maximum [1.82ms] (pass) malformed or excessive remaining wait -1 is denied [1.53ms] (pass) malformed or excessive remaining wait 0.5 is denied [1.16ms] (pass) malformed or excessive remaining wait 172801 is denied [1.45ms] (pass) malformed or excessive remaining wait 9007199254740992 is denied [1.43ms] (pass) malformed or excessive remaining wait 90000 is denied [1.44ms] test/recovery-rotation.test.ts: (pass) signed-in rotation sends only a local envelope and verifier after acknowledgement [7.17ms] (pass) abandoned word acknowledgement uploads nothing [2.19ms] (pass) settled acknowledgement cannot upload later (dismissed) [1.83ms] (pass) settled acknowledgement cannot upload later (no acknowledgement) [1.89ms] test/canvas-connection.test.ts: (pass) 12 window writers use one WebSocket, route calls independently and resume their own cursors [193.86ms] (pass) unnegotiated visibility is rejected before transmission without disconnecting live siblings [7.37ms] (pass) shared SSH session opening respects the server's sixty-second connect budget [11007.43ms] (pass) a hidden window created before legacy greeting fails locally while its live sibling attaches [7.34ms] (pass) a live mode selected before the first greeting needs no preview recovery capability [7.03ms] src/canvas/mesh/protocol.test.ts: (pass) the server's own list becomes nodes, tags and grants, by name [0.83ms] (pass) without `access` (today's server) the person may view and may not edit [0.29ms] (pass) fields the server does not send are absent, never invented [0.29ms] (pass) anything that is not a list is refused, whole [2.68ms] (pass) a node's own tag list and the tag table agree even when a server sends only one [0.10ms] (pass) the subscription's events: a pushed list, a revision that invalidates, and the end of the subscription [0.30ms] (pass) answers carry the new revision, and a create the new arrow's id [0.10ms] (pass) endpoints go out as the server writes them: a node by id, a tag by name [0.06ms] src/canvas/mesh/layout.test.ts: (pass) a small mesh keeps the approved arrangement: tags down the left, hosts two to a row [0.70ms] (pass) the layout is deterministic and does not depend on input order [1.91ms] (pass) no two cards overlap, and every card lies inside the graph [4.76ms] (pass) the sheet is wider than tall, roughly 16:10 [0.97ms] (pass) a pinned node stays where it was put and the others do not move [1.45ms] (pass) a pin beyond the sheet grows the graph [0.14ms] (pass) a host's other tags do not move it; a tag nobody carries still has its node [0.09ms] (pass) 1,000 nodes lay out in a few milliseconds [14.13ms] src/canvas/layout/stops.test.ts: (pass) a view that fits the viewport has one stop, centred [0.22ms] (pass) a wide view has one stop per column and the last stop ends at the right edge [0.13ms] (pass) a view taller than the viewport is scaled down so it fits [0.02ms] (pass) nearestStop picks the stop whose centre is closest [0.13ms] (pass) a big graph opens fitted whole, in one stop, and its canvas is free [0.22ms] (pass) a small graph keeps one stop per node column [0.13ms] (pass) on a narrow screen a big graph does not shrink past where its names can be read: it starts at the top left [0.07ms] src/canvas/layout/geometry.test.ts: (pass) a dropped view pushes the one it lands on along the axis of least overlap, never itself [0.34ms] (pass) a chain of neighbours is pushed in turn [0.11ms] (pass) snapping rounds to whole cells [0.06ms] (pass) reach follows grants through tags and keeps the relay [0.20ms] src/canvas/model/document.test.ts: (pass) a document holds references and layout, never content [0.26ms] (pass) a document survives JSON and rebuilds the same columns [0.73ms] (pass) a target that no longer exists is dropped, and an emptied column with it [0.13ms] (pass) parseDocument rejects anything that is not a document of this format [0.26ms] 60 pass 0 fail 9995 expect() calls Ran 60 tests across 14 files. [11.44s] $ bun run build.ts built chunk-mz4d9rec.js, chunk-gadjkmzw.js, main.js, chunk-pq9n101m.js, chunk-teawrtp0.js, chunk-2rzffs1p.js, chunk-xxn783n1.js, chunk-zzz5exkd.js, chunk-fy2z4vxa.js, chunk-axbkkqp1.js, chunk-7cstcnng.js, chunk-r95pgwbk.js, chunk-cmc3x3e5.js, chunk-1hfqw9kz.js, chunk-0p8vbe12.js, chunk-f32a5b05.js, chunk-cn9dfnkq.js, chunk-nkdrbbpq.js, chunk-ceqmtvhq.js, chunk-6w9nt9p1.js, canvas-socket.worker.js, backdrop.worker.js, faulty-terminal.worker.js, chunk-jy0adc03.js, chunk-ca64jgar.js, chunk-gjmcxpxr.js, chunk-y667rdh9.js critical chunk-cmc3x3e5.js: identity=39 gzip=39 brotli=39 bytes critical chunk-gjmcxpxr.js: identity=57370 gzip=18729 brotli=16792 bytes critical chunk-mz4d9rec.js: identity=9526 gzip=3420 brotli=3031 bytes onDemand chunk-cn9dfnkq.js: identity=6409 gzip=2523 brotli=2209 bytes onDemand chunk-nkdrbbpq.js: identity=538 gzip=349 brotli=311 bytes critical chunk-7cstcnng.js: identity=722248 gzip=208906 brotli=169467 bytes onDemand chunk-f32a5b05.js: identity=20840 gzip=8491 brotli=7638 bytes critical faulty-terminal.worker.js: identity=1086 gzip=560 brotli=480 bytes critical backdrop.worker.js: identity=243 gzip=216 brotli=163 bytes critical chunk-ca64jgar.js: identity=199 gzip=161 brotli=137 bytes critical chunk-fy2z4vxa.js: identity=1805 gzip=805 brotli=688 bytes critical chunk-xxn783n1.js: identity=6483 gzip=3110 brotli=2820 bytes critical chunk-axbkkqp1.js: identity=90 gzip=90 brotli=78 bytes critical chunk-2rzffs1p.js: identity=8377 gzip=3575 brotli=3187 bytes critical chunk-zzz5exkd.js: identity=8548 gzip=3651 brotli=3226 bytes critical chunk-teawrtp0.js: identity=11864 gzip=3730 brotli=3317 bytes critical chunk-1hfqw9kz.js: identity=49 gzip=49 brotli=49 bytes critical chunk-jy0adc03.js: identity=9810 gzip=4016 brotli=3452 bytes deferred chunk-r95pgwbk.js: identity=101179 gzip=35310 brotli=30896 bytes critical chunk-y667rdh9.js: identity=39 gzip=39 brotli=39 bytes onDemand chunk-0p8vbe12.js: identity=5749 gzip=2762 brotli=2497 bytes onDemand chunk-ceqmtvhq.js: identity=5329 gzip=2567 brotli=2291 bytes critical main.js: identity=105261 gzip=38268 brotli=33159 bytes onDemand chunk-6w9nt9p1.js: identity=14863 gzip=5464 brotli=4891 bytes critical canvas-socket.worker.js: identity=2172 gzip=1022 brotli=911 bytes deferred chunk-gadjkmzw.js: identity=37185 gzip=14553 brotli=12737 bytes critical chunk-pq9n101m.js: identity=35 gzip=35 brotli=35 bytes JavaScript transfer, critical: identity=945244 gzip=290421/307200 brotli=241070/256000 bytes JavaScript transfer, deferred: identity=138364 gzip=49863/51200 brotli=43633/45056 bytes JavaScript transfer, onDemand: identity=53728 gzip=22156/20480 brotli=19837/18432 bytes JavaScript transfer, onDemand largest chunk chunk-f32a5b05.js: gzip=8491/20480 brotli=7638/18432 bytes (class total gzip=22156 brotli=19837, not limited) fonts/monaspace-neon/italic.latin.woff2: identity=44324 gzip=44324 brotli=44324 bytes fonts/monaspace-neon/roman.latin.woff2: identity=40016 gzip=40016 brotli=40016 bytes fonts/jetbrains-mono/italic.latin.woff2: identity=36316 gzip=36316 brotli=36316 bytes fonts/jetbrains-mono/roman.latin.woff2: identity=34068 gzip=34068 brotli=34068 bytes fonts/source-code-pro/italic.latin.woff2: identity=23612 gzip=23612 brotli=23612 bytes fonts/source-code-pro/roman.latin.woff2: identity=22872 gzip=22872 brotli=22872 bytes fonts/geist-mono/italic.latin.woff2: identity=21380 gzip=21380 brotli=21380 bytes fonts/geist-mono/roman.latin.woff2: identity=19984 gzip=19984 brotli=19981 bytes fonts/ibm-plex-mono/italic.latin.woff2: identity=22296 gzip=22296 brotli=22296 bytes fonts/ibm-plex-mono/roman.latin.woff2: identity=19048 gzip=19048 brotli=19047 bytes fonts/cascadia-code/italic.latin.woff2: identity=44404 gzip=44404 brotli=44404 bytes fonts/cascadia-code/roman.latin.woff2: identity=40604 gzip=40604 brotli=40604 bytes fonts/maple-mono-nf/italic.latin.woff2: identity=53444 gzip=53444 brotli=53444 bytes fonts/maple-mono-nf/roman.latin.woff2: identity=46432 gzip=46432 brotli=46432 bytes fonts/nerd-symbols.woff2: identity=223748 gzip=223748 brotli=223748 bytes fonts/fira-code/roman.latin.woff2: identity=36756 gzip=36756 brotli=36756 bytes fonts/commit-mono/italic-400.latin.woff2: identity=18716 gzip=18716 brotli=18716 bytes fonts/commit-mono/italic-700.latin.woff2: identity=18352 gzip=18352 brotli=18352 bytes fonts/commit-mono/roman-400.latin.woff2: identity=17484 gzip=17484 brotli=17484 bytes fonts/commit-mono/roman-700.latin.woff2: identity=17260 gzip=17260 brotli=17260 bytes Font transfer: monaspace-neon=84340/88064 jetbrains-mono=70384/75776 source-code-pro=46484/49152 geist-mono=41364/45056 ibm-plex-mono=41344/45056 cascadia-code=85008/88064 maple-mono-nf=99876/106496 (critical 46432/51200) symbols=223748/235520 fira-code=36756/40960 commit-mono=71812/75776 bytes ==> Rust stream oracle (for the differential test) ==> TypeScript protocol tests bun test v1.4.2 (744846f84) src/codec.test.ts: (pass) wire protocol golden vectors > encodes and decodes each frame exactly as the shared manifest describes [7.97ms] (pass) wire protocol golden vectors > returns borrowed payload views and writes into reusable buffers [0.25ms] (pass) wire protocol golden vectors > decodes muxed messages split across WebSocket messages [1.08ms] (pass) wire protocol golden vectors > rejects oversized, non-canonical, unknown, and malformed frame bytes [0.25ms] (pass) split mux header preserves trailing Close [0.26ms] (pass) visibility layouts reject unknown modes, reversed ranges and reserved flags [0.18ms] src/stream.test.ts: stream differential: 155 streams, 12906 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [2650.62ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [7.85ms] 8 pass 0 fail 38804 expect() calls Ran 8 tests across 2 files. [2.68s] ````
Author
Owner

Independent verification resumed at target 23895a5b90; branch review-canvas-streams, merge base dev 63b1f10e21. Prior review branch preserved as review-canvas-streams-prior. Prior findings and repair record read; verify repaired regressions, remaining resource/visibility boundaries, CPU and latency claims. No implementation edits, push or deploy.

Independent verification resumed at target 23895a5b90f50afdaed9116de788f6928bc12f57; branch review-canvas-streams, merge base dev 63b1f10e2112b4d06f7059d4faf196251a58d6a8. Prior review branch preserved as review-canvas-streams-prior. Prior findings and repair record read; verify repaired regressions, remaining resource/visibility boundaries, CPU and latency claims. No implementation edits, push or deploy.
Author
Owner

CS-R6 P2 confirmed and committed 7ef5cdd123: local send pressure permanently removes a valid input writer (terminal.ts:1733-1740,1756-1760). Production Ghostty/native Chromium/real worker, port4489,300±30ms RTT; buffered2097152B, queuedInput1B, retained=false, sharedSocketReady=true. Test canvas-input-pressure-review.spec.ts fails at retained-writer assertion; separate producer owns filler acknowledgments, no buffer/send mocks. Evidence docs/verification/review-canvas-streams/round-3/input-pressure-red.log. Implementation unchanged; fast gate and repaired browser cohort still running.

CS-R6 P2 confirmed and committed 7ef5cdd1234c130cd3850607ad1480a77a9a811a: local send pressure permanently removes a valid input writer (terminal.ts:1733-1740,1756-1760). Production Ghostty/native Chromium/real worker, port4489,300±30ms RTT; buffered2097152B, queuedInput1B, retained=false, sharedSocketReady=true. Test canvas-input-pressure-review.spec.ts fails at retained-writer assertion; separate producer owns filler acknowledgments, no buffer/send mocks. Evidence docs/verification/review-canvas-streams/round-3/input-pressure-red.log. Implementation unchanged; fast gate and repaired browser cohort still running.
Author
Owner

Repair verification completed on review head7ef5cdd1, target23895a5b: production browser cohort20/20 passes in3.4min, port4485,300±30ms RTT. Includes all prior CS-R1/R2/R3/R4/R5 browser regressions, worker/main refusal, complete snapshot drawing, visibility parking and cache pixel agreement. No implementation edits. New CS-R6 input-pressure regression remains red; repeat/typecheck and native/static gates pending. Full output will be committed under docs/verification/review-canvas-streams/round-3/.

Repair verification completed on review head7ef5cdd1, target23895a5b: production browser cohort20/20 passes in3.4min, port4485,300±30ms RTT. Includes all prior CS-R1/R2/R3/R4/R5 browser regressions, worker/main refusal, complete snapshot drawing, visibility parking and cache pixel agreement. No implementation edits. New CS-R6 input-pressure regression remains red; repeat/typecheck and native/static gates pending. Full output will be committed under docs/verification/review-canvas-streams/round-3/.
Author
Owner

Native verification completed for target23895a5b (review7ef5cdd1): all workspace native tests passed, including legacy_visibility_refusal_stops_local_reattachment, twelve_real_streams_restore_independent_modes_and_cursors, shim visibility, vt_credit and auth socket/review3 cohorts. DPR3 production layout/pixel checks2/2 pass19.9s. CS-R1–R5 now independently resolved; sole new confirmed gap CS-R6/P2. New input-pressure test reproduces twice; review TypeScript compiler passes. Static builds and then real scale/latency gates remain.

Native verification completed for target23895a5b (review7ef5cdd1): all workspace native tests passed, including legacy_visibility_refusal_stops_local_reattachment, twelve_real_streams_restore_independent_modes_and_cursors, shim visibility, vt_credit and auth socket/review3 cohorts. DPR3 production layout/pixel checks2/2 pass19.9s. CS-R1–R5 now independently resolved; sole new confirmed gap CS-R6/P2. New input-pressure test reproduces twice; review TypeScript compiler passes. Static builds and then real scale/latency gates remain.
Author
Owner

Correction to prior native status: completed canvas/credit cohorts pass, but full workspace native gate failed expired_handshake_releases_user_permits at socket_tests.rs:151 (server103 passed/1 failed/10 ignored). That assertion was missed in a progress summary; no all-workspace pass is claimed. Detached current dev7d6df447 baseline has byte-identical socket_tests.rs; own baseline build and static gate are in progress. Setup-only errors (copied OpenSSL build metadata and omitted make/perl) corrected, not target findings. Fuzz smoke completed25,538,086 executions total (frame22633086, stream618090, shim2286910), three31s runs, sanitizer=none, no crash artifacts; final load18.32/13.87/13.98. CS-R6 remains committed7ef5cdd1.

Correction to prior native status: completed canvas/credit cohorts pass, but full workspace native gate failed expired_handshake_releases_user_permits at socket_tests.rs:151 (server103 passed/1 failed/10 ignored). That assertion was missed in a progress summary; no all-workspace pass is claimed. Detached current dev7d6df447 baseline has byte-identical socket_tests.rs; own baseline build and static gate are in progress. Setup-only errors (copied OpenSSL build metadata and omitted make/perl) corrected, not target findings. Fuzz smoke completed25,538,086 executions total (frame22633086, stream618090, shim2286910), three31s runs, sanitizer=none, no crash artifacts; final load18.32/13.87/13.98. CS-R6 remains committed7ef5cdd1.
Sign in to join this conversation.
No labels
launch-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/infraternal#107
No description provided.