S1: switch the shim to libghostty-vt #22

Closed
opened 2026-10-06 13:47:58 +00:00 by kayg · 27 comments
Owner

DECISIONS 94: switch the shim's terminal state from alacritty_terminal to libghostty-vt. Write our own snapshot serializer, and pass every existing repaint fixture (vim, htop, less, alternate screens 47/1047/1049, continuations). Pin Zig and build statically for both musl targets. Measure the LF flood throughput (target ≥ 10 MB/s through shim and agent) and the RSS per session at 10,000 lines.

DECISIONS 94: switch the shim's terminal state from alacritty_terminal to libghostty-vt. Write our own snapshot serializer, and pass every existing repaint fixture (vim, htop, less, alternate screens 47/1047/1049, continuations). Pin Zig and build statically for both musl targets. Measure the LF flood throughput (target ≥ 10 MB/s through shim and agent) and the RSS per session at 10,000 lines.
Author
Owner

Starting vt-ghostty at base 947d68f. Reading the shim serializer, VT fixtures and build gates before implementing DECISIONS 94. Scope excludes infraternal-agent and session/frame changes except minimal engine API adaptations.

Starting vt-ghostty at base 947d68f. Reading the shim serializer, VT fixtures and build gates before implementing DECISIONS 94. Scope excludes infraternal-agent and session/frame changes except minimal engine API adaptations.
Author
Owner

Finding: clean vt-ghostty actually starts at e72589e346 (947d68f plus the existing interleaved-Ack fix). The worktree DECISIONS.md ends at 86; owner decision 94 is supplied in the job. scripts/auth-toolchain already pins checksum-verified Zig 0.15.2 for both musl C targets. libghostty-vt 0.2.2 pins upstream a887df42c56f6de86c0fe6da9c4eeca37931e083; its C API exposes active-screen cells and pending wrap but lacks inactive-screen lookup, saved cursor, margins, tabs, charset state and hyperlink IDs. Investigating a small read-only native adapter over the pinned Zig screen/cell API to preserve those without mirroring terminal state.

Finding: clean vt-ghostty actually starts at e72589e346fe1707299f64676367cc5668c9d1c3 (947d68f plus the existing interleaved-Ack fix). The worktree DECISIONS.md ends at 86; owner decision 94 is supplied in the job. scripts/auth-toolchain already pins checksum-verified Zig 0.15.2 for both musl C targets. libghostty-vt 0.2.2 pins upstream a887df42c56f6de86c0fe6da9c4eeca37931e083; its C API exposes active-screen cells and pending wrap but lacks inactive-screen lookup, saved cursor, margins, tabs, charset state and hyperlink IDs. Investigating a small read-only native adapter over the pinned Zig screen/cell API to preserve those without mirroring terminal state.
Author
Owner

1981e55 pins Zig 0.15.2 in gate/CI; fast gate exit 0 (target/vt-ghostty/toolchain-gate.log). Baseline static binary sizes: x86_64 9908192 bytes; aarch64 8327168 bytes; both no PT_INTERP. Draft native serializer passes actual Ghostty cell/style/mode/cursor comparison for vim, htop, less and their unchanged continuations, all six alternate/nested variants, and margins/tabs/charsets (target/vt-ghostty/native-check.py). Initial baseline 50 MiB shim-to-infraternal-agent relay: LF 4.160 MB/s, CRLF 13.734 MB/s, printable 31.124 MB/s (target/vt-ghostty/alacritty-flood.log). This run overlapped compilation; final serial comparisons will be recorded separately.

1981e55 pins Zig 0.15.2 in gate/CI; fast gate exit 0 (target/vt-ghostty/toolchain-gate.log). Baseline static binary sizes: x86_64 9908192 bytes; aarch64 8327168 bytes; both no PT_INTERP. Draft native serializer passes actual Ghostty cell/style/mode/cursor comparison for vim, htop, less and their unchanged continuations, all six alternate/nested variants, and margins/tabs/charsets (target/vt-ghostty/native-check.py). Initial baseline 50 MiB shim-to-infraternal-agent relay: LF 4.160 MB/s, CRLF 13.734 MB/s, printable 31.124 MB/s (target/vt-ghostty/alacritty-flood.log). This run overlapped compilation; final serial comparisons will be recorded separately.
Author
Owner

Finding: reconstructing a stored emoji ZWJ cluster with default mode 2027 disabled changes cell 0 (native-unicode-red.log: unicode repaint 1 / continue 1). The serializer now disables clustering for each base and enables it only while appending that cell’s stored grapheme. Native comparison returns 0 for repaint and continuation (target/vt-ghostty/native-unicode-green.log). CJK at a wide wrap seam and combining marks are included. Existing vim/htop/less and all six alternate/nesting probes still compare equal. Style/link run serialization reduces those fixture snapshots from approximately 315 KiB to 27–29 KiB. The terminal initialization API change is isolated in 5b5a035; its fast gate passed (target/vt-ghostty/init-api-gate.log).

Finding: reconstructing a stored emoji ZWJ cluster with default mode 2027 disabled changes cell 0 (native-unicode-red.log: unicode repaint 1 / continue 1). The serializer now disables clustering for each base and enables it only while appending that cell’s stored grapheme. Native comparison returns 0 for repaint and continuation (target/vt-ghostty/native-unicode-green.log). CJK at a wide wrap seam and combining marks are included. Existing vim/htop/less and all six alternate/nesting probes still compare equal. Style/link run serialization reduces those fixture snapshots from approximately 315 KiB to 27–29 KiB. The terminal initialization API change is isolated in 5b5a035; its fast gate passed (target/vt-ghostty/init-api-gate.log).
Author
Owner

Scrollback calibration (pinned native engine, 200x60, 100060 ASCII CRLF rows): 16 MiB retains 9364 history rows; 17 MiB retains 10063; 18 MiB retains 10762; 20 MiB retains 11927. Evidence: target/vt-ghostty/history-preview.py and history-preview.log. Choose 17 MiB for the session default, equivalent to approximately 10000 rows at the prior S1-SHIM comparison geometry. The budget is bytes; narrower columns and sparse/dense metadata change row retention. No decision is changed.

Scrollback calibration (pinned native engine, 200x60, 100060 ASCII CRLF rows): 16 MiB retains 9364 history rows; 17 MiB retains 10063; 18 MiB retains 10762; 20 MiB retains 11927. Evidence: target/vt-ghostty/history-preview.py and history-preview.log. Choose 17 MiB for the session default, equivalent to approximately 10000 rows at the prior S1-SHIM comparison geometry. The budget is bytes; narrower columns and sparse/dense metadata change row retention. No decision is changed.
Author
Owner

432b937 switches the production shim to Ghostty. Fast gate passes, including existing real vim ring-wrap repaint (target/vt-ghostty/engine-gate.log). The default Rust dependency graph excludes Alacritty and vt100; comparison engines require bench-vt. Native archive is linked statically. x86_64 binary is 11418256 bytes (+1510064); aarch64 9557048 bytes (+1229880), no PT_INTERP. New tests pass for emoji/CJK/combining, keyboard stack wrap/pop, retained alternate cursor, wide pending wrap, 8000-byte unfinished OSC/DCS/APC, oversized carry rejection/recovery and byte-budget pruning/resize. Additional finding: restoring a DECSC cursor after changing margins was clamped to the new region (difference at cell 1013; target/vt-ghostty/saved-origin-red.log). Fix reconstructs saved absolute position with temporary full margins, then restores actual margins independently.

