SSH bootstrap: add a real host end to end (demo, D138-D141) #87

Open
opened 2026-10-07 19:02:04 +00:00 by kayg · 336 comments
Owner

Demo-critical (10 October): add a real host end to end. The server connects over SSH, runs a read-only system check, installs the infraternal agent (rootless by default; root only after explicit consent, D139), and the agent joins with a one-time token over the #78 transport. Per-host progress streams to the UI, N hosts run concurrently (D138 H4), failures are human and retryable (D140), and an SSH failure caused by a mesh policy is reported as such (D141 H12).
Foundational-choice note: the SSH client library is not decided. For the demo the job builds behind a SshTransport trait with an adapter that runs the system OpenSSH client (no new dependency; the server's own keys, known_hosts and ssh config are used in place, per H12) and measures a pure-Rust candidate for the owner to decide.

Demo-critical (10 October): add a **real** host end to end. The server connects over SSH, runs a read-only system check, installs the infraternal agent (rootless by default; root only after explicit consent, D139), and the agent joins with a one-time token over the #78 transport. Per-host progress streams to the UI, N hosts run concurrently (D138 H4), failures are human and retryable (D140), and an SSH failure caused by a mesh policy is reported as such (D141 H12). Foundational-choice note: the SSH client library is not decided. For the demo the job builds behind a `SshTransport` trait with an adapter that runs the system OpenSSH client (no new dependency; the server's own keys, known_hosts and ssh config are used in place, per H12) and **measures** a pure-Rust candidate for the owner to decide.
Author
Owner

Started ssh-bootstrap at base/head 1ce3ed3b57, sole writer. Read repository contract/process, owner decisions from local main, all #87/#78 and parent #5 comments. Base contains enrollment storage/signing and QUIC/TLS primitives but no production agent join command, enrollment listener or remote online registry (crates/infraternal/src/main.rs; runtime.rs). Keep bootstrap in new modules and use narrow integration interfaces for the later #78 merge. No push, deployment or host modifications.

Started ssh-bootstrap at base/head 1ce3ed3b5789c559728bc71ca3ae92f61f39ae51, sole writer. Read repository contract/process, owner decisions from local main, all #87/#78 and parent #5 comments. Base contains enrollment storage/signing and QUIC/TLS primitives but no production agent join command, enrollment listener or remote online registry (crates/infraternal/src/main.rs; runtime.rs). Keep bootstrap in new modules and use narrow integration interfaces for the later #78 merge. No push, deployment or host modifications.
Author
Owner

Additive contract proposal before code: contracts/ssh-bootstrap.md records strict OpenSSH host-key checking, bounded concurrent per-host WebSocket progress, trusted discovery/credential resolution, explicit root consent, and #78 Enrollment/online/facts integration seam. D156 replaces broad SSH probing with a tiny read-only sniff; facts come from the authenticated infraternal agent. The brief explicitly authorizes server-identity OpenSSH for bootstrap, differing from older bootstrap §1/D9 execution wording; scope this adapter to bootstrap and record the exception rather than change owner decisions. Install into D17 data slots with ~/.local/bin or /usr/local/bin launcher, preserve existing installations on failed retry. No TOFU/key acceptance or new SSH engine. Join stdin shape remains a versioned proposal for #78 integration, never a claimed implemented CLI.

Additive contract proposal before code: contracts/ssh-bootstrap.md records strict OpenSSH host-key checking, bounded concurrent per-host WebSocket progress, trusted discovery/credential resolution, explicit root consent, and #78 Enrollment/online/facts integration seam. D156 replaces broad SSH probing with a tiny read-only sniff; facts come from the authenticated infraternal agent. The brief explicitly authorizes server-identity OpenSSH for bootstrap, differing from older bootstrap §1/D9 execution wording; scope this adapter to bootstrap and record the exception rather than change owner decisions. Install into D17 data slots with ~/.local/bin or /usr/local/bin launcher, preserve existing installations on failed retry. No TOFU/key acceptance or new SSH engine. Join stdin shape remains a versioned proposal for #78 integration, never a claimed implemented CLI.
Author
Owner

Real-host read-only finding: o1/o2 short names fail DNS on infraternal-dev. Discovery reports both peers Connected, addresses 10.69.69.51/52. Plain SSH to both IPs is blocked by strict host-key checking: "No ED25519 host key is known ... Host key verification failed." No key accepted/changed, no installation. Evidence evidence/ssh-bootstrap/{o1,o2}-ssh-probe.txt. Full proof needs owner-provisioned verified known_hosts entries or an already-trusted mesh SSH route, plus #78 production join/listener/online/session wiring. Continue independent adapter/parser/concurrency work.

Real-host read-only finding: o1/o2 short names fail DNS on infraternal-dev. Discovery reports both peers Connected, addresses 10.69.69.51/52. Plain SSH to both IPs is blocked by strict host-key checking: "No ED25519 host key is known ... Host key verification failed." No key accepted/changed, no installation. Evidence evidence/ssh-bootstrap/{o1,o2}-ssh-probe.txt. Full proof needs owner-provisioned verified known_hosts entries or an already-trusted mesh SSH route, plus #78 production join/listener/online/session wiring. Continue independent adapter/parser/concurrency work.
Author
Owner

Confirmed mesh SSH by IP with strict checking: netbird ssh --no-browser --strict-host-key-checking=true kayg@10.69.69.51/52 succeeds for read-only uname/id (Linux aarch64, uid1002). Short/FQDN names fail local DNS; system OpenSSH to IP rejects missing known_hosts entries. Therefore mesh operator access exists, but the selected OpenSSH adapter still needs verified host trust provisioned in place. Bootstrap must not substitute another SSH engine or accept keys. Base fast encountered toolchain wrapper hardcoded worktree/target/auth-tools; fixed local target symlink into job home scratch, gate rerunning. No source threshold changes or host mutations.

Confirmed mesh SSH by IP with strict checking: netbird ssh --no-browser --strict-host-key-checking=true kayg@10.69.69.51/52 succeeds for read-only uname/id (Linux aarch64, uid1002). Short/FQDN names fail local DNS; system OpenSSH to IP rejects missing known_hosts entries. Therefore mesh operator access exists, but the selected OpenSSH adapter still needs verified host trust provisioned in place. Bootstrap must not substitute another SSH engine or accept keys. Base fast encountered toolchain wrapper hardcoded worktree/target/auth-tools; fixed local target symlink into job home scratch, gate rerunning. No source threshold changes or host mutations.
Author
Owner

Completed contract step 9275b28403: additive strict bootstrap contract, proposal posted before code. Scoped scripts/verify fast exit0; full log evidence/ssh-bootstrap/contract-fast.log. Static sizes: x86_64 16170000 B; architecture-specific records in log. Verbatim gate summary:

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

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.00s]
Completed contract step 9275b2840360e15653089137aa454169db55423d: additive strict bootstrap contract, proposal posted before code. Scoped scripts/verify fast exit0; full log evidence/ssh-bootstrap/contract-fast.log. Static sizes: x86_64 16170000 B; architecture-specific records in log. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.00s] ```
Author
Owner

Completed dependency step a0f21d883f: reused existing workspace packages and already-locked zeroize1.9; zero new transitive packages and no SSH engine selected. Full scoped fast exit0, evidence/ssh-bootstrap/dependencies-fast.log. Verbatim:

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

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.32s]
Completed dependency step a0f21d883f2413450f34976264ce0463036f8146: reused existing workspace packages and already-locked zeroize1.9; zero new transitive packages and no SSH engine selected. Full scoped fast exit0, evidence/ssh-bootstrap/dependencies-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.32s] ```
Author
Owner

Diagnostic regression RED→GREEN in draft adapter: remote command stderr "Host key verification failed" was misclassified as SSH trust refusal, and stderr SHA256-shaped words were copied to fingerprint data. Isolated failing test evidence/ssh-bootstrap/diagnostics-red.log; now command failures are install failures, raw stderr is withheld, and fingerprints come only from independently bounded ssh-keyscan/ssh-keygen observations (never acceptance). Draft strict Clippy passes; 11 deterministic tests pass, including concurrency8 across two batches/10hosts, retry/credential precedence and filesystem rollback preserving prior binary/state/unit. These are pre-registration checks, not full lane acceptance; per-module gates/commits continue.

Diagnostic regression RED→GREEN in draft adapter: remote command stderr "Host key verification failed" was misclassified as SSH trust refusal, and stderr SHA256-shaped words were copied to fingerprint data. Isolated failing test evidence/ssh-bootstrap/diagnostics-red.log; now command failures are install failures, raw stderr is withheld, and fingerprints come only from independently bounded ssh-keyscan/ssh-keygen observations (never acceptance). Draft strict Clippy passes; 11 deterministic tests pass, including concurrency8 across two batches/10hosts, retry/credential precedence and filesystem rollback preserving prior binary/state/unit. These are pre-registration checks, not full lane acceptance; per-module gates/commits continue.
Author
Owner

model: Validate bootstrap addresses and explicit root consent (#87). HEAD 2020726b90. Reject option/shell-active destinations and unbounded host/credential references before SSH. Keep typed per-host events and content-free failure categories; never use sudo availability as consent. Reject raw credential fields and client-provided mesh evidence. Decisions 139 and 141; draft parser/admission tests pass.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/model-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [3.01s]
model: Validate bootstrap addresses and explicit root consent (#87). HEAD 2020726b904aa10222818123ae1773065cc3c6ff. Reject option/shell-active destinations and unbounded host/credential references before SSH. Keep typed per-host events and content-free failure categories; never use sudo availability as consent. Reject raw credential fields and client-provided mesh evidence. Decisions 139 and 141; draft parser/admission tests pass. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/model-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [3.01s] ```
Author
Owner

probe: Parse a bounded read-only SSH system check (#87). HEAD 4318020716. Gather only OS, architecture, init, uid, sudo, user systemd, linger and existing-install hints. Require one exact256-byte-max versioned record; reject all truncations, suffixes, unsupported platforms and noncanonical uids. Refuse rootless uid0 or unavailable user systemd; facts remain on the authenticated infraternal agent. Decisions 139 and 156; draft check tests pass.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/probe-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.75s]
probe: Parse a bounded read-only SSH system check (#87). HEAD 4318020716719cdb531f63da68482a27be529a29. Gather only OS, architecture, init, uid, sudo, user systemd, linger and existing-install hints. Require one exact256-byte-max versioned record; reject all truncations, suffixes, unsupported platforms and noncanonical uids. Refuse rootless uid0 or unavailable user systemd; facts remain on the authenticated infraternal agent. Decisions 139 and 156; draft check tests pass. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/probe-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.75s] ```
Author
Owner

transport: Separate SSH bootstrap from the client engine (#87). HEAD 83c3469e18. Define the object-safe SshTransport/session boundary and private stdin inputs without an SSH library dependency. Keep decrypted values nonserializable and erase their buffers through the existing zeroize implementation. Reject private keys/passwords in argv, files or progress. Decisions 23, 40 and 141; only the OpenSSH adapter follows.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/transport-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.87s]
transport: Separate SSH bootstrap from the client engine (#87). HEAD 83c3469e182a82cdba166e40462ef6bf2972be90. Define the object-safe SshTransport/session boundary and private stdin inputs without an SSH library dependency. Keep decrypted values nonserializable and erase their buffers through the existing zeroize implementation. Reject private keys/passwords in argv, files or progress. Decisions 23, 40 and 141; only the OpenSSH adapter follows. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/transport-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.87s] ```
Author
Owner

lifecycle-dependencies: Reuse process-group signals for SSH child cancellation (#87). HEAD e5198320db. Reuse the existing nix dependency to retire owned OpenSSH process groups on cancellation. Killing only the parent leaves proxy and askpass descendants alive; unsafe signal bindings and a new process library were rejected. D23, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/lifecycle-dependencies-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.54s]
lifecycle-dependencies: Reuse process-group signals for SSH child cancellation (#87). HEAD e5198320dbcff4e29c06dd5ab934c15b0d6db277. Reuse the existing nix dependency to retire owned OpenSSH process groups on cancellation. Killing only the parent leaves proxy and askpass descendants alive; unsafe signal bindings and a new process library were rejected. D23, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/lifecycle-dependencies-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.54s] ```
Author
Owner

process: Bound SSH child I/O and retire descendants on cancellation (#87). HEAD 17ddfddc49. Bound helper input/output and total active deadlines. Cancellation retires the owned process group, including proxy and askpass descendants; the failing real-process oracle showed parent-only termination leaked a child. Reject unbounded pipe reads, raw diagnostics and parent-only cleanup. D23, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/process-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.85s]
process: Bound SSH child I/O and retire descendants on cancellation (#87). HEAD 17ddfddc49ff6f5a96ba92089fe33207ecb84291. Bound helper input/output and total active deadlines. Cancellation retires the owned process group, including proxy and askpass descendants; the failing real-process oracle showed parent-only termination leaked a child. Reject unbounded pipe reads, raw diagnostics and parent-only cleanup. D23, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/process-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.85s] ```
Author
Owner

Transport findings: real descendant cancellation oracle failed with parent-only termination (process-cancellation-red.log), then passed with owned process-group retirement. First password helper preparation failed when the trusted scratch root was absent (credentials-root-red.log); private owned-root preparation passes (credentials-root-green.log). Strict host-key observation now resolves effective SSH-config ports: real rootless sshd test passed, check147768us;10 simultaneous checks207ms local/2674ms RTT300ms. No host-key writes, raw stderr or credential files. Logs evidence/ssh-bootstrap/ssh-config-current-green.log and draft-clippy-recovery.log (strict Clippy exit0).

Research diagnostic on infraternal-dev/8cores, CPUWeight10000, initial load1.42/2.54/5.63: n25 authentication RTT300ms OpenSSH p50/p991867761/1940834us, russh0.63.1 1578093/1645273us. 200 retained client connections OpenSSH private318044KiB/PSS321776KiB (RSS1821684KiB repeats shared pages); russh private delta11756KiB/RSS delta12204KiB over3972KiB baseline. Isolated stripped GNU probe2578728B vs baseline487280B, +2091448B; not a production-musl delta. OpenSSH stays the product adapter. Report research/ssh-client/REPORT.md; log research-final-measurements.log. Concurrent repository gates mean diagnostic, not unloaded acceptance.

Read all77 current #78 comments. Latest417e1972 remains transport/readiness work; this base still lacks production join/listener/online routing. End-to-end o1/o2 acceptance remains blocked by that integration and externally verified OpenSSH known_hosts/auth; NetBird strict access is available. No o1/o2 installation was attempted and no unknown host key accepted.

Transport findings: real descendant cancellation oracle failed with parent-only termination (process-cancellation-red.log), then passed with owned process-group retirement. First password helper preparation failed when the trusted scratch root was absent (credentials-root-red.log); private owned-root preparation passes (credentials-root-green.log). Strict host-key observation now resolves effective SSH-config ports: real rootless sshd test passed, check147768us;10 simultaneous checks207ms local/2674ms RTT300ms. No host-key writes, raw stderr or credential files. Logs evidence/ssh-bootstrap/ssh-config-current-green.log and draft-clippy-recovery.log (strict Clippy exit0). Research diagnostic on infraternal-dev/8cores, CPUWeight10000, initial load1.42/2.54/5.63: n25 authentication RTT300ms OpenSSH p50/p991867761/1940834us, russh0.63.1 1578093/1645273us. 200 retained client connections OpenSSH private318044KiB/PSS321776KiB (RSS1821684KiB repeats shared pages); russh private delta11756KiB/RSS delta12204KiB over3972KiB baseline. Isolated stripped GNU probe2578728B vs baseline487280B, +2091448B; not a production-musl delta. OpenSSH stays the product adapter. Report research/ssh-client/REPORT.md; log research-final-measurements.log. Concurrent repository gates mean diagnostic, not unloaded acceptance. Read all77 current #78 comments. Latest417e1972 remains transport/readiness work; this base still lacks production join/listener/online routing. End-to-end o1/o2 acceptance remains blocked by that integration and externally verified OpenSSH known_hosts/auth; NetBird strict access is available. No o1/o2 installation was attempted and no unknown host key accepted.
Author
Owner

credentials: Scope SSH credentials to private memory-only helpers (#87). HEAD 556897a179. Create owned 0700 helper directories with an ephemeral ssh-agent or askpass socket. Secret material goes only through private stdin/socket pipes, and supplied-key passphrases retire after loading. The fresh-root regression failed first. Reject secret files, argv, copied server identity and raw helper diagnostics. D23, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/credentials-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.30s]
credentials: Scope SSH credentials to private memory-only helpers (#87). HEAD 556897a17904ea88182549c7dc106eb5d783376e. Create owned 0700 helper directories with an ephemeral ssh-agent or askpass socket. Secret material goes only through private stdin/socket pipes, and supplied-key passphrases retire after loading. The fresh-root regression failed first. Reject secret files, argv, copied server identity and raw helper diagnostics. D23, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/credentials-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.30s] ```
Author
Owner

openssh: Run bootstrap through strict system OpenSSH (#87). HEAD 8b9bb46525. Preserve server SSH configuration and identity in place while disabling host-key admission, forwarding and persistent control sockets. Observe fingerprints independently at the effective configured endpoint; never scan a proxy hop. Refuse forged remote diagnostics and classify mesh policy only with trusted reachability evidence. Reject another SSH engine, TOFU and raw output logs. D4, D141 H12.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/openssh-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.05s]
openssh: Run bootstrap through strict system OpenSSH (#87). HEAD 8b9bb46525fef13284037308b4c1480d18267215. Preserve server SSH configuration and identity in place while disabling host-key admission, forwarding and persistent control sockets. Observe fingerprints independently at the effective configured endpoint; never scan a proxy hop. Refuse forged remote diagnostics and classify mesh policy only with trusted reachability evidence. Reject another SSH engine, TOFU and raw output logs. D4, D141 H12. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/openssh-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.05s] ```
Author
Owner

install: Stage host-bound SSH installs with reversible activation (#87). HEAD c082a4d861. Upload and verify the configured architecture binary under the data directory, enroll on private stdin and activate a marked systemd unit and launcher. Preserve existing binary/state/unit until authenticated readiness, and restore only the owned transaction on failure. Retain nonsecret cleanup coordinates for retries without retaining credentials. Reject overwriting unrelated files and accepting SSH exit as online proof. D17, D139, D156, D168.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/install-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.42s]
install: Stage host-bound SSH installs with reversible activation (#87). HEAD c082a4d8611366bf186c6ad068114a9df35a6e05. Upload and verify the configured architecture binary under the data directory, enroll on private stdin and activate a marked systemd unit and launcher. Preserve existing binary/state/unit until authenticated readiness, and restore only the owned transaction on failure. Retain nonsecret cleanup coordinates for retries without retaining credentials. Reject overwriting unrelated files and accepting SSH exit as online proof. D17, D139, D156, D168. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/install-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.42s] ```
Author
Owner

API security RED→GREEN in an isolated copy using real loopback WebSockets and software passkeys: logout during a backpressured send left the socket permit live past2s (api-draft-red.log); duplicate Cookie headers admitted a handshake (api-authority-red.log). New send path keeps one pinned write across unrelated revocations and retires immediately when this owner loses authority; single Origin and Cookie headers required. All3 authority/consent/order/idle-logout/stalled-send tests pass,1.52s (api-authority-green.log). Production registration/gate follows after the separate owner module.

Fixture finding: concurrent passkey setup hit the existing process-wide two-slot Argon2 admission, correctly returning401. Reused auth tests' SERIAL guard only during owner creation, preserving the production quota and parallel socket checks. No crypto or quota changes.

Integration seam will receive the exact live Auth and SQLite pool via BootstrapFactory, so #78 can bind enrollment, CA unlock, authenticated facts and terminal routing without duplicate session state. Default runtime admits read-only manual/server-identity checks but refuses enrollment before any upload. Credential-vault and discovery resolvers also need trusted backend wiring; no fake success or facts. Full acceptance remains blocked as recorded above.

API security RED→GREEN in an isolated copy using real loopback WebSockets and software passkeys: logout during a backpressured send left the socket permit live past2s (api-draft-red.log); duplicate Cookie headers admitted a handshake (api-authority-red.log). New send path keeps one pinned write across unrelated revocations and retires immediately when this owner loses authority; single Origin and Cookie headers required. All3 authority/consent/order/idle-logout/stalled-send tests pass,1.52s (api-authority-green.log). Production registration/gate follows after the separate owner module. Fixture finding: concurrent passkey setup hit the existing process-wide two-slot Argon2 admission, correctly returning401. Reused auth tests' SERIAL guard only during owner creation, preserving the production quota and parallel socket checks. No crypto or quota changes. Integration seam will receive the exact live Auth and SQLite pool via BootstrapFactory, so #78 can bind enrollment, CA unlock, authenticated facts and terminal routing without duplicate session state. Default runtime admits read-only manual/server-identity checks but refuses enrollment before any upload. Credential-vault and discovery resolvers also need trusted backend wiring; no fake success or facts. Full acceptance remains blocked as recorded above.
Author
Owner

bootstrap: Stream independent bootstrap attempts under one global limit (#87). HEAD 8cfd31a07a. Validate complete batches before scheduling, apply shared or per-host credential references, and bound work and rollback to eight hosts globally. Keep a bounded replay history of trusted phase breadcrumbs and require authenticated facts plus terminal routing before done. Retry only failed owner-bound hosts and cancel disconnected batches. Reject batch-wide failure, per-socket concurrency multiplication and redeemed-token readiness. D138 H4, D139, D156, D168.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/bootstrap-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [3.45s]
bootstrap: Stream independent bootstrap attempts under one global limit (#87). HEAD 8cfd31a07ac9b2c6ba4afe45e67c08e99d29566e. Validate complete batches before scheduling, apply shared or per-host credential references, and bound work and rollback to eight hosts globally. Keep a bounded replay history of trusted phase breadcrumbs and require authenticated facts plus terminal routing before done. Retry only failed owner-bound hosts and cancel disconnected batches. Reject batch-wide failure, per-socket concurrency multiplication and redeemed-token readiness. D138 H4, D139, D156, D168. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/bootstrap-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [3.45s] ```
Author
Owner

server-dependencies: Connect server, CLI and fuzzing to the SSH bootstrap package (#87). HEAD 371b001705. Reuse the workspace SSH plugin package for server scheduling, the private askpass CLI and production parser fuzzing. No transitive dependency or foundational SSH engine is added. Reject duplicate transport implementations and exposing credential helpers over HTTP. D4, D23, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/server-dependencies-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.25s]
server-dependencies: Connect server, CLI and fuzzing to the SSH bootstrap package (#87). HEAD 371b0017054aa3c215f5f2e7a910c697dd4dff8a. Reuse the workspace SSH plugin package for server scheduling, the private askpass CLI and production parser fuzzing. No transitive dependency or foundational SSH engine is added. Reject duplicate transport implementations and exposing credential helpers over HTTP. D4, D23, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/server-dependencies-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.25s] ```
Author
Owner

authorization: Require unlocked owner authority for SSH bootstrap (#87). HEAD ef120b5ac6. Reuse passkey session validation and recheck the owner row before bootstrap admission. Explicit root consent remains a separate request requirement; neither pending local unwrap nor ordinary membership grants installation authority. Reject a parallel authenticator and sudo-derived consent. D23, D28, D139.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/authorization-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.04s]
authorization: Require unlocked owner authority for SSH bootstrap (#87). HEAD ef120b5ac64b1a7623f9fe0531e54be7ccfecbe4. Reuse passkey session validation and recheck the owner row before bootstrap admission. Explicit root consent remains a separate request requirement; neither pending local unwrap nor ordinary membership grants installation authority. Reject a parallel authenticator and sudo-derived consent. D23, D28, D139. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/authorization-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.04s] ```
Author
Owner

Review RED→GREEN: systemd sniff used show-environment only as a readiness query. The real-shell service-manager oracle rejects that private-environment request (probe-environment-red.log). Querying only the public Version property passes (probe-environment-green.log); safety correction is gating.

Strict-hop finding: outer ssh -o StrictHostKeyChecking=yes does not enforce the same options inside arbitrary configured proxies. The real ssh config parser fixture reproduces admission of an unchecked ProxyJump before any network is attempted (proxy-policy-red.log). Proposed additive constraint: this adapter supports direct SSH destinations using existing config/identity in place; configured ProxyJump/ProxyCommand is unsupported until every hop can be guaranteed strict. It must fail before credential helpers/network, and force direct-hop options afterward. This avoids accepting/changing a proxy host key. No proxy host was contacted and no key accepted.

Integrated isolated x86_64-musl diagnostic:16518896B, then16516048B after sharing the asynchronous writer across event/error serialization. Existing maximum16404816B; still111232B over. Baseline16170000B. Measuring a compiler size setting for the SSH package against check/hash costs; no budget or baseline has been changed. The candidate-library probe is separate and unused by the product.

Review RED→GREEN: systemd sniff used show-environment only as a readiness query. The real-shell service-manager oracle rejects that private-environment request (probe-environment-red.log). Querying only the public Version property passes (probe-environment-green.log); safety correction is gating. Strict-hop finding: outer ssh -o StrictHostKeyChecking=yes does not enforce the same options inside arbitrary configured proxies. The real ssh config parser fixture reproduces admission of an unchecked ProxyJump before any network is attempted (proxy-policy-red.log). Proposed additive constraint: this adapter supports direct SSH destinations using existing config/identity in place; configured ProxyJump/ProxyCommand is unsupported until every hop can be guaranteed strict. It must fail before credential helpers/network, and force direct-hop options afterward. This avoids accepting/changing a proxy host key. No proxy host was contacted and no key accepted. Integrated isolated x86_64-musl diagnostic:16518896B, then16516048B after sharing the asynchronous writer across event/error serialization. Existing maximum16404816B; still111232B over. Baseline16170000B. Measuring a compiler size setting for the SSH package against check/hash costs; no budget or baseline has been changed. The candidate-library probe is separate and unused by the product.
Author
Owner

probe-safety: Probe public systemd readiness without requesting environment (#87). HEAD cb00057560. Detect the user manager through its public Version property. Reading the manager environment was unnecessary for availability and could expose private values; reject that diagnostic and retain the bounded read-only check. D23, D156.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/probe-safety-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.85s]
probe-safety: Probe public systemd readiness without requesting environment (#87). HEAD cb0005756075c39449d995c1a44f30792ed43b56. Detect the user manager through its public Version property. Reading the manager environment was unnecessary for availability and could expose private values; reject that diagnostic and retain the bounded read-only check. D23, D156. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/probe-safety-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.85s] ```
Author
Owner

Rollback retry finding: a real-file regression fails before the correction (evidence/ssh-bootstrap/rollback-retry-red.log: missing restored state), then all five installer tests pass after retiring replacement markers before backup restoration (rollback-retry-green.log). A service-manager daemon-reload failure after restoring backups previously left replacement markers that deleted the originals on retry. The fix preserves retry coordinates and originals. D17, D139.

Rollback retry finding: a real-file regression fails before the correction (evidence/ssh-bootstrap/rollback-retry-red.log: missing restored state), then all five installer tests pass after retiring replacement markers before backup restoration (rollback-retry-green.log). A service-manager daemon-reload failure after restoring backups previously left replacement markers that deleted the originals on retry. The fix preserves retry coordinates and originals. D17, D139.
Author
Owner

Additive contract clarification, D139/D156: the approved rootless brief includes requesting own-user linger where host policy permits. Replace the earlier separate-authorization sentence with loginctl --no-ask-password enable-linger for the execution uid, without sudo; denial is a warning. Record intent under the host transaction before changing policy and reverse only a change from previously disabled linger on rollback. Existing enabled linger remains untouched. Six real-file fixture tests pass, including policy denial/restoration and interrupted rollback; fake loginctl prevents modifying infraternal-dev. Parser accepts only exact yes/no receipts and will join the fuzz target. evidence/ssh-bootstrap/linger-tests.log.

Additive contract clarification, D139/D156: the approved rootless brief includes requesting own-user linger where host policy permits. Replace the earlier separate-authorization sentence with loginctl --no-ask-password enable-linger for the execution uid, without sudo; denial is a warning. Record intent under the host transaction before changing policy and reverse only a change from previously disabled linger on rollback. Existing enabled linger remains untouched. Six real-file fixture tests pass, including policy denial/restoration and interrupted rollback; fake loginctl prevents modifying infraternal-dev. Parser accepts only exact yes/no receipts and will join the fuzz target. evidence/ssh-bootstrap/linger-tests.log.
Author
Owner

rollback-retry: Preserve restored installation files across cleanup retries (#87). HEAD ef968d711a. Retire replacement markers before moving original binary, state and unit back. If a later service-manager action fails, retry must not delete already restored originals. A real-files failure reproduced missing restored state before the correction and all installer regressions passed after it. Reject leaving mutation markers until final cleanup. D17, D139.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/rollback-retry-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.13s]
rollback-retry: Preserve restored installation files across cleanup retries (#87). HEAD ef968d711a3ea0370c8afc3891764bf268e6171e. Retire replacement markers before moving original binary, state and unit back. If a later service-manager action fails, retry must not delete already restored originals. A real-files failure reproduced missing restored state before the correction and all installer regressions passed after it. Reject leaving mutation markers until final cleanup. D17, D139. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/rollback-retry-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.13s] ```
Author
Owner

PROCESS section7 intentional binary growth measurement before baseline change: integrated review build with strict OpenSSH, shared WebSocket writer, scoped askpass CLI, transactional install/linger and runtime factory is stripped static musl x86_64 16518896 bytes (+376224 versus #57), aarch64 13880168 (+324496). Both have no PT_INTERP; build exit0: evidence/ssh-bootstrap/runtime-measured-size.log, infraternal-dev Debian13 8cores CPUWeight10000. New routing/auth/process lifecycle is intentional #87 scope, with no embedded SSH engine dependency. Keep release opt-level3 and the existing 262144-byte allowance. Measured opt-level=s for the SSH package saved24384 bytes but still exceeded the old x86 budget; reject it because it neither solves the allowance nor meets performance-first justification. Shared writer saved2848 bytes without serialization duplication. Propose target baselines from the measured integrated feature build, not a larger allowance; final production gate will record actual sizes. Component evidence: real ss hd check preparation25160us/check122683us; ten checks185ms local/2561ms at300msRTT, controller peak4796KiB (real-final-measurements.log); controlled1000-target admission activepeak8, heldRSS7164KiB vsbaseline4400, 38ms completion (admission-scale.log), excludes full server. Full install/facts/connect timings, server memory and o1/o2 terminal proof remain blocked by #78 runtime and verified OpenSSH trust/auth. D4/D23/D63/D138/D139/D141/D156/D167/D168/D170.

PROCESS section7 intentional binary growth measurement before baseline change: integrated review build with strict OpenSSH, shared WebSocket writer, scoped askpass CLI, transactional install/linger and runtime factory is stripped static musl x86_64 16518896 bytes (+376224 versus #57), aarch64 13880168 (+324496). Both have no PT_INTERP; build exit0: evidence/ssh-bootstrap/runtime-measured-size.log, infraternal-dev Debian13 8cores CPUWeight10000. New routing/auth/process lifecycle is intentional #87 scope, with no embedded SSH engine dependency. Keep release opt-level3 and the existing 262144-byte allowance. Measured opt-level=s for the SSH package saved24384 bytes but still exceeded the old x86 budget; reject it because it neither solves the allowance nor meets performance-first justification. Shared writer saved2848 bytes without serialization duplication. Propose target baselines from the measured integrated feature build, not a larger allowance; final production gate will record actual sizes. Component evidence: real ss hd check preparation25160us/check122683us; ten checks185ms local/2561ms at300msRTT, controller peak4796KiB (real-final-measurements.log); controlled1000-target admission activepeak8, heldRSS7164KiB vsbaseline4400, 38ms completion (admission-scale.log), excludes full server. Full install/facts/connect timings, server memory and o1/o2 terminal proof remain blocked by #78 runtime and verified OpenSSH trust/auth. D4/D23/D63/D138/D139/D141/D156/D167/D168/D170.
Author
Owner

Re-read all current #78 comments and remote-agents contract: HTTP enrollment now registered optionally at166858df, CLI join and remote routing remain WIP. Stable private handoff is the /remote/invitations response {host_id,mode,execution_uid,token,ca_der,endpoint,server_name}; root maps to #78 rootful. The SSH JoinMaterial stdin is opaque and can carry that response unchanged; no alternate token parser or CA state is added. Factory receives this server exact Auth+SQLite for later integration. Update the additive bootstrap doc from its older provisional envelope to this settled #78 contract. No branch merge or deployment performed. Missing operator join/routing and verified plain-SSH trust/auth still prevent D170 installation and terminal proof. Files evidence/ssh-bootstrap/remote-latest-contract.md and remote-latest-comments.txt.

Re-read all current #78 comments and remote-agents contract: HTTP enrollment now registered optionally at166858df, CLI join and remote routing remain WIP. Stable private handoff is the /remote/invitations response {host_id,mode,execution_uid,token,ca_der,endpoint,server_name}; root maps to #78 rootful. The SSH JoinMaterial stdin is opaque and can carry that response unchanged; no alternate token parser or CA state is added. Factory receives this server exact Auth+SQLite for later integration. Update the additive bootstrap doc from its older provisional envelope to this settled #78 contract. No branch merge or deployment performed. Missing operator join/routing and verified plain-SSH trust/auth still prevent D170 installation and terminal proof. Files evidence/ssh-bootstrap/remote-latest-contract.md and remote-latest-comments.txt.
Author
Owner

rollback-links: Resume interrupted installation link restoration (#87). HEAD 539a12b8a5. After moving the original binary back, interruption before recreating its links left retry unable to restore the launcher. Preserve original-presence markers and recreate missing links independently of backup presence. A real-files failing test preceded this fix. Reject deleting restored originals or treating backup movement as completed restoration. D17, D139.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/rollback-links-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.77s]
rollback-links: Resume interrupted installation link restoration (#87). HEAD 539a12b8a58001527636bca966f67eabc4b60b7a. After moving the original binary back, interruption before recreating its links left retry unable to restore the launcher. Preserve original-presence markers and recreate missing links independently of backup presence. A real-files failing test preceded this fix. Reject deleting restored originals or treating backup movement as completed restoration. D17, D139. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/rollback-links-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.77s] ```
Author
Owner

Integration contract clarification before code: #78 issue_for_session atomically rechecks the exact live unlocked browser cookie, so owner id alone is insufficient for its backend. Add an opaque Authority carrying nonsecret owner id and an optional zeroizing session capability, passed to all backend operations. The WebSocket uses start_authenticated with the already validated cookie; owner-only start remains for controlled component tests and trusted nonbrowser adapters, and production enrollment must reject missing live-session authority. No session/credential Debug or serialization; progress remains content-free. This permits the factory to reuse exact live Auth+SQLite and #78 atomic issuance without weakening it to owner-only authorization. D23/D63/D139/D168. No missing enrollment adapter is claimed implemented.

Integration contract clarification before code: #78 issue_for_session atomically rechecks the exact live unlocked browser cookie, so owner id alone is insufficient for its backend. Add an opaque Authority carrying nonsecret owner id and an optional zeroizing session capability, passed to all backend operations. The WebSocket uses start_authenticated with the already validated cookie; owner-only start remains for controlled component tests and trusted nonbrowser adapters, and production enrollment must reject missing live-session authority. No session/credential Debug or serialization; progress remains content-free. This permits the factory to reuse exact live Auth+SQLite and #78 atomic issuance without weakening it to owner-only authorization. D23/D63/D139/D168. No missing enrollment adapter is claimed implemented.
Author
Owner

prompt-policy: Restrict private askpass replies to authentication prompts (#87). HEAD 1a6e6c8c7e. Allow only password and key-passphrase prompts in the generated private helper. A trust-confirmation fixture failed before this correction. Reject replying to host-key or permission questions, even when a supplied password happens to be yes. Prompt and secret never enter helper argv or logs. D23, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/prompt-policy-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.62s]
prompt-policy: Restrict private askpass replies to authentication prompts (#87). HEAD 1a6e6c8c7e1395e3ba86fab0266db7afe05aee31. Allow only password and key-passphrase prompts in the generated private helper. A trust-confirmation fixture failed before this correction. Reject replying to host-key or permission questions, even when a supplied password happens to be yes. Prompt and secret never enter helper argv or logs. D23, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/prompt-policy-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.62s] ```
Author
Owner

Installer review: writable existing installation root was admitted before upload (private-base-red.log); require nonsymlink directory owned by execution uid with mode0700 before reading/mutating/cleaning it (private-base-green.log). Rejoin also discarded existing staged identity data, incompatible with #78 immutable host-key binding (rejoin-state-red.log); copy existing enrolled state only inside the private host-local transaction before private-stdin join, suppress join output, preserve live state until activation (identity-private-tests.log green). These are real-file regressions using a synthetic CLI, not proof of #78 operator join or running-daemon handoff. Both fixes will be separate source slices, with retained regression coverage. D17/D23/D139/D141/D156/D168. Browser session capability now reaches the trusted backend in scratch component/API tests; Authority has no Debug/serialization and the cookie is zeroized on scope retirement. authority-component-tests.log and authority-api-tests.log green.

Installer review: writable existing installation root was admitted before upload (private-base-red.log); require nonsymlink directory owned by execution uid with mode0700 before reading/mutating/cleaning it (private-base-green.log). Rejoin also discarded existing staged identity data, incompatible with #78 immutable host-key binding (rejoin-state-red.log); copy existing enrolled state only inside the private host-local transaction before private-stdin join, suppress join output, preserve live state until activation (identity-private-tests.log green). These are real-file regressions using a synthetic CLI, not proof of #78 operator join or running-daemon handoff. Both fixes will be separate source slices, with retained regression coverage. D17/D23/D139/D141/D156/D168. Browser session capability now reaches the trusted backend in scratch component/API tests; Authority has no Debug/serialization and the cookie is zeroized on scope retirement. authority-component-tests.log and authority-api-tests.log green.
Author
Owner

proxy-policy: Refuse SSH proxy hops without enforceable host-key policy (#87). HEAD 589fb1644c. Preflight the effective destination with bounded OpenSSH configuration output, then disable proxies for the actual direct session. A real ssh -G regression first admitted an unchecked jump hop. Reject assuming outer strict options protect child proxy clients, or silently admitting any hop key. Direct host configuration and identity remain in place. D141 H12.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/proxy-policy-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.94s]
proxy-policy: Refuse SSH proxy hops without enforceable host-key policy (#87). HEAD 589fb1644cd7e8428c00b5ad623ae99163deb1d7. Preflight the effective destination with bounded OpenSSH configuration output, then disable proxies for the actual direct session. A real ssh -G regression first admitted an unchecked jump hop. Reject assuming outer strict options protect child proxy clients, or silently admitting any hop key. Direct host configuration and identity remain in place. D141 H12. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/proxy-policy-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.94s] ```
Author
Owner

linger-policy: Request reversible own-user linger through host policy (#87). HEAD 28fb94abd1. Request rootless linger without sudo or interactive authorization, report exact bounded yes/no receipts, and journal intent before policy mutation. Restore only initially disabled linger on rollback; existing enabled policy remains. Real-file policy denial and restoration tests use a fake loginctl, avoiding host mutation. Reject root daemon promotion and treating denied policy as installation success with persistent uptime. D139, D156.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/linger-policy-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.83s]
linger-policy: Request reversible own-user linger through host policy (#87). HEAD 28fb94abd1789c242d5ac27e9fef2d6407562bc9. Request rootless linger without sudo or interactive authorization, report exact bounded yes/no receipts, and journal intent before policy mutation. Restore only initially disabled linger on rollback; existing enabled policy remains. Real-file policy denial and restoration tests use a fake loginctl, avoiding host mutation. Reject root daemon promotion and treating denied policy as installation success with persistent uptime. D139, D156. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/linger-policy-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.83s] ```
Author
Owner

linger-progress: Report policy-denied rootless linger during installation (#87). HEAD 2848fd5130. Perform the authorized own-user linger request after activation and immediate erasure of the enrollment capability, and expose a static warning on denial. Reject a preinstall warning that never attempted the approved policy request and any root escalation fallback. D23, D139, D156.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/linger-progress-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.91s]
linger-progress: Report policy-denied rootless linger during installation (#87). HEAD 2848fd51304da9c1a98fc7ba45a88ff8c6c95570. Perform the authorized own-user linger request after activation and immediate erasure of the enrollment capability, and expose a static warning on denial. Reject a preinstall warning that never attempted the approved policy request and any root escalation fallback. D23, D139, D156. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/linger-progress-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.91s] ```
Author
Owner

ssh-tests: Exercise SSH admission, secrets, recovery and real process lifetime (#87). HEAD bcb7236c50. Add strict parser/admission and classification tests, global eight-host scheduling tests, real subprocess cancellation/bounds, private credential prompt tests, and real-file rollback/policy interruption regressions. Register the real-sshd synthetic-key oracle separately as an explicit harness run, including ten concurrent checks at 300ms RTT. Reject mocks as proof of SSH authentication or authenticated remote readiness. D23, D40, D138 H4, D139, D141, D156, D167, D170.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/ssh-tests-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.66s]
ssh-tests: Exercise SSH admission, secrets, recovery and real process lifetime (#87). HEAD bcb7236c507bbe8d479d7d263e98f7931c0a9755. Add strict parser/admission and classification tests, global eight-host scheduling tests, real subprocess cancellation/bounds, private credential prompt tests, and real-file rollback/policy interruption regressions. Register the real-sshd synthetic-key oracle separately as an explicit harness run, including ten concurrent checks at 300ms RTT. Reject mocks as proof of SSH authentication or authenticated remote readiness. D23, D40, D138 H4, D139, D141, D156, D167, D170. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/ssh-tests-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.66s] ```
Author
Owner

bootstrap-api: Expose owner-authenticated bounded bootstrap progress sockets (#87). HEAD 8467bd27fe. Mount an additive WebSocket router using the existing live authenticator, strict pinned Origin and one session-cookie header. Bound admission/messages/replay and interrupt a stalled write on revocation while preserving the original write across unrelated revocations. Reject parallel auth, raw request echo, SSE protocol divergence and revoked socket work. Real TCP passkey tests pass. D23, D63, D138 H4, D139.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/bootstrap-api-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.92s]
bootstrap-api: Expose owner-authenticated bounded bootstrap progress sockets (#87). HEAD 8467bd27fe19a15dc248b52850be0a8e4686fe05. Mount an additive WebSocket router using the existing live authenticator, strict pinned Origin and one session-cookie header. Bound admission/messages/replay and interrupt a stalled write on revocation while preserving the original write across unrelated revocations. Reject parallel auth, raw request echo, SSE protocol divergence and revoked socket work. Real TCP passkey tests pass. D23, D63, D138 H4, D139. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/bootstrap-api-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.92s] ```
Author
Owner

Private-root guard measured on infraternal-dev 8cores CPUWeight10000, initial load1.84/1.75/1.70, n500/profile: plain shell p50/p99=1002/1506us; stat uid+mode plus id (two forks)3827/5791us; builtin -O plus stat mode (one fork)2521/3593us. Retain the one-fork ownership+0700 guard, saving1306us median versus the equivalent two-fork check. Median added1519us per remote script is justified to reject a writable/wrong-owner root before identity operations; this excludes SSH/full-stage latency. Real-file private-root and rejoin regressions remain green. evidence/ssh-bootstrap/private-guard-measurements.log. Read-only NetBird checks against both named hosts now confirm Linux/aarch64/systemd, uid1002, sudo=no, user_manager=yes, linger=yes, existing=no; evidence/ssh-bootstrap/named-host-checks.log. No installation or trust-store modification. Verified plain OpenSSH known_hosts/auth and #78 production join/routing remain the prerequisites; systemd/linger are available on o1/o2.

Private-root guard measured on infraternal-dev 8cores CPUWeight10000, initial load1.84/1.75/1.70, n500/profile: plain shell p50/p99=1002/1506us; stat uid+mode plus id (two forks)3827/5791us; builtin -O plus stat mode (one fork)2521/3593us. Retain the one-fork ownership+0700 guard, saving1306us median versus the equivalent two-fork check. Median added1519us per remote script is justified to reject a writable/wrong-owner root before identity operations; this excludes SSH/full-stage latency. Real-file private-root and rejoin regressions remain green. evidence/ssh-bootstrap/private-guard-measurements.log. Read-only NetBird checks against both named hosts now confirm Linux/aarch64/systemd, uid1002, sudo=no, user_manager=yes, linger=yes, existing=no; evidence/ssh-bootstrap/named-host-checks.log. No installation or trust-store modification. Verified plain OpenSSH known_hosts/auth and #78 production join/routing remain the prerequisites; systemd/linger are available on o1/o2.
Author
Owner

askpass-cli: Provide the private synchronous SSH prompt CLI helper (#87). HEAD fcacc0b04d. Add a hidden helper that answers only the scoped Unix socket protocol without a Tokio runtime or diagnostics. Secret reply belongs solely to the OpenSSH stdout pipe. Reject secret argv/environment/files and an HTTP credential endpoint. D23, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/askpass-cli-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.09s]
askpass-cli: Provide the private synchronous SSH prompt CLI helper (#87). HEAD fcacc0b04d94f969641b0ddda8df9f846dab85f4. Add a hidden helper that answers only the scoped Unix socket protocol without a Tokio runtime or diagnostics. Secret reply belongs solely to the OpenSSH stdout pipe. Reject secret argv/environment/files and an HTTP credential endpoint. D23, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/askpass-cli-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.09s] ```
Author
Owner

control-frames: Keep bootstrap sockets alive through WebSocket control frames (#87). HEAD 0c8361f63f. Ignore valid Ping and Pong as commands while continuing progress delivery; the transport supplies heartbeat replies. A real-TCP unsolicited-Pong regression first retired the live socket and passes after correction. Reject treating control traffic as disconnect or extending authenticated session expiry on heartbeat alone. D63, D138 H4.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/control-frames-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.93s]
control-frames: Keep bootstrap sockets alive through WebSocket control frames (#87). HEAD 0c8361f63f2c3502d86dfec236f76c09784e8bbb. Ignore valid Ping and Pong as commands while continuing progress delivery; the transport supplies heartbeat replies. A real-TCP unsolicited-Pong regression first retired the live socket and passes after correction. Reject treating control traffic as disconnect or extending authenticated session expiry on heartbeat alone. D63, D138 H4. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/control-frames-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.93s] ```
Author
Owner

Two review regressions: real-TCP Pong retired a live bootstrap socket before Start (control-frames-red.log), now control frames preserve progress and heartbeat replies (control-frames-green.log:4/4). Active service stop failure also replaced live artifacts in a real-file manager fixture (stop-failure-red.log); require acknowledged stop for an active service, with originals unchanged on error (stop-failure-green.log). Runtime backend must prove this batch newly enrolled certificate/generation, not an old connection for the same host UUID. Full session-context gate had one existing daemon oracle failure at restart22, terminal command queue full (session-context-fast.log); same seed20 standalone rerun passed24/24 in39.01s (session-context-daemon-recheck.log), and unchanged full gate rerun is in progress. Clippy/static both passed in the failed run. Extended ASan target includes diagnostics and65536/65537-byte seeds:1467476 runs/61s, no crash (ssh-parser-extended-fuzz.log). D17/D23/D40/D63/D139/D156/D168.

Two review regressions: real-TCP Pong retired a live bootstrap socket before Start (control-frames-red.log), now control frames preserve progress and heartbeat replies (control-frames-green.log:4/4). Active service stop failure also replaced live artifacts in a real-file manager fixture (stop-failure-red.log); require acknowledged stop for an active service, with originals unchanged on error (stop-failure-green.log). Runtime backend must prove this batch newly enrolled certificate/generation, not an old connection for the same host UUID. Full session-context gate had one existing daemon oracle failure at restart22, terminal command queue full (session-context-fast.log); same seed20 standalone rerun passed24/24 in39.01s (session-context-daemon-recheck.log), and unchanged full gate rerun is in progress. Clippy/static both passed in the failed run. Extended ASan target includes diagnostics and65536/65537-byte seeds:1467476 runs/61s, no crash (ssh-parser-extended-fuzz.log). D17/D23/D40/D63/D139/D156/D168.
Author
Owner

session-context-recheck: Carry live browser authority privately to bootstrap backends (#87). HEAD 4095b792ad. Pass owner id, nonsecret batch identity and an opaque zeroizing session capability to trusted backend operations. Browser batches use authenticated admission so #78 can atomically recheck its exact live cookie; cleanup remains bound to this batch and preserves previous authority. Migrate existing consumers without introducing parallel session state. Reject owner-only issuance, cookie serialization and invalidating other batches. D23, D63, D139, D168.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/session-context-recheck-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.14s]
session-context-recheck: Carry live browser authority privately to bootstrap backends (#87). HEAD 4095b792ad1efcbecd961cb687a25ae92c7d6fad. Pass owner id, nonsecret batch identity and an opaque zeroizing session capability to trusted backend operations. Browser batches use authenticated admission so #78 can atomically recheck its exact live cookie; cleanup remains bound to this batch and preserves previous authority. Migrate existing consumers without introducing parallel session state. Reject owner-only issuance, cookie serialization and invalidating other batches. D23, D63, D139, D168. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/session-context-recheck-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.14s] ```
Author
Owner

Updated integrated prototype measurement on infraternal-dev, eight logical cores, opt-level3/LTO/stripped static musl: x86_64 16,521,648 bytes; aarch64 13,881,576 bytes. Relative to the previous baselines, intentional bootstrap routing, live authority, bounded progress and owned SSH lifecycle add 378,976 / 325,904 bytes. No SSH library is embedded. PROCESS section7 permits a measured intentional baseline update with rationale; the upcoming atomic baseline slice retains the 262,144-byte allowance and release optimization unchanged. The isolated opt-level=s experiment saved only 24,384 bytes and still exceeded the old limit; its execution speed was not measured and it is rejected. Final production build sizes will be recorded separately. Full remote acceptance and phase/whole-server benchmarks remain blocked on #78 integration and verified o1/o2 OpenSSH prerequisites.

Updated integrated prototype measurement on infraternal-dev, eight logical cores, opt-level3/LTO/stripped static musl: x86_64 16,521,648 bytes; aarch64 13,881,576 bytes. Relative to the previous baselines, intentional bootstrap routing, live authority, bounded progress and owned SSH lifecycle add 378,976 / 325,904 bytes. No SSH library is embedded. PROCESS section7 permits a measured intentional baseline update with rationale; the upcoming atomic baseline slice retains the 262,144-byte allowance and release optimization unchanged. The isolated opt-level=s experiment saved only 24,384 bytes and still exceeded the old limit; its execution speed was not measured and it is rejected. Final production build sizes will be recorded separately. Full remote acceptance and phase/whole-server benchmarks remain blocked on #78 integration and verified o1/o2 OpenSSH prerequisites.
Author
Owner

private-install-root: Refuse writable or foreign installation roots before mutation (#87). HEAD fdc1a86ea8. Require a nonsymlink private 0700 directory owned by the execution uid before existing-state reads, upload or cleanup. A real-files regression first accepted a group-writable root. Use the measured builtin ownership test and one stat child: median2521us versus3827us for two children, n500 on infraternal-dev. Reject trusting a public host marker alone or accepting writable identity directories. D17, D23, D139.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/private-install-root-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.63s]
private-install-root: Refuse writable or foreign installation roots before mutation (#87). HEAD fdc1a86ea8ab21e8d74f8d5ab0079f8649845940. Require a nonsymlink private 0700 directory owned by the execution uid before existing-state reads, upload or cleanup. A real-files regression first accepted a group-writable root. Use the measured builtin ownership test and one stat child: median2521us versus3827us for two children, n500 on infraternal-dev. Reject trusting a public host marker alone or accepting writable identity directories. D17, D23, D139. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/private-install-root-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.63s] ```
Author
Owner

rejoin-identity: Preserve host identity during staged re-enrollment (#87). HEAD 5cd373d385. Clone existing enrolled state only inside the private host-local transaction before joining, retaining the same host key required by #78. Reject discarded identity and overwriting live state before authenticated readiness. Suppress join output so neither diagnostics nor a hostile echo can carry its stdin capability into buffers or logs. A real-files identity-loss regression failed first and passes after preservation. D17, D23, D139, D168.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/rejoin-identity-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [3.08s]
rejoin-identity: Preserve host identity during staged re-enrollment (#87). HEAD 5cd373d3854fdbb57c879704c87de9e482cce9e0. Clone existing enrolled state only inside the private host-local transaction before joining, retaining the same host key required by #78. Reject discarded identity and overwriting live state before authenticated readiness. Suppress join output so neither diagnostics nor a hostile echo can carry its stdin capability into buffers or logs. A real-files identity-loss regression failed first and passes after preservation. D17, D23, D139, D168. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/rejoin-identity-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [3.08s] ```
Author
Owner

Production-crate ASan run: the isolated fuzz manifest now links directly to crates/plugins/ssh, not diagnostic draft-module registration, and invokes the registered ssh_check_decode source. 1,366,902 runs in 61s, max_len65537, no crash; scope CPUWeight10000. Log evidence/ssh-bootstrap/ssh-parser-production-fuzz.log. Check/config/destination/linger/allowlisted diagnostics are production functions. Instrumented fuzz RSS is not server memory. Earlier campaigns retained as development evidence.

Production-crate ASan run: the isolated fuzz manifest now links directly to crates/plugins/ssh, not diagnostic draft-module registration, and invokes the registered ssh_check_decode source. 1,366,902 runs in 61s, max_len65537, no crash; scope CPUWeight10000. Log evidence/ssh-bootstrap/ssh-parser-production-fuzz.log. Check/config/destination/linger/allowlisted diagnostics are production functions. Instrumented fuzz RSS is not server memory. Earlier campaigns retained as development evidence.
Author
Owner

stop-active-service: Require an acknowledged stop before replacing an active daemon (#87). HEAD c08c41e8c4. A real-files manager fixture first ignored an active service stop failure and replaced live artifacts. Require successful stop for a previously active service, preserving inactive/fresh-unit tolerance and rollback. Reject an old authenticated connection masking a failed upgrade or altering live binary/state after a denied stop. D17, D139, D156, D168.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/stop-active-service-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.07s]
stop-active-service: Require an acknowledged stop before replacing an active daemon (#87). HEAD c08c41e8c46b4c61daaa68702fe556da5a9aad40. A real-files manager fixture first ignored an active service stop failure and replaced live artifacts. Require successful stop for a previously active service, preserving inactive/fresh-unit tolerance and rollback. Reject an old authenticated connection masking a failed upgrade or altering live binary/state after a denied stop. D17, D139, D156, D168. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/stop-active-service-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.07s] ```
Author
Owner

Additive integration clarification before final contract update: #78 backend must reserve a host attempt from invitation issuance through readiness/cleanup, so two batches targeting the same host cannot replace each other's invitation. Bind new authority to the batch and preserve prior authority on failure. If issuance fails before returning JoinMaterial.host, it must remove its own partial authority before returning Err; the bootstrap runner cannot identify that record. Facts/terminal proof must bind the current attempt certificate/generation. This tightens the already proposed authority seam; no parallel enrollment/CA engine is introduced.

Additive integration clarification before final contract update: #78 backend must reserve a host attempt from invitation issuance through readiness/cleanup, so two batches targeting the same host cannot replace each other's invitation. Bind new authority to the batch and preserve prior authority on failure. If issuance fails before returning JoinMaterial.host, it must remove its own partial authority before returning Err; the bootstrap runner cannot identify that record. Facts/terminal proof must bind the current attempt certificate/generation. This tightens the already proposed authority seam; no parallel enrollment/CA engine is introduced.
Author
Owner

identity-authority-recheck: Cover private roots, same-key state and session capability isolation (#87). HEAD 7970489a6c. Retain the real-file writable-root and identity-loss regressions in the existing installer fixture, and exercise authenticated batch capability bounds and content-free progress with the existing held backend. Reject duplicated fixtures and treating these controlled tests as actual operator-join evidence. D17, D23, D40, D139, D168. Initial gate tests passed but Clippy rejected three equality assertions; corrected public comparisons and kept capability assertions nonformatting. Recheck passed unchanged production code.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/identity-authority-recheck-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.80s]
identity-authority-recheck: Cover private roots, same-key state and session capability isolation (#87). HEAD 7970489a6c373383435eef02c3d238f09b0740f1. Retain the real-file writable-root and identity-loss regressions in the existing installer fixture, and exercise authenticated batch capability bounds and content-free progress with the existing held backend. Reject duplicated fixtures and treating these controlled tests as actual operator-join evidence. D17, D23, D40, D139, D168. Initial gate tests passed but Clippy rejected three equality assertions; corrected public comparisons and kept capability assertions nonformatting. Recheck passed unchanged production code. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/identity-authority-recheck-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.80s] ```
Author
Owner

api-authority-tests: Test bootstrap authority and revocation over real TCP (#87). HEAD 11130b3f62. Register software-passkey WebSocket tests for owner/unlock/Origin/cookie/root admission, ordered progress, idle logout and backpressured write cancellation. Reuse the existing serial auth-fixture gate because the process-wide two-slot Argon2 budget is intentional. Assert that the trusted backend receives its live session. Reject weakening quotas to hide fixture races or testing only router mocks. D23, D63, D139.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/api-authority-tests-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.09s]
api-authority-tests: Test bootstrap authority and revocation over real TCP (#87). HEAD 11130b3f621a4f242deb2760a446a7bd60b2ccf2. Register software-passkey WebSocket tests for owner/unlock/Origin/cookie/root admission, ordered progress, idle logout and backpressured write cancellation. Reuse the existing serial auth-fixture gate because the process-wide two-slot Argon2 budget is intentional. Assert that the trusted backend receives its live session. Reject weakening quotas to hide fixture races or testing only router mocks. D23, D63, D139. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/api-authority-tests-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.09s] ```
Author
Owner

askpass-cli-tests: Test real private password and encrypted-key CLI handoffs (#87). HEAD 714c97f2fb. Run the hidden CLI against an owned private prompt socket and unlock an encrypted synthetic RSA key through real ssh-add and ssh-agent. Generate key and passphrase only in memory and private pipes, then verify cleanup. Reject credential files, secret argv and using existing server identities as test fixtures. D23, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/askpass-cli-tests-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.41s]
askpass-cli-tests: Test real private password and encrypted-key CLI handoffs (#87). HEAD 714c97f2fbcebd08a455bb4712ec5ef1d3e2df5c. Run the hidden CLI against an owned private prompt socket and unlock an encrypted synthetic RSA key through real ssh-add and ssh-agent. Generate key and passphrase only in memory and private pipes, then verify cleanup. Reject credential files, secret argv and using existing server identities as test fixtures. D23, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/askpass-cli-tests-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.41s] ```
Author
Owner

Process ownership regression: a real helper leader exits while a descendant leaves its process group but retains output pipes. Before correction, the leader was reaped while owned I/O remained pending (process-identity-red.log, FAILED in .22s), releasing the numeric id still armed in cancellation. This proves early identity release, not an observed unrelated-process kill. Keep the leader unreaped until pipe I/O completes, then await status and synchronously disarm. All three subprocess tests pass in .17s in the isolated draft check. Interleaved normal completion benchmark n500/profile, infraternal-dev8cores CPUWeight10000 load2.16/1.74/1.60: original p50/p99 767/1181us, pinned762/1179us; excludes SSH/full phases. Logs process-identity-green.log and process-lifetime-measurements.log. Applying this one logical fix plus its regression after the current adapter gate, then running full fast before committing.

Process ownership regression: a real helper leader exits while a descendant leaves its process group but retains output pipes. Before correction, the leader was reaped while owned I/O remained pending (process-identity-red.log, FAILED in .22s), releasing the numeric id still armed in cancellation. This proves early identity release, not an observed unrelated-process kill. Keep the leader unreaped until pipe I/O completes, then await status and synchronously disarm. All three subprocess tests pass in .17s in the isolated draft check. Interleaved normal completion benchmark n500/profile, infraternal-dev8cores CPUWeight10000 load2.16/1.74/1.60: original p50/p99 767/1181us, pinned762/1179us; excludes SSH/full phases. Logs process-identity-green.log and process-lifetime-measurements.log. Applying this one logical fix plus its regression after the current adapter gate, then running full fast before committing.
Author
Owner

foreground-policy: Keep configured SSH clients in the owned foreground lifecycle (#87). HEAD cd041d83fe. Force foreground operation for effective-config preflight and bootstrap commands. A real OpenSSH config-parser fixture with ForkAfterAuthentication enabled first failed admission; the corrected adapter overrides it without altering identity/config files. Reject configured backgrounding of an owned bootstrap child and silently dropping that server config. D23, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/foreground-policy-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.56s]
foreground-policy: Keep configured SSH clients in the owned foreground lifecycle (#87). HEAD cd041d83fefe38394e81d6e4b4d0fa944d0a8c24. Force foreground operation for effective-config preflight and bootstrap commands. A real OpenSSH config-parser fixture with ForkAfterAuthentication enabled first failed admission; the corrected adapter overrides it without altering identity/config files. Reject configured backgrounding of an owned bootstrap child and silently dropping that server config. D23, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/foreground-policy-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.56s] ```
Author
Owner

process-identity: Retain SSH group identity until inherited pipes finish (#87). HEAD 40e43e3386. A real helper regression first released its leader id while a separately grouped descendant kept inherited output open. Wait for owned pipe I/O before reaping the leader, then disarm synchronously; retain the regression in the existing subprocess fixture. Reject reaping early and signalling a potentially recycled numeric group id. This proves early identity release, not an observed unrelated-process kill. Interleaved n500/profile helper completion measured p50/p99 767/1181us before and 762/1179us after on infraternal-dev8cores CPUWeight10000, load2.16/1.74/1.60; full SSH phases excluded. D23, D40, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/process-identity-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [2.24s]
process-identity: Retain SSH group identity until inherited pipes finish (#87). HEAD 40e43e33861d981f47d0ead04cd58a7ec760a4a7. A real helper regression first released its leader id while a separately grouped descendant kept inherited output open. Wait for owned pipe I/O before reaping the leader, then disarm synchronously; retain the regression in the existing subprocess fixture. Reject reaping early and signalling a potentially recycled numeric group id. This proves early identity release, not an observed unrelated-process kill. Interleaved n500/profile helper completion measured p50/p99 767/1181us before and 762/1179us after on infraternal-dev8cores CPUWeight10000, load2.16/1.74/1.60; full SSH phases excluded. D23, D40, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/process-identity-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [2.24s] ```
Author
Owner

foreground-tests: Exercise configured SSH foreground precedence with the real parser (#87). HEAD 61553bb285. Register the real OpenSSH option-parser fixture proving a backgrounding server configuration is overridden for commands. Generated public configuration never contacts a peer or reads a real identity. Reject checking only a copied argument array. D23, D40, D141.
Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/foreground-tests-fast.log. 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
 34390 expect() calls
Ran 7 tests across 2 files. [1.79s]
foreground-tests: Exercise configured SSH foreground precedence with the real parser (#87). HEAD 61553bb2857defe85f3408c9293d5959f9820bd3. Register the real OpenSSH option-parser fixture proving a backgrounding server configuration is overridden for commands. Generated public configuration never contacts a peer or reads a real identity. Reject checking only a copied argument array. D23, D40, D141. Full CPUWeight10000 scripts/verify fast exit0; log evidence/ssh-bootstrap/foreground-tests-fast.log. 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 34390 expect() calls Ran 7 tests across 2 files. [1.79s] ```
Author
Owner

Continuation started: sole writer on ssh-bootstrap, base/head 61553bb285. Read CLAUDE.md, DECISIONS.md, ARCHITECTURE.md, PROCESS.md, all #87 and parent #5 comments and prior commit history. Preserve inherited runtime/fuzz/research work; evidence/, target/ and scripts/pycache/ stay uncommitted. Runtime draft has obsolete Backend signatures and is not registered in production. Batch scheduler, retries and authenticated WebSocket already committed. Latest #78 comments describe join/remote routing as uncommitted WIP; committed remote-agents c0815d2 does not yet provide that runtime. Continue available integration/fuzz/research steps; no host-key acceptance or external checkout mutations.

Continuation started: sole writer on ssh-bootstrap, base/head 61553bb2857defe85f3408c9293d5959f9820bd3. Read CLAUDE.md, DECISIONS.md, ARCHITECTURE.md, PROCESS.md, all #87 and parent #5 comments and prior commit history. Preserve inherited runtime/fuzz/research work; evidence/, target/ and scripts/__pycache__/ stay uncommitted. Runtime draft has obsolete Backend signatures and is not registered in production. Batch scheduler, retries and authenticated WebSocket already committed. Latest #78 comments describe join/remote routing as uncommitted WIP; committed remote-agents c0815d2 does not yet provide that runtime. Continue available integration/fuzz/research steps; no host-key acceptance or external checkout mutations.
Author
Owner

Additive contract clarification before runtime wiring: document exact implemented WebSocket JSON (start targets address {kind,value}, retry target, replay after; event sequence/target/attempt/step/message/elapsed_ms/log_tail and optional failure; error/resync envelopes). One batch per socket, replay on same live socket only; disconnect cancels, no reconnect-resume claim. Incorporate already-recorded own-user noninteractive linger policy, #78 invitation stdin response, and host-attempt/session/generation reservation invariant. Mount existing router through BootstrapFactory receiving exact live Auth+SQLite; default backend permits manual server-identity read-only checks but refuses invitations before upload. No substitute CA/remote engine or owner decision changes.

Additive contract clarification before runtime wiring: document exact implemented WebSocket JSON (start targets address {kind,value}, retry target, replay after; event sequence/target/attempt/step/message/elapsed_ms/log_tail and optional failure; error/resync envelopes). One batch per socket, replay on same live socket only; disconnect cancels, no reconnect-resume claim. Incorporate already-recorded own-user noninteractive linger policy, #78 invitation stdin response, and host-attempt/session/generation reservation invariant. Mount existing router through BootstrapFactory receiving exact live Auth+SQLite; default backend permits manual server-identity read-only checks but refuses invitations before upload. No substitute CA/remote engine or owner decision changes.
Author
Owner

Continuation finding: /v1/bootstrap/ws is defined in bootstrap_api.rs but runtime.rs build_router never merges it; ordinary server requests cannot reach the existing batch API. bootstrap_runtime.rs is untracked/unregistered and implements obsolete owner-string Backend methods instead of Authority. Correct by registering the trusted runtime module, carrying live Auth+SQLite into the factory, and mounting one global runner. Add a failing real-TCP production-router admission test before the wiring fix. End-to-end remains blocked by #78 production join/online/facts/terminal integration; committed remote-agents head c0815d2 contains no operator CLI runtime activation.

Continuation finding: /v1/bootstrap/ws is defined in bootstrap_api.rs but runtime.rs build_router never merges it; ordinary server requests cannot reach the existing batch API. bootstrap_runtime.rs is untracked/unregistered and implements obsolete owner-string Backend methods instead of Authority. Correct by registering the trusted runtime module, carrying live Auth+SQLite into the factory, and mounting one global runner. Add a failing real-TCP production-router admission test before the wiring fix. End-to-end remains blocked by #78 production join/online/facts/terminal integration; committed remote-agents head c0815d2 contains no operator CLI runtime activation.
Author
Owner

Runtime route RED: ordinary real-TCP /v1/bootstrap/ws returned HTTP404 instead of required unauthenticated401; evidence/ssh-bootstrap/continuation-runtime-route-red.log (1 failed, .02s). Before activating that runtime, apply PROCESS §7 measured intentional bootstrap baseline update already proposed twice on #87: x86_64 16521648 B (+378976), aarch64 13881576 B (+325904), opt-level3/LTO/stripped/static, no embedded SSH library. Rationale: reachable owner-authenticated progress, runtime factory, bounded lifecycle/rollback and private askpass. Preserve 262144 B allowance; reject opt-level=s and a larger allowance. Source measurement evidence/ssh-bootstrap/runtime-measured-size.log and preceding integrated-size issue comments. Final reachable binaries will be measured separately.

Runtime route RED: ordinary real-TCP /v1/bootstrap/ws returned HTTP404 instead of required unauthenticated401; evidence/ssh-bootstrap/continuation-runtime-route-red.log (1 failed, .02s). Before activating that runtime, apply PROCESS §7 measured intentional bootstrap baseline update already proposed twice on #87: x86_64 16521648 B (+378976), aarch64 13881576 B (+325904), opt-level3/LTO/stripped/static, no embedded SSH library. Rationale: reachable owner-authenticated progress, runtime factory, bounded lifecycle/rollback and private askpass. Preserve 262144 B allowance; reject opt-level=s and a larger allowance. Source measurement evidence/ssh-bootstrap/runtime-measured-size.log and preceding integrated-size issue comments. Final reachable binaries will be measured separately.
Author
Owner

ASan production-parser campaign completed: 4256482 executions in181s, max_len65537, seed1694043920, no crash; evidence/ssh-bootstrap/continuation-parser-fuzz.log. First continuation fast: fmt/VT fmt/test/cargo-deny/static PASS, Clippy FAIL on two inherited fuzz assertion/style patterns (assert_is_empty, collapsible_if). Corrected equivalent assertions; complete fast recheck running. Real-TCP missing production route RED404 vs401 confirmed separately. Fresh n25/profile authentication: OpenSSH local/RTT300 p50 95348/1885910us; russh 83778/1553840us. At200 connections OpenSSH private318012KiB; russh private delta11484KiB, RSS4016→15884KiB. Machine infraternal-dev8cores CPUWeight10000 initial load0.95/0.75/1.09, fast/ASan concurrent. research/ssh-client/REPORT.md includes limits and owner recommendation; production-path authentication remains unmeasured.

ASan production-parser campaign completed: 4256482 executions in181s, max_len65537, seed1694043920, no crash; evidence/ssh-bootstrap/continuation-parser-fuzz.log. First continuation fast: fmt/VT fmt/test/cargo-deny/static PASS, Clippy FAIL on two inherited fuzz assertion/style patterns (assert_is_empty, collapsible_if). Corrected equivalent assertions; complete fast recheck running. Real-TCP missing production route RED404 vs401 confirmed separately. Fresh n25/profile authentication: OpenSSH local/RTT300 p50 95348/1885910us; russh 83778/1553840us. At200 connections OpenSSH private318012KiB; russh private delta11484KiB, RSS4016→15884KiB. Machine infraternal-dev8cores CPUWeight10000 initial load0.95/0.75/1.09, fast/ASan concurrent. research/ssh-client/REPORT.md includes limits and owner recommendation; production-path authentication remains unmeasured.
Author
Owner

Completed parser-fuzz: b7e535041c. ASan4256482 executions/181s max_len65537 no crash; final equivalent assertion source100000 executions/4s no crash. Logs continuation-parser-fuzz.log and continuation-parser-final-source.log. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-fuzz-recheck-fast.log. Verbatim:

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

PT_INTERP: absent; size: 16177328 bytes (baseline 16142672 + allowance 262144 = max 16404816)
PT_INTERP: absent; size: 13581576 bytes (baseline 13555672 + allowance 262144 = max 13817816)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.16s]
Completed parser-fuzz: b7e535041ce586e69a53a9c3968ae618b47f79b1. ASan4256482 executions/181s max_len65537 no crash; final equivalent assertion source100000 executions/4s no crash. Logs continuation-parser-fuzz.log and continuation-parser-final-source.log. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-fuzz-recheck-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16177328 bytes (baseline 16142672 + allowance 262144 = max 16404816) PT_INTERP: absent; size: 13581576 bytes (baseline 13555672 + allowance 262144 = max 13817816) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.16s] ```
Author
Owner

Completed contract: 753b98a4b2. Contract proposal posted before implementation;32KiB commands,100 targets,8 global active hosts,1024 events,8 attempts. No UI code or frozen wire change. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-contract-fast.log. Verbatim:

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

PT_INTERP: absent; size: 16177328 bytes (baseline 16142672 + allowance 262144 = max 16404816)
PT_INTERP: absent; size: 13581576 bytes (baseline 13555672 + allowance 262144 = max 13817816)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.27s]
Completed contract: 753b98a4b259b1ff4ed9de1b75f8ff69da6095e5. Contract proposal posted before implementation;32KiB commands,100 targets,8 global active hosts,1024 events,8 attempts. No UI code or frozen wire change. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-contract-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16177328 bytes (baseline 16142672 + allowance 262144 = max 16404816) PT_INTERP: absent; size: 13581576 bytes (baseline 13555672 + allowance 262144 = max 13817816) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.27s] ```
Author
Owner

Completed size-baseline: 00254867f8. Measured integrated deltas+378976/+325904 B recorded before update; unchanged262144 B allowance. Runtime activation follows separately. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-size-baseline-fast.log. Verbatim:

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

PT_INTERP: absent; size: 16177328 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13581576 bytes (baseline 13881576 + allowance 262144 = max 14143720)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.38s]
Completed size-baseline: 00254867f8b00600a4be3a8e775f33cfa0da792c. Measured integrated deltas+378976/+325904 B recorded before update; unchanged262144 B allowance. Runtime activation follows separately. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-size-baseline-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16177328 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13581576 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.38s] ```
Author
Owner

Completed runtime: fe65e3ddf0. Real-TCP route RED404 vs401 before fix; targeted route/default-backend tests GREEN. Default cannot complete provisioning until #78 supplies production join/facts/terminal integration. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-runtime-fast.log. Verbatim:

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

PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.00s]
Completed runtime: fe65e3ddf056c56a18b8c845c89cd82d99f5bf13. Real-TCP route RED404 vs401 before fix; targeted route/default-backend tests GREEN. Default cannot complete provisioning until #78 supplies production join/facts/terminal integration. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-runtime-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.00s] ```
Author
Owner

Completed research-probe: 02db8afdfb. Locked release build, isolated fmt and pedantic Clippy PASS;178 packages with compatible license alternatives.25 samples/profile,200 retained connections. Probe2578408 B; no product dependency added. Evidence continuation-research-final-build.log, continuation-research-metadata.json. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-research-probe-fast.log. Verbatim:

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

PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.31s]
Completed research-probe: 02db8afdfb711fa2c806dfaffd264f734027b490. Locked release build, isolated fmt and pedantic Clippy PASS;178 packages with compatible license alternatives.25 samples/profile,200 retained connections. Probe2578408 B; no product dependency added. Evidence continuation-research-final-build.log, continuation-research-metadata.json. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-research-probe-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.31s] ```
Author
Owner

Completed research-baseline: 2c770861cf. Stripped isolated baseline487280 B vs probe2578408 B, delta2091128 B; opt-level3/LTO/one codegen unit. Excludes future interactive functionality and product LTO sharing. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-research-baseline-fast.log. Verbatim:

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

PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [1.97s]
Completed research-baseline: 2c770861cf93b1b7b14833d61ff6ae0ff23c8aef. Stripped isolated baseline487280 B vs probe2578408 B, delta2091128 B; opt-level3/LTO/one codegen unit. Excludes future interactive functionality and product LTO sharing. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-research-baseline-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [1.97s] ```
Author
Owner

Runtime completed at fe65e3ddf0: ordinary server mounts /v1/bootstrap/ws; real-TCP route and fail-before-upload tests GREEN; full fast exit0. Final stripped static sizes x86_64 16520048 B, aarch64 13881064 B, no PT_INTERP (continuation-runtime-fast.log). Final strict isolated probe: forbid unsafe, pedantic Clippy and isolated cargo-deny advisory/bans/licenses/sources PASS; GNU probe2578408 B vs baseline487280 B (+2091128). Repeated final-source n25/profile measurement: OpenSSH local/RTT300 p50/p99 92644/99015 and1878221/1948598us; russh80050/94246 and1569817/1660197us.200 retained: OpenSSH private318052KiB; russh private delta11460KiB, RSS3992→15900KiB. CPUWeight10000/infraternal-dev8cores initial load2.01/1.83/1.52; static builds concurrent. evidence/ssh-bootstrap/continuation-research-final-measurements.log.

End-to-end acceptance blocked: committed remote-agents remains c0815d2, whose production runtime has no agent join CLI activation or remote terminal runtime; #78 records those as uncommitted WIP. The #78 writer/orchestrator must provide committed join/listener/online/facts/terminal adapters for BootstrapFactory. Then run disposable local installation/terminal/removal first, ten complete local targets with per-phase/server-RSS numbers, and only then o1 with preexisting verified OpenSSH trust/auth. Previous #87 plain-SSH key refusal is historical evidence; this continuation has contacted no named remote host and has not checked or changed its trust. Research fixture checks and transport primitives are not that proof. Continue remaining report/harness atomic gates; no issue closure.

Runtime completed at fe65e3ddf056c56a18b8c845c89cd82d99f5bf13: ordinary server mounts /v1/bootstrap/ws; real-TCP route and fail-before-upload tests GREEN; full fast exit0. Final stripped static sizes x86_64 16520048 B, aarch64 13881064 B, no PT_INTERP (continuation-runtime-fast.log). Final strict isolated probe: forbid unsafe, pedantic Clippy and isolated cargo-deny advisory/bans/licenses/sources PASS; GNU probe2578408 B vs baseline487280 B (+2091128). Repeated final-source n25/profile measurement: OpenSSH local/RTT300 p50/p99 92644/99015 and1878221/1948598us; russh80050/94246 and1569817/1660197us.200 retained: OpenSSH private318052KiB; russh private delta11460KiB, RSS3992→15900KiB. CPUWeight10000/infraternal-dev8cores initial load2.01/1.83/1.52; static builds concurrent. evidence/ssh-bootstrap/continuation-research-final-measurements.log. End-to-end acceptance blocked: committed remote-agents remains c0815d2, whose production runtime has no agent join CLI activation or remote terminal runtime; #78 records those as uncommitted WIP. The #78 writer/orchestrator must provide committed join/listener/online/facts/terminal adapters for BootstrapFactory. Then run disposable local installation/terminal/removal first, ten complete local targets with per-phase/server-RSS numbers, and only then o1 with preexisting verified OpenSSH trust/auth. Previous #87 plain-SSH key refusal is historical evidence; this continuation has contacted no named remote host and has not checked or changed its trust. Research fixture checks and transport primitives are not that proof. Continue remaining report/harness atomic gates; no issue closure.
Author
Owner

Completed research-harness: ff031f1733. Python syntax PASS; real rootless sshd checks PASS: preparation23884us/check118522us,10 concurrent checks180ms local/2602ms RTT300. Load1.44/1.37/1.27, CPUWeight10000; these are checks, not full provisioning or whole-server RSS. Evidence continuation-real-ssh.log. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-research-harness-fast.log. Verbatim:

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

PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [3.26s]
Completed research-harness: ff031f17339325fa7abfff6373d0aec52c9bab04. Python syntax PASS; real rootless sshd checks PASS: preparation23884us/check118522us,10 concurrent checks180ms local/2602ms RTT300. Load1.44/1.37/1.27, CPUWeight10000; these are checks, not full provisioning or whole-server RSS. Evidence continuation-real-ssh.log. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-research-harness-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.26s] ```
Author
Owner

Completed evidence-docs: ac2ee4be5f. Report paths committed; ASan4256482 executions/181s then100000/4s without crash. Controlled1000-target run active_peak8;RSS4432/7452/7884KiB in45ms, load0.69/1.10/1.19. Full host installation/terminal/uninstall and server memory unproven; no named remote host contacted in this continuation. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-evidence-docs-fast.log. Verbatim:

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

PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [3.36s]
Completed evidence-docs: ac2ee4be5f3e6dee73f65461817b1e796bcef05f. Report paths committed; ASan4256482 executions/181s then100000/4s without crash. Controlled1000-target run active_peak8;RSS4432/7452/7884KiB in45ms, load0.69/1.10/1.19. Full host installation/terminal/uninstall and server memory unproven; no named remote host contacted in this continuation. Exact CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-evidence-docs-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.36s] ```
Author
Owner

UI gaps against contracts/ssh-bootstrap.md, recorded by the UI side (demo-preview 8a83aa1). Please address in the API where they make sense:

Add-host flow: gaps in the provisioning contract

The add-host mockup now speaks contracts/ssh-bootstrap.md (branch ssh-bootstrap)
through apps/tracer/src/provisioning-client.ts, and the test double
(apps/tracer/test/provisioning-double.ts) implements the same requests and events.
This file lists what the UI wants that the contract does not give it. None of it is
invented in the double; each item says the exact field and why. Where the UI cannot
work without a field, it carries a fallback, named below.

Wanted by the UI

  1. Per-step human text that matches a fixed vocabulary. Contract: message is
    free human text and "clients must display the server's actual text". The UI shows
    exactly that, so the row's step label is whatever the server says. The double uses
    short phrases ("Checking the system", "Installing the agent", "Gathering host
    facts", "Connecting", "Ready", "Ready · root"). Wanted: the real server's message
    for each step stays a short present-participle phrase of under 30 characters,
    because it sits on one line beside a progress bar on a phone. Longer prose belongs
    in log_tail.

  2. Facts on the done event, for the window header and popover. The check
    already collects OS, architecture, init, uid, sudo, user systemd and linger, but
    events carry only text. The UI wants on done:
    host: { host_id, os: "ubuntu"|"debian"|..., os_name, os_version, architecture, uid, mode }. Why: the new window's header shows the OS mark, name and version, and
    the popover shows architecture and mode. Today the UI falls back to the discovery
    inventory entry, which does not exist for a manually typed user@host (it shows
    "Linux", no architecture).

  3. The host id the new terminal belongs to. done should carry host_id (the
    UUID bound after the check) so the window can open that host's terminal through
    the session router. Without it the UI cannot tell the canvas which host the new
    window is.

  4. A structured failure for the "what to do" copy. failure.kind selects the
    title and next-step text in the UI, which is enough for six kinds. Wanted per kind
    that the UI cannot derive: failure.phase (which of check/install/facts/connect
    was running; today the UI keeps the last phase it saw) and, for host-key and
    unsupported, a field naming what was observed (the contract has fingerprints
    for host keys only; unsupported needs reason: "no-systemd" | "arch" | "os").

  5. Queued versus started. The server admits eight active hosts; the rest of a
    100-host batch have no event until a slot frees. The UI shows "Waiting" for a host
    with no events, which is indistinguishable from "the server never heard of it".
    Wanted: one queued step (or a queued event) per target at admission, with
    queue_position. The UI would then show "Waiting" only for queued hosts and could
    report a rejected target.

  6. A pasted credential becomes a reference how? The credentials page lets the
    person paste a key or password and says it is encrypted with their passkey. The
    contract only accepts an opaque credential reference, and defines no request that
    turns pasted bytes into one (that is the vault adapter's job). Wanted: the vault
    request (path, body, response {credential}) so the UI can store the paste first
    and send the reference. Today the UI sends no credential, and the double refuses
    nix-cache regardless.

  7. Discovery and inventory. The host list (names, sources, OS, "already added",
    "SSH ready" / "No answer" / "Blocked", root available) comes from a mock endpoint,
    /__mock/proto/addhost. The contract resolves discovered ids but defines no
    request that lists them. Wanted: a read-only listing with, per entry: id,

UI gaps against contracts/ssh-bootstrap.md, recorded by the UI side (demo-preview 8a83aa1). Please address in the API where they make sense: # Add-host flow: gaps in the provisioning contract The add-host mockup now speaks `contracts/ssh-bootstrap.md` (branch `ssh-bootstrap`) through `apps/tracer/src/provisioning-client.ts`, and the test double (`apps/tracer/test/provisioning-double.ts`) implements the same requests and events. This file lists what the UI wants that the contract does not give it. None of it is invented in the double; each item says the exact field and why. Where the UI cannot work without a field, it carries a fallback, named below. ## Wanted by the UI 1. **Per-step human text that matches a fixed vocabulary.** Contract: `message` is free human text and "clients must display the server's actual text". The UI shows exactly that, so the row's step label is whatever the server says. The double uses short phrases ("Checking the system", "Installing the agent", "Gathering host facts", "Connecting", "Ready", "Ready · root"). Wanted: the real server's `message` for each step stays a short present-participle phrase of under 30 characters, because it sits on one line beside a progress bar on a phone. Longer prose belongs in `log_tail`. 2. **Facts on the `done` event, for the window header and popover.** The check already collects OS, architecture, init, uid, sudo, user systemd and linger, but events carry only text. The UI wants on `done`: `host: { host_id, os: "ubuntu"|"debian"|..., os_name, os_version, architecture, uid, mode }`. Why: the new window's header shows the OS mark, name and version, and the popover shows architecture and mode. Today the UI falls back to the discovery inventory entry, which does not exist for a manually typed `user@host` (it shows "Linux", no architecture). 3. **The host id the new terminal belongs to.** `done` should carry `host_id` (the UUID bound after the check) so the window can open that host's terminal through the session router. Without it the UI cannot tell the canvas which host the new window is. 4. **A structured failure for the "what to do" copy.** `failure.kind` selects the title and next-step text in the UI, which is enough for six kinds. Wanted per kind that the UI cannot derive: `failure.phase` (which of check/install/facts/connect was running; today the UI keeps the last phase it saw) and, for `host-key` and `unsupported`, a field naming what was observed (the contract has `fingerprints` for host keys only; unsupported needs `reason: "no-systemd" | "arch" | "os"`). 5. **Queued versus started.** The server admits eight active hosts; the rest of a 100-host batch have no event until a slot frees. The UI shows "Waiting" for a host with no events, which is indistinguishable from "the server never heard of it". Wanted: one `queued` step (or a `queued` event) per target at admission, with `queue_position`. The UI would then show "Waiting" only for queued hosts and could report a rejected target. 6. **A pasted credential becomes a reference how?** The credentials page lets the person paste a key or password and says it is encrypted with their passkey. The contract only accepts an opaque `credential` reference, and defines no request that turns pasted bytes into one (that is the vault adapter's job). Wanted: the vault request (path, body, response `{credential}`) so the UI can store the paste first and send the reference. Today the UI sends no credential, and the double refuses `nix-cache` regardless. 7. **Discovery and inventory.** The host list (names, sources, OS, "already added", "SSH ready" / "No answer" / "Blocked", root available) comes from a mock endpoint, `/__mock/proto/addhost`. The contract resolves `discovered` ids but defines no request that lists them. Wanted: a read-only listing with, per entry: `id`,
Author
Owner

Vocabulary (CLAUDE.md): user-facing step messages must say "infraternal agent", never "agent" alone. The test double currently shows "Installing the agent" mirroring the contract's example messages; please make the server's messages read e.g. "Installing the infraternal agent" and update contracts/ssh-bootstrap.md examples. The UI side will match.

Vocabulary (CLAUDE.md): user-facing step messages must say "infraternal agent", never "agent" alone. The test double currently shows "Installing the agent" mirroring the contract's example messages; please make the server's messages read e.g. "Installing the infraternal agent" and update contracts/ssh-bootstrap.md examples. The UI side will match.
Author
Owner

Continuation checkpoint, head ac2ee4be5f, ssh-bootstrap. Eight atomic commits finish the inherited runtime/fuzz/research source: the ordinary server mounts authenticated bounded start/retry/replay progress, the default refuses enrollment before upload, and contracts/ssh-bootstrap.md gives UI JSON shapes. Comparison and own reviewer checklist are committed in research/ssh-client/REPORT.md and docs/ssh-bootstrap-evidence.md. Every commit ends Refs: #87 and passed exact scripts/verify fast; the final committed head was tested again. Evidence/target/scripts/pycache were excluded from commits.

Evidence: ASan4256482 executions/181s, max_len65537, no crash; equivalent final assertions100000/4s, no crash. Real TCP route regression RED404→GREEN401. Real sshd check preparation23884us/check118522us; ten concurrent checks180ms local/2602ms RTT300 (not ten installations). Controlled1000 targets held active_peak8, RSS4432/7452/7884KiB,45ms, load0.69/1.10/1.19 (not full server memory). Final-source n25/profile SSH comparison and200 retained connection private/RSS/PSS numbers are in REPORT.md, initial load2.01/1.83/1.52, CPUWeight10000. Isolated research pedantic Clippy/cargo-deny/build PASS. Final artifact sizes+SHA256 saved in evidence/ssh-bootstrap/continuation-final-artifacts.json.

Full provisioning acceptance remains BLOCKED. Final dependency recheck found remote-agents advanced to3a92ea2 via a dev merge; git show of its committed main.rs/runtime.rs still has no agent join CLI activation or remote terminal runtime. Latest #78 comments explicitly retain complete-feature WIP uncommitted, pending static-budget resolution, production administrator-envelope adapter and default server-startup wiring. This updates the earlier c0815d2 inspection in the evidence guide. The #78 writer/orchestrator must supply committed production join/listener/online/facts/terminal adapters. Then perform disposable local install/join/terminal/removal, full ten-target phase timings and server RSS, and o1 only after local proof and verified existing OpenSSH trust/auth. Prior key-refusal evidence is historical; this continuation contacted no named remote host or trust store. No full local/o1 installation or cleanup proof and no whole-server memory number are claimed. Issue remains open.

Scratch cleanup removes the24GiB job cache and worktree target symlink; all logs/findings remain under evidence/ssh-bootstrap/. Future builds must recreate their own HOME scratch target/toolchain setup. No pushes or deployments.

Exact final CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-final-fast.log. Verbatim gate output:

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

PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.99s]
Continuation checkpoint, head ac2ee4be5f3e6dee73f65461817b1e796bcef05f, ssh-bootstrap. Eight atomic commits finish the inherited runtime/fuzz/research source: the ordinary server mounts authenticated bounded start/retry/replay progress, the default refuses enrollment before upload, and contracts/ssh-bootstrap.md gives UI JSON shapes. Comparison and own reviewer checklist are committed in research/ssh-client/REPORT.md and docs/ssh-bootstrap-evidence.md. Every commit ends Refs: #87 and passed exact scripts/verify fast; the final committed head was tested again. Evidence/target/scripts/__pycache__ were excluded from commits. Evidence: ASan4256482 executions/181s, max_len65537, no crash; equivalent final assertions100000/4s, no crash. Real TCP route regression RED404→GREEN401. Real sshd check preparation23884us/check118522us; ten concurrent checks180ms local/2602ms RTT300 (not ten installations). Controlled1000 targets held active_peak8, RSS4432/7452/7884KiB,45ms, load0.69/1.10/1.19 (not full server memory). Final-source n25/profile SSH comparison and200 retained connection private/RSS/PSS numbers are in REPORT.md, initial load2.01/1.83/1.52, CPUWeight10000. Isolated research pedantic Clippy/cargo-deny/build PASS. Final artifact sizes+SHA256 saved in evidence/ssh-bootstrap/continuation-final-artifacts.json. Full provisioning acceptance remains BLOCKED. Final dependency recheck found remote-agents advanced to3a92ea2 via a dev merge; git show of its committed main.rs/runtime.rs still has no agent join CLI activation or remote terminal runtime. Latest #78 comments explicitly retain complete-feature WIP uncommitted, pending static-budget resolution, production administrator-envelope adapter and default server-startup wiring. This updates the earlier c0815d2 inspection in the evidence guide. The #78 writer/orchestrator must supply committed production join/listener/online/facts/terminal adapters. Then perform disposable local install/join/terminal/removal, full ten-target phase timings and server RSS, and o1 only after local proof and verified existing OpenSSH trust/auth. Prior key-refusal evidence is historical; this continuation contacted no named remote host or trust store. No full local/o1 installation or cleanup proof and no whole-server memory number are claimed. Issue remains open. Scratch cleanup removes the24GiB job cache and worktree target symlink; all logs/findings remain under evidence/ssh-bootstrap/. Future builds must recreate their own HOME scratch target/toolchain setup. No pushes or deployments. Exact final CPUWeight10000 scripts/verify fast exit0; evidence/ssh-bootstrap/continuation-final-fast.log. Verbatim gate output: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16520048 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13881064 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.99s] ```
Author
Owner

Orchestrator: run 2 complete at ac2ee4b (API wiring, UI contract, 4.26M fuzz executions, SSH comparison report). Full provisioning waits on #78 production integration (in progress, run 6). Owner decision pending on the SSH client choice and o1 host-key trust.

Orchestrator: run 2 complete at ac2ee4b (API wiring, UI contract, 4.26M fuzz executions, SSH comparison report). Full provisioning waits on #78 production integration (in progress, run 6). Owner decision pending on the SSH client choice and o1 host-key trust.
Author
Owner

Owner answer (2026-10-08): o1 host key may be trusted on first use (nobody else has logged in); record the fingerprint here when pinning. SSH client: the owner asks whether russh can use OpenSSH known_hosts, config and existing keys, and how well audited it is; decision pending.

Owner answer (2026-10-08): o1 host key may be trusted on first use (nobody else has logged in); record the fingerprint here when pinning. SSH client: the owner asks whether russh can use OpenSSH known_hosts, config and existing keys, and how well audited it is; decision pending.
Author
Owner

Run 3 launched: merge dev, server's own key on first start, D183 auth auto-detection order, host-key handling, end-to-end against #78 when its join API lands.

Run 3 launched: merge dev, server's own key on first start, D183 auth auto-detection order, host-key handling, end-to-end against #78 when its join API lands.
Author
Owner

Run3 started: sole writer ssh-bootstrap, resumed ac2ee4be5f (inherited runtime/fuzz/research already committed). Read repository contracts, main D181/D183, #87/#78 history and parent #5. Merge current local dev f27b3fe first; D183 dedicated Ed25519 key and ordered auth supersede inherited ambient-local-identity fallback. Exclude evidence/target/scripts/pycache; no push/deploy/perf VM/credential inspection.

Run3 started: sole writer ssh-bootstrap, resumed ac2ee4be5f3e6dee73f65461817b1e796bcef05f (inherited runtime/fuzz/research already committed). Read repository contracts, main D181/D183, #87/#78 history and parent #5. Merge current local dev f27b3fe first; D183 dedicated Ed25519 key and ordered auth supersede inherited ambient-local-identity fallback. Exclude evidence/target/scripts/__pycache__; no push/deploy/perf VM/credential inspection.
Author
Owner

Additive D181/D183 contract proposal before code: GET /v1/bootstrap/ssh-key requires exact pinned Origin and unlocked owner cookie, returns public_key/fingerprint/locked (public trust remains usable cold-locked), 503 if dedicated key custody is unavailable. Persist one dedicated Ed25519 public identity plus opaque administrator-wrapped ciphertext in SQLite; initialization/unlock uses an SshKeySource/administrator-vault boundary parallel to CaKeySource. Existing dev has no production administrator CA envelope adapter; no plaintext adjacent unlock key or ambient-local-key fallback will be introduced. Trusted configured startup creates the dedicated key exactly once through that vault; default cold startup retains public metadata only.
Ordered auth: network-only BatchMode connection with local keys/agents/passwords disabled, then dedicated server key, then browser-unwrapped user key, then typed-once password. Lazy providers expose each secret only when its turn is reached, helper stdin/socket paths retain current bounds; unknown/changed host keys or unreachable targets stop the sequence. Report only trusted auth method/provider metadata and typed choose-method on auth exhaustion. Existing strict host-key refusal and independently observed fingerprint API remain; do not auto-pin o1 under this brief. #78 join/listener/runtime not landed on merged dev; keep invitation shape stable and test fixture integration independently.

Additive D181/D183 contract proposal before code: GET /v1/bootstrap/ssh-key requires exact pinned Origin and unlocked owner cookie, returns public_key/fingerprint/locked (public trust remains usable cold-locked), 503 if dedicated key custody is unavailable. Persist one dedicated Ed25519 public identity plus opaque administrator-wrapped ciphertext in SQLite; initialization/unlock uses an SshKeySource/administrator-vault boundary parallel to CaKeySource. Existing dev has no production administrator CA envelope adapter; no plaintext adjacent unlock key or ambient-local-key fallback will be introduced. Trusted configured startup creates the dedicated key exactly once through that vault; default cold startup retains public metadata only. Ordered auth: network-only BatchMode connection with local keys/agents/passwords disabled, then dedicated server key, then browser-unwrapped user key, then typed-once password. Lazy providers expose each secret only when its turn is reached, helper stdin/socket paths retain current bounds; unknown/changed host keys or unreachable targets stop the sequence. Report only trusted auth method/provider metadata and typed choose-method on auth exhaustion. Existing strict host-key refusal and independently observed fingerprint API remain; do not auto-pin o1 under this brief. #78 join/listener/runtime not landed on merged dev; keep invitation shape stable and test fixture integration independently.
Author
Owner

Completed dev merge 62a2c4be11 (dev f27b3fe). Keep shared auth fixture lock crate-visible; move unpublished remote schema0010 to0012, preserve deployed recovery0010/0011. Exact CPUWeight10000 scripts/verify fast exit0, TRACER_TEST_PORT4787; log evidence/ssh-bootstrap/run3/merge-fast.log. x86/ARM16327664/13734784 bytes, limits unchanged; shared8core load at final TS check21.47/20.07/19.13. Verbatim:

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

PT_INTERP: absent; size: 16327664 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13734784 bytes (baseline 13881576 + allowance 262144 = max 14143720)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [4.52s]
Completed dev merge 62a2c4be114b50bf4f7e564455dbf6d323b5d286 (dev f27b3fe). Keep shared auth fixture lock crate-visible; move unpublished remote schema0010 to0012, preserve deployed recovery0010/0011. Exact CPUWeight10000 scripts/verify fast exit0, TRACER_TEST_PORT4787; log evidence/ssh-bootstrap/run3/merge-fast.log. x86/ARM16327664/13734784 bytes, limits unchanged; shared8core load at final TS check21.47/20.07/19.13. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16327664 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13734784 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.52s] ```
Author
Owner

Failing-first D183 regression on merged62a2c4b: the production OpenSSH adapter accepted the disposable fixture through its inherited authorized ssh-agent during the intended network-only attempt. Expected auth refusal; actual check succeeded. Real sshd oracle0passed1failed in0.42s, exit101; evidence/ssh-bootstrap/run3/network-red.log and .scratch/run3/real_ssh_red.rs. No existing key/config/known_hosts inspected or modified; fixture keys stayed in memory/pipes. Fix will isolate network auth from identity files/agents and reuse the read-only check as the ordered authentication oracle.

Failing-first D183 regression on merged62a2c4b: the production OpenSSH adapter accepted the disposable fixture through its inherited authorized ssh-agent during the intended network-only attempt. Expected auth refusal; actual check succeeded. Real sshd oracle0passed1failed in0.42s, exit101; evidence/ssh-bootstrap/run3/network-red.log and .scratch/run3/real_ssh_red.rs. No existing key/config/known_hosts inspected or modified; fixture keys stayed in memory/pipes. Fix will isolate network auth from identity files/agents and reuse the read-only check as the ordered authentication oracle.
Author
Owner

Completed D183 additive contract 743385eb24: dedicated key custody/API, lazy ordered auth and typed method/exhaustion events. Existing trust and #78 join shape unchanged; missing administrator custody explicit. CPUWeight10000 scripts/verify fast exit0, port4787, final shared8core load40.17/33.97/28.73; evidence/ssh-bootstrap/run3/auth-contract-fast.log. Verbatim:

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

PT_INTERP: absent; size: 16327664 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13734784 bytes (baseline 13881576 + allowance 262144 = max 14143720)

 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [3.81s]
Completed D183 additive contract 743385eb248274e1ccc1c8f013d37452fe1cead6: dedicated key custody/API, lazy ordered auth and typed method/exhaustion events. Existing trust and #78 join shape unchanged; missing administrator custody explicit. CPUWeight10000 scripts/verify fast exit0, port4787, final shared8core load40.17/33.97/28.73; evidence/ssh-bootstrap/run3/auth-contract-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16327664 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13734784 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.81s] ```
Author
Owner

Schema0014 gate red only in unchanged vt_credit.rs:22 (credit probe t1-gate-approximate-1;0/1,10.22s). Other Rust rows/static builds pass; x86/ARM16327728/13734880 B. Log evidence/ssh-bootstrap/run3/key-schema-fast.log; shared8core load reached40.17/33.97/28.73 earlier. No threshold changed; isolated oracle then exact full rerun. Version0013 is reserved for #78 committed remote_sessions, so dedicated SSH row uses0014.

Current #78 CLI integration finding (source inspection of committed remote-agents02f37b2): main.rs Agent data/state flags belong before Join; run_remote_agent always calls remote::run after join. Installer install.rs:201 currently uses agent join URL --state STAGE and expects return, and its service omits --data and run. Thus this installer cannot drive that CLI yet; it would fail argument parsing or wait on the running supervisor, and identity/shim directories need explicit separation. No upload/installation attempted. Additive proposed bootstrap CLI: agent --data STAGED_IDENTITY join URL --enroll-only returns after pinned enrollment; service agent --data LIVE_IDENTITY --state RUNTIME_STATE run. Default public join-and-run stays unchanged and stdin JSON remains contracts/remote.md. Need #78/orchestrator integration on dev; test the fixture before claiming full local/o1 provisioning.

Schema0014 gate red only in unchanged vt_credit.rs:22 (credit probe t1-gate-approximate-1;0/1,10.22s). Other Rust rows/static builds pass; x86/ARM16327728/13734880 B. Log evidence/ssh-bootstrap/run3/key-schema-fast.log; shared8core load reached40.17/33.97/28.73 earlier. No threshold changed; isolated oracle then exact full rerun. Version0013 is reserved for #78 committed remote_sessions, so dedicated SSH row uses0014. Current #78 CLI integration finding (source inspection of committed remote-agents02f37b2): main.rs Agent data/state flags belong before Join; run_remote_agent always calls remote::run after join. Installer install.rs:201 currently uses agent join URL --state STAGE and expects return, and its service omits --data and run. Thus this installer cannot drive that CLI yet; it would fail argument parsing or wait on the running supervisor, and identity/shim directories need explicit separation. No upload/installation attempted. Additive proposed bootstrap CLI: agent --data STAGED_IDENTITY join URL --enroll-only returns after pinned enrollment; service agent --data LIVE_IDENTITY --state RUNTIME_STATE run. Default public join-and-run stays unchanged and stdin JSON remains contracts/remote.md. Need #78/orchestrator integration on dev; test the fixture before claiming full local/o1 provisioning.
Author
Owner

UI-3 (add-host wizard on real provisioning) started by the UI engineer. Branch canvas-addhost, base canvas-product bdfcad2. Plan: ProvisioningService adapter (real = contracts/ssh-bootstrap.md, mock = ?mock=1 only), D183 detect-first wizard, five-stage stepper from bootstrap events, enrolled hosts handed to the canvas through one hook. I will post contract gaps I find here (ssh-key route, choose_method, credential minting, host-key pinning, offline install command are in the contract or needed by it but not mounted on ssh-bootstrap 743385e).

UI-3 (add-host wizard on real provisioning) started by the UI engineer. Branch canvas-addhost, base canvas-product bdfcad2. Plan: ProvisioningService adapter (real = contracts/ssh-bootstrap.md, mock = ?mock=1 only), D183 detect-first wizard, five-stage stepper from bootstrap events, enrolled hosts handed to the canvas through one hook. I will post contract gaps I find here (ssh-key route, choose_method, credential minting, host-key pinning, offline install command are in the contract or needed by it but not mounted on ssh-bootstrap 743385e).
Author
Owner

UI-3 finding (contract gaps for the wizard). Evidence: git grep on ssh-bootstrap 743385e (crates/infraternal-server/src, crates/plugins/ssh/src) finds only /v1/bootstrap/ws; no /v1/bootstrap/ssh-key route and no choose_method field exist in code, though contracts/ssh-bootstrap.md specifies both. bootstrap_runtime.rs refuses discovery and vault requests ("Host discovery is unavailable in this build").

The UI adapter (apps/tracer/src/canvas/addhost/real.ts) speaks the contract as written and treats anything else as "unavailable" (never as success). It needs these ADDITIVE endpoints; proposing them here before the UI relies on them:

  1. GET /v1/bootstrap/ssh-key (in the contract, not mounted yet): {public_key, fingerprint, locked}. Shown with a copy cell when auth falls to "choose".
  2. GET /v1/bootstrap/discovery -> {"hosts":[{id,user?,address,os?,operating_system?,architecture?,sources[],reach?: ready|unreachable|mesh-policy,evidence?,already_added?,root_available?}]}. Authorized inventory only; same admission as the socket. 404 = no discovery, the wizard then shows "type user@host or paste an ssh config".
  3. POST /v1/bootstrap/credential {kind:"private-key"|"password", secret, passphrase?} -> {reference}. One use, bound to the live session, expires with it; the reference goes in start (per-target credential). Needed because the contract says requests carry only references but gives the browser no way to create one for the D183 "user's key / password typed once" steps. retry cannot change a credential, so after the person supplies one the UI starts a new single-target batch with the reference.
  4. POST /v1/bootstrap/host-key {host, fingerprint} -> 204. Owner action that pins an observed key (the contract says observations never update known_hosts, so the UI needs a deliberate way to). The UI only calls it after the person compares the fingerprint and clicks "Trust this key"; it then retries.
  5. POST /v1/bootstrap/install-command {host} -> {command, expires_in_seconds} for unreachable hosts. Note the tension in the contract: "a token never enters an URL or argv" vs a one-line command that must carry something; the UI only displays whatever string this returns, with its 900 s lifetime.
  6. Event field authentication and failure field choose_method are parsed exactly as in the contract; both are optional so older servers work.

Also needed for TASTE (typed host without a login name): manual addresses are sent as host or user@host[:port] as typed; if the server requires user@, say so and the wizard will ask for it.

UI-3 finding (contract gaps for the wizard). Evidence: `git grep` on ssh-bootstrap 743385e (crates/infraternal-server/src, crates/plugins/ssh/src) finds only `/v1/bootstrap/ws`; no `/v1/bootstrap/ssh-key` route and no `choose_method` field exist in code, though contracts/ssh-bootstrap.md specifies both. bootstrap_runtime.rs refuses discovery and vault requests ("Host discovery is unavailable in this build"). The UI adapter (apps/tracer/src/canvas/addhost/real.ts) speaks the contract as written and treats anything else as "unavailable" (never as success). It needs these ADDITIVE endpoints; proposing them here before the UI relies on them: 1. `GET /v1/bootstrap/ssh-key` (in the contract, not mounted yet): `{public_key, fingerprint, locked}`. Shown with a copy cell when auth falls to "choose". 2. `GET /v1/bootstrap/discovery` -> `{"hosts":[{id,user?,address,os?,operating_system?,architecture?,sources[],reach?: ready|unreachable|mesh-policy,evidence?,already_added?,root_available?}]}`. Authorized inventory only; same admission as the socket. 404 = no discovery, the wizard then shows "type user@host or paste an ssh config". 3. `POST /v1/bootstrap/credential` `{kind:"private-key"|"password", secret, passphrase?}` -> `{reference}`. One use, bound to the live session, expires with it; the reference goes in `start` (per-target `credential`). Needed because the contract says requests carry only references but gives the browser no way to create one for the D183 "user's key / password typed once" steps. `retry` cannot change a credential, so after the person supplies one the UI starts a new single-target batch with the reference. 4. `POST /v1/bootstrap/host-key` `{host, fingerprint}` -> 204. Owner action that pins an observed key (the contract says observations never update known_hosts, so the UI needs a deliberate way to). The UI only calls it after the person compares the fingerprint and clicks "Trust this key"; it then retries. 5. `POST /v1/bootstrap/install-command` `{host}` -> `{command, expires_in_seconds}` for unreachable hosts. Note the tension in the contract: "a token never enters an URL or argv" vs a one-line command that must carry something; the UI only displays whatever string this returns, with its 900 s lifetime. 6. Event field `authentication` and failure field `choose_method` are parsed exactly as in the contract; both are optional so older servers work. Also needed for TASTE (typed host without a login name): `manual` addresses are sent as `host` or `user@host[:port]` as typed; if the server requires `user@`, say so and the wizard will ask for it.
Author
Owner

Schema step committed: bfe6c80751. D183 singleton public identity/admin-wrapped ciphertext, migration 0014 preserves #78 migration 0013. First unchanged VT credit failure was followed by isolated and full passing reruns. Evidence: evidence/ssh-bootstrap/run3/key-schema-fast-recheck.log. scripts/verify fast exit 0; summary verbatim:

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

TypeScript: 7 pass, 0 fail, 34390 expect() calls, 3.70s. Static binary x86_64 16,327,728 bytes; aarch64 13,734,880 bytes.

Schema step committed: bfe6c807519c29e80370f050aab68fd3b468f6b5. D183 singleton public identity/admin-wrapped ciphertext, migration 0014 preserves #78 migration 0013. First unchanged VT credit failure was followed by isolated and full passing reruns. Evidence: evidence/ssh-bootstrap/run3/key-schema-fast-recheck.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` TypeScript: 7 pass, 0 fail, 34390 expect() calls, 3.70s. Static binary x86_64 16,327,728 bytes; aarch64 13,734,880 bytes.
Author
Owner

Key custody source compiles and passes clippy/deny/static checks. First full gate was interrupted (exit 143 after both release compilations); the cached rerun failed an unchanged terminal-credit snapshot test: crates/infraternal/tests/agent_review.rs:13, repeated_tiny_credit_pauses_preserve_shell_progress, scripts/verify-agent-snapshot.py:48 assertion len(client.snapshots) == count and client.out == cursor. Five sibling tests passed; key module is not yet wired into runtime, static sizes unchanged. Evidence: evidence/ssh-bootstrap/run3/key-custody-fast-snapshot-failure.log. Shared load 24.77/24.18/24.01. Re-running the unmodified full gate with RUST_TEST_THREADS=1; no assertions or budgets changed.

Key custody source compiles and passes clippy/deny/static checks. First full gate was interrupted (exit 143 after both release compilations); the cached rerun failed an unchanged terminal-credit snapshot test: crates/infraternal/tests/agent_review.rs:13, repeated_tiny_credit_pauses_preserve_shell_progress, scripts/verify-agent-snapshot.py:48 assertion len(client.snapshots) == count and client.out == cursor. Five sibling tests passed; key module is not yet wired into runtime, static sizes unchanged. Evidence: evidence/ssh-bootstrap/run3/key-custody-fast-snapshot-failure.log. Shared load 24.77/24.18/24.01. Re-running the unmodified full gate with RUST_TEST_THREADS=1; no assertions or budgets changed.
Author
Owner

Additive D183 API shapes proposed before implementation: retry may include auth:{key,passphrase,password} for one existing failed target only; never on start, never in replay/history/Debug/logs. Browser-unwrapped key and password are bounded transient inputs, lazy after network/server key and erased when this attempt ends; queued credential admission expires after 60s. Existing reference-only retries remain valid.

First-contact confirmation: action:"confirm-host-key", target and displayed SHA256 fingerprint, bound to the current failed attempt of this owner/socket batch. Only an explicitly classified unknown-key refusal is confirmable; changed/revoked/generic trust failures remain refusals. Re-scan and require the same displayed fingerprint before retaining a dedicated public pin, then permit explicit retry. The system OpenSSH verifier remains the trust engine; confirmation never rewrites system known_hosts or accepts o1 during this job. Missing production #78 invitation/CA custody remains an explicit integration gap.

Additive D183 API shapes proposed before implementation: retry may include auth:{key,passphrase,password} for one existing failed target only; never on start, never in replay/history/Debug/logs. Browser-unwrapped key and password are bounded transient inputs, lazy after network/server key and erased when this attempt ends; queued credential admission expires after 60s. Existing reference-only retries remain valid. First-contact confirmation: action:"confirm-host-key", target and displayed SHA256 fingerprint, bound to the current failed attempt of this owner/socket batch. Only an explicitly classified unknown-key refusal is confirmable; changed/revoked/generic trust failures remain refusals. Re-scan and require the same displayed fingerprint before retaining a dedicated public pin, then permit explicit retry. The system OpenSSH verifier remains the trust engine; confirmation never rewrites system known_hosts or accepts o1 during this job. Missing production #78 invitation/CA custody remains an explicit integration gap.
Author
Owner

Dedicated SSH custody module committed: cold lock, durable first identity, matching authorized unwrap, memory-only handoff. Production administrator adapter remains absent from dev (#78); no plaintext fallback.
Head: 1e5910f75f. Evidence: evidence/ssh-bootstrap/run3/key-custody-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.99s]

Dedicated SSH custody module committed: cold lock, durable first identity, matching authorized unwrap, memory-only handoff. Production administrator adapter remains absent from dev (#78); no plaintext fallback. Head: 1e5910f75f7f90de3f59f345090f7204554f3b4c. Evidence: evidence/ssh-bootstrap/run3/key-custody-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.99s]
Author
Owner

Real Chromium same-origin fetch found GET omits Origin (origin:null, Sec-Fetch-Site:same-origin); POST sends the exact page Origin. Evidence: evidence/ssh-bootstrap/run3/public-key-browser-headers.log (disposable loopback browser/header fixture, TRACER_TEST_PORT=4787). A GET-only endpoint requiring pinned Origin would reject Settings' ordinary browser fetch. Additive contract correction: also accept POST /v1/bootstrap/ssh-key with empty body, identical owner/Origin/cookie checks and public-only no-store response. Keep strict GET available for nonbrowser callers supplying Origin; do not weaken Origin admission to repair browser compatibility.

Real Chromium same-origin fetch found GET omits Origin (origin:null, Sec-Fetch-Site:same-origin); POST sends the exact page Origin. Evidence: evidence/ssh-bootstrap/run3/public-key-browser-headers.log (disposable loopback browser/header fixture, TRACER_TEST_PORT=4787). A GET-only endpoint requiring pinned Origin would reject Settings' ordinary browser fetch. Additive contract correction: also accept POST /v1/bootstrap/ssh-key with empty body, identical owner/Origin/cookie checks and public-only no-store response. Keep strict GET available for nonbrowser callers supplying Origin; do not weaken Origin admission to repair browser compatibility.
Author
Owner

Security finding for D183 key isolation: OpenSSH command-line IdentityFile=none and CertificateFile=none do not remove configured entries; they append. Public-only synthetic ssh -G fixture returned both none and /nonexistent/infraternal-fixture-identity (likewise certificate), evidence: evidence/ssh-bootstrap/run3/identity-precedence.log. No real credential/config store was inspected. A dedicated ephemeral ssh-agent alone therefore cannot guarantee that supplied-key authentication avoids configured system key files.

Implementation choice: resolve the trusted effective destination with existing bounded ssh -G/proxy refusal, then invoke the same system OpenSSH with an empty config and an explicit allowlist of public addressing, host-trust and crypto/network policy. Preserve known_hosts/revocation/cert-authority behavior; exclude identity/certificate/agent/provider paths. This keeps the existing engine and avoids copying credentials or rewriting system SSH config. Add parser and real-SSH regressions, and measure the D183 ordered-check overhead.

Security finding for D183 key isolation: OpenSSH command-line IdentityFile=none and CertificateFile=none do not remove configured entries; they append. Public-only synthetic ssh -G fixture returned both none and /nonexistent/infraternal-fixture-identity (likewise certificate), evidence: evidence/ssh-bootstrap/run3/identity-precedence.log. No real credential/config store was inspected. A dedicated ephemeral ssh-agent alone therefore cannot guarantee that supplied-key authentication avoids configured system key files. Implementation choice: resolve the trusted effective destination with existing bounded ssh -G/proxy refusal, then invoke the same system OpenSSH with an empty config and an explicit allowlist of public addressing, host-trust and crypto/network policy. Preserve known_hosts/revocation/cert-authority behavior; exclude identity/certificate/agent/provider paths. This keeps the existing engine and avoids copying credentials or rewriting system SSH config. Add parser and real-SSH regressions, and measure the D183 ordered-check overhead.
Author
Owner

Custody tests committed: six real-crypto tests pass (0.36s targeted), covering durable first identity, concurrent start, wrong unwrap, corrupted storage, algorithm refusal, cold lock and update handoff. Evidence: evidence/ssh-bootstrap/run3/key-custody-targeted-tests.log.
Head: 28ee6abf53. Evidence: evidence/ssh-bootstrap/run3/key-custody-tests-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.70s]

Custody tests committed: six real-crypto tests pass (0.36s targeted), covering durable first identity, concurrent start, wrong unwrap, corrupted storage, algorithm refusal, cold lock and update handoff. Evidence: evidence/ssh-bootstrap/run3/key-custody-targeted-tests.log. Head: 28ee6abf53b8063c8271d0935aedf532621b6273. Evidence: evidence/ssh-bootstrap/run3/key-custody-tests-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.70s]
Author
Owner

UI-3 finding: integration run of the add-host adapter against the REAL server binary (musl build of ssh-bootstrap, HEAD 1e5910f plus its working tree, built 17:06). Harness: apps/tracer/test/addhost-real-server.mjs on branch canvas-addhost (starts the server on a free port with a throwaway data dir and a self-signed localhost cert, registers the owner through the real sign-in UI with a virtual passkey, then runs the product adapter in the signed-in page). No real host was contacted; no credential of the owner's was used.

Verbatim result:

signed in as the owner through the real sign-in UI
{
  "discover": [],
  "mintCredential": { "threw": "This server can't take a one-time sign-in yet." },
  "events": [
    { "step": "check",  "message": "Checking the SSH host." },
    { "step": "failed", "message": "The SSH host could not be reached.", "kind": "unreachable" }
  ],
  "errors": [],
  "rootWithoutConsent": { "kind": "unsupported", "message": "Root installation needs explicit consent.", "log_tail": [] }
}

(serverKey is undefined and absent from the JSON: GET /v1/bootstrap/ssh-key is not mounted yet.)

What this proves: the wire format of start, the event stream (check -> failed/unreachable with the server's human text), the typed refusal of root without consent, and the 401/403 admission all match what the UI parses. What it cannot prove yet: any authentication event, choose_method, done, because the default backend cannot sign in or enrol (as the contract's runtime-status section says).

Finding fixed on the UI side: the server serves the web app (HTTP 200, text/html) for every unknown GET, so an unmounted endpoint such as /v1/bootstrap/ssh-key does not answer 404. The first run threw a JSON syntax error; the adapter now treats a non-JSON answer as "not available".

Open contract question for the ssh-bootstrap lane (D183 steps 3 and 4): the contract runs "the user's browser-unwrapped key" and "a password supplied once" as automatic steps, but gives the browser no way to hand the server a secret at the moment the server reaches that step (a credential reference must exist at start). The UI therefore asks only after choose_method, mints a one-use reference (proposed POST /v1/bootstrap/credential) and starts a single-target batch with it. If you would rather have the server ask lazily over the socket (a need-credential event answered by a credential command), say so and the adapter will follow.

UI-3 finding: integration run of the add-host adapter against the REAL server binary (musl build of ssh-bootstrap, HEAD 1e5910f plus its working tree, built 17:06). Harness: apps/tracer/test/addhost-real-server.mjs on branch canvas-addhost (starts the server on a free port with a throwaway data dir and a self-signed localhost cert, registers the owner through the real sign-in UI with a virtual passkey, then runs the product adapter in the signed-in page). No real host was contacted; no credential of the owner's was used. Verbatim result: ``` signed in as the owner through the real sign-in UI { "discover": [], "mintCredential": { "threw": "This server can't take a one-time sign-in yet." }, "events": [ { "step": "check", "message": "Checking the SSH host." }, { "step": "failed", "message": "The SSH host could not be reached.", "kind": "unreachable" } ], "errors": [], "rootWithoutConsent": { "kind": "unsupported", "message": "Root installation needs explicit consent.", "log_tail": [] } } ``` (serverKey is undefined and absent from the JSON: GET /v1/bootstrap/ssh-key is not mounted yet.) What this proves: the wire format of start, the event stream (check -> failed/unreachable with the server's human text), the typed refusal of root without consent, and the 401/403 admission all match what the UI parses. What it cannot prove yet: any `authentication` event, `choose_method`, `done`, because the default backend cannot sign in or enrol (as the contract's runtime-status section says). Finding fixed on the UI side: the server serves the web app (HTTP 200, text/html) for every unknown GET, so an unmounted endpoint such as /v1/bootstrap/ssh-key does not answer 404. The first run threw a JSON syntax error; the adapter now treats a non-JSON answer as "not available". Open contract question for the ssh-bootstrap lane (D183 steps 3 and 4): the contract runs "the user's browser-unwrapped key" and "a password supplied once" as automatic steps, but gives the browser no way to hand the server a secret at the moment the server reaches that step (a credential reference must exist at `start`). The UI therefore asks only after `choose_method`, mints a one-use reference (proposed POST /v1/bootstrap/credential) and starts a single-target batch with it. If you would rather have the server ask lazily over the socket (a `need-credential` event answered by a `credential` command), say so and the adapter will follow.
Author
Owner

Browser-compatible public key contract committed: POST and strict GET share owner/Origin checks. Real Chromium GET had no Origin; POST sent pinned Origin. Evidence: evidence/ssh-bootstrap/run3/public-key-browser-headers.log.
Head: 1fbeab2143. Evidence: evidence/ssh-bootstrap/run3/key-browser-contract-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.30s]

Browser-compatible public key contract committed: POST and strict GET share owner/Origin checks. Real Chromium GET had no Origin; POST sent pinned Origin. Evidence: evidence/ssh-bootstrap/run3/public-key-browser-headers.log. Head: 1fbeab2143adb600f2c96fe8fba9df6a98e21da4. Evidence: evidence/ssh-bootstrap/run3/key-browser-contract-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.30s]
Author
Owner

D168 custody race reproduced before fixing: a valid administrator unwrap can finish after an explicit lock and reinstall private material. Deterministic regression lock_during_administrator_unwrap_cannot_reinstall_private_material failed 0/1 in 0.03s (stale unlock must not win an explicit lock). Evidence: evidence/ssh-bootstrap/run3/key-lock-race-red.log; ssh_key_tests.rs:239. Fix in progress: capture/check a lock generation around unwrap and installation; every explicit lock invalidates earlier unwraps. Counter exhaustion remains permanently locked. Public identity and encrypted storage stay unchanged.

D168 custody race reproduced before fixing: a valid administrator unwrap can finish after an explicit lock and reinstall private material. Deterministic regression lock_during_administrator_unwrap_cannot_reinstall_private_material failed 0/1 in 0.03s (stale unlock must not win an explicit lock). Evidence: evidence/ssh-bootstrap/run3/key-lock-race-red.log; ssh_key_tests.rs:239. Fix in progress: capture/check a lock generation around unwrap and installation; every explicit lock invalidates earlier unwraps. Counter exhaustion remains permanently locked. Public identity and encrypted storage stay unchanged.
Author
Owner

Custody lock race fixed and committed. Failing-first regression: 0/1 in 0.03s; all eight custody tests pass in the full gate. Lock generation invalidates in-flight unwraps, including permanent refusal at counter exhaustion. Evidence: evidence/ssh-bootstrap/run3/key-lock-race-red.log and key-lock-race-green.log.
Head: 6f303af916. Evidence: evidence/ssh-bootstrap/run3/key-lock-race-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.80s]

Custody lock race fixed and committed. Failing-first regression: 0/1 in 0.03s; all eight custody tests pass in the full gate. Lock generation invalidates in-flight unwraps, including permanent refusal at counter exhaustion. Evidence: evidence/ssh-bootstrap/run3/key-lock-race-red.log and key-lock-race-green.log. Head: 6f303af91608cd1b6878caf004e3fea5a8fc052d. Evidence: evidence/ssh-bootstrap/run3/key-lock-race-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.80s]
Author
Owner

D183 connection-lifetime finding: OpenSsh Session::run currently spawns an independent SSH child for every command and forces ControlMaster=no/ControlPath=none. CredentialSession lives across those commands, so a browser-unwrapped key would be reused across multiple physical connections in one provisioning attempt (openssh.rs command/run). Before accepting transient retry credentials, retain one process-owned OpenSSH master per host attempt, with a private control socket, no ControlPersist, prompt/key helpers erased after authentication, and mux clients forbidden from reconnecting if that master disappears. No engine/library change. Existing rollback coordinates remain retryable with a fresh connection/credential. Measure direct vs scoped connection wall time and ten-target resource use, and run real-SSH lost-master/cleanup tests before claiming one-use scope.
Dev advanced to 4ab8ffce0c (canvas integration); #78 join/runtime/custody remains absent from dev. remote-agents is db3c872077 (renewal), still a separate lane. Refresh dev after the endpoint commit; keep conditional local #78 fixture work distinct from production proof.

D183 connection-lifetime finding: OpenSsh Session::run currently spawns an independent SSH child for every command and forces ControlMaster=no/ControlPath=none. CredentialSession lives across those commands, so a browser-unwrapped key would be reused across multiple physical connections in one provisioning attempt (openssh.rs command/run). Before accepting transient retry credentials, retain one process-owned OpenSSH master per host attempt, with a private control socket, no ControlPersist, prompt/key helpers erased after authentication, and mux clients forbidden from reconnecting if that master disappears. No engine/library change. Existing rollback coordinates remain retryable with a fresh connection/credential. Measure direct vs scoped connection wall time and ten-target resource use, and run real-SSH lost-master/cleanup tests before claiming one-use scope. Dev advanced to 4ab8ffce0c9ae2de5a8215cafa3721899f73d9ca (canvas integration); #78 join/runtime/custody remains absent from dev. remote-agents is db3c8720774af885f570e391aef4899ce7722a7a (renewal), still a separate lane. Refresh dev after the endpoint commit; keep conditional local #78 fixture work distinct from production proof.
Author
Owner

Authenticated public SSH key endpoint committed: strict GET/POST admission, public key/fingerprint/locked only, no-store on all statuses, 503 without custody. Source injection shares the runtime-owned identity; no system key/private load.
Head: 04403a6575. Evidence: evidence/ssh-bootstrap/run3/key-api-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.92s]

Authenticated public SSH key endpoint committed: strict GET/POST admission, public key/fingerprint/locked only, no-store on all statuses, 503 without custody. Source injection shares the runtime-owned identity; no system key/private load. Head: 04403a6575c7965697a667a51503dfa0b5fd2b5c. Evidence: evidence/ssh-bootstrap/run3/key-api-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.92s]
Author
Owner

UI-3 finished. Branch canvas-addhost, head bf5b412 (dev 4ab8ffc merged in).

Gate, scripts/verify fast (TRACER_TEST_PORT=4897), exit 0: Rust fmt/VT fmt/clippy/test/cargo-deny/static builds all PASS; tracer 57 bun tests pass (23 new in src/canvas/addhost), JavaScript transfer critical gzip 280601/307200 brotli 232639/256000, deferred gzip 47174/51200 brotli 40973/45056; protocol 7 pass. (An earlier run failed once in vt_credit.rs:22, the load-dependent probe the ssh-bootstrap lane already reported; it passed on rerun.)
Specs: test/addhost-wizard.spec.ts 20/20, mock window prototype specs 14/14. Captures: 84 PNGs in apps/tracer/captures/addhost-wizard (21 states x 1440x900, 393x852 x ink, paper), read against TASTE; fixes in 9a94558.
Integration against the real server binary: see the earlier comment (test/addhost-real-server.mjs).

Needs the owner: wiring the wizard into product.ts (6 lines, kept as a patch) takes the deferred budget to 62,812 B gzip vs 51,200 (D188 limit); I left it out rather than change the limit. Until sessions/live.ts lists remote hosts (#78) the enrolled-host sink has nothing to open.
Also fixed on the way: base bdfcad2 was already red on the bundle budget because preview-only code shipped in production (dev has the same stub now).

UI-3 finished. Branch canvas-addhost, head bf5b412 (dev 4ab8ffc merged in). Gate, scripts/verify fast (TRACER_TEST_PORT=4897), exit 0: Rust fmt/VT fmt/clippy/test/cargo-deny/static builds all PASS; tracer 57 bun tests pass (23 new in src/canvas/addhost), JavaScript transfer critical gzip 280601/307200 brotli 232639/256000, deferred gzip 47174/51200 brotli 40973/45056; protocol 7 pass. (An earlier run failed once in vt_credit.rs:22, the load-dependent probe the ssh-bootstrap lane already reported; it passed on rerun.) Specs: test/addhost-wizard.spec.ts 20/20, mock window prototype specs 14/14. Captures: 84 PNGs in apps/tracer/captures/addhost-wizard (21 states x 1440x900, 393x852 x ink, paper), read against TASTE; fixes in 9a94558. Integration against the real server binary: see the earlier comment (test/addhost-real-server.mjs). Needs the owner: wiring the wizard into product.ts (6 lines, kept as a patch) takes the deferred budget to 62,812 B gzip vs 51,200 (D188 limit); I left it out rather than change the limit. Until sessions/live.ts lists remote hosts (#78) the enrolled-host sink has nothing to open. Also fixed on the way: base bdfcad2 was already red on the bundle budget because preview-only code shipped in production (dev has the same stub now).
Author
Owner

Public-key API admission tests committed. Real software-passkey matrix passes (1.06s), covering strict GET/POST, no-store, cold metadata, absent custody, duplicate Origin/Cookie, browser lock, owner demotion and logout; private load panics if called. Evidence: evidence/ssh-bootstrap/run3/key-api-targeted-tests.log.
Head: 4e12db3d10. Evidence: evidence/ssh-bootstrap/run3/key-api-tests-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.28s]

Public-key API admission tests committed. Real software-passkey matrix passes (1.06s), covering strict GET/POST, no-store, cold metadata, absent custody, duplicate Origin/Cookie, browser lock, owner demotion and logout; private load panics if called. Evidence: evidence/ssh-bootstrap/run3/key-api-targeted-tests.log. Head: 4e12db3d10973c577fd5237e7a46fe59e6a6ce67. Evidence: evidence/ssh-bootstrap/run3/key-api-tests-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.28s]
Author
Owner

Dev refresh to 4ab8ffce is staged as a merge, without conflicts. First serial fast gate failed only repeated_tiny_credit_pauses_preserve_shell_progress (agent_review.rs; verify-agent-snapshot.py:48 assertion); fmt, clippy, licenses, static builds passed. Evidence: evidence/ssh-bootstrap/run3/dev-refresh-fast.log. Load average during retry: 15.58/21.11/20.72. Re-running unchanged with RUST_TEST_THREADS=1 before committing; no test budget/assertion changes.

Dev refresh to 4ab8ffce is staged as a merge, without conflicts. First serial fast gate failed only repeated_tiny_credit_pauses_preserve_shell_progress (agent_review.rs; verify-agent-snapshot.py:48 assertion); fmt, clippy, licenses, static builds passed. Evidence: evidence/ssh-bootstrap/run3/dev-refresh-fast.log. Load average during retry: 15.58/21.11/20.72. Re-running unchanged with RUST_TEST_THREADS=1 before committing; no test budget/assertion changes.
Author
Owner

Completed conflict-free merge of dev 4ab8ffce. All fast gates passed unchanged on the serial retry; first-run terminal snapshot failure was reported separately. Dedicated SSH custody/API remains intact; no unrelated source edits.
Head: 75b078da5c. Evidence: evidence/ssh-bootstrap/run3/dev-refresh-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.26s]

Completed conflict-free merge of dev 4ab8ffce. All fast gates passed unchanged on the serial retry; first-run terminal snapshot failure was reported separately. Dedicated SSH custody/API remains intact; no unrelated source edits. Head: 75b078da5c41eedf34f8d6908cf9d176018d00c0. Evidence: evidence/ssh-bootstrap/run3/dev-refresh-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.26s]
Author
Owner

Failing-first SSH configuration regression reproduced: configured_identity_paths_are_not_inherited_by_the_command_child failed 0 passed/1 failed in 0.10s (evidence/ssh-bootstrap/run3/config-isolation-red.log). Synthetic -G output names only nonexistent identity/certificate paths; no credentials were read. Fix uses empty child configuration plus bounded public-policy reconstruction, preserving canonical endpoint/trust and putting explicit credential options first. Real OpenSSH accepted reconstructed public known-host lists/host alias (public-options-roundtrip.log). Expanded parser tests/fuzz follow this fix.

Failing-first SSH configuration regression reproduced: configured_identity_paths_are_not_inherited_by_the_command_child failed 0 passed/1 failed in 0.10s (evidence/ssh-bootstrap/run3/config-isolation-red.log). Synthetic -G output names only nonexistent identity/certificate paths; no credentials were read. Fix uses empty child configuration plus bounded public-policy reconstruction, preserving canonical endpoint/trust and putting explicit credential options first. Real OpenSSH accepted reconstructed public known-host lists/host alias (public-options-roundtrip.log). Expanded parser tests/fuzz follow this fix.
Author
Owner

Public-config isolation passed the real rootless sshd oracle, including strict unknown-key fingerprint refusal and helper cleanup: 1 passed/0 failed, 4.48s. infraternal-dev, 8 cores, load 55.73/35.88/25.58, CPUWeight=10000; evidence/ssh-bootstrap/run3/config-isolation-real.log. Read-only check preparation 72,711us, check 385,249us. Ten concurrent checks: local 753ms, controller peak 4,908KiB/owned SSH children peak 91,484KiB; 300ms profile 3,001ms, controller peak 4,940KiB/children 91,580KiB. These are transport correctness observations under shared build load, not full-server provisioning or a performance comparison. No installed infraternal agent/remote enrollment claimed.

Public-config isolation passed the real rootless sshd oracle, including strict unknown-key fingerprint refusal and helper cleanup: 1 passed/0 failed, 4.48s. infraternal-dev, 8 cores, load 55.73/35.88/25.58, CPUWeight=10000; evidence/ssh-bootstrap/run3/config-isolation-real.log. Read-only check preparation 72,711us, check 385,249us. Ten concurrent checks: local 753ms, controller peak 4,908KiB/owned SSH children peak 91,484KiB; 300ms profile 3,001ms, controller peak 4,940KiB/children 91,580KiB. These are transport correctness observations under shared build load, not full-server provisioning or a performance comparison. No installed infraternal agent/remote enrollment claimed.
Author
Owner

Config-isolation fast gate again failed the unchanged repeated_tiny_credit_pauses_preserve_shell_progress test (verify-agent-snapshot.py:48), before the remaining Rust tests ran. fmt/clippy/cargo-deny/both static builds PASS. Evidence: evidence/ssh-bootstrap/run3/config-isolation-fast.log; three targeted SSH regressions and the real rootless sshd oracle PASS separately. No unrelated assertion/deadline changes. Serial unchanged retry running; shared load ranged 24.69 to 55.73 during build/tests.

Config-isolation fast gate again failed the unchanged repeated_tiny_credit_pauses_preserve_shell_progress test (verify-agent-snapshot.py:48), before the remaining Rust tests ran. fmt/clippy/cargo-deny/both static builds PASS. Evidence: evidence/ssh-bootstrap/run3/config-isolation-fast.log; three targeted SSH regressions and the real rootless sshd oracle PASS separately. No unrelated assertion/deadline changes. Serial unchanged retry running; shared load ranged 24.69 to 55.73 during build/tests.
Author
Owner

Completed public SSH configuration isolation with failing-first regression. Targeted isolation/foreground/proxy tests 3 passed, real rootless sshd 1 passed/0 failed (4.48s), including unknown-key refusal and helper cleanup. Transport observations under shared load were posted separately; no full provisioning claim.
Head: d5728942b4. Evidence: evidence/ssh-bootstrap/run3/config-isolation-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.40s]

Completed public SSH configuration isolation with failing-first regression. Targeted isolation/foreground/proxy tests 3 passed, real rootless sshd 1 passed/0 failed (4.48s), including unknown-key refusal and helper cleanup. Transport observations under shared load were posted separately; no full provisioning claim. Head: d5728942b4c95b04d62b82a01e7ca01064b13942. Evidence: evidence/ssh-bootstrap/run3/config-isolation-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.40s]
Author
Owner

Public SSH policy validation: 3 production-parser tests pass (0 failures), covering excluded identity/certificate/provider paths, public trust and original-host tokens, malformed/duplicate/control-byte/oversized inputs, and refusal of an existing flattened quoted public filename. ASan production parser with workspace dependency versions: 4,948,495 executions/181s, max_len=65,537, no findings. Final pure-parser invariant source: 100,000 executions/4s, no findings. Earlier extra command-argument invariants ran 5,021,766 executions/181s with newer isolated dependencies; reported separately, not substituted for the version-matched run. CPUWeight=10000 on infraternal-dev; logs evidence/ssh-bootstrap/run3/public-policy-{tests,fuzz-locked,final-source}.log. Full fast gate running before the validation commit.

Public SSH policy validation: 3 production-parser tests pass (0 failures), covering excluded identity/certificate/provider paths, public trust and original-host tokens, malformed/duplicate/control-byte/oversized inputs, and refusal of an existing flattened quoted public filename. ASan production parser with workspace dependency versions: 4,948,495 executions/181s, max_len=65,537, no findings. Final pure-parser invariant source: 100,000 executions/4s, no findings. Earlier extra command-argument invariants ran 5,021,766 executions/181s with newer isolated dependencies; reported separately, not substituted for the version-matched run. CPUWeight=10000 on infraternal-dev; logs evidence/ssh-bootstrap/run3/public-policy-{tests,fuzz-locked,final-source}.log. Full fast gate running before the validation commit.
Author
Owner

Local fixture prerequisite: direct Docker API access is denied at unix:///var/run/docker.sock; noninteractive sudo -n docker info succeeds, ServerVersion 29.8.2. No credential files were inspected and no daemon configuration changed. Container setup remains future work; this is availability evidence only.

Local fixture prerequisite: direct Docker API access is denied at unix:///var/run/docker.sock; noninteractive sudo -n docker info succeeds, ServerVersion 29.8.2. No credential files were inspected and no daemon configuration changed. Container setup remains future work; this is availability evidence only.
Author
Owner

Dedicated key interoperability check: production SshKeyMaterial::generate().credentials() was accepted by the real /usr/bin/ssh-add through CredentialSession; owned helper directory removed. No private file/argv material, no encoding/library change needed. Evidence: evidence/ssh-bootstrap/run3/server-key-interop-red.log (the pre-change oracle PASS, despite its reserved red filename). Full real-sshd generated Settings-public-key match remains in the ordered-auth integration step.

Dedicated key interoperability check: production SshKeyMaterial::generate().credentials() was accepted by the real /usr/bin/ssh-add through CredentialSession; owned helper directory removed. No private file/argv material, no encoding/library change needed. Evidence: evidence/ssh-bootstrap/run3/server-key-interop-red.log (the pre-change oracle PASS, despite its reserved red filename). Full real-sshd generated Settings-public-key match remains in the ordered-auth integration step.
Author
Owner

Dedicated generated key real-path fixture proof: StoredSshKey initialized once in memory SQLite with AES-GCM fixture vault, cold load refused, Settings public key installed only in the rootless fixture authorized_keys, administrator fixture unlock enabled the exact retained identity, and real sshd accepted CHECK_SCRIPT via that generated key at local and 300ms RTT. Helper directories removed. infraternal-dev, 8 cores, CPUWeight=10000, load37.58/26.12/22.93. Evidence: evidence/ssh-bootstrap/run3/server-key-real-identity.log; disposable probe under .scratch/run3/key-interop. This proves key/public-match interoperability, not production CA-envelope integration, installer/enrollment or terminal readiness. Parser-validation fast gate passed Rust tests/static sizes but caught clippy::assert_is_empty in the new fuzzer; replaced with equivalent assert_ne!, clippy now PASS, full gate rerunning.

Dedicated generated key real-path fixture proof: StoredSshKey initialized once in memory SQLite with AES-GCM fixture vault, cold load refused, Settings public key installed only in the rootless fixture authorized_keys, administrator fixture unlock enabled the exact retained identity, and real sshd accepted CHECK_SCRIPT via that generated key at local and 300ms RTT. Helper directories removed. infraternal-dev, 8 cores, CPUWeight=10000, load37.58/26.12/22.93. Evidence: evidence/ssh-bootstrap/run3/server-key-real-identity.log; disposable probe under .scratch/run3/key-interop. This proves key/public-match interoperability, not production CA-envelope integration, installer/enrollment or terminal readiness. Parser-validation fast gate passed Rust tests/static sizes but caught clippy::assert_is_empty in the new fuzzer; replaced with equivalent assert_ne!, clippy now PASS, full gate rerunning.
Author
Owner

Completed public-policy parser validation: 3 production unit cases pass; ASan 4,948,495 executions/181s, boundary65,537/no findings; final assertion100,000 executions/4s/no findings. Version/dependency details and generated server-key real-sshd proof were posted separately. Full fast gate PASS.
Head: 3e1eaa33e8. Evidence: evidence/ssh-bootstrap/run3/public-policy-validation-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.00s]

Completed public-policy parser validation: 3 production unit cases pass; ASan 4,948,495 executions/181s, boundary65,537/no findings; final assertion100,000 executions/4s/no findings. Version/dependency details and generated server-key real-sshd proof were posted separately. Full fast gate PASS. Head: 3e1eaa33e85620a57725e77c4d8f5ac544040c9d. Evidence: evidence/ssh-bootstrap/run3/public-policy-validation-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.00s]
Author
Owner

D183 ordered-auth module precommit evidence: 4 controlled production-module tests pass/0 fail (0.01s), covering successful-method reporting/lazy later-secret exclusion, immediate stop on trust/network/remote-command failures, typed choose_method only after exhaustion, and failed-scope non-reuse/no mutating replay. Real inherited-agent regression now PASS (1/0,4.56s): network-only attempt refused the authorized ambient helper, explicit memory-only fixture key still authenticates; strict unknown-host-key refusal/cleanup pass. infraternal-dev,8 cores,CPUWeight=10000,load28.03/23.40/23.08; ten explicit-key checks local800ms/controllerpeak4900KiB/ownedchildren95964KiB,300ms2964ms/controller4932KiB/children95960KiB. These are transport observations, not whole-server adds. Logs auth-order-controlled.log/network-green.log. Full fast gate running; browser transient API remains deferred until one physical SSH connection/lifetime proof.

D183 ordered-auth module precommit evidence: 4 controlled production-module tests pass/0 fail (0.01s), covering successful-method reporting/lazy later-secret exclusion, immediate stop on trust/network/remote-command failures, typed choose_method only after exhaustion, and failed-scope non-reuse/no mutating replay. Real inherited-agent regression now PASS (1/0,4.56s): network-only attempt refused the authorized ambient helper, explicit memory-only fixture key still authenticates; strict unknown-host-key refusal/cleanup pass. infraternal-dev,8 cores,CPUWeight=10000,load28.03/23.40/23.08; ten explicit-key checks local800ms/controllerpeak4900KiB/ownedchildren95964KiB,300ms2964ms/controller4932KiB/children95960KiB. These are transport observations, not whole-server adds. Logs auth-order-controlled.log/network-green.log. Full fast gate running; browser transient API remains deferred until one physical SSH connection/lifetime proof.
Author
Owner

Failing-first physical-lifetime regression reproduced against real rootless sshd: two successive commands on the same production SshSession report different SSH_CONNECTION endpoints. 0 passed/1 failed,0.34s; evidence/ssh-bootstrap/run3/single-connection-red.log and .scratch/run3/single_connection.rs. infraternal-dev,8 cores,CPUWeight=10000,load16.82/21.13/22.45. This confirms the recorded one-connection gap before any browser-transient API is wired. Next transport slice will own one foreground nonpersistent master, erase auth helpers after authentication, and refuse reconnection after master loss; the regression also checks cleanup and lost-master behavior.

Failing-first physical-lifetime regression reproduced against real rootless sshd: two successive commands on the same production SshSession report different SSH_CONNECTION endpoints. 0 passed/1 failed,0.34s; evidence/ssh-bootstrap/run3/single-connection-red.log and .scratch/run3/single_connection.rs. infraternal-dev,8 cores,CPUWeight=10000,load16.82/21.13/22.45. This confirms the recorded one-connection gap before any browser-transient API is wired. Next transport slice will own one foreground nonpersistent master, erase auth helpers after authentication, and refuse reconnection after master loss; the regression also checks cleanup and lost-master behavior.
Author
Owner

Completed ordered-auth module/network identity isolation. Controlled production module 4 passed/0 failed; real sshd inherited-agent regression1 passed/0 failed4.56s. Unknown-key refusal/cleanup and explicit-key local/300ms checks pass; transport-only scale/load observations posted separately. Physical one-connection regression remains red and browser-transient API is deliberately not wired yet.
Head: c6b7f13257. Evidence: evidence/ssh-bootstrap/run3/auth-order-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.86s]

Completed ordered-auth module/network identity isolation. Controlled production module 4 passed/0 failed; real sshd inherited-agent regression1 passed/0 failed4.56s. Unknown-key refusal/cleanup and explicit-key local/300ms checks pass; transport-only scale/load observations posted separately. Physical one-connection regression remains red and browser-transient API is deliberately not wired yet. Head: c6b7f13257dcf74f2acc358a6c5a78738e2eb0ec. Evidence: evidence/ssh-bootstrap/run3/auth-order-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.86s]
Author
Owner

Failing-first no-prompt regression reproduced on an owned disposable controlling terminal. Production CredentialSession with an encrypted memory-only synthetic key and absent passphrase printed Enter passphrase for (stdin), then returned Install after its 10s helper deadline instead of Auth. 0 passed/1 failed,10.10s; no passphrase entered and owned helper scope retired. Evidence: evidence/ssh-bootstrap/run3/missing-phrase-red.log; production test draft .scratch/run3/ssh_askpass_red.rs and controlling-terminal harness .scratch/run3/tty_test.py. Fix will force the private askpass path even when the passphrase is absent, yielding an immediate content-free authentication refusal. No browser transient API has been wired yet.

Failing-first no-prompt regression reproduced on an owned disposable controlling terminal. Production CredentialSession with an encrypted memory-only synthetic key and absent passphrase printed Enter passphrase for (stdin), then returned Install after its 10s helper deadline instead of Auth. 0 passed/1 failed,10.10s; no passphrase entered and owned helper scope retired. Evidence: evidence/ssh-bootstrap/run3/missing-phrase-red.log; production test draft .scratch/run3/ssh_askpass_red.rs and controlling-terminal harness .scratch/run3/tty_test.py. Fix will force the private askpass path even when the passphrase is absent, yielding an immediate content-free authentication refusal. No browser transient API has been wired yet.
Author
Owner

Completed six registered ordered-auth cases: lazy successful-method reporting, stop-on-trust/network/command faults, exhaustion, no mutation replay/failed-scope reuse, cancellation and no restart after later command failure.6 passed/0 failed0.02s; fast gate PASS. Missing-passphrase controlling-terminal regression red0/1,10.10s and physical-connection red0/1,0.34s are the next transport fixes, already recorded with evidence.
Head: abfd733260. Evidence: evidence/ssh-bootstrap/run3/auth-order-tests-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [5.83s]

Completed six registered ordered-auth cases: lazy successful-method reporting, stop-on-trust/network/command faults, exhaustion, no mutation replay/failed-scope reuse, cancellation and no restart after later command failure.6 passed/0 failed0.02s; fast gate PASS. Missing-passphrase controlling-terminal regression red0/1,10.10s and physical-connection red0/1,0.34s are the next transport fixes, already recorded with evidence. Head: abfd733260d2e2cfc045fe22cbbb04c076f55056. Evidence: evidence/ssh-bootstrap/run3/auth-order-tests-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [5.83s]
Author
Owner

Missing-passphrase fix real CLI proof: disposable controlling-terminal regression now1 passed/0 failed0.07s, with no operator prompt; before fix0/1,10.10s and visible prompt. Supplied private-pipe password/encrypted-key handoff2 passed/0 failed0.33s; clippy PASS. Evidence: missing-phrase-green.log,askpass-supplied-green.log,missing-phrase-clippy.log. First full gate stopped before Rust at existing latency-relay selftest p50=319.59ms/p99=378.64ms, outside the300ms profile bound (missing-phrase-fast.log); unchanged gate retry running, no jitter/budget relaxation.

Missing-passphrase fix real CLI proof: disposable controlling-terminal regression now1 passed/0 failed0.07s, with no operator prompt; before fix0/1,10.10s and visible prompt. Supplied private-pipe password/encrypted-key handoff2 passed/0 failed0.33s; clippy PASS. Evidence: missing-phrase-green.log,askpass-supplied-green.log,missing-phrase-clippy.log. First full gate stopped before Rust at existing latency-relay selftest p50=319.59ms/p99=378.64ms, outside the300ms profile bound (missing-phrase-fast.log); unchanged gate retry running, no jitter/budget relaxation.
Author
Owner

UI-3 update, head 0bf00d0 (canvas-product f2041aa merged).

Done: wizard is a flow window kind (cx.win.openFlow, next to the focused window, never saved, closes itself when done; closing it from its frame cancels the run); its code is on demand (add-host.on-demand.ts, loaded with onDemand() from index.ts); mounted in product.ts with the real adapter. Also fixed a canvas bug it exposed: a click on the last fully visible window was swallowed by the tap-a-neighbour rule (gestures.ts, 0c52881).

Budgets (production build, measured): critical gzip 281,833/307,200 brotli 233,856/256,000; deferred gzip 50,066/51,200 brotli 43,889/45,056; on demand gzip 16,233/20,480 brotli 14,407/18,432. The on-demand limit was 11/10 KiB, based on an estimate of about 6 KiB for the wizard; it measures about 14 KiB. I raised it to 20/18 KiB by the deferred rule in its own commit (206ec6b, marked PROPOSED) for you to keep, tighten or revert.

Gate: scripts/verify fast was exit 0 on the previous commit (Rust all PASS, tracer 58 tests, three budgets above). On the last commit the Rust test row failed only in vt_credit.rs:22 (credit probe) at machine load average 53; the TS gate, run by hand on the same commit, passes: tsc, 57 bun tests, budgets.

Plain-words pass (#112), before -> after:

  • Status "SSH ready" -> "Reached the host"; "Blocked" -> "Your network rules block this host"; "No answer" -> "This host isn't answering"; "On continue" / "Checked when you continue" -> "We'll check it when you continue"; "Not discovered · checked when you continue" -> "Not in the list. We'll check it when you continue."
  • Lede "Nothing logs in until you continue." -> "We won't sign in to anything until you continue."; "paste an SSH config" -> "paste your SSH config"; empty list "Type user@host above, or paste an SSH config." -> "Type one above, or paste your SSH config."; "No discovered host matches." -> "No host matches."; "Hosts couldn't be listed" -> "Couldn't list hosts. Try again." (no status number).
  • Server text is never a headline: step lines now "Finding a way to sign in", "Checking the host", "Installing on the host", "Waiting for the host to join", "Opening a terminal on the host"; failures "Couldn't reach this host", "This server can't connect to this host", "This host's key needs your OK", "Couldn't sign in to this host", "This host can't run the infraternal agent yet", "Setting up this host didn't finish"; unknown kind -> "Something went wrong while setting up this host. Try again." Raw text only under Details.
  • Stages: "Detect how to sign in" -> "Find a way to sign in"; "Connect and check the system" -> "Connect and check the host"; "Enrol the host" -> "Let the host join"; "Open the first session" -> "Open a terminal on the host".
  • Failure pages: "X didn't answer" -> "X isn't answering"; "Blocked, possibly by the mesh policy" / "mesh access policy ... TCP 22" -> "This server can't connect to X" / "A network access rule may be blocking it"; "has a key this server doesn't trust" -> "X needs your OK"; "isn't supported yet" -> "can't run the infraternal agent yet"; "could not be set up ... rolled back" -> "Setting up X didn't finish ... Changes on the host were undone".
  • Methods: "Add this server's key to the host" / "Then try again. Nothing is typed here." -> "Use this server's key" / "SSH public key in ~/.ssh/authorized_keys. Add it to the host, then try again."; "Paste a private key" -> "Use a key from your computer" / "SSH private key. Sent once for this connection, not stored."; "Type a password" -> "Sign in with a password" / "SSH password authentication. Sent once ..."
  • Buttons: row "Fix" -> "Sign in another way" / "Check the key" / "Install from the host"; "Keep going" -> "Keep installing"; "Cancel install" -> "Stop installing"; confirm text "Closing cancels the install and rolls it back." -> "If you close this now, the install stops and its changes on the host are undone."; toast "2 hosts ready · 1 didn't finish" -> "2 hosts are ready. 1 didn't finish."; root text "passwordless sudo. That alone is not permission." -> "admin commands without a password. That alone doesn't mean you want root."; "3 of 4 ready · 1 need attention" -> "3 of 4 ready, 1 needs attention."
    The mock window prototype now takes its failure wording from the same guideFor. My close confirmation is inline, not the shared confirm: it names no anchor to attach to.
UI-3 update, head 0bf00d0 (canvas-product f2041aa merged). Done: wizard is a `flow` window kind (cx.win.openFlow, next to the focused window, never saved, closes itself when done; closing it from its frame cancels the run); its code is on demand (add-host.on-demand.ts, loaded with onDemand() from index.ts); mounted in product.ts with the real adapter. Also fixed a canvas bug it exposed: a click on the last fully visible window was swallowed by the tap-a-neighbour rule (gestures.ts, 0c52881). Budgets (production build, measured): critical gzip 281,833/307,200 brotli 233,856/256,000; deferred gzip 50,066/51,200 brotli 43,889/45,056; on demand gzip 16,233/20,480 brotli 14,407/18,432. The on-demand limit was 11/10 KiB, based on an estimate of about 6 KiB for the wizard; it measures about 14 KiB. I raised it to 20/18 KiB by the deferred rule in its own commit (206ec6b, marked PROPOSED) for you to keep, tighten or revert. Gate: scripts/verify fast was exit 0 on the previous commit (Rust all PASS, tracer 58 tests, three budgets above). On the last commit the Rust `test` row failed only in vt_credit.rs:22 (credit probe) at machine load average 53; the TS gate, run by hand on the same commit, passes: tsc, 57 bun tests, budgets. Plain-words pass (#112), before -> after: - Status "SSH ready" -> "Reached the host"; "Blocked" -> "Your network rules block this host"; "No answer" -> "This host isn't answering"; "On continue" / "Checked when you continue" -> "We'll check it when you continue"; "Not discovered · checked when you continue" -> "Not in the list. We'll check it when you continue." - Lede "Nothing logs in until you continue." -> "We won't sign in to anything until you continue."; "paste an SSH config" -> "paste your SSH config"; empty list "Type user@host above, or paste an SSH config." -> "Type one above, or paste your SSH config."; "No discovered host matches." -> "No host matches."; "Hosts couldn't be listed" -> "Couldn't list hosts. Try again." (no status number). - Server text is never a headline: step lines now "Finding a way to sign in", "Checking the host", "Installing on the host", "Waiting for the host to join", "Opening a terminal on the host"; failures "Couldn't reach this host", "This server can't connect to this host", "This host's key needs your OK", "Couldn't sign in to this host", "This host can't run the infraternal agent yet", "Setting up this host didn't finish"; unknown kind -> "Something went wrong while setting up this host. Try again." Raw text only under Details. - Stages: "Detect how to sign in" -> "Find a way to sign in"; "Connect and check the system" -> "Connect and check the host"; "Enrol the host" -> "Let the host join"; "Open the first session" -> "Open a terminal on the host". - Failure pages: "X didn't answer" -> "X isn't answering"; "Blocked, possibly by the mesh policy" / "mesh access policy ... TCP 22" -> "This server can't connect to X" / "A network access rule may be blocking it"; "has a key this server doesn't trust" -> "X needs your OK"; "isn't supported yet" -> "can't run the infraternal agent yet"; "could not be set up ... rolled back" -> "Setting up X didn't finish ... Changes on the host were undone". - Methods: "Add this server's key to the host" / "Then try again. Nothing is typed here." -> "Use this server's key" / "SSH public key in ~/.ssh/authorized_keys. Add it to the host, then try again."; "Paste a private key" -> "Use a key from your computer" / "SSH private key. Sent once for this connection, not stored."; "Type a password" -> "Sign in with a password" / "SSH password authentication. Sent once ..." - Buttons: row "Fix" -> "Sign in another way" / "Check the key" / "Install from the host"; "Keep going" -> "Keep installing"; "Cancel install" -> "Stop installing"; confirm text "Closing cancels the install and rolls it back." -> "If you close this now, the install stops and its changes on the host are undone."; toast "2 hosts ready · 1 didn't finish" -> "2 hosts are ready. 1 didn't finish."; root text "passwordless sudo. That alone is not permission." -> "admin commands without a password. That alone doesn't mean you want root."; "3 of 4 ready · 1 need attention" -> "3 of 4 ready, 1 needs attention." The mock window prototype now takes its failure wording from the same guideFor. My close confirmation is inline, not the shared confirm: it names no anchor to attach to.
Author
Owner

Physical-connection prototype: real rootless sshd regression changed from 0/1 in 0.34 s (different SSH_CONNECTION endpoints) to 1/0 in 0.30 s. Two commands reuse the same authenticated connection; signing/prompt helpers are removed before commands; closing the master refuses another login and drop removes the scope. Evidence: evidence/ssh-bootstrap/run3/master-candidate-real.log; infraternal-dev, 8 cores, CPUWeight=10000, load 32.18/28.73/30.90. Prototype remains scratch pending production tests/gate.
Missing-passphrase full gate retry passed fmt/clippy/deny/static but failed the pre-existing repeated_tiny_credit_pauses_preserve_shell_progress oracle (scripts/verify-agent-snapshot.py:48); unchanged serial retry is running, with no assertion/budget change. Evidence: missing-phrase-retry-fast.log; static sizes x86_64=16350128, aarch64=13758336 bytes.

Physical-connection prototype: real rootless sshd regression changed from 0/1 in 0.34 s (different SSH_CONNECTION endpoints) to 1/0 in 0.30 s. Two commands reuse the same authenticated connection; signing/prompt helpers are removed before commands; closing the master refuses another login and drop removes the scope. Evidence: evidence/ssh-bootstrap/run3/master-candidate-real.log; infraternal-dev, 8 cores, CPUWeight=10000, load 32.18/28.73/30.90. Prototype remains scratch pending production tests/gate. Missing-passphrase full gate retry passed fmt/clippy/deny/static but failed the pre-existing repeated_tiny_credit_pauses_preserve_shell_progress oracle (scripts/verify-agent-snapshot.py:48); unchanged serial retry is running, with no assertion/budget change. Evidence: missing-phrase-retry-fast.log; static sizes x86_64=16350128, aarch64=13758336 bytes.
Author
Owner

Completed missing-passphrase no-prompt fix and controlling-PTY regression. Red 0/1 at 10.10 s; green 1/0 at 0.07 s without a prompt; supplied credential pipes 2/0 at 0.33 s. Static x86_64=16350128, aarch64=13758336 bytes. Full unchanged serial retry green; no limits changed.
Head: 04be134011. Evidence: evidence/ssh-bootstrap/run3/missing-phrase-final-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.52s]

Completed missing-passphrase no-prompt fix and controlling-PTY regression. Red 0/1 at 10.10 s; green 1/0 at 0.07 s without a prompt; supplied credential pipes 2/0 at 0.33 s. Static x86_64=16350128, aarch64=13758336 bytes. Full unchanged serial retry green; no limits changed. Head: 04be134011e186a89dc4a56aee56a48fc1debd2a. Evidence: evidence/ssh-bootstrap/run3/missing-phrase-final-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.52s]
Author
Owner

Production-path connection prototype tests: one_physical_connection_erases_helpers_and_refuses_reconnect PASS1/0,0.42s; actual_ssh_authentication_check_and_strict_host_key_rejection PASS1/0,4.63s. Network-only rejects ambient agent; supplied key works; unknown host key fails with observed fingerprints; scopes removed. Public-policy/foreground/proxy/helper tests5/0. Machine infraternal-dev,8cores,CPUWeight10000,load18.59/25.53/28.03. Ten concurrent read-only checks: local369ms,300ms profile982ms; controller peak5020/5032KiB, owned SSH children peak92896/92800KiB. These measure ten commands on one connection, NOT ten complete server provisioning runs or comparative performance. Logs evidence/ssh-bootstrap/run3/master-{production-real,authentication-real,policy-final}.log. New master module gated separately before activation to preserve atomic module history. No new engine/dependency, no host trust changes.

Production-path connection prototype tests: one_physical_connection_erases_helpers_and_refuses_reconnect PASS1/0,0.42s; actual_ssh_authentication_check_and_strict_host_key_rejection PASS1/0,4.63s. Network-only rejects ambient agent; supplied key works; unknown host key fails with observed fingerprints; scopes removed. Public-policy/foreground/proxy/helper tests5/0. Machine infraternal-dev,8cores,CPUWeight10000,load18.59/25.53/28.03. Ten concurrent read-only checks: local369ms,300ms profile982ms; controller peak5020/5032KiB, owned SSH children peak92896/92800KiB. These measure ten commands on one connection, NOT ten complete server provisioning runs or comparative performance. Logs evidence/ssh-bootstrap/run3/master-{production-real,authentication-real,policy-final}.log. New master module gated separately before activation to preserve atomic module history. No new engine/dependency, no host trust changes.
Author
Owner

Local container infrastructure proof: disposable Debian13 image (base sha256:a29215f6a35e51e22adffa17f89e9d2ef06214e64a2bad10d765c46aea49f11f) built with ten normal users uid1101–1110 and package-created SSH host keys suppressed. No host directory mounts. Default read-only cgroup startup exited255; private cgroup namespace plus a container-only remount allowed actual systemd257.13 startup in768ms. Nonroot fixture1 systemctl --user show --property=Version --value returned257.13-1~deb13u1 (container-user-systemd.log). Own trial container stopped/removed; no infraternal binary installed, no SSH listener or remote enrollment proof yet. Image retained for the complete local fixture and will be removed afterwards. Evidence under evidence/ssh-bootstrap/run3/container-*.log.

Local container infrastructure proof: disposable Debian13 image (base sha256:a29215f6a35e51e22adffa17f89e9d2ef06214e64a2bad10d765c46aea49f11f) built with ten normal users uid1101–1110 and package-created SSH host keys suppressed. No host directory mounts. Default read-only cgroup startup exited255; private cgroup namespace plus a container-only remount allowed actual systemd257.13 startup in768ms. Nonroot fixture1 systemctl --user show --property=Version --value returned257.13-1~deb13u1 (container-user-systemd.log). Own trial container stopped/removed; no infraternal binary installed, no SSH listener or remote enrollment proof yet. Image retained for the complete local fixture and will be removed afterwards. Evidence under evidence/ssh-bootstrap/run3/container-*.log.
Author
Owner

Owned-master module gate: fmt/clippy/deny/static PASS; test FAIL101 in existing unaffordable_repaints_park_until_sufficient_credit (vt_credit.rs:22, t1-gate-approximate-1). Module is not activated yet; transport/credentials/runtime remain unchanged from green04be134. Static sizes unchanged16350128/13758336 bytes. Raw master-module-fast.log. Unchanged serial full gate retry running; no assertions, deadlines or size limits changed. Local container infrastructure trial was stopped/removed. No production host contacted.

Owned-master module gate: fmt/clippy/deny/static PASS; test FAIL101 in existing unaffordable_repaints_park_until_sufficient_credit (vt_credit.rs:22, t1-gate-approximate-1). Module is not activated yet; transport/credentials/runtime remain unchanged from green04be134. Static sizes unchanged16350128/13758336 bytes. Raw master-module-fast.log. Unchanged serial full gate retry running; no assertions, deadlines or size limits changed. Local container infrastructure trial was stopped/removed. No production host contacted.
Author
Owner

Completed owned foreground-master module separately from transport activation. No new dependency or persistent/background master; unreaped leader retained until group retirement, bounded zeroizing diagnostics, private socket checks and no healthy polling. Real prototype reuse/loss/helper-erasure PASS1/0 at0.42s. Static sizes unchanged16350128/13758336 bytes. Unchanged full serial gate retry green.
Head: 93d8d51ff0. Evidence: evidence/ssh-bootstrap/run3/master-module-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.23s]

Completed owned foreground-master module separately from transport activation. No new dependency or persistent/background master; unreaped leader retained until group retirement, bounded zeroizing diagnostics, private socket checks and no healthy polling. Real prototype reuse/loss/helper-erasure PASS1/0 at0.42s. Static sizes unchanged16350128/13758336 bytes. Unchanged full serial gate retry green. Head: 93d8d51ff0c778eb1827d96a376ca22206c3462a. Evidence: evidence/ssh-bootstrap/run3/master-module-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.23s]
Author
Owner

Additive UI contract proposal before implementation (D183; no wire-frame changes): retry may optionally contain auth_once:{key?,passphrase?,password?}, only on a failed target in this socket's batch, with the existing32KiB total-message bound. These browser-unwrapped/typed bytes are never persisted, logged, serialized in events or reused by another attempt. Material is consumed lazily in network/server-key/user-key/password order, erased when unused, and expires while queued. Replay and ordinary retry contain no plaintext material. Successful check and later phase events add public authentication metadata; host_id becomes available after invitation binding.
First-contact confirmation will echo a displayed SHA256 fingerprint for one failed target, preserving its exact effective endpoint/public config. Existing known_hosts entries and previously confirmed pins always prevent approval of a changed/revoked key. Scan output remains untrusted observation until this explicit authenticated confirmation; no automatic TOFU, no system-known_hosts rewrite and no production o1 confirmation in this job. Public pins record approving owner/time. Tests will cover revoked sessions, wrong/expired fingerprint, changed existing trust, cross-target/socket scope and connection loss. #78's join JSON remains unchanged; custody/startup hook uses its CA-style administrator envelope boundary, with no ordinary-session automatic unlock.

Additive UI contract proposal before implementation (D183; no wire-frame changes): retry may optionally contain auth_once:{key?,passphrase?,password?}, only on a failed target in this socket's batch, with the existing32KiB total-message bound. These browser-unwrapped/typed bytes are never persisted, logged, serialized in events or reused by another attempt. Material is consumed lazily in network/server-key/user-key/password order, erased when unused, and expires while queued. Replay and ordinary retry contain no plaintext material. Successful check and later phase events add public authentication metadata; host_id becomes available after invitation binding. First-contact confirmation will echo a displayed SHA256 fingerprint for one failed target, preserving its exact effective endpoint/public config. Existing known_hosts entries and previously confirmed pins always prevent approval of a changed/revoked key. Scan output remains untrusted observation until this explicit authenticated confirmation; no automatic TOFU, no system-known_hosts rewrite and no production o1 confirmation in this job. Public pins record approving owner/time. Tests will cover revoked sessions, wrong/expired fingerprint, changed existing trust, cross-target/socket scope and connection loss. #78's join JSON remains unchanged; custody/startup hook uses its CA-style administrator envelope boundary, with no ordinary-session automatic unlock.
Author
Owner

Completed single-connection transport activation and failing-first real-sshd regression. Helpers erased before commands, no implicit TCP fallback after master loss, strict trust retained. Reuse/loss PASS1/0 at0.42s; authentication/unknown-trust PASS1/0 at4.63s; policy/helper tests5/0. Static x86_64=16389232 (+39104), aarch64=13789120 (+30784) bytes versus04be134, within unchanged budgets. Full serial fast green.
Head: c025cc180b. Evidence: evidence/ssh-bootstrap/run3/master-activation-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.93s]

Completed single-connection transport activation and failing-first real-sshd regression. Helpers erased before commands, no implicit TCP fallback after master loss, strict trust retained. Reuse/loss PASS1/0 at0.42s; authentication/unknown-trust PASS1/0 at4.63s; policy/helper tests5/0. Static x86_64=16389232 (+39104), aarch64=13789120 (+30784) bytes versus04be134, within unchanged budgets. Full serial fast green. Head: c025cc180bf0e37f812ff889dfabadadee11eca9. Evidence: evidence/ssh-bootstrap/run3/master-activation-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.93s]
Author
Owner

Owned-connection before/after release comparison:93d8d51 transport versusc025cc1, same system OpenSSH engine/fixture/key,25 alternating pairs per profile; no own compilation overlapped measurement. Machine infraternal-dev/8cores/CPUWeight10000/startload15.58/29.25/31.73. Local first-command p50/p99:before150.183/267.467ms,after158.908/247.499ms; two commands271.879/426.365 ->176.498/271.557ms.300ms RTT first2583.833/2670.262 ->2611.797/2680.577ms; two commands5115.436/5237.205 ->3273.698/3340.256ms. First-command median increases8.725ms(local)/27.964ms(300ms), while two-command median falls95.381ms/1841.738ms (35.1%/36.0%). Startup phase boundaries move authentication into open, so preparation alone is not comparable. D183 requires one connection and erasure of one-use signing/prompt helpers; reuse saves later authenticated command round trips. p99 is maximum of25 samples, not a reliable tail estimate; functional rootless-sshd fixture, not o1 or full provisioning. Scope cleanup assertion passed. Raw evidence/ssh-bootstrap/run3/connection-perf.log; static increment39104/30784 bytes already recorded.

Owned-connection before/after release comparison:93d8d51 transport versusc025cc1, same system OpenSSH engine/fixture/key,25 alternating pairs per profile; no own compilation overlapped measurement. Machine infraternal-dev/8cores/CPUWeight10000/startload15.58/29.25/31.73. Local first-command p50/p99:before150.183/267.467ms,after158.908/247.499ms; two commands271.879/426.365 ->176.498/271.557ms.300ms RTT first2583.833/2670.262 ->2611.797/2680.577ms; two commands5115.436/5237.205 ->3273.698/3340.256ms. First-command median increases8.725ms(local)/27.964ms(300ms), while two-command median falls95.381ms/1841.738ms (35.1%/36.0%). Startup phase boundaries move authentication into open, so preparation alone is not comparable. D183 requires one connection and erasure of one-use signing/prompt helpers; reuse saves later authenticated command round trips. p99 is maximum of25 samples, not a reliable tail estimate; functional rootless-sshd fixture, not o1 or full provisioning. Scope cleanup assertion passed. Raw evidence/ssh-bootstrap/run3/connection-perf.log; static increment39104/30784 bytes already recorded.
Author
Owner

Shared-key runtime source gate: fmt/clippy/deny/static PASS; existing Snapshot-credit oracle failed at scripts/verify-agent-snapshot.py:48 after two successful12MiB catches. Source changes are only server startup/default auth; infraternal-agent/shim/probe source unchanged. Raw key-runtime-fast.log; x86_64=16433968 and aarch64=13826160 bytes, both below unchanged maxima. The preflight clippy and pending-runtime targeted test1/0 passed. Unchanged serial full retry running; no gate assertions, deadlines or budgets altered. Configured-startup/Settings cold-lock shipping-path test prepared for a separate test slice after source gate.

Shared-key runtime source gate: fmt/clippy/deny/static PASS; existing Snapshot-credit oracle failed at scripts/verify-agent-snapshot.py:48 after two successful12MiB catches. Source changes are only server startup/default auth; infraternal-agent/shim/probe source unchanged. Raw key-runtime-fast.log; x86_64=16433968 and aarch64=13826160 bytes, both below unchanged maxima. The preflight clippy and pending-runtime targeted test1/0 passed. Unchanged serial full retry running; no gate assertions, deadlines or budgets altered. Configured-startup/Settings cold-lock shipping-path test prepared for a separate test slice after source gate.
Author
Owner

Completed configured first-start dedicated-key custody hook, cold-load/Settings source sharing and default ordered authentication. Ordinary owner login does not unlock; live owner capability is rechecked before key export; vault selectors no longer block earlier methods. #78 administrator-envelope adapter remains absent fromdev; configured custody interface is the explicit D168 fallback. Clippy/pending-runtime1/0 and unchanged serial fast retry green. Static16433968/13826160 bytes.
Head: 6d20521ed4. Evidence: evidence/ssh-bootstrap/run3/key-runtime-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

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

Completed configured first-start dedicated-key custody hook, cold-load/Settings source sharing and default ordered authentication. Ordinary owner login does not unlock; live owner capability is rechecked before key export; vault selectors no longer block earlier methods. #78 administrator-envelope adapter remains absent fromdev; configured custody interface is the explicit D168 fallback. Clippy/pending-runtime1/0 and unchanged serial fast retry green. Static16433968/13826160 bytes. Head: 6d20521ed49630efb1404513c523a66c8828d2a0. Evidence: evidence/ssh-bootstrap/run3/key-runtime-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.63s]
Author
Owner

Configured custody/startup and fresh key-export tests are committed. Six selected real-auth/key tests passed in 4.51s; ordinary owner login stays cold-locked, restart retains the public identity, and revoked/locked/expired/deleted sessions cannot export. Static sizes remain x86_64 16433968 / aarch64 13826160 bytes. Production administrator wrapping/unlock still requires the #78 adapter; no plaintext fallback was added.
Head: 5b2cdfe88b. Evidence: evidence/ssh-bootstrap/run3/key-tests-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.75s]

Configured custody/startup and fresh key-export tests are committed. Six selected real-auth/key tests passed in 4.51s; ordinary owner login stays cold-locked, restart retains the public identity, and revoked/locked/expired/deleted sessions cannot export. Static sizes remain x86_64 16433968 / aarch64 13826160 bytes. Production administrator wrapping/unlock still requires the #78 adapter; no plaintext fallback was added. Head: 5b2cdfe88b6d24cc3f1f9672687aff78ef704736. Evidence: evidence/ssh-bootstrap/run3/key-tests-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.75s]
Author
Owner

Public provisioning events now retain the successful authentication method and trusted invitation host UUID, scoped to the attempt. A deterministic regression passes (1/1): unsupported compatibility preserves authenticated method evidence; a failed retry has no stale method/host metadata; old replay stays immutable. Workspace clippy passes. Evidence: event-metadata-tests.log / event-metadata-clippy.log under evidence/ssh-bootstrap/run3/.

Measured release Rust Event layout: before 160 bytes (93d8d51), after 176 bytes. Increment is 16 bytes × 1024 retained events = 16384 bytes per maximum history, × 16 maximum batches = 262144 bytes. This excludes the separate bounded current metadata map (at most 100 target rows per batch) and existing string/vector allocations. No credentials/providers enter history. Evidence: event-layout.log / event-layout-build.log. Full fast gate is running; this is not complete provisioning or whole-server memory evidence.

Public provisioning events now retain the successful authentication method and trusted invitation host UUID, scoped to the attempt. A deterministic regression passes (1/1): unsupported compatibility preserves authenticated method evidence; a failed retry has no stale method/host metadata; old replay stays immutable. Workspace clippy passes. Evidence: event-metadata-tests.log / event-metadata-clippy.log under evidence/ssh-bootstrap/run3/. Measured release Rust Event layout: before 160 bytes (93d8d51), after 176 bytes. Increment is 16 bytes × 1024 retained events = 16384 bytes per maximum history, × 16 maximum batches = 262144 bytes. This excludes the separate bounded current metadata map (at most 100 target rows per batch) and existing string/vector allocations. No credentials/providers enter history. Evidence: event-layout.log / event-layout-build.log. Full fast gate is running; this is not complete provisioning or whole-server memory evidence.
Author
Owner

The first event-metadata full fast gate failed in the unchanged standalone VT credit test: crates/infraternal/tests/vt_credit.rs:22, marker t1-gate-approximate-1 (0/1, 8.38s). The event regression passed separately (1/1), workspace clippy and both static builds passed. Retry began with unchanged code, assertions and thresholds at load 31.87 / 28.56 / 27.40 on infraternal-dev (8 cores). No causal claim or test-budget change. Evidence: evidence/ssh-bootstrap/run3/event-metadata-fast.log; retry: event-metadata-retry-fast.log. No source commit until a full green gate.

The first event-metadata full fast gate failed in the unchanged standalone VT credit test: crates/infraternal/tests/vt_credit.rs:22, marker t1-gate-approximate-1 (0/1, 8.38s). The event regression passed separately (1/1), workspace clippy and both static builds passed. Retry began with unchanged code, assertions and thresholds at load 31.87 / 28.56 / 27.40 on infraternal-dev (8 cores). No causal claim or test-budget change. Evidence: evidence/ssh-bootstrap/run3/event-metadata-fast.log; retry: event-metadata-retry-fast.log. No source commit until a full green gate.
Author
Owner

Public per-attempt authentication and trusted invitation UUID fields are committed. The unchanged full-gate retry passed, including the VT credit test that failed at t1-gate-approximate-1 in the first run. Static sizes: x86_64 16440880 / aarch64 13831664 bytes. Event layout grows 160 to 176 bytes (16 KiB per maximum history; 256 KiB across 16 batches), excluding the bounded current target map. Separate replay/reset regression passed 1/1; its formal test commit follows.
Head: 7e7f69e8d7. Evidence: evidence/ssh-bootstrap/run3/event-metadata-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [5.18s]

Public per-attempt authentication and trusted invitation UUID fields are committed. The unchanged full-gate retry passed, including the VT credit test that failed at t1-gate-approximate-1 in the first run. Static sizes: x86_64 16440880 / aarch64 13831664 bytes. Event layout grows 160 to 176 bytes (16 KiB per maximum history; 256 KiB across 16 batches), excluding the bounded current target map. Separate replay/reset regression passed 1/1; its formal test commit follows. Head: 7e7f69e8d7cef3f5451866d92ed91b4fd70f2c3c. Evidence: evidence/ssh-bootstrap/run3/event-metadata-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [5.18s]
Author
Owner

The allowed two-process local #78 component fixture passed 1/1 in 1.61s, using snapshot remote-agents 1f6e39b8cb and exclusive port 4787. It performed real pinned HTTPS invitation redemption, mutual-TLS registration, browser-to-PTY I/O and foreign-owner refusal. A fixture-only native host.facts action returned authenticated Linux/x86_64, uid 1001, 8 CPUs, version 0.1.0; uid matched the executing user. Fixture-only enroll-only shaping preserves contracts/remote.md's invitation JSON.

Printed join/terminal/facts boundary: 885636us (includes the facts query after first terminal open); canary keystroke round trip: 9047us, output_bytes=352, lost=0, duplicated=0. Machine infraternal-dev, 8 cores, CPUWeight10000; load 32.01 / 30.12 / 28.76; debug build; not a performance budget claim. Exact OpenSSL 3.6.3 GNU archives were reused from this job's existing target after both lockfiles matched openssl-src 300.6.1+3.6.3 / openssl-sys 0.9.117.

Evidence: evidence/ssh-bootstrap/run3/remote-component-proof.log / remote-fixture-build-cached-ssl.log. This validates components only: full SSH installation/service activation/removal and ten-target server measurements remain. No o1 access, no container presently running, and no production administrator custody adapter was added. #78 remains absent from dev.

The allowed two-process local #78 component fixture passed 1/1 in 1.61s, using snapshot remote-agents 1f6e39b8cb11c3af39b0173e6b2c69f059fa9dc9 and exclusive port 4787. It performed real pinned HTTPS invitation redemption, mutual-TLS registration, browser-to-PTY I/O and foreign-owner refusal. A fixture-only native host.facts action returned authenticated Linux/x86_64, uid 1001, 8 CPUs, version 0.1.0; uid matched the executing user. Fixture-only enroll-only shaping preserves contracts/remote.md's invitation JSON. Printed join/terminal/facts boundary: 885636us (includes the facts query after first terminal open); canary keystroke round trip: 9047us, output_bytes=352, lost=0, duplicated=0. Machine infraternal-dev, 8 cores, CPUWeight10000; load 32.01 / 30.12 / 28.76; debug build; not a performance budget claim. Exact OpenSSL 3.6.3 GNU archives were reused from this job's existing target after both lockfiles matched openssl-src 300.6.1+3.6.3 / openssl-sys 0.9.117. Evidence: evidence/ssh-bootstrap/run3/remote-component-proof.log / remote-fixture-build-cached-ssl.log. This validates components only: full SSH installation/service activation/removal and ten-target server measurements remain. No o1 access, no container presently running, and no production administrator custody adapter was added. #78 remains absent from dev.
Author
Owner

The separate formal event-test commit is pending an unchanged full-gate retry. Its first gate failed in the existing VT reconnect harness: vt_reconnect.rs:20, 0/1 in 45.89s. The specific harness assertion is verify-vt-reconnect.py:43, "emitter did not finish detached output", while running the less case after the wrapped cases and less replay checks passed. Both static builds, clippy and cargo-deny passed. No thresholds or assertions changed. Evidence: evidence/ssh-bootstrap/run3/event-tests-fast.log and target/review-vt2-fixes/reconnect.stderr.log. Retry: event-tests-retry-fast.log.

The separate formal event-test commit is pending an unchanged full-gate retry. Its first gate failed in the existing VT reconnect harness: vt_reconnect.rs:20, 0/1 in 45.89s. The specific harness assertion is verify-vt-reconnect.py:43, "emitter did not finish detached output", while running the less case after the wrapped cases and less replay checks passed. Both static builds, clippy and cargo-deny passed. No thresholds or assertions changed. Evidence: evidence/ssh-bootstrap/run3/event-tests-fast.log and target/review-vt2-fixes/reconnect.stderr.log. Retry: event-tests-retry-fast.log.
Author
Owner

The unchanged formal event-test gate retry again failed in the existing VT reconnect harness (0/1, 36.87s), this time at verify-vt-reconnect.py:115: "legacy Snapshot rejection must leave daemon live". It is a different assertion from the preceding detached-emitter deadline. No source or thresholds changed; all other gate columns passed. A further unchanged full gate is running (event-tests-final-fast.log). Machine load before that run: 37.29 / 39.36 / 35.47 on 8 cores; evidence event-tests-retry-fast.log and target/review-vt2-fixes/reconnect.stderr.log. This does not implicate or exonerate the SSH feature; no causal claim is made. The formal test remains uncommitted until a full green gate.

The unchanged formal event-test gate retry again failed in the existing VT reconnect harness (0/1, 36.87s), this time at verify-vt-reconnect.py:115: "legacy Snapshot rejection must leave daemon live". It is a different assertion from the preceding detached-emitter deadline. No source or thresholds changed; all other gate columns passed. A further unchanged full gate is running (event-tests-final-fast.log). Machine load before that run: 37.29 / 39.36 / 35.47 on 8 cores; evidence event-tests-retry-fast.log and target/review-vt2-fixes/reconnect.stderr.log. This does not implicate or exonerate the SSH feature; no causal claim is made. The formal test remains uncommitted until a full green gate.
Author
Owner

Additive D183 wire refinement before implementation: Start may supply per-target one-use material as auth_once:[{"target":"host-1","auth":{"key":"","passphrase":"","password":""}}]. Retry retains auth_once:{key?,passphrase?,password?}. Start validates every target/material pair, membership and uniqueness before scheduling any connection; absent material preserves the existing request.

Each input is transferred only to its target's attempt future, never Target/HostState/history/SQLite/logs or another connection. Existing 32 KiB request/frame bounds, lazy network/server-key/user-key/password order, private pipes, helper retirement and 60-second queued-input expiry apply. Earlier success erases unused material. This lets an already-unwrapped browser key participate in the first attempt and avoids an extra network/server-key retry. Per-target inputs preserve the one-connection boundary; the server does not retain a shared plaintext key for a batch. No new engine, storage policy or interactive prompt is selected.

Additive D183 wire refinement before implementation: Start may supply per-target one-use material as auth_once:[{"target":"host-1","auth":{"key":"<browser-unwrapped PEM>","passphrase":"<optional once>","password":"<optional once>"}}]. Retry retains auth_once:{key?,passphrase?,password?}. Start validates every target/material pair, membership and uniqueness before scheduling any connection; absent material preserves the existing request. Each input is transferred only to its target's attempt future, never Target/HostState/history/SQLite/logs or another connection. Existing 32 KiB request/frame bounds, lazy network/server-key/user-key/password order, private pipes, helper retirement and 60-second queued-input expiry apply. Earlier success erases unused material. This lets an already-unwrapped browser key participate in the first attempt and avoids an extra network/server-key retry. Per-target inputs preserve the one-connection boundary; the server does not retain a shared plaintext key for a batch. No new engine, storage policy or interactive prompt is selected.
Author
Owner

With this job's other build finished, the next unchanged formal-test fast gate failed in another existing terminal test: repeated_tiny_credit_pauses_preserve_shell_progress, agent_review.rs:13 (suite 5 passed / 1 failed, 104.42s). All other gate columns passed. No SSH source/test or terminal assertions/thresholds changed. Machine load observed afterwards: 78.95 / 71.01 / 61.48 on 8 cores. Evidence: evidence/ssh-bootstrap/run3/event-tests-idle-fast.log. The SSH source remains at green-gated 7e7f69e; the separate event regression remains uncommitted. Work continues on isolated local installation fixtures; a fresh green full gate is still required before the pending test commit/final completion.

With this job's other build finished, the next unchanged formal-test fast gate failed in another existing terminal test: repeated_tiny_credit_pauses_preserve_shell_progress, agent_review.rs:13 (suite 5 passed / 1 failed, 104.42s). All other gate columns passed. No SSH source/test or terminal assertions/thresholds changed. Machine load observed afterwards: 78.95 / 71.01 / 61.48 on 8 cores. Evidence: evidence/ssh-bootstrap/run3/event-tests-idle-fast.log. The SSH source remains at green-gated 7e7f69e; the separate event regression remains uncommitted. Work continues on isolated local installation fixtures; a fresh green full gate is still required before the pending test commit/final completion.
Author
Owner

The real two-process local fixture now reaches the production bootstrap WebSocket, authenticates with the dedicated server key and receives a #78-bound invitation. The first actual installation attempt fails at 2291 ms after entering install at 406 ms; test 0/1 in 2.65 s. Evidence: evidence/ssh-bootstrap/run3/provision-cli-red.log. Inspection finds the installer invokes agent join URL --state STATE, while #78's CLI requires agent --data DATA join URL; a join that remains foreground would also prevent unit activation. Testing the compatible enrollment-only command and explicit daemon run in the disposable snapshot before changing production source. This is a failing real-engine regression, not an end-to-end success claim.

The real two-process local fixture now reaches the production bootstrap WebSocket, authenticates with the dedicated server key and receives a #78-bound invitation. The first actual installation attempt fails at 2291 ms after entering install at 406 ms; test 0/1 in 2.65 s. Evidence: evidence/ssh-bootstrap/run3/provision-cli-red.log. Inspection finds the installer invokes `agent join URL --state STATE`, while #78's CLI requires `agent --data DATA join URL`; a join that remains foreground would also prevent unit activation. Testing the compatible enrollment-only command and explicit daemon `run` in the disposable snapshot before changing production source. This is a failing real-engine regression, not an end-to-end success claim.
Author
Owner

Real rootless local target passed through the authenticated production bootstrap WebSocket plus source-identical #78 invitation/join/mTLS registry/browser terminal fixture (remote snapshot 1f6e39b). Target execution uid 1101, dedicated server-key authentication, container user systemd service. Cumulative per-host events: check start 0 ms, install 366 ms, authenticated facts 2557 ms, terminal connect 2593 ms, done 2717 ms; test 1/1 in 3.20 s. Evidence: evidence/ssh-bootstrap/run3/provision-cli-green.log. The required compatible enrollment-only CLI flag and native host.facts handler are fixture additions pending #78 integration; this is not production dev integration. Normal uid 1101 then disabled/stopped the marked service and removed its unit, launcher and private installation: installation_absent/unit_absent/launcher_absent all true (provision-removal.log). Next: ten disposable user targets and whole fixture server CPU/RSS.

Real rootless local target passed through the authenticated production bootstrap WebSocket plus source-identical #78 invitation/join/mTLS registry/browser terminal fixture (remote snapshot 1f6e39b). Target execution uid 1101, dedicated server-key authentication, container user systemd service. Cumulative per-host events: check start 0 ms, install 366 ms, authenticated facts 2557 ms, terminal connect 2593 ms, done 2717 ms; test 1/1 in 3.20 s. Evidence: evidence/ssh-bootstrap/run3/provision-cli-green.log. The required compatible enrollment-only CLI flag and native host.facts handler are fixture additions pending #78 integration; this is not production dev integration. Normal uid 1101 then disabled/stopped the marked service and removed its unit, launcher and private installation: installation_absent/unit_absent/launcher_absent all true (provision-removal.log). Next: ten disposable user targets and whole fixture server CPU/RSS.
Author
Owner

After the local rootless installation/enrollment/terminal/removal passed, inspected only the server account's effective public OpenSSH endpoint and known_hosts trust for o1. Effective endpoint o1:22, user kayg; existing_public_trust=false. Evidence: evidence/ssh-bootstrap/run3/o1-public-trust.log. Per the brief, stopped the o1 path before any connection or installation. No SSH host key was accepted, changed or written. Owner-provided verified trust for o1 is needed before that host can be provisioned. Continuing the remaining API, fixture scale, contracts and gates locally.

After the local rootless installation/enrollment/terminal/removal passed, inspected only the server account's effective public OpenSSH endpoint and known_hosts trust for o1. Effective endpoint o1:22, user kayg; existing_public_trust=false. Evidence: evidence/ssh-bootstrap/run3/o1-public-trust.log. Per the brief, stopped the o1 path before any connection or installation. No SSH host key was accepted, changed or written. Owner-provided verified trust for o1 is needed before that host can be provisioned. Continuing the remaining API, fixture scale, contracts and gates locally.
Author
Owner

Ten actual normal-user targets (uids 1101–1110) passed production bootstrap WebSocket → real SSH/rootless user unit → pinned #78 enrollment/mTLS → native authenticated facts → browser PTY → done. Same two-process snapshot fixture, infraternal-dev 8 cores, CPUWeight10000, default eight active attempts; the two queued hosts include admission in check timing. Debug controller/test process, 10 ms RSS sampling, excludes external SSH/target children; other work/full gate on the shared machine remained active, so these are diagnostics, not release budget acceptance. Batch 9153 ms; peak server RSS 46740 KiB (45.64 MiB total / 4.56 MiB per target as aggregate arithmetic, not marginal memory); server CPU 1491 ticks at 100 Hz = 14.91 s. Load 10.99/9.43/15.56. Evidence: evidence/ssh-bootstrap/run3/provision-ten.log and provision-ten-times.md. All ten exact marked installations, units and launchers removed by their normal uid before fixture teardown; test 1/1 in 14.25 s.

Target Check/auth complete Install + enrol Facts wait First terminal + commit Done
local-1 522 ms 5207 ms 19 ms 206 ms 5954 ms
local-2 451 ms 4772 ms 9 ms 330 ms 5562 ms
local-3 6065 ms 2877 ms 43 ms 146 ms 9131 ms
local-4 521 ms 5138 ms 6 ms 238 ms 5903 ms
local-5 651 ms 4975 ms 2 ms 269 ms 5897 ms
local-6 428 ms 4839 ms 77 ms 334 ms 5678 ms
local-7 5967 ms 3025 ms 2 ms 133 ms 9127 ms
local-8 453 ms 4911 ms 39 ms 267 ms 5670 ms
local-9 487 ms 4856 ms 54 ms 233 ms 5630 ms
local-10 443 ms 5772 ms 15 ms 171 ms 6401 ms

PROVISION_SCALE targets=10 concurrency_limit=8 elapsed_ms=9153 peak_server_rss_kib=46740 server_cpu_ticks=1491 clk_tck=100 load=10.99 9.43 15.56 17/1767 694110

Ten actual normal-user targets (uids 1101–1110) passed production bootstrap WebSocket → real SSH/rootless user unit → pinned #78 enrollment/mTLS → native authenticated facts → browser PTY → done. Same two-process snapshot fixture, infraternal-dev 8 cores, CPUWeight10000, default eight active attempts; the two queued hosts include admission in check timing. Debug controller/test process, 10 ms RSS sampling, excludes external SSH/target children; other work/full gate on the shared machine remained active, so these are diagnostics, not release budget acceptance. Batch 9153 ms; peak server RSS 46740 KiB (45.64 MiB total / 4.56 MiB per target as aggregate arithmetic, not marginal memory); server CPU 1491 ticks at 100 Hz = 14.91 s. Load 10.99/9.43/15.56. Evidence: evidence/ssh-bootstrap/run3/provision-ten.log and provision-ten-times.md. All ten exact marked installations, units and launchers removed by their normal uid before fixture teardown; test 1/1 in 14.25 s. | Target | Check/auth complete | Install + enrol | Facts wait | First terminal + commit | Done | | --- | ---: | ---: | ---: | ---: | ---: | | local-1 | 522 ms | 5207 ms | 19 ms | 206 ms | 5954 ms | | local-2 | 451 ms | 4772 ms | 9 ms | 330 ms | 5562 ms | | local-3 | 6065 ms | 2877 ms | 43 ms | 146 ms | 9131 ms | | local-4 | 521 ms | 5138 ms | 6 ms | 238 ms | 5903 ms | | local-5 | 651 ms | 4975 ms | 2 ms | 269 ms | 5897 ms | | local-6 | 428 ms | 4839 ms | 77 ms | 334 ms | 5678 ms | | local-7 | 5967 ms | 3025 ms | 2 ms | 133 ms | 9127 ms | | local-8 | 453 ms | 4911 ms | 39 ms | 267 ms | 5670 ms | | local-9 | 487 ms | 4856 ms | 54 ms | 233 ms | 5630 ms | | local-10 | 443 ms | 5772 ms | 15 ms | 171 ms | 6401 ms | PROVISION_SCALE targets=10 concurrency_limit=8 elapsed_ms=9153 peak_server_rss_kib=46740 server_cpu_ticks=1491 clk_tck=100 load=10.99 9.43 15.56 17/1767 694110
Author
Owner

Committed the deterministic retry-event regression: unsupported authenticated check retains server-key evidence; later pre-auth failure resets current metadata; immutable replay retains earlier evidence. Test 1/1 in 0.00 s. Prior unchanged full-gate failures are recorded separately; this full retry passes.
Head: f658b2d252. Evidence: evidence/ssh-bootstrap/run3/event-tests-low-load-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.94s]

Committed the deterministic retry-event regression: unsupported authenticated check retains server-key evidence; later pre-auth failure resets current metadata; immutable replay retains earlier evidence. Test 1/1 in 0.00 s. Prior unchanged full-gate failures are recorded separately; this full retry passes. Head: f658b2d252377d8993b06871760df2711c3f9799. Evidence: evidence/ssh-bootstrap/run3/event-tests-low-load-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.94s]
Author
Owner

#87 local two-process rootless provisioning fixture exposed a CLI integration mismatch before production source changes. Proposed additive CLI boundary: infraternal agent --data DATA join URL --enroll-only consumes the existing invitation JSON on stdin, persists pinned enrollment identity and returns without starting the foreground daemon. The installer then activates infraternal agent --data DATA --state SESSIONS run as the normal-user service. --enroll-only is additive; ordinary join retains its current foreground behavior. The exact #78 invitation/remote wire shapes remain unchanged. Isolated snapshot 1f6e39b plus this fixture addition passed actual installation, pinned mTLS, native facts and browser PTY on ten uids; all marked installations removed. Evidence on #87: provision-cli-red.log (failing first), provision-cli-green.log and provision-ten.log. Production dev still lacks #78; owner/runtime integration must provide this boundary before production provisioning can be enabled.

#87 local two-process rootless provisioning fixture exposed a CLI integration mismatch before production source changes. Proposed additive CLI boundary: `infraternal agent --data DATA join URL --enroll-only` consumes the existing invitation JSON on stdin, persists pinned enrollment identity and returns without starting the foreground daemon. The installer then activates `infraternal agent --data DATA --state SESSIONS run` as the normal-user service. `--enroll-only` is additive; ordinary join retains its current foreground behavior. The exact #78 invitation/remote wire shapes remain unchanged. Isolated snapshot 1f6e39b plus this fixture addition passed actual installation, pinned mTLS, native facts and browser PTY on ten uids; all marked installations removed. Evidence on #87: provision-cli-red.log (failing first), provision-cli-green.log and provision-ten.log. Production dev still lacks #78; owner/runtime integration must provide this boundary before production provisioning can be enabled.
Author
Owner

Installer correction: rollback tests 10/10 in 0.29 s and actual local/ten-target provisioning+removal pass. First complete scripts/verify fast attempt failed in unchanged VT credit test: credit probe failed: t1-gate-faithful-1, 0/1 in 8.01 s; all other Rust gate columns PASS. Evidence: evidence/ssh-bootstrap/run3/install-cli-fast.log. No terminal assertions or budgets changed. Retrying the identical installer source with cached static builds; correction remains uncommitted until full green.

Installer correction: rollback tests 10/10 in 0.29 s and actual local/ten-target provisioning+removal pass. First complete scripts/verify fast attempt failed in unchanged VT credit test: `credit probe failed: t1-gate-faithful-1`, 0/1 in 8.01 s; all other Rust gate columns PASS. Evidence: evidence/ssh-bootstrap/run3/install-cli-fast.log. No terminal assertions or budgets changed. Retrying the identical installer source with cached static builds; correction remains uncommitted until full green.
Author
Owner

Prepared additive per-target Start and per-host Retry one-use credential input. Tested through the real authenticated bootstrap WebSocket against the #78 two-process fixture with dedicated server custody explicitly locked: supplied browser-side user key selected user-key, installed/enrolled/queried native facts/opened browser PTY and removed installation, 1/1 in 5.47 s (done 3785 ms). Retry fixture: attempts 1 and 2 without material returned typed auth choose_method; attempt 3 with fresh one-use user key passed complete provisioning/removal, 1/1 in 3.82 s. Evidence: evidence/ssh-bootstrap/run3/provision-user-once.log and provision-retry-once.log. Private key only entered JSON/TLS and scoped helper stdin, never files/argv/logs; replay events contain public method metadata only. Unit consumption/expiry/input validation 2/2 in 0.00 s (once-draft-tests.log). Production activation is not committed yet: earlier installer correction must pass its own full gate first.

Prepared additive per-target Start and per-host Retry one-use credential input. Tested through the real authenticated bootstrap WebSocket against the #78 two-process fixture with dedicated server custody explicitly locked: supplied browser-side user key selected `user-key`, installed/enrolled/queried native facts/opened browser PTY and removed installation, 1/1 in 5.47 s (done 3785 ms). Retry fixture: attempts 1 and 2 without material returned typed auth choose_method; attempt 3 with fresh one-use user key passed complete provisioning/removal, 1/1 in 3.82 s. Evidence: evidence/ssh-bootstrap/run3/provision-user-once.log and provision-retry-once.log. Private key only entered JSON/TLS and scoped helper stdin, never files/argv/logs; replay events contain public method metadata only. Unit consumption/expiry/input validation 2/2 in 0.00 s (once-draft-tests.log). Production activation is not committed yet: earlier installer correction must pass its own full gate first.
Author
Owner

Prepared once-only password fallback passed through the real bootstrap WebSocket, OpenSSH/private askpass pipe, normal-user unit, pinned #78 enrollment, authenticated native facts and browser PTY. Dedicated server key was cold-locked; no user key was supplied; selected method password. Cumulative done 2426 ms; test 1/1 in 3.25 s. The normal uid then disabled/stopped/removed the exact marked installation/unit/launcher (all absence checks true). Evidence: evidence/ssh-bootstrap/run3/provision-password-once.log. Fixture password generated in memory and set only in the disposable target through chpasswd stdin; target stores its ordinary password hash, never plaintext. Server-side credential input never enters files, argv, replay or SQLite. No production activation claim yet.

Installer unchanged full-gate retry failed in the unrelated tiny-credit snapshot assertion len(client.snapshots) == count and client.out == cursor, agent_review 5 passed/1 failed in 129.44 s; other Rust gate columns PASS. Evidence: install-cli-retry-fast.log. Identical-source third full attempt running; no test assertion/deadline/budget changes.

Prepared once-only password fallback passed through the real bootstrap WebSocket, OpenSSH/private askpass pipe, normal-user unit, pinned #78 enrollment, authenticated native facts and browser PTY. Dedicated server key was cold-locked; no user key was supplied; selected method password. Cumulative done 2426 ms; test 1/1 in 3.25 s. The normal uid then disabled/stopped/removed the exact marked installation/unit/launcher (all absence checks true). Evidence: evidence/ssh-bootstrap/run3/provision-password-once.log. Fixture password generated in memory and set only in the disposable target through chpasswd stdin; target stores its ordinary password hash, never plaintext. Server-side credential input never enters files, argv, replay or SQLite. No production activation claim yet. Installer unchanged full-gate retry failed in the unrelated tiny-credit snapshot assertion `len(client.snapshots) == count and client.out == cursor`, agent_review 5 passed/1 failed in 129.44 s; other Rust gate columns PASS. Evidence: install-cli-retry-fast.log. Identical-source third full attempt running; no test assertion/deadline/budget changes.
Author
Owner

Committed compatible staged enrollment and explicit live user-service CLI, keeping identity and shim state separate. Rollback tests 10/10 in 0.29 s; real local and ten-user installation/enrollment/facts/browser terminal/removal passed. Earlier unchanged VT failures are recorded separately; this complete retry passes. Both static binary sizes remain 16440880/13831664 bytes.
Head: 8673266563. Evidence: evidence/ssh-bootstrap/run3/install-cli-final-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.23s]

Committed compatible staged enrollment and explicit live user-service CLI, keeping identity and shim state separate. Rollback tests 10/10 in 0.29 s; real local and ten-user installation/enrollment/facts/browser terminal/removal passed. Earlier unchanged VT failures are recorded separately; this complete retry passes. Both static binary sizes remain 16440880/13831664 bytes. Head: 86732665633614554fe0e8df6721bd4467a9717e. Evidence: evidence/ssh-bootstrap/run3/install-cli-final-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.23s]
Author
Owner

Before implementation: additive first-contact trust request/response proposal. A host-key failure may include a public host_key_challenge UUID plus already observed SHA256 fingerprints only when no existing configured trust or dedicated pin matches that effective endpoint. {"action":"confirm-host-key","target":"host-1","challenge":"<UUID>","fingerprint":"SHA256:..."} is bound to the same authenticated socket/batch/failed target. Re-resolve and bind effective endpoint/alias/port/public policy; recheck the exact live owner capability immediately before recording the public pin in private server data. Successful acknowledgement {"host_key_confirmed":{"target":"host-1","fingerprint":"SHA256:..."}}; UI explicitly retries. Never write system known_hosts, trust a caller-supplied key, overwrite a recorded pin, or allow this action for changed/revoked/already-known keys. Bounded short-lived pending public observations, cleaned on access without idle timers. Wrong/foreign/expired challenge, changed configuration and logout refuse. Existing request/event shapes remain valid without these additive fields.

Before implementation: additive first-contact trust request/response proposal. A host-key failure may include a public `host_key_challenge` UUID plus already observed SHA256 fingerprints only when no existing configured trust or dedicated pin matches that effective endpoint. `{"action":"confirm-host-key","target":"host-1","challenge":"<UUID>","fingerprint":"SHA256:..."}` is bound to the same authenticated socket/batch/failed target. Re-resolve and bind effective endpoint/alias/port/public policy; recheck the exact live owner capability immediately before recording the public pin in private server data. Successful acknowledgement `{"host_key_confirmed":{"target":"host-1","fingerprint":"SHA256:..."}}`; UI explicitly retries. Never write system known_hosts, trust a caller-supplied key, overwrite a recorded pin, or allow this action for changed/revoked/already-known keys. Bounded short-lived pending public observations, cleaned on access without idle timers. Wrong/foreign/expired challenge, changed configuration and logout refuse. Existing request/event shapes remain valid without these additive fields.
Author
Owner

Corrected fixture cleanup finding: earlier REMOVED lines proved installation/unit/launcher absence, but their shallow JSON glob did not prove shim/shell retirement. A /proc status/comm-only check (no argv/credentials inspected) found live canary processes in the disposable container. The canary input sequence length is 27 bytes and was correct; the actual issue was closing the browser socket immediately after sending exit, before upstream delivery/exit acknowledgement, plus intentionally retained exited shims. Removed the exact owned old container to retire its leftovers; no host account/service changed.

Added failing real lifecycle assertion first: provision-removal-red.log, 0/1 in 5.41 s, fixture still has live canary shims/shells. Fixture now awaits this session's terminal.exited status 0 before closing, then reuses repository scripts/agent_fixture.py authenticated-rendezvous cleanup after stopping the exact host-marked daemon. Recovery removal reports uid1101 installation/unit/launcher absent AND live_canaries=0 (provision-red-recovery-removal.log). Rerunning local and ten-target evidence with this stronger check before final acceptance. Prior timing numbers remain diagnostics for their recorded earlier boundary.

Corrected fixture cleanup finding: earlier `REMOVED` lines proved installation/unit/launcher absence, but their shallow JSON glob did not prove shim/shell retirement. A /proc status/comm-only check (no argv/credentials inspected) found live canary processes in the disposable container. The canary input sequence length is 27 bytes and was correct; the actual issue was closing the browser socket immediately after sending exit, before upstream delivery/exit acknowledgement, plus intentionally retained exited shims. Removed the exact owned old container to retire its leftovers; no host account/service changed. Added failing real lifecycle assertion first: provision-removal-red.log, 0/1 in 5.41 s, `fixture still has live canary shims/shells`. Fixture now awaits this session's terminal.exited status 0 before closing, then reuses repository scripts/agent_fixture.py authenticated-rendezvous cleanup after stopping the exact host-marked daemon. Recovery removal reports uid1101 installation/unit/launcher absent AND live_canaries=0 (provision-red-recovery-removal.log). Rerunning local and ten-target evidence with this stronger check before final acceptance. Prior timing numbers remain diagnostics for their recorded earlier boundary.
Author
Owner

Committed bounded input-only Secret decoding: 24576-byte maximum, owned strings transfer into the existing zeroizing buffer, no Debug/Display/output serialization. Isolated bounds/type/diagnostic test 1/1 in 0.00 s. First unchanged VT-credit gate failure is recorded; complete identical-source retry passes.
Head: ba68f811ad. Evidence: evidence/ssh-bootstrap/run3/secret-input-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.07s]

Committed bounded input-only Secret decoding: 24576-byte maximum, owned strings transfer into the existing zeroizing buffer, no Debug/Display/output serialization. Isolated bounds/type/diagnostic test 1/1 in 0.00 s. First unchanged VT-credit gate failure is recorded; complete identical-source retry passes. Head: ba68f811ad1ec71fe1cdae352942f48fb4a5eb72. Evidence: evidence/ssh-bootstrap/run3/secret-input-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.07s]
Author
Owner

Stronger ten-target lifecycle run did not pass: nine reached done; local-2 remained at connect (14334 ms) and the fixture timed out after 233.23 s, with no final failure/done event for that host. Evidence: evidence/ssh-bootstrap/run3/provision-ten-lifecycle.log. The fixture now waits for actual terminal.exited before browser close, unlike earlier diagnostics. Adding public per-session opened/marker/exited/closed instrumentation to locate the stall; no timeout/budget/engine assertions loosened. All ten exact bound installations then removed by their normal uid through authenticated-rendezvous cleanup: installation/unit/launcher absent AND live_canaries=0 for every uid1101–1110 (provision-ten-recovery-removal.log). This failed run is not acceptance evidence.

Formal private-input decoder tests full gate failed in unchanged VT credit t1-gate-approximate-1, 0/1 in 8.47 s; every other Rust gate column PASS (secret-input-tests-fast.log). Same-source retry running; formal test remains uncommitted.

Stronger ten-target lifecycle run did not pass: nine reached done; local-2 remained at connect (14334 ms) and the fixture timed out after 233.23 s, with no final failure/done event for that host. Evidence: evidence/ssh-bootstrap/run3/provision-ten-lifecycle.log. The fixture now waits for actual terminal.exited before browser close, unlike earlier diagnostics. Adding public per-session opened/marker/exited/closed instrumentation to locate the stall; no timeout/budget/engine assertions loosened. All ten exact bound installations then removed by their normal uid through authenticated-rendezvous cleanup: installation/unit/launcher absent AND live_canaries=0 for every uid1101–1110 (provision-ten-recovery-removal.log). This failed run is not acceptance evidence. Formal private-input decoder tests full gate failed in unchanged VT credit `t1-gate-approximate-1`, 0/1 in 8.47 s; every other Rust gate column PASS (secret-input-tests-fast.log). Same-source retry running; formal test remains uncommitted.
Author
Owner

Stronger instrumented local ten-target lifecycle run passed: every host reached actual canary marker and terminal.exited status0 before browser close; all ten exact marked installations then removed as normal uid with installation/unit/launcher absent AND live_canaries=0. Source fixture at pinned #78 plus current prepared API/transport overlays; protocol client, not a browser rendering test. Debug diagnostic run, infraternal-dev 8 cores, CPUWeight10000; excludes helper/target process CPU/RSS. Test 1/1 in 23.37 s. Evidence: evidence/ssh-bootstrap/run3/provision-ten-instrumented.log and provision-ten-lifecycle-times.md. The earlier stalled run remains separately recorded; instrumentation did not loosen any deadline/assertion.

Target Check/auth complete Install + enrol Facts wait First terminal + commit Done
local-1 825 ms 8777 ms 19 ms 409 ms 10030 ms
local-2 778 ms 9012 ms 5 ms 300 ms 10095 ms
local-3 10487 ms 3834 ms 4 ms 174 ms 14499 ms
local-4 934 ms 8872 ms 2 ms 250 ms 10058 ms
local-5 813 ms 8817 ms 43 ms 379 ms 10052 ms
local-6 800 ms 8769 ms 66 ms 384 ms 10019 ms
local-7 822 ms 8939 ms 15 ms 282 ms 10058 ms
local-8 845 ms 8809 ms 17 ms 433 ms 10104 ms
local-9 10470 ms 3805 ms 39 ms 227 ms 14541 ms
local-10 1179 ms 8562 ms 57 ms 260 ms 10058 ms

PROVISION_SCALE targets=10 concurrency_limit=8 elapsed_ms=14558 peak_server_rss_kib=47900 server_cpu_ticks=2124 clk_tck=100 load=14.90 14.15 17.98 24/1791 1396457

Stronger instrumented local ten-target lifecycle run passed: every host reached actual canary marker and terminal.exited status0 before browser close; all ten exact marked installations then removed as normal uid with installation/unit/launcher absent AND live_canaries=0. Source fixture at pinned #78 plus current prepared API/transport overlays; protocol client, not a browser rendering test. Debug diagnostic run, infraternal-dev 8 cores, CPUWeight10000; excludes helper/target process CPU/RSS. Test 1/1 in 23.37 s. Evidence: evidence/ssh-bootstrap/run3/provision-ten-instrumented.log and provision-ten-lifecycle-times.md. The earlier stalled run remains separately recorded; instrumentation did not loosen any deadline/assertion. | Target | Check/auth complete | Install + enrol | Facts wait | First terminal + commit | Done | | --- | ---: | ---: | ---: | ---: | ---: | | local-1 | 825 ms | 8777 ms | 19 ms | 409 ms | 10030 ms | | local-2 | 778 ms | 9012 ms | 5 ms | 300 ms | 10095 ms | | local-3 | 10487 ms | 3834 ms | 4 ms | 174 ms | 14499 ms | | local-4 | 934 ms | 8872 ms | 2 ms | 250 ms | 10058 ms | | local-5 | 813 ms | 8817 ms | 43 ms | 379 ms | 10052 ms | | local-6 | 800 ms | 8769 ms | 66 ms | 384 ms | 10019 ms | | local-7 | 822 ms | 8939 ms | 15 ms | 282 ms | 10058 ms | | local-8 | 845 ms | 8809 ms | 17 ms | 433 ms | 10104 ms | | local-9 | 10470 ms | 3805 ms | 39 ms | 227 ms | 14541 ms | | local-10 | 1179 ms | 8562 ms | 57 ms | 260 ms | 10058 ms | PROVISION_SCALE targets=10 concurrency_limit=8 elapsed_ms=14558 peak_server_rss_kib=47900 server_cpu_ticks=2124 clk_tck=100 load=14.90 14.15 17.98 24/1791 1396457
Author
Owner

Merged dev gate stability #118. Sole auth test conflict retains crate-visible serialization plus upstream FrozenSocketTime. Fast gate green: server 132 passed, native credit and fidelity green; static x86_64 16440880 bytes, aarch64 13831664 bytes.
Head: ff027512f7. Evidence: evidence/ssh-bootstrap/run3/dev-refresh-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.38s]

Merged dev gate stability #118. Sole auth test conflict retains crate-visible serialization plus upstream FrozenSocketTime. Fast gate green: server 132 passed, native credit and fidelity green; static x86_64 16440880 bytes, aarch64 13831664 bytes. Head: ff027512f7f93637c99e3f322a019266e065f501. Evidence: evidence/ssh-bootstrap/run3/dev-refresh-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.38s]
Author
Owner

First-contact draft real-sshd oracle: initial repeated scans eventually returned no public key (host-trust-real.log, host-trust-diagnostic.log). Same source passes with PerSourcePenalties=no explicitly in the disposable rootless fixture: 1/1 in 2.87 s (host-trust-unpenalized.log). Checks: revoked confirmation authority and foreign target produce no pin; existing normal, CA and revoked records refuse confirmation unchanged; explicit confirmation authenticates a command; replay refuses; a later configured revoked record refuses pin use without changing it. No production SSH policy changed; missing observations continue to fail closed. Diagnostic machine infraternal-dev 8 cores, CPUWeight10000, load recorded in log. Draft not yet activated in root production. Latest #78 cfe80534 states join/invitation shape unchanged; #78 still absent dev.

First-contact draft real-sshd oracle: initial repeated scans eventually returned no public key (host-trust-real.log, host-trust-diagnostic.log). Same source passes with PerSourcePenalties=no explicitly in the disposable rootless fixture: 1/1 in 2.87 s (host-trust-unpenalized.log). Checks: revoked confirmation authority and foreign target produce no pin; existing normal, CA and revoked records refuse confirmation unchanged; explicit confirmation authenticates a command; replay refuses; a later configured revoked record refuses pin use without changing it. No production SSH policy changed; missing observations continue to fail closed. Diagnostic machine infraternal-dev 8 cores, CPUWeight10000, load recorded in log. Draft not yet activated in root production. Latest #78 cfe80534 states join/invitation shape unchanged; #78 still absent dev.
Author
Owner

Real first-contact draft regression: HostKeyAlias on a nondefault port must be queried verbatim, not [alias]:port. Existing @revoked fixture-alias wrongly produced a first-contact challenge before fix (host-trust-alias-red.log: 0/1, 1.66 s). Correct lookup passes entire real-sshd oracle (host-trust-alias-green.log: 1/1, 2.04 s); no pin written for existing alias. Draft remains isolated, not root activation.

Pending private-input decoder full gate failed unchanged user_scope_survives_parent_unit_stop: shim socket No such file or directory at crates/infraternal/tests/shim.rs:106; 6 passed/1 failed, 16.89 s. Other Rust columns PASS; secret-input-tests-dev-fast.log. Same-source full retry starts; no assertions/budgets changed.

Real first-contact draft regression: HostKeyAlias on a nondefault port must be queried verbatim, not [alias]:port. Existing @revoked fixture-alias wrongly produced a first-contact challenge before fix (host-trust-alias-red.log: 0/1, 1.66 s). Correct lookup passes entire real-sshd oracle (host-trust-alias-green.log: 1/1, 2.04 s); no pin written for existing alias. Draft remains isolated, not root activation. Pending private-input decoder full gate failed unchanged user_scope_survives_parent_unit_stop: shim socket No such file or directory at crates/infraternal/tests/shim.rs:106; 6 passed/1 failed, 16.89 s. Other Rust columns PASS; secret-input-tests-dev-fast.log. Same-source full retry starts; no assertions/budgets changed.
Author
Owner

HostKeyAlias draft corrected after failing real-sshd test: alias on nondefault port is the full lookup, never [alias]:port. Red 0/1 in1.66 s, green1/1 in2.04 s with actual revoked alias and no pin publication (host-trust-alias-{red,green}.log). All prior authority/replay/CA/revoked/command/immutable-pin cases remain green. Production draft still not activated. Initial challenge-absence failure was fixture source-penalty behavior, not a missing normal first-contact implementation; explicit PerSourcePenalties=no is confined to disposable research fixture. No production SSH trust policy loosened.

HostKeyAlias draft corrected after failing real-sshd test: alias on nondefault port is the full lookup, never [alias]:port. Red 0/1 in1.66 s, green1/1 in2.04 s with actual revoked alias and no pin publication (host-trust-alias-{red,green}.log). All prior authority/replay/CA/revoked/command/immutable-pin cases remain green. Production draft still not activated. Initial challenge-absence failure was fixture source-penalty behavior, not a missing normal first-contact implementation; explicit PerSourcePenalties=no is confined to disposable research fixture. No production SSH trust policy loosened.
Author
Owner

Same-source decoder test gate retry failed unchanged auth::tests::socket_tests::expired_handshake_releases_user_permits at socket_tests.rs:151: before-deadline seventeenth socket did not yield HTTP503. Server131 passed/1failed/10ignored in115.79s; all other Rust gate columns PASS. Evidence secret-input-tests-dev-retry-fast.log. Decoder focused test green; no pending source committed. Running direct handshake regression and another full same-source gate; no budgets or assertions changed.

Same-source decoder test gate retry failed unchanged auth::tests::socket_tests::expired_handshake_releases_user_permits at socket_tests.rs:151: before-deadline seventeenth socket did not yield HTTP503. Server131 passed/1failed/10ignored in115.79s; all other Rust gate columns PASS. Evidence secret-input-tests-dev-retry-fast.log. Decoder focused test green; no pending source committed. Running direct handshake regression and another full same-source gate; no budgets or assertions changed.
Author
Owner

Additive native facts contract proposal (D145,D156): authenticated control stream action host.facts, empty JSON object only, request <=256 bytes; no arrays, fields, network scans, listeners or workloads. Return bounded cheap platform facts {os,arch,execution_uid,version,logical_cpus}; server must bind response to invited host/uid and actual authenticated remote channel, not caller-selected identity. Existing frozen frames and join/invitation shape unchanged. Reuse native OS/std queries and existing serde/nix; no library/engine choice. Current isolated fixture red test proves derived empty structs accept [] (facts-input-red.log:0/1), corrected explicit map visitor passes (facts-input-green.log). Source module, dispatch, formal tests and parser fuzz are separate gated steps before root activation.

Additive native facts contract proposal (D145,D156): authenticated control stream action host.facts, empty JSON object only, request <=256 bytes; no arrays, fields, network scans, listeners or workloads. Return bounded cheap platform facts {os,arch,execution_uid,version,logical_cpus}; server must bind response to invited host/uid and actual authenticated remote channel, not caller-selected identity. Existing frozen frames and join/invitation shape unchanged. Reuse native OS/std queries and existing serde/nix; no library/engine choice. Current isolated fixture red test proves derived empty structs accept [] (facts-input-red.log:0/1), corrected explicit map visitor passes (facts-input-green.log). Source module, dispatch, formal tests and parser fuzz are separate gated steps before root activation.
Author
Owner

Formal private-input decoder test committed: bounded string-only admission and content-free oversized error; focused1/1 in0.00s. Full gate green after recorded unrelated failures; direct unchanged handshake test1/1 in0.87s.
Head: 92339d61d5. Evidence: evidence/ssh-bootstrap/run3/secret-input-tests-dev-final-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.82s]

Formal private-input decoder test committed: bounded string-only admission and content-free oversized error; focused1/1 in0.00s. Full gate green after recorded unrelated failures; direct unchanged handshake test1/1 in0.87s. Head: 92339d61d53133a6df458a1561076f5a2cbe9124. Evidence: evidence/ssh-bootstrap/run3/secret-input-tests-dev-final-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.82s]
Author
Owner

Completed auth-once-provider; optional private input never enters public history. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 440fd2c1be. Evidence: evidence/ssh-bootstrap/run3/auth-once-provider-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.73s]

Completed auth-once-provider; optional private input never enters public history. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 440fd2c1be6908eb26768b5116a02b967331809c. Evidence: evidence/ssh-bootstrap/run3/auth-once-provider-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.73s]
Author
Owner

One-use provider source committed440fd2c1 with green fast. Formal test slice gate failed unchanged t1-gate-faithful-1 at initial terminal.open, before credit assertions: terminal open refused (auth-once-tests-credit-stderr.log; fast0/1 in9.94s). Isolated same-binary startup diagnostic20/20 passed, observed339.672–387.836ms (terminal-open-diagnostic.log), CPUWeight10000; diagnostic did not record initial load and is not budget acceptance. Cause of intermittent startup refusal remains unconfirmed. No readiness deadline or assertions changed. Formal test slice uncommitted; full same-source retry starts.

One-use provider source committed440fd2c1 with green fast. Formal test slice gate failed unchanged t1-gate-faithful-1 at initial terminal.open, before credit assertions: terminal open refused (auth-once-tests-credit-stderr.log; fast0/1 in9.94s). Isolated same-binary startup diagnostic20/20 passed, observed339.672–387.836ms (terminal-open-diagnostic.log), CPUWeight10000; diagnostic did not record initial load and is not budget acceptance. Cause of intermittent startup refusal remains unconfirmed. No readiness deadline or assertions changed. Formal test slice uncommitted; full same-source retry starts.
Author
Owner

Three formal one-use tests committed; consumption, expiry, type/bounds, prompts and unknown/caller-clock fields. Full retry green; earlier unchanged terminal-open refusal remains unconfirmed with20/20 isolated starts green.
Head: 440fd2c1be. Evidence: evidence/ssh-bootstrap/run3/auth-once-tests-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.22s]

Three formal one-use tests committed; consumption, expiry, type/bounds, prompts and unknown/caller-clock fields. Full retry green; earlier unchanged terminal-open refusal remains unconfirmed with20/20 isolated starts green. Head: 440fd2c1be6908eb26768b5116a02b967331809c. Evidence: evidence/ssh-bootstrap/run3/auth-once-tests-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.22s]
Author
Owner

Correction: previous update claimed test commit before a missing message file prevented git commit. Now committed three formal tests against the same green full gate. Earlier terminal-open refusal remains unconfirmed;20/20 isolated starts passed.
Head: 27d6d00d52. Evidence: evidence/ssh-bootstrap/run3/auth-once-tests-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.22s]

Correction: previous update claimed test commit before a missing message file prevented git commit. Now committed three formal tests against the same green full gate. Earlier terminal-open refusal remains unconfirmed;20/20 isolated starts passed. Head: 27d6d00d52adff362961f45858432c6c182c3f73. Evidence: evidence/ssh-bootstrap/run3/auth-once-tests-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.22s]
Author
Owner

Pending one-use runner slice: full fast tests/static builds passed, but Clippy rejected run107/100 lines. Extracted bounded lazy credential resolution and grouped installation/host rollback handles as one attempt-owned resource state; no lint waiver or auth/cleanup policy change. Direct plugin all-targets Clippy passes1.44s (auth-once-runner-clippy.log). Full retry starts; no pending runner/API commit yet.

Pending one-use runner slice: full fast tests/static builds passed, but Clippy rejected run107/100 lines. Extracted bounded lazy credential resolution and grouped installation/host rollback handles as one attempt-owned resource state; no lint waiver or auth/cleanup policy change. Direct plugin all-targets Clippy passes1.44s (auth-once-runner-clippy.log). Full retry starts; no pending runner/API commit yet.
Author
Owner

Bound one-use material to selected attempts and 60-second queue/resolution waiting; attempt-owned resources preserve rollback/retirement. Full gate green; direct plugin Clippy1.44s. No plaintext retained in batch/history or reused by retry.
Head: 037bf12b1c. Evidence: evidence/ssh-bootstrap/run3/auth-once-runner-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.88s]

Bound one-use material to selected attempts and 60-second queue/resolution waiting; attempt-owned resources preserve rollback/retirement. Full gate green; direct plugin Clippy1.44s. No plaintext retained in batch/history or reused by retry. Head: 037bf12b1cf8bafe93cd384eb310bc47a6a1e7d5. Evidence: evidence/ssh-bootstrap/run3/auth-once-runner-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.88s]
Author
Owner

Completed auth-once-api; optional private input never enters public history. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 3f93d28d00. Evidence: evidence/ssh-bootstrap/run3/auth-once-api-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.86s]

Completed auth-once-api; optional private input never enters public history. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 3f93d28d008fae7bd5e913c7e50f2fc1548a1c7d. Evidence: evidence/ssh-bootstrap/run3/auth-once-api-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.86s]
Author
Owner

Trust schema remains uncommitted: Clippy/static builds passed, but unchanged vt_reconnect failed its legacy Snapshot/Ping ordering assertion (0/1, 15.43s; trust-schema-fast.log and preserved trust-schema-reconnect-{stdout,stderr}.log). Earlier wrapped case passed; less case reached approximate recovery before the assertion. Cause is unconfirmed; no VT code, budget, deadline or assertions changed. Same-source full gate retry follows.

One-use SSH admission ASan fuzzer completed 8,676,141 executions in181s, peak RSS520MiB, max_len32768, no findings/artifacts. Five synthetic seeds; exact current production decoder/provider and standalone copy of the forthcoming workspace target. CPUWeight10000/nightly2026-09-30, log ssh-one-use-fuzz.log; gate compilation/other jobs overlapped, not a performance acceptance measurement. No actual credentials entered the corpus.

Trust schema remains uncommitted: Clippy/static builds passed, but unchanged vt_reconnect failed its legacy Snapshot/Ping ordering assertion (0/1, 15.43s; trust-schema-fast.log and preserved trust-schema-reconnect-{stdout,stderr}.log). Earlier wrapped case passed; less case reached approximate recovery before the assertion. Cause is unconfirmed; no VT code, budget, deadline or assertions changed. Same-source full gate retry follows. One-use SSH admission ASan fuzzer completed 8,676,141 executions in181s, peak RSS520MiB, max_len32768, no findings/artifacts. Five synthetic seeds; exact current production decoder/provider and standalone copy of the forthcoming workspace target. CPUWeight10000/nightly2026-09-30, log ssh-one-use-fuzz.log; gate compilation/other jobs overlapped, not a performance acceptance measurement. No actual credentials entered the corpus.
Author
Owner

Additive manual-install proposal for D183, before implementation: a failed socket-owned target may request a rootless manual plan with explicit execution uid and architecture. Trusted backend authorization issues the existing #78 host-bound 900-second invitation; no fake SSH Check is used. The public one-line command downloads an artifact and detached signature from the trusted configurable release catalog and verifies the embedded/catalog release public key before execution (D184/D185); the invitation is separate, read quietly and passed only on stdin. Reuse Installation transaction scripts, including rollback, instead of duplicating install logic. The server waits for authenticated native facts and the terminal canary, then commits through the enrolled host control path; socket revocation/cancellation cannot authorize commit. The target rolls back a bounded unacknowledged transaction.

Production dependency: dev has no signed release/catalog implementation; #102 records D184/D185 but currently has only the owner signing/source decision. Default backend must refuse before invitation issuance or mutation until that trusted adapter exists. Fixture artifacts/signature policy must be explicitly test-only and cannot be reported as production signing. #78 R3 administrator envelopes also remain incomplete; existing CA/SSH interfaces stay cold-locked by default. No unsigned production downloader, release private key on the server, new crypto engine or fabricated execution uid will be introduced. Continue local proof and publish the stable additive boundary.

Additive manual-install proposal for D183, before implementation: a failed socket-owned target may request a rootless manual plan with explicit execution uid and architecture. Trusted backend authorization issues the existing #78 host-bound 900-second invitation; no fake SSH Check is used. The public one-line command downloads an artifact and detached signature from the trusted configurable release catalog and verifies the embedded/catalog release public key before execution (D184/D185); the invitation is separate, read quietly and passed only on stdin. Reuse Installation transaction scripts, including rollback, instead of duplicating install logic. The server waits for authenticated native facts and the terminal canary, then commits through the enrolled host control path; socket revocation/cancellation cannot authorize commit. The target rolls back a bounded unacknowledged transaction. Production dependency: dev has no signed release/catalog implementation; #102 records D184/D185 but currently has only the owner signing/source decision. Default backend must refuse before invitation issuance or mutation until that trusted adapter exists. Fixture artifacts/signature policy must be explicitly test-only and cannot be reported as production signing. #78 R3 administrator envelopes also remain incomplete; existing CA/SSH interfaces stay cold-locked by default. No unsigned production downloader, release private key on the server, new crypto engine or fabricated execution uid will be introduced. Continue local proof and publish the stable additive boundary.
Author
Owner

Completed trust-schema-retry; optional private input never enters public history. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 79da0ce33c. Evidence: evidence/ssh-bootstrap/run3/trust-schema-retry-fast.log. scripts/verify fast exit 0; summary verbatim:

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

7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.96s]

Completed trust-schema-retry; optional private input never enters public history. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 79da0ce33c2c3dd8237d98dc1279e1c8edc5199b. Evidence: evidence/ssh-bootstrap/run3/trust-schema-retry-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.96s]
Author
Owner

Trust configuration remains uncommitted: fast failed unchanged expired_handshake_releases_user_permits (server131/1/10,145.78s; trust-configuration-fast.log), same pre-deadline admission assertion as the earlier gate. Public-only isolated diagnostics reproduced failure on sample9: virtual0ms before jump,4999ms after, watchdog false, pool idle0, seventeenth upgrade succeeded (.handshake-public-time-repeat.log); preceding8 samples returned503 with idle1. Source sends Hello before the next live-authority read. Explicit clock advancement can cancel that pending read and retire the old socket before its handshake deadline. A transport-Pong fence after each Hello settles that phase without completing application Hello or changing limits/timeouts. Focused fenced diagnostic20/20 PASS, virtual4999ms/503/pool idle1; CPUWeight10000, recorded initial load in handshake-pong-fence-repeat.log. Remove instrumentation and gate this test-only correction separately before restoring the trust slice. Production auth code/deadlines unchanged.

Manual transaction preview: interrupted public receipt cleanup red0/1 .21s (manual-receipt-red.log); isolated fix green all11 filesystem transactions2.62s plus2 plan-admission tests. Public one-line plan12986bytes excludes private invitation, requires signed artifact verification and exact readiness receipt. This is isolated source construction/filesystem evidence, not signed-download or production provisioning proof.

Trust configuration remains uncommitted: fast failed unchanged expired_handshake_releases_user_permits (server131/1/10,145.78s; trust-configuration-fast.log), same pre-deadline admission assertion as the earlier gate. Public-only isolated diagnostics reproduced failure on sample9: virtual0ms before jump,4999ms after, watchdog false, pool idle0, seventeenth upgrade succeeded (.handshake-public-time-repeat.log); preceding8 samples returned503 with idle1. Source sends Hello before the next live-authority read. Explicit clock advancement can cancel that pending read and retire the old socket before its handshake deadline. A transport-Pong fence after each Hello settles that phase without completing application Hello or changing limits/timeouts. Focused fenced diagnostic20/20 PASS, virtual4999ms/503/pool idle1; CPUWeight10000, recorded initial load in handshake-pong-fence-repeat.log. Remove instrumentation and gate this test-only correction separately before restoring the trust slice. Production auth code/deadlines unchanged. Manual transaction preview: interrupted public receipt cleanup red0/1 .21s (manual-receipt-red.log); isolated fix green all11 filesystem transactions2.62s plus2 plan-admission tests. Public one-line plan12986bytes excludes private invitation, requires signed artifact verification and exact readiness receipt. This is isolated source construction/filesystem evidence, not signed-download or production provisioning proof.
Author
Owner

Real OpenSSH emits no HostKeyAlias field when unset, but emits literal hostkeyalias none when explicitly configured. The draft incorrectly treated that literal as absence and could offer first-contact admission despite an existing revoked alias. Real-sshd regression red0/1 2.24s (host-trust-literal-none-red.log), draft fix green1/1 3.57s including ordinary/nondefault/literal-none aliases, existing normal/CA/revoked refusal, fresh-authority/foreign-target/replay refusal, confirmed command and immutable pins (host-trust-literal-none-green.log). No existing key was accepted or overwritten. Add ordinary parser regressions and retain every explicit alias verbatim before landing the configuration slice. The disposable listener alone disables scan penalties to isolate repeated negative oracles; production policy is unchanged.

Real OpenSSH emits no HostKeyAlias field when unset, but emits literal hostkeyalias none when explicitly configured. The draft incorrectly treated that literal as absence and could offer first-contact admission despite an existing revoked alias. Real-sshd regression red0/1 2.24s (host-trust-literal-none-red.log), draft fix green1/1 3.57s including ordinary/nondefault/literal-none aliases, existing normal/CA/revoked refusal, fresh-authority/foreign-target/replay refusal, confirmed command and immutable pins (host-trust-literal-none-green.log). No existing key was accepted or overwritten. Add ordinary parser regressions and retain every explicit alias verbatim before landing the configuration slice. The disposable listener alone disables scan penalties to isolate repeated negative oracles; production policy is unchanged.
Author
Owner

Completed Fence the half-open handshake oracle before advancing time. Server Hello is delivered before the next live-authority read completes. The expired-handshake test could jump 4999ms while that SQL read was pending, cancelling authorization and freeing a user permit before handshake expiry. Reuse the existing RFC transport-Pong fence to observe the client-Hello wait before advancing the clock; retain all admission, exact deadline and database survival assertions. No production auth code changes (D168, #118). Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: d896d16baa. Evidence: evidence/ssh-bootstrap/run3/handshake-pong-fence-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16493552 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13869232 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [6.86s]

Completed Fence the half-open handshake oracle before advancing time. Server Hello is delivered before the next live-authority read completes. The expired-handshake test could jump 4999ms while that SQL read was pending, cancelling authorization and freeing a user permit before handshake expiry. Reuse the existing RFC transport-Pong fence to observe the client-Hello wait before advancing the clock; retain all admission, exact deadline and database survival assertions. No production auth code changes (D168, #118). Full fast gate green; fixture evidence remains diagnostic until production integration. Head: d896d16baa8976c4da10d4585689211b85e9dc78. Evidence: evidence/ssh-bootstrap/run3/handshake-pong-fence-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16493552 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13869232 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [6.86s]
Author
Owner

Proposed native facts decoder/target ASan proof:11,308,896 executions/181s, peak RSS496MiB, max_len257; no findings/artifacts. Seven synthetic seeds include object/array/scalar/unknown-field and exact256/257-byte boundaries. Fuzzer independently requires accepted input to be an empty JSON object <=256 bytes; production collect is never called. Exact proposed facts source copied into an isolated narrow standalone crate using the same selected serde_json/nix/libFuzzer versions, CPUWeight10000/nightly2026-09-30. Gate compilation/other work overlapped; this is robustness evidence, not latency acceptance. Log native-facts-fuzz.log, owned HOME-cache corpus/target. Ordinary workspace module/dispatch and fuzz registration get independent full gates after host trust.
#11308896 DONE cov: 757 ft: 2074 corp: 781/26Kb lim: 257 exec/s: 62480 rss: 516Mb
Done 11308896 runs in 181 second(s)

Proposed native facts decoder/target ASan proof:11,308,896 executions/181s, peak RSS496MiB, max_len257; no findings/artifacts. Seven synthetic seeds include object/array/scalar/unknown-field and exact256/257-byte boundaries. Fuzzer independently requires accepted input to be an empty JSON object <=256 bytes; production collect is never called. Exact proposed facts source copied into an isolated narrow standalone crate using the same selected serde_json/nix/libFuzzer versions, CPUWeight10000/nightly2026-09-30. Gate compilation/other work overlapped; this is robustness evidence, not latency acceptance. Log native-facts-fuzz.log, owned HOME-cache corpus/target. Ordinary workspace module/dispatch and fuzz registration get independent full gates after host trust. #11308896 DONE cov: 757 ft: 2074 corp: 781/26Kb lim: 257 exec/s: 62480 rss: 516Mb Done 11308896 runs in 181 second(s)
Author
Owner

Completed Retain exact public SSH trust identity for first-contact checks. Retain bounded known-host paths and a digest of effective policy. Use Every explicit HostKeyAlias, including literal none, verbatim at any port, matching the real-engine red/green oracle. Ambiguous expansions refuse admission instead of omitting existing trust. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: c2d18881cc. Evidence: evidence/ssh-bootstrap/run3/trust-configuration-fixed-alias-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16493104 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13869488 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [5.39s]

Completed Retain exact public SSH trust identity for first-contact checks. Retain bounded known-host paths and a digest of effective policy. Use Every explicit HostKeyAlias, including literal none, verbatim at any port, matching the real-engine red/green oracle. Ambiguous expansions refuse admission instead of omitting existing trust. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: c2d18881cc9236159b7146bcbc2763e4f8f38c99. Evidence: evidence/ssh-bootstrap/run3/trust-configuration-fixed-alias-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16493104 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13869488 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [5.39s]
Author
Owner

Manual fallback plan admission: actual JSON escaping is checked against the 32-KiB socket limit before readiness scheduling. Isolated exact-source plan tests: 2 passed, 0 failed, 0.10 s; public command 12,986 bytes, one line, invitation absent. Evidence: evidence/ssh-bootstrap/run3/manual-plan-frame-bound-green.log. This is construction/admission evidence, not signed-download execution. Production release/enrollment adapters remain required from #102/#78.

Manual fallback plan admission: actual JSON escaping is checked against the 32-KiB socket limit before readiness scheduling. Isolated exact-source plan tests: 2 passed, 0 failed, 0.10 s; public command 12,986 bytes, one line, invitation absent. Evidence: evidence/ssh-bootstrap/run3/manual-plan-frame-bound-green.log. This is construction/admission evidence, not signed-download execution. Production release/enrollment adapters remain required from #102/#78.
Author
Owner

Completed Test exact SSH aliases and reconstructable public trust paths. Assert explicit aliases including literal none are used verbatim at a nondefault port. Refuse unresolved or relative public paths for first-contact confirmation. Real OpenSSH regression evidence fails before the fix and passes afterwards. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 8b7c071734. Evidence: evidence/ssh-bootstrap/run3/trust-configuration-tests-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16493104 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13869488 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [5.34s]

Completed Test exact SSH aliases and reconstructable public trust paths. Assert explicit aliases including literal none are used verbatim at a nondefault port. Refuse unresolved or relative public paths for first-contact confirmation. Real OpenSSH regression evidence fails before the fix and passes afterwards. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 8b7c07173465bebbc6e51d7242356a70a03ac092. Evidence: evidence/ssh-bootstrap/run3/trust-configuration-tests-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16493104 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13869488 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [5.34s]
Author
Owner

Prepared verified manual fallback passes combined trust/manual plugin Clippy. Real-files transaction oracle: 11 passed, 0 failed, 12.39 s; private/public plan oracle: 2 passed, 0 failed, 0.04 s; missing signed catalog boundary: 1 passed, 0 failed, 0.03 s. The last oracle panics on invitation issue, SSH mutation, facts or canary, checks foreign/root refusal, and proves repeated failed-host admission remains available. Evidence: evidence/ssh-bootstrap/run3/manual-integrated-clippy.log, manual-integrated-tests.log, manual-runner-boundary-tests.log. Tests run on the owned pinned fixture with current trust/manual source drafts; root slices still receive separate full gates. No signed-artifact execution or production #78/#102 adapter integration is claimed.

Prepared verified manual fallback passes combined trust/manual plugin Clippy. Real-files transaction oracle: 11 passed, 0 failed, 12.39 s; private/public plan oracle: 2 passed, 0 failed, 0.04 s; missing signed catalog boundary: 1 passed, 0 failed, 0.03 s. The last oracle panics on invitation issue, SSH mutation, facts or canary, checks foreign/root refusal, and proves repeated failed-host admission remains available. Evidence: evidence/ssh-bootstrap/run3/manual-integrated-clippy.log, manual-integrated-tests.log, manual-runner-boundary-tests.log. Tests run on the owned pinned fixture with current trust/manual source drafts; root slices still receive separate full gates. No signed-artifact execution or production #78/#102 adapter integration is claimed.
Author
Owner

D185 selects minisign-style Ed25519 format, not a new foundational crypto library. The prepared manual prototype invokes the minisign reference executable only after trusted catalog admission; the production catalog default remains unavailable. This reference-tool prototype is not selection of the server release-verification engine: #102/owner still owns that integration and engine decision. No cryptography dependency is added and no release signing private key enters the server or fixture. Signed-reference execution compatibility still needs a real oracle before the fallback can be described as available.

D185 selects minisign-style Ed25519 format, not a new foundational crypto library. The prepared manual prototype invokes the minisign reference executable only after trusted catalog admission; the production catalog default remains unavailable. This reference-tool prototype is not selection of the server release-verification engine: #102/owner still owns that integration and engine decision. No cryptography dependency is added and no release signing private key enters the server or fixture. Signed-reference execution compatibility still needs a real oracle before the fallback can be described as available.
Author
Owner

Completed Define a fresh authority boundary for public SSH pin confirmation. Keep the credential engine independent of server sessions. Adapters must recheck the exact live owner capability immediately before publication; unsupported engines refuse confirmation by default. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: c92c9c4039. Evidence: evidence/ssh-bootstrap/run3/trust-boundary-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16493776 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13870240 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.21s]

Completed Define a fresh authority boundary for public SSH pin confirmation. Keep the credential engine independent of server sessions. Adapters must recheck the exact live owner capability immediately before publication; unsupported engines refuse confirmation by default. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: c92c9c4039a790d09d8752d990a204bf8d37f0b3. Evidence: evidence/ssh-bootstrap/run3/trust-boundary-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16493776 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13870240 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.21s]
Author
Owner

Current worktree x86_64 type-layout probe: Event 192 bytes; Failure 88 bytes. Actual admission limits are 1,024 retained events per batch, 16 batches, 100 targets per batch. Event arrays project to 196,608 bytes/batch and 3,145,728 bytes globally; +16 bytes/event from the prior 176-byte layout adds 262,144 bytes globally. Planned per-target last Failure values project to 8,800 bytes/batch and 140,800 bytes globally. These are fixed-value projections, excluding strings/vectors/hash-table capacity/allocator overhead, not measured RSS. Evidence: evidence/ssh-bootstrap/run3/event-layout-worktree.log. Final ten-target process RSS remains a separate measurement.

Current worktree x86_64 type-layout probe: Event 192 bytes; Failure 88 bytes. Actual admission limits are 1,024 retained events per batch, 16 batches, 100 targets per batch. Event arrays project to 196,608 bytes/batch and 3,145,728 bytes globally; +16 bytes/event from the prior 176-byte layout adds 262,144 bytes globally. Planned per-target last Failure values project to 8,800 bytes/batch and 140,800 bytes globally. These are fixed-value projections, excluding strings/vectors/hash-table capacity/allocator overhead, not measured RSS. Evidence: evidence/ssh-bootstrap/run3/event-layout-worktree.log. Final ten-target process RSS remains a separate measurement.
Author
Owner

Combined prepared trust/manual API now passes server+tests Clippy and the actual loopback software-passkey/socket suite: 7 passed, 0 failed, 6.64 s. New cases prove the exact confirmation capability refuses owner removal/logout and missing signed catalogs return typed error plus failed attempt, without private plan or additional SSH resolution. Evidence: evidence/ssh-bootstrap/run3/manual-and-trust-api-tests-fixed.log and manual-api-final-assembly-clippy.log. The earlier 6/1 run (manual-and-trust-api-tests.log, 11.34 s) caught a fixture assembly omission: the manual action was absent. The helper was repaired and syntax-checked before rerunning; no production assertion/deadline was relaxed. Packaged additive fixture patch applies cleanly to pinned #78 base 1f6e39b; root slices still receive separate full gates.

Combined prepared trust/manual API now passes server+tests Clippy and the actual loopback software-passkey/socket suite: 7 passed, 0 failed, 6.64 s. New cases prove the exact confirmation capability refuses owner removal/logout and missing signed catalogs return typed error plus failed attempt, without private plan or additional SSH resolution. Evidence: evidence/ssh-bootstrap/run3/manual-and-trust-api-tests-fixed.log and manual-api-final-assembly-clippy.log. The earlier 6/1 run (manual-and-trust-api-tests.log, 11.34 s) caught a fixture assembly omission: the manual action was absent. The helper was repaired and syntax-checked before rerunning; no production assertion/deadline was relaxed. Packaged additive fixture patch applies cleanly to pinned #78 base 1f6e39b; root slices still receive separate full gates.
Author
Owner

Completed Reuse effective SSH configuration for explicit public trust pins. Split already-resolved engine setup from endpoint resolution so trust checks and the connecting child use identical public policy. Credential materialization and cancellation-safe child ownership remain in the existing implementation. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: b29373784b. Evidence: evidence/ssh-bootstrap/run3/trust-openssh-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16495824 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13871440 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.32s]

Completed Reuse effective SSH configuration for explicit public trust pins. Split already-resolved engine setup from endpoint resolution so trust checks and the connecting child use identical public policy. Credential materialization and cancellation-safe child ownership remain in the existing implementation. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: b29373784bded4d3751f97bbc48b7ba239871c40. Evidence: evidence/ssh-bootstrap/run3/trust-openssh-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16495824 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13871440 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.32s]
Author
Owner

Manual fallback refinement before implementation: D185 fixes the signature format, while PROCESS section 3 leaves foundational crypto-engine selection to the owner/#102. Delegate the bounded public offline verification script and required executable names to the trusted verified-release catalog; request fields never choose either. The installer supplies only public payload/signature paths and the catalog public key. Synthetic plan tests can model the minisign reference invocation without making it a production engine choice. Keep the existing manual request/private-reply shape and fail-closed default catalog before invitation issuance.

Manual fallback refinement before implementation: D185 fixes the signature format, while PROCESS section 3 leaves foundational crypto-engine selection to the owner/#102. Delegate the bounded public offline verification script and required executable names to the trusted verified-release catalog; request fields never choose either. The installer supplies only public payload/signature paths and the catalog public key. Synthetic plan tests can model the minisign reference invocation without making it a production engine choice. Keep the existing manual request/private-reply shape and fail-closed default catalog before invitation issuance.
Author
Owner

Completed Record explicitly confirmed first-contact SSH pins without replacement. Observe only targets without matching configured trust, retaining at most 128 public challenges for 120 seconds. Bind confirmation to exact destination, policy and fingerprint, then recheck current trust and live authority. Publish owner-only public pins with create_new/fsync, never overwrite changed keys. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 21baed4745. Evidence: evidence/ssh-bootstrap/run3/trust-store-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16495888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13871440 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.28s]

Completed Record explicitly confirmed first-contact SSH pins without replacement. Observe only targets without matching configured trust, retaining at most 128 public challenges for 120 seconds. Bind confirmation to exact destination, policy and fingerprint, then recheck current trust and live authority. Publish owner-only public pins with create_new/fsync, never overwrite changed keys. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 21baed47457861d09e7934952b6413293c75afab. Evidence: evidence/ssh-bootstrap/run3/trust-store-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16495888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13871440 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.28s]
Author
Owner

Manual offline verification is now catalog-provided: bounded public script, at most four safe executable names, public artifact/signature paths and compiled public key. The installer selects no crypto engine. Prepared plugin Clippy passes; verifier/plan tests 3/3 in 0.02 s, missing-catalog admission 1/1 in 0.00 s, real passkey/socket API suite 7/7 in 6.58 s, server+tests Clippy green. Evidence: evidence/ssh-bootstrap/run3/manual-delegated-verifier-tests.log, manual-delegated-api-tests-fixed.log, manual-delegated-api-clippy.log. A fixture policy-reporting compile error (count declared too late) was fixed before rerunning, preserved in manual-delegated-api-tests.log. Single-target packaged proofs retain default SSH source penalties; ten-user shared-listener proofs record explicit isolation and permit comparison. The driver copies production native facts source/tests instead of duplicating the decoder. No signed-download execution or production catalog/remote-adapter availability is claimed.

Manual offline verification is now catalog-provided: bounded public script, at most four safe executable names, public artifact/signature paths and compiled public key. The installer selects no crypto engine. Prepared plugin Clippy passes; verifier/plan tests 3/3 in 0.02 s, missing-catalog admission 1/1 in 0.00 s, real passkey/socket API suite 7/7 in 6.58 s, server+tests Clippy green. Evidence: evidence/ssh-bootstrap/run3/manual-delegated-verifier-tests.log, manual-delegated-api-tests-fixed.log, manual-delegated-api-clippy.log. A fixture policy-reporting compile error (count declared too late) was fixed before rerunning, preserved in manual-delegated-api-tests.log. Single-target packaged proofs retain default SSH source penalties; ten-user shared-listener proofs record explicit isolation and permit comparison. The driver copies production native facts source/tests instead of duplicating the decoder. No signed-download execution or production catalog/remote-adapter availability is claimed.
Author
Owner

Completed Forward public host-key confirmation through ordered SSH authentication. Keep the shared trust store underneath every lazy authentication method. Confirmation carries no private authentication material and preserves the network/server/user/password selection order. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 0c5e41f798. Evidence: evidence/ssh-bootstrap/run3/trust-ordered-auth-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16495792 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13871280 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.18s]

Completed Forward public host-key confirmation through ordered SSH authentication. Keep the shared trust store underneath every lazy authentication method. Confirmation carries no private authentication material and preserves the network/server/user/password selection order. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 0c5e41f798a8408f8db14fcfc8dfefc85cbbac09. Evidence: evidence/ssh-bootstrap/run3/trust-ordered-auth-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16495792 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13871280 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.18s]
Author
Owner

Completed Bind SSH host-key confirmation to the failed host attempt. Retain the last public failure per target and require owner/batch membership, failed idle state, nonce and observed fingerprint. Resolve the trusted destination again before transport admission; retries clear the prior observation. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 7797415f81. Evidence: evidence/ssh-bootstrap/run3/trust-runner-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16496496 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13872048 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.61s]

Completed Bind SSH host-key confirmation to the failed host attempt. Retain the last public failure per target and require owner/batch membership, failed idle state, nonce and observed fingerprint. Resolve the trusted destination again before transport admission; retries clear the prior observation. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 7797415f816b465d8f1d15839bee500bb6637501. Evidence: evidence/ssh-bootstrap/run3/trust-runner-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16496496 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13872048 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.61s]
Author
Owner

Exact proposed public-keyscan syntax hook (body unchanged from production): AddressSanitizer, nightly-2026-09-30, CPUWeight=10000; 407,807 executions in 181 s, no findings, zero crash artifacts, peak ASan harness RSS 428 MiB. Ten synthetic public-format seeds include supported/unknown algorithms, malformed blob/UTF8, extra fields, exact/over-4-KiB blobs and 64-KiB whitespace. max_len=65,536 deliberately exceeds the actual 4-KiB scan envelope. This validates syntax bounds only; selected system SSH still validates cryptographic keys. Compilation/other jobs overlap, so counts/RSS are robustness diagnostics, not production performance acceptance. Evidence: evidence/ssh-bootstrap/run3/host-record-fuzz.log and host-record-fuzz-environment.txt. Root hook/target remain separate gated slices.

Exact proposed public-keyscan syntax hook (body unchanged from production): AddressSanitizer, nightly-2026-09-30, CPUWeight=10000; 407,807 executions in 181 s, no findings, zero crash artifacts, peak ASan harness RSS 428 MiB. Ten synthetic public-format seeds include supported/unknown algorithms, malformed blob/UTF8, extra fields, exact/over-4-KiB blobs and 64-KiB whitespace. max_len=65,536 deliberately exceeds the actual 4-KiB scan envelope. This validates syntax bounds only; selected system SSH still validates cryptographic keys. Compilation/other jobs overlap, so counts/RSS are robustness diagnostics, not production performance acceptance. Evidence: evidence/ssh-bootstrap/run3/host-record-fuzz.log and host-record-fuzz-environment.txt. Root hook/target remain separate gated slices.
Author
Owner

Completed Confirm first-contact SSH keys with fresh browser authority. Add ConfirmHostKey to the authenticated bootstrap socket. Publication rechecks the same live session owner after asynchronous trust lookups; acknowledge only a successful public pin. A separate explicit Retry resumes provisioning. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: e2479e9b72. Evidence: evidence/ssh-bootstrap/run3/trust-api-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16513392 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13886256 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [5.47s]

Completed Confirm first-contact SSH keys with fresh browser authority. Add ConfirmHostKey to the authenticated bootstrap socket. Publication rechecks the same live session owner after asynchronous trust lookups; acknowledge only a successful public pin. A separate explicit Retry resumes provisioning. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: e2479e9b72e61418c706b1d824227789a53759ff. Evidence: evidence/ssh-bootstrap/run3/trust-api-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16513392 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13886256 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [5.47s]
Author
Owner

Completed Share persistent SSH host pins in the default provisioning runtime. Wrap the selected system SSH adapter in one trust store under server data. All automatic methods and batches share immutable owner-only public pins. Missing enrollment integration continues to fail closed before host mutation. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: e967242ce6. Evidence: evidence/ssh-bootstrap/run3/trust-default-runtime-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [5.24s]

Completed Share persistent SSH host pins in the default provisioning runtime. Wrap the selected system SSH adapter in one trust store under server data. All automatic methods and batches share immutable owner-only public pins. Missing enrollment integration continues to fail closed before host mutation. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: e967242ce677445b96153281346dceca5a6b6bb6. Evidence: evidence/ssh-bootstrap/run3/trust-default-runtime-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [5.24s]
Author
Owner

Fast gate for the fresh SSH confirmation authority test failed before reaching server tests: vt_reconnect 0/1, 8.32 s, immediate-Pong assertion after legacy snapshot-unavailable. Preserved evidence: evidence/ssh-bootstrap/run3/trust-authority-reconnect-{stdout,stderr}.log and trust-api-authority-test-fast.log. The standalone observer passed wrapped/less and recorded stream=0 kind=9 twice; timing-sensitive immediate-frame assumption remains. Reuse existing Binary.fence to validate queued terminal frames and exact Pong nonce without extending deadlines. Separate regression slice under gate before resuming trust tests; no daemon behavior change.

Fast gate for the fresh SSH confirmation authority test failed before reaching server tests: vt_reconnect 0/1, 8.32 s, immediate-Pong assertion after legacy snapshot-unavailable. Preserved evidence: evidence/ssh-bootstrap/run3/trust-authority-reconnect-{stdout,stderr}.log and trust-api-authority-test-fast.log. The standalone observer passed wrapped/less and recorded stream=0 kind=9 twice; timing-sensitive immediate-frame assumption remains. Reuse existing Binary.fence to validate queued terminal frames and exact Pong nonce without extending deadlines. Separate regression slice under gate before resuming trust tests; no daemon behavior change.
Author
Owner

Reconnect fence evidence: full fast reconnect 1/1 in 16.33 s; two additional complete wrapped+less runs passed in 18.972/18.760 s. Third repetition failed earlier at retained replay (verify-vt-reconnect.py:79), before the changed fence: terminal command queue full (frame kind 15). Full Rust auth suite was running concurrently. Keep this distinct from the immediate-Pong failure; do not weaken queue checks or claim repeat 3/3. Evidence: reconnect-fence-repeat.log; root change remains only reuse of existing exact-nonce Binary.fence.

Reconnect fence evidence: full fast reconnect 1/1 in 16.33 s; two additional complete wrapped+less runs passed in 18.972/18.760 s. Third repetition failed earlier at retained replay (verify-vt-reconnect.py:79), before the changed fence: terminal command queue full (frame kind 15). Full Rust auth suite was running concurrently. Keep this distinct from the immediate-Pong failure; do not weaken queue checks or claim repeat 3/3. Evidence: reconnect-fence-repeat.log; root change remains only reuse of existing exact-nonce Binary.fence.
Author
Owner

Completed Fence reconnect liveness after queued terminal events. The #87 fast gate reproduced a legacy reconnect failure: its assertion expected the next multiplexed frame to be Pong immediately after seeing a snapshot-unavailable event. Already queued terminal frames may arrive first. Use the existing Binary.fence to validate those frames and the exact Pong nonce while retaining the existing bounded socket deadline. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: e9446aedfd. Evidence: evidence/ssh-bootstrap/run3/reconnect-queued-frame-fence-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [5.09s]

Completed Fence reconnect liveness after queued terminal events. The #87 fast gate reproduced a legacy reconnect failure: its assertion expected the next multiplexed frame to be Pong immediately after seeing a snapshot-unavailable event. Already queued terminal frames may arrive first. Use the existing Binary.fence to validate those frames and the exact Pong nonce while retaining the existing bounded socket deadline. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: e9446aedfd6261d9c3c63f9b57a925defc79fe0a. Evidence: evidence/ssh-bootstrap/run3/reconnect-queued-frame-fence-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [5.09s]
Author
Owner

Verified codex.job=ssh-bootstrap-run3 on exact container infraternal-ssh-bootstrap-run3-target. Checked disposable normal uids 1101–1110: all installation/unit/launcher absent, all live canary counts zero. Removing only this owned container and infraternal-ssh-bootstrap-run3:fixture image before reproducible final-source runs. Earlier proof cleanup remains intact; no host installations or other job resources affected.

Verified codex.job=ssh-bootstrap-run3 on exact container infraternal-ssh-bootstrap-run3-target. Checked disposable normal uids 1101–1110: all installation/unit/launcher absent, all live canary counts zero. Removing only this owned container and infraternal-ssh-bootstrap-run3:fixture image before reproducible final-source runs. Earlier proof cleanup remains intact; no host installations or other job resources affected.
Author
Owner

Completed Test exact live browser authority before SSH host pin publication. Use the real software-passkey capability and in-memory auth database. Confirm admission, remove owner authority, restore it, then logout the exact session; the same confirmation proof must immediately refuse after either revocation. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: fe9776d5c1. Evidence: evidence/ssh-bootstrap/run3/trust-api-authority-test-after-fence-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [4.25s]

Completed Test exact live browser authority before SSH host pin publication. Use the real software-passkey capability and in-memory auth database. Confirm admission, remove owner authority, restore it, then logout the exact session; the same confirmation proof must immediately refuse after either revocation. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: fe9776d5c1db114a8a3c6d4d4027bd8181ac2d0c. Evidence: evidence/ssh-bootstrap/run3/trust-api-authority-test-after-fence-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.25s]
Author
Owner

Completed Make repeated negative SSH trust policy isolation explicit. Retain default listener penalties for normal client benchmarks. Allow only an explicit negative-trust oracle flag to isolate repeated keyscan/early-close throttling, and record the chosen policy in the environment measurement. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 9a1a498977. Evidence: evidence/ssh-bootstrap/run3/trust-negative-fixture-policy-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.92s]

Completed Make repeated negative SSH trust policy isolation explicit. Retain default listener penalties for normal client benchmarks. Allow only an explicit negative-trust oracle flag to isolate repeated keyscan/early-close throttling, and record the chosen policy in the environment measurement. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 9a1a49897759798b3c35b35ad299bda8e522882a. Evidence: evidence/ssh-bootstrap/run3/trust-negative-fixture-policy-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.92s]
Author
Owner

Integration refresh: #78 now records real CA unlock authority commits 473c2fb7/70878389 and HTTP preview, but explicitly says shipping HTTP/CLI/provisioning/role lifecycle remains separate. Current dev=63b1f10e has newer UI work; no production provisioning adapter has landed there. Main=eecf6ace adds D198 (removable/switchable role plugins); #87 transport/plans remain in infraternal-plugin-ssh. Production #78/#102 backend binding must use that declared plugin lifecycle instead of adding persistent core background work. Continue the approved stable-contract two-process proof; do not claim production join/release/manual fallback availability. The o1 trust prerequisite remains unsatisfied as recorded earlier.

Integration refresh: #78 now records real CA unlock authority commits 473c2fb7/70878389 and HTTP preview, but explicitly says shipping HTTP/CLI/provisioning/role lifecycle remains separate. Current dev=63b1f10e has newer UI work; no production provisioning adapter has landed there. Main=eecf6ace adds D198 (removable/switchable role plugins); #87 transport/plans remain in infraternal-plugin-ssh. Production #78/#102 backend binding must use that declared plugin lifecycle instead of adding persistent core background work. Continue the approved stable-contract two-process proof; do not claim production join/release/manual fallback availability. The o1 trust prerequisite remains unsatisfied as recorded earlier.
Author
Owner

Completed Prove first-contact admission and immutable pins against real SSH. Exercise revoked authority, foreign destinations, normal/CA/revoked records, nondefault aliases including literal none, replay refusal and an actual confirmed private-key command. Introduced configured trust must supersede a pending challenge and later revoked trust cannot broaden stored acceptance. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 4c6bbbbe47. Evidence: evidence/ssh-bootstrap/run3/trust-real-engine-tests-after-lint-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [6.26s]

Completed Prove first-contact admission and immutable pins against real SSH. Exercise revoked authority, foreign destinations, normal/CA/revoked records, nondefault aliases including literal none, replay refusal and an actual confirmed private-key command. Introduced configured trust must supersede a pending challenge and later revoked trust cannot broaden stored acceptance. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 4c6bbbbe4727f542a9aba1468d927da517810689. Evidence: evidence/ssh-bootstrap/run3/trust-real-engine-tests-after-lint-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [6.26s]
Author
Owner

Committed canonical real-SSH oracle PASS 1/1 in 4.48 s at 4c6bbbbe47. CPUWeight=10000, infraternal-dev/8 cores, load30.84/23.12/21.02; explicit negative-test source_penalties=isolated. Fresh authority required; foreign target refused; introduced normal/CA/revoked trust refused; nondefault aliases including literal none respected; replay refused; confirmed private-key command succeeds; persistent pin unchanged and later revoked trust cannot broaden acceptance. Evidence: evidence/ssh-bootstrap/run3/committed-trust-oracle.log. This is a correctness oracle, not latency acceptance. Full fast commit gate output already attached above.

Committed canonical real-SSH oracle PASS 1/1 in 4.48 s at 4c6bbbbe4727f542a9aba1468d927da517810689. CPUWeight=10000, infraternal-dev/8 cores, load30.84/23.12/21.02; explicit negative-test source_penalties=isolated. Fresh authority required; foreign target refused; introduced normal/CA/revoked trust refused; nondefault aliases including literal none respected; replay refused; confirmed private-key command succeeds; persistent pin unchanged and later revoked trust cannot broaden acceptance. Evidence: evidence/ssh-bootstrap/run3/committed-trust-oracle.log. This is a correctness oracle, not latency acceptance. Full fast commit gate output already attached above.
Author
Owner

Gate execution setting: subsequent separately gated slices use RUST_TEST_THREADS=2 instead of the earlier serial diagnostic setting. No tests are skipped, no assertions/deadlines/budgets are changed; scripts/verify fast still runs the full workspace and both static targets. Current in-flight parser hook/target retain the already loaded setting=1. CPUWeight=10000 and TRACER_TEST_PORT=4787 remain. Per-slice logs record full output and failures remain preserved rather than retried silently.

Gate execution setting: subsequent separately gated slices use RUST_TEST_THREADS=2 instead of the earlier serial diagnostic setting. No tests are skipped, no assertions/deadlines/budgets are changed; scripts/verify fast still runs the full workspace and both static targets. Current in-flight parser hook/target retain the already loaded setting=1. CPUWeight=10000 and TRACER_TEST_PORT=4787 remain. Per-slice logs record full output and failures remain preserved rather than retried silently.
Author
Owner

Completed Expose exact public keyscan syntax to robustness tests. Add only a hidden decoder hook and role comments; no parser or runtime behavior changes. Preserve the already validated lookup boundary and delegate actual key validation to the selected system SSH engine. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: a60ce4a83f. Evidence: evidence/ssh-bootstrap/run3/host-record-parser-hook-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.60s]

Completed Expose exact public keyscan syntax to robustness tests. Add only a hidden decoder hook and role comments; no parser or runtime behavior changes. Preserve the already validated lookup boundary and delegate actual key validation to the selected system SSH engine. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: a60ce4a83f1519492cdf92b84c55b89cbe8ebab9. Evidence: evidence/ssh-bootstrap/run3/host-record-parser-hook-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.60s]
Author
Owner

Completed Fuzz bounded SSH keyscan record syntax. Check arbitrary synthetic output up to the 64-KiB process-output envelope. Independently assert exactly three reconstructed fields, fixed lookup, supported algorithm, bounded base64-shaped blob and terminated public record. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 1bffd0061e. Evidence: evidence/ssh-bootstrap/run3/host-record-parser-fuzzer-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [6.53s]

Completed Fuzz bounded SSH keyscan record syntax. Check arbitrary synthetic output up to the 64-KiB process-output envelope. Independently assert exactly three reconstructed fields, fixed lookup, supported algorithm, bounded base64-shaped blob and terminated public record. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 1bffd0061eb92bdcc21d93ecb3766b9ba0f5509f. Evidence: evidence/ssh-bootstrap/run3/host-record-parser-fuzzer-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [6.53s]
Author
Owner

Fixture reproduction review found obsolete facts dispatch: after copying the exact strict production/proposed module, snapshot cargo check failed E0603 private struct Input. Preserve private map-only input type; change only fixture dispatch to crate::facts::accepts_request(input_json), the same bounded decoder production uses. Corrected cargo check PASS33.14s; fixture.patch applies cleanly to fresh owned git archive1f6e39b. Logs: evidence/ssh-bootstrap/run3/fixture-strict-facts-dispatch-{red,green}.log. Patch remains an independent forthcoming gated fixture slice; no remote-agents worktree changes.

Fixture reproduction review found obsolete facts dispatch: after copying the exact strict production/proposed module, snapshot cargo check failed E0603 private struct Input. Preserve private map-only input type; change only fixture dispatch to crate::facts::accepts_request(input_json), the same bounded decoder production uses. Corrected cargo check PASS33.14s; fixture.patch applies cleanly to fresh owned git archive1f6e39b. Logs: evidence/ssh-bootstrap/run3/fixture-strict-facts-dispatch-{red,green}.log. Patch remains an independent forthcoming gated fixture slice; no remote-agents worktree changes.
Author
Owner

Completed Collect bounded native host facts without discovery. Expose platform, architecture, execution uid, release version and OS concurrency policy. Share a 256-byte empty-object decoder that explicitly requires map syntax: derived empty structs also accepted arrays in the recorded failing real-source regression. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: ad2cc7d588. Evidence: evidence/ssh-bootstrap/run3/native-facts-module-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.46s]

Completed Collect bounded native host facts without discovery. Expose platform, architecture, execution uid, release version and OS concurrency policy. Share a 256-byte empty-object decoder that explicitly requires map syntax: derived empty structs also accepted arrays in the recorded failing real-source regression. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: ad2cc7d5883025814b3d2a2c6ded4d12dc6f0cfb. Evidence: evidence/ssh-bootstrap/run3/native-facts-module-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.46s]
Author
Owner

Completed Test native facts object syntax and exact admission bounds. Exercise array/null/scalar/parameter/concatenated JSON refusals and the exact 256-byte boundary. Keep the earlier array regression red/green evidence in the issue instead of broadening the accepted request shape. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 9dbb73a8b8. Evidence: evidence/ssh-bootstrap/run3/native-facts-tests-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.43s]

Completed Test native facts object syntax and exact admission bounds. Exercise array/null/scalar/parameter/concatenated JSON refusals and the exact 256-byte boundary. Keep the earlier array regression red/green evidence in the issue instead of broadening the accepted request shape. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 9dbb73a8b8826255ac24179c283166632398de68. Evidence: evidence/ssh-bootstrap/run3/native-facts-tests-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16555888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13916288 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.43s]
Author
Owner

Completed Serve cheap host facts on the authenticated control stream. Handle host.facts only on stream zero using the shared bounded decoder. Return a short content-free error for invalid requests and native facts from the actual execution uid; preserve terminal and transport framing. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: f9bfabcb91. Evidence: evidence/ssh-bootstrap/run3/native-facts-dispatch-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.30s]

Completed Serve cheap host facts on the authenticated control stream. Handle host.facts only on stream zero using the shared bounded decoder. Return a short content-free error for invalid requests and native facts from the actual execution uid; preserve terminal and transport framing. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: f9bfabcb9119948fe49eba46682d0b6f82d0e8db. Evidence: evidence/ssh-bootstrap/run3/native-facts-dispatch-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.30s]
Author
Owner

Completed Reuse the workspace JSON decoder in admission fuzz targets. Use the already selected serde_json version to fuzz the exact production credential and native-facts decoders. No new foundational parser is selected. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 77afe3d935. Evidence: evidence/ssh-bootstrap/run3/parser-fuzz-json-dependency-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.98s]

Completed Reuse the workspace JSON decoder in admission fuzz targets. Use the already selected serde_json version to fuzz the exact production credential and native-facts decoders. No new foundational parser is selected. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 77afe3d935819621cbefab416884223e87d28135. Evidence: evidence/ssh-bootstrap/run3/parser-fuzz-json-dependency-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.98s]
Author
Owner

Completed Fuzz one-use SSH credential decoding and content bounds. Exercise arbitrary synthetic input through bounded zeroizing input-only material. Assert valid key/prompt sizes, no control bytes, field relationships and a server-controlled 60-second lifetime within the real 32-KiB frame bound. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 6e7f0f75a1. Evidence: evidence/ssh-bootstrap/run3/ssh-one-use-fuzzer-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.76s]

Completed Fuzz one-use SSH credential decoding and content bounds. Exercise arbitrary synthetic input through bounded zeroizing input-only material. Assert valid key/prompt sizes, no control bytes, field relationships and a server-controlled 60-second lifetime within the real 32-KiB frame bound. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 6e7f0f75a161618b8cdd7350c528553d85857bca. Evidence: evidence/ssh-bootstrap/run3/ssh-one-use-fuzzer-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.76s]
Author
Owner

Completed Fuzz the exact native facts empty-object admission decoder. Call the shared production decoder and independently assert accepted inputs are empty JSON objects no larger than 256 bytes. The prior array regression remains refused without executing discovery or host subprocesses. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 390e92d919. Evidence: evidence/ssh-bootstrap/run3/native-facts-fuzzer-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.88s]

Completed Fuzz the exact native facts empty-object admission decoder. Call the shared production decoder and independently assert accepted inputs are empty JSON objects no larger than 256 bytes. The prior array regression remains refused without executing discovery or host subprocesses. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 390e92d9195b21ae1379ccb99793fb1dbf01f827. Evidence: evidence/ssh-bootstrap/run3/native-facts-fuzzer-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.88s]
Author
Owner

Completed Document one-use SSH inputs and first-contact confirmation for the UI. Specify per-target Start material, fresh Retry material, bounds and lifetime. Document owner-bound public challenge confirmation followed by explicit retry, pin persistence and unchanged/CA/revoked refusal, including external trust-edit races and missing production enrollment integration. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: bd7532e8ae. Evidence: evidence/ssh-bootstrap/run3/browser-private-and-trust-contract-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.85s]

Completed Document one-use SSH inputs and first-contact confirmation for the UI. Specify per-target Start material, fresh Retry material, bounds and lifetime. Document owner-bound public challenge confirmation followed by explicit retry, pin persistence and unchanged/CA/revoked refusal, including external trust-edit races and missing production enrollment integration. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: bd7532e8aeeb1566d850148bb755fa5d35f1cb2c. Evidence: evidence/ssh-bootstrap/run3/browser-private-and-trust-contract-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.85s]
Author
Owner

Completed Reuse the selected JSON encoder for private manual reply bounds. Move the existing workspace JSON dependency into production scope so the private response can be bounded after actual escaping, before task admission. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 87110934f9. Evidence: evidence/ssh-bootstrap/run3/manual-json-dependency-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [3.54s]

Completed Reuse the selected JSON encoder for private manual reply bounds. Move the existing workspace JSON dependency into production scope so the private response can be bounded after actual escaping, before task admission. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 87110934f908602508b47510ff59048ae1639eb3. Evidence: evidence/ssh-bootstrap/run3/manual-json-dependency-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.54s]
Author
Owner

Completed Publish a host transaction readiness receipt for manual installation. Add a public exact-transaction receipt before manual lock release. Remove it on fresh rollback, including interruption before commit, while preserving existing upgrade state and the ordinary SSH commit path. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: 8c0c24620e. Evidence: evidence/ssh-bootstrap/run3/manual-readiness-receipt-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.61s]

Completed Publish a host transaction readiness receipt for manual installation. Add a public exact-transaction receipt before manual lock release. Remove it on fresh rollback, including interruption before commit, while preserving existing upgrade state and the ordinary SSH commit path. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: 8c0c24620e676fb9e8e684ba60e2451d98d86a6f. Evidence: evidence/ssh-bootstrap/run3/manual-readiness-receipt-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.61s]
Author
Owner

Completed Test interrupted manual readiness publication against real files. Preserve the recorded failing orphan-directory regression and exercise rollback after receipt publication but before lock release. Full fast gate green; fixture evidence remains diagnostic until production integration.
Head: b0481a6387. Evidence: evidence/ssh-bootstrap/run3/manual-readiness-regression-fast.log. scripts/verify fast exit 0; summary verbatim:

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

PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
7 pass
0 fail
34390 expect() calls
Ran 7 tests across 2 files. [2.66s]

Completed Test interrupted manual readiness publication against real files. Preserve the recorded failing orphan-directory regression and exercise rollback after receipt publication but before lock release. Full fast gate green; fixture evidence remains diagnostic until production integration. Head: b0481a63876e2e67235e7ccfa0ccafe3af21a350. Evidence: evidence/ssh-bootstrap/run3/manual-readiness-regression-fast.log. scripts/verify fast exit 0; summary verbatim: ``` | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 16559888 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.66s]
Author
Owner

ssh-bootstrap run stopped by a provider filter after 126 commits (head b0481a63; a one-line WIP saved as d0290f6e). A verification review starts now on the head before the next run.

ssh-bootstrap run stopped by a provider filter after 126 commits (head b0481a63; a one-line WIP saved as d0290f6e). A verification review starts now on the head before the next run.
Author
Owner

Independent verification started on review-ssh-bootstrap at target d0290f6e; merge base with dev 459070fe3b. Read contract/process, main decisions, #87 and parent #5 history. Requested author result.md is absent; using committed evidence and issue claims. Only review tests/evidence will change; no implementation fixes, push, deployment or host-key acceptance.

Independent verification started on review-ssh-bootstrap at target d0290f6e; merge base with dev 459070fe3b75548382e8e19fba86af20439cf607. Read contract/process, main decisions, #87 and parent #5 history. Requested author result.md is absent; using committed evidence and issue claims. Only review tests/evidence will change; no implementation fixes, push, deployment or host-key acceptance.
Author
Owner

R01 P1: target d0290f6e adds pub mod manual at crates/plugins/ssh/src/lib.rs:10, but neither src/manual.rs nor src/manual/mod.rs exists. Dependency-free Rust test declared_public_modules_have_committed_sources fails (exit101) with declared public module manual has no source file. All Cargo consumers are blocked by E0583. Evidence: /home/kayg/.cache/codex-scratch/ssh-bootstrap-review/R01.log. Review tests will be committed without implementation fixes.

R01 P1: target d0290f6e adds pub mod manual at crates/plugins/ssh/src/lib.rs:10, but neither src/manual.rs nor src/manual/mod.rs exists. Dependency-free Rust test declared_public_modules_have_committed_sources fails (exit101) with declared public module manual has no source file. All Cargo consumers are blocked by E0583. Evidence: /home/kayg/.cache/codex-scratch/ssh-bootstrap-review/R01.log. Review tests will be committed without implementation fixes.
Author
Owner

R02 P1 confirmed, review commit 1db8f64025: rollback ignores service stop refusal (install.rs:328), deletes identity/binary/transaction and reports success while the activated daemon may remain live. Existing real-file manager fixture regression rollback_stop_refusal_retains_artifacts_for_later_cleanup: 0 passed/1 failed, 0.34s. Tested b0481a63, source-identical to d0290f6e except the missing manual module declaration; target itself cannot compile (R01). Evidence /home/kayg/.cache/codex-scratch/ssh-bootstrap-review/R02.log. No implementation changed.

R02 P1 confirmed, review commit 1db8f6402540bea21a5c621a4d3b02cf88260a94: rollback ignores service stop refusal (install.rs:328), deletes identity/binary/transaction and reports success while the activated daemon may remain live. Existing real-file manager fixture regression rollback_stop_refusal_retains_artifacts_for_later_cleanup: 0 passed/1 failed, 0.34s. Tested b0481a63, source-identical to d0290f6e except the missing manual module declaration; target itself cannot compile (R01). Evidence /home/kayg/.cache/codex-scratch/ssh-bootstrap-review/R02.log. No implementation changed.
Author
Owner

Review steps committed: R03 b0b2f59f (P2, normal helper completion leaves pipe-detached real child live; oracle 0/1, 0.00s, birth-checked child cleanup); R04 a7fdd548 (P2, denied linger intent reverses later external enable; 0/1, 0.16s); R05 0f9e525b (P2, interrupted fresh rollback loses cleanup after lock removal; 0/1, 0.24s). All reuse normal Rust fixtures on b0481a63 diagnostic checkout; target differs only by its missing manual module declaration. Evidence R03.log/R04.log/R05.log under /home/kayg/.cache/codex-scratch/ssh-bootstrap-review. Each test committed separately; no implementation fixes. Target fast gate is running; Cargo already reports E0583 for manual.

Review steps committed: R03 b0b2f59f (P2, normal helper completion leaves pipe-detached real child live; oracle 0/1, 0.00s, birth-checked child cleanup); R04 a7fdd548 (P2, denied linger intent reverses later external enable; 0/1, 0.16s); R05 0f9e525b (P2, interrupted fresh rollback loses cleanup after lock removal; 0/1, 0.24s). All reuse normal Rust fixtures on b0481a63 diagnostic checkout; target differs only by its missing manual module declaration. Evidence R03.log/R04.log/R05.log under /home/kayg/.cache/codex-scratch/ssh-bootstrap-review. Each test committed separately; no implementation fixes. Target fast gate is running; Cargo already reports E0583 for manual.
Author
Owner

Diagnostic control checks complete: 29 passed, 0 failed, 1 ignored; four confirmed behavioral regressions excluded explicitly. Two setup retries corrected Unix socket path length, not product policy. Real rootless sshd (synthetic memory-held keys): authentication/trust/cleanup 1/1, 3.81s; single-connection/helper-erasure/lost-master 1/1, 0.46s. Ten read-only commands: local232ms/300ms-RTT851ms; controller5032/5044KiB peak, SSH children92316/92120KiB. Controlled1000 targets/10batches: active_peak8, RSS4636→7976→8468KiB,56ms; load28.10/28.61/23.93, infraternal-dev8cores CPUWeight10000. Component/debug observations on b0481a63; not full provisioning, terminal latency or whole-server acceptance. Target missing manual module still blocks Cargo; exact-head gate and delayed-confirmation regression pending builds. Requested author result.md remains absent.

Diagnostic control checks complete: 29 passed, 0 failed, 1 ignored; four confirmed behavioral regressions excluded explicitly. Two setup retries corrected Unix socket path length, not product policy. Real rootless sshd (synthetic memory-held keys): authentication/trust/cleanup 1/1, 3.81s; single-connection/helper-erasure/lost-master 1/1, 0.46s. Ten read-only commands: local232ms/300ms-RTT851ms; controller5032/5044KiB peak, SSH children92316/92120KiB. Controlled1000 targets/10batches: active_peak8, RSS4636→7976→8468KiB,56ms; load28.10/28.61/23.93, infraternal-dev8cores CPUWeight10000. Component/debug observations on b0481a63; not full provisioning, terminal latency or whole-server acceptance. Target missing manual module still blocks Cargo; exact-head gate and delayed-confirmation regression pending builds. Requested author result.md remains absent.
Author
Owner

R06 P1 confirmed, review commit 1ea28db7a5: bootstrap_api.rs awaits confirm_host_key inside its receive branch; a stalled backend lookup prevents logout/revocation from retiring the socket. Real software-passkey/TCP test logout_interrupts_a_stalled_host_key_confirmation_lookup logs out after the confirmation lookup starts; its socket permit stays occupied past2s. 0 passed/1 failed,2.99s; lookup released after observation, no pin published. Diagnostic b0481a63 has identical implementation to d0290f6e except the missing module declaration. Evidence /home/kayg/.cache/codex-scratch/ssh-bootstrap-review/R06-retry.log. No implementation fix.

R06 P1 confirmed, review commit 1ea28db7a54dee12fb36c6991b4db349570aa6d0: bootstrap_api.rs awaits confirm_host_key inside its receive branch; a stalled backend lookup prevents logout/revocation from retiring the socket. Real software-passkey/TCP test logout_interrupts_a_stalled_host_key_confirmation_lookup logs out after the confirmation lookup starts; its socket permit stays occupied past2s. 0 passed/1 failed,2.99s; lookup released after observation, no pin published. Diagnostic b0481a63 has identical implementation to d0290f6e except the missing module declaration. Evidence /home/kayg/.cache/codex-scratch/ssh-bootstrap-review/R06-retry.log. No implementation fix.
Author
Owner

R07 P1 confirmed, review commit ca67875459: config.rs drops KnownHostsCommand and openssh.rs forces KnownHostsCommand=none. Normal system OpenSSH refuses a synthetic host key marked @revoked by that configured public trust command; TrustedOpenSsh instead returns a first-contact challenge for the same revoked key. Real-sshd differential regression configured_known_hosts_command_revocation_cannot_offer_first_contact: 0 passed/1 failed,0.37s; load17.49/22.15/22.62, CPUWeight10000, default listener penalties. No pin was confirmed and no real host contacted. Evidence /home/kayg/.cache/codex-scratch/ssh-bootstrap-review/R07-retry.log. Diagnostic b0481a63 implementation matches target except missing module declaration.

R07 P1 confirmed, review commit ca67875459df006f876cbc5936f41dac3a0a13f6: config.rs drops KnownHostsCommand and openssh.rs forces KnownHostsCommand=none. Normal system OpenSSH refuses a synthetic host key marked @revoked by that configured public trust command; TrustedOpenSsh instead returns a first-contact challenge for the same revoked key. Real-sshd differential regression configured_known_hosts_command_revocation_cannot_offer_first_contact: 0 passed/1 failed,0.37s; load17.49/22.15/22.62, CPUWeight10000, default listener penalties. No pin was confirmed and no real host contacted. Evidence /home/kayg/.cache/codex-scratch/ssh-bootstrap-review/R07-retry.log. Diagnostic b0481a63 implementation matches target except missing module declaration.
Author
Owner

R08 P2, review commit b6f5bd9a1c: D198 build-time removal is absent. CLI/server depend unconditionally on infraternal-plugin-ssh and expose no Cargo feature for removal. Standalone Rust test build_without_default_plugins_excludes_ssh_dependency checks cargo tree --offline --locked --package infraternal --no-default-features --edges normal: SSH remains in the binary dependency closure (0 passed/1 failed,1.29s). Evidence R08.log under /home/kayg/.cache/codex-scratch/ssh-bootstrap-review. No dependency/manifests changed. Counts now P0=0/P1=4/P2=4/P3=0.

R08 P2, review commit b6f5bd9a1c9b64661c1346f8ee0e67b45eec82be: D198 build-time removal is absent. CLI/server depend unconditionally on infraternal-plugin-ssh and expose no Cargo feature for removal. Standalone Rust test build_without_default_plugins_excludes_ssh_dependency checks cargo tree --offline --locked --package infraternal --no-default-features --edges normal: SSH remains in the binary dependency closure (0 passed/1 failed,1.29s). Evidence R08.log under /home/kayg/.cache/codex-scratch/ssh-bootstrap-review. No dependency/manifests changed. Counts now P0=0/P1=4/P2=4/P3=0.
Author
Owner

Verdict: do not merge. P0=0, P1=4, P2=4, P3=0. Eight failing Rust tests committed separately on review-ssh-bootstrap; review head e2901a0e97. Target d0290f6e46; merge base459070fe3b75548382e8e19fba86af20439cf607. Findings: missing module; ignored rollback stop refusal; retained helper child; external linger reversal; incomplete fresh rollback recovery; stalled confirmation survives logout; command-supplied revocation discarded; missing D198 build-time removal. No implementation fixes/push/deploy/real host-key acceptance.

Exact detached target scripts/verify fast exit1 (E0583 missing manual); TypeScript gates not reached. Verbatim gate output summary:

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

Full raw output and test/measurement evidence committed in docs/reviews/ssh-bootstrap-87-evidence.md; verdict/checklist in docs/reviews/ssh-bootstrap-87.md. Diagnostic behavior tests use b0481a63, whose only difference from target is the missing-module declaration.29 control tests pass; real SSH trust/lifecycle checks pass; ASan1129630 executions/21s/no crash;1000 targets active_peak8/RSS7976KiB held;200 SSH clients private318000KiB. These are component diagnostics, not production #78/latency acceptance. Review-only formatting and diagnostic plugin/server Clippy pass. Requested author result.md absent. Owned scratch targets/fixtures/checkouts are being removed; issues remain open.

Verdict: do not merge. P0=0, P1=4, P2=4, P3=0. Eight failing Rust tests committed separately on review-ssh-bootstrap; review head e2901a0e9752af964f38c9e0fa029e61326594b1. Target d0290f6e465b4e4f589b562aef78f1641aedcce3; merge base459070fe3b75548382e8e19fba86af20439cf607. Findings: missing module; ignored rollback stop refusal; retained helper child; external linger reversal; incomplete fresh rollback recovery; stalled confirmation survives logout; command-supplied revocation discarded; missing D198 build-time removal. No implementation fixes/push/deploy/real host-key acceptance. Exact detached target scripts/verify fast exit1 (E0583 missing manual); TypeScript gates not reached. Verbatim gate output summary: ```text +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | FAIL (1) | | VT native fmt | PASS | | clippy | FAIL (101) | | test | FAIL (101) | | cargo-deny | PASS | | static builds | FAIL (101) | +---------------------------+--------------+ ``` Full raw output and test/measurement evidence committed in docs/reviews/ssh-bootstrap-87-evidence.md; verdict/checklist in docs/reviews/ssh-bootstrap-87.md. Diagnostic behavior tests use b0481a63, whose only difference from target is the missing-module declaration.29 control tests pass; real SSH trust/lifecycle checks pass; ASan1129630 executions/21s/no crash;1000 targets active_peak8/RSS7976KiB held;200 SSH clients private318000KiB. These are component diagnostics, not production #78/latency acceptance. Review-only formatting and diagnostic plugin/server Clippy pass. Requested author result.md absent. Owned scratch targets/fixtures/checkouts are being removed; issues remain open.
Author
Owner

Repair round started on ssh-bootstrap at d0290f6e46, sole writer. Read #87/parent #5 history, repository contract/process, git log -30, and all eight review findings at e2901a0e. Inherited untracked manual.rs draft exists locally but was absent from committed review target. Drop unfinished declaration first, preserve draft, merge dev, then reproduce/fix P1 before P2 in separate gated commits. No push/deploy/remote host changes. Evidence under HOME cache ssh-bootstrap.

Repair round started on ssh-bootstrap at d0290f6e465b4e4f589b562aef78f1641aedcce3, sole writer. Read #87/parent #5 history, repository contract/process, git log -30, and all eight review findings at e2901a0e. Inherited untracked manual.rs draft exists locally but was absent from committed review target. Drop unfinished declaration first, preserve draft, merge dev, then reproduce/fix P1 before P2 in separate gated commits. No push/deploy/remote host changes. Evidence under HOME cache ssh-bootstrap.
Author
Owner

R01 reproduced on an archived committed source tree: declared_public_modules_have_committed_sources fails 0/1 with manual missing; passes 1/1 after dropping only the unfinished declaration. Inherited untracked manual.rs remains preserved and unregistered. Full fast gate building from fresh HOME cache; native terminal compilation ongoing. Logs r01-red.log/r01-green.log/r01-fast.log under ~/.cache/codex-scratch/ssh-bootstrap.

R01 reproduced on an archived committed source tree: declared_public_modules_have_committed_sources fails 0/1 with manual missing; passes 1/1 after dropping only the unfinished declaration. Inherited untracked manual.rs remains preserved and unregistered. Full fast gate building from fresh HOME cache; native terminal compilation ongoing. Logs r01-red.log/r01-green.log/r01-fast.log under ~/.cache/codex-scratch/ssh-bootstrap.
Author
Owner

First R01 fast attempt: Clippy passed; test row stopped at initial_attach_requires_explicit_credit_before_replay because inherited target symlink referenced deleted ssh-bootstrap-run3 cache (FileNotFoundError creating target/ac...). Repointed only untracked target link to this job build cache. Direct unchanged real-PTY harness now PASS: no Output/Snapshot for350ms, control responsive, funded replay149bytes in644.1ms. r01-fast.log/r01-attach-recheck.log. Remaining static builds still running; full gate will be rerun after setup repair. No assertions/deadlines changed.

First R01 fast attempt: Clippy passed; test row stopped at initial_attach_requires_explicit_credit_before_replay because inherited target symlink referenced deleted ssh-bootstrap-run3 cache (FileNotFoundError creating target/ac...). Repointed only untracked target link to this job build cache. Direct unchanged real-PTY harness now PASS: no Output/Snapshot for350ms, control responsive, funded replay149bytes in644.1ms. r01-fast.log/r01-attach-recheck.log. Remaining static builds still running; full gate will be rerun after setup repair. No assertions/deadlines changed.
Author
Owner

Independent scratch reproductions against the current compiled source (only R01 declaration removed, dev merge still pending): R02 rollback_stop_refusal_retains_artifacts_for_later_cleanup FAIL0/1 in0.21s, rollback reports success after refused stop. R07 configured_known_hosts_command_revocation_cannot_offer_first_contact FAIL0/1 in0.60s: normal real OpenSSH enforces synthetic command revocation, bootstrap offers a first-contact challenge. Disposable rootless sshd, default source penalties, infraternal-dev8cores CPUWeight10000 load34.51/30.58/27.27; no pin confirmed. Logs r02-red.log/r07-red.log under HOME cache ssh-bootstrap. Gated checkout was unchanged during these standalone review-test builds.

Independent scratch reproductions against the current compiled source (only R01 declaration removed, dev merge still pending): R02 rollback_stop_refusal_retains_artifacts_for_later_cleanup FAIL0/1 in0.21s, rollback reports success after refused stop. R07 configured_known_hosts_command_revocation_cannot_offer_first_contact FAIL0/1 in0.60s: normal real OpenSSH enforces synthetic command revocation, bootstrap offers a first-contact challenge. Disposable rootless sshd, default source penalties, infraternal-dev8cores CPUWeight10000 load34.51/30.58/27.27; no pin confirmed. Logs r02-red.log/r07-red.log under HOME cache ssh-bootstrap. Gated checkout was unchanged during these standalone review-test builds.
Author
Owner

R06 independently reproduced before merge: logout_interrupts_a_stalled_host_key_confirmation_lookup FAIL0/1; exact review assertion revoked bootstrap retained its socket during confirmation lookup. Built scratch server tests with the completed workspace test dependency fingerprints and only the review test addition; production sources unchanged. Real software passkeys/loopback WebSocket, held lookup released after observation, no pin published. r06-red.log and r06-build-matched.log under HOME cache ssh-bootstrap. All three behavioral P1 findings now reproduced while R01 first full gate completes static builds.

R06 independently reproduced before merge: logout_interrupts_a_stalled_host_key_confirmation_lookup FAIL0/1; exact review assertion revoked bootstrap retained its socket during confirmation lookup. Built scratch server tests with the completed workspace test dependency fingerprints and only the review test addition; production sources unchanged. Real software passkeys/loopback WebSocket, held lookup released after observation, no pin published. r06-red.log and r06-build-matched.log under HOME cache ssh-bootstrap. All three behavioral P1 findings now reproduced while R01 first full gate completes static builds.
Author
Owner

R01 fixed: drop the unfinished manual export; archived committed-head oracle RED0/1, repaired source GREEN1/1. Retain review oracle and preserve inherited draft. Full gate green; scratch setup failure and direct recheck recorded separately.
Head: 599c3cf495. Evidence: evidence/ssh-bootstrap/repair-round/r01-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16555536 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.39s]
R01 fixed: drop the unfinished manual export; archived committed-head oracle RED0/1, repaired source GREEN1/1. Retain review oracle and preserve inherited draft. Full gate green; scratch setup failure and direct recheck recorded separately. Head: 599c3cf495681af0fc461adbaf1b08fc91c53057. Evidence: evidence/ssh-bootstrap/repair-round/r01-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16555536 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.39s] ```
Author
Owner

Dev merge integration finding before source repair: every Rust fast row PASS, tracer production transfer gate FAIL. Deferred gzip51871/51200 bytes (+671), Brotli45276/45056 (+220); critical283430/307200 and235012/256000 pass. New live details adapter imports its formatting code eagerly although popover renderer is already on demand. Move that existing formatter to the same demand boundary, keep round-trip subscription timing and budgets unchanged. Evidence merge-fast.log, apps/tracer/src/canvas/sessions/details-live.ts and windows/details-handle.ts.

Dev merge integration finding before source repair: every Rust fast row PASS, tracer production transfer gate FAIL. Deferred gzip51871/51200 bytes (+671), Brotli45276/45056 (+220); critical283430/307200 and235012/256000 pass. New live details adapter imports its formatting code eagerly although popover renderer is already on demand. Move that existing formatter to the same demand boundary, keep round-trip subscription timing and budgets unchanged. Evidence merge-fast.log, apps/tracer/src/canvas/sessions/details-live.ts and windows/details-handle.ts.
Author
Owner

Dev 7d6df447 merged without conflicts. Integration budget failure repaired by reusing demand-loaded details reader/formatter: deferred gzip51871→51023/51200 and Brotli45276→44612/45056. Browser4/4 in32.4s; screenshots evidence/ssh-bootstrap/repair-round/screenshots/details-{desktop,phone}.png (1440x900/393x852), no author visual judgement. Full gate green.
Head: 5c428697ea. Evidence: evidence/ssh-bootstrap/repair-round/merge-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16555536 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.31s]
Dev 7d6df447 merged without conflicts. Integration budget failure repaired by reusing demand-loaded details reader/formatter: deferred gzip51871→51023/51200 and Brotli45276→44612/45056. Browser4/4 in32.4s; screenshots evidence/ssh-bootstrap/repair-round/screenshots/details-{desktop,phone}.png (1440x900/393x852), no author visual judgement. Full gate green. Head: 5c428697ea852938e2d742a3b7c10a3ae90ee312. Evidence: evidence/ssh-bootstrap/repair-round/merge-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16555536 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.31s] ```
Author
Owner

R02 merged-source review test RED0/1 in0.11s. Repair requires activation ownership after the previous service stop, before the first replacement: an old-service stop refusal made no live change and must allow staging-only cleanup. New rollback requires acknowledged stop before removing artifacts or reversing owned linger. Strengthened regression checks policy receipt survives refusal and later cleanup reverses it. Prepared installer controls12/12; actual installer suite is green (r02-policy-green.log). Full r02-fast.log running; source commit follows gate.

R02 merged-source review test RED0/1 in0.11s. Repair requires activation ownership after the previous service stop, before the first replacement: an old-service stop refusal made no live change and must allow staging-only cleanup. New rollback requires acknowledged stop before removing artifacts or reversing owned linger. Strengthened regression checks policy receipt survives refusal and later cleanup reverses it. Prepared installer controls12/12; actual installer suite is green (r02-policy-green.log). Full r02-fast.log running; source commit follows gate.
Author
Owner

R02 repaired: refused service stop retains owned setup artifacts and linger; retry finishes cleanup. Installer regressions: 12/12, 0.42s. Exact review test failed before repair (0/1, 0.11s).
Head: 1d99f6c33a. Evidence: evidence/ssh-bootstrap/repair-round/r02-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16555536 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.29s]
R02 repaired: refused service stop retains owned setup artifacts and linger; retry finishes cleanup. Installer regressions: 12/12, 0.42s. Exact review test failed before repair (0/1, 0.11s). Head: 1d99f6c33aca4715859db4bddc79b4b8d29df90b. Evidence: evidence/ssh-bootstrap/repair-round/r02-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16555536 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13920160 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.29s] ```
Author
Owner

R06 P1 reproduced after dev merge: review logout_interrupts_a_stalled_host_key_confirmation_lookup fails 0/1 in 2.63s (r06-actual-red.log). bootstrap_api.rs awaited confirmation lookup outside the revocation/socket select. Repair keeps the pending future under revocation, expiry and disconnect lifetime; existing LiveConfirmation still checks authority before pin publication. No polling timer added.

R06 P1 reproduced after dev merge: review logout_interrupts_a_stalled_host_key_confirmation_lookup fails 0/1 in 2.63s (r06-actual-red.log). bootstrap_api.rs awaited confirmation lookup outside the revocation/socket select. Repair keeps the pending future under revocation, expiry and disconnect lifetime; existing LiveConfirmation still checks authority before pin publication. No polling timer added.
Author
Owner

R07 P1 confirmed again on merged production dependencies with the exact review oracle: configured_known_hosts_command_revocation_cannot_offer_first_contact fails 0/1 in 0.18s against a disposable rootless real sshd; load 6.14/7.78/8.66, 8-core infraternal-dev, normal source penalties. System OpenSSH refuses the synthetic command revocation, but provisioning offers a first-contact challenge because config.rs omits knownhostscommand and openssh.rs forces KnownHostsCommand=none. Evidence: r07-merged-red.log; no real SSH host contacted or key accepted.

R07 P1 confirmed again on merged production dependencies with the exact review oracle: configured_known_hosts_command_revocation_cannot_offer_first_contact fails 0/1 in 0.18s against a disposable rootless real sshd; load 6.14/7.78/8.66, 8-core infraternal-dev, normal source penalties. System OpenSSH refuses the synthetic command revocation, but provisioning offers a first-contact challenge because config.rs omits knownhostscommand and openssh.rs forces KnownHostsCommand=none. Evidence: r07-merged-red.log; no real SSH host contacted or key accepted.
Author
Owner

R06 repaired: pending first-contact lookup is cancelled on logout, expiry or disconnect. Exact review test RED0/1 2.63s; bootstrap API GREEN7/7 4.89s. No new timer.
Head: 77f5eefc5c. Evidence: evidence/ssh-bootstrap/repair-round/r06-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16557872 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13922992 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.61s]
R06 repaired: pending first-contact lookup is cancelled on logout, expiry or disconnect. Exact review test RED0/1 2.63s; bootstrap API GREEN7/7 4.89s. No new timer. Head: 77f5eefc5c6f49e4b592584ee5b165150b5d44c9. Evidence: evidence/ssh-bootstrap/repair-round/r06-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16557872 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13922992 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.61s] ```
Author
Owner

R07 verification: real command-revocation oracle GREEN1/1 0.33s with normal source penalties; both real trust oracles GREEN2/2 4.11s with negative-trust fixture penalties isolated. Ordinary plugin tests 49 pass/0 fail/5 ignored. Coverage-enabled ASan public-policy fuzz: 914448 executions/46s, 2612 counters, final cov666/ft2276, RSS476MiB, max_len65537, zero crashes. The first manually built ASan run lacked coverage instrumentation and is excluded from coverage evidence. Same source and dependency versions as workspace lock. Full fast gate running.

R07 verification: real command-revocation oracle GREEN1/1 0.33s with normal source penalties; both real trust oracles GREEN2/2 4.11s with negative-trust fixture penalties isolated. Ordinary plugin tests 49 pass/0 fail/5 ignored. Coverage-enabled ASan public-policy fuzz: 914448 executions/46s, 2612 counters, final cov666/ft2276, RSS476MiB, max_len65537, zero crashes. The first manually built ASan run lacked coverage instrumentation and is excluded from coverage evidence. Same source and dependency versions as workspace lock. Full fast gate running.
Author
Owner

R07 repaired: configured KnownHostsCommand retained; dynamic policy blocks first-contact admission and stored-pin bypass. Exact real review test RED0/1 0.27s, GREEN1/1 0.33s; real trust2/2 4.11s. Parser ASan: 914448 executions, cov666/ft2276, zero crashes.
Head: 9239c052ff. Evidence: evidence/ssh-bootstrap/repair-round/r07-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16558256 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13922608 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.75s]
R07 repaired: configured KnownHostsCommand retained; dynamic policy blocks first-contact admission and stored-pin bypass. Exact real review test RED0/1 0.27s, GREEN1/1 0.33s; real trust2/2 4.11s. Parser ASan: 914448 executions, cov666/ft2276, zero crashes. Head: 9239c052ffe8d3329120307304cde25a43bf5a1d. Evidence: evidence/ssh-bootstrap/repair-round/r07-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16558256 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13922608 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.75s] ```
Author
Owner

R03 P2 exact review regression RED0/1 0.02s on current branch: a completed helper leaves a same-group closed-pipe child alive. Repair observes natural exit with waitid(WNOWAIT|WNOHANG), retires the group before reaping, and awaits existing Tokio SIGCHLD without polling or a blocking pool. The original immediate assertion races asynchronous SIGKILL delivery; changed it to the existing cancellation oracle's 1s termination bound. That bound also fails against the original source (0/1 1.01s); final actual process tests4/4 0.30s. Eight-helper debug-controller comparison, 800 commands/run under CPUWeight10000 on 8-core infraternal-dev, load24.86–28.38: normal p50 before16.805–18.749ms/after18.001–18.229ms; p99 before75.195–96.883ms/after62.692–64.504ms. Early-pipe-close p50 before45.298ms/after48.666ms, p99 128.476/138.391ms; correctness requires acknowledged natural exit before group retirement. Both retain1 controller thread, RSS early4144/4136KiB. A measured blocking-pool candidate retained10 threads/4308KiB and was rejected. Raw r03-scale-async-*.log; these are a relative controller pilot under shared load, not end-to-end provisioning acceptance. Full gate running.

R03 P2 exact review regression RED0/1 0.02s on current branch: a completed helper leaves a same-group closed-pipe child alive. Repair observes natural exit with waitid(WNOWAIT|WNOHANG), retires the group before reaping, and awaits existing Tokio SIGCHLD without polling or a blocking pool. The original immediate assertion races asynchronous SIGKILL delivery; changed it to the existing cancellation oracle's 1s termination bound. That bound also fails against the original source (0/1 1.01s); final actual process tests4/4 0.30s. Eight-helper debug-controller comparison, 800 commands/run under CPUWeight10000 on 8-core infraternal-dev, load24.86–28.38: normal p50 before16.805–18.749ms/after18.001–18.229ms; p99 before75.195–96.883ms/after62.692–64.504ms. Early-pipe-close p50 before45.298ms/after48.666ms, p99 128.476/138.391ms; correctness requires acknowledged natural exit before group retirement. Both retain1 controller thread, RSS early4144/4136KiB. A measured blocking-pool candidate retained10 threads/4308KiB and was rejected. Raw r03-scale-async-*.log; these are a relative controller pilot under shared load, not end-to-end provisioning acceptance. Full gate running.
Author
Owner

R03 repaired: natural exit observed without reaping; owned descendants retired before releasing group identity. Exact review RED0/1 .02s; bounded original RED0/1 1.01s; final process4/4 .30s. Eight-helper pilot retains1 thread, ~4.1MiB RSS; raw timings and load on issue.
Head: 14b70d8eb6. Evidence: evidence/ssh-bootstrap/repair-round/r03-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16559824 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13924496 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.87s]
R03 repaired: natural exit observed without reaping; owned descendants retired before releasing group identity. Exact review RED0/1 .02s; bounded original RED0/1 1.01s; final process4/4 .30s. Eight-helper pilot retains1 thread, ~4.1MiB RSS; raw timings and load on issue. Head: 14b70d8eb67843f326ae1f41aadc34e009d2abc4. Evidence: evidence/ssh-bootstrap/repair-round/r03-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16559824 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13924496 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.87s] ```
Author
Owner

R04 P2 reproduced on branch: denied_linger_request_does_not_undo_a_later_external_enable RED0/1 .05s. Additional acknowledged-no-op case RED0/1 .06s. enable_linger previously retained intent after an acknowledged no-change result and reversed a later external enable. Repair clears intent after acknowledged refusal or a confirmed no state; interrupted/unknown replies retain it. All installer15/15 .93s, including interrupted reply cleanup. Full fast gate running.

R04 P2 reproduced on branch: denied_linger_request_does_not_undo_a_later_external_enable RED0/1 .05s. Additional acknowledged-no-op case RED0/1 .06s. enable_linger previously retained intent after an acknowledged no-change result and reversed a later external enable. Repair clears intent after acknowledged refusal or a confirmed no state; interrupted/unknown replies retain it. All installer15/15 .93s, including interrupted reply cleanup. Full fast gate running.
Author
Owner

R05 additive internal recovery journal proposed before implementation: a private, transaction-bound public receipt outside the installation base survives removal of the stage and owner marker. It binds host, transaction, fresh kind and original directory device/inode; bounded read, same uid/mode and protected parent checks precede recovery. Pending receipts refuse new staging. Existing wire messages and Cleanup coordinates stay unchanged. Committed/unowned roots remain preserved; an older attempt that already lost its only stage proof cannot be inferred fresh safely and needs operator review. Exact current-source review oracle RED0/1 .21s (r05-current-red.log). Prepared real-file control14/14 passes before adding further boundary/ownership tests.

R05 additive internal recovery journal proposed before implementation: a private, transaction-bound public receipt outside the installation base survives removal of the stage and owner marker. It binds host, transaction, fresh kind and original directory device/inode; bounded read, same uid/mode and protected parent checks precede recovery. Pending receipts refuse new staging. Existing wire messages and Cleanup coordinates stay unchanged. Committed/unowned roots remain preserved; an older attempt that already lost its only stage proof cannot be inferred fresh safely and needs operator review. Exact current-source review oracle RED0/1 .21s (r05-current-red.log). Prepared real-file control14/14 passes before adding further boundary/ownership tests.
Author
Owner

R04 repaired: acknowledged denial/no-op retires linger intent; interrupted/unknown reply retains it. Review RED0/1 .05s, no-op RED0/1 .06s; installer15/15 .93s, including interruption cleanup.
Head: 5bc14bca74. Evidence: evidence/ssh-bootstrap/repair-round/r04-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16559824 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13924496 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.81s]
R04 repaired: acknowledged denial/no-op retires linger intent; interrupted/unknown reply retains it. Review RED0/1 .05s, no-op RED0/1 .06s; installer15/15 .93s, including interruption cleanup. Head: 5bc14bca74e4be391c992a2404e28c768f1dc75e. Evidence: evidence/ssh-bootstrap/repair-round/r04-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16559824 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13924496 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.81s] ```
Author
Owner

R05 P2 exact review RED0/1 .21s on branch; four additional restart/admission boundaries RED0/4 .11s before repair. Fresh cleanup now retains a bounded private receipt outside the base, binds original directory identity and refuses replacement staging while pending. Final installer23/23 2.82s: stage/owner/base removal, fresh session, replaced unowned directory, symlink/mode/length/binding tampering and protected-parent checks. Self-review found rollback initially followed a linked owner marker and retired the stage before refusing it; public-data regression RED0/1 .11s, fixed by matching the existing staging no-link guard before the read. Interrupted the partial gate for that concrete finding; restarted full r05-final-fast.log on final source. Cherry-pick conflict was adjacent additions; all prior tests retained.

R05 P2 exact review RED0/1 .21s on branch; four additional restart/admission boundaries RED0/4 .11s before repair. Fresh cleanup now retains a bounded private receipt outside the base, binds original directory identity and refuses replacement staging while pending. Final installer23/23 2.82s: stage/owner/base removal, fresh session, replaced unowned directory, symlink/mode/length/binding tampering and protected-parent checks. Self-review found rollback initially followed a linked owner marker and retired the stage before refusing it; public-data regression RED0/1 .11s, fixed by matching the existing staging no-link guard before the read. Interrupted the partial gate for that concrete finding; restarted full r05-final-fast.log on final source. Cherry-pick conflict was adjacent additions; all prior tests retained.
Author
Owner

D198 additive interface proposal for the approved repair: fill the existing plugin-api stub with the draft static descriptor/action/schema-reference data, plus instructions (D202), defaults, declared role dependencies and a controller status/enable interface. The SSH crate supplies the declaration and uses existing Tokio/nix primitives to cancel and drain batches, confirmation work and socket lifetimes when off; starting it has no I/O and cannot create a server (D201). A feature-controlled static catalog exposes the declaration to core. No foundational library or schema/adapter engine is selected. Existing bootstrap wire shapes and compatibility entry points remain additive; production remote integration and general adapter generation remain the existing #78/#10 boundaries. Implement API, dependency additions and SSH lifecycle as separate gated steps after the review fixes.

D198 additive interface proposal for the approved repair: fill the existing plugin-api stub with the draft static descriptor/action/schema-reference data, plus instructions (D202), defaults, declared role dependencies and a controller status/enable interface. The SSH crate supplies the declaration and uses existing Tokio/nix primitives to cancel and drain batches, confirmation work and socket lifetimes when off; starting it has no I/O and cannot create a server (D201). A feature-controlled static catalog exposes the declaration to core. No foundational library or schema/adapter engine is selected. Existing bootstrap wire shapes and compatibility entry points remain additive; production remote integration and general adapter generation remain the existing #78/#10 boundaries. Implement API, dependency additions and SSH lifecycle as separate gated steps after the review fixes.
Author
Owner

Delta review (orchestrator's independent reviewer) at 14b70d8e: all four P1s fixed (R01, R02, R06, R07 pass; R03 fixed, test race accepted). No new P0/P1 → merge per D206. Fix-forward: new P2 (any message during a pending host-key confirmation cancels the whole batch, bootstrap_api.rs:285), P3 interrupted upgrade can leave the previous service stopped (install.rs:229), P3 configured KnownHostsCommand inherits the agent/askpass sockets (openssh.rs, config.rs:39, credentials.rs:391 — will be fixed before release), plus open R04, R05, R08. Failing tests saved for the next run.

Delta review (orchestrator's independent reviewer) at 14b70d8e: all four P1s fixed (R01, R02, R06, R07 pass; R03 fixed, test race accepted). No new P0/P1 → merge per D206. Fix-forward: new P2 (any message during a pending host-key confirmation cancels the whole batch, bootstrap_api.rs:285), P3 interrupted upgrade can leave the previous service stopped (install.rs:229), P3 configured KnownHostsCommand inherits the agent/askpass sockets (openssh.rs, config.rs:39, credentials.rs:391 — will be fixed before release), plus open R04, R05, R08. Failing tests saved for the next run.
Author
Owner

R05 repaired: bounded private transaction/directory-bound receipt survives stage, owner and base removal; pending cleanup refuses replacement staging. Exact review RED0/1 .21s; four boundaries RED0/4 .11s; linked-owner RED0/1 .11s. Final installer23/23 2.82s. Earlier full run caught a test semicolon lint; fixed and complete rerun green.
Head: 230fe3e462. Evidence: evidence/ssh-bootstrap/repair-round/r05-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16564144 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13928608 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [4.22s]
R05 repaired: bounded private transaction/directory-bound receipt survives stage, owner and base removal; pending cleanup refuses replacement staging. Exact review RED0/1 .21s; four boundaries RED0/4 .11s; linked-owner RED0/1 .11s. Final installer23/23 2.82s. Earlier full run caught a test semicolon lint; fixed and complete rerun green. Head: 230fe3e462671daeac6c1191f7b82d1085a7f0b2. Evidence: evidence/ssh-bootstrap/repair-round/r05-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16564144 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13928608 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [4.22s] ```
Author
Owner

R08 confirmed on actual source: retained review graph regression failed0/1 (.25s). Made SSH optional in both infraternal-server and infraternal, disabled dependency defaults, and feature-gated key/runtime/API plus hidden prompt-helper paths. Graph regression now checks both normal dependency closures. Both packages pass no-default all-target check (38.92s), tests (13 test-result rows), strict clippy (12.06s), and CLI build (42.61s); no-SSH CLI help has no SSH helper. Full default gate pending. Evidence: crates/plugins/ssh/tests/build_removal.rs and evidence/ssh-bootstrap/repair-round/r08-* logs. No public CLI command added.

R08 confirmed on actual source: retained review graph regression failed0/1 (.25s). Made SSH optional in both infraternal-server and infraternal, disabled dependency defaults, and feature-gated key/runtime/API plus hidden prompt-helper paths. Graph regression now checks both normal dependency closures. Both packages pass no-default all-target check (38.92s), tests (13 test-result rows), strict clippy (12.06s), and CLI build (42.61s); no-SSH CLI help has no SSH helper. Full default gate pending. Evidence: crates/plugins/ssh/tests/build_removal.rs and evidence/ssh-bootstrap/repair-round/r08-* logs. No public CLI command added.
Author
Owner

R08 completed: optional SSH feature removes normal dependencies and runtime/helper paths from both core entry packages. No-default check, tests, clippy and CLI build pass; extended review graph checks both packages.
Head: 4dd4fd7fa2. Evidence: evidence/ssh-bootstrap/repair-round/r08-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16562832 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13927184 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.74s]
R08 completed: optional SSH feature removes normal dependencies and runtime/helper paths from both core entry packages. No-default check, tests, clippy and CLI build pass; extended review graph checks both packages. Head: 4dd4fd7fa232e27bbd4dbb158bfbc8c64ed5d830. Evidence: evidence/ssh-bootstrap/repair-round/r08-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16562832 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13927184 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.74s] ```
Author
Owner

D198 pre-change controller scale: actual ignored concurrency test, 1000 admitted targets/10 batches, eight active backend calls; elapsed55ms, RSS baseline4644/held8008/completed8500KiB. Held delta3364KiB for1000 targets (~3.364KiB/target). CPUWeight10000 on local8-core infraternal-dev; load recorded in plugin-lifecycle-before-scale.log. Controlled unavailable backend only; excludes full server, live installation, signed catalog and phase-latency acceptance. Existing transport, Tokio and shared API crate retained; no foundational engine selected.

D198 pre-change controller scale: actual ignored concurrency test, 1000 admitted targets/10 batches, eight active backend calls; elapsed55ms, RSS baseline4644/held8008/completed8500KiB. Held delta3364KiB for1000 targets (~3.364KiB/target). CPUWeight10000 on local8-core infraternal-dev; load recorded in plugin-lifecycle-before-scale.log. Controlled unavailable backend only; excludes full server, live installation, signed catalog and phase-latency acceptance. Existing transport, Tokio and shared API crate retained; no foundational engine selected.
Author
Owner

Additive shared plugin API completed: static action/default/dependency declarations, ordered instructions, validation against implicit server creation and trusted lifecycle trait. Two contract tests pass. Initial test-only clippy placement failure corrected before this green rerun; no lint suppressed.
Head: 9fb6a2f01c. Evidence: evidence/ssh-bootstrap/repair-round/plugin-api-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16562832 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13927184 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [3.23s]
Additive shared plugin API completed: static action/default/dependency declarations, ordered instructions, validation against implicit server creation and trusted lifecycle trait. Two contract tests pass. Initial test-only clippy placement failure corrected before this green rerun; no lint suppressed. Head: 9fb6a2f01c81b33ecfc682baea0c9a49771ddf54. Evidence: evidence/ssh-bootstrap/repair-round/plugin-api-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16562832 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13927184 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.23s] ```
Author
Owner

Shared API dependency edges completed: workspace path dependency for SSH and server, two lock edges, no external library added. Workspace all-target check23.02s and full fast gate pass.
Head: 5c34de1a2d. Evidence: evidence/ssh-bootstrap/repair-round/plugin-deps-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16562768 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13927184 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [3.27s]
Shared API dependency edges completed: workspace path dependency for SSH and server, two lock edges, no external library added. Workspace all-target check23.02s and full fast gate pass. Head: 5c34de1a2d890dd80e873f0177b45ec36f7a0789. Evidence: evidence/ssh-bootstrap/repair-round/plugin-deps-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16562768 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13927184 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [3.27s] ```
Author
Owner

SSH manifest completed: seven actions with ordered instructions, shared defaults, existing-server dependency and only infraternal agent component enablement. Feature-selected static catalog validates through existing configuration validator. Contract test and full fast gate pass; preflight line-limit finding resolved by reuse, without suppression.
Head: dff31f784b. Evidence: evidence/ssh-bootstrap/repair-round/plugin-manifest-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16564272 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13928368 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.62s]
SSH manifest completed: seven actions with ordered instructions, shared defaults, existing-server dependency and only infraternal agent component enablement. Feature-selected static catalog validates through existing configuration validator. Contract test and full fast gate pass; preflight line-limit finding resolved by reuse, without suppression. Head: dff31f784ba551e40fc96180324cbebe5ae6254b. Evidence: evidence/ssh-bootstrap/repair-round/plugin-manifest-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16564272 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13928368 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.62s] ```
Author
Owner

SSH component controller completed: admission closes on off, queued/active batches cancel, confirmations retire and control waits for cleanup. Interrupted shutdown remains closed; reenable drains prior leases and never resumes cancelled batches. Six actual controller tests pass0.01s, including real native helper retirement. No idle task/timer added.
Head: 063e75b62a. Evidence: evidence/ssh-bootstrap/repair-round/plugin-controller-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16573872 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13938912 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.60s]
SSH component controller completed: admission closes on off, queued/active batches cancel, confirmations retire and control waits for cleanup. Interrupted shutdown remains closed; reenable drains prior leases and never resumes cancelled batches. Six actual controller tests pass0.01s, including real native helper retirement. No idle task/timer added. Head: 063e75b62a81978e704b1e2c820b7ef0ae95f466. Evidence: evidence/ssh-bootstrap/repair-round/plugin-controller-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16573872 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13938912 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.60s] ```
Author
Owner

D198 controller scale after commit (actual workspace binaries, two alternating pairs): 1000targets/10batches, peak8 backend calls throughout. Before elapsed56/49ms; after65/95ms. Held RSS minus each process baseline before3480/3552KiB; after3736/3736KiB: +184–256KiB/1000targets. At the declared1600target maximum, held queue estimate5.84MiB, incremental0.29–0.40MiB. ScopeCPUWeight10000, infraternal-dev8cores, load10.68/10.20/10.17; debug current-thread controlled unavailable backend. Fixed binary/fixture RSS differs; not a full-server or phase-latency claim. Cost adds explicit admission/retirement accounting and acknowledged cleanup, with no idle task/timer. Evidence: evidence/ssh-bootstrap/repair-round/plugin-lifecycle-paired-scale.log; concurrency.rs. Full controller gate is green; server socket lifetimes are the next separate integration step.

D198 controller scale after commit (actual workspace binaries, two alternating pairs): 1000targets/10batches, peak8 backend calls throughout. Before elapsed56/49ms; after65/95ms. Held RSS minus each process baseline before3480/3552KiB; after3736/3736KiB: +184–256KiB/1000targets. At the declared1600target maximum, held queue estimate~5.84MiB, incremental~0.29–0.40MiB. ScopeCPUWeight10000, infraternal-dev8cores, load10.68/10.20/10.17; debug current-thread controlled unavailable backend. Fixed binary/fixture RSS differs; not a full-server or phase-latency claim. Cost adds explicit admission/retirement accounting and acknowledged cleanup, with no idle task/timer. Evidence: evidence/ssh-bootstrap/repair-round/plugin-lifecycle-paired-scale.log; concurrency.rs. Full controller gate is green; server socket lifetimes are the next separate integration step.
Author
Owner

SSH server-adapter shutdown completed: leases span socket teardown and permit release; off interrupts idle/blocked sockets and lookups, refuses admission and returns no-store unavailable key responses. Core owner authentication remains valid. Actual API10/10 pass6.95s; both no-default CLI/server suites and strict clippy pass. Full fast gate exits0.
Head: 1c84f91a17. Evidence: evidence/ssh-bootstrap/repair-round/plugin-adapter-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16577392 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13942912 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.93s]
SSH server-adapter shutdown completed: leases span socket teardown and permit release; off interrupts idle/blocked sockets and lookups, refuses admission and returns no-store unavailable key responses. Core owner authentication remains valid. Actual API10/10 pass6.95s; both no-default CLI/server suites and strict clippy pass. Full fast gate exits0. Head: 1c84f91a17fc2b8ba06a51f9b0cca2ab133c349a. Evidence: evidence/ssh-bootstrap/repair-round/plugin-adapter-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16577392 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13942912 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.93s] ```
Author
Owner

Final documentation-only gate failed the daemon restart oracle at iteration22/24 (before-forward468224bytes): all468224bytes received,17input bytes unacknowledged; terminal command queue returned its reattach/replay error. Prior adapter full gate passed the same oracle, and no runtime source changed between runs. Host load24.14/17.73/12.88 at inspection. This row is NOT covered by #118 exceptions; not waived. Running the unchanged targeted test before a full gate rerun. Evidence: evidence/ssh-bootstrap/repair-round/final-first-failed-fast.log; scripts/verify-agent.py:113 / agent_fixture.py:253, crates/infraternal/tests/agent_daemon.rs:18. No assertions or budgets changed.

Final documentation-only gate failed the daemon restart oracle at iteration22/24 (before-forward468224bytes): all468224bytes received,17input bytes unacknowledged; terminal command queue returned its reattach/replay error. Prior adapter full gate passed the same oracle, and no runtime source changed between runs. Host load24.14/17.73/12.88 at inspection. This row is NOT covered by #118 exceptions; not waived. Running the unchanged targeted test before a full gate rerun. Evidence: evidence/ssh-bootstrap/repair-round/final-first-failed-fast.log; scripts/verify-agent.py:113 / agent_fixture.py:253, crates/infraternal/tests/agent_daemon.rs:18. No assertions or budgets changed.
Author
Owner

Restart-oracle finding: scripts/verify-agent.py:110–113 refunds output while an attachment already has1MiB credit; restart payloads are<=512KiB plus17byte fence. Those unnecessary64KiB refunds compete with replay/fence in the existing8-command admission queue (daemon.rs:292,315). The production close-and-replay response is intentional and separately tested by verify-agent-queues.py. Two actual red runs: documentation gate22/24 failure38.19s, targeted rerun1/24 failure11.79s at load34.03. Proposed fixture correction uses process(credit=False) only for the already-funded restart drain; exact full payload/fence, full input Ack, deadlines, stream errors and separate saturation coverage remain unchanged. No #118 exception claimed. Existing tests are the failing oracle; one separately gated harness commit before docs.

Restart-oracle finding: scripts/verify-agent.py:110–113 refunds output while an attachment already has1MiB credit; restart payloads are<=512KiB plus17byte fence. Those unnecessary64KiB refunds compete with replay/fence in the existing8-command admission queue (daemon.rs:292,315). The production close-and-replay response is intentional and separately tested by verify-agent-queues.py. Two actual red runs: documentation gate22/24 failure38.19s, targeted rerun1/24 failure11.79s at load34.03. Proposed fixture correction uses process(credit=False) only for the already-funded restart drain; exact full payload/fence, full input Ack, deadlines, stream errors and separate saturation coverage remain unchanged. No #118 exception claimed. Existing tests are the failing oracle; one separately gated harness commit before docs.
Author
Owner

Restart oracle correction completed after two actual failures: use existing1MiB attachment credit for <=512KiB replay/fence rather than injecting unnecessary64KiB refunds into the eight-command queue. Production, assertions, deadlines and admission bounds unchanged. Actual targeted restart40.41s and saturation35.95s pass; full fast gate now exits0, no #118 exception.
Head: 487ef1ef0d. Evidence: evidence/ssh-bootstrap/repair-round/restart-credit-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16577392 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13942912 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.53s]
Restart oracle correction completed after two actual failures: use existing1MiB attachment credit for <=512KiB replay/fence rather than injecting unnecessary64KiB refunds into the eight-command queue. Production, assertions, deadlines and admission bounds unchanged. Actual targeted restart40.41s and saturation35.95s pass; full fast gate now exits0, no #118 exception. Head: 487ef1ef0d75ef66059093466886750dae7160d6. Evidence: evidence/ssh-bootstrap/repair-round/restart-credit-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16577392 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13942912 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.53s] ```
Author
Owner

Finished the repair round: all eight review regressions have failing-before/fixed-after evidence and separate gated commits; dev merged. Report: docs/reviews/ssh-bootstrap-87-repair.md. Production screenshot artifacts await independent visual review. Controlled lifecycle accounting adds 184–256 KiB per 1000 queued targets and 9–46 ms in paired runs; full live-installation/catalog acceptance (#78) and generated adapters (#10) remain unproven. No load-sensitive exception used; no push or deployment.
Head: b7b0018f07. Evidence: evidence/ssh-bootstrap/repair-round/final-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16577392 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13942912 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.07s]
Finished the repair round: all eight review regressions have failing-before/fixed-after evidence and separate gated commits; dev merged. Report: docs/reviews/ssh-bootstrap-87-repair.md. Production screenshot artifacts await independent visual review. Controlled lifecycle accounting adds 184–256 KiB per 1000 queued targets and 9–46 ms in paired runs; full live-installation/catalog acceptance (#78) and generated adapters (#10) remain unproven. No load-sensitive exception used; no push or deployment. Head: b7b0018f07e778c7e146c97c564a153dabbe5330. Evidence: evidence/ssh-bootstrap/repair-round/final-recheck-fast.log. scripts/verify fast exit0. Verbatim gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16577392 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13942912 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.07s] ```
Author
Owner

Fix round 3 started on ssh-bootstrap, base b7b0018f07. Read #87 history and parent #5; retain prior R04/R05/R08 repairs. Apply delta regressions, then fix credential isolation, pending confirmation requests, and interrupted service stop in separate gated commits. No host contact, push or deployment.

Fix round 3 started on ssh-bootstrap, base b7b0018f07e778c7e146c97c564a153dabbe5330. Read #87 history and parent #5; retain prior R04/R05/R08 repairs. Apply delta regressions, then fix credential isolation, pending confirmation requests, and interrupted service stop in separate gated commits. No host contact, push or deployment.
Author
Owner

Round 3 RED evidence: unrelated same-uid prompt peer receives login material (credentials.rs regression, 2 pass/1 fail, 0.00s); native trust command lacks environment isolation (diagnostics regression 0/1); pending replay closes socket (exact delta test 0/1, 0.76s); interrupted acknowledged stop leaves previous service stopped (exact delta test 0/1, 0.09s). Logs: ~/.cache/codex-scratch/ssh-bootstrap/{credential,trust,request,stop}-red.log. Repair retains configured dynamic trust via /usr/bin/env sanitization, SO_PEERCRED plus exact helper executable/direct owned parent, and one reply. No new dependency or idle timer. Full first gate running.

Round 3 RED evidence: unrelated same-uid prompt peer receives login material (credentials.rs regression, 2 pass/1 fail, 0.00s); native trust command lacks environment isolation (diagnostics regression 0/1); pending replay closes socket (exact delta test 0/1, 0.76s); interrupted acknowledged stop leaves previous service stopped (exact delta test 0/1, 0.09s). Logs: ~/.cache/codex-scratch/ssh-bootstrap/{credential,trust,request,stop}-red.log. Repair retains configured dynamic trust via /usr/bin/env sanitization, SO_PEERCRED plus exact helper executable/direct owned parent, and one reply. No new dependency or idle timer. Full first gate running.
Author
Owner

Credential isolation real-engine evidence: disposable rootless local sshd, supplied synthetic key, configured KnownHostsCommand produces host trust only when SSH_AUTH_SOCK, INFRATERNAL_SSH_ASKPASS_SOCKET and SSH_ASKPASS are absent. Test passes 1/1 in 0.25s; verifies same physical connection for two commands, helpers erased after authentication, and no reconnect with erased material. infraternal-dev, 8 cores, CPUWeight=10000, load 8.56/8.36/9.58. Unit peer/one-use oracle passes; no external host or host key touched. Evidence: ~/.cache/codex-scratch/ssh-bootstrap/{real,prompt,credential}-green.log. No dependency additions; cargo tree -d recorded.

Credential isolation real-engine evidence: disposable rootless local sshd, supplied synthetic key, configured KnownHostsCommand produces host trust only when SSH_AUTH_SOCK, INFRATERNAL_SSH_ASKPASS_SOCKET and SSH_ASKPASS are absent. Test passes 1/1 in 0.25s; verifies same physical connection for two commands, helpers erased after authentication, and no reconnect with erased material. infraternal-dev, 8 cores, CPUWeight=10000, load 8.56/8.36/9.58. Unit peer/one-use oracle passes; no external host or host key touched. Evidence: ~/.cache/codex-scratch/ssh-bootstrap/{real,prompt,credential}-green.log. No dependency additions; cargo tree -d recorded.
Author
Owner

First full gate exposed an outdated CLI test: ssh_askpass.rs launched a password helper without an owned login parent and expected success. Under the required peer check it is correctly refused; update the test to assert refusal/no reply/cleanup. The actual encrypted synthetic-key test already passes with registered ssh-add parent (1/1); synthetic key/passphrase stay on pipes. Rerun the full gate before committing, no waived failures. Evidence: credential-fast.log, cli-green.log under job scratch.

First full gate exposed an outdated CLI test: ssh_askpass.rs launched a password helper without an owned login parent and expected success. Under the required peer check it is correctly refused; update the test to assert refusal/no reply/cleanup. The actual encrypted synthetic-key test already passes with registered ssh-add parent (1/1); synthetic key/passphrase stay on pipes. Rerun the full gate before committing, no waived failures. Evidence: credential-fast.log, cli-green.log under job scratch.
Author
Owner

Completed credential isolation: e315331c0b. SO_PEERCRED + exact helper/direct parent, one reply, sanitized native trust lookup. Real SSH reuse 1/1 in 0.25s; real trust/revocation 2/2 in 1.62s; real CLI password-peer refusal/encrypted-key handoff 2/2. R04/R05/R08 pass. Size delta +7424/+5680 B versus b7b0018f; no dependency added (cargo tree -d). First outdated direct-helper test corrected; complete scripts/verify fast rerun exit0. Evidence: ~/.cache/codex-scratch/ssh-bootstrap/credential-recheck-fast.log. Verbatim:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16584816 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13948592 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.38s]
Completed credential isolation: e315331c0ba357a64198bf2f5d335cb636ebced5. SO_PEERCRED + exact helper/direct parent, one reply, sanitized native trust lookup. Real SSH reuse 1/1 in 0.25s; real trust/revocation 2/2 in 1.62s; real CLI password-peer refusal/encrypted-key handoff 2/2. R04/R05/R08 pass. Size delta +7424/+5680 B versus b7b0018f; no dependency added (cargo tree -d). First outdated direct-helper test corrected; complete scripts/verify fast rerun exit0. Evidence: ~/.cache/codex-scratch/ssh-bootstrap/credential-recheck-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16584816 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13948592 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.38s] ```
Author
Owner

Completed pending-confirmation handling: db699df210. Text requests get busy without dropping the lookup/batch; close/error/EOF still retire it, with authority/off/expiry priority unchanged. Exact delta RED0/1 0.76s; strengthened real-TCP API suite GREEN11/11 8.22s, busy followed by separate confirmation answer. No request queue or retained retry material. Size delta +1344/+1152 B versus e315331c; no dependency changes. Corrected preflight Clippy pattern warning, complete scripts/verify fast rerun exit0. Evidence: ~/.cache/codex-scratch/ssh-bootstrap/request-recheck-fast.log. Verbatim:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16586160 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13949744 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.82s]
Completed pending-confirmation handling: db699df21037dff6bbb0b0afa4b077a59a5dea29. Text requests get busy without dropping the lookup/batch; close/error/EOF still retire it, with authority/off/expiry priority unchanged. Exact delta RED0/1 0.76s; strengthened real-TCP API suite GREEN11/11 8.22s, busy followed by separate confirmation answer. No request queue or retained retry material. Size delta +1344/+1152 B versus e315331c; no dependency changes. Corrected preflight Clippy pattern warning, complete scripts/verify fast rerun exit0. Evidence: ~/.cache/codex-scratch/ssh-bootstrap/request-recheck-fast.log. Verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16586160 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13949744 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.82s] ```
Author
Owner

Fix round 3 finished. Head: 06d063acf6; branch ssh-bootstrap. Three separately gated commits: e315331c credential isolation, db699df2 pending-confirmation busy handling, 06d063ac interrupted-stop recovery. Final installer25/25 0.76s, including refused restart retaining its journal for retry and refused stop cleaning only staging; RED delta0/1 0.09s. R04/R05/R08 pass in final full gate. Real SSH reuse1/1 0.25s, trust/revocation2/2 1.62s, CLI handoffs2/2, API11/11 8.22s. Last commit size delta0/0 B; total +8768/+6832 B versus b7b0018f. No dependencies added; reviewer checklist checked ownership/authority, revocation/off, helper retirement, prior-service preservation and feature removal. No waived failures, push, deployment or external host contact. Evidence retained at evidence/ssh-bootstrap/round3/{credential-recheck-fast,request-recheck-fast,stop-fast}.log; scratch targets are being removed.

How to test:

  1. cargo test -p infraternal-plugin-ssh --test credentials
  2. cargo test -p infraternal-server a_client_request_during_a_pending_confirmation_keeps_the_batch
  3. cargo test -p infraternal-plugin-ssh --test install

scripts/verify fast exit0, verbatim summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
PT_INTERP: absent; size: 16586160 bytes (baseline 16521648 + allowance 262144 = max 16783792)
PT_INTERP: absent; size: 13949744 bytes (baseline 13881576 + allowance 262144 = max 14143720)
 7 pass
 0 fail
 34390 expect() calls
Ran 7 tests across 2 files. [2.46s]
Fix round 3 finished. Head: 06d063acf6732794c6424219a5963964a036e59f; branch ssh-bootstrap. Three separately gated commits: e315331c credential isolation, db699df2 pending-confirmation busy handling, 06d063ac interrupted-stop recovery. Final installer25/25 0.76s, including refused restart retaining its journal for retry and refused stop cleaning only staging; RED delta0/1 0.09s. R04/R05/R08 pass in final full gate. Real SSH reuse1/1 0.25s, trust/revocation2/2 1.62s, CLI handoffs2/2, API11/11 8.22s. Last commit size delta0/0 B; total +8768/+6832 B versus b7b0018f. No dependencies added; reviewer checklist checked ownership/authority, revocation/off, helper retirement, prior-service preservation and feature removal. No waived failures, push, deployment or external host contact. Evidence retained at evidence/ssh-bootstrap/round3/{credential-recheck-fast,request-recheck-fast,stop-fast}.log; scratch targets are being removed. How to test: 1. cargo test -p infraternal-plugin-ssh --test credentials 2. cargo test -p infraternal-server a_client_request_during_a_pending_confirmation_keeps_the_batch 3. cargo test -p infraternal-plugin-ssh --test install scripts/verify fast exit0, verbatim summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ PT_INTERP: absent; size: 16586160 bytes (baseline 16521648 + allowance 262144 = max 16783792) PT_INTERP: absent; size: 13949744 bytes (baseline 13881576 + allowance 262144 = max 14143720) 7 pass 0 fail 34390 expect() calls Ran 7 tests across 2 files. [2.46s] ```
Author
Owner

Release integration started on release-addhost at production base db8c527042. Read source histories and issue/parent records; integrate remote ca8a09d4, SSH 06d063ac, then canvas-addhost 0bf00d07. Preserve deployed Mesh/host-facts and shipped migration checksums. Local container-only SSH proof, port 47591; no external VM contact, push or deployment. Gates, migration rehearsal, static artifacts and operator steps follow.

Release integration started on release-addhost at production base db8c5270429230365e6df34b664bdfed95f623be. Read source histories and issue/parent records; integrate remote ca8a09d4, SSH 06d063ac, then canvas-addhost 0bf00d07. Preserve deployed Mesh/host-facts and shipped migration checksums. Local container-only SSH proof, port 47591; no external VM contact, push or deployment. Gates, migration rehearsal, static artifacts and operator steps follow.
Author
Owner

Integration findings at production db8c5270: shipped migrations are 0001–0014 (0012_mesh_api, 0013_mesh_node_identity, 0014_plugin_settings). Remote source also declares 0012–0014; append its unchanged SQL as 0015_remote_identity, 0016_remote_sessions, 0017_ca_administrators. Shared plugin API reconciles Mesh socket/role metadata, host-facts node registry and remote channel constants using integrate-network reference declarations. Preserve one descriptor type, add node lifecycle/default/action fields rather than replacing production dispatch. UI source apps/tracer/src/add-host-prototype.ts still fetches /__mock/proto/addhost even when mounted in the product; production discovery/manual flow needs wiring. SSH bootstrap_runtime.rs default backend deliberately refuses invitations/readiness; local end-to-end requires live #78 adapters. Docker29.8.2 is accessible locally via sudo, no external hosts needed.

Integration findings at production db8c5270: shipped migrations are 0001–0014 (0012_mesh_api, 0013_mesh_node_identity, 0014_plugin_settings). Remote source also declares 0012–0014; append its unchanged SQL as 0015_remote_identity, 0016_remote_sessions, 0017_ca_administrators. Shared plugin API reconciles Mesh socket/role metadata, host-facts node registry and remote channel constants using integrate-network reference declarations. Preserve one descriptor type, add node lifecycle/default/action fields rather than replacing production dispatch. UI source apps/tracer/src/add-host-prototype.ts still fetches /__mock/proto/addhost even when mounted in the product; production discovery/manual flow needs wiring. SSH bootstrap_runtime.rs default backend deliberately refuses invitations/readiness; local end-to-end requires live #78 adapters. Docker29.8.2 is accessible locally via sudo, no external hosts needed.
Author
Owner

Correction to previous UI finding: add-host-prototype.ts is the older mock-only flow. canvas-addhost product.ts mounts createAddHost with canvas/addhost/real.ts (real /v1/bootstrap/ws and optional discovery). Actual missing seams: sink.enrolled is a no-op in product.ts, no CA bootstrap/unlock step, and real.ts proposes /credential + /host-key endpoints while SSH backend uses one-attempt auth_once and socket host-key confirmation. Preserve the newer approved wizard and wire its service/canvas adapters.

Correction to previous UI finding: add-host-prototype.ts is the older mock-only flow. canvas-addhost product.ts mounts createAddHost with canvas/addhost/real.ts (real /v1/bootstrap/ws and optional discovery). Actual missing seams: sink.enrolled is a no-op in product.ts, no CA bootstrap/unlock step, and real.ts proposes /credential + /host-key endpoints while SSH backend uses one-attempt auth_once and socket host-key confirmation. Preserve the newer approved wizard and wire its service/canvas adapters.
Author
Owner

Integration finding: ssh-bootstrap default_runner still uses PendingRemoteRuntime (bootstrap_runtime.rs), whose invitation, connected_facts and terminal_canary refuse the operation. Proposed additive seam: inject the remote EnrollmentService and live RemoteHosts into the SSH Backend; bind a fresh UUID to each owner/session/batch attempt, authorize invitation issuance against the exact unlocked session, wait for admitted authority, request compiled host-facts and verify a real PTY echo before reporting success. Retirement must affect only that attempt UUID, even after logout. Browser completion must use the trusted BootstrapEvent.host_id (already emitted by SSH), not the human target label. Preserve the frozen bootstrap/wire formats and existing CA passkey policy [168,198].

Integration finding: ssh-bootstrap default_runner still uses PendingRemoteRuntime (bootstrap_runtime.rs), whose invitation, connected_facts and terminal_canary refuse the operation. Proposed additive seam: inject the remote EnrollmentService and live RemoteHosts into the SSH Backend; bind a fresh UUID to each owner/session/batch attempt, authorize invitation issuance against the exact unlocked session, wait for admitted authority, request compiled host-facts and verify a real PTY echo before reporting success. Retirement must affect only that attempt UUID, even after logout. Browser completion must use the trusted BootstrapEvent.host_id (already emitted by SSH), not the human target label. Preserve the frozen bootstrap/wire formats and existing CA passkey policy [168,198].
Author
Owner

Local proof environment finding: real systemd+sshd container is active (SSH 127.0.0.1:1024; user@1000.service active), but its real PTY allocation fails: script: failed to create pseudo-terminal: No space left on device. Host /proc/sys/kernel/pty/{nr,max,reserve} = 4023,4096,1024. A private devpts instance cannot allocate above max-reserve (3072), so the shared host currently prevents the container terminal oracle. No host sysctl or other job was changed. Integration/gates continue; the local container terminal/scale proof needs free shared PTY capacity or a fixture using the initial devpts namespace. Current load recorded separately in gate logs.

Local proof environment finding: real systemd+sshd container is active (SSH 127.0.0.1:1024; user@1000.service active), but its real PTY allocation fails: `script: failed to create pseudo-terminal: No space left on device`. Host /proc/sys/kernel/pty/{nr,max,reserve} = 4023,4096,1024. A private devpts instance cannot allocate above max-reserve (3072), so the shared host currently prevents the container terminal oracle. No host sysctl or other job was changed. Integration/gates continue; the local container terminal/scale proof needs free shared PTY capacity or a fixture using the initial devpts namespace. Current load recorded separately in gate logs.
Author
Owner

PTY fixture resolution: rebuilt the local oracle with libpam-systemd and mounted the host initial /dev/pts into this controlled container. The same real script -q -c true /dev/null oracle now succeeds; ssh.service is active and user linger is enabled. No host sysctl or other process changed. Container still has its private cgroup namespace and real systemd service manager. This lets the local proof use the host reserved PTY capacity; scale runs must record remaining global capacity and load.

PTY fixture resolution: rebuilt the local oracle with libpam-systemd and mounted the host initial /dev/pts into this controlled container. The same real `script -q -c true /dev/null` oracle now succeeds; ssh.service is active and user linger is enabled. No host sysctl or other process changed. Container still has its private cgroup namespace and real systemd service manager. This lets the local proof use the host reserved PTY capacity; scale runs must record remaining global capacity and load.
Author
Owner

SSH merge findings: retain production host-facts plugin (host.facts.read/configure), details loader and all Mesh/remote paths; remove SSH branch older duplicated daemon facts collector and its obsolete fuzz adapter. Append server_ssh_key at 0018; preserve production SQL 0001–0014 and remote 0015–0017. BootstrapFactory/KeyInitialization now compose through the same live Auth/pool and shared runtime.

Additional seam: install.rs invokes agent --data ... join ... --enroll-only, but remote CLI Join currently accepts only its URL and always proceeds into foreground run. Installation will refuse the unknown flag or never reach service activation without an additive enroll-only mode; a failing CLI test will precede that integration fix.

Server no-default check passes (2.83s). Initial fast retry stopped at latency_proxy self-test: p50=314.47 ms, p99=364.15 ms at configured300ms RTT; this is not one of #118 allowed exemptions. Retrying the full gate under CPUWeight=10000; no thresholds or RTT changed. Neither source branch nor production changed.

SSH merge findings: retain production host-facts plugin (host.facts.read/configure), details loader and all Mesh/remote paths; remove SSH branch older duplicated daemon facts collector and its obsolete fuzz adapter. Append server_ssh_key at 0018; preserve production SQL 0001–0014 and remote 0015–0017. BootstrapFactory/KeyInitialization now compose through the same live Auth/pool and shared runtime. Additional seam: install.rs invokes `agent --data ... join ... --enroll-only`, but remote CLI Join currently accepts only its URL and always proceeds into foreground run. Installation will refuse the unknown flag or never reach service activation without an additive enroll-only mode; a failing CLI test will precede that integration fix. Server no-default check passes (2.83s). Initial fast retry stopped at latency_proxy self-test: p50=314.47 ms, p99=364.15 ms at configured300ms RTT; this is not one of #118 allowed exemptions. Retrying the full gate under CPUWeight=10000; no thresholds or RTT changed. Neither source branch nor production changed.
Author
Owner

Release integration proposal (D16/D198): preserve the frozen binary Call envelope. Add an optional JSON routing envelope for node-target actions: {"target":{"host_id":""},"input":}. The server verifies current session ownership of the active remote host before stripping routing metadata and forwarding unchanged plugin input. Calls without routing metadata keep the embedded route. Remote and SSH lifecycle adapters will share production plugin_settings and plugins.set_enabled; disabled components retire all owned work before reporting Off. No separate authentication, CA, enrollment or feature-switch store. Tests will cover foreign/revoked hosts, disabled/restarted components and production Mesh switches.

Release integration proposal (D16/D198): preserve the frozen binary Call envelope. Add an optional JSON routing envelope for node-target actions: {"target":{"host_id":"<UUID>"},"input":<existing plugin input>}. The server verifies current session ownership of the active remote host before stripping routing metadata and forwarding unchanged plugin input. Calls without routing metadata keep the embedded route. Remote and SSH lifecycle adapters will share production plugin_settings and plugins.set_enabled; disabled components retire all owned work before reporting Off. No separate authentication, CA, enrollment or feature-switch store. Tests will cover foreign/revoked hosts, disabled/restarted components and production Mesh switches.
Author
Owner

SSH merge gate finding: tests/install.rs pending_fresh_cleanup_refuses_replacement_staging_until_finished correctly refuses staging while a rollback receipt exists, but the Local transport panicked at line 45 on BrokenPipe when /bin/sh exited before reading the payload. Evidence: ssh-fast-weighted.log (24 passed, 1 failed). Repair records stdin write result, waits for command exit, and refuses either nonzero status or incomplete write; no production policy or threshold changes. The existing failure is the red regression; targeted install tests and full fast gate are rerunning. Initial latency-proxy self-test exceeded its fixed p99 bound under host load; weighted rerun passed at p99 314.82 ms, configured 300 +/-30 ms. No load exception used.

SSH merge gate finding: tests/install.rs pending_fresh_cleanup_refuses_replacement_staging_until_finished correctly refuses staging while a rollback receipt exists, but the Local transport panicked at line 45 on BrokenPipe when /bin/sh exited before reading the payload. Evidence: ssh-fast-weighted.log (24 passed, 1 failed). Repair records stdin write result, waits for command exit, and refuses either nonzero status or incomplete write; no production policy or threshold changes. The existing failure is the red regression; targeted install tests and full fast gate are rerunning. Initial latency-proxy self-test exceeded its fixed p99 bound under host load; weighted rerun passed at p99 314.82 ms, configured 300 +/-30 ms. No load exception used.
Author
Owner

Completed SSH merge: 408b26f4b1 (06d063ac onto production+remote). Preserved production Mesh/host-facts, shared API/channel daemon and shipped SQL; appended SSH key migration 0018 after remote 0015-0017. Used integrate-network key initialization composition without merging its old base. Fixed imported install test BrokenPipe race from captured red gate.

544 Rust tests pass (59 diagnostics ignored); fmt/native fmt/clippy/cargo-deny PASS. Server no-default PASS. 67 tracer and 36 protocol tests, compiler/build/transfer PASS. Fast exits 1 only for unchanged static-size ceilings (D205): stripped/static x86 19,541,776 B (+554,240 vs remote), ARM 17,429,952 B (+476,608). Dependency duplicates recorded; no new heavy engine.

Production-binary restart expired its normal browser resume leases; then stopped-data upgrade preserves all remaining values across 22 tables/9 rows, owner/passkeys/wraps/session/terminal/Mesh intact, integrity/foreign keys OK, SQL versions 1-18. Startup 60.06 ms, infraternal-dev load 12.07/16.20/18.29. Logs in release-addhost scratch/logs/ssh-fast-final.log, ssh-ts-fast.log, ssh-arm-static.log, migration-ssh.log. Canvas merge and missing runtime/UI seams remain; not deployable yet.

Completed SSH merge: 408b26f4b1ee39e4d9c58e94bb1718398c613549 (06d063ac onto production+remote). Preserved production Mesh/host-facts, shared API/channel daemon and shipped SQL; appended SSH key migration 0018 after remote 0015-0017. Used integrate-network key initialization composition without merging its old base. Fixed imported install test BrokenPipe race from captured red gate. 544 Rust tests pass (59 diagnostics ignored); fmt/native fmt/clippy/cargo-deny PASS. Server no-default PASS. 67 tracer and 36 protocol tests, compiler/build/transfer PASS. Fast exits 1 only for unchanged static-size ceilings (D205): stripped/static x86 19,541,776 B (+554,240 vs remote), ARM 17,429,952 B (+476,608). Dependency duplicates recorded; no new heavy engine. Production-binary restart expired its normal browser resume leases; then stopped-data upgrade preserves all remaining values across 22 tables/9 rows, owner/passkeys/wraps/session/terminal/Mesh intact, integrity/foreign keys OK, SQL versions 1-18. Startup 60.06 ms, infraternal-dev load 12.07/16.20/18.29. Logs in release-addhost scratch/logs/ssh-fast-final.log, ssh-ts-fast.log, ssh-arm-static.log, migration-ssh.log. Canvas merge and missing runtime/UI seams remain; not deployable yet.
Author
Owner

Canvas merge browser finding: addhost-wizard.spec.ts network enrollment opens w-remoternal, but the sidebar assertion fails because production now reads authorized session inventory (D178) rather than canvas windows. Evidence: test-results/addhost-wizard-network-acc-a29e0--in-Console-and-the-sidebar/error-context.md, expected remoternal, received only embedded current shell. Imported mock sink now adds the host to the current mock person and session inventory; newly enrolled host windows bind their first inventory session. Test explicitly opens the sidebar before inspecting it, preserving production's no-render-while-closed optimization. Other resolutions retain Mesh/details/inventory/session lifecycle and disposal; transfer-budget.ts is byte-identical to production. Targeted red case and full browser set rerunning on TRACER_TEST_PORT=4791.

Canvas merge browser finding: addhost-wizard.spec.ts network enrollment opens w-remoternal, but the sidebar assertion fails because production now reads authorized session inventory (D178) rather than canvas windows. Evidence: test-results/addhost-wizard-network-acc-a29e0--in-Console-and-the-sidebar/error-context.md, expected remoternal, received only embedded current shell. Imported mock sink now adds the host to the current mock person and session inventory; newly enrolled host windows bind their first inventory session. Test explicitly opens the sidebar before inspecting it, preserving production's no-render-while-closed optimization. Other resolutions retain Mesh/details/inventory/session lifecycle and disposal; transfer-budget.ts is byte-identical to production. Targeted red case and full browser set rerunning on TRACER_TEST_PORT=4791.
Author
Owner

Completed canvas merge 401c917e (0bf00d07). Retained production Mesh/details/inventory, all window session operations and disposal; added lazy flow window. Production transfer-budget.ts remains byte-identical. Imported mock sink adapted to authorized session inventory after captured browser failure. All 21 add-host browser cases pass including phone/cancel/one-use credentials/trust prompts. Mesh/details/clusters full 97-case run continues on port4791.

Fast: fmt, native fmt, clippy, 544 Rust tests (59 ignored), cargo-deny PASS; unchanged size-only failure remains x86 19,541,776 B / ARM 17,429,952 B (no Rust code/dependency delta). Tracer check and 92 unit tests (10,092 assertions) PASS, 36 protocol tests PASS. Build/transfer: deferred gzip48,576/51,200 B, br42,877/45,056 B; largest on-demand gzip13,947/20,480 B, br12,414/18,432 B. Logs canvas-fast.log, canvas-unit-final.log, canvas-ts-fast.log, canvas-browser-final.log. Runtime/CA/UI seams and real installed remote proof remain. Next fix is installer's --enroll-only CLI mismatch, with a red CLI parser test before implementation.

Completed canvas merge 401c917e (0bf00d07). Retained production Mesh/details/inventory, all window session operations and disposal; added lazy flow window. Production transfer-budget.ts remains byte-identical. Imported mock sink adapted to authorized session inventory after captured browser failure. All 21 add-host browser cases pass including phone/cancel/one-use credentials/trust prompts. Mesh/details/clusters full 97-case run continues on port4791. Fast: fmt, native fmt, clippy, 544 Rust tests (59 ignored), cargo-deny PASS; unchanged size-only failure remains x86 19,541,776 B / ARM 17,429,952 B (no Rust code/dependency delta). Tracer check and 92 unit tests (10,092 assertions) PASS, 36 protocol tests PASS. Build/transfer: deferred gzip48,576/51,200 B, br42,877/45,056 B; largest on-demand gzip13,947/20,480 B, br12,414/18,432 B. Logs canvas-fast.log, canvas-unit-final.log, canvas-ts-fast.log, canvas-browser-final.log. Runtime/CA/UI seams and real installed remote proof remain. Next fix is installer's --enroll-only CLI mismatch, with a red CLI parser test before implementation.
Author
Owner

Browser rerun without an own build: motion, sharing and toolbar regressions passed; split still took 1125 ms against unchanged <1000 ms gate (canvas-browser-rerun.log; load 21.97/25.12/24.68). Shared packages/ui/src/spring.ts discards elapsed time beyond 64 ms. Deterministic red test: a 1200 ms frame left value 1.0181914172575377 and scheduled another frame; logs/spring-red.log. Replacing substep integration with the closed-form solution of the same existing oscillator, preserving configuration and velocity. Green: 2 tests, 8 assertions, all three damping regimes and frame partition consistency; performance/browser validation pending. No new engine/library or budget change.

Browser rerun without an own build: motion, sharing and toolbar regressions passed; split still took 1125 ms against unchanged <1000 ms gate (canvas-browser-rerun.log; load 21.97/25.12/24.68). Shared packages/ui/src/spring.ts discards elapsed time beyond 64 ms. Deterministic red test: a 1200 ms frame left value 1.0181914172575377 and scheduled another frame; logs/spring-red.log. Replacing substep integration with the closed-form solution of the same existing oscillator, preserving configuration and velocity. Green: 2 tests, 8 assertions, all three damping regimes and frame partition consistency; performance/browser validation pending. No new engine/library or budget change.
Author
Owner

Integration contract proposal (D138/D168/D198): default SSH backend will use the existing HTTPS invitation checks and the very same EnrollmentStore event scope as the admitted remote transports. Each new attempt receives a fresh server UUID and a bounded (owner,batch,host) ownership record; failed cleanup can revoke only that record, including after logout. Add an additive default Backend.completed hook after Installation.commit to retire the ownership record without retaining secrets or leaking it per successful host. No source request or SQL 1–18 renumbering. Readiness will require admitted transport, host.facts.read matching the probed execution UID/remote mode, then an actual PTY output marker; redemption alone is insufficient. Existing unconfigured builds retain the fail-closed adapter.

Integration contract proposal (D138/D168/D198): default SSH backend will use the existing HTTPS invitation checks and the very same EnrollmentStore event scope as the admitted remote transports. Each new attempt receives a fresh server UUID and a bounded (owner,batch,host) ownership record; failed cleanup can revoke only that record, including after logout. Add an additive default Backend.completed hook after Installation.commit to retire the ownership record without retaining secrets or leaking it per successful host. No source request or SQL 1–18 renumbering. Readiness will require admitted transport, host.facts.read matching the probed execution UID/remote mode, then an actual PTY output marker; redemption alone is insufficient. Existing unconfigured builds retain the fail-closed adapter.
Author
Owner

Completed finite CLI enrollment: f745ed9c29. Exact installer argv failed before the fix; parser now accepts --enroll-only, default foreground join remains covered. Shared action steps updated (D16/D168/D202). Workspace Rust tests/clippy/deny/fmt passed. Stripped static x86_64 = 19,543,312 B (+1,536 B for the CLI flag/output vs SSH merge; +3,108,000 B vs production). Unchanged size ceiling alone fails under D205; no limit changes. TypeScript 94 tracer tests/10,100 assertions and 36 protocol tests/34,462 assertions passed; build/transfer passed. ARM finite-command size measurement follows after browser timing run.

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+
Completed finite CLI enrollment: f745ed9c2932cc9bca52d6056cd22193f4e29035. Exact installer argv failed before the fix; parser now accepts --enroll-only, default foreground join remains covered. Shared action steps updated (D16/D168/D202). Workspace Rust tests/clippy/deny/fmt passed. Stripped static x86_64 = 19,543,312 B (+1,536 B for the CLI flag/output vs SSH merge; +3,108,000 B vs production). Unchanged size ceiling alone fails under D205; no limit changes. TypeScript 94 tracer tests/10,100 assertions and 36 protocol tests/34,462 assertions passed; build/transfer passed. ARM finite-command size measurement follows after browser timing run. ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ```
Author
Owner

Motion validation, no own compilation during browser runs: first elapsed-time rerun still exceeded the split gate at 1023 ms (draw max 0.80 ms). Scale the existing two-phase spring frequency 1.5x, preserving damping ratios/overshoot and the documented ~600 ms duration. Subsequent red found first animated draw max 4.30 ms despite 624 ms completion; context construction now prepares one pixel and finishes deferred shader work before animated drawing (desktop construction already occurs at idle). Final 4/4 unchanged specs pass: split 564 ms, 22 frames, average draw 0.123 ms, max 0.50 ms; view jump 1.10 ms, window step 4.40 ms, lock toggle 1.40 ms. Load at finish 8.25/18.65/24.55; machine infraternal-dev; CPUWeight=10000; port4791. One shared GL context serves all windows, zero recurring idle work. Logs spring-browser*.log; failure evidence retained artifacts/browser-spring-{first,second,third}. Full scripts/verify fast and final TS gate running before the motion commit.

Motion validation, no own compilation during browser runs: first elapsed-time rerun still exceeded the split gate at 1023 ms (draw max 0.80 ms). Scale the existing two-phase spring frequency 1.5x, preserving damping ratios/overshoot and the documented ~600 ms duration. Subsequent red found first animated draw max 4.30 ms despite 624 ms completion; context construction now prepares one pixel and finishes deferred shader work before animated drawing (desktop construction already occurs at idle). Final 4/4 unchanged specs pass: split 564 ms, 22 frames, average draw 0.123 ms, max 0.50 ms; view jump 1.10 ms, window step 4.40 ms, lock toggle 1.40 ms. Load at finish 8.25/18.65/24.55; machine infraternal-dev; CPUWeight=10000; port4791. One shared GL context serves all windows, zero recurring idle work. Logs spring-browser*.log; failure evidence retained artifacts/browser-spring-{first,second,third}. Full scripts/verify fast and final TS gate running before the motion commit.
Author
Owner

Production UI seam evidence: 3 deterministic red tests against HEAD f745ed9c; logs/ui-seams-red.log. (1) createRealProvisioning.mintCredential calls /v1/bootstrap/credential, which the real server does not mount, and returns unavailable. Use the source SSH contract's existing target-bound auth_once over /v1/bootstrap/ws; keep only short-lived in-memory UI references, never a new secret vault or URL/file/argv material. (2) provisioning-client.ts drops Event.host_id, so the canvas sink cannot select the admitted machine. (3) model/document.ts discards host identity when saving/restoring a remote session. Proposal: additive optional canonical hostId metadata in the runtime/document session target, retaining old embedded documents; the server still checks durable ownership and session affinity. Production canvas sink currently does nothing (product.ts:76). Extend existing session/inventory adapters and use shared terminal bindings; no alternate renderer.

Production UI seam evidence: 3 deterministic red tests against HEAD f745ed9c; logs/ui-seams-red.log. (1) createRealProvisioning.mintCredential calls /v1/bootstrap/credential, which the real server does not mount, and returns unavailable. Use the source SSH contract's existing target-bound auth_once over /v1/bootstrap/ws; keep only short-lived in-memory UI references, never a new secret vault or URL/file/argv material. (2) provisioning-client.ts drops Event.host_id, so the canvas sink cannot select the admitted machine. (3) model/document.ts discards host identity when saving/restoring a remote session. Proposal: additive optional canonical hostId metadata in the runtime/document session target, retaining old embedded documents; the server still checks durable ownership and session affinity. Production canvas sink currently does nothing (product.ts:76). Extend existing session/inventory adapters and use shared terminal bindings; no alternate renderer.
Author
Owner

Completed motion correction: 0dedffa7bc. Existing oscillator now accounts for complete elapsed time; inert/under/critical/overdamped cases and frame partition consistency pass (2 tests, 10 assertions). 4/4 focused browser regressions PASS: split564 ms, avg draw0.123 ms, max0.50 ms; view1.10 ms/window4.40 ms/lock1.40 ms. Single pooled GL context; no recurring idle work. Local weighted microbenchmark normal update0.576 us vs0.620 us; 50 springs/60Hz1.73 ms CPU/sec. Tracer94 tests/10,102 assertions; protocol36 tests/34,462 assertions. Unchanged transfer ceilings pass: critical286,648/307,200 gzip238,170/256,000 br; deferred48,575/51,200 gzip42,844/45,056 br; largest on-demand13,947/20,480 gzip12,411/18,432 br. Native size unchanged19,543,312 B. Logs spring-*.log.

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+
Completed motion correction: 0dedffa7bc3f4b91bf2480fa58eace2f6135d33a. Existing oscillator now accounts for complete elapsed time; inert/under/critical/overdamped cases and frame partition consistency pass (2 tests, 10 assertions). 4/4 focused browser regressions PASS: split564 ms, avg draw0.123 ms, max0.50 ms; view1.10 ms/window4.40 ms/lock1.40 ms. Single pooled GL context; no recurring idle work. Local weighted microbenchmark normal update0.576 us vs0.620 us; 50 springs/60Hz1.73 ms CPU/sec. Tracer94 tests/10,102 assertions; protocol36 tests/34,462 assertions. Unchanged transfer ceilings pass: critical286,648/307,200 gzip238,170/256,000 br; deferred48,575/51,200 gzip42,844/45,056 br; largest on-demand13,947/20,480 gzip12,411/18,432 br. Native size unchanged19,543,312 B. Logs spring-*.log. ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ```
Author
Owner

Finite-enrollment ARM verification completed at f745ed9c/0dedffa7 (UI commit has no native changes): cargo release aarch64-unknown-linux-musl succeeded in 3m34s; stripped static executable, no PT_INTERP; 17,431,120 B (+1,168 B vs SSH merge; +3,588,976 B vs production db8c5270). x86_64 remains 19,543,312 B (+1,536 B for finite CLI enrollment). No dependency additions. Existing size ceilings remain unchanged and fail as the measured D205 feature delta; all other fast rows pass. Logs enroll-only-arm.log, spring-fast.log. Production SSH/remote adapter now compiles with all features; authority/cleanup regressions and lifecycle wiring still in progress, not release-ready yet.

Finite-enrollment ARM verification completed at f745ed9c/0dedffa7 (UI commit has no native changes): cargo release aarch64-unknown-linux-musl succeeded in 3m34s; stripped static executable, no PT_INTERP; 17,431,120 B (+1,168 B vs SSH merge; +3,588,976 B vs production db8c5270). x86_64 remains 19,543,312 B (+1,536 B for finite CLI enrollment). No dependency additions. Existing size ceilings remain unchanged and fail as the measured D205 feature delta; all other fast rows pass. Logs enroll-only-arm.log, spring-fast.log. Production SSH/remote adapter now compiles with all features; authority/cleanup regressions and lifecycle wiring still in progress, not release-ready yet.
Author
Owner

Production SSH/remote wiring now builds with all features; server --no-default-features remains green. Shared InvitationIssuer reuses the HTTPS admission/owner/session checks and exact EnrollmentStore event scope. Fresh UUID ownership is bounded at1600 records; unpublished future cancellation drops its record synchronously, and serialized capability copies are erased before return. Six focused tests PASS in0.90s: cold CA refuses before issuance/upload, foreign/revoked authority never opens SSH, unpublished cleanup preserves another batch, failed upload revokes only the new UUID even when SSH rollback is unavailable, and retained pending/key-authority tests. Backend waits for admitted transport, then checks production host.facts.read mode/UID and a real PTY marker before Installation.commit. Additive completed hook only releases bookkeeping after commit; housekeeping cannot revoke a proven installed host. Actual container install/certificate/canvas path and full gate still pending; not release-ready. Logs bootstrap-wiring-check.log, bootstrap-no-default.log, bootstrap-wiring-tests.log.

Production SSH/remote wiring now builds with all features; server --no-default-features remains green. Shared InvitationIssuer reuses the HTTPS admission/owner/session checks and exact EnrollmentStore event scope. Fresh UUID ownership is bounded at1600 records; unpublished future cancellation drops its record synchronously, and serialized capability copies are erased before return. Six focused tests PASS in0.90s: cold CA refuses before issuance/upload, foreign/revoked authority never opens SSH, unpublished cleanup preserves another batch, failed upload revokes only the new UUID even when SSH rollback is unavailable, and retained pending/key-authority tests. Backend waits for admitted transport, then checks production host.facts.read mode/UID and a real PTY marker before Installation.commit. Additive completed hook only releases bookkeeping after commit; housekeeping cannot revoke a proven installed host. Actual container install/certificate/canvas path and full gate still pending; not release-ready. Logs bootstrap-wiring-check.log, bootstrap-no-default.log, bootstrap-wiring-tests.log.
Author
Owner

Dialog credential and host-key seams: source adapter called unmounted POST /v1/bootstrap/credential and /host-key; existing authenticated bootstrap socket already accepts start.auth_once and confirm-host-key. Red proof: logs/ui-seams-red.log (credential endpoint unavailable). Adapter now consumes a target-bound local reference once into auth_once, enforces backend byte bounds, discards queued private frames on close, and waits for exact confirmation acknowledgement. 27 unit tests pass, 90 assertions (logs/credential-tests.log); tracer compiler passes. Mock server now accepts the production socket commands and rejects the nonexistent HTTP paths. Browser verification follows after the native gate releases the compiler load. No credentials were written to disk or logged.

Dialog credential and host-key seams: source adapter called unmounted POST /v1/bootstrap/credential and /host-key; existing authenticated bootstrap socket already accepts start.auth_once and confirm-host-key. Red proof: logs/ui-seams-red.log (credential endpoint unavailable). Adapter now consumes a target-bound local reference once into auth_once, enforces backend byte bounds, discards queued private frames on close, and waits for exact confirmation acknowledgement. 27 unit tests pass, 90 assertions (logs/credential-tests.log); tracer compiler passes. Mock server now accepts the production socket commands and rejects the nonexistent HTTP paths. Browser verification follows after the native gate releases the compiler load. No credentials were written to disk or logged.
Author
Owner

Add-host CA preflight proposal (additive D168): retain POST /remote/ca/status.locked and add initialized:boolean, derived from the existing in-memory public issuer projection after the same live-administrator check. The dialog uses this to distinguish first setup from cold unlock, then runs the existing purpose-bound /remote/ca/bootstrap/* or /unlock/* passkey ceremony. No account DEK or passkey PRF is transmitted; only the specified HKDF-scoped CA wrapping key goes to finish. Unconfigured CA endpoints must produce a plain setup/configuration message before opening SSH, not an opaque installation failure.

Add-host CA preflight proposal (additive D168): retain POST /remote/ca/status.locked and add initialized:boolean, derived from the existing in-memory public issuer projection after the same live-administrator check. The dialog uses this to distinguish first setup from cold unlock, then runs the existing purpose-bound /remote/ca/bootstrap/* or /unlock/* passkey ceremony. No account DEK or passkey PRF is transmitted; only the specified HKDF-scoped CA wrapping key goes to finish. Unconfigured CA endpoints must produce a plain setup/configuration message before opening SSH, not an opaque installation failure.
Author
Owner

Completed production SSH-to-CA/remote adapter: 01e6497004. 6 focused tests and 550 full Rust tests pass (59 ignored). No-default server check passes (logs/bootstrap-no-default.log). Migrations unchanged 1–18. x86 static stripped binary 19,573,872 bytes: +30,560 vs preceding head, +3,138,560 vs production db8c5270; added adapter authorization/issuer/readiness/canary code, no dependencies. D205 feature-only size exception reported; ceilings unchanged. Actual container UI proof remains pending. logs/bootstrap-wiring-fast.log:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+
Completed production SSH-to-CA/remote adapter: 01e64970042d5adf8fa01bf453f3edcf0fa1e581. 6 focused tests and 550 full Rust tests pass (59 ignored). No-default server check passes (logs/bootstrap-no-default.log). Migrations unchanged 1–18. x86 static stripped binary 19,573,872 bytes: +30,560 vs preceding head, +3,138,560 vs production db8c5270; added adapter authorization/issuer/readiness/canary code, no dependencies. D205 feature-only size exception reported; ceilings unchanged. Actual container UI proof remains pending. logs/bootstrap-wiring-fast.log: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ```
Author
Owner

Integration review caught a compatibility mistake in merge 4fdaa491: it removed production's public serve_with_plugin_descriptors adapter. The new regression test fails to compile against that head (logs/catalog-red.log, E0432). Restore the public export and pass the caller's exact compiled catalog through the shared startup/router path; ordinary startup still discovers this binary's compiled infraternal agent descriptors. No duplicate startup path or ServerConfig shape change. Verification is running before the correction commit.

Integration review caught a compatibility mistake in merge 4fdaa491: it removed production's public serve_with_plugin_descriptors adapter. The new regression test fails to compile against that head (logs/catalog-red.log, E0432). Restore the public export and pass the caller's exact compiled catalog through the shared startup/router path; ordinary startup still discovers this binary's compiled infraternal agent descriptors. No duplicate startup path or ServerConfig shape change. Verification is running before the correction commit.
Author
Owner

Real TLS browser fixture incorrectly forwarded every upgrade to /v1/ws and turned text frames into binary. Corrected-route regression on the actual static release server: baseline bootstrap retry receives no usable text reply (logs/bridge-red.log: bootstrap_text_route=false); corrected fixture receives the exact no-batch refusal (logs/bridge-green.log: bootstrap_text_route=true). Preserve requested route and isBinary both ways, and exclude bootstrap frames entirely from protocol diagnostics because they may contain private sign-in inputs. Queue cancellation erases retained buffers. No production transport change.

Real TLS browser fixture incorrectly forwarded every upgrade to /v1/ws and turned text frames into binary. Corrected-route regression on the actual static release server: baseline bootstrap retry receives no usable text reply (logs/bridge-red.log: bootstrap_text_route=false); corrected fixture receives the exact no-batch refusal (logs/bridge-green.log: bootstrap_text_route=true). Preserve requested route and isBinary both ways, and exclude bootstrap frames entirely from protocol diagnostics because they may contain private sign-in inputs. Queue cancellation erases retained buffers. No production transport change.
Author
Owner

Credential review found two concrete browser-lifetime bugs: local references accepted the same target id with a changed SSH address (red: logs/credential-address-red.log), and a saved-key prompt finishing after flow disposal could mint a reference/start another run (red: logs/credential-late-red.log). References now bind both id and address; disposed prompts return before minting, and late mint completion clears custody before return. Pre-open commands are capped at eight 32 KiB messages; late socket events cannot revive a closed run (red/green: logs/credential-queue-{red,green}.log). Current credential slice compiler, 99 unit tests/10113 assertions and unchanged transfer ceilings pass. 21 browser cases passed before these additional guards; targeted repeat follows after native compilation.

Credential review found two concrete browser-lifetime bugs: local references accepted the same target id with a changed SSH address (red: logs/credential-address-red.log), and a saved-key prompt finishing after flow disposal could mint a reference/start another run (red: logs/credential-late-red.log). References now bind both id and address; disposed prompts return before minting, and late mint completion clears custody before return. Pre-open commands are capped at eight 32 KiB messages; late socket events cannot revive a closed run (red/green: logs/credential-queue-{red,green}.log). Current credential slice compiler, 99 unit tests/10113 assertions and unchanged transfer ceilings pass. 21 browser cases passed before these additional guards; targeted repeat follows after native compilation.
Author
Owner

Completed public startup API restoration: bcae834d95. Compile regression red/green at logs/catalog-{red,green}.log; full gate 551 tests passed, 59 ignored. Configured remote fixture calls updated; migrations unchanged 1–18. Static x86 19,574,000 bytes (+128 vs 01e64970, +3,138,688 vs db8c5270); no dependency change. D205 size-only exception; limits unchanged. logs/catalog-fast-final.log, verbatim:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+
Completed public startup API restoration: bcae834d957c803a85b955727e93c58e004e5b5f. Compile regression red/green at logs/catalog-{red,green}.log; full gate 551 tests passed, 59 ignored. Configured remote fixture calls updated; migrations unchanged 1–18. Static x86 19,574,000 bytes (+128 vs 01e64970, +3,138,688 vs db8c5270); no dependency change. D205 size-only exception; limits unchanged. logs/catalog-fast-final.log, verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ```
Author
Owner

Completed production socket credential/trust wiring: 7a11db9be9. Compiler PASS; 99 unit tests, 10113 assertions; 36 protocol tests, 34462 assertions. 21 add-host browser cases passed, then final guard repeat 4/5 passed under load31; pasted-key case hit the overall30s deadline and passed unchanged in12.9s under CPUWeight10000 (logs/credential-browser-weighted.log). No timeout/budget raised. Red/green address substitution, late passkey completion, bounded queue and exact acknowledgement tests retained. Transfer: critical gzip286635/307200, br238088/256000; deferred gzip49508/51200, br43694/45056; largest on-demand gzip13967/20480, br12421/18432 (logs/credential-slice-build.log). Native binary unchanged19,574,000 bytes; no deps or migration changes. Fast gate (logs/catalog-fast-final.log), verbatim:

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

Remaining host-affinity/CA UI work is saved as source-only checkpoints in $HOME/.cache/codex-scratch/release-addhost/ui-future/manifest.json, ready to restore after this atomic credential slice. Actual container proof is still pending.

Completed production socket credential/trust wiring: 7a11db9be9e7c954bc4f6fdfe15aaaa5fbc6b1b8. Compiler PASS; 99 unit tests, 10113 assertions; 36 protocol tests, 34462 assertions. 21 add-host browser cases passed, then final guard repeat 4/5 passed under load31; pasted-key case hit the overall30s deadline and passed unchanged in12.9s under CPUWeight10000 (logs/credential-browser-weighted.log). No timeout/budget raised. Red/green address substitution, late passkey completion, bounded queue and exact acknowledgement tests retained. Transfer: critical gzip286635/307200, br238088/256000; deferred gzip49508/51200, br43694/45056; largest on-demand gzip13967/20480, br12421/18432 (logs/credential-slice-build.log). Native binary unchanged19,574,000 bytes; no deps or migration changes. Fast gate (logs/catalog-fast-final.log), verbatim: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ``` Remaining host-affinity/CA UI work is saved as source-only checkpoints in $HOME/.cache/codex-scratch/release-addhost/ui-future/manifest.json, ready to restore after this atomic credential slice. Actual container proof is still pending.
Author
Owner

Host-affinity seam: provisioning-client.ts discarded done.host_id, product.ts's enrollment sink did nothing, and live.ts opened every terminal on the embedded host. Source-only prototype is now restored from the earlier checkpoint: canonical admitted UUID reaches the canvas, TerminalClient's existing hostId option, splits and persisted v1 documents; unknown/ambiguous labels fail closed. The browser inventory remembers each session's host instead of attributing all rows to the server. Red evidence logs/remote-session-red.log and logs/ui-seams-red.log; focused20 tests/68 assertions and compiler pass (logs/host-affinity-tests.log, host-affinity-check.log). Transfer remains within original ceilings: critical286666gzip/238127br, deferred50092gzip/44237br; largest on-demand14004gzip/12482br. Full fast gate is running; remote container/canvas proof and remote details dispatch remain pending. These changes will be committed by model/wire/session/inventory/composition step.

Host-affinity seam: provisioning-client.ts discarded done.host_id, product.ts's enrollment sink did nothing, and live.ts opened every terminal on the embedded host. Source-only prototype is now restored from the earlier checkpoint: canonical admitted UUID reaches the canvas, TerminalClient's existing hostId option, splits and persisted v1 documents; unknown/ambiguous labels fail closed. The browser inventory remembers each session's host instead of attributing all rows to the server. Red evidence logs/remote-session-red.log and logs/ui-seams-red.log; focused20 tests/68 assertions and compiler pass (logs/host-affinity-tests.log, host-affinity-check.log). Transfer remains within original ceilings: critical286666gzip/238127br, deferred50092gzip/44237br; largest on-demand14004gzip/12482br. Full fast gate is running; remote container/canvas proof and remote details dispatch remain pending. These changes will be committed by model/wire/session/inventory/composition step.
Author
Owner

Completed identity helper 58bfec5c and additive saved-canvas affinity 840cef88 on release-addhost. UUID predicate is shared; v1 documents retain UUID/user/address and reject malformed identities instead of routing locally. Prior document implementation fails both new regressions; current model tests and compiler pass. Native code is unchanged: scripts/verify fast logged at /home/kayg/.cache/codex-scratch/release-addhost/logs/host-affinity-fast.log, 551 passed / 59 ignored across 65 suites, all native rows except documented D205 size-only exception. x86 static 19,574,000 bytes, no delta. Aggregate prototype tracer unit gate: 103 passed / 10,127 assertions, compiler and unchanged transfer budgets pass; subsequent module commits are being checked individually. Real remote UI proof remains pending.

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+
Completed identity helper 58bfec5c and additive saved-canvas affinity 840cef88 on release-addhost. UUID predicate is shared; v1 documents retain UUID/user/address and reject malformed identities instead of routing locally. Prior document implementation fails both new regressions; current model tests and compiler pass. Native code is unchanged: scripts/verify fast logged at /home/kayg/.cache/codex-scratch/release-addhost/logs/host-affinity-fast.log, 551 passed / 59 ignored across 65 suites, all native rows except documented D205 size-only exception. x86 static 19,574,000 bytes, no delta. Aggregate prototype tracer unit gate: 103 passed / 10,127 assertions, compiler and unchanged transfer budgets pass; subsequent module commits are being checked individually. Real remote UI proof remains pending. ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ```
Author
Owner

Completed separate UI modules on release-addhost: 19956b0e carries the admitted host_id only from canonical completion events (new regression: 19 tests / 70 assertions); e7c96110 routes terminals and splits by UUID and refuses unknown/ambiguous labels (2 tests / 8 assertions); af-inventory SHA follows in the next comment. Each tracer compiler passes; native source is unchanged by these commits, sharing the host-affinity-fast.log Rust gate (all rows PASS except unchanged D205 size-only exception at 19,574,000 bytes). Saved-document, session and inventory regressions fail against the prior implementations. No dependency or migration. Production composition and real-container proof remain pending.

Completed separate UI modules on release-addhost: 19956b0e carries the admitted host_id only from canonical completion events (new regression: 19 tests / 70 assertions); e7c96110 routes terminals and splits by UUID and refuses unknown/ambiguous labels (2 tests / 8 assertions); af-inventory SHA follows in the next comment. Each tracer compiler passes; native source is unchanged by these commits, sharing the host-affinity-fast.log Rust gate (all rows PASS except unchanged D205 size-only exception at 19,574,000 bytes). Saved-document, session and inventory regressions fail against the prior implementations. No dependency or migration. Production composition and real-container proof remain pending.
Author
Owner

Completed inventory module a6f468c2 and production composition f9778cb605. The enrolment sink now registers the admitted UUID and opens its terminal; saved canvases restore UUID affinity first, and historical unknown labels are not rebound locally. Inventory reload/cross-host regression passes (1 test / 4 assertions). Each compiler passes; final aggregate compiler, 104 tracer unit tests / 10,131 assertions and unchanged transfer budgets pass. Logs host-product-{check,unit,build}.log. Native unchanged: x86 19,574,000 bytes; host-affinity-fast.log all Rust rows PASS except documented D205 size-only exception. No migrations/dependencies. Local real-SSH UI proof and CA setup UI remain pending; not a release-completion claim.

Completed inventory module a6f468c2 and production composition f9778cb605eef2ef77b6f39df31e95e7191c491a. The enrolment sink now registers the admitted UUID and opens its terminal; saved canvases restore UUID affinity first, and historical unknown labels are not rebound locally. Inventory reload/cross-host regression passes (1 test / 4 assertions). Each compiler passes; final aggregate compiler, 104 tracer unit tests / 10,131 assertions and unchanged transfer budgets pass. Logs host-product-{check,unit,build}.log. Native unchanged: x86 19,574,000 bytes; host-affinity-fast.log all Rust rows PASS except documented D205 size-only exception. No migrations/dependencies. Local real-SSH UI proof and CA setup UI remain pending; not a release-completion claim.
Author
Owner

Completed CA trust-state helper 8aada65b, additive HTTP status c027e6a9, browser crypto reuse 744cdca9, on-demand CA ceremony 6e350f7b and provisioning hooks 71999cf11f. Status exposes initialized + locked only, behind existing live administrator/same-origin checks; finish responses unchanged. Regression fails before and passes afterward for fresh/retained trust; existing 4 CA HTTP tests pass. Browser uses the existing purpose-bound passkey proof and prescribed HKDF scope; transient PRF/account/scoped byte buffers are erased and only the scoped key is sent. Native fast gate: 552 passed / 59 ignored, 65 suites; all rows except D205 size-only exception. x86 19,578,352 bytes (+4,352 from previous head; no dependency/migration). Log /home/kayg/.cache/codex-scratch/release-addhost/logs/ca-status-fast.log.

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+
Completed CA trust-state helper 8aada65b, additive HTTP status c027e6a9, browser crypto reuse 744cdca9, on-demand CA ceremony 6e350f7b and provisioning hooks 71999cf11fac3f63dbd4f621c616ced0e1d50aa6. Status exposes initialized + locked only, behind existing live administrator/same-origin checks; finish responses unchanged. Regression fails before and passes afterward for fresh/retained trust; existing 4 CA HTTP tests pass. Browser uses the existing purpose-bound passkey proof and prescribed HKDF scope; transient PRF/account/scoped byte buffers are erased and only the scoped key is sent. Native fast gate: 552 passed / 59 ignored, 65 suites; all rows except D205 size-only exception. x86 19,578,352 bytes (+4,352 from previous head; no dependency/migration). Log /home/kayg/.cache/codex-scratch/release-addhost/logs/ca-status-fast.log. ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ```
Author
Owner

Completed CA UI f7fe41269c: before SSH the flow offers plain first-time setup or retained-trust unlock, both using the existing administrator passkey ceremony. Root consent is retained; late confirmation after disposal cannot start SSH. Compiler, 108 tests / 10,140 assertions and unchanged transfer budgets pass (critical gzip 286,763 / 307,200; deferred 50,118 / 51,200; largest on-demand 14,438 / 20,480). Browser: both new CA states pass, 22/23 cases pass together; the existing install-failure case passes unchanged weighted repeat in 16.5 s (logs ca-wizard-browser{,-repeat}.log). Native fast table previously posted; no-default server check passes.

Local container proof first startup exposed a fixture path issue: owned container/ui-state prefix produced a 112-byte setup-token Unix socket (maximum 107). Changed only scratch fixture state prefix to job/u (95 bytes), rerun underway. Actual SSH trust is preseeded from the controlled container public key; no host key acceptance/change. Software-passkey and SSH inputs remain memory-only; no recovery screenshots/traces. Local auxiliary remote listener is 10.69.69.125:47592 alongside requested static web front :47591.

Completed CA UI f7fe41269c94bae38467b651720cec703c6bed81: before SSH the flow offers plain first-time setup or retained-trust unlock, both using the existing administrator passkey ceremony. Root consent is retained; late confirmation after disposal cannot start SSH. Compiler, 108 tests / 10,140 assertions and unchanged transfer budgets pass (critical gzip 286,763 / 307,200; deferred 50,118 / 51,200; largest on-demand 14,438 / 20,480). Browser: both new CA states pass, 22/23 cases pass together; the existing install-failure case passes unchanged weighted repeat in 16.5 s (logs ca-wizard-browser{,-repeat}.log). Native fast table previously posted; no-default server check passes. Local container proof first startup exposed a fixture path issue: owned container/ui-state prefix produced a 112-byte setup-token Unix socket (maximum 107). Changed only scratch fixture state prefix to job/u (95 bytes), rerun underway. Actual SSH trust is preseeded from the controlled container public key; no host key acceptance/change. Software-passkey and SSH inputs remain memory-only; no recovery screenshots/traces. Local auxiliary remote listener is 10.69.69.125:47592 alongside requested static web front :47591.
Author
Owner

Completed fe0761aa: only an overlay fallback is aria-modal and traps Tab; canvas flows participate in ordinary keyboard focus order. Two browser regressions fail before and pass after; palette Escape stays correct (3 tests / 11 s). Compiler, 108 unit tests / 10,140 assertions and unchanged transfer limits pass: critical gzip 286,761, deferred 50,115, largest on-demand 14,453 bytes. Native unchanged at 19,578,352 bytes; native fast table posted on the CA step. Logs flow-{focus,tab}-*.log.

Local container proof also reached actual software-passkey CA setup, but SSH failed before private input because the fixture data prefix exceeded the existing credential helper's Unix socket bound (credentials.rs:93–98, temporary ControlPath suffix 17 bytes). Shortened only scratch fixture state/data layout; temporary control path is now exactly 107 bytes, without changing any socket bound or production code. Fourth run underway. No SSH key acceptance/change; no private input entered in the failing runs.

Completed fe0761aa: only an overlay fallback is aria-modal and traps Tab; canvas flows participate in ordinary keyboard focus order. Two browser regressions fail before and pass after; palette Escape stays correct (3 tests / 11 s). Compiler, 108 unit tests / 10,140 assertions and unchanged transfer limits pass: critical gzip 286,761, deferred 50,115, largest on-demand 14,453 bytes. Native unchanged at 19,578,352 bytes; native fast table posted on the CA step. Logs flow-{focus,tab}-*.log. Local container proof also reached actual software-passkey CA setup, but SSH failed before private input because the fixture data prefix exceeded the existing credential helper's Unix socket bound (credentials.rs:93–98, temporary ControlPath suffix 17 bytes). Shortened only scratch fixture state/data layout; temporary control path is now exactly 107 bytes, without changing any socket bound or production code. Fourth run underway. No SSH key acceptance/change; no private input entered in the failing runs.
Author
Owner

Finding: Wizard.rootCandidates (wizard.ts:423) considers only discovery sudo metadata, so a manually typed root@host skips consent and starts rootless installation. Check::authorize_mode correctly refuses UID 0 for rootless; the new wizard test fails against the previous code (manual-root-red.log). Manual root logins now require the existing explicit checkbox before mode=root; Back lets the operator change the SSH user, and the impossible Install as user choice is omitted. Existing discovered sudo/rootless behavior is retained. Browser and compiler gates underway; no protocol or permission change.

Local real UI proof has created a CA with a software passkey, supplied one-use SSH password in memory, installed the payload and issued a real certificate: owned fixture public counts show 1 remote host / 1 certificate. Readiness still failed afterward; the next run captures the plain failure details after clearing private-input fields. No completion claim. No host key accepted or changed.

Finding: Wizard.rootCandidates (wizard.ts:423) considers only discovery sudo metadata, so a manually typed root@host skips consent and starts rootless installation. Check::authorize_mode correctly refuses UID 0 for rootless; the new wizard test fails against the previous code (manual-root-red.log). Manual root logins now require the existing explicit checkbox before mode=root; Back lets the operator change the SSH user, and the impossible Install as user choice is omitted. Existing discovered sudo/rootless behavior is retained. Browser and compiler gates underway; no protocol or permission change. Local real UI proof has created a CA with a software passkey, supplied one-use SSH password in memory, installed the payload and issued a real certificate: owned fixture public counts show 1 remote host / 1 certificate. Readiness still failed afterward; the next run captures the plain failure details after clearing private-input fields. No completion claim. No host key accepted or changed.
Author
Owner

Local UI → software passkey → fresh CA → one-use SSH password → uploaded static binary → real systemd service → remote admission and host facts reached the terminal-readiness step. The readiness input incorrectly used even leg-B stream 2; AttachmentHandle requires odd leg-A input, and the actual actor retired the connection. Added an actual EmbeddedAgent/socket-peer regression: red timed out and reset the peer; odd-stream correction passes and a subsequent host.facts.read still succeeds (logs/canary-stream-{red,green}.log). Full gate/release rebuild underway.

The same failure exposed conservative rollback retaining an unjournaled sessions directory; retry then refused the incomplete fixture. Investigating without deleting unknown remote data. The UI also overstates cleanup success; it must describe incomplete installation without claiming all changes were undone.

Local UI → software passkey → fresh CA → one-use SSH password → uploaded static binary → real systemd service → remote admission and host facts reached the terminal-readiness step. The readiness input incorrectly used even leg-B stream 2; AttachmentHandle requires odd leg-A input, and the actual actor retired the connection. Added an actual EmbeddedAgent/socket-peer regression: red timed out and reset the peer; odd-stream correction passes and a subsequent host.facts.read still succeeds (logs/canary-stream-{red,green}.log). Full gate/release rebuild underway. The same failure exposed conservative rollback retaining an unjournaled sessions directory; retry then refused the incomplete fixture. Investigating without deleting unknown remote data. The UI also overstates cleanup success; it must describe incomplete installation without claiming all changes were undone.
Author
Owner

Completed manual SSH root-consent correction, SHA 573cc303: typing root@host now requires the existing explicit administrator-consent checkbox before installation. A failing unit regression preceded the correction; compiler and 109 unit tests / 10,142 assertions pass, and both manual-root and non-root network/rootless browser cases pass (23.6 s). Production transfer: critical 286,765 B gzip / 238,248 B Brotli; deferred 50,116 / 44,267; largest deferred 14,538 / 12,895. Native code unchanged from ca-status-fast: 552 pass, 59 ignored; only documented D205 size ceiling fails at 19,578,352 B. Evidence: logs/manual-root-* and ca-status-fast.log in release-addhost scratch.

Completed manual SSH root-consent correction, SHA 573cc303: typing root@host now requires the existing explicit administrator-consent checkbox before installation. A failing unit regression preceded the correction; compiler and 109 unit tests / 10,142 assertions pass, and both manual-root and non-root network/rootless browser cases pass (23.6 s). Production transfer: critical 286,765 B gzip / 238,248 B Brotli; deferred 50,116 / 44,267; largest deferred 14,538 / 12,895. Native code unchanged from ca-status-fast: 552 pass, 59 ignored; only documented D205 size ceiling fails at 19,578,352 B. Evidence: logs/manual-root-* and ca-status-fast.log in release-addhost scratch.
Author
Owner

Completed readiness routing at 89a6ace9, honest cleanup guide at e80055b3, and real-server WebSocket fixture correction at dbd0d5c0. Actual actor regression red→green; 553 native tests pass / 59 ignored / 65 suites. No-default server check passes (0.50 s). x86_64 static 19,578,352 B, unchanged from the previous native commit; production delta +3,143,040 B. The immutable size ceiling is the sole fast-gate failure, reported under D205; no limits changed.

Model tests: 20 pass / 74 assertions; tracer compiler and transfer budgets pass. Critical JS 286,768 gzip / 238,248 Brotli B, deferred 50,112 / 44,258 B, largest on-demand 14,587 / 12,942 B. Real-server bootstrap route/frame-type regression fails before fixture correction, passes after (5.9 s); private bootstrap frames are excluded from protocol diagnostics. Full output: release-addhost/logs/canary-fast.log.

Verbatim fast-gate summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+
Completed readiness routing at 89a6ace9, honest cleanup guide at e80055b3, and real-server WebSocket fixture correction at dbd0d5c0. Actual actor regression red→green; 553 native tests pass / 59 ignored / 65 suites. No-default server check passes (0.50 s). x86_64 static 19,578,352 B, unchanged from the previous native commit; production delta +3,143,040 B. The immutable size ceiling is the sole fast-gate failure, reported under D205; no limits changed. Model tests: 20 pass / 74 assertions; tracer compiler and transfer budgets pass. Critical JS 286,768 gzip / 238,248 Brotli B, deferred 50,112 / 44,258 B, largest on-demand 14,587 / 12,942 B. Real-server bootstrap route/frame-type regression fails before fixture correction, passes after (5.9 s); private bootstrap frames are excluded from protocol diagnostics. Full output: release-addhost/logs/canary-fast.log. Verbatim fast-gate summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ```
Author
Owner

Readiness still failed after correct leg-A input. The controlled target ran an actual systemd terminal shim and its canary shell exited; the check accepts only Output and ignores authoritative Snapshot frames. Added a snapshot-emitting actual-actor regression: red timed out at 5 s; accepting both confirmed output forms now passes both actor tests. Rebuilding static binary before claiming container success.

Fresh rollback regression: empty sessions/sessions blocks root removal; unexpected data and symlink cases lose the owner marker. Three real-files tests fail before the correction; all 28 installer tests pass afterward (1.86 s). Cleanup now removes only empty owned runtime directories without following a link, and preserves the owner marker plus exact inode-bound receipt when unknown data remains. It never recursively deletes runtime/session data.

Readiness still failed after correct leg-A input. The controlled target ran an actual systemd terminal shim and its canary shell exited; the check accepts only Output and ignores authoritative Snapshot frames. Added a snapshot-emitting actual-actor regression: red timed out at 5 s; accepting both confirmed output forms now passes both actor tests. Rebuilding static binary before claiming container success. Fresh rollback regression: empty sessions/sessions blocks root removal; unexpected data and symlink cases lose the owner marker. Three real-files tests fail before the correction; all 28 installer tests pass afterward (1.86 s). Cleanup now removes only empty owned runtime directories without following a link, and preserves the owner marker plus exact inode-bound receipt when unknown data remains. It never recursively deletes runtime/session data.
Author
Owner

Local actual UI → fresh software passkey CA → private one-use password → static upload → systemd user service → certificate → admitted remote host → usable canvas terminal succeeded. Controlled container rootless UID 1000; certificate validity 604,800 seconds; Continue→ready 6,875.99 ms; Continue→confirmed terminal output 8,528.22 ms; SQL remote terminal count 1. Screenshot artifacts/remote-terminal-desktop.png; safe phases/public-ledger metrics logs/container-ui-eleventh.log. Static x86_64 now 19,578,416 B (+64 B across pending rollback/runtime + snapshot corrections).

Fixture correction: shared host devpts has a mode-000 pts/ptmx; the container inherited a symlink and unprivileged PTY creation failed with Permission denied. Replaced only the owned container /dev/ptmx symlink with its own 0666 c5:2 device; no host devices or limits changed. The preceding failed real attempt now rolls back completely: installation root and unit absent, demonstrating empty-runtime cleanup on real files.

Remote echo benchmark pending: Chromium alone had the fixture hostname resolver rule; the independent measurement client failed DNS. Use the named local listener IP with unchanged pinned Origin, then repeat the fresh proof. No external VM contacted or host key accepted/changed.

Local actual UI → fresh software passkey CA → private one-use password → static upload → systemd user service → certificate → admitted remote host → usable canvas terminal succeeded. Controlled container rootless UID 1000; certificate validity 604,800 seconds; Continue→ready 6,875.99 ms; Continue→confirmed terminal output 8,528.22 ms; SQL remote terminal count 1. Screenshot artifacts/remote-terminal-desktop.png; safe phases/public-ledger metrics logs/container-ui-eleventh.log. Static x86_64 now 19,578,416 B (+64 B across pending rollback/runtime + snapshot corrections). Fixture correction: shared host devpts has a mode-000 pts/ptmx; the container inherited a symlink and unprivileged PTY creation failed with Permission denied. Replaced only the owned container /dev/ptmx symlink with its own 0666 c5:2 device; no host devices or limits changed. The preceding failed real attempt now rolls back completely: installation root and unit absent, demonstrating empty-runtime cleanup on real files. Remote echo benchmark pending: Chromium alone had the fixture hostname resolver rule; the independent measurement client failed DNS. Use the named local listener IP with unchanged pinned Origin, then repeat the fresh proof. No external VM contacted or host key accepted/changed.
Author
Owner

Complete local UI/container proof (logs/container-ui-thirteenth.log): Continue→ready 6,276.50 ms; Continue→confirmed remote terminal 8,208.85 ms; rootless UID 1000; certificate 604,800 seconds; public SQL remote terminal count 1; canvas layout restores after reload. Actual remote echo through browser protocol + admitted transport + real PTY: n=1,000, p50 5.670 ms, p99 28.148 ms, max 66.740 ms; machine infraternal-dev / 8 cores / load 21.33,24.49,19.43; CPUWeight=10000 scope; no synthetic CPU or output load.

Local scale proof (logs/echo-scale-first.log): 50 real PTYs × 20 samples = 1,000 echoes; echo p50 0.33 ms / p99 5.29 ms (350 ms budget PASS), input Ack p50 0.24 ms / p99 3.10 ms. Load start 32.24,25.03,18.67 and finish 31.98,25.10,18.73; same 8-core machine / CPUWeight=10000 / zero injected RTT. Fixture cleanup restored PTY usage; no host limits changed. Screenshots artifacts/ca-setup-desktop.png, ssh-install-ready.png, remote-terminal-desktop.png, remote-reload-desktop.png. Native source has pending atomic snapshot/readiness + rollback corrections; full gate running before committing them. D198 generic lifecycle integration, target-specific host details, full suites, final upgrade/artifacts/operator record remain outstanding.

Complete local UI/container proof (logs/container-ui-thirteenth.log): Continue→ready 6,276.50 ms; Continue→confirmed remote terminal 8,208.85 ms; rootless UID 1000; certificate 604,800 seconds; public SQL remote terminal count 1; canvas layout restores after reload. Actual remote echo through browser protocol + admitted transport + real PTY: n=1,000, p50 5.670 ms, p99 28.148 ms, max 66.740 ms; machine infraternal-dev / 8 cores / load 21.33,24.49,19.43; CPUWeight=10000 scope; no synthetic CPU or output load. Local scale proof (logs/echo-scale-first.log): 50 real PTYs × 20 samples = 1,000 echoes; echo p50 0.33 ms / p99 5.29 ms (350 ms budget PASS), input Ack p50 0.24 ms / p99 3.10 ms. Load start 32.24,25.03,18.67 and finish 31.98,25.10,18.73; same 8-core machine / CPUWeight=10000 / zero injected RTT. Fixture cleanup restored PTY usage; no host limits changed. Screenshots artifacts/ca-setup-desktop.png, ssh-install-ready.png, remote-terminal-desktop.png, remote-reload-desktop.png. Native source has pending atomic snapshot/readiness + rollback corrections; full gate running before committing them. D198 generic lifecycle integration, target-specific host details, full suites, final upgrade/artifacts/operator record remain outstanding.
Author
Owner

Completed atomic slices: SSH rollback 117dcc19 retains ownership and cleanup receipts around unknown files and removes only empty owned runtime directories; three real-filesystem regressions red→green, all 28 install tests pass (1.86 s). Actual failed-container retry now removes its fresh root and unit. Snapshot readiness a5dea8cc accepts the same bounded split marker in Output or Snapshot; actual actor regressions pass for both forms.

Native checkpoint: 557 tests passed, 59 ignored; fmt, clippy, tests and dependency policy pass. Static x86_64 is 19,578,416 B, +64 B across those native changes; only the immutable size ceiling fails under D205. Installed payload SHA256 c83cdc5cbd6340ad5a4439dbc2e0a1e2a72767288369ab193780b7287b629178.

Cancellation wording 2dd4451b no longer claims rollback completed: two browser cases pass (40.4 s), compiler and units pass. Reusable primary/secondary buttons 98913b33 and dialog reuse 153dad0a remove duplicated states [D160]; compiler, 25 unit tests/84 assertions and unchanged transfer ceilings pass. 27-case browser run: 26 passed; obsolete policy fixture stopped at the required root consent. Corrected consent-aware test befc4585 passes (16.1 s total). Real fixture options d8ecd870 support the isolated release proof already recorded; all private material remains in memory.

Current finding: details-live.on-demand.ts sends bare host.facts.read even for a remote window, presenting the server's login/address and facts. A new unit regression fails on that bare input. Additive bounded node addressing (proposal already recorded) now selects the canonical enrolled UUID, verifies ownership/revocation via the existing terminal selector, and refuses malformed/unknown routes without local fallback. Parser regressions red→implementation underway; full native/browser gates running. No deploy.

Completed atomic slices: SSH rollback 117dcc19 retains ownership and cleanup receipts around unknown files and removes only empty owned runtime directories; three real-filesystem regressions red→green, all 28 install tests pass (1.86 s). Actual failed-container retry now removes its fresh root and unit. Snapshot readiness a5dea8cc accepts the same bounded split marker in Output or Snapshot; actual actor regressions pass for both forms. Native checkpoint: 557 tests passed, 59 ignored; fmt, clippy, tests and dependency policy pass. Static x86_64 is 19,578,416 B, +64 B across those native changes; only the immutable size ceiling fails under D205. Installed payload SHA256 c83cdc5cbd6340ad5a4439dbc2e0a1e2a72767288369ab193780b7287b629178. Cancellation wording 2dd4451b no longer claims rollback completed: two browser cases pass (40.4 s), compiler and units pass. Reusable primary/secondary buttons 98913b33 and dialog reuse 153dad0a remove duplicated states [D160]; compiler, 25 unit tests/84 assertions and unchanged transfer ceilings pass. 27-case browser run: 26 passed; obsolete policy fixture stopped at the required root consent. Corrected consent-aware test befc4585 passes (16.1 s total). Real fixture options d8ecd870 support the isolated release proof already recorded; all private material remains in memory. Current finding: details-live.on-demand.ts sends bare host.facts.read even for a remote window, presenting the server's login/address and facts. A new unit regression fails on that bare input. Additive bounded node addressing (proposal already recorded) now selects the canonical enrolled UUID, verifies ownership/revocation via the existing terminal selector, and refuses malformed/unknown routes without local fallback. Parser regressions red→implementation underway; full native/browser gates running. No deploy.
Author
Owner

Node-addressing checkpoint (uncommitted): a clean scripts/verify fast run passed 562 tests / 59 ignored, fmt, native fmt, clippy and dependency policy. Only D205 size fails: stripped static x86_64 19,587,184 B (no PT_INTERP). Core-only cargo check passes. The real owner-socket regression refuses unknown/partial targets without forwarding to embedded leg B. Tracer: 111 tests / 10,150 assertions, compiler and unchanged transfer budgets pass.

Strict addressing regressions: positional target arrays were accepted by Serde structs; red test then explicit nested-object guard passes. A second red test shows JSON-map normalization drops duplicate inner plugin fields. Fix underway: retain the original inner bytes using the existing serde_json raw_value feature, so each plugin keeps its frozen validation/duplicate policy. No new library or version. Parser smoke executed 10,000 inputs; it was not coverage-instrumented, so this is not a coverage claim.

The earlier browser/native overlap hit two overall browser deadlines; that run is retained, not waived. It will be repeated without this job compiling concurrently. Two overlapping native attempts also shared a log path; their mixed log is discarded as gate evidence. The independent clean checkpoint above is logs/node-target-clean-fast.log. Runtime plugin lifecycle integration and final real-server/browser/migration/artifact gates remain outstanding. No deploy.

Node-addressing checkpoint (uncommitted): a clean scripts/verify fast run passed 562 tests / 59 ignored, fmt, native fmt, clippy and dependency policy. Only D205 size fails: stripped static x86_64 19,587,184 B (no PT_INTERP). Core-only cargo check passes. The real owner-socket regression refuses unknown/partial targets without forwarding to embedded leg B. Tracer: 111 tests / 10,150 assertions, compiler and unchanged transfer budgets pass. Strict addressing regressions: positional target arrays were accepted by Serde structs; red test then explicit nested-object guard passes. A second red test shows JSON-map normalization drops duplicate inner plugin fields. Fix underway: retain the original inner bytes using the existing serde_json raw_value feature, so each plugin keeps its frozen validation/duplicate policy. No new library or version. Parser smoke executed 10,000 inputs; it was not coverage-instrumented, so this is not a coverage claim. The earlier browser/native overlap hit two overall browser deadlines; that run is retained, not waived. It will be repeated without this job compiling concurrently. Two overlapping native attempts also shared a log path; their mixed log is discarded as gate evidence. The independent clean checkpoint above is logs/node-target-clean-fast.log. Runtime plugin lifecycle integration and final real-server/browser/migration/artifact gates remain outstanding. No deploy.
Author
Owner

Checkpoint gates are not green yet. node-opaque-isolated-fast.log failed SSH config_isolation because its new job-local cfg-* root made the OpenSSH temporary socket path exactly 108 bytes; shortened only that fixture prefix, focused test now 4/4 PASS. node-array-isolated-fast.log then failed Mesh review_liveness with "server closed websocket unexpectedly: None" (auth/tests.rs:1728), server suite 270 PASS/1 FAIL/30 ignored, 337.82 s. Its standalone unchanged repeat passed in 11.75 s: initial_live=true current_live=false revision=0 expiry_event_received=true. Host load 42.89/29.04/21.89, 8 cores. This Mesh failure is not among #118's allowed baseline waivers; final fast gate will be repeated without concurrent owned builds/browser and with serialized test scheduling, without extending any timeout or budget.
Node parser's explicit canonical UUID + input-array case failed before the object guard; original duplicate inner fields remain byte-for-byte opaque via serde_json's existing raw_value feature. UI details: compiler/build/transfer checks PASS; 4 focused tests/12 assertions PASS, including unknown-host no-RPC/no-server-login/address.

Checkpoint gates are not green yet. node-opaque-isolated-fast.log failed SSH config_isolation because its new job-local cfg-* root made the OpenSSH temporary socket path exactly 108 bytes; shortened only that fixture prefix, focused test now 4/4 PASS. node-array-isolated-fast.log then failed Mesh review_liveness with "server closed websocket unexpectedly: None" (auth/tests.rs:1728), server suite 270 PASS/1 FAIL/30 ignored, 337.82 s. Its standalone unchanged repeat passed in 11.75 s: initial_live=true current_live=false revision=0 expiry_event_received=true. Host load 42.89/29.04/21.89, 8 cores. This Mesh failure is not among #118's allowed baseline waivers; final fast gate will be repeated without concurrent owned builds/browser and with serialized test scheduling, without extending any timeout or budget. Node parser's explicit canonical UUID + input-array case failed before the object guard; original duplicate inner fields remain byte-for-byte opaque via serde_json's existing raw_value feature. UI details: compiler/build/transfer checks PASS; 4 focused tests/12 assertions PASS, including unknown-host no-RPC/no-server-login/address.
Author
Owner

Real end-to-end test of d8ecd870 against a stock Debian 13 VM (perf VM, temporary sshd :2222). Verdict: NOT ready.

  • P0, host-key loop. Stock sshd offers RSA, ECDSA and ED25519. The dialog trusts only fingerprints[0] (RSA), the connection negotiates ED25519 and fails, and the dialog loops. A second trust is refused, and trust.rs is create-only, so the host stays stuck. The job's local proof pre-seeded trust and missed this.
  • Results with a workaround (sshd limited to ED25519):
    • the fingerprint matched the VM's real key, fetched over NetBird;
    • installed as root, with a 7-day client-auth certificate and an enabled systemd unit;
    • Add → terminal in about 4–5 s of system time (11.6 / 14.6 s including scripted UI);
    • echo p99 36–42 ms (build host load 17–24);
    • reload restored the same session.
  • Missing: a remove-host flow (none in the UI, CLI or server). Remote shell exits aren't propagated. The install errors are vague. The copy says "saved key" for a pasted key. A data dir of 57+ characters breaks the helper socket. scripts/build-vt needs zig on PATH. Host processes show as current/live.

Evidence: ~/.cache/codex-scratch/addhost-e2e/evidence/. The VM was cleaned up afterwards.

Round 2 started from d8ecd870 (Sol), with exactly these fixes. The previous round's unrelated lifecycle WIP is parked on release-addhost-wip (f7d90427).

**Real end-to-end test of d8ecd870 against a stock Debian 13 VM (perf VM, temporary sshd :2222). Verdict: NOT ready.** - **P0, host-key loop.** Stock sshd offers RSA, ECDSA and ED25519. The dialog trusts only `fingerprints[0]` (RSA), the connection negotiates ED25519 and fails, and the dialog loops. A second trust is refused, and `trust.rs` is create-only, so the host stays stuck. The job's local proof pre-seeded trust and missed this. - **Results with a workaround** (sshd limited to ED25519): - the fingerprint matched the VM's real key, fetched over NetBird; - installed as root, with a 7-day client-auth certificate and an enabled systemd unit; - Add → terminal in about 4–5 s of system time (11.6 / 14.6 s including scripted UI); - echo p99 36–42 ms (build host load 17–24); - reload restored the same session. - **Missing:** a remove-host flow (none in the UI, CLI or server). Remote shell exits aren't propagated. The install errors are vague. The copy says "saved key" for a pasted key. A data dir of 57+ characters breaks the helper socket. `scripts/build-vt` needs zig on PATH. Host processes show as `current`/`live`. Evidence: `~/.cache/codex-scratch/addhost-e2e/evidence/`. The VM was cleaned up afterwards. Round 2 started from d8ecd870 (Sol), with exactly these fixes. The previous round's unrelated lifecycle WIP is parked on `release-addhost-wip` (f7d90427).
Author
Owner

Round 2 started on release-addhost at d8ecd870fa, sole writer. Read contract, decisions, architecture/process and issue history. Scope is the seven real-VM findings; release-addhost-wip stays excluded. First findings: trust.rs observes multiple keys but configure_pin does not pin an algorithm; credentials.rs puts Unix sockets below data-dir scratch. docs/design/TASTE.md and D168/D211/D213 are absent at this head; use explicit brief and recorded issue requirements. No push/deploy or remote VM access.

Round 2 started on release-addhost at d8ecd870fa08e06c86c999e4e1c5dd1a546a6bd1, sole writer. Read contract, decisions, architecture/process and issue history. Scope is the seven real-VM findings; release-addhost-wip stays excluded. First findings: trust.rs observes multiple keys but configure_pin does not pin an algorithm; credentials.rs puts Unix sockets below data-dir scratch. docs/design/TASTE.md and D168/D211/D213 are absent at this head; use explicit brief and recorded issue requirements. No push/deploy or remote VM access.
Author
Owner

Round 2 findings: terminal.ts:738 accepts terminal.exited without changing browser lifecycle; websocket.rs:654 forwards it but no production code writes terminal_sessions.closed_at/exit_status. Transport already emits and routes the event. Remove-host will delete visible inventory and application-owned bootstrap trust while retaining the public remote_hosts revocation tombstone required by contracts/remote-agents.md and ON DELETE RESTRICT certificate/session references. Additive proposal: remote.host.remove is declared in the remote plugin, with purpose-bound fresh owner passkey start/finish and authenticated owned-installation uninstall. First build gate failed initial_attach_requires_explicit_credit_before_replay with FileNotFoundError target/ac162575 (verify-agent-attach-credit.py:17), not a protocol failure; prepare ignored target symlink to job home build target and rerun unchanged test/full gate. Pinned-Zig regression failed first with zig: command not found, then passed using auth-tools/zig/zig without ambient Zig.

Round 2 findings: terminal.ts:738 accepts terminal.exited without changing browser lifecycle; websocket.rs:654 forwards it but no production code writes terminal_sessions.closed_at/exit_status. Transport already emits and routes the event. Remove-host will delete visible inventory and application-owned bootstrap trust while retaining the public remote_hosts revocation tombstone required by contracts/remote-agents.md and ON DELETE RESTRICT certificate/session references. Additive proposal: remote.host.remove is declared in the remote plugin, with purpose-bound fresh owner passkey start/finish and authenticated owned-installation uninstall. First build gate failed initial_attach_requires_explicit_credit_before_replay with FileNotFoundError target/ac162575 (verify-agent-attach-credit.py:17), not a protocol failure; prepare ignored target symlink to job home build target and rerun unchanged test/full gate. Pinned-Zig regression failed first with zig: command not found, then passed using auth-tools/zig/zig without ambient Zig.
Author
Owner

Completed pinned-Zig recipe 2fcc2c70 and separate regression eff6ea06. No ambient compiler is selected by build-vt or verify; no new dependency. Regression red: zig command not found; green: PASS build-vt selects pinned Zig without Zig on PATH. Full repeat native fmt/clippy/tests/deny pass; static x86 19,578,400 B (baseline d8ecd870 measured by the first gate 19,578,400 B; delta 0 across the script set), no PT_INTERP. Existing D205 size ceiling is the sole remaining gate failure. First gate test failure was missing target/ac162575; unchanged attach-credit repeat passed funded replay 149 B in 686.2 ms and complete repeat passed. Full log evidence/addhost-round2/build-fast-repeat.log. Verbatim gate:

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

Completed pinned-Zig recipe 2fcc2c70 and separate regression eff6ea06. No ambient compiler is selected by build-vt or verify; no new dependency. Regression red: zig command not found; green: PASS build-vt selects pinned Zig without Zig on PATH. Full repeat native fmt/clippy/tests/deny pass; static x86 19,578,400 B (baseline d8ecd870 measured by the first gate 19,578,400 B; delta 0 across the script set), no PT_INTERP. Existing D205 size ceiling is the sole remaining gate failure. First gate test failure was missing target/ac162575; unchanged attach-credit repeat passed funded replay 149 B in 686.2 ms and complete repeat passed. Full log evidence/addhost-round2/build-fast-repeat.log. Verbatim gate: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+
Author
Owner

Completed host-key transport fix 5e80afd2. Real rootless sshd offers RSA2048, ECDSA p256 and ED25519; no preseeded trust. One displayed ED25519 key, one confirmation, two authenticated connections; explicit changed-pin replacement and stale confirmation refusal PASS, 0.89 s. Stripped static binary 19,608,384 B, +29,984 B; no added dependency. scripts/verify fast output verbatim:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+

Completed host-key transport fix 5e80afd2. Real rootless sshd offers RSA2048, ECDSA p256 and ED25519; no preseeded trust. One displayed ED25519 key, one confirmation, two authenticated connections; explicit changed-pin replacement and stale confirmation refusal PASS, 0.89 s. Stripped static binary 19,608,384 B, +29,984 B; no added dependency. scripts/verify fast output verbatim: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+
Author
Owner

Round-two trust contract correction authorized by brief: replace create-only pins with explicit-confirmation-only atomic replacement. Bind a challenge to the old pin and effective algorithm policy, prefer one allowed ED25519 key, pin negotiation to that type, retain external known_hosts/KRL untouched. Failure adds optional host_key_type and host_key_changed. Helpers use a short owned runtime directory, independent of persistent data-path length. Browser production-build regression and four desktop/phone captures pass; captures are fixture-layout evidence, not live installation proof. Broader add-host run: 36/41 pass; obsolete blur expectation, three footer measurements during hidden progress, and one proxy keep-alive failure (repeat passes) need correction/evidence.

Round-two trust contract correction authorized by brief: replace create-only pins with explicit-confirmation-only atomic replacement. Bind a challenge to the old pin and effective algorithm policy, prefer one allowed ED25519 key, pin negotiation to that type, retain external known_hosts/KRL untouched. Failure adds optional host_key_type and host_key_changed. Helpers use a short owned runtime directory, independent of persistent data-path length. Browser production-build regression and four desktop/phone captures pass; captures are fixture-layout evidence, not live installation proof. Broader add-host run: 36/41 pass; obsolete blur expectation, three footer measurements during hidden progress, and one proxy keep-alive failure (repeat passes) need correction/evidence.
Author
Owner

Completed short-runtime helper fix and real sshd regressions. Branch release-addhost; native gate clean except D205 size 19,608,896 B (+512 B from runtime selection). Long data-path and all-three-key tests: 2 PASS in 0.90 s. Machine infraternal-dev, 8 cores; latest load 1.27/1.44/3.17. Gates verbatim:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+

Completed short-runtime helper fix and real sshd regressions. Branch release-addhost; native gate clean except D205 size 19,608,896 B (+512 B from runtime selection). Long data-path and all-three-key tests: 2 PASS in 0.90 s. Machine infraternal-dev, 8 cores; latest load 1.27/1.44/3.17. Gates verbatim: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+
Author
Owner

Completed commits: runtime helpers 15685d47, multi-key real sshd regressions ff65f75c; process naming f0d24564 + regression 2f58a607; durable shell-exit publication b00f0a06 + migrated database/passkey regression 5c8da17e. Process regression failed with live, now /proc/comm infraternal. Exit regression first failed missing closed_at, now idempotence, status7, binding and logout checks PASS. Static binary 19,616,096 B, +7,200 B for process naming and durable exit checks; no added dependencies. Gate output verbatim:
+---------------------------+--------------+
| Rust gate | Result |
+---------------------------+--------------+
| fmt | PASS |
| VT native fmt | PASS |
| clippy | PASS |
| test | PASS |
| cargo-deny | PASS |
| static builds | FAIL (1) |
+---------------------------+--------------+

Completed commits: runtime helpers 15685d47, multi-key real sshd regressions ff65f75c; process naming f0d24564 + regression 2f58a607; durable shell-exit publication b00f0a06 + migrated database/passkey regression 5c8da17e. Process regression failed with live, now /proc/comm infraternal. Exit regression first failed missing closed_at, now idempotence, status7, binding and logout checks PASS. Static binary 19,616,096 B, +7,200 B for process naming and durable exit checks; no added dependencies. Gate output verbatim: +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+
Author
Owner

Deployed to production: 0d93a502.

  • Contents: release-addhost ff65f75c, plus production web d82d0fb9, plus ui-platform, with the provisioning service loaded on demand.
  • Binary: sha256 9c3f571c…27f4ad. Backup: /var/backups/infraternal/20261010-104331-0d93a502.
  • Agent listener: a systemd drop-in, remote-listen.conf, adds --remote-listen 10.69.69.50:7443 --remote-ca-dir /var/lib/infraternal/remote-ca. That is D64's port, QUIC on UDP plus the TCP/TLS fallback, on the NetBird address only. The server is healthy, and the CA is pending until the owner runs the passkey setup.

Real VM gate (ff65f75c, stock sshd offering RSA, ECDSA and ED25519, no pre-trust): PASS.

  • One fingerprint, matching the VM's ED25519 key, trusted in one click.
  • Add → terminal in 9.5 s; echo p99 8.9 ms.
  • Reload works; the certificate is valid for 168 h; the service is enabled.
  • A data dir of 87 characters works.
  • The production-merged web passed too: the CA step appears and a terminal comes up at 9.2 s.

Open:

  • remove-host;
  • remote shell exit propagation;
  • the fingerprint has no type label;
  • re-adding a host gives a vague error;
  • "saved key" copy.

The round-2 job continues on these.

**Deployed to production: 0d93a502.** - **Contents:** release-addhost ff65f75c, plus production web d82d0fb9, plus ui-platform, with the provisioning service loaded on demand. - **Binary:** sha256 9c3f571c…27f4ad. Backup: /var/backups/infraternal/20261010-104331-0d93a502. - **Agent listener:** a systemd drop-in, `remote-listen.conf`, adds `--remote-listen 10.69.69.50:7443 --remote-ca-dir /var/lib/infraternal/remote-ca`. That is D64's port, QUIC on UDP plus the TCP/TLS fallback, on the NetBird address only. The server is healthy, and the CA is `pending` until the owner runs the passkey setup. **Real VM gate (ff65f75c, stock sshd offering RSA, ECDSA and ED25519, no pre-trust):** PASS. - One fingerprint, matching the VM's ED25519 key, trusted in one click. - Add → terminal in 9.5 s; echo p99 8.9 ms. - Reload works; the certificate is valid for 168 h; the service is enabled. - A data dir of 87 characters works. - The production-merged web passed too: the CA step appears and a terminal comes up at 9.2 s. **Open:** - remove-host; - remote shell exit propagation; - the fingerprint has no type label; - re-adding a host gives a vague error; - "saved key" copy. The round-2 job continues on these.
Author
Owner

Restarted round 2 on release-addhost at ada55317 (base d8ecd870), sole writer. Read current #87/#78/parent #5 history and repository rules. Existing committed trust/socket/Zig/process/exit work retained; uncommitted removal and diagnostic draft retained. Resume removal first, then remaining diagnostics, payload shipping and real-container gates. Latest brief authorizes per-item pushes; no deployment or external host access. TASTE.md and later decision entries remain absent at this branch.

Restarted round 2 on release-addhost at ada55317 (base d8ecd870), sole writer. Read current #87/#78/parent #5 history and repository rules. Existing committed trust/socket/Zig/process/exit work retained; uncommitted removal and diagnostic draft retained. Resume removal first, then remaining diagnostics, payload shipping and real-container gates. Latest brief authorizes per-item pushes; no deployment or external host access. TASTE.md and later decision entries remain absent at this branch.
Author
Owner

Removal checkpoint: fresh passkey/offline revocation/replay regression PASS (0.94 s); 25 UI model/routing tests PASS, 89 assertions; dev d82d0fb9 14→19 migrations PASS with ownership, foreign keys and integrity retained. Private uninstall action excluded from browser catalogue; handler is installed only for a validated managed remote installation, with no idle worker. Cleanup response reports requested vs unreachable rather than claiming completion. Additive migration retains certificate denial tombstones. Full native gate and all-three-key/no-pretrust container proof running.

Removal checkpoint: fresh passkey/offline revocation/replay regression PASS (0.94 s); 25 UI model/routing tests PASS, 89 assertions; dev d82d0fb9 14→19 migrations PASS with ownership, foreign keys and integrity retained. Private uninstall action excluded from browser catalogue; handler is installed only for a validated managed remote installation, with no idle worker. Cleanup response reports requested vs unreachable rather than claiming completion. Additive migration retains certificate denial tombstones. Full native gate and all-three-key/no-pretrust container proof running.
Author
Owner

Additive removal contract refinement before final registration: remote.host.remove supplies its label/help once; /remote/hosts/actions exposes that definition only to a live owner. /remote/hosts/remove/start binds host UUID, uninstall choice, original session hash, owner and 300-second deadline in a bounded private purpose registry. /finish requires the same host UUID and real UV passkey proof, refuses ordinary-login/CA challenges, replay, logout and role loss; a writer transaction serializes final authorization, bounded uninstall handoff, visible inventory deletion and the existing revocation fence. Public certificate tombstones remain. Internal node uninstall is absent from browser descriptors. after_write is an additive generic plugin API continuation: dropping a failed writer discards its effect; successful transmission starts it. No idle worker when disabled.

Additive removal contract refinement before final registration: remote.host.remove supplies its label/help once; /remote/hosts/actions exposes that definition only to a live owner. /remote/hosts/remove/start binds host UUID, uninstall choice, original session hash, owner and 300-second deadline in a bounded private purpose registry. /finish requires the same host UUID and real UV passkey proof, refuses ordinary-login/CA challenges, replay, logout and role loss; a writer transaction serializes final authorization, bounded uninstall handoff, visible inventory deletion and the existing revocation fence. Public certificate tombstones remain. Internal node uninstall is absent from browser descriptors. after_write is an additive generic plugin API continuation: dropping a failed writer discards its effect; successful transmission starts it. No idle worker when disabled.
Author
Owner

Round-two worktree gate: fmt, VT native fmt, clippy, tests and cargo-deny pass. Sole failure is D205 size: stripped static x86_64 is 19,885,856 bytes, +269,760 bytes over the process/exit commit set (19,616,096), from removal handoff, owned uninstall and bounded CLI/HTTP adapters. No new dependency versions (Cargo.lock adds existing shim/nix edges). TypeScript fast separately passes: 114 UI tests / 793 assertions and 36 protocol tests / 34,462 assertions; critical JS gzip 287,064/307,200 B, deferred 50,497/51,200 B. Migration: dev d82d0fb9 14→19, ownership/FKs/integrity clean. Browser and real container gates in progress.

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

Round-two worktree gate: fmt, VT native fmt, clippy, tests and cargo-deny pass. Sole failure is D205 size: stripped static x86_64 is 19,885,856 bytes, +269,760 bytes over the process/exit commit set (19,616,096), from removal handoff, owned uninstall and bounded CLI/HTTP adapters. No new dependency versions (Cargo.lock adds existing shim/nix edges). TypeScript fast separately passes: 114 UI tests / 793 assertions and 36 protocol tests / 34,462 assertions; critical JS gzip 287,064/307,200 B, deferred 50,497/51,200 B. Migration: dev d82d0fb9 14→19, ownership/FKs/integrity clean. Browser and real container gates in progress. +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+
Author
Owner

Correction to the preceding comment: the 114 UI tests performed 10,156 assertions (not 793). The protocol count is unchanged: 36 tests / 34,462 assertions. Evidence: logs/round2-ts-fast.log lines 175–178 and 311–314 under the job scratch directory.

Correction to the preceding comment: the 114 UI tests performed 10,156 assertions (not 793). The protocol count is unchanged: 36 tests / 34,462 assertions. Evidence: logs/round2-ts-fast.log lines 175–178 and 311–314 under the job scratch directory.
Author
Owner

Completed atomic implementation steps (still awaiting real-container gate before the whole removal item is pushed):
fce16692 remote: enable existing shim and Unix support for owned uninstall
3f2e5ab0 plugin-api: defer destructive effects until acceptance is written
bd8472c5 plugin-api: verify deferred effects require successful reply delivery
d19e4fed remote: remove only a validated bootstrap-owned installation
c4d2a1c7 agent: register uninstall only for a checked managed remote installation
7541d662 agent: write control acceptance before releasing plugin effects
67a0ea22 agent: prove failed acceptance writes cannot start cleanup
1027253f remote-client: forward managed installation identity to authenticated dispatch
7ad54ab2 server: retain public removal receipts and forget bootstrap coordinates
95b37843 ssh: describe failed install steps and missing architecture payloads
c3449659 ssh: expose the effective trust lookup for removal
0cecbfe9 ssh: forget an owned host pin under the publication lock
ff20b544 ssh: preserve upload install join and start error boundaries
82d88494 ssh: report allowlisted host diagnostics from authenticated commands
0006fea5 ssh: name unavailable payload architecture and expected executable path
ba55167f ssh: cover truthful step errors without reflecting private output
cde29c5a server: share the revocation fence with fresh host removal
1ae608d9 server: bind host removal to fresh owner passkey authority
d64f7692 server: admit bounded same-origin host removal requests
d62f08f5 server: mount removal behind the optional remote feature
18bdfc6f server: test real fresh-passkey removal and authority loss
3b3e8263 server: persist bootstrap lookup and refuse duplicate host enrollment

Evidence: scripts/verify fast: fmt/VT fmt/clippy/test/cargo-deny PASS; static-size-only FAIL under D205 (x86_64 19,885,856 B, +269,760 B). UI fast: 114 tests / 10,156 assertions; protocol 36 / 34,462. Fresh remote-feature removal subset: four pass in 2.58 s. Migration dev d82d0fb9: 14→19 clean. Decoder smoke: 10,000 runs without panic; this ordinary libFuzzer build has no coverage instrumentation, so it is not coverage evidence. Browser attempt interrupted after 15 pass / five timeout failures under load 38 on eight cores; all will be rerun, none waived.

Completed atomic implementation steps (still awaiting real-container gate before the whole removal item is pushed): fce16692 remote: enable existing shim and Unix support for owned uninstall 3f2e5ab0 plugin-api: defer destructive effects until acceptance is written bd8472c5 plugin-api: verify deferred effects require successful reply delivery d19e4fed remote: remove only a validated bootstrap-owned installation c4d2a1c7 agent: register uninstall only for a checked managed remote installation 7541d662 agent: write control acceptance before releasing plugin effects 67a0ea22 agent: prove failed acceptance writes cannot start cleanup 1027253f remote-client: forward managed installation identity to authenticated dispatch 7ad54ab2 server: retain public removal receipts and forget bootstrap coordinates 95b37843 ssh: describe failed install steps and missing architecture payloads c3449659 ssh: expose the effective trust lookup for removal 0cecbfe9 ssh: forget an owned host pin under the publication lock ff20b544 ssh: preserve upload install join and start error boundaries 82d88494 ssh: report allowlisted host diagnostics from authenticated commands 0006fea5 ssh: name unavailable payload architecture and expected executable path ba55167f ssh: cover truthful step errors without reflecting private output cde29c5a server: share the revocation fence with fresh host removal 1ae608d9 server: bind host removal to fresh owner passkey authority d64f7692 server: admit bounded same-origin host removal requests d62f08f5 server: mount removal behind the optional remote feature 18bdfc6f server: test real fresh-passkey removal and authority loss 3b3e8263 server: persist bootstrap lookup and refuse duplicate host enrollment Evidence: scripts/verify fast: fmt/VT fmt/clippy/test/cargo-deny PASS; static-size-only FAIL under D205 (x86_64 19,885,856 B, +269,760 B). UI fast: 114 tests / 10,156 assertions; protocol 36 / 34,462. Fresh remote-feature removal subset: four pass in 2.58 s. Migration dev d82d0fb9: 14→19 clean. Decoder smoke: 10,000 runs without panic; this ordinary libFuzzer build has no coverage instrumentation, so it is not coverage evidence. Browser attempt interrupted after 15 pass / five timeout failures under load 38 on eight cores; all will be rerun, none waived.
Author
Owner

Completed CLI/UI/distribution steps:
bd8ef5e3 cli: pass managed uninstall context and report authored join failures
d3a34a4e cli: test public join diagnostics never include private transport detail
4438a361 cli: implement host removal with private-stdin passkey proof
9e5a3568 cli: expose removal and registry-derived skill instructions
14fe1b59 tracer: confirm named host removal with a fresh passkey
833a393a tracer: forget removed remote host inventory
0fd6500d tracer: cover explicit remote inventory removal
02ea5e94 tracer: load removal on demand and close the removed host windows
e2c769bd tracer: expose registry-named removal in the command palette
44f55817 tracer: offer shared removal confirmation from machine details
e6ad09a7 tracer: show the failed install step and an already-added host plainly
0f3b7b7d tracer: cover install boundary missing payload and duplicate-host wording
3204880a release: package the server with both static host payloads
f0ef39a2 release: verify complete payload bundles and dev-shape migration
72bf1181 fuzz: exercise production removal and private uninstall decoders
9eefd3b5 contracts: document fresh removal and complete host payload distribution

Gates unchanged: Rust fast all rows PASS except D205 size; UI fast 114 tests / 10,156 assertions. Bundle test PASS, both architectures are present beside the server in /home/kayg/.cache/codex-scratch/release-addhost/round2-bundle (no deployment). Real container test is being corrected for shared-footer controls and revealed password state; no product trust blocker observed. Browser finding: saved/pasted-key specs still expected the obsolete saved-key wording; actual product says “Signed in with your key”. Spring-direction sampling after a delayed round trip caught intentional overshoot (+2.12615 px); regression now records each arriving pane before the next frame. Full browser rerun follows these assertion corrections.

Completed CLI/UI/distribution steps: bd8ef5e3 cli: pass managed uninstall context and report authored join failures d3a34a4e cli: test public join diagnostics never include private transport detail 4438a361 cli: implement host removal with private-stdin passkey proof 9e5a3568 cli: expose removal and registry-derived skill instructions 14fe1b59 tracer: confirm named host removal with a fresh passkey 833a393a tracer: forget removed remote host inventory 0fd6500d tracer: cover explicit remote inventory removal 02ea5e94 tracer: load removal on demand and close the removed host windows e2c769bd tracer: expose registry-named removal in the command palette 44f55817 tracer: offer shared removal confirmation from machine details e6ad09a7 tracer: show the failed install step and an already-added host plainly 0f3b7b7d tracer: cover install boundary missing payload and duplicate-host wording 3204880a release: package the server with both static host payloads f0ef39a2 release: verify complete payload bundles and dev-shape migration 72bf1181 fuzz: exercise production removal and private uninstall decoders 9eefd3b5 contracts: document fresh removal and complete host payload distribution Gates unchanged: Rust fast all rows PASS except D205 size; UI fast 114 tests / 10,156 assertions. Bundle test PASS, both architectures are present beside the server in /home/kayg/.cache/codex-scratch/release-addhost/round2-bundle (no deployment). Real container test is being corrected for shared-footer controls and revealed password state; no product trust blocker observed. Browser finding: saved/pasted-key specs still expected the obsolete saved-key wording; actual product says “Signed in with your key”. Spring-direction sampling after a delayed round trip caught intentional overshoot (+2.12615 px); regression now records each arriving pane before the next frame. Full browser rerun follows these assertion corrections.
Author
Owner

Real-container finding: the owned uninstall helper returns 1 while a retained shell socket exists. Authenticated local protocol probe receives Hello (59 B), Output (267 B) and Exited (13 B), then the shim closes the peer. Evidence: crates/infraternal-shim/src/session.rs:653 rejects Signal when the PTY already exited; uninstall sends Signal(9) after Attach/ReadFrom and therefore races an already retained exit. Additive contract proposal: an allowlisted Signal after exit is an idempotent no-op, preserving the retained Exited/ExitAck exchange; unsupported signals remain refused. This is needed to remove hosts that have closed terminal sessions, within #87 scope. A real-PTY failing regression will precede the fix. No lifecycle/WIP branch is imported.

Real-container finding: the owned uninstall helper returns 1 while a retained shell socket exists. Authenticated local protocol probe receives Hello (59 B), Output (267 B) and Exited (13 B), then the shim closes the peer. Evidence: crates/infraternal-shim/src/session.rs:653 rejects Signal when the PTY already exited; uninstall sends Signal(9) after Attach/ReadFrom and therefore races an already retained exit. Additive contract proposal: an allowlisted Signal after exit is an idempotent no-op, preserving the retained Exited/ExitAck exchange; unsupported signals remain refused. This is needed to remove hosts that have closed terminal sessions, within #87 scope. A real-PTY failing regression will precede the fix. No lifecycle/WIP branch is imported.
Author
Owner

Started independent robustness audit on review-addhost-breakit, base/head ada5531737. Tests/findings only; push this branch after each atomic commit. #87/parent #5 history retained in job scratch. This head lacks docs/design/TASTE.md and D168/D181/D212–D218; explicit brief and issue requirements govern. Docker direct socket denied; sudo -n docker info succeeds (29.8.2). Only disposable local containers/namespaces will be contacted; no external host access. Unique browser port 4287; build/fixture scratch under HOME cache.

Started independent robustness audit on review-addhost-breakit, base/head ada553173707e69e0ec365832c23cb129a292f27. Tests/findings only; push this branch after each atomic commit. #87/parent #5 history retained in job scratch. This head lacks docs/design/TASTE.md and D168/D181/D212–D218; explicit brief and issue requirements govern. Docker direct socket denied; sudo -n docker info succeeds (29.8.2). Only disposable local containers/namespaces will be contacted; no external host access. Unique browser port 4287; build/fixture scratch under HOME cache.
Author
Owner

P0 B01 confirmed at ada55317: Installation rollback deletes pre-existing unowned .new publication files after link/noclobber creation refuses them. Real-filesystem regressions: 0 pass / 3 fail in 0.83 s, all print cleanup_ok=true foreign_survives=false. Paths: ~/.local/bin/infraternal.new, ~/.config/systemd/user/infraternal-agent.service.new, ~/.local/share/infraternal/bin/current.new. install.rs rollback unconditionally removes these paths without creation ownership. Tests in crates/plugins/ssh/tests/install.rs; evolving evidence docs/verification/addhost-breakit.md. No product code changed. Real-sshd Debian reproduction and full gate are in progress; commit/push follows gate. Required: preserve unowned paths/bytes and report truthful recovery.

P0 B01 confirmed at ada55317: Installation rollback deletes pre-existing unowned .new publication files after link/noclobber creation refuses them. Real-filesystem regressions: 0 pass / 3 fail in 0.83 s, all print cleanup_ok=true foreign_survives=false. Paths: ~/.local/bin/infraternal.new, ~/.config/systemd/user/infraternal-agent.service.new, ~/.local/share/infraternal/bin/current.new. install.rs rollback unconditionally removes these paths without creation ownership. Tests in crates/plugins/ssh/tests/install.rs; evolving evidence docs/verification/addhost-breakit.md. No product code changed. Real-sshd Debian reproduction and full gate are in progress; commit/push follows gate. Required: preserve unowned paths/bytes and report truthful recovery.
Author
Owner

P1 B02 recovery finding at ada55317: losing batch memory after a completed upload leaves .bootstrap-lock/transaction permanently blocking a fresh attempt, even reusing the same host binding and before any service activation. Rust real-filesystem oracle restart_can_recover_an_interrupted_upload_without_old_batch_memory: 0 pass / 1 fail in 0.17 s; AUDIT restart_retry_ok=false journal_survives=true. Cleanup coordinates exist only in HostState.cleanup (bootstrap.rs), and Installation::new picks a new transaction; stage cannot recover the old journal. No product code changed. Required: securely retain/recover interrupted transaction ownership across restart or provide an explicit actionable recovery path. Evidence is being appended to docs/verification/addhost-breakit.md; tests will be committed/pushed separately after gate.

P1 B02 recovery finding at ada55317: losing batch memory after a completed upload leaves .bootstrap-lock/transaction permanently blocking a fresh attempt, even reusing the same host binding and before any service activation. Rust real-filesystem oracle restart_can_recover_an_interrupted_upload_without_old_batch_memory: 0 pass / 1 fail in 0.17 s; AUDIT restart_retry_ok=false journal_survives=true. Cleanup coordinates exist only in HostState.cleanup (bootstrap.rs), and Installation::new picks a new transaction; stage cannot recover the old journal. No product code changed. Required: securely retain/recover interrupted transaction ownership across restart or provide an explicit actionable recovery path. Evidence is being appended to docs/verification/addhost-breakit.md; tests will be committed/pushed separately after gate.
Author
Owner

Load-window comparison (#118): full worktree test gate at load up to 60.62/50.15/40.47 failed three auth socket rows (two received error instead of changed/snapshot, one Elapsed). Detached dev b9b61d07 passed those exact three rows with its default features; remote is absent there. This does NOT justify a waiver. Unchanged current compiled test binary rerun passed all three at load 45.08/38.00/38.04: 12.21 s, 1.47 s, 2.71 s. Extra baseline scale test was stopped after the required comparisons; baseline checkout removed. A fresh complete gate is running with the final clippy fix. Browser final 300 ms RTT run is in progress; corrected animation direction passed individually in 12.8 s. Logs: baseline-auth-sockets.log, current-auth-socket-rerun.log, round2-fast-release.log, round2-browser-300-final.log under job scratch.

Load-window comparison (#118): full worktree test gate at load up to 60.62/50.15/40.47 failed three auth socket rows (two received error instead of changed/snapshot, one Elapsed). Detached dev b9b61d07 passed those exact three rows with its default features; remote is absent there. This does NOT justify a waiver. Unchanged current compiled test binary rerun passed all three at load 45.08/38.00/38.04: 12.21 s, 1.47 s, 2.71 s. Extra baseline scale test was stopped after the required comparisons; baseline checkout removed. A fresh complete gate is running with the final clippy fix. Browser final 300 ms RTT run is in progress; corrected animation direction passed individually in 12.8 s. Logs: baseline-auth-sockets.log, current-auth-socket-rerun.log, round2-fast-release.log, round2-browser-300-final.log under job scratch.
Author
Owner

Completed decoder correction: 1c69786f; socket regression: 5d8520fe. Real stock three-key SSH container reached terminal and restored the same session, then exposed already_added=true being discarded in apps/tracer/src/provisioning-client.ts. Missing payload architecture/path was discarded by the same decoder. Regression failed with undefined before correction, now passes (1 test, 2 assertions); TypeScript check passes. Earlier real 1000-echo measurement: p50 3.42 ms, p99 15.60 ms, load 15.51/20.08/26.19 on infraternal-dev, 8 cores. Remaining full container flow being completed. Remote details currently uses local host facts; recorded as outside this brief, without importing parked lifecycle/registry work.

Completed decoder correction: 1c69786f; socket regression: 5d8520fe. Real stock three-key SSH container reached terminal and restored the same session, then exposed already_added=true being discarded in apps/tracer/src/provisioning-client.ts. Missing payload architecture/path was discarded by the same decoder. Regression failed with undefined before correction, now passes (1 test, 2 assertions); TypeScript check passes. Earlier real 1000-echo measurement: p50 3.42 ms, p99 15.60 ms, load 15.51/20.08/26.19 on infraternal-dev, 8 cores. Remaining full container flow being completed. Remote details currently uses local host facts; recorded as outside this brief, without importing parked lifecycle/registry work.
Author
Owner

Real container proof now passes second add (already added, no key loop, no second certificate) and remote shell exit (window closes without more input, durable status 0). Removal revoked server access but retained host files. Finding: Signal(9) targets the PTY foreground process group, so it killed raw cat and left the login shell alive; first cleanup timed out, a second cleanup then succeeded. Added failing socket regression (1.00 s timeout), corrected helper to signal the restored foreground group every 100 ms within its existing 2 s deadline, preserving partial frame reads across ticks. Regression now passes in 0.20 s, including a split frame across a tick; no protocol or engine changes. Full fast gate and fresh real cleanup proof in progress.

Real container proof now passes second add (already added, no key loop, no second certificate) and remote shell exit (window closes without more input, durable status 0). Removal revoked server access but retained host files. Finding: Signal(9) targets the PTY foreground process group, so it killed raw cat and left the login shell alive; first cleanup timed out, a second cleanup then succeeded. Added failing socket regression (1.00 s timeout), corrected helper to signal the restored foreground group every 100 ms within its existing 2 s deadline, preserving partial frame reads across ticks. Regression now passes in 0.20 s, including a split frame across a tick; no protocol or engine changes. Full fast gate and fresh real cleanup proof in progress.
Author
Owner

Real packaged container reached successful second add and durable remote exit, then remove receipt said host_cleanup=unreachable although the terminal was live. Startup finding: crates/infraternal-agent/src/plugins.rs creates the uninstall plugin while SSH bootstrap still holds .bootstrap-lock (crates/plugins/ssh/src/install.rs removes it after service readiness). Full constructor validation rejected the handler permanently. Registration now validates owned identity/artifacts without requiring bootstrap completion; every action and cleanup still requires the lock to be absent. Added rootless owned-files fixture: handler exists during bootstrap, dry-run is refused while locked and accepted only after unlock. Corrected fixture files to installation modes 0600 under this host umask. Full gate and packaged real retest running. Earlier helper correction e77efe06 and regression f32ca7d5 are pushed; both static payloads rebuilt and checksummed, pending this startup fix rebuild.

Real packaged container reached successful second add and durable remote exit, then remove receipt said host_cleanup=unreachable although the terminal was live. Startup finding: crates/infraternal-agent/src/plugins.rs creates the uninstall plugin while SSH bootstrap still holds .bootstrap-lock (crates/plugins/ssh/src/install.rs removes it after service readiness). Full constructor validation rejected the handler permanently. Registration now validates owned identity/artifacts without requiring bootstrap completion; every action and cleanup still requires the lock to be absent. Added rootless owned-files fixture: handler exists during bootstrap, dry-run is refused while locked and accepted only after unlock. Corrected fixture files to installation modes 0600 under this host umask. Full gate and packaged real retest running. Earlier helper correction e77efe06 and regression f32ca7d5 are pushed; both static payloads rebuilt and checksummed, pending this startup fix rebuild.
Author
Owner

Completed startup registration source 8353e388 and locked-request regression 83952d86. Real three-key container now reports host_cleanup=requested and removes unit, enable link, binary and data in one removal. Its final assertion found a remaining trust pin. Cause: crates/plugins/ssh/src/auth_order.rs Pending forwarded authentication but not the selected SshSession trust_lookup, leaving remote_host_bootstrap.trust_lookup NULL. Failing authentication regression returned None; forwarding the selected public lookup now passes all six ordered-authentication tests. No trust-path reconstruction or broad trust deletion; server removal retains the existing exact lookup/shared-reference guard. Both static payloads and final full gate are being rebuilt.

Completed startup registration source 8353e388 and locked-request regression 83952d86. Real three-key container now reports host_cleanup=requested and removes unit, enable link, binary and data in one removal. Its final assertion found a remaining trust pin. Cause: crates/plugins/ssh/src/auth_order.rs Pending forwarded authentication but not the selected SshSession trust_lookup, leaving remote_host_bootstrap.trust_lookup NULL. Failing authentication regression returned None; forwarding the selected public lookup now passes all six ordered-authentication tests. No trust-path reconstruction or broad trust deletion; server removal retains the existing exact lookup/shared-reference guard. Both static payloads and final full gate are being rebuilt.
Author
Owner

Finished round 2 on release-addhost, head 8b69ba22b1; pushed, no deployment. Source fixes through 72fff910; following commits attach real proof and reproduction records. Parked release-addhost-wip was not imported.

Implemented registry-defined Remove host across UI/CLI/API/skills with fresh owner passkey, existing revocation fence, inventory/trust deletion and owned host uninstall; prompt durable remote exit; honest install/payload/copy diagnostics; process names; complete server + x86_64/aarch64 static payload packaging. Real-container findings additionally fixed foreground job retirement, handler registration during bootstrap lock, and authentication fallback dropping the trust lookup.

scripts/verify fast final output (verbatim table; complete stdout in evidence/addhost-round2/verify-fast.log):

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

PT_INTERP: absent; size: 19892640 bytes (baseline 16142672 + allowance 262144 = max 16404816)
binary exceeds the 16404816-byte size budget: 19892640 bytes
Size failure reported under D205, no profile weakening. x86 growth +314240 B from d8ecd870; removal set +269760 B, late helper/registration/lookup corrections +6784 B. ARM 17729832 B, both stripped/static. Existing dependency versions and engines reused.

Separate TypeScript gate PASS (combined gate stops at size): critical JS 287065/307200 gzip B; deferred 50562/51200. Decoder socket regression PASS, 1 test/2 assertions. Add-host browser coverage: 40/41 in the default 300 ms run, fixture-reset ECONNRESET before cancellation; fresh cancellation rerun PASS, completing all 41 cases. Both outputs committed; no claim of a single clean 41-case run.

Real no-pretrust stock Debian container with RSA/ECDSA/ED25519 PASS: one ED25519 trust click, rootful UID 0, enabled service, 604800-second cert, actual terminal, reload same session, duplicate says already added without another key prompt/cert, shell exit closes its window without more input and persists status 0, fresh-passkey removal revokes live access and deletes inventory/trust plus unit/enable-link/binary/data. evidence/addhost-round2/container-pass.log and production screenshots are committed. Functional 20 echoes p50 2.68 ms/p99 12.00 ms at load 12.43/12.82/17.93. Separate 1000 echoes p50 3.42 ms/p99 15.60 ms/max 311.49 ms at load 15.51/20.08/26.19; that earlier run stopped at the later-fixed duplicate decoder, recorded explicitly. infraternal-dev, 8 cores, weighted local scope. No perf VM or SSH to another host.

PASS: dev d82d0fb9 shape (14 migrations) upgrades to 19 migrations; ownership retained, foreign keys and integrity clean
PASS: release includes server + both executable host payloads; checksums match; incomplete bundle never publishes
Production decoder fuzz target: 10000 ordinary smoke runs, no panic, without coverage instrumentation. Author checklist completed.

Tested bundle: /home/kayg/.cache/codex-scratch/release-addhost/round2-tested-bundle (infraternal, infraternal-x86_64-musl, infraternal-aarch64-musl, SHA256SUMS). Full record and reproduction: evidence/addhost-round2/README.md at this head. Temporary build targets/fixture removed; review evidence and release bundle retained.

Preexisting remote details fetch local host facts, outside this brief, recorded with evidence; no parked lifecycle/registry work imported. Issues left open for orchestrator's VM rerun.

Finished round 2 on release-addhost, head 8b69ba22b1f4fed828356715f01b3a16635dc9aa; pushed, no deployment. Source fixes through 72fff910; following commits attach real proof and reproduction records. Parked release-addhost-wip was not imported. Implemented registry-defined Remove host across UI/CLI/API/skills with fresh owner passkey, existing revocation fence, inventory/trust deletion and owned host uninstall; prompt durable remote exit; honest install/payload/copy diagnostics; process names; complete server + x86_64/aarch64 static payload packaging. Real-container findings additionally fixed foreground job retirement, handler registration during bootstrap lock, and authentication fallback dropping the trust lookup. scripts/verify fast final output (verbatim table; complete stdout in evidence/addhost-round2/verify-fast.log): ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ``` PT_INTERP: absent; size: 19892640 bytes (baseline 16142672 + allowance 262144 = max 16404816) binary exceeds the 16404816-byte size budget: 19892640 bytes Size failure reported under D205, no profile weakening. x86 growth +314240 B from d8ecd870; removal set +269760 B, late helper/registration/lookup corrections +6784 B. ARM 17729832 B, both stripped/static. Existing dependency versions and engines reused. Separate TypeScript gate PASS (combined gate stops at size): critical JS 287065/307200 gzip B; deferred 50562/51200. Decoder socket regression PASS, 1 test/2 assertions. Add-host browser coverage: 40/41 in the default 300 ms run, fixture-reset ECONNRESET before cancellation; fresh cancellation rerun PASS, completing all 41 cases. Both outputs committed; no claim of a single clean 41-case run. Real no-pretrust stock Debian container with RSA/ECDSA/ED25519 PASS: one ED25519 trust click, rootful UID 0, enabled service, 604800-second cert, actual terminal, reload same session, duplicate says already added without another key prompt/cert, shell exit closes its window without more input and persists status 0, fresh-passkey removal revokes live access and deletes inventory/trust plus unit/enable-link/binary/data. evidence/addhost-round2/container-pass.log and production screenshots are committed. Functional 20 echoes p50 2.68 ms/p99 12.00 ms at load 12.43/12.82/17.93. Separate 1000 echoes p50 3.42 ms/p99 15.60 ms/max 311.49 ms at load 15.51/20.08/26.19; that earlier run stopped at the later-fixed duplicate decoder, recorded explicitly. infraternal-dev, 8 cores, weighted local scope. No perf VM or SSH to another host. PASS: dev d82d0fb9 shape (14 migrations) upgrades to 19 migrations; ownership retained, foreign keys and integrity clean PASS: release includes server + both executable host payloads; checksums match; incomplete bundle never publishes Production decoder fuzz target: 10000 ordinary smoke runs, no panic, without coverage instrumentation. Author checklist completed. Tested bundle: /home/kayg/.cache/codex-scratch/release-addhost/round2-tested-bundle (infraternal, infraternal-x86_64-musl, infraternal-aarch64-musl, SHA256SUMS). Full record and reproduction: evidence/addhost-round2/README.md at this head. Temporary build targets/fixture removed; review evidence and release bundle retained. Preexisting remote details fetch local host facts, outside this brief, recorded with evidence; no parked lifecycle/registry work imported. Issues left open for orchestrator's VM rerun.
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#87
No description provided.