432b937 switches the production shim to Ghostty. Fast gate passes, including existing real vim ring-wrap repaint (target/vt-ghostty/engine-gate.log). The default Rust dependency graph excludes Alacritty and vt100; comparison engines require bench-vt. Native archive is linked statically. x86_64 binary is 11418256 bytes (+1510064); aarch64 9557048 bytes (+1229880), no PT_INTERP. New tests pass for emoji/CJK/combining, keyboard stack wrap/pop, retained alternate cursor, wide pending wrap, 8000-byte unfinished OSC/DCS/APC, oversized carry rejection/recovery and byte-budget pruning/resize. Additional finding: restoring a DECSC cursor after changing margins was clamped to the new region (difference at cell 1013; target/vt-ghostty/saved-origin-red.log). Fix reconstructs saved absolute position with temporary full margins, then restores actual margins independently.
Author
Owner

Snapshot regressions committed as bfaa2db after the exact fast gate passed (target/vt-ghostty/snapshot-regressions-gate.log). Expanded 20 unit tests pass: saved origin outside changed margins, implicit hyperlink grouping, erased versus printed cells, keyboard ring rollover, oversized unfinished sequence rejection/recovery, byte-budget pruning/resize, and frozen emoji ZWJ/CJK/combining fixtures. Erased-cell regression evidence: expanded-wrap-red.log (difference 199), empty-cells-tests.log (20 passed).

Serial release static-binary preview on this host, not the pinned perf VM: LF Alacritty 6.178 versus Ghostty 13.880 MB/s; CRLF 20.770 versus 16.169; printable 44.141 versus 81.201, each exactly 50 MiB plus command completion bytes. CRLF regression under investigation via ground C0 carry-parser bypass. Full 200x60 shim RSS including 8 MiB ring: 67128 versus 33116 KiB; idle 4248 versus 4800 KiB. Real shim socket snapshot p99 (1000 samples): 4.112 versus 1.089 ms. Logs: target/vt-ghostty/{alacritty-flood-serial,ghostty-flood-before-carry,alacritty-rss-serial,ghostty-rss-serial}.log.

Snapshot regressions committed as bfaa2db after the exact fast gate passed (target/vt-ghostty/snapshot-regressions-gate.log). Expanded 20 unit tests pass: saved origin outside changed margins, implicit hyperlink grouping, erased versus printed cells, keyboard ring rollover, oversized unfinished sequence rejection/recovery, byte-budget pruning/resize, and frozen emoji ZWJ/CJK/combining fixtures. Erased-cell regression evidence: expanded-wrap-red.log (difference 199), empty-cells-tests.log (20 passed). Serial release static-binary preview on this host, not the pinned perf VM: LF Alacritty 6.178 versus Ghostty 13.880 MB/s; CRLF 20.770 versus 16.169; printable 44.141 versus 81.201, each exactly 50 MiB plus command completion bytes. CRLF regression under investigation via ground C0 carry-parser bypass. Full 200x60 shim RSS including 8 MiB ring: 67128 versus 33116 KiB; idle 4248 versus 4800 KiB. Real shim socket snapshot p99 (1000 samples): 4.112 versus 1.089 ms. Logs: target/vt-ghostty/{alacritty-flood-serial,ghostty-flood-before-carry,alacritty-rss-serial,ghostty-rss-serial}.log.
Author
Owner

Release measurement finding (#22): three serial 50 MiB trials per saved static binary, own builds complete, host i9-9900K/8 CPUs (not pinned perf VM). Median MB/s: LF Alacritty 6.350 -> Ghostty 18.003; CRLF 23.232 -> 21.210 (8.7% slower, overlapping ranges); printable 44.687 -> 80.232. Every Ghostty trial >10 MB/s. Tradeoff is 2.84x LF / 1.80x printable and 50.7% lower full-session RSS. target/vt-ghostty/flood-summary.json contains every sample; vt_flood.py is committed in 22d5eed.

Isolated 200x60 terminal: RSS growth 19160 KiB at 10001 rows, 19416 KiB at full 10178 rows; same-host optional Alacritty comparison confirms 47988 KiB at 10000 rows and 67.33 MB/s raw parsing. Ghostty with carry is 145.01 MB/s (2.15x contemporary parser). Default 17 MiB page budget maps to ~10k rows at this geometry, not a row count.

Release tests: serializer p99=0.917 ms; direct Input->PTY p99=17.417 us; all three assertions pass. Real infraternal-agent gate: all 24 crash/replay cases pass, acknowledgement p99=184.360 us (upper bound on write), credited flood 17.401 MiB/s, starved-output peak daemon RSS=4024 KiB. Logs: release-budgets.log, terminal-rss-isolated.log, alacritty-comparison-current.log, real-agent-gate.log.

Supplemental historical 80x24 idle canary fails its unchanged 4 MiB assertion on BOTH binaries here: baseline 5748 KiB, Ghostty 4724 KiB. Evidence: alacritty-idle-80x24.log and idle-final.log. This is not hidden or treated as green; the contemporary attached 200x60 idle/full-RSS harness and required exact fast gate pass. No budget was loosened.

Release measurement finding (#22): three serial 50 MiB trials per saved static binary, own builds complete, host i9-9900K/8 CPUs (not pinned perf VM). Median MB/s: LF Alacritty 6.350 -> Ghostty 18.003; CRLF 23.232 -> 21.210 (8.7% slower, overlapping ranges); printable 44.687 -> 80.232. Every Ghostty trial >10 MB/s. Tradeoff is 2.84x LF / 1.80x printable and 50.7% lower full-session RSS. target/vt-ghostty/flood-summary.json contains every sample; vt_flood.py is committed in 22d5eed. Isolated 200x60 terminal: RSS growth 19160 KiB at 10001 rows, 19416 KiB at full 10178 rows; same-host optional Alacritty comparison confirms 47988 KiB at 10000 rows and 67.33 MB/s raw parsing. Ghostty with carry is 145.01 MB/s (2.15x contemporary parser). Default 17 MiB page budget maps to ~10k rows at this geometry, not a row count. Release tests: serializer p99=0.917 ms; direct Input->PTY p99=17.417 us; all three assertions pass. Real infraternal-agent gate: all 24 crash/replay cases pass, acknowledgement p99=184.360 us (upper bound on write), credited flood 17.401 MiB/s, starved-output peak daemon RSS=4024 KiB. Logs: release-budgets.log, terminal-rss-isolated.log, alacritty-comparison-current.log, real-agent-gate.log. Supplemental historical 80x24 idle canary fails its unchanged 4 MiB assertion on BOTH binaries here: baseline 5748 KiB, Ghostty 4724 KiB. Evidence: alacritty-idle-80x24.log and idle-final.log. This is not hidden or treated as green; the contemporary attached 200x60 idle/full-RSS harness and required exact fast gate pass. No budget was loosened.
Author
Owner

Final HEAD: d3c71943df. Exact fast gate exit 0. Verbatim gate output, part 1/2.

Command: nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl -c scripts/verify fast


==> fmt

==> VT native fmt

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

==> test
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.19s
     Running unittests src/main.rs (target/debug/deps/infraternal-08f1707a7f680272)

running 0 tests

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

     Running tests/agent_daemon.rs (target/debug/deps/agent_daemon-81afbd1397ec4dc3)

running 1 test
test real_binary_preserves_input_and_output_across_24_crashes ... ok

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

     Running tests/agent_queues.rs (target/debug/deps/agent_queues-ec06b672f3646957)

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 0.97s

     Running tests/agent_sessions.rs (target/debug/deps/agent_sessions-187a2170d6c286ce)

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.03s

     Running tests/shim.rs (target/debug/deps/shim-b544fc38f8bbee9a)

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

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

     Running unittests src/lib.rs (target/debug/deps/infraternal_agent-c7bb54b5dfb18993)

running 10 tests
test relay::tests::input_overlap_gap_and_restart_from_confirmed_offset ... ok
test relay::tests::overflowing_ranges_never_mutate_cursors ... ok
test relay::tests::output_partial_credit_and_dedup ... 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::symlink_state_cannot_redirect_private_runtime_storage ... ok
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::post_listen_chmod_wakes_a_connection_refused_at_bind ... ok
test sessions::tests::cancelled_fragmented_shim_read_retains_header_and_body_progress ... ok

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

     Running tests/transport.rs (target/debug/deps/transport-7cba5dcb7aaef64c)

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

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

     Running unittests src/lib.rs (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 (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 (target/debug/deps/infraternal_protocol-76e71eb05a1911d1)

running 7 tests
test stream_tests::split_mux_header_preserves_trailing_close ... 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::golden_vectors_encode_and_decode_every_contract_frame ... ok
test stream_tests::all_short_frame_splits_match_direct_decoding ... ok
test stream_tests::maximum_sized_fragmented_frame_is_not_rejected ... ok

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

     Running unittests src/lib.rs (target/debug/deps/infraternal_server-efbf982382ad5129)

running 12 tests
test auth::http::tests::admission_partitions_reset_without_trusting_forwarded_headers ... 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::http_csrf_cookie_flags_body_limit_and_latency_evidence ... ok
test auth::tests::recovery_delay_cancel_and_replacement_revokes_every_capability ... ok
test auth::tests::rejected_origin_uv_challenge_signature_prf_and_expired_ceremonies ... ok
test auth::tests::recovery_expiry_revocation_and_cross_user_isolation ... ok
test auth::tests::review_invalid_device_polling_exhausts_browser_budget ... ok
test auth::tests::review_old_words_race_rotation ... ok
test auth::tests::sessions_slide_but_fresh_tap_does_not_and_device_keys_are_scoped ... ok
test auth::tests::setup_expiry_single_announcement_and_parallel_redemption ... ok
test auth::tests::stale_counters_recovery_cancellation_and_wrap_tampering ... ok

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

     Running unittests src/lib.rs (target/debug/deps/infraternal_shim-5964fb7200c53f36)

running 24 tests
test session::measurements::budgets::input_to_pty_write ... ignored, real-PTY performance measurement; set ZDOTDIR to tests/profile
test frame::checks::tests::invalid_lengths_types_and_utf8 ... ok
test frame::checks::golden::every_frozen_message ... ok
test ring::checks::tests::wrap_and_exact_offsets ... ok
test frame::checks::tests::golden_and_fragmented ... ok
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 terminal::checks::tests::implicit_hyperlinks_retain_groups_across_rows_and_continuation ... 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::saved_origin_survives_changed_margins ... ok
test terminal::checks::tests::long_unfinished_hyperlink_and_control_strings_continue ... ok
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::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::alternate_variants_and_nested_switches_repaint ... ok
test terminal::checks::tests::fixtures_and_continuations_repaint ... ok
test frame::checks::golden::exact_maximum_and_coalesced_frames ... ok
test terminal::checks::tests::byte_budget_prunes_history_and_resize_remains_repaintable ... ok
test terminal::checks::tests::unfinished_sequence_over_frame_limit_fails_without_losing_runtime_state ... ok

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

     Running tests/detach.rs (target/debug/deps/detach-0e5b55756971076f)

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.55s

   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_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/vt-ghostty/Cargo.lock:22:1
   │  
22 │ ╭ base64 0.21.7 registry+https://github.com/rust-lang/crates.io-index
23 │ │ 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
     ├── 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 (*)

warning[duplicate]: found 3 duplicate entries for crate 'getrandom'
   ┌─ /home/kayg/Developer/infraternal/.worktrees/vt-ghostty/Cargo.lock:83:1
   │  
83 │ ╭ getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index
84 │ │ getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index
85 │ │ 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 (*)
         │   │   └── 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
         │   └── 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
     │       │       ├── openssl v0.10.81
     │       │       │   ├── infraternal-server v0.1.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 (*)
     │       │       ├── 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/vt-ghostty/Cargo.lock:88:1
   │  
88 │ ╭ hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index
89 │ │ 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
         └── 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 (*)

warning[duplicate]: found 2 duplicate entries for crate 'r-efi'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/vt-ghostty/Cargo.lock:172:1
    │  
172 │ ╭ r-efi 5.3.0 registry+https://github.com/rust-lang/crates.io-index
173 │ │ 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
              │   └── 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
          │       │       ├── openssl v0.10.81
          │       │       │   ├── infraternal-server v0.1.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 (*)
          │       │       ├── 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/vt-ghostty/Cargo.lock:174:1
    │  
174 │ ╭ rand 0.8.8 registry+https://github.com/rust-lang/crates.io-index
175 │ │ 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
      └── 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/vt-ghostty/Cargo.lock:176:1
    │  
176 │ ╭ rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index
177 │ │ 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
      │   └── 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/vt-ghostty/Cargo.lock:178:1
    │  
178 │ ╭ rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index
179 │ │ 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 (*)
      │   │   └── 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 (*)
Final HEAD: d3c71943df981fc1b1f19fa55c7e036b491bee7f. Exact fast gate exit 0. Verbatim gate output, part 1/2. Command: `nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl -c scripts/verify fast` ```text ==> fmt ==> VT native fmt ==> clippy Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.17s ==> test Blocking waiting for file lock on package cache Blocking waiting for file lock on package cache Finished `test` profile [unoptimized + debuginfo] target(s) in 0.19s Running unittests src/main.rs (target/debug/deps/infraternal-08f1707a7f680272) running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running tests/agent_daemon.rs (target/debug/deps/agent_daemon-81afbd1397ec4dc3) running 1 test test real_binary_preserves_input_and_output_across_24_crashes ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.72s Running tests/agent_queues.rs (target/debug/deps/agent_queues-ec06b672f3646957) 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 0.97s Running tests/agent_sessions.rs (target/debug/deps/agent_sessions-187a2170d6c286ce) 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.03s Running tests/shim.rs (target/debug/deps/shim-b544fc38f8bbee9a) running 7 tests test double_fork_survives_parent_death ... ok test disallowed_signal_only_disconnects_peer ... ok test replacement_connection_and_malformed_limit ... ok active test user_scope_survives_parent_unit_stop ... ok test real_shell_reconnect_resize_and_retained_exit ... ok test attached_backpressure_and_detached_progress ... ok test ring_wrap_snapshot_repaints_real_vim ... ok test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.13s Running unittests src/lib.rs (target/debug/deps/infraternal_agent-c7bb54b5dfb18993) running 10 tests test relay::tests::input_overlap_gap_and_restart_from_confirmed_offset ... ok test relay::tests::overflowing_ranges_never_mutate_cursors ... ok test relay::tests::output_partial_credit_and_dedup ... 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::symlink_state_cannot_redirect_private_runtime_storage ... ok 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::post_listen_chmod_wakes_a_connection_refused_at_bind ... ok test sessions::tests::cancelled_fragmented_shim_read_retains_header_and_body_progress ... ok test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s Running tests/transport.rs (target/debug/deps/transport-7cba5dcb7aaef64c) running 2 tests test oversized_header_and_truncated_frame_are_rejected ... ok test fragmented_headers_coalesced_frames_and_reusable_transmit ... ok test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s Running unittests src/lib.rs (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 (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 (target/debug/deps/infraternal_protocol-76e71eb05a1911d1) running 7 tests test stream_tests::split_mux_header_preserves_trailing_close ... 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::golden_vectors_encode_and_decode_every_contract_frame ... ok test stream_tests::all_short_frame_splits_match_direct_decoding ... ok test stream_tests::maximum_sized_fragmented_frame_is_not_rejected ... ok test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Running unittests src/lib.rs (target/debug/deps/infraternal_server-efbf982382ad5129) running 12 tests test auth::http::tests::admission_partitions_reset_without_trusting_forwarded_headers ... 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::http_csrf_cookie_flags_body_limit_and_latency_evidence ... ok test auth::tests::recovery_delay_cancel_and_replacement_revokes_every_capability ... ok test auth::tests::rejected_origin_uv_challenge_signature_prf_and_expired_ceremonies ... ok test auth::tests::recovery_expiry_revocation_and_cross_user_isolation ... ok test auth::tests::review_invalid_device_polling_exhausts_browser_budget ... ok test auth::tests::review_old_words_race_rotation ... ok test auth::tests::sessions_slide_but_fresh_tap_does_not_and_device_keys_are_scoped ... ok test auth::tests::setup_expiry_single_announcement_and_parallel_redemption ... ok test auth::tests::stale_counters_recovery_cancellation_and_wrap_tampering ... ok test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 12.34s Running unittests src/lib.rs (target/debug/deps/infraternal_shim-5964fb7200c53f36) running 24 tests test session::measurements::budgets::input_to_pty_write ... ignored, real-PTY performance measurement; set ZDOTDIR to tests/profile test frame::checks::tests::invalid_lengths_types_and_utf8 ... ok test frame::checks::golden::every_frozen_message ... ok test ring::checks::tests::wrap_and_exact_offsets ... ok test frame::checks::tests::golden_and_fragmented ... ok 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 terminal::checks::tests::implicit_hyperlinks_retain_groups_across_rows_and_continuation ... 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::saved_origin_survives_changed_margins ... ok test terminal::checks::tests::long_unfinished_hyperlink_and_control_strings_continue ... ok 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::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::alternate_variants_and_nested_switches_repaint ... ok test terminal::checks::tests::fixtures_and_continuations_repaint ... ok test frame::checks::golden::exact_maximum_and_coalesced_frames ... ok test terminal::checks::tests::byte_budget_prunes_history_and_resize_remains_repaintable ... ok test terminal::checks::tests::unfinished_sequence_over_frame_limit_fails_without_losing_runtime_state ... ok test result: ok. 20 passed; 0 failed; 4 ignored; 0 measured; 0 filtered out; finished in 0.14s Running tests/detach.rs (target/debug/deps/detach-0e5b55756971076f) 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.55s 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_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/vt-ghostty/Cargo.lock:22:1 │ 22 │ ╭ base64 0.21.7 registry+https://github.com/rust-lang/crates.io-index 23 │ │ 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 ├── 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 (*) warning[duplicate]: found 3 duplicate entries for crate 'getrandom' ┌─ /home/kayg/Developer/infraternal/.worktrees/vt-ghostty/Cargo.lock:83:1 │ 83 │ ╭ getrandom 0.2.17 registry+https://github.com/rust-lang/crates.io-index 84 │ │ getrandom 0.3.4 registry+https://github.com/rust-lang/crates.io-index 85 │ │ 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 (*) │ │ └── 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 │ └── 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 │ │ ├── openssl v0.10.81 │ │ │ ├── infraternal-server v0.1.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 (*) │ │ ├── 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/vt-ghostty/Cargo.lock:88:1 │ 88 │ ╭ hashbrown 0.15.5 registry+https://github.com/rust-lang/crates.io-index 89 │ │ 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 └── 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 (*) warning[duplicate]: found 2 duplicate entries for crate 'r-efi' ┌─ /home/kayg/Developer/infraternal/.worktrees/vt-ghostty/Cargo.lock:172:1 │ 172 │ ╭ r-efi 5.3.0 registry+https://github.com/rust-lang/crates.io-index 173 │ │ 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 │ └── 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 │ │ ├── openssl v0.10.81 │ │ │ ├── infraternal-server v0.1.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 (*) │ │ ├── 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/vt-ghostty/Cargo.lock:174:1 │ 174 │ ╭ rand 0.8.8 registry+https://github.com/rust-lang/crates.io-index 175 │ │ 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 └── 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/vt-ghostty/Cargo.lock:176:1 │ 176 │ ╭ rand_chacha 0.3.1 registry+https://github.com/rust-lang/crates.io-index 177 │ │ 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 │ └── 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/vt-ghostty/Cargo.lock:178:1 │ 178 │ ╭ rand_core 0.6.4 registry+https://github.com/rust-lang/crates.io-index 179 │ │ 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 (*) │ │ └── 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 (*) ```
Author
Owner

Final HEAD: d3c71943df. Exact fast gate exit 0. Verbatim gate output, part 2/2.

Command: nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl -c scripts/verify fast

      │   │       │   ├── 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
      │   └── 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/vt-ghostty/Cargo.lock:213:1
    │  
213 │ ╭ syn 2.0.119 registry+https://github.com/rust-lang/crates.io-index
214 │ │ 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
      │       ├── infraternal-server v0.1.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 (*)
      │       ├── 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 (*)
      │       ├── 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
              │   └── serde_cbor_2 v0.13.0
              │       ├── (dev) 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 (*)
                      │   └── 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 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
      │   │   │   │           └── 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 (*)
      │   ├── 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 (*)
      ├── 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
      │   │   │   ├── 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-server v0.1.0 (*)
      │   │   ├── serde_cbor_2 v0.13.0
      │   │   │   ├── (dev) infraternal-server v0.1.0 (*)
      │   │   │   └── webauthn-rs-core v0.5.5 (*)
      │   │   ├── serde_urlencoded v0.7.1
      │   │   │   ├── axum v0.8.9
      │   │   │   │   └── infraternal-server v0.1.0 (*)
      │   │   │   └── 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 (*)
      │   │   ├── 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-server v0.1.0 (*)
      │       ├── sqlx-core v0.8.6 (*)
      │       └── sqlx-sqlite v0.8.6 (*)
      ├── tokio-macros v2.7.2
      │   └── tokio v1.53.2
      │       ├── axum v0.8.9 (*)
      │       ├── hyper v1.11.1
      │       │   ├── axum v0.8.9 (*)
      │       │   └── hyper-util v0.1.21
      │       │       └── axum v0.8.9 (*)
      │       ├── 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-stream v0.1.19
      │       │   └── sqlx-core v0.8.6 (*)
      │       └── tower v0.5.3
      │           ├── axum v0.8.9 (*)
      │           └── (dev) infraternal-server v0.1.0 (*)
      ├── wasm-bindgen-macro-support v0.2.129
      │   └── wasm-bindgen-macro v0.2.129
      │       └── wasm-bindgen v0.2.129
      │           ├── js-sys v0.3.106
      │           │   └── web-sys v0.3.106
      │           │       └── plotters v0.3.7
      │           │           └── criterion v0.7.0 (*)
      │           ├── 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/vt-ghostty/Cargo.lock:216:1
    │  
216 │ ╭ synstructure 0.13.2 registry+https://github.com/rust-lang/crates.io-index
217 │ │ 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/vt-ghostty/Cargo.lock:218:1
    │  
218 │ ╭ thiserror 1.0.69 registry+https://github.com/rust-lang/crates.io-index
219 │ │ 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-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 (*)

warning[duplicate]: found 2 duplicate entries for crate 'thiserror-impl'
    ┌─ /home/kayg/Developer/infraternal/.worktrees/vt-ghostty/Cargo.lock:220:1
    │  
220 │ ╭ thiserror-impl 1.0.69 registry+https://github.com/rust-lang/crates.io-index
221 │ │ 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-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 (*)

advisories ok, bans ok, licenses ok, sources ok

==> static builds
    Finished `release` profile [optimized] target(s) in 0.13s
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: 11421456 bytes
    Finished `release` profile [optimized] target(s) in 0.13s
target/aarch64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped
PT_INTERP: absent; size: 9560376 bytes
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         |
+---------------------------+--------------+

==> TypeScript protocol compiler

==> 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 [4.80ms]
(pass) wire protocol golden vectors > returns borrowed payload views and writes into reusable buffers [0.20ms]
(pass) wire protocol golden vectors > decodes muxed messages split across WebSocket messages [0.82ms]
(pass) wire protocol golden vectors > rejects oversized, non-canonical, unknown, and malformed frame bytes [0.16ms]
(pass) split mux header preserves trailing Close [0.28ms]

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

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [1.91s]
Final HEAD: d3c71943df981fc1b1f19fa55c7e036b491bee7f. Exact fast gate exit 0. Verbatim gate output, part 2/2. Command: `nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl -c scripts/verify fast` ```text │ │ │ ├── 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 │ └── 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/vt-ghostty/Cargo.lock:213:1 │ 213 │ ╭ syn 2.0.119 registry+https://github.com/rust-lang/crates.io-index 214 │ │ 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 │ ├── infraternal-server v0.1.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 (*) │ ├── 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 (*) │ ├── 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 │ └── serde_cbor_2 v0.13.0 │ ├── (dev) 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 (*) │ └── 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 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 │ │ │ │ └── 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 (*) │ ├── 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 (*) ├── 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 │ │ │ ├── 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-server v0.1.0 (*) │ │ ├── serde_cbor_2 v0.13.0 │ │ │ ├── (dev) infraternal-server v0.1.0 (*) │ │ │ └── webauthn-rs-core v0.5.5 (*) │ │ ├── serde_urlencoded v0.7.1 │ │ │ ├── axum v0.8.9 │ │ │ │ └── infraternal-server v0.1.0 (*) │ │ │ └── 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 (*) │ │ ├── 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-server v0.1.0 (*) │ ├── sqlx-core v0.8.6 (*) │ └── sqlx-sqlite v0.8.6 (*) ├── tokio-macros v2.7.2 │ └── tokio v1.53.2 │ ├── axum v0.8.9 (*) │ ├── hyper v1.11.1 │ │ ├── axum v0.8.9 (*) │ │ └── hyper-util v0.1.21 │ │ └── axum v0.8.9 (*) │ ├── 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-stream v0.1.19 │ │ └── sqlx-core v0.8.6 (*) │ └── tower v0.5.3 │ ├── axum v0.8.9 (*) │ └── (dev) infraternal-server v0.1.0 (*) ├── wasm-bindgen-macro-support v0.2.129 │ └── wasm-bindgen-macro v0.2.129 │ └── wasm-bindgen v0.2.129 │ ├── js-sys v0.3.106 │ │ └── web-sys v0.3.106 │ │ └── plotters v0.3.7 │ │ └── criterion v0.7.0 (*) │ ├── 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/vt-ghostty/Cargo.lock:216:1 │ 216 │ ╭ synstructure 0.13.2 registry+https://github.com/rust-lang/crates.io-index 217 │ │ 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/vt-ghostty/Cargo.lock:218:1 │ 218 │ ╭ thiserror 1.0.69 registry+https://github.com/rust-lang/crates.io-index 219 │ │ 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-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 (*) warning[duplicate]: found 2 duplicate entries for crate 'thiserror-impl' ┌─ /home/kayg/Developer/infraternal/.worktrees/vt-ghostty/Cargo.lock:220:1 │ 220 │ ╭ thiserror-impl 1.0.69 registry+https://github.com/rust-lang/crates.io-index 221 │ │ 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-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 (*) advisories ok, bans ok, licenses ok, sources ok ==> static builds Finished `release` profile [optimized] target(s) in 0.13s 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: 11421456 bytes Finished `release` profile [optimized] target(s) in 0.13s target/aarch64-unknown-linux-musl/release/infraternal: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped PT_INTERP: absent; size: 9560376 bytes 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 | +---------------------------+--------------+ ==> TypeScript protocol compiler ==> 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 [4.80ms] (pass) wire protocol golden vectors > returns borrowed payload views and writes into reusable buffers [0.20ms] (pass) wire protocol golden vectors > decodes muxed messages split across WebSocket messages [0.82ms] (pass) wire protocol golden vectors > rejects oversized, non-canonical, unknown, and malformed frame bytes [0.16ms] (pass) split mux header preserves trailing Close [0.28ms] src/stream.test.ts: stream differential: 134 streams, 11439 schedules, zero divergences (pass) Rust and TypeScript preserve every frame at all boundaries and random multi-splits [1896.92ms] (pass) maximum frame size and fragmented oversized prefix obey the allocation boundary [6.07ms] 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [1.91s] ```
Author
Owner

Implementation and requested measurements are committed on vt-ghostty; final HEAD d3c71943df. Nine atomic commits; session changes are only fallible initialization/resize propagation, in their own commits. No infraternal-agent or frame changes; no push/deploy/issue closure. The exact fast gate passed for every commit. Final gate output is posted verbatim in the preceding three parts; full local log: target/vt-ghostty/docs-gate.log. Optional bench-vt and bench-ghostty Clippy checks pass (comparison-feature-gate.log; ghostty-comparison-clean-source-gate.log).

Release on this host (i9-9900K, 8 CPUs), NOT pinned perf VM. Flood medians from three serial 50 MiB trials each:

Measurement Alacritty Ghostty
LF shim→infraternal agent, MB/s 6.350 18.003
CRLF shim→infraternal agent, MB/s 23.232 21.210
Printable shim→infraternal agent, MB/s 44.687 80.232
Current parser, MB/s 67.33 raw 145.01 with carry
Terminal RSS growth at ~10k rows, KiB 47,988 19,160 (10,001 rows)
Terminal RSS growth at full byte budget, KiB — 19,416 (10,178 rows)
Actual static shim idle RSS 200×60, KiB 4,248 4,800
Actual static shim full history + 8 MiB ring RSS, KiB 67,128 33,116
Real shim socket Snapshot p99, ms, n=1000 4.112 1.089
Serializer Snapshot p99 200×60 + 256-row tail, ms 0.669 historical 0.917
Direct Input→real PTY p99, µs, n=10000 4.777 historical 17.417
Input→PTY-write acknowledgement p99 through actual infraternal agent, µs — 184.360
x86_64 stripped static musl executable, bytes 9,908,192 11,421,456
aarch64 stripped static musl executable, bytes 8,327,168 9,560,376

Both executables have no PT_INTERP. All Ghostty flood trials exceed 10 MB/s; LF 2.84× and printable 1.80× faster, CRLF median 8.7% slower with overlapping ranges. Full-session RSS is 50.7% lower, native terminal growth ~60.1% lower, while idle RSS and binary sizes increase. Historical input/snapshot figures are not contemporary controlled A/B latency measurements. Parser/input/snapshot release assertions pass. The real infraternal-agent fixture passes 24/24 crash/replay cases, credited 50 MiB flood and starved-output snapshot progression; peak daemon RSS 4024 KiB.

Default native scrollback is 17,825,792 BYTES: ~10k typical ASCII rows at 200 columns; width/styles/graphemes/page rotation affect row count. Snapshot tail remains bounded at 256 rows. Both retained screens, saved/live cursor, wrap, regions, charsets, tabs, keyboard ring, colors/styles, hyperlinks, Unicode and unfinished syntax are serialized from native state. Existing vim/htop/less/continuation fixtures are unchanged and pass; Unicode ZWJ/CJK/combining fixture added. Native Zig adapter bypasses missing C getters; exact gaps and smallest read-only upstream patch proposal are in docs/S1-VT-GHOSTTY.md. No second metadata engine or broken built-in formatter is used.

Supplemental historical tests/idle.py retains its 4 MiB guard and fails on both old/new saved binaries on this host (5748/4724 KiB); logs are retained. No budget is loosened or failure hidden. Independent unsafe-boundary review and pinned perf-VM verification remain reviewer follow-ups, not claimed results.

Tracked evidence guide: docs/S1-VT-GHOSTTY.md. Raw logs/numbers: target/vt-ghostty/{flood-summary.json,release-budgets.log,terminal-rss-isolated.log,alacritty-comparison-current.log,alacritty-rss-serial.log,ghostty-rss-serial.log,real-agent-gate.log,docs-gate.log}. Worktree is clean.

Implementation and requested measurements are committed on vt-ghostty; final HEAD d3c71943df981fc1b1f19fa55c7e036b491bee7f. Nine atomic commits; session changes are only fallible initialization/resize propagation, in their own commits. No infraternal-agent or frame changes; no push/deploy/issue closure. The exact fast gate passed for every commit. Final gate output is posted verbatim in the preceding three parts; full local log: target/vt-ghostty/docs-gate.log. Optional bench-vt and bench-ghostty Clippy checks pass (comparison-feature-gate.log; ghostty-comparison-clean-source-gate.log). Release on this host (i9-9900K, 8 CPUs), NOT pinned perf VM. Flood medians from three serial 50 MiB trials each: | Measurement | Alacritty | Ghostty | | --- | ---: | ---: | | LF shim→infraternal agent, MB/s | 6.350 | 18.003 | | CRLF shim→infraternal agent, MB/s | 23.232 | 21.210 | | Printable shim→infraternal agent, MB/s | 44.687 | 80.232 | | Current parser, MB/s | 67.33 raw | 145.01 with carry | | Terminal RSS growth at ~10k rows, KiB | 47,988 | 19,160 (10,001 rows) | | Terminal RSS growth at full byte budget, KiB | — | 19,416 (10,178 rows) | | Actual static shim idle RSS 200×60, KiB | 4,248 | 4,800 | | Actual static shim full history + 8 MiB ring RSS, KiB | 67,128 | 33,116 | | Real shim socket Snapshot p99, ms, n=1000 | 4.112 | 1.089 | | Serializer Snapshot p99 200×60 + 256-row tail, ms | 0.669 historical | 0.917 | | Direct Input→real PTY p99, µs, n=10000 | 4.777 historical | 17.417 | | Input→PTY-write acknowledgement p99 through actual infraternal agent, µs | — | 184.360 | | x86_64 stripped static musl executable, bytes | 9,908,192 | 11,421,456 | | aarch64 stripped static musl executable, bytes | 8,327,168 | 9,560,376 | Both executables have no PT_INTERP. All Ghostty flood trials exceed 10 MB/s; LF 2.84× and printable 1.80× faster, CRLF median 8.7% slower with overlapping ranges. Full-session RSS is 50.7% lower, native terminal growth ~60.1% lower, while idle RSS and binary sizes increase. Historical input/snapshot figures are not contemporary controlled A/B latency measurements. Parser/input/snapshot release assertions pass. The real infraternal-agent fixture passes 24/24 crash/replay cases, credited 50 MiB flood and starved-output snapshot progression; peak daemon RSS 4024 KiB. Default native scrollback is 17,825,792 BYTES: ~10k typical ASCII rows at 200 columns; width/styles/graphemes/page rotation affect row count. Snapshot tail remains bounded at 256 rows. Both retained screens, saved/live cursor, wrap, regions, charsets, tabs, keyboard ring, colors/styles, hyperlinks, Unicode and unfinished syntax are serialized from native state. Existing vim/htop/less/continuation fixtures are unchanged and pass; Unicode ZWJ/CJK/combining fixture added. Native Zig adapter bypasses missing C getters; exact gaps and smallest read-only upstream patch proposal are in docs/S1-VT-GHOSTTY.md. No second metadata engine or broken built-in formatter is used. Supplemental historical tests/idle.py retains its 4 MiB guard and fails on both old/new saved binaries on this host (5748/4724 KiB); logs are retained. No budget is loosened or failure hidden. Independent unsafe-boundary review and pinned perf-VM verification remain reviewer follow-ups, not claimed results. Tracked evidence guide: docs/S1-VT-GHOSTTY.md. Raw logs/numbers: target/vt-ghostty/{flood-summary.json,release-budgets.log,terminal-rss-isolated.log,alacritty-comparison-current.log,alacritty-rss-serial.log,ghostty-rss-serial.log,real-agent-gate.log,docs-gate.log}. Worktree is clean.
Author
Owner

Correction to the completion note: the final fast-gate output is posted in two parts (42,681 characters), not three. Both parts are labelled 1/2 and 2/2.

Correction to the completion note: the final fast-gate output is posted in two parts (42,681 characters), not three. Both parts are labelled 1/2 and 2/2.
Author
Owner

Independent Codex review started. Read-only source worktree branch vt-ghostty; base e72589e; review head d3c7194. Experiments will run in a temporary worktree and findings will be recorded in /tmp/review-vt-findings.md.

Independent Codex review started. Read-only source worktree branch vt-ghostty; base e72589e; review head d3c7194. Experiments will run in a temporary worktree and findings will be recorded in /tmp/review-vt-findings.md.
Author
Owner

Independent review finding F1 (high): snapshot loses REP continuation state. At 20x5 feed ESC[?47hALT ESC[?47lMAIN, snapshot into a fresh terminal, then ESC[2b. Original repeats N; replay repeats T from repainting the inactive alternate screen (first mismatch row 1 column 8, native oracle=8). Location: native/snapshot.zig:40-48, liveCursor. Reproduced in independent_state_corpus; /tmp/review-corpus.log. Additional deterministic fuzz and historical binary stress already produce snapshot mismatches; minimization in progress.

Independent review finding F1 (high): snapshot loses REP continuation state. At 20x5 feed ESC[?47hALT ESC[?47lMAIN, snapshot into a fresh terminal, then ESC[2b. Original repeats N; replay repeats T from repainting the inactive alternate screen (first mismatch row 1 column 8, native oracle=8). Location: native/snapshot.zig:40-48, liveCursor. Reproduced in independent_state_corpus; /tmp/review-corpus.log. Additional deterministic fuzz and historical binary stress already produce snapshot mismatches; minimization in progress.
Author
Owner

Independent review continuation started. Source branch vt-ghostty, base e72589e346, head d3c71943df. Source worktree remains read-only; continuing experiments in /tmp and preserving /tmp/review-vt-findings.md. Rechecking F1 then continuing snapshot, observer, errors, performance and clean-build checks.

Independent review continuation started. Source branch vt-ghostty, base e72589e346fe1707299f64676367cc5668c9d1c3, head d3c71943df981fc1b1f19fa55c7e036b491bee7f. Source worktree remains read-only; continuing experiments in /tmp and preserving /tmp/review-vt-findings.md. Rechecking F1 then continuing snapshot, observer, errors, performance and clean-build checks.
Author
Owner

Independent review (review-vt, Sol medium): the review was cut short twice by the AI tooling's automated content filter, which reacts to raw terminal byte dumps. Findings so far are below. The verdict is already rework.

  • F1 (high), reproduced twice: Snapshot/replay loses REP continuation state. Test input at 20x5: switch to the alternate screen, print ALT, switch back, print MAIN, snapshot and replay, then REP 2. Expected: N repeated twice. Actual: T is repeated, from the repainted inactive alternate screen. The cause is in crates/infraternal-shim/native/snapshot.zig:40–48, which paints the alternate screen after the primary (see also liveCursor at :145).
  • Run 2 also reproduced a cursor-position mismatch after replay, and several mismatches at the line edge (wide or continuation cells). Minimal inputs are not yet recorded.

Next: a fix job builds a differential snapshot test (source terminal vs replayed terminal: cell grid, cursor, modes, and the last printed character), fixes every mismatch, then a fresh review covers FFI soundness, the carry observer, the idle canary and licences.

Independent review (review-vt, Sol medium): the review was cut short twice by the AI tooling's automated content filter, which reacts to raw terminal byte dumps. Findings so far are below. The verdict is already **rework**. - **F1 (high), reproduced twice:** Snapshot/replay loses REP continuation state. Test input at 20x5: switch to the alternate screen, print ALT, switch back, print MAIN, snapshot and replay, then REP 2. Expected: N repeated twice. Actual: T is repeated, from the repainted inactive alternate screen. The cause is in `crates/infraternal-shim/native/snapshot.zig:40–48`, which paints the alternate screen after the primary (see also liveCursor at :145). - Run 2 also reproduced a cursor-position mismatch after replay, and several mismatches at the line edge (wide or continuation cells). Minimal inputs are not yet recorded. Next: a fix job builds a differential snapshot test (source terminal vs replayed terminal: cell grid, cursor, modes, and the last printed character), fixes every mismatch, then a fresh review covers FFI soundness, the carry observer, the idle canary and licences.
Author
Owner

Starting snapshot fidelity work on branch vt-ghostty, base d3c7194457a (full SHA recorded by git). Reading snapshot adapter and differential-test interfaces; regressions will precede fixes. Decisions 13, 40 and 41 apply.

Starting snapshot fidelity work on branch vt-ghostty, base d3c7194457a (full SHA recorded by git). Reading snapshot adapter and differential-test interfaces; regressions will precede fixes. Decisions 13, 40 and 41 apply.
Author
Owner

Base correction: actual starting HEAD is d3c71943df. Findings: native/snapshot.zig paints primary before retained alternate; existing compare omits previous_char, tabs and saved cursor. spikes/stress is absent (rg reports no such directory); tracked tests/fixtures contains vim, htop, less and unicode. Before measurements on this dev box, not perf VM: LF 17.505 MB/s, CRLF 20.808 MB/s, printable 74.784 MB/s; Snapshot p99 1.034 ms / 1000 samples. Evidence target/snapshot-fidelity/before-{flood,snapshot}.log.

Base correction: actual starting HEAD is d3c71943df981fc1b1f19fa55c7e036b491bee7f. Findings: native/snapshot.zig paints primary before retained alternate; existing compare omits previous_char, tabs and saved cursor. spikes/stress is absent (rg reports no such directory); tracked tests/fixtures contains vim, htop, less and unicode. Before measurements on this dev box, not perf VM: LF 17.505 MB/s, CRLF 20.808 MB/s, printable 74.784 MB/s; Snapshot p99 1.034 ms / 1000 samples. Evidence target/snapshot-fidelity/before-{flood,snapshot}.log.
Author
Owner

F1 reproduced by strict REP-state oracle: difference 6000000 before continuation (target/snapshot-fidelity/red.log). Tests-first commit 9e86d2d; active-screen-last fix 32f6ebe passes F1 (f1-green.log). Seeded 1000-case diagnostic found 29 visible replay mismatches: 23 cells, 4 row-wrap flags, 2 cursor positions. Concrete cursor fixture target/snapshot-fidelity/case-766-3000000.vt; edge fixture case-144-12.vt. Diagnostic uses the independent native cell oracle, with payloads only in files.

F1 reproduced by strict REP-state oracle: difference 6000000 before continuation (target/snapshot-fidelity/red.log). Tests-first commit 9e86d2d; active-screen-last fix 32f6ebe passes F1 (f1-green.log). Seeded 1000-case diagnostic found 29 visible replay mismatches: 23 cells, 4 row-wrap flags, 2 cursor positions. Concrete cursor fixture target/snapshot-fidelity/case-766-3000000.vt; edge fixture case-144-12.vt. Diagnostic uses the independent native cell oracle, with payloads only in files.
Author
Owner

Tracking for this work moved to #25 (snapshot fidelity, job fix-vt running) and #26 (second review). Build and gate state stay here.

Tracking for this work moved to #25 (snapshot fidelity, job fix-vt running) and #26 (second review). Build and gate state stay here.
Author
Owner

Minimized cursor failure: origin on, save at home, change region to rows 2-4, restore, print emoji; CUP in origin mode clamps the replay position. Fix 6c22152 uses the saved absolute position and relative movement; cursor regression passes in fixes-preview.log. Line-edge finding: case 144 retains SGR on a now-empty former spacer head; ECH drops foreground/underline attributes. Regression strengthened in 97a8665, still red at cell 12 (edge-green.log is a failed attempted fix, not green evidence). Reconstructing a styled wide wrap and then narrowing its head preserves those fields.

Minimized cursor failure: origin on, save at home, change region to rows 2-4, restore, print emoji; CUP in origin mode clamps the replay position. Fix 6c22152 uses the saved absolute position and relative movement; cursor regression passes in fixes-preview.log. Line-edge finding: case 144 retains SGR on a now-empty former spacer head; ECH drops foreground/underline attributes. Regression strengthened in 97a8665, still red at cell 12 (edge-green.log is a failed attempted fix, not green evidence). Reconstructing a styled wide wrap and then narrowing its head preserves those fields.
Author
Owner

Expanded oracle now checks both screens, saved cursors, tabs, REP and both row wrap flags. 1000-case smoke: 990 faithful replays, 10 explicit API-gap rejections (all-states-corpus.log). The 20k run exposed saved pending wrap over a changed spacer head at case 1977; minimized test is red at cell 12 (saved-edge-red.log), tests-first 64f98d8. Construct DECSC before painting the grid so its temporary print cannot overwrite the final cells. Further nightly case 8030 exposes a last-row continuation flag that delete-line clearing does not reset in this pinned Ghostty; bounded reconstruction needs a nonprinting row-flag setter. No protocol or engine substitution is being made.

Expanded oracle now checks both screens, saved cursors, tabs, REP and both row wrap flags. 1000-case smoke: 990 faithful replays, 10 explicit API-gap rejections (all-states-corpus.log). The 20k run exposed saved pending wrap over a changed spacer head at case 1977; minimized test is red at cell 12 (saved-edge-red.log), tests-first 64f98d8. Construct DECSC before painting the grid so its temporary print cannot overwrite the final cells. Further nightly case 8030 exposes a last-row continuation flag that delete-line clearing does not reset in this pinned Ghostty; bounded reconstruction needs a nonprinting row-flag setter. No protocol or engine substitution is being made.
Author
Owner

Final edge regression: a variation-selector-created wide tail can retain SGR and OSC 8 metadata independently of its base. The failing test reported cell mismatch code 2 in target/snapshot-fidelity/variation-tail-red.log; fix 11884db restores those tail attributes. Enabled differential module: 32 passed, 0 failed, 5 ignored; the 1,000-case smoke corpus has 990 faithful replays and 10 explicit Unsupported restoration gaps (target/snapshot-fidelity/variation-module-green.log). The adapter now rejects unrepresentable state instead of emitting a divergent Snapshot. Final 20k validation, exact gate, measurements and upstream setter proposals are being recorded separately.

Final edge regression: a variation-selector-created wide tail can retain SGR and OSC 8 metadata independently of its base. The failing test reported cell mismatch code 2 in target/snapshot-fidelity/variation-tail-red.log; fix 11884db restores those tail attributes. Enabled differential module: 32 passed, 0 failed, 5 ignored; the 1,000-case smoke corpus has 990 faithful replays and 10 explicit Unsupported restoration gaps (target/snapshot-fidelity/variation-module-green.log). The adapter now rejects unrepresentable state instead of emitting a divergent Snapshot. Final 20k validation, exact gate, measurements and upstream setter proposals are being recorded separately.
Author
Owner

Final 20k nightly profile passes: 19,864 faithful replays, 136 explicit Unsupported gaps, zero accepted divergences (target/snapshot-fidelity/final-nightly.log). First post-change serializer trial missed the 2 ms test guard: p50 0.613 ms, p99 4.637 ms, 27,410 bytes (target/snapshot-fidelity/after-snapshot.log). Concurrent unrelated C compilation occupied nearly all cores; load average 6.07. This failed loaded-host result is retained, and serial measurements will be repeated after compilation subsides rather than described as passing.

Final 20k nightly profile passes: 19,864 faithful replays, 136 explicit Unsupported gaps, zero accepted divergences (target/snapshot-fidelity/final-nightly.log). First post-change serializer trial missed the 2 ms test guard: p50 0.613 ms, p99 4.637 ms, 27,410 bytes (target/snapshot-fidelity/after-snapshot.log). Concurrent unrelated C compilation occupied nearly all cores; load average 6.07. This failed loaded-host result is retained, and serial measurements will be repeated after compilation subsides rather than described as passing.
Author
Owner

Serial development-box measurements after saturated compilation subsided: real credited PTY/shim/infraternal-agent flood before → after, decimal MB/s: LF 17.505 → 16.514; CRLF 20.808 → 20.810; printable 74.784 → 77.715. Every trial, including the earlier loaded-host LF 11.189 MB/s, exceeds 10 MB/s. Release serializer Snapshot at 200x60 + 256-row tail, 1,000 samples: before p50 0.487 ms / p99 1.034 ms; three after trials p50 0.519 / 0.519 / 0.547 ms, p99 1.023 / 1.051 / 1.191 ms, each passing 2 ms. The prior 4.637 ms loaded-host failure remains disclosed. Snapshot bytes 27,279 → 27,410. These are unisolated dev-box observations, not pinned-VM guarantees; one flood per pattern does not prove a speedup. Evidence: target/snapshot-fidelity/{before-flood,before-snapshot,after-flood,after-flood-serial,after-snapshot,after-snapshot-serial-1,after-snapshot-serial-2,after-snapshot-serial-3}.log. docs/S1-VT-GHOSTTY.md records the remaining nonprinting restoration setter proposals and counts; final exact fast gate is running.

Serial development-box measurements after saturated compilation subsided: real credited PTY/shim/infraternal-agent flood before → after, decimal MB/s: LF 17.505 → 16.514; CRLF 20.808 → 20.810; printable 74.784 → 77.715. Every trial, including the earlier loaded-host LF 11.189 MB/s, exceeds 10 MB/s. Release serializer Snapshot at 200x60 + 256-row tail, 1,000 samples: before p50 0.487 ms / p99 1.034 ms; three after trials p50 0.519 / 0.519 / 0.547 ms, p99 1.023 / 1.051 / 1.191 ms, each passing 2 ms. The prior 4.637 ms loaded-host failure remains disclosed. Snapshot bytes 27,279 → 27,410. These are unisolated dev-box observations, not pinned-VM guarantees; one flood per pattern does not prove a speedup. Evidence: target/snapshot-fidelity/{before-flood,before-snapshot,after-flood,after-flood-serial,after-snapshot,after-snapshot-serial-1,after-snapshot-serial-2,after-snapshot-serial-3}.log. docs/S1-VT-GHOSTTY.md records the remaining nonprinting restoration setter proposals and counts; final exact fast gate is running.
Author
Owner

Finished this snapshot-fidelity slice on vt-ghostty. Base d3c71943df; head 234baf0a6c; 21 atomic tests/fixes/API/script/docs commits, clean worktree. No push or deploy; issue remains open.

Fixes restore inactive screen first/active last, independently restore REP and pending wrap, preserve saved cursor before grid repaint, and retain independent line-edge/wide/variation-tail metadata. Rust differential oracle checks both screens and future-output state. Final smoke: 990 faithful replays / 10 explicit API-gap rejections; nightly: 19,864 faithful replays / 136 explicit API-gap rejections; zero accepted divergences. Shim module: 32 passed, 0 failed, 5 ignored; 20k nightly executed separately and PASS. Four tracked captured fixtures exercised; spikes/stress is absent, coverage zero. Remaining independent REP/cursor/row-continuation/empty-cell states are explicitly Unsupported and documented with proposed nonprinting upstream APIs in docs/S1-VT-GHOSTTY.md; this is not a universal-fidelity claim.

Unisolated dev-box evidence: decimal MB/s before → serial after: LF 17.505 → 16.514; CRLF 20.808 → 20.810; printable 74.784 → 77.715. All floods exceed 10 MB/s, including loaded trial LF 11.189. Serializer Snapshot p99 (200x60, 256-row tail, 1,000 samples) before 1.034 ms → serial after 1.023 / 1.051 / 1.191 ms; p50 0.487 → 0.519 / 0.519 / 0.547 ms. Extra reconstruction cost is justified by the failing-before-fix state regressions. Loaded-host p99 4.637 ms failed the 2 ms guard and remains disclosed; every serial rerun passed. Snapshot bytes 27,279 → 27,410. Socket p99 and pinned performance VM were not measured in this follow-up.

Evidence paths: target/snapshot-fidelity/final-docs-fast.log, final-nightly.log, variation-module-green.log, before-flood.log, before-snapshot.log, after-flood.log, after-flood-serial.log, after-snapshot.log, after-snapshot-serial-1.log, after-snapshot-serial-2.log, after-snapshot-serial-3.log. The named red-first fixture logs and unsupported seeded fixture files are in the same directory.

Exact gate (exit 0): nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl nixpkgs#zig_0_15 -c scripts/verify fast
Verbatim summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
 7 pass
 0 fail
Finished this snapshot-fidelity slice on vt-ghostty. Base d3c71943df981fc1b1f19fa55c7e036b491bee7f; head 234baf0a6c46eda56f0a889aa93f744f70aa703f; 21 atomic tests/fixes/API/script/docs commits, clean worktree. No push or deploy; issue remains open. Fixes restore inactive screen first/active last, independently restore REP and pending wrap, preserve saved cursor before grid repaint, and retain independent line-edge/wide/variation-tail metadata. Rust differential oracle checks both screens and future-output state. Final smoke: 990 faithful replays / 10 explicit API-gap rejections; nightly: 19,864 faithful replays / 136 explicit API-gap rejections; zero accepted divergences. Shim module: 32 passed, 0 failed, 5 ignored; 20k nightly executed separately and PASS. Four tracked captured fixtures exercised; spikes/stress is absent, coverage zero. Remaining independent REP/cursor/row-continuation/empty-cell states are explicitly Unsupported and documented with proposed nonprinting upstream APIs in docs/S1-VT-GHOSTTY.md; this is not a universal-fidelity claim. Unisolated dev-box evidence: decimal MB/s before → serial after: LF 17.505 → 16.514; CRLF 20.808 → 20.810; printable 74.784 → 77.715. All floods exceed 10 MB/s, including loaded trial LF 11.189. Serializer Snapshot p99 (200x60, 256-row tail, 1,000 samples) before 1.034 ms → serial after 1.023 / 1.051 / 1.191 ms; p50 0.487 → 0.519 / 0.519 / 0.547 ms. Extra reconstruction cost is justified by the failing-before-fix state regressions. Loaded-host p99 4.637 ms failed the 2 ms guard and remains disclosed; every serial rerun passed. Snapshot bytes 27,279 → 27,410. Socket p99 and pinned performance VM were not measured in this follow-up. Evidence paths: target/snapshot-fidelity/final-docs-fast.log, final-nightly.log, variation-module-green.log, before-flood.log, before-snapshot.log, after-flood.log, after-flood-serial.log, after-snapshot.log, after-snapshot-serial-1.log, after-snapshot-serial-2.log, after-snapshot-serial-3.log. The named red-first fixture logs and unsupported seeded fixture files are in the same directory. Exact gate (exit 0): nix shell nixpkgs#binutils nixpkgs#file nixpkgs#gnumake nixpkgs#perl nixpkgs#zig_0_15 -c scripts/verify fast Verbatim summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ 7 pass 0 fail ```
Author
Owner

Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: libghostty-vt switch (D94) merged via a5250c3 (#22,#26,#34) in dev and prod; remaining resize-refusal limitation tracked on #37. Reopen if anything is still missing.

Closed by the orchestrator during the 2026-10-28 handover (#254), on the owner's request to close finished issues. Evidence: libghostty-vt switch (D94) merged via a5250c3 (#22,#26,#34) in dev and prod; remaining resize-refusal limitation tracked on #37. Reopen if anything is still missing.
kayg closed this issue 2026-10-28 17:52:14 +00:00
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#22
No description provided.