Sessions replace auto-started tmux/zellij with infraternal's session manager #170

Open
opened 2026-10-11 16:44:04 +00:00 by kayg · 460 comments
Owner

Owner request (2026-10-11), from the #169 zellij case: when a host's shell startup files would auto-start tmux or zellij, infraternal sessions should detect it and use infraternal's own session manager instead (the shim already keeps sessions alive, reattachable and shared), rather than nesting a multiplexer inside our session.

Design notes to settle before building (orchestrator):

  • Every infraternal session exports a marker (e.g. INFRATERNAL_SESSION=) so startup files and docs have a stable check.
  • Detection: at session start, see whether the login shell spawns tmux/zellij as its first child within the startup window (process tree from the shim), and/or recognise the common auto-start snippets ([ -z "$TMUX" ] && exec tmux…, zellij's generated auto-start checking $ZELLIJ).
  • Prevention without touching dotfiles: during startup only, satisfy the multiplexer's own "already inside" guard so the auto-start skips, without breaking deliberate tmux/zellij use later in the session (must not leave a fake TMUX socket path that breaks tmux commands). Needs real-engine tests with tmux and zellij auto-start configs.
  • UX: automatic and quiet by default (owner: automatic); a per-host or global switch for people who want their multiplexer anyway; the session row (D236) shows the real foreground program.
    Refs #169, D236, D240.
Owner request (2026-10-11), from the #169 zellij case: when a host's shell startup files would auto-start tmux or zellij, infraternal sessions should detect it and use infraternal's own session manager instead (the shim already keeps sessions alive, reattachable and shared), rather than nesting a multiplexer inside our session. Design notes to settle before building (orchestrator): - Every infraternal session exports a marker (e.g. INFRATERNAL_SESSION=<id>) so startup files and docs have a stable check. - Detection: at session start, see whether the login shell spawns tmux/zellij as its first child within the startup window (process tree from the shim), and/or recognise the common auto-start snippets (`[ -z "$TMUX" ] && exec tmux…`, zellij's generated auto-start checking `$ZELLIJ`). - Prevention without touching dotfiles: during startup only, satisfy the multiplexer's own "already inside" guard so the auto-start skips, without breaking deliberate tmux/zellij use later in the session (must not leave a fake TMUX socket path that breaks `tmux` commands). Needs real-engine tests with tmux and zellij auto-start configs. - UX: automatic and quiet by default (owner: automatic); a per-host or global switch for people who want their multiplexer anyway; the session row (D236) shows the real foreground program. Refs #169, D236, D240.
Author
Owner

Owner decision Q37 (2026-10-11): when an auto-started tmux/zellij is skipped, show one quiet line the first time on each host — "zellij start skipped: infraternal keeps this session for you · [Use zellij here]" — the button turns the switch off for that host; after that, nothing. Default: automatic skip on.

Owner decision Q37 (2026-10-11): when an auto-started tmux/zellij is skipped, show one quiet line the first time on each host — "zellij start skipped: infraternal keeps this session for you · [Use zellij here]" — the button turns the switch off for that host; after that, nothing. Default: automatic skip on.
Author
Owner

Starting #170 on branch multiplexer-skip, based on origin/dev at b0a3799cf459425c3402e745f329f4ebc441c144. Worktree is clean. Read #170's owner Q37 notice and parent #169 history: the original add-host terminal canary was swallowed by zellij started from zsh startup files; #170 owns that behavior and no prior implementation is recorded here.

Starting #170 on branch `multiplexer-skip`, based on `origin/dev` at `b0a3799cf459425c3402e745f329f4ebc441c144`. Worktree is clean. Read #170's owner Q37 notice and parent #169 history: the original add-host terminal canary was swallowed by zellij started from zsh startup files; #170 owns that behavior and no prior implementation is recorded here.
Author
Owner

Finding: the perf VM has tmux 3.5a, bash 5.2.37 and zsh 5.9; Zellij was absent, so v0.45.1 is isolated under /root/infraternal-bench/multiplexer-skip/bin for the required real-tool checks. The build host has 26 GB free, below the 60 GB disk guard, so no Cargo target/build has been created yet. Receipt: initial-environment.txt.

Finding: the perf VM has tmux 3.5a, bash 5.2.37 and zsh 5.9; Zellij was absent, so v0.45.1 is isolated under `/root/infraternal-bench/multiplexer-skip/bin` for the required real-tool checks. The build host has 26 GB free, below the 60 GB disk guard, so no Cargo target/build has been created yet. Receipt: [initial-environment.txt](https://git.kayg.org/attachments/ec7b53b8-dcdc-48b4-aa7a-6def6738a17a).
Author
Owner

Additive D241 backend contract for this lane; proceeding on this shape so the later UI pass can wire against a stable API:

  • Global auto-skip is per account and defaults on. Each host (including the embedded host) may override it; an explicit host value wins, and clearing the override inherits the global value.
  • terminal.multiplexer.get, terminal.multiplexer.set, and terminal.multiplexer.take_notice are authenticated WebSocket actions. Remote host_id is optional for the embedded host and is always checked against the signed-in account. take_notice claims once per account/host and only while auto-skip is effective.
  • The server passes the effective auto-skip bit on the private leg-B terminal.open request. The PTY always exports INFRATER_SESSION; when enabled, tmux/zellij's startup guards are present only through shell initialization and are cleared before the first prompt. User rc files are read as configured and never edited.
  • Exact UI copy from D241 for the later Sonnet pass: "zellij start skipped: infraternal keeps this session for you · [Use zellij here]". The per-host action sets that host's override off; the global switch remains independent.
Additive D241 backend contract for this lane; proceeding on this shape so the later UI pass can wire against a stable API: - Global auto-skip is per account and defaults on. Each host (including the embedded host) may override it; an explicit host value wins, and clearing the override inherits the global value. - `terminal.multiplexer.get`, `terminal.multiplexer.set`, and `terminal.multiplexer.take_notice` are authenticated WebSocket actions. Remote `host_id` is optional for the embedded host and is always checked against the signed-in account. `take_notice` claims once per account/host and only while auto-skip is effective. - The server passes the effective auto-skip bit on the private leg-B `terminal.open` request. The PTY always exports `INFRATER_SESSION`; when enabled, tmux/zellij's startup guards are present only through shell initialization and are cleared before the first prompt. User rc files are read as configured and never edited. - Exact UI copy from D241 for the later Sonnet pass: "zellij start skipped: infraternal keeps this session for you · [Use zellij here]". The per-host action sets that host's override off; the global switch remains independent.
Author
Owner

Finding: Zellij 0.45.1's real setup --generate-auto-start output for both bash and zsh skips only when ZELLIJ is non-empty. ZELLIJ_AUTO_ATTACH selects attach-vs-new-session; it does not disable auto-start. This supports a temporary ZELLIJ guard, cleared before the first prompt. Receipt: zellij-generated-autostart.txt.

Finding: Zellij 0.45.1's real `setup --generate-auto-start` output for both bash and zsh skips only when `ZELLIJ` is non-empty. `ZELLIJ_AUTO_ATTACH` selects attach-vs-new-session; it does not disable auto-start. This supports a temporary `ZELLIJ` guard, cleared before the first prompt. Receipt: [zellij-generated-autostart.txt](https://git.kayg.org/attachments/b3af69d2-6a99-4c4e-83ae-12d0884ff90d).
Author
Owner

Perf VM functional finding: Zellij 0.45.1's generated Zsh auto-start snippet honors a nonempty ZELLIJ guard. On Zsh 5.9.2, the shell stayed zsh; after the first-prompt hook cleared TMUX/ZELLIJ, zellij --session manual_zsh-zellij-generated started and appeared in list-sessions. Evidence: zsh-zellij-guard.txt.

Perf VM functional finding: Zellij 0.45.1's generated Zsh auto-start snippet honors a nonempty ZELLIJ guard. On Zsh 5.9.2, the shell stayed `zsh`; after the first-prompt hook cleared TMUX/ZELLIJ, `zellij --session manual_zsh-zellij-generated` started and appeared in `list-sessions`. Evidence: [zsh-zellij-guard.txt](https://git.kayg.org/attachments/2b41d62a-16d5-495f-bf3e-26dfd896c843).
Author
Owner

Real-tool startup finding: on the perf VM (Zellij 0.45.1, tmux 3.8, Zsh 5.9.2, Bash 5.3.15), the standard ZELLIJ guard skips generated Zellij startup in both shells; the standard TMUX guard skips the actual oh-my-zsh plugin and plain tmux snippets in both shells. All five shells remained their shell process, reported INFRATER_SESSION=1 with both guards unset at the prompt, and allowed a manual tool session afterward. Evidence: real-tool-startup-probe.txt.

Real-tool startup finding: on the perf VM (Zellij 0.45.1, tmux 3.8, Zsh 5.9.2, Bash 5.3.15), the standard `ZELLIJ` guard skips generated Zellij startup in both shells; the standard `TMUX` guard skips the actual oh-my-zsh plugin and plain tmux snippets in both shells. All five shells remained their shell process, reported `INFRATER_SESSION=1` with both guards unset at the prompt, and allowed a manual tool session afterward. Evidence: [real-tool-startup-probe.txt](https://git.kayg.org/attachments/2e2df4a1-097b-4381-856a-944cd4f0a3b7).
Author
Owner

Completed schema slice, pushed 89f199fc to multiplexer-skip. Migration 0026 adds two settings tables and partial unique indexes for local and remote host scopes. multiplexer_settings_migrate_for_fresh_dev_and_production_histories: 1 passed; Clippy and fmt passed. Gate evidence: schema-migration-gates.txt.

Completed schema slice, pushed `89f199fc` to `multiplexer-skip`. Migration 0026 adds two settings tables and partial unique indexes for local and remote host scopes. `multiplexer_settings_migrate_for_fresh_dev_and_production_histories`: 1 passed; Clippy and fmt passed. Gate evidence: [schema-migration-gates.txt](https://git.kayg.org/attachments/87c5e9a1-f753-486d-ab1b-745d997eb227).
Author
Owner

Finding: the broad cargo test -p infraternal-server --lib run had 4 failures after 21m33s; host load reached 75.99/56.33/53.42. auth::tests::socket_tests::session_gone::the_infraternal_agent_saying_gone_reaches_the_browser_as_the_final_close failed because the server closed the WebSocket unexpectedly. The new authenticated-socket regression passed in the same run. Receipt: server-library-suite-findings.txt. I’m rerunning this case individually to distinguish load sensitivity from a regression.

Finding: the broad `cargo test -p infraternal-server --lib` run had 4 failures after 21m33s; host load reached 75.99/56.33/53.42. `auth::tests::socket_tests::session_gone::the_infraternal_agent_saying_gone_reaches_the_browser_as_the_final_close` failed because the server closed the WebSocket unexpectedly. The new authenticated-socket regression passed in the same run. Receipt: [server-library-suite-findings.txt](https://git.kayg.org/attachments/028d276d-08dc-40fe-b0b1-c7415bdb8d0e). I’m rerunning this case individually to distinguish load sensitivity from a regression.
Author
Owner

Finding: the broad cargo test -p infraternal-server --lib run had two existing runtime tests fail with PoolTimedOut: runtime::key_runtime_tests::configured_startup_generates_once_and_settings_shares_its_cold_lock and runtime::tests::production_router_exposes_bootstrap_owner_admission. Host load reached 75.99/56.33/53.42 during the 21m33s suite. Receipt: server-library-suite-findings.txt. I’m rerunning each individually.

Finding: the broad `cargo test -p infraternal-server --lib` run had two existing runtime tests fail with `PoolTimedOut`: `runtime::key_runtime_tests::configured_startup_generates_once_and_settings_shares_its_cold_lock` and `runtime::tests::production_router_exposes_bootstrap_owner_admission`. Host load reached 75.99/56.33/53.42 during the 21m33s suite. Receipt: [server-library-suite-findings.txt](https://git.kayg.org/attachments/028d276d-08dc-40fe-b0b1-c7415bdb8d0e). I’m rerunning each individually.
Author
Owner

Finding: release_payload::tests::restarted_resolution_reclaims_partial_downloads_after_process_stop failed in the broad cargo test -p infraternal-server --lib run because the partial download did not reach its retained-byte boundary. Host load reached 75.99/56.33/53.42 during the 21m33s suite. Receipt: server-library-suite-findings.txt. I’m rerunning this case individually.

Finding: `release_payload::tests::restarted_resolution_reclaims_partial_downloads_after_process_stop` failed in the broad `cargo test -p infraternal-server --lib` run because the partial download did not reach its retained-byte boundary. Host load reached 75.99/56.33/53.42 during the 21m33s suite. Receipt: [server-library-suite-findings.txt](https://git.kayg.org/attachments/028d276d-08dc-40fe-b0b1-c7415bdb8d0e). I’m rerunning this case individually.
Author
Owner

Update: the session_gone::the_infraternal_agent_saying_gone_reaches_the_browser_as_the_final_close failure reproduces when run alone: 0 passed, 1 failed in 2.76s, panic server closed websocket unexpectedly: None at auth/tests.rs:1740. Receipt: session-gone-isolated-rerun.txt. I’m checking the same test on the clean origin/dev baseline now.

Update: the `session_gone::the_infraternal_agent_saying_gone_reaches_the_browser_as_the_final_close` failure reproduces when run alone: 0 passed, 1 failed in 2.76s, panic `server closed websocket unexpectedly: None` at `auth/tests.rs:1740`. Receipt: [session-gone-isolated-rerun.txt](https://git.kayg.org/attachments/c1c68da0-9f86-48b7-a656-c238016b6049). I’m checking the same test on the clean `origin/dev` baseline now.
Author
Owner

Baseline comparison: the isolated session_gone::the_infraternal_agent_saying_gone_reaches_the_browser_as_the_final_close test passes on clean origin/dev b0a3799c (1 passed in 1.97s). The branch had one isolated failure; I’m rerunning branch to check reproducibility. Receipt: session-gone-baseline-comparison.txt.

Baseline comparison: the isolated `session_gone::the_infraternal_agent_saying_gone_reaches_the_browser_as_the_final_close` test passes on clean `origin/dev` b0a3799c (1 passed in 1.97s). The branch had one isolated failure; I’m rerunning branch to check reproducibility. Receipt: [session-gone-baseline-comparison.txt](https://git.kayg.org/attachments/d2f317d7-20ba-401e-8f65-bf2cbc13d5a8).
Author
Owner

Update: the isolated session_gone failure did not reproduce. The test passes on clean baseline in 1.97s and on the current branch in 2.10s, with no source changes between reruns. Receipt: session-gone-resolution.txt.

Update: the isolated `session_gone` failure did not reproduce. The test passes on clean baseline in 1.97s and on the current branch in 2.10s, with no source changes between reruns. Receipt: [session-gone-resolution.txt](https://git.kayg.org/attachments/6278a023-5806-4c85-be57-61b5f588ea91).
Author
Owner

Update: both runtime PoolTimedOut cases from the broad suite pass individually on the branch: configured_startup_generates_once_and_settings_shares_its_cold_lock (1 passed, 4.19s) and production_router_exposes_bootstrap_owner_admission (1 passed, 0.89s). Receipt: server-failed-tests-isolated-reruns.txt.

Update: both runtime `PoolTimedOut` cases from the broad suite pass individually on the branch: `configured_startup_generates_once_and_settings_shares_its_cold_lock` (1 passed, 4.19s) and `production_router_exposes_bootstrap_owner_admission` (1 passed, 0.89s). Receipt: [server-failed-tests-isolated-reruns.txt](https://git.kayg.org/attachments/48c2b866-b735-44fb-8fac-f52262430f5c).
Author
Owner

Update: restarted_resolution_reclaims_partial_downloads_after_process_stop passes individually on the branch (1 passed, 3.78s), with abrupt_stops=2, retained_before_bytes=2097152, retained_after_bytes=0. Receipt: server-failed-tests-isolated-reruns.txt.

Update: `restarted_resolution_reclaims_partial_downloads_after_process_stop` passes individually on the branch (1 passed, 3.78s), with `abrupt_stops=2`, `retained_before_bytes=2097152`, `retained_after_bytes=0`. Receipt: [server-failed-tests-isolated-reruns.txt](https://git.kayg.org/attachments/48c2b866-b735-44fb-8fac-f52262430f5c).
Author
Owner

Finding: the new authenticated socket regression fails in the focused run: 12/13 filtered tests passed; terminal_multiplexer_settings_use_the_authenticated_socket_route received an unexpected empty WebSocket close. The five direct settings unit tests passed. Receipt: terminal-settings-websocket-failure.txt. I’m narrowing down which socket action closes the connection.

Finding: the new authenticated socket regression fails in the focused run: 12/13 filtered tests passed; `terminal_multiplexer_settings_use_the_authenticated_socket_route` received an unexpected empty WebSocket close. The five direct settings unit tests passed. Receipt: [terminal-settings-websocket-failure.txt](https://git.kayg.org/attachments/4093ee55-a7d2-4539-9344-4716458bef69). I’m narrowing down which socket action closes the connection.
Author
Owner

Finding resolved: local settings SQL was running inline under while_authorized, whose 25 ms authority poll uses the same SQLite pool; the one-connection fixture could contend and close the socket. It now runs in the bounded pending-call queue, preserving its ok and JSON result. The exact test passes (1/1, 1.14s) and the 13-test terminal_ group passes. Receipt: terminal-settings-websocket-fix.txt.

Finding resolved: local settings SQL was running inline under `while_authorized`, whose 25 ms authority poll uses the same SQLite pool; the one-connection fixture could contend and close the socket. It now runs in the bounded pending-call queue, preserving its `ok` and JSON result. The exact test passes (1/1, 1.14s) and the 13-test `terminal_` group passes. Receipt: [terminal-settings-websocket-fix.txt](https://git.kayg.org/attachments/f6052ead-9d92-4a4b-84e7-5302d5008504).
Author
Owner

Finding: scripts/verify iterate stopped at its built-in latency-proxy self-test before the Rust or TypeScript gates. The synthetic 300 ms RTT check reported p50=322.32 ms, p99=361.16 ms and failed its 360 ms ceiling. This is harness timing, not terminal-open performance. Receipt: verify-iterate-backend.txt. I’ll retry when the shared host is quieter.

Finding: `scripts/verify iterate` stopped at its built-in latency-proxy self-test before the Rust or TypeScript gates. The synthetic 300 ms RTT check reported p50=322.32 ms, p99=361.16 ms and failed its 360 ms ceiling. This is harness timing, not terminal-open performance. Receipt: [verify-iterate-backend.txt](https://git.kayg.org/attachments/4dd905a6-cd95-43b3-8643-7b3e4bda479e). I’ll retry when the shared host is quieter.
Author
Owner

Step complete: commit bdca2a3f7de56ef57ac3717a34f6a793eb5ece85 adds authenticated global/host settings, one-time notice persistence, catalog schemas, and bounded socket dispatch. Pushed to multiplexer-skip. Current-source gates: 13 terminal_ tests pass; server Clippy passes; fmt and git diff --check pass. scripts/verify iterate stopped at the synthetic latency-proxy self-test (p99 361.16 ms vs 360 ms ceiling), before the full Rust/TypeScript gates. Receipt: terminal-settings-commit-gates.txt.

Step complete: commit `bdca2a3f7de56ef57ac3717a34f6a793eb5ece85` adds authenticated global/host settings, one-time notice persistence, catalog schemas, and bounded socket dispatch. Pushed to `multiplexer-skip`. Current-source gates: 13 `terminal_` tests pass; server Clippy passes; fmt and `git diff --check` pass. `scripts/verify iterate` stopped at the synthetic latency-proxy self-test (p99 361.16 ms vs 360 ms ceiling), before the full Rust/TypeScript gates. Receipt: [terminal-settings-commit-gates.txt](https://git.kayg.org/attachments/882a26e7-f2f4-4a76-9f7b-38610bc8dee9).
Author
Owner

Additive leg-B/shim contract proposal for the next implementation step:

  • Add a TERMINAL_MULTIPLEXER_GUARD capability bit to the infraternal agent Hello caps.
  • Add optional skip_multiplexer_autostart: bool to terminal.open; default false. The server sends it only when the effective persisted setting is true and the peer advertised the capability. Older strict Open decoders receive no unknown field.
  • Every user shell exports INFRATERNAL_SESSION=1. When skipping is enabled, set the existing TMUX/ZELLIJ startup guards only during login-file evaluation; clear them before the first prompt and leave manual launches available. Do not edit user startup files.
  • Document the additive wire and shim environment behavior in contracts/wire.md and contracts/shim.md.

This preserves old peer decoding and adds no dependency. I’m proceeding with this additive shape under D241.

Additive leg-B/shim contract proposal for the next implementation step: - Add a `TERMINAL_MULTIPLEXER_GUARD` capability bit to the infraternal agent Hello caps. - Add optional `skip_multiplexer_autostart: bool` to `terminal.open`; default false. The server sends it only when the effective persisted setting is true and the peer advertised the capability. Older strict Open decoders receive no unknown field. - Every user shell exports `INFRATERNAL_SESSION=1`. When skipping is enabled, set the existing `TMUX`/`ZELLIJ` startup guards only during login-file evaluation; clear them before the first prompt and leave manual launches available. Do not edit user startup files. - Document the additive wire and shim environment behavior in `contracts/wire.md` and `contracts/shim.md`. This preserves old peer decoding and adds no dependency. I’m proceeding with this additive shape under D241.
Author
Owner

Startup guard step committed and pushed as af307575.

The shim now exports INFRATERNAL_SESSION, supports startup-only Bash/Zsh guards, and retains a private Zsh startup overlay for the PTY lifetime. The hidden shim action accepts the option; readiness shells bypass it.

Tests: 3 startup tests pass; the PTY environment-boundary test and hidden CLI parser test pass; Clippy and formatting pass. The first full shim run had 81 passing tests and one stale environment allowlist assertion because it did not allow the new marker; that assertion is updated and its focused rerun passes. Thirteen tests were ignored. Receipts: full shim output, startup tests, PTY boundary, CLI parser, Clippy.

Startup guard step committed and pushed as af307575. The shim now exports INFRATERNAL_SESSION, supports startup-only Bash/Zsh guards, and retains a private Zsh startup overlay for the PTY lifetime. The hidden shim action accepts the option; readiness shells bypass it. Tests: 3 startup tests pass; the PTY environment-boundary test and hidden CLI parser test pass; Clippy and formatting pass. The first full shim run had 81 passing tests and one stale environment allowlist assertion because it did not allow the new marker; that assertion is updated and its focused rerun passes. Thirteen tests were ignored. Receipts: [full shim output](https://git.kayg.org/attachments/bc4c4ae0-dbf2-4767-bfb0-6172653c28ef), [startup tests](https://git.kayg.org/attachments/4f053db4-9ebb-40a2-a05e-14f4e9fe5159), [PTY boundary](https://git.kayg.org/attachments/08a21719-64a8-47b0-91a8-6e30fbf0455c), [CLI parser](https://git.kayg.org/attachments/d72c2c83-62a5-4842-a475-8a68469a62e5), [Clippy](https://git.kayg.org/attachments/f001fd9f-1167-4032-bbd2-34aec17c4c33).
Author
Owner

Agent protocol step committed and pushed as cfee34ed.

Added Hello bit 6 for the optional startup-guard field, strict-parser compatibility tests, and the agent-to-shim option path. Readiness opens keep their prior request shape.

Tests pass: old/new terminal.open parser cases; daemon Hello capability over authenticated leg B; outgoing agent Hello over QUIC and TLS; startup-flag test (red before implementation, green after). Clippy with the remote feature and fmt pass. Receipts: parser, daemon Hello, outgoing Hello, red test, green test, Clippy.

Agent protocol step committed and pushed as cfee34ed. Added Hello bit 6 for the optional startup-guard field, strict-parser compatibility tests, and the agent-to-shim option path. Readiness opens keep their prior request shape. Tests pass: old/new terminal.open parser cases; daemon Hello capability over authenticated leg B; outgoing agent Hello over QUIC and TLS; startup-flag test (red before implementation, green after). Clippy with the remote feature and fmt pass. Receipts: [parser](https://git.kayg.org/attachments/b3d96fa3-c220-404b-82fd-e6e32a856eb4), [daemon Hello](https://git.kayg.org/attachments/5b317575-6c47-42a9-a000-5dc06cab6d58), [outgoing Hello](https://git.kayg.org/attachments/231439c7-125b-4795-b23b-53ed946f0090), [red test](https://git.kayg.org/attachments/60c33e31-d290-4a8e-9240-7b5438ffc558), [green test](https://git.kayg.org/attachments/f2a0a5f3-b46b-48be-9bc1-fb0c10047bbe), [Clippy](https://git.kayg.org/attachments/f098aa18-6bd9-4420-a75e-b432c15c4820).
Author
Owner

Server forwarding completed and pushed: d6641bb1 (remote multiplexer-skip). Focused results: 2 startup-field tests, 1 local capability-handshake test, 5 preference tests, 1 authenticated WebSocket open test, 1 remote TCP open test, and 1 remote QUIC open test passed. Remote-feature server Clippy and workspace formatting checks exited 0.

Receipts:

Server forwarding completed and pushed: d6641bb1 (remote `multiplexer-skip`). Focused results: 2 startup-field tests, 1 local capability-handshake test, 5 preference tests, 1 authenticated WebSocket open test, 1 remote TCP open test, and 1 remote QUIC open test passed. Remote-feature server Clippy and workspace formatting checks exited 0. Receipts: - [Startup request tests](https://git.kayg.org/attachments/b3737f03-d00f-4972-8ef5-fd0ae022aede) - [Local capability handshake](https://git.kayg.org/attachments/7268295c-5200-41d6-b7fd-5ec7975f5b4b) - [Preference tests](https://git.kayg.org/attachments/5ded2cab-b94d-45a7-bf1f-c00fe5e587b0) - [Authenticated WebSocket open](https://git.kayg.org/attachments/e3b4d98e-e500-46f1-9f1c-7f9ae627a4d0) - [Remote TCP open](https://git.kayg.org/attachments/2f76a625-46e1-4dc7-89db-d510022d29bb) - [Remote QUIC open](https://git.kayg.org/attachments/20a8d042-11e0-4c32-a28d-540d4c5c7ae3) - [Remote-feature Clippy](https://git.kayg.org/attachments/38e82125-71bc-445a-b206-fd75b0a862c2)
Author
Owner

Wire contract documentation completed and pushed: 2c918a43. contracts/wire.md now defines Hello bit 6, the capability-gated optional terminal.open field, unchanged legacy request shape, readiness exclusion, and the Bash/Zsh startup behavior. git diff --cached --check passed before commit.

The contract change is additive under D241; no dependency or wire version change was introduced.

Wire contract documentation completed and pushed: 2c918a43. `contracts/wire.md` now defines Hello bit 6, the capability-gated optional `terminal.open` field, unchanged legacy request shape, readiness exclusion, and the Bash/Zsh startup behavior. `git diff --cached --check` passed before commit. The contract change is additive under D241; no dependency or wire version change was introduced.
Author
Owner

Perf VM tool discovery: bash 5.2.37, zsh 5.9 and tmux 3.5a are installed in /usr/bin; Zellij 0.45.1 is present in this job's scratch directory but is not on the host PATH. The job scratch also has the Oh My Zsh checkout. I will expose these job-owned artifacts from bench's cache for the real production-startup probe.

Tool discovery receipt

Perf VM tool discovery: bash 5.2.37, zsh 5.9 and tmux 3.5a are installed in `/usr/bin`; Zellij 0.45.1 is present in this job's scratch directory but is not on the host PATH. The job scratch also has the Oh My Zsh checkout. I will expose these job-owned artifacts from bench's cache for the real production-startup probe. [Tool discovery receipt](https://git.kayg.org/attachments/5472df5d-10b8-4656-8b9f-ec7738ced44b)
Author
Owner

The perf VM has no user service bus for bench, so the required systemd-run --user --scope fails with Failed to connect to user scope bus via local transport: No such file or directory. A system transient scope with --uid=bench -p CPUWeight=10000 succeeds. I’ll run the benchmark in that weighted bench-owned scope and record this constraint with the results.

Scope check receipt

The perf VM has no user service bus for `bench`, so the required `systemd-run --user --scope` fails with `Failed to connect to user scope bus via local transport: No such file or directory`. A system transient scope with `--uid=bench -p CPUWeight=10000` succeeds. I’ll run the benchmark in that weighted bench-owned scope and record this constraint with the results. [Scope check receipt](https://git.kayg.org/attachments/41f571d7-76ee-4fc5-bd29-b97238e6207c)
Author
Owner

Real PTY probe committed and pushed: 1dd87fea. Local gates: cargo test -p infraternal-shim --lib finished with 82 passed, 0 failed, 14 ignored in 244.40s; the focused startup suite passed 3/3; Clippy and cargo fmt --all -- --check exited 0.

The ignored perf-VM probe covers real Bash/Zsh, plain TMUX and generated Zellij auto-start, and the Oh My Zsh tmux plugin; it also verifies later manual sessions and measures 31 guarded/unguarded PTY-to-first-prompt samples per shell. The VM run is queued behind the shared perf lock. Because bench has no user bus, it will use a system transient scope with UID=bench and CPUWeight=10000.

Receipts:

Real PTY probe committed and pushed: 1dd87fea. Local gates: `cargo test -p infraternal-shim --lib` finished with 82 passed, 0 failed, 14 ignored in 244.40s; the focused startup suite passed 3/3; Clippy and `cargo fmt --all -- --check` exited 0. The ignored perf-VM probe covers real Bash/Zsh, plain TMUX and generated Zellij auto-start, and the Oh My Zsh tmux plugin; it also verifies later manual sessions and measures 31 guarded/unguarded PTY-to-first-prompt samples per shell. The VM run is queued behind the shared perf lock. Because `bench` has no user bus, it will use a system transient scope with UID=bench and CPUWeight=10000. Receipts: - [Shim Clippy](https://git.kayg.org/attachments/d77b0f07-45e8-43cd-9811-ce5ba0645cc4) - [Shell startup tests](https://git.kayg.org/attachments/c80294cd-c4e2-4c6e-9b1f-10587e943e40) - [Formatting check](https://git.kayg.org/attachments/4548933b-23a4-4ea9-b6b0-cc33cf48ff94)
Author
Owner

Finding: the Bash startup guard unconditionally assigns PROMPT_COMMAND while arranging first-prompt cleanup (crates/infraternal-shim/src/shell_startup.rs). This replaces any inherited prompt hook; a user rc assignment can also replace the cleanup hook. I am validating the real-shell behavior before changing it.

Finding: the Bash startup guard unconditionally assigns PROMPT_COMMAND while arranging first-prompt cleanup (crates/infraternal-shim/src/shell_startup.rs). This replaces any inherited prompt hook; a user rc assignment can also replace the cleanup hook. I am validating the real-shell behavior before changing it.
Author
Owner

Tool check on perf VM, Zellij 0.45.1: generated Bash/Zsh auto-start snippets skip only when ZELLIJ is set; ZELLIJ_AUTO_ATTACH=false still takes the zellij branch. That confirms a temporary ZELLIJ startup guard is needed, then must be cleared before the first user command. Receipt: generated snippet.

Tool check on perf VM, Zellij 0.45.1: generated Bash/Zsh auto-start snippets skip only when ZELLIJ is set; ZELLIJ_AUTO_ATTACH=false still takes the `zellij` branch. That confirms a temporary ZELLIJ startup guard is needed, then must be cleared before the first user command. Receipt: [generated snippet](https://git.kayg.org/attachments/2f92b34e-d74f-4cbe-974f-19acf440c5d7).
Author
Owner

Finding: scripts/verify iterate stopped before Rust/TypeScript gates at its synthetic latency-proxy self-test: p50=328.16 ms, p99=452.15 ms against a 360 ms ceiling. Artifact-size and release functional checks passed; deployment test logged Build deferred: host capacity limit reached. This is a gate-host timing failure, not terminal-open evidence. I will retry the iterate gate when host load is lower. Full log: verify-iterate.log.

Finding: scripts/verify iterate stopped before Rust/TypeScript gates at its synthetic latency-proxy self-test: p50=328.16 ms, p99=452.15 ms against a 360 ms ceiling. Artifact-size and release functional checks passed; deployment test logged `Build deferred: host capacity limit reached`. This is a gate-host timing failure, not terminal-open evidence. I will retry the iterate gate when host load is lower. Full log: [verify-iterate.log](https://git.kayg.org/attachments/f4697037-6c20-44b4-a9c5-2851590cd1a1).
Author
Owner

Finding: the first weighted perf-VM invocation reached the real test but stopped before any shell case: bench could not create its scratch subdirectory because the job parent had been created root-owned. I created the missing test root as bench:bench mode 0700 outside the worktree; no production code changed. I am rerunning the test under the lock. Receipt: permission failure log.

Finding: the first weighted perf-VM invocation reached the real test but stopped before any shell case: `bench` could not create its scratch subdirectory because the job parent had been created root-owned. I created the missing test root as `bench:bench` mode 0700 outside the worktree; no production code changed. I am rerunning the test under the lock. Receipt: [permission failure log](https://git.kayg.org/attachments/602ba076-e677-49fb-9843-e19ff63c06b8).
Author
Owner

Finding: a fresh merge-base (b0a3799cf459425c3402e745f329f4ebc441c144) static x86_64 release build using the shipping Cargo recipe is stripped/static-pie at 22,275,888 bytes. The committed D243 cap is 22,204,304 bytes, so origin/dev already exceeds it by 71,584 bytes before this branch change. The gate helper reproduces the same delta. I am measuring this branch against that base and will not raise the cap; the existing base drift needs an owner-approved size reduction/decision. Receipt: base size gate output.

Finding: a fresh merge-base (`b0a3799cf459425c3402e745f329f4ebc441c144`) static x86_64 release build using the shipping Cargo recipe is stripped/static-pie at 22,275,888 bytes. The committed D243 cap is 22,204,304 bytes, so origin/dev already exceeds it by 71,584 bytes before this branch change. The gate helper reproduces the same delta. I am measuring this branch against that base and will not raise the cap; the existing base drift needs an owner-approved size reduction/decision. Receipt: [base size gate output](https://git.kayg.org/attachments/dc6acdfa-0a79-4950-96cf-faddd379d716).
Author
Owner

Static size finding: branch x86_64 is 22,330,640 bytes vs merge base 22,275,888 bytes, a measured +54,752 bytes (+0.246%). This is above the 16 KB review threshold and below 64 KB; the growth is justified by the D241 authenticated global/host settings path, persisted reads on open, and Bash/Zsh startup guards. Section deltas are mostly .text +38,236 B, .rodata +8,192 B and exception/frame metadata; no Cargo.toml/Cargo.lock additions. The merge-base binary already exceeds the committed cap by 71,584 B, so this branch is 126,336 B above it; I have not raised the cap. Full measurement receipt: static-size-comparison.txt.

Static size finding: branch x86_64 is 22,330,640 bytes vs merge base 22,275,888 bytes, a measured +54,752 bytes (+0.246%). This is above the 16 KB review threshold and below 64 KB; the growth is justified by the D241 authenticated global/host settings path, persisted reads on open, and Bash/Zsh startup guards. Section deltas are mostly .text +38,236 B, .rodata +8,192 B and exception/frame metadata; no Cargo.toml/Cargo.lock additions. The merge-base binary already exceeds the committed cap by 71,584 B, so this branch is 126,336 B above it; I have not raised the cap. Full measurement receipt: [static-size-comparison.txt](https://git.kayg.org/attachments/75df5359-826a-4011-876c-9fe8b3c845a3).
Author
Owner

Finding: after the perf lock became available, the second harness invocation exited before any shell case because its systemd-run --setenv keys misspelled the required INFRATERNAL_TEST_* variable prefix. I corrected the launch names; no source changed. Receipt: env setup failure.

Finding: after the perf lock became available, the second harness invocation exited before any shell case because its `systemd-run --setenv` keys misspelled the required `INFRATERNAL_TEST_*` variable prefix. I corrected the launch names; no source changed. Receipt: [env setup failure](https://git.kayg.org/attachments/7ccf0019-4629-41a7-8144-7fe216c73244).
Author
Owner

Finding: the corrected perf-VM run entered the first Bash case but failed its manual tmux check. The real tmux 3.5a reported File name too long for sockets under the long test scratch/runtime path. Root cause is fixture path length, not the startup guard; I am shortening the test root and unique mux tag before rerunning. Receipt: tmux path failure.

Finding: the corrected perf-VM run entered the first Bash case but failed its manual tmux check. The real tmux 3.5a reported File name too long for sockets under the long test scratch/runtime path. Root cause is fixture path length, not the startup guard; I am shortening the test root and unique mux tag before rerunning. Receipt: [tmux path failure](https://git.kayg.org/attachments/682eb06f-e193-4965-8f34-5fef40cf5360).
Author
Owner

Correction: the last VM invocation still used INFRATERNA_TEST_* without its final L, so it failed before any shell case. I have verified the exact INFRATERNAL_TEST_MULTIPLEXER_BIN and INFRATERNAL_TEST_OH_MY_ZSH names in the test source and will use them in the next invocation. Receipt: second env setup failure.

Correction: the last VM invocation still used `INFRATERNA_TEST_*` without its final L, so it failed before any shell case. I have verified the exact `INFRATERNAL_TEST_MULTIPLEXER_BIN` and `INFRATERNAL_TEST_OH_MY_ZSH` names in the test source and will use them in the next invocation. Receipt: [second env setup failure](https://git.kayg.org/attachments/8537602a-2508-4bbd-bb4b-0cd0f5f14339).
Author
Owner

Finding resolved: PTY echo included the manual-success sentinel before tmux executed, so the harness checked its socket too early. The state sentinel had the same false-positive risk. I am moving both sentinels to child environment values and matching only the command output, then rerunning. Receipt: PTY echo race.

Finding resolved: PTY echo included the manual-success sentinel before tmux executed, so the harness checked its socket too early. The state sentinel had the same false-positive risk. I am moving both sentinels to child environment values and matching only the command output, then rerunning. Receipt: [PTY echo race](https://git.kayg.org/attachments/a4386f16-736d-4dc2-b763-9e0ad8e1b9bd).
Author
Owner

Real-engine rerun after PTY-echo sentinel fix: bash-tmux-plain passes both auto-start suppression and manual tmux start. The next Zellij case fails because zellij --session i1170868 is not visible in list-sessions within 8 seconds; the captured log is attached. I am adding PTY and Zellij command diagnostics before changing behavior.

zellij-manual-start-failure.log

Real-engine rerun after PTY-echo sentinel fix: `bash-tmux-plain` passes both auto-start suppression and manual tmux start. The next Zellij case fails because `zellij --session i1170868` is not visible in `list-sessions` within 8 seconds; the captured log is attached. I am adding PTY and Zellij command diagnostics before changing behavior. [zellij-manual-start-failure.log](https://git.kayg.org/attachments/67ee5dc6-3816-4a34-9354-e16689d53f99)
Author
Owner

Second perf-VM run confirms the Zellij manual-start failure is confined to the fixture PATH: PTY capture shows the login shell reports zellij: command not found, while an independent command -v with the fixture PATH resolves /home/bench/.cache/codex-scratch/multiplexer-skip/real-startup/bin/zellij. The machine's login profile removes the scratch-only directory. I will prepend that directory from the isolated test profile so the copied real executable remains discoverable after system login setup.

zellij-path-failure.log

Second perf-VM run confirms the Zellij manual-start failure is confined to the fixture PATH: PTY capture shows the login shell reports `zellij: command not found`, while an independent `command -v` with the fixture PATH resolves `/home/bench/.cache/codex-scratch/multiplexer-skip/real-startup/bin/zellij`. The machine's login profile removes the scratch-only directory. I will prepend that directory from the isolated test profile so the copied real executable remains discoverable after system login setup. [zellij-path-failure.log](https://git.kayg.org/attachments/16c24b57-ffa8-43a0-9e97-7ce089f9a8cf)
Author
Owner

The real Zellij executable is now found from the isolated login shell. It rejects the test session because the scratch XDG_RUNTIME_DIR makes Zellij's Unix socket path exceed sun_path; its validator consequently reports that the allowed session name is zero characters. The failure log is attached. I am setting Zellij's supported ZELLIJ_SOCKET_DIR to the short per-job scratch root for both the shell and session-control commands.

zellij-socket-path-failure.log

The real Zellij executable is now found from the isolated login shell. It rejects the test session because the scratch `XDG_RUNTIME_DIR` makes Zellij's Unix socket path exceed `sun_path`; its validator consequently reports that the allowed session name is zero characters. The failure log is attached. I am setting Zellij's supported `ZELLIJ_SOCKET_DIR` to the short per-job scratch root for both the shell and session-control commands. [zellij-socket-path-failure.log](https://git.kayg.org/attachments/f5fc3c25-4b7e-40f3-b5df-dba1c7bb3567)
Author
Owner

With ZELLIJ_SOCKET_DIR pinned to the job scratch root, the real Zellij session is now visible to list-sessions and the manual-start check passes. The run then fails because the session cleanup command returns a non-success status; the current assertion omits that command's output. Receipt attached. I am adding status/stdout/stderr diagnostics and will verify cleanup behavior on the next run.

zellij-stop-failure.log

With `ZELLIJ_SOCKET_DIR` pinned to the job scratch root, the real Zellij session is now visible to `list-sessions` and the manual-start check passes. The run then fails because the session cleanup command returns a non-success status; the current assertion omits that command's output. Receipt attached. I am adding status/stdout/stderr diagnostics and will verify cleanup behavior on the next run. [zellij-stop-failure.log](https://git.kayg.org/attachments/90127fb5-0aad-446f-82ed-89e17f9e89b2)
Author
Owner

Perf-VM real-tool run passes all five startup cases: Bash plain tmux, Bash generated Zellij, Zsh plain tmux, Zsh Oh My Zsh tmux plugin, and Zsh generated Zellij; each confirms no automatic session and manual start works. Bash prompt samples completed (31 each): skip off p50/p99 26.416/31.691 ms; skip on 27.114/43.840 ms. The Zsh timing baseline instead entered zsh-newuser-install because the harness did not pass its fixture ZDOTDIR when skip was off. Receipt attached. I am correcting the fixture to preserve the user ZDOTDIR for both timing modes, then will rerun before drawing a latency conclusion.

zsh-timing-setup-failure.log

Perf-VM real-tool run passes all five startup cases: Bash plain tmux, Bash generated Zellij, Zsh plain tmux, Zsh Oh My Zsh tmux plugin, and Zsh generated Zellij; each confirms no automatic session and manual start works. Bash prompt samples completed (31 each): skip off p50/p99 26.416/31.691 ms; skip on 27.114/43.840 ms. The Zsh timing baseline instead entered `zsh-newuser-install` because the harness did not pass its fixture ZDOTDIR when skip was off. Receipt attached. I am correcting the fixture to preserve the user ZDOTDIR for both timing modes, then will rerun before drawing a latency conclusion. [zsh-timing-setup-failure.log](https://git.kayg.org/attachments/b765647a-fa2b-4be8-9a32-221e96e6812a)
Author
Owner

Perf-VM real-engine test passed on infraternal-perf-test (4 cores, CPUWeight=10000; load 0.70 1.73 2.52). All five cases passed, including Bash/Zsh plain tmux, Oh My Zsh tmux plugin, and generated Zellij; every case confirms startup skips the multiplexer and manual start works.

First-prompt latency, n=31 per cell: Bash skip off/on p50 26.081/26.100 ms, p99 33.303/33.218 ms (delta +0.019/-0.085 ms); Zsh skip off/on p50 6.224/6.342 ms, p99 7.613/9.887 ms (delta +0.118/+2.274 ms). Raw log attached.

real-shell-startup-final.log

Perf-VM real-engine test passed on infraternal-perf-test (4 cores, CPUWeight=10000; load 0.70 1.73 2.52). All five cases passed, including Bash/Zsh plain tmux, Oh My Zsh tmux plugin, and generated Zellij; every case confirms startup skips the multiplexer and manual start works. First-prompt latency, n=31 per cell: Bash skip off/on p50 26.081/26.100 ms, p99 33.303/33.218 ms (delta +0.019/-0.085 ms); Zsh skip off/on p50 6.224/6.342 ms, p99 7.613/9.887 ms (delta +0.118/+2.274 ms). Raw log attached. [real-shell-startup-final.log](https://git.kayg.org/attachments/f1ac6699-01dc-493e-8daa-fa7e5ea8c6d1)
Author
Owner

Bash hook review finding: the startup guard replaced an explicitly supplied PROMPT_COMMAND. A new regression test failed before the fix because the inherited hook's receipt file was absent; it passes now (1/1). The guard saves the caller hook, clears TMUX/Zellij at the first prompt, then restores the hook.

A Bash startup file that assigns PROMPT_COMMAND after the launcher sets it can still replace the cleanup. Bash has no separate post-RC hook or ZDOTDIR-style overlay for login shells; replacing the user's startup sequence to cover that case would change shell semantics. The required plain/generated tmux and Zellij snippets and Oh My Zsh plugin cases pass on the perf VM. This remaining edge will be reported explicitly.

bash-prompt-hook-test.log

Bash hook review finding: the startup guard replaced an explicitly supplied `PROMPT_COMMAND`. A new regression test failed before the fix because the inherited hook's receipt file was absent; it passes now (1/1). The guard saves the caller hook, clears TMUX/Zellij at the first prompt, then restores the hook. A Bash startup file that assigns `PROMPT_COMMAND` after the launcher sets it can still replace the cleanup. Bash has no separate post-RC hook or ZDOTDIR-style overlay for login shells; replacing the user's startup sequence to cover that case would change shell semantics. The required plain/generated tmux and Zellij snippets and Oh My Zsh plugin cases pass on the perf VM. This remaining edge will be reported explicitly. [bash-prompt-hook-test.log](https://git.kayg.org/attachments/4e631dcf-6c22-4a28-9432-da182cadb656)
Author
Owner

Step complete: commit 00bcbc7d preserves an explicitly supplied Bash PROMPT_COMMAND across first-prompt guard cleanup; pushed to multiplexer-skip. Gates: cargo fmt --all -- --check passed; shim clippy passed; cargo test --locked -p infraternal-shim --lib passed (82 passed, 14 ignored, 0 failed). Focused hook test receipt: bash-prompt-hook-test.log.

Step complete: commit `00bcbc7d` preserves an explicitly supplied Bash `PROMPT_COMMAND` across first-prompt guard cleanup; pushed to `multiplexer-skip`. Gates: `cargo fmt --all -- --check` passed; shim clippy passed; `cargo test --locked -p infraternal-shim --lib` passed (82 passed, 14 ignored, 0 failed). Focused hook test receipt: [bash-prompt-hook-test.log](https://git.kayg.org/attachments/4e631dcf-6c22-4a28-9432-da182cadb656).
Author
Owner

Post-hook perf rerun: Bash/tmux startup passes. Zellij manual start was visible to the session-list check, but the immediate kill-session returned No session named ...; the test's cleanup then confirmed No active zellij sessions found. The fixture's session can exit between those two checks. I will treat a nonzero stop as acceptable only after a follow-up list confirms that the named session is absent; a still-active session remains a failure.

zellij-session-cleanup-race.log

Post-hook perf rerun: Bash/tmux startup passes. Zellij manual start was visible to the session-list check, but the immediate `kill-session` returned `No session named ...`; the test's cleanup then confirmed `No active zellij sessions found.` The fixture's session can exit between those two checks. I will treat a nonzero stop as acceptable only after a follow-up list confirms that the named session is absent; a still-active session remains a failure. [zellij-session-cleanup-race.log](https://git.kayg.org/attachments/4c5b1cf5-ca5a-46e0-a043-e451e9daf542)
Author
Owner

Final optimized real-engine rerun passes all five cases on infraternal-perf-test (4 cores, CPUWeight=10000, 1-minute load 3.07). Each case verifies shell startup skips auto-start and manual start works.

First-prompt measurements (31 samples per cell): Bash skip off/on p50 19.406/20.146 ms, p99 29.340/30.217 ms (delta +0.740/+0.877 ms); Zsh p50 5.050/5.175 ms, p99 6.325/7.164 ms (delta +0.125/+0.839 ms). The Bash no-inherited-hook path omits the hook-copy environment variable. Raw run: real-shell-startup-optimized.log.

Final optimized real-engine rerun passes all five cases on infraternal-perf-test (4 cores, CPUWeight=10000, 1-minute load 3.07). Each case verifies shell startup skips auto-start and manual start works. First-prompt measurements (31 samples per cell): Bash skip off/on p50 19.406/20.146 ms, p99 29.340/30.217 ms (delta +0.740/+0.877 ms); Zsh p50 5.050/5.175 ms, p99 6.325/7.164 ms (delta +0.125/+0.839 ms). The Bash no-inherited-hook path omits the hook-copy environment variable. Raw run: [real-shell-startup-optimized.log](https://git.kayg.org/attachments/3fc9041e-338e-490f-bc7e-f846a9e9372c).
Author
Owner

Step complete: commit 8b65719f is pushed. Shim format and clippy pass; the focused shell-startup tests pass (4 passed, 0 failed). The real perf-VM run on this fast path passed all five startup cases; paired first-prompt deltas were under 0.9 ms at p50 and p99 for both shells. Raw metrics are attached: real-shell-startup-optimized.log.

Step complete: commit `8b65719f` is pushed. Shim format and clippy pass; the focused shell-startup tests pass (4 passed, 0 failed). The real perf-VM run on this fast path passed all five startup cases; paired first-prompt deltas were under 0.9 ms at p50 and p99 for both shells. Raw metrics are attached: [real-shell-startup-optimized.log](https://git.kayg.org/attachments/3fc9041e-338e-490f-bc7e-f846a9e9372c).
Author
Owner

Step complete: commit 619160b7 is pushed. Format, shim clippy, and all four shell-startup tests passed; the ignored real-engine test passed on the perf VM (five configurations, 31 timing samples per shell/mode). Paired first-prompt deltas were under 0.9 ms p50/p99 for both Bash and Zsh. Raw receipt: real-shell-startup-optimized.log.

Step complete: commit `619160b7` is pushed. Format, shim clippy, and all four shell-startup tests passed; the ignored real-engine test passed on the perf VM (five configurations, 31 timing samples per shell/mode). Paired first-prompt deltas were under 0.9 ms p50/p99 for both Bash and Zsh. Raw receipt: [real-shell-startup-optimized.log](https://git.kayg.org/attachments/3fc9041e-338e-490f-bc7e-f846a9e9372c).
Author
Owner

scripts/verify iterate stopped in scripts/release/deploy-review.test.ts: two tests passed, but alias restoration failure still requests the retained warm rollback timed out at 5,000 ms. The artifact-size gate passed; deploy staging tests passed; host capacity deferred a separate release build. Full log attached. I am tracing the timed test and will rerun the gate after it passes.

verify-iterate.log

scripts/verify iterate stopped in scripts/release/deploy-review.test.ts: two tests passed, but `alias restoration failure still requests the retained warm rollback` timed out at 5,000 ms. The artifact-size gate passed; deploy staging tests passed; host capacity deferred a separate release build. Full log attached. I am tracing the timed test and will rerun the gate after it passes. [verify-iterate.log](https://git.kayg.org/attachments/92bca7fe-690a-4cfd-b4d9-4359f5838fe5)
Author
Owner

The previously timed alias-recovery test passes when run alone with a 30-second diagnostic timeout: 1 pass, 0 failures, reported 2.281 seconds. The default 5-second run timed out under the full gate and again in isolation, so this is not being accepted as an allowed host-load baseline exception. I will retry scripts/verify iterate when the build host is quieter; no repository change was made for this unrelated gate.

alias-recovery-targeted-30s.log

The previously timed alias-recovery test passes when run alone with a 30-second diagnostic timeout: 1 pass, 0 failures, reported 2.281 seconds. The default 5-second run timed out under the full gate and again in isolation, so this is not being accepted as an allowed host-load baseline exception. I will retry `scripts/verify iterate` when the build host is quieter; no repository change was made for this unrelated gate. [alias-recovery-targeted-30s.log](https://git.kayg.org/attachments/b0000cab-4adb-4bf0-a867-c5a42b6de3a6)
Author
Owner

Second scripts/verify iterate run: artifact, release functional tests, and deploy review all pass (3/3). The local synthetic latency_proxy.py self-test --samples 3 then failed at configured RTT 300 ms with p50 504.36 ms and p99 537.14 ms. These host-side self-test timings are gate output, not product performance evidence; I will retry the required gate when the shared build host is quieter.

verify-iterate-2.log

Second `scripts/verify iterate` run: artifact, release functional tests, and deploy review all pass (3/3). The local synthetic `latency_proxy.py self-test --samples 3` then failed at configured RTT 300 ms with p50 504.36 ms and p99 537.14 ms. These host-side self-test timings are gate output, not product performance evidence; I will retry the required gate when the shared build host is quieter. [verify-iterate-2.log](https://git.kayg.org/attachments/a520d14f-cb36-411a-8014-2dde61b484c0)
Author
Owner

Weighted scripts/verify iterate on 619160b74867257bd3449dbab2c179ac05560829: fmt, plugin compile-out, and clippy passed; Rust tests reported 427 passed, 6 failed, 46 ignored. Six failures are server remote-runtime/control-queue integration tests; details and complete log: verify-iterate-weighted.log. The same gate also reports cargo-deny advisory RUSTSEC-2026-0349 for locked rustls 0.23.45. I’m isolating the server failures and checking whether the advisory is inherited from origin/dev; no dependency change is planned in this lane.

Weighted `scripts/verify iterate` on `619160b74867257bd3449dbab2c179ac05560829`: fmt, plugin compile-out, and clippy passed; Rust tests reported 427 passed, 6 failed, 46 ignored. Six failures are server remote-runtime/control-queue integration tests; details and complete log: [verify-iterate-weighted.log](https://git.kayg.org/attachments/28b95d11-5e37-4f0d-8736-b9ee87f25ecf). The same gate also reports `cargo-deny` advisory RUSTSEC-2026-0349 for locked rustls 0.23.45. I’m isolating the server failures and checking whether the advisory is inherited from `origin/dev`; no dependency change is planned in this lane.
Author
Owner

Diagnosis update for the five remote admission failures: the shared TLS peer helper in crates/infraternal-server/src/remote_runtime_tests.rs unconditionally asserts skip_multiplexer_autostart == true, but the affected revocation tests call EmbeddedAgent::open(), whose intentional compatibility behavior is to send an ordinary unguarded open. The dedicated guarded-open TCP/QUIC tests use open_with_startup_guard(..., true). I’ll make the fixture expectation explicit per caller. The separate saturated control-queue failure is being reproduced alone. The cargo-deny advisory is inherited from this branch’s b0a3799 base lock (rustls 0.23.45); current origin/dev has the owner-selected 0.23.46 lock update.

Diagnosis update for the five remote admission failures: the shared TLS peer helper in `crates/infraternal-server/src/remote_runtime_tests.rs` unconditionally asserts `skip_multiplexer_autostart == true`, but the affected revocation tests call `EmbeddedAgent::open()`, whose intentional compatibility behavior is to send an ordinary unguarded open. The dedicated guarded-open TCP/QUIC tests use `open_with_startup_guard(..., true)`. I’ll make the fixture expectation explicit per caller. The separate saturated control-queue failure is being reproduced alone. The cargo-deny advisory is inherited from this branch’s `b0a3799` base lock (`rustls 0.23.45`); current `origin/dev` has the owner-selected 0.23.46 lock update.
Author
Owner

Committed and pushed 941816a3 (test: match negotiated guard state in remote TLS fixtures). The fix makes ordinary opens assert the guard field is absent and keeps explicit TCP/QUIC guarded opens asserting true. Red run reproduced the prior fixture failure (0 passed, 1 failed); after the change: independent review 3 passed/1 ignored, revocation 6 passed/2 ignored, guarded actor cases 10 passed, and isolated control-queue 1 passed. cargo fmt --all --check and remote-feature server clippy passed. Receipts: red, independent review, revocation, guarded TCP/QUIC, control queue, clippy.

Committed and pushed `941816a3` (`test: match negotiated guard state in remote TLS fixtures`). The fix makes ordinary opens assert the guard field is absent and keeps explicit TCP/QUIC guarded opens asserting `true`. Red run reproduced the prior fixture failure (0 passed, 1 failed); after the change: independent review 3 passed/1 ignored, revocation 6 passed/2 ignored, guarded actor cases 10 passed, and isolated control-queue 1 passed. `cargo fmt --all --check` and remote-feature server clippy passed. Receipts: [red](https://git.kayg.org/attachments/c6733fcc-a061-4d1f-84ad-369d03cd8c78), [independent review](https://git.kayg.org/attachments/41131db4-57f5-4910-baa4-2e002f956bb8), [revocation](https://git.kayg.org/attachments/aed66715-73a9-4b4a-b284-7fe2b33b8661), [guarded TCP/QUIC](https://git.kayg.org/attachments/6b9099a5-42c1-41f6-ae81-9d4b52851802), [control queue](https://git.kayg.org/attachments/3271e6bb-5bc9-4cd4-b76c-fa02a2417c9e), [clippy](https://git.kayg.org/attachments/e803f80d-a010-44e1-a884-92d1caff97a2).
Author
Owner

Committed and pushed e2ac27df (deps: carry the dev-selected rustls 0.23.46 lock). This copies the two-line owner-selected patch already on origin/dev; no crate or feature was added. cargo tree --locked --workspace -e features -i rustls confirms the feature graph is unchanged (ring, std, existing remote/Quinn paths). cargo deny check: advisories ok, bans ok, licenses ok, sources ok. Receipts: before, after, cargo-deny.

Committed and pushed `e2ac27df` (`deps: carry the dev-selected rustls 0.23.46 lock`). This copies the two-line owner-selected patch already on `origin/dev`; no crate or feature was added. `cargo tree --locked --workspace -e features -i rustls` confirms the feature graph is unchanged (`ring`, `std`, existing remote/Quinn paths). `cargo deny check`: advisories ok, bans ok, licenses ok, sources ok. Receipts: [before](https://git.kayg.org/attachments/bcf8d7a2-7563-4919-9556-215b4911faad), [after](https://git.kayg.org/attachments/bcadb4bb-bbef-4837-b7cf-3ce2967fb698), [cargo-deny](https://git.kayg.org/attachments/16ce91f5-260c-4fe0-97c2-2510eb6b21a5).
Author
Owner

e2ac27dfc786884a8ab741f00495e95424afb5cc passes the fresh weighted scripts/verify iterate. Rust: fmt, VT native fmt, CLI compile-out, clippy, 1,054 tests (0 failed; 139 ignored), and cargo-deny all PASS. TypeScript protocol: 37 passed, 0 failed, 34,463 expectations. The complete gate log is attached: verify-iterate-final.log. Proceeding to the required final scripts/verify fast on this head.

`e2ac27dfc786884a8ab741f00495e95424afb5cc` passes the fresh weighted `scripts/verify iterate`. Rust: fmt, VT native fmt, CLI compile-out, clippy, 1,054 tests (0 failed; 139 ignored), and cargo-deny all PASS. TypeScript protocol: 37 passed, 0 failed, 34,463 expectations. The complete gate log is attached: [verify-iterate-final.log](https://git.kayg.org/attachments/4a34523e-464f-4997-b562-e06021141943). Proceeding to the required final `scripts/verify fast` on this head.
Author
Owner

Final branch head: e2ac27dfc786884a8ab741f00495e95424afb5cc (pushed to multiplexer-skip). scripts/verify iterate passed, but the required final scripts/verify fast failed only in static builds; the full log is attached: verify-fast-final.log.

Stripped static sizes from the same recipe: merge-base x86_64 22,275,888 bytes; branch x86_64 22,333,680 bytes; delta +57,792 bytes. The D243 growth is above 16 KiB and below 64 KiB; its D241 feature justification is recorded earlier on this issue. The fixed x86_64 cap is 22,204,304 bytes, so the merge-base artifact already exceeds it by 71,584 bytes and this branch exceeds it by 129,376 bytes. Branch aarch64 is 19,752,288 bytes against a 19,638,744-byte cap (+113,544). I did not change the cap.

Final scripts/verify fast Rust gate output:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| CLI plugin compile-out    | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+
Final branch head: `e2ac27dfc786884a8ab741f00495e95424afb5cc` (pushed to `multiplexer-skip`). `scripts/verify iterate` passed, but the required final `scripts/verify fast` failed only in `static builds`; the full log is attached: [verify-fast-final.log](https://git.kayg.org/attachments/f282cf83-6942-4514-8231-df05368fc0d2). Stripped static sizes from the same recipe: merge-base x86_64 `22,275,888` bytes; branch x86_64 `22,333,680` bytes; delta `+57,792` bytes. The D243 growth is above 16 KiB and below 64 KiB; its D241 feature justification is recorded earlier on this issue. The fixed x86_64 cap is `22,204,304` bytes, so the merge-base artifact already exceeds it by `71,584` bytes and this branch exceeds it by `129,376` bytes. Branch aarch64 is `19,752,288` bytes against a `19,638,744`-byte cap (`+113,544`). I did not change the cap. Final `scripts/verify fast` Rust gate output: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ```
Author
Owner

Continuation r2 started on multiplexer-skip at e2ac27dfc786884a8ab741f00495e95424afb5cc, based on origin/dev b0a3799cf459425c3402e745f329f4ebc441c144. Current origin/dev is 1b23ef311ce8f850ff01a60d06a420db33d26888. I’m attributing the measured +57,792 B static x86_64 growth and fixing the Bash prompt-hook reassignment edge with a real-shell regression.

Continuation r2 started on `multiplexer-skip` at `e2ac27dfc786884a8ab741f00495e95424afb5cc`, based on `origin/dev` `b0a3799cf459425c3402e745f329f4ebc441c144`. Current `origin/dev` is `1b23ef311ce8f850ff01a60d06a420db33d26888`. I’m attributing the measured +57,792 B static x86_64 growth and fixing the Bash prompt-hook reassignment edge with a real-shell regression.
Author
Owner

Finding: configure installs Bash startup-guard cleanup in PROMPT_COMMAND (crates/infraternal-shim/src/shell_startup.rs:40-64), so a later .bashrc assignment replaces it. Real Bash 5.2 probe confirmed --login --rcfile still sources the user's profile and ignores that rcfile; BASH_ENV is not read by an interactive shell. I’m adding a failing PTY test, then will move only guarded Bash profile loading into a one-shot pre-prompt initializer: --noprofile, manually source /etc/profile and the first standard user login profile, clear TMUX/ZELLIJ, and preserve/run the final user PROMPT_COMMAND before the first visible prompt.

Finding: `configure` installs Bash startup-guard cleanup in `PROMPT_COMMAND` (`crates/infraternal-shim/src/shell_startup.rs:40-64`), so a later `.bashrc` assignment replaces it. Real Bash 5.2 probe confirmed `--login --rcfile` still sources the user's profile and ignores that rcfile; `BASH_ENV` is not read by an interactive shell. I’m adding a failing PTY test, then will move only guarded Bash profile loading into a one-shot pre-prompt initializer: `--noprofile`, manually source `/etc/profile` and the first standard user login profile, clear TMUX/ZELLIJ, and preserve/run the final user `PROMPT_COMMAND` before the first visible prompt.
Author
Owner

Finding: the added real-Bash regression fails before the fix (0 passed, 1 failed). A .bashrc that assigns PROMPT_COMMAND leaves TMUX=infraternal-session at the first prompt, confirming the recorded cleanup limitation in crates/infraternal-shim/src/shell_startup.rs. Receipt: bash-reassignment-red-focused.log.

Finding: the added real-Bash regression fails before the fix (0 passed, 1 failed). A `.bashrc` that assigns `PROMPT_COMMAND` leaves `TMUX=infraternal-session` at the first prompt, confirming the recorded cleanup limitation in `crates/infraternal-shim/src/shell_startup.rs`. Receipt: [bash-reassignment-red-focused.log](https://git.kayg.org/attachments/fae89a0e-c6e3-4983-ad85-6a590ea07945).
Author
Owner

Bash startup fix is implemented in the worktree at e2ac27dfc786884a8ab741f00495e95424afb5cc. Guarded Bash sessions defer standard login profile reads to a one-time pre-prompt initializer, then clear TMUX/ZELLIJ and run the final user PROMPT_COMMAND; scalar and array reassignment, inherited hooks, and manual tmux start pass. Focused shim tests: 5 passed, 0 failed. Receipt: bash-reassignment-green.log.

Bash startup fix is implemented in the worktree at `e2ac27dfc786884a8ab741f00495e95424afb5cc`. Guarded Bash sessions defer standard login profile reads to a one-time pre-prompt initializer, then clear TMUX/ZELLIJ and run the final user `PROMPT_COMMAND`; scalar and array reassignment, inherited hooks, and manual tmux start pass. Focused shim tests: 5 passed, 0 failed. Receipt: [bash-reassignment-green.log](https://git.kayg.org/attachments/2561542b-d1e3-4716-90c8-689e56ee6730).
Author
Owner

Finding: a login rc can replace PROMPT_COMMAND and leave the multiplexer guard set. The hook now loads the normal Bash login files at the first prompt, clears TMUX/ZELLIJ, then preserves and runs the final scalar or array prompt hook. Array detection uses declare -p for older Bash compatibility. Focused real-shell tests: 5 passed, 0 failed. Receipt: bash-reassignment-green.log.

D241 exact first-time notice copy for the later UI pass: "zellij start skipped: infraternal keeps this session for you · [Use zellij here]". The action to use the host switch is [Use zellij here]; after the first notice, show nothing.

Finding: a login rc can replace PROMPT_COMMAND and leave the multiplexer guard set. The hook now loads the normal Bash login files at the first prompt, clears TMUX/ZELLIJ, then preserves and runs the final scalar or array prompt hook. Array detection uses declare -p for older Bash compatibility. Focused real-shell tests: 5 passed, 0 failed. Receipt: [bash-reassignment-green.log](https://git.kayg.org/attachments/68f8305f-4f39-4854-9ee0-0acdc9237e8b). D241 exact first-time notice copy for the later UI pass: "zellij start skipped: infraternal keeps this session for you · [Use zellij here]". The action to use the host switch is [Use zellij here]; after the first notice, show nothing.
Author
Owner

Finding: the first perf-VM launch could not execute the copied GNU test binary because its ELF interpreter points into the build host's Nix store, which is absent on the VM. The binary transfer checksum matched; I am rebuilding the same test target as static musl for the VM. No timing samples were collected. Receipt: failed launch.

Finding: the first perf-VM launch could not execute the copied GNU test binary because its ELF interpreter points into the build host's Nix store, which is absent on the VM. The binary transfer checksum matched; I am rebuilding the same test target as static musl for the VM. No timing samples were collected. Receipt: [failed launch](https://git.kayg.org/attachments/0e0e1a56-1f56-4b8d-a4e6-c6f146434316).
Author
Owner

Finding: the account-scoped settings index changes global plugin uniqueness. The release service previously read and upserted without a user-scope filter; updated its read/write path to user_id IS NULL and added an account-row isolation regression. See crates/plugins/release/src/service.rs:92,97,129 and crates/plugins/release/src/service_tests.rs:89-109. Tests are pending.

Finding: the account-scoped settings index changes global plugin uniqueness. The release service previously read and upserted without a user-scope filter; updated its read/write path to `user_id IS NULL` and added an account-row isolation regression. See `crates/plugins/release/src/service.rs:92,97,129` and `crates/plugins/release/src/service_tests.rs:89-109`. Tests are pending.
Author
Owner

Finding: the perf VM (infraternal-perf-test, 4 cores, CPUWeight=10000, load 0.66/1.45/1.89) passed all 5 real tmux/Zellij startup and manual-start cases, but Bash guard overhead measured +1.011 ms p99 against the 1.000 ms limit (11 us over). Evidence: real-shell-perf-vm.log. I’m reducing the prompt-hook overhead before rerunning the full shell measurement.

Finding: the perf VM (infraternal-perf-test, 4 cores, CPUWeight=10000, load 0.66/1.45/1.89) passed all 5 real tmux/Zellij startup and manual-start cases, but Bash guard overhead measured +1.011 ms p99 against the 1.000 ms limit (11 us over). Evidence: [real-shell-perf-vm.log](https://git.kayg.org/attachments/433429f0-cbb8-4978-ba77-742472163af7). I’m reducing the prompt-hook overhead before rerunning the full shell measurement.
Author
Owner

Bash startup cleanup now runs after the startup profile is loaded, so an rc assignment cannot replace the guard. The real-shell unit cases cover scalar and array PROMPT_COMMAND replacement and manual tmux start. cargo test -p infraternal-shim --lib shell_startup::tests -- --test-threads=1: 5 passed, 0 failed. Worktree HEAD: e2ac27dfc7. Real tmux/Zellij startup and the paired 1 ms p99 benchmark remain pending on the perf VM.

Bash startup cleanup now runs after the startup profile is loaded, so an rc assignment cannot replace the guard. The real-shell unit cases cover scalar and array `PROMPT_COMMAND` replacement and manual tmux start. `cargo test -p infraternal-shim --lib shell_startup::tests -- --test-threads=1`: 5 passed, 0 failed. Worktree HEAD: e2ac27dfc786884a8ab741f00495e95424afb5cc. Real tmux/Zellij startup and the paired 1 ms p99 benchmark remain pending on the perf VM.
Author
Owner

Finding: moving host overrides from the former terminal_multiplexer_hosts.remote_host_id ON DELETE CASCADE row into plugin_settings.settings would retain stale JSON when a remote host is deleted. Migration 0026 now removes the UUID-keyed JSON object in an AFTER DELETE ON remote_hosts trigger; the migration compatibility test seeds an override and notice, deletes the host, and checks the path is gone. Validation is running.

Finding: moving host overrides from the former `terminal_multiplexer_hosts.remote_host_id ON DELETE CASCADE` row into `plugin_settings.settings` would retain stale JSON when a remote host is deleted. Migration 0026 now removes the UUID-keyed JSON object in an `AFTER DELETE ON remote_hosts` trigger; the migration compatibility test seeds an override and notice, deletes the host, and checks the path is gone. Validation is running.
Author
Owner

Finding: the pre-change merge-base static x86_64 binary measured 22,275,888 B, already 71,584 B above the committed 22,204,304 B ceiling. The attached same-recipe comparison records this baseline. I will meet the requested ≤16 KB branch delta and run the final scripts/verify fast at the finished head; its exact static gate result will be reported.

Finding: the pre-change merge-base static x86_64 binary measured 22,275,888 B, already 71,584 B above the committed 22,204,304 B ceiling. The attached same-recipe comparison records this baseline. I will meet the requested ≤16 KB branch delta and run the final `scripts/verify fast` at the finished head; its exact static gate result will be reported.
Author
Owner

Finding: all five real startup/manual-launch cases passed on infraternal-perf-test (4 cores, CPUWeight 10000, load 1.81/0.94/1.07), but the n=31 paired-delta estimator reported Bash p99 +6.277 ms while the observed independent Bash p99s were 26.863 ms baseline and 25.260 ms guarded. The paired tail is dominated by launch/scheduler noise and is not a stable estimate of open-time p99 overhead. Attached receipt. I’m increasing the sample to 101 launches per condition, alternating order, and gating on the guarded-minus-baseline p99 open-time distributions; the 1 ms limit remains unchanged.

Finding: all five real startup/manual-launch cases passed on `infraternal-perf-test` (4 cores, CPUWeight 10000, load 1.81/0.94/1.07), but the n=31 paired-delta estimator reported Bash p99 +6.277 ms while the observed independent Bash p99s were 26.863 ms baseline and 25.260 ms guarded. The paired tail is dominated by launch/scheduler noise and is not a stable estimate of open-time p99 overhead. Attached receipt. I’m increasing the sample to 101 launches per condition, alternating order, and gating on the guarded-minus-baseline p99 open-time distributions; the 1 ms limit remains unchanged.
Author
Owner

Backend validation: server library 252 passed, 22 ignored; plugin_settings_review 4 passed; release library 8 passed, 1 ignored; shim library 84 passed, 14 ignored. The migration-history test passed in both histories, including host JSON cleanup. Clippy found the PTY measurement test exceeded the 100-line pedantic limit (109 lines); I extracted the timing helper and am rerunning clippy on the touched crates. HEAD remains e2ac27dfc7.

Backend validation: server library 252 passed, 22 ignored; `plugin_settings_review` 4 passed; release library 8 passed, 1 ignored; shim library 84 passed, 14 ignored. The migration-history test passed in both histories, including host JSON cleanup. Clippy found the PTY measurement test exceeded the 100-line pedantic limit (109 lines); I extracted the timing helper and am rerunning clippy on the touched crates. HEAD remains e2ac27dfc786884a8ab741f00495e95424afb5cc.
Author
Owner

Backend storage step committed and pushed: 04e8ab116. It reuses account-scoped plugin_settings JSON, keeps role switches global-only, preserves host deletion cleanup, and migrates both dev and production histories. Validation: server lib 252 passed; plugin_settings_review 4 passed; release lib 8 passed; shim lib 84 passed; touched-crate clippy passed. Logs attached. Bash and PTY commits plus perf-VM measurements remain.

Backend storage step committed and pushed: `04e8ab116`. It reuses account-scoped `plugin_settings` JSON, keeps role switches global-only, preserves host deletion cleanup, and migrates both dev and production histories. Validation: server lib 252 passed; `plugin_settings_review` 4 passed; release lib 8 passed; shim lib 84 passed; touched-crate clippy passed. Logs attached. Bash and PTY commits plus perf-VM measurements remain.
Author
Owner

Bash startup fix committed and pushed: d77df089a. The one-shot guard runs after login profiles are loaded; scalar and Bash 5.1+ array PROMPT_COMMAND replacements cannot retain TMUX/ZELLIJ markers, and a later manual tmux command still starts. Real Bash/Zsh unit cases: 5 passed. Test log attached. Real-engine VM timing is being rerun with 101 samples per shell.

Bash startup fix committed and pushed: `d77df089a`. The one-shot guard runs after login profiles are loaded; scalar and Bash 5.1+ array `PROMPT_COMMAND` replacements cannot retain TMUX/ZELLIJ markers, and a later manual tmux command still starts. Real Bash/Zsh unit cases: 5 passed. Test log attached. Real-engine VM timing is being rerun with 101 samples per shell.
Author
Owner

Finding: with 101 alternating launches on the perf VM (4 cores, CPUWeight 10000, load 1.79/1.21/1.10), all five real tmux/Zellij startup/manual-launch cases passed. Bash guarded-minus-baseline p99 was +0.892 ms; Zsh was +1.205 ms, 0.205 ms over budget. Attached receipt. I’m trimming Zsh overlay setup and first-prompt cleanup, then will rebuild and repeat the VM run.

Finding: with 101 alternating launches on the perf VM (4 cores, CPUWeight 10000, load 1.79/1.21/1.10), all five real tmux/Zellij startup/manual-launch cases passed. Bash guarded-minus-baseline p99 was +0.892 ms; Zsh was +1.205 ms, 0.205 ms over budget. Attached receipt. I’m trimming Zsh overlay setup and first-prompt cleanup, then will rebuild and repeat the VM run.
Author
Owner

Finding: the same-recipe stripped static x86_64 build at d77df089a is 22,326,704 B versus the merge-base 22,275,888 B: +50,816 B, so another 34,432 B must be cut to meet the +16,384 B ceiling. The merge-base binary is itself 71,584 B above the committed D243 cap; meeting the requested delta would still leave the absolute size gate above cap. Attached build receipt; cargo-bloat attribution is running.

Finding: the same-recipe stripped static x86_64 build at `d77df089a` is 22,326,704 B versus the merge-base 22,275,888 B: +50,816 B, so another 34,432 B must be cut to meet the +16,384 B ceiling. The merge-base binary is itself 71,584 B above the committed D243 cap; meeting the requested delta would still leave the absolute size gate above cap. Attached build receipt; cargo-bloat attribution is running.
Author
Owner

Size attribution on d77df089a versus merge base b0a3799: stripped x86_64 is 22,326,704 B vs 22,275,888 B (+50,816 B). nm totals named symbols +41,118 B; largest additions are the websocket frame future (+11,432 B) and pty::login_shell_command (+6,048 B). The launch future replaces its old body (+89 B net). ELF .text is +32,732 B and .rodata +8,192 B. No new dependency/feature; cargo bloat reports shim +5.8 KiB, serde_json +0.8 KiB and rustls +1.4 KiB (the dev lock moved rustls 0.23.45 to 0.23.46). Detailed attribution attached: size attribution. I’m reducing code size in the new action and startup paths, then I’ll repeat the same build measurement.

Size attribution on `d77df089a` versus merge base `b0a3799`: stripped x86_64 is 22,326,704 B vs 22,275,888 B (+50,816 B). `nm` totals named symbols +41,118 B; largest additions are the websocket frame future (+11,432 B) and `pty::login_shell_command` (+6,048 B). The launch future replaces its old body (+89 B net). ELF `.text` is +32,732 B and `.rodata` +8,192 B. No new dependency/feature; `cargo bloat` reports shim +5.8 KiB, serde_json +0.8 KiB and rustls +1.4 KiB (the dev lock moved rustls 0.23.45 to 0.23.46). Detailed attribution attached: [size attribution](https://git.kayg.org/attachments/10deedbf-7705-4b67-b6de-f49e6f874aa0). I’m reducing code size in the new action and startup paths, then I’ll repeat the same build measurement.
Author
Owner

D241 exact one-time notice copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. It appears once per host; the button turns the skip off for that host. The global switch remains available.

D241 exact one-time notice copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. It appears once per host; the button turns the skip off for that host. The global switch remains available.
Author
Owner

The merged settings/plugin task is 6,336 B smaller than the prior GNU-stripped diagnostic, but still 38,648 B over the merge-base size estimate (22,314,536 B vs 22,275,888 B; the strip recipes differ, so the final gate remains authoritative). Named-symbol delta is +31,685 B. cargo bloat still shows a 9.6 KiB socket action future; the helper boundary did not reduce it. Attached the current attribution and bloat receipt. I’m continuing the reduction before measuring the final static gate.

size attribution · cargo bloat

The merged settings/plugin task is 6,336 B smaller than the prior GNU-stripped diagnostic, but still 38,648 B over the merge-base size estimate (22,314,536 B vs 22,275,888 B; the strip recipes differ, so the final gate remains authoritative). Named-symbol delta is +31,685 B. `cargo bloat` still shows a 9.6 KiB socket action future; the helper boundary did not reduce it. Attached the current attribution and bloat receipt. I’m continuing the reduction before measuring the final static gate. [size attribution](https://git.kayg.org/attachments/f80cfe17-43d9-4a8b-9e8e-c8d7787f883c) · [cargo bloat](https://git.kayg.org/attachments/975b0b5f-829e-4416-b5dd-de430d24ba43)
Author
Owner

R6 size finding: current static x86_64 branch artifact is 22,315,120 B vs 22,275,888 B at merge base (+39,232 B; target <=16,384 B). The comparable GNU strip --strip-all diagnostic is +41,728 B. .text is +28,764 B and .rodata +8,192 B. Moving settings actions into the existing bounded control worker changed the GNU-stripped total by only +576 B from r5. The socket and persistence tests pass and touched-crate clippy passes, but the size target remains open.

Size receipt
Bloat report

R6 size finding: current static x86_64 branch artifact is 22,315,120 B vs 22,275,888 B at merge base (+39,232 B; target <=16,384 B). The comparable GNU strip --strip-all diagnostic is +41,728 B. `.text` is +28,764 B and `.rodata` +8,192 B. Moving settings actions into the existing bounded control worker changed the GNU-stripped total by only +576 B from r5. The socket and persistence tests pass and touched-crate clippy passes, but the size target remains open. [Size receipt](https://git.kayg.org/attachments/ce7ae58e-4176-4b53-b8aa-4607cd0bf5d9) [Bloat report](https://git.kayg.org/attachments/64b7d131-9a93-4ce7-bd9f-c84ea0b2d31f)
Author
Owner

R7 diagnostic remains +38,464 B GNU-stripped vs merge base (r6 gate-recipe delta +39,232 B; recipes differ). nm locates an avoidable 8,279 B new launch future and +9,802 B in the existing plugin control future (7,549 → 17,351 B); attachment records the non-additive attribution. I merged the guard into the existing readiness launch path and am measuring it now. No dependencies/features added. Receipts: summary, base nm, branch nm.

R7 diagnostic remains +38,464 B GNU-stripped vs merge base (r6 gate-recipe delta +39,232 B; recipes differ). `nm` locates an avoidable 8,279 B new launch future and +9,802 B in the existing plugin control future (7,549 → 17,351 B); attachment records the non-additive attribution. I merged the guard into the existing readiness launch path and am measuring it now. No dependencies/features added. Receipts: [summary](https://git.kayg.org/attachments/59dfdd95-3de5-42db-9d2c-b888968d473d), [base nm](https://git.kayg.org/attachments/d34cba4a-c624-4824-898a-448ecc00361c), [branch nm](https://git.kayg.org/attachments/47f04fd5-b637-4541-bee0-db76399cddc1).
Author
Owner

Progress: the r8 size refactor and startup latency harness are in the worktree. Focused Rust tests, clippy, and the static release build remain queued at build-slot (18 minutes so far; the current holder is another job's final gate). The real-shell perf run remains queued behind the perf VM lock (36 minutes so far; the holder is a 1,000-session soak). Both evidence logs are empty, so no new test, size, or latency result is claimed yet. I am continuing the queued runs and will retry the perf lock if its one-hour wait expires.

Progress: the r8 size refactor and startup latency harness are in the worktree. Focused Rust tests, clippy, and the static release build remain queued at build-slot (18 minutes so far; the current holder is another job's final gate). The real-shell perf run remains queued behind the perf VM lock (36 minutes so far; the holder is a 1,000-session soak). Both evidence logs are empty, so no new test, size, or latency result is claimed yet. I am continuing the queued runs and will retry the perf lock if its one-hour wait expires.
Author
Owner

Perf runner finding: the perf VM has no active bench user manager (/run/user/1001/bus is absent and user@1001.service is inactive), so systemd-run --user failed immediately after acquiring the lock. Verified systemd-run --scope -p CPUWeight=10000 --uid=bench id -u returns 1001; the real-shell run is requeued as bench in a CPU-weighted system scope under the same VM lock.

Perf runner finding: the perf VM has no active bench user manager (`/run/user/1001/bus` is absent and `user@1001.service` is inactive), so `systemd-run --user` failed immediately after acquiring the lock. Verified `systemd-run --scope -p CPUWeight=10000 --uid=bench id -u` returns 1001; the real-shell run is requeued as bench in a CPU-weighted system scope under the same VM lock.
Author
Owner

Perf artifact finding: the staged shim-test-r4 is a GNU dynamic ELF whose interpreter is /nix/store/h4wfwic161kxrr74jlzla5lsm28hgary-glibc-2.44-25/lib/ld-linux-x86-64.so.2; that loader is absent on the perf VM (test -e exit 1), while /lib64/ld-linux-x86-64.so.2 exists. Execution therefore failed with Failed to execute: No such file or directory. I am building the test harness for static musl before retrying.

Perf artifact finding: the staged `shim-test-r4` is a GNU dynamic ELF whose interpreter is `/nix/store/h4wfwic161kxrr74jlzla5lsm28hgary-glibc-2.44-25/lib/ld-linux-x86-64.so.2`; that loader is absent on the perf VM (`test -e` exit 1), while `/lib64/ld-linux-x86-64.so.2` exists. Execution therefore failed with `Failed to execute: No such file or directory`. I am building the test harness for static musl before retrying.
Author
Owner

Finding: the r9 static x86_64 binary is 22,315,056 B versus 22,275,888 B at merge base b0a3799cf459425c3402e745f329f4ebc441c144: +39,168 B. The allowed delta is 16,384 B, so another 22,784 B must be cut. The launch-path and boxed-control refactors shaved only 64 B from r7’s exact-recipe +39,232 B. The base itself is 71,584 B above the unchanged 22,204,304 B gate ceiling. Focused settings (5/5), authenticated socket (1/1), and startup flag (1/1) tests pass; clippy passes; static release build completed. The full build log is attached: https://git.kayg.org/attachments/d7ab31fa-3e3a-455d-9a31-d3cf05bb41aa. I am continuing symbol attribution and will keep the ceiling unchanged.

Finding: the r9 static x86_64 binary is 22,315,056 B versus 22,275,888 B at merge base `b0a3799cf459425c3402e745f329f4ebc441c144`: +39,168 B. The allowed delta is 16,384 B, so another 22,784 B must be cut. The launch-path and boxed-control refactors shaved only 64 B from r7’s exact-recipe +39,232 B. The base itself is 71,584 B above the unchanged 22,204,304 B gate ceiling. Focused settings (5/5), authenticated socket (1/1), and startup flag (1/1) tests pass; clippy passes; static release build completed. The full build log is attached: https://git.kayg.org/attachments/d7ab31fa-3e3a-455d-9a31-d3cf05bb41aa. I am continuing symbol attribution and will keep the ceiling unchanged.
Author
Owner

Attribution: r7 symbol output still identifies <SocketPlugins>::control's inner future at 17,351 B; merge base is 7,549 B, a +9,802 B increase. The r8/r9 boxed call did not lower the release artifact. I will route the settings actions through their declared plugin descriptor and the existing bounded plugin worker so the shared core control future does not carry their action branch. This also removes the separate action-ID allowlist from core dispatch. Raw base and branch nm receipts remain attached in the earlier r7 comment.

Attribution: r7 symbol output still identifies `<SocketPlugins>::control`'s inner future at 17,351 B; merge base is 7,549 B, a +9,802 B increase. The r8/r9 boxed call did not lower the release artifact. I will route the settings actions through their declared plugin descriptor and the existing bounded plugin worker so the shared core control future does not carry their action branch. This also removes the separate action-ID allowlist from core dispatch. Raw base and branch nm receipts remain attached in the earlier r7 comment.
Author
Owner

r10 static x86_64 PIE is 22,316,080 B, +40,192 B over merge base b0a3799c; the +16,384 B ceiling is exceeded by 23,808 B. Routing terminal preference actions through the generic plugin descriptor did not reduce the binary (+1,024 B versus r9). No dependencies or lockfile entries changed. Build/test/clippy receipt: size-iteration-r10.log. Attribution is still in progress.

r10 static x86_64 PIE is 22,316,080 B, +40,192 B over merge base b0a3799c; the +16,384 B ceiling is exceeded by 23,808 B. Routing terminal preference actions through the generic plugin descriptor did not reduce the binary (+1,024 B versus r9). No dependencies or lockfile entries changed. Build/test/clippy receipt: [size-iteration-r10.log](https://git.kayg.org/attachments/f3ef72a9-dfac-4fbe-b2e2-8a2b9489a74b). Attribution is still in progress.
Author
Owner

R10 size attribution: stripped static x86_64 is 22,316,080 B (+40,192 B vs merge base). Same-tool unstripped nm totals are 20,488,747 B -> 20,519,250 B (+30,503 B); ELF deltas are .text +26,460 B, .rodata +8,192 B, .gcc_except_table +2,032 B, .eh_frame +1,936 B, and other sections +3,405 B. Largest new named functions are WebSocketState::new_inner async state (16,922 B), terminal preference plugin request future (11,707 B), and pty::login_shell_command (6,048 B); read_settings is 1,935 B. The largest offset is runtime::build_router_core -19,017 B. No Cargo manifest, crate, or feature additions; Cargo.lock only changes rustls 0.23.45 to 0.23.46 (the prior crate report attributes about +1.4 KiB there). No regex or formatting machinery was introduced. Receipts: cargo bloat, symbol comparison, base sections, branch sections. I’m targeting the server request/setup futures and shell setup code, then I’ll measure the stripped artifact again.

R10 size attribution: stripped static x86_64 is 22,316,080 B (+40,192 B vs merge base). Same-tool unstripped `nm` totals are 20,488,747 B -> 20,519,250 B (+30,503 B); ELF deltas are `.text` +26,460 B, `.rodata` +8,192 B, `.gcc_except_table` +2,032 B, `.eh_frame` +1,936 B, and other sections +3,405 B. Largest new named functions are `WebSocketState::new_inner` async state (16,922 B), terminal preference plugin request future (11,707 B), and `pty::login_shell_command` (6,048 B); `read_settings` is 1,935 B. The largest offset is `runtime::build_router_core` -19,017 B. No Cargo manifest, crate, or feature additions; Cargo.lock only changes rustls 0.23.45 to 0.23.46 (the prior crate report attributes about +1.4 KiB there). No regex or formatting machinery was introduced. Receipts: [cargo bloat](https://git.kayg.org/attachments/412acfa1-9b49-40a1-9c0d-27eee7aea63b), [symbol comparison](https://git.kayg.org/attachments/b5f85348-d2ef-4c5a-a380-7d5a1c2f09e5), [base sections](https://git.kayg.org/attachments/2f417059-a1ec-4e7a-b371-647e27a8a7f6), [branch sections](https://git.kayg.org/attachments/43cf55ad-d81f-423f-ab8f-9b37fdd53ffa). I’m targeting the server request/setup futures and shell setup code, then I’ll measure the stripped artifact again.
Author
Owner

Correction to the R10 attribution comment: the remaining unstripped ELF section delta is +3,845 B (not +3,405 B). The listed major section deltas are unchanged.

Correction to the R10 attribution comment: the remaining unstripped ELF section delta is +3,845 B (not +3,405 B). The listed major section deltas are unchanged.
Author
Owner

Continuation r2 started on branch multiplexer-skip at d77df089a, based on merge base b0a3799cf459425c3402e745f329f4ebc441c144. The r10 static x86_64 artifact was +40,192 B over the merge base. I’m reducing the settings/action path, validating the Bash prompt-hook reassignment fix, and measuring shell startup p99 on the locked perf VM. No deployment is planned.

Continuation r2 started on branch `multiplexer-skip` at `d77df089a`, based on merge base `b0a3799cf459425c3402e745f329f4ebc441c144`. The r10 static x86_64 artifact was +40,192 B over the merge base. I’m reducing the settings/action path, validating the Bash prompt-hook reassignment fix, and measuring shell startup p99 on the locked perf VM. No deployment is planned.
Author
Owner

r11 static x86_64 is 22,308,048 B, +32,160 B against merge base b0a3799cf459425c3402e745f329f4ebc441c144; this is 8,032 B smaller than r10. The shared action worker and one-statement preference reads/writes removed duplicate request framing and transaction paths without adding dependencies. The +16,384 B target is still exceeded by 15,776 B, so size reduction remains open. Build receipt: size-iteration-r11.log.

r11 static x86_64 is 22,308,048 B, +32,160 B against merge base `b0a3799cf459425c3402e745f329f4ebc441c144`; this is 8,032 B smaller than r10. The shared action worker and one-statement preference reads/writes removed duplicate request framing and transaction paths without adding dependencies. The +16,384 B target is still exceeded by 15,776 B, so size reduction remains open. Build receipt: [size-iteration-r11.log](https://git.kayg.org/attachments/f950e074-e0e6-427f-ac7d-e4b3526f0599).
Author
Owner

The focused plugin lifecycle suite caught one stale test assumption: plugin_lifecycle.rs indexed discovery.plugins[0] as mesh, but the new terminal preference plugin now precedes it. The run was 4/5; the failing assertion reported left terminal.multiplexer, right mesh. The test now locates the mesh descriptor by ID. Receipt: plugin-control-tests-r11.log.

The focused plugin lifecycle suite caught one stale test assumption: `plugin_lifecycle.rs` indexed `discovery.plugins[0]` as `mesh`, but the new terminal preference plugin now precedes it. The run was 4/5; the failing assertion reported left `terminal.multiplexer`, right `mesh`. The test now locates the mesh descriptor by ID. Receipt: [plugin-control-tests-r11.log](https://git.kayg.org/attachments/078ea035-6789-4ac7-b76c-106bbecd29d6).
Author
Owner

Backend persistence/API slice committed and pushed as e315ab021. Reused the existing settings table and shared plugin socket worker; no dependency additions. Focused checks: plugin lifecycle 6 passed, 0 failed; terminal preference settings 5 passed, 0 failed; server clippy finished successfully. Static size remains +32,160 B vs merge base pending the next reduction.

Backend persistence/API slice committed and pushed as e315ab021. Reused the existing settings table and shared plugin socket worker; no dependency additions. Focused checks: plugin lifecycle 6 passed, 0 failed; terminal preference settings 5 passed, 0 failed; server clippy finished successfully. Static size remains +32,160 B vs merge base pending the next reduction.
Author
Owner

Perf VM run r8 exposed a harness failure before timing samples: Bash plain tmux passed, but the manual Zellij case waited 8 s for the PTY prompt after killing its session and timed out with no output. The test had already confirmed the manual session was listed; it incorrectly assumed the attached client returns to the shell after kill-session. No p99 numbers were produced. Log: real-shell-perf-vm-r8.log.

Perf VM run r8 exposed a harness failure before timing samples: Bash plain tmux passed, but the manual Zellij case waited 8 s for the PTY prompt after killing its session and timed out with no output. The test had already confirmed the manual session was listed; it incorrectly assumed the attached client returns to the shell after `kill-session`. No p99 numbers were produced. Log: [real-shell-perf-vm-r8.log](https://git.kayg.org/attachments/35444432-f2ac-493d-99f2-7d85a53de278).
Author
Owner

Size attribution at r11: stripped x86_64 static size 22,308,048 B, +32,160 B vs merge base; the +16,384 B target is exceeded by 15,776 B. cargo bloat --crates shows no new crate; Cargo.lock has no dependency addition or feature enablement. Same-tool nm totals are 20,488,747 B at base and 20,511,455 B on branch (+22,708 B; +21,652 B excluding exception-table symbols). Largest new named symbols: WebSocketState::new_inner 16,922 B, control action handler future 13,106 B, terminal preference handler future 11,835 B, login_shell_command 6,048 B, settings read future 2,828 B, shared socket worker futures 3,386 B. Main avoidable duplication had been the terminal plugin's separate action loop; sharing it already cut 8,032 B. Current experiment keeps shared plugin assembly out of the WebSocket constructor; same-recipe stripped measurement pending.

Evidence: crate attribution, top functions, base-vs-branch nm.

Size attribution at r11: stripped x86_64 static size 22,308,048 B, +32,160 B vs merge base; the +16,384 B target is exceeded by 15,776 B. `cargo bloat --crates` shows no new crate; Cargo.lock has no dependency addition or feature enablement. Same-tool nm totals are 20,488,747 B at base and 20,511,455 B on branch (+22,708 B; +21,652 B excluding exception-table symbols). Largest new named symbols: `WebSocketState::new_inner` 16,922 B, control action handler future 13,106 B, terminal preference handler future 11,835 B, `login_shell_command` 6,048 B, settings read future 2,828 B, shared socket worker futures 3,386 B. Main avoidable duplication had been the terminal plugin's separate action loop; sharing it already cut 8,032 B. Current experiment keeps shared plugin assembly out of the WebSocket constructor; same-recipe stripped measurement pending. Evidence: [crate attribution](https://git.kayg.org/attachments/ef6ef34c-fc49-4378-835b-969c7c702b81), [top functions](https://git.kayg.org/attachments/a1cc99a2-0d3e-4756-87ab-36f9434f4cc0), [base-vs-branch nm](https://git.kayg.org/attachments/b7bfe8f0-2534-4bb5-9ef9-84a1eca99d9b).
Author
Owner

Two interrupted build/test invocations initially omitted CARGO_TARGET_DIR; neither partial result is counted. The pre-existing worktree target/ was already occupied by other builds, so it was left intact. All subsequent commands use the job scratch target.

Two interrupted build/test invocations initially omitted `CARGO_TARGET_DIR`; neither partial result is counted. The pre-existing worktree `target/` was already occupied by other builds, so it was left intact. All subsequent commands use the job scratch target.
Author
Owner

The no-inline-only candidate did not reduce size: the stripped static x86_64 binary measured 22,308,496 B (+32,608 B vs merge base), 448 B larger than r11. I removed that boundary. The measured WebSocketState::new_inner future remains 16,922 B in the r14 nm receipt. I am testing a boxed shared operation future so the plugin assembly poll path is not embedded in the socket constructor.

Evidence: build log, size receipt.

The no-inline-only candidate did not reduce size: the stripped static x86_64 binary measured 22,308,496 B (+32,608 B vs merge base), 448 B larger than r11. I removed that boundary. The measured `WebSocketState::new_inner` future remains 16,922 B in the r14 nm receipt. I am testing a boxed shared operation future so the plugin assembly poll path is not embedded in the socket constructor. Evidence: [build log](https://git.kayg.org/attachments/801e77ad-ac52-47bd-8c4c-2dcd78820a5d), [size receipt](https://git.kayg.org/attachments/1b1afddf-03fb-46bf-9b5f-8a9ade870662).
Author
Owner

The boxed shared-operation future reduced the stripped static x86_64 artifact to 22,300,304 B (+24,416 B vs merge base), cutting 7,744 B from r11. This remains 8,032 B above the +16 KiB limit. A fresh function-level attribution is running against this candidate before selecting the next cut.

Evidence: build log, size receipt.

The boxed shared-operation future reduced the stripped static x86_64 artifact to 22,300,304 B (+24,416 B vs merge base), cutting 7,744 B from r11. This remains 8,032 B above the +16 KiB limit. A fresh function-level attribution is running against this candidate before selecting the next cut. Evidence: [build log](https://git.kayg.org/attachments/0aec8217-beb0-4abe-96b5-9fb7e757d678), [size receipt](https://git.kayg.org/attachments/5a9c9983-d16e-4c29-8c21-6c20c8006ff8).
Author
Owner

Size attribution at d77df089a: static x86_64 is 22,300,304 B, +24,416 B versus the 22,275,888 B merge base; the +16,384 B limit is still exceeded by 8,032 B. Same-tool named symbols add 17,014 B, led by the terminal settings handler future (11,835 B), control handler future (13,106 B), and shared plugin assembly future (7,821 B). No new crates/features are involved. The symbol report suggests the async settings action graph is carried by its handler future; r18 boxes it through the existing Operation boundary for a measured size check. Evidence: cargo-bloat, attribution.

Size attribution at d77df089a: static x86_64 is 22,300,304 B, +24,416 B versus the 22,275,888 B merge base; the +16,384 B limit is still exceeded by 8,032 B. Same-tool named symbols add 17,014 B, led by the terminal settings handler future (11,835 B), control handler future (13,106 B), and shared plugin assembly future (7,821 B). No new crates/features are involved. The symbol report suggests the async settings action graph is carried by its handler future; r18 boxes it through the existing Operation boundary for a measured size check. Evidence: [cargo-bloat](https://git.kayg.org/attachments/5ad74369-c0af-415d-b8be-b9811faeb221), [attribution](https://git.kayg.org/attachments/c4be9904-2899-4bf1-b645-cef583a39c48).
Author
Owner

The r18 focused server test has been queued through build-slot since 04:53 CEST. All four slots remain occupied by other lanes; no build/test is running outside the wrapper. The next size result and required shell/gate tests need a released build slot. Source and dependency manifests are unchanged while waiting.

The r18 focused server test has been queued through build-slot since 04:53 CEST. All four slots remain occupied by other lanes; no build/test is running outside the wrapper. The next size result and required shell/gate tests need a released build slot. Source and dependency manifests are unchanged while waiting.
Author
Owner

Focused settings tests passed (5/5). The first r18 clippy run stopped before the static build: clippy::elidable_lifetime_names at crates/infraternal-server/src/plugins.rs:1018 on the shared assembly Operation helper. The explicit lifetime is now elided; fmt, clippy, focused tests and static size measurement are queued together through build-slot. Receipt: r18 clippy output.

Focused settings tests passed (5/5). The first r18 clippy run stopped before the static build: clippy::elidable_lifetime_names at crates/infraternal-server/src/plugins.rs:1018 on the shared assembly Operation helper. The explicit lifetime is now elided; fmt, clippy, focused tests and static size measurement are queued together through build-slot. Receipt: [r18 clippy output](https://git.kayg.org/attachments/900b8456-6530-4826-98ce-ee784c9a21d9).
Author
Owner

R18 verified with fmt, server clippy clean, and terminal preference unit tests 5/5. Stripped static x86_64 measured 22,300,400 B (+24,512 B vs 22,275,888 B base), 8,128 B over the +16,384 B ceiling. Boxing execute_action without an optimizer boundary did not reduce the linked image (r16 was 22,300,304 B). I’m adding #[inline(never)] to the boxed action factory; the earlier shared plugin assembly helper reduced size only with this boundary in place. Receipts: build/tests/clippy, size.

R18 verified with fmt, server clippy clean, and terminal preference unit tests 5/5. Stripped static x86_64 measured 22,300,400 B (+24,512 B vs 22,275,888 B base), 8,128 B over the +16,384 B ceiling. Boxing execute_action without an optimizer boundary did not reduce the linked image (r16 was 22,300,304 B). I’m adding #[inline(never)] to the boxed action factory; the earlier shared plugin assembly helper reduced size only with this boundary in place. Receipts: [build/tests/clippy](https://git.kayg.org/attachments/3da71d37-5a0a-48bf-8b5b-f8383364ac7f), [size](https://git.kayg.org/attachments/4fcb9f89-621f-458f-8ce4-84cd79791706).
Author
Owner

R19 formatting, server clippy and terminal preference tests passed (5/5). Adding #[inline(never)] to the boxed execute_action factory increased the stripped static binary to 22,300,528 B (+24,640 B vs base), 8,256 B over the growth ceiling. This is 224 B larger than the unboxed async implementation and is rejected. I’m removing both r18/r19 boxing experiments and will reduce the action surface while retaining per-host ownership and atomic notice claiming. Evidence: r19 log, size.

R19 formatting, server clippy and terminal preference tests passed (5/5). Adding #[inline(never)] to the boxed execute_action factory increased the stripped static binary to 22,300,528 B (+24,640 B vs base), 8,256 B over the growth ceiling. This is 224 B larger than the unboxed async implementation and is rejected. I’m removing both r18/r19 boxing experiments and will reduce the action surface while retaining per-host ownership and atomic notice claiming. Evidence: [r19 log](https://git.kayg.org/attachments/38d64d7b-7f1f-48fa-ad6c-3adc36843964), [size](https://git.kayg.org/attachments/130b80ed-2976-4eb1-babb-a24f783c4c35).
Author
Owner

To address the measured 8,256 B r19 overage without weakening ownership or persistence, I collapsed the new API from four action IDs to two: terminal.multiplexer.prepare reads effective settings and atomically claims/returns the first notice; terminal.multiplexer.set covers global (host_id omitted), local (host_id=null), and remote (UUID) settings. prepare is declared Write because claiming the notice persists state. The remote host owner/revocation checks and one-time notice transaction remain in the same backend functions. I’m validating the revised action schema and linked size now.

To address the measured 8,256 B r19 overage without weakening ownership or persistence, I collapsed the new API from four action IDs to two: `terminal.multiplexer.prepare` reads effective settings and atomically claims/returns the first notice; `terminal.multiplexer.set` covers global (host_id omitted), local (host_id=null), and remote (UUID) settings. `prepare` is declared Write because claiming the notice persists state. The remote host owner/revocation checks and one-time notice transaction remain in the same backend functions. I’m validating the revised action schema and linked size now.
Author
Owner

The r20 validation command (fmt, server clippy, 3 focused API/socket tests, static size build) has been queued through build-slot since 05:31 CEST. The four slots remain occupied by two scripts/verify fast gates and two other build/test lanes. The real-shell test binary will also be rebuilt before the perf VM run because its existing artifact predates the latest pty.rs source. No unwrapped builds are running.

The r20 validation command (fmt, server clippy, 3 focused API/socket tests, static size build) has been queued through build-slot since 05:31 CEST. The four slots remain occupied by two `scripts/verify fast` gates and two other build/test lanes. The real-shell test binary will also be rebuilt before the perf VM run because its existing artifact predates the latest `pty.rs` source. No unwrapped builds are running.
Author
Owner

Update 05:45 CEST: r20 is still queued since 05:31; the slot that released was taken by another final gate. The new action tests and size result remain pending a build-slot. I’ll continue as soon as the queue admits it.

Update 05:45 CEST: r20 is still queued since 05:31; the slot that released was taken by another final gate. The new action tests and size result remain pending a build-slot. I’ll continue as soon as the queue admits it.
Author
Owner

R20: cargo fmt --check, server clippy clean, 6 preference tests, the authenticated socket test, and plugin socket persistence test all pass. Static x86_64 is 22,298,992 B (+23,104 B vs base), 6,720 B above the allowed growth. Symbol comparison against the same-tool base shows the prior SocketPlugins::control poll was 7,549 B and the extracted ControlActionHandler::call poll is 13,106 B (+5,557 B); this extraction is the likely main remaining avoidable cost. I’m restoring the pre-existing controller worker path while retaining the generic action worker for terminal preferences, and simplifying the set response to an acknowledgement so it does not fetch/serialize settings twice. Evidence: R20 tests/build, size, current symbols, base symbols.

R20: `cargo fmt --check`, server clippy clean, 6 preference tests, the authenticated socket test, and plugin socket persistence test all pass. Static x86_64 is 22,298,992 B (+23,104 B vs base), 6,720 B above the allowed growth. Symbol comparison against the same-tool base shows the prior `SocketPlugins::control` poll was 7,549 B and the extracted `ControlActionHandler::call` poll is 13,106 B (+5,557 B); this extraction is the likely main remaining avoidable cost. I’m restoring the pre-existing controller worker path while retaining the generic action worker for terminal preferences, and simplifying the set response to an acknowledgement so it does not fetch/serialize settings twice. Evidence: [R20 tests/build](https://git.kayg.org/attachments/e19391c1-a7ea-4eab-ae76-5d0ad7cb8079), [size](https://git.kayg.org/attachments/844e6b1c-e29d-485f-b2cd-12f428157840), [current symbols](https://git.kayg.org/attachments/aa7bc946-d9c1-4f7f-a57f-07c3301fd047), [base symbols](https://git.kayg.org/attachments/bdc6e7c3-4c39-4d17-bea1-d2de2ea23ae2).
Author
Owner

R21 (fmt, server clippy, preference and plugin lifecycle tests, static size build) has been queued through build-slot since 06:02 CEST. As of 06:12 all four slots remain held by other lanes. No build/test is running outside the wrapper; the queued command is unchanged.

R21 (fmt, server clippy, preference and plugin lifecycle tests, static size build) has been queued through build-slot since 06:02 CEST. As of 06:12 all four slots remain held by other lanes. No build/test is running outside the wrapper; the queued command is unchanged.
Author
Owner

R21 formatting/clippy and focused tests passed: 6 terminal preference tests, 6 plugin lifecycle tests, and the authenticated socket test. The stripped static binary is 22,305,648 B (+29,760 B vs base), 13,376 B above the growth cap and 6,656 B larger than R20. The attempted inline plugin-controller restoration plus acknowledgement-only set response regressed size; this candidate is rejected. The earlier symbol-size comparison did not predict linked-size behavior, so I’m inspecting R21 linked symbols before the next size edit. Evidence: R21 build/tests, size.

R21 formatting/clippy and focused tests passed: 6 terminal preference tests, 6 plugin lifecycle tests, and the authenticated socket test. The stripped static binary is 22,305,648 B (+29,760 B vs base), 13,376 B above the growth cap and 6,656 B larger than R20. The attempted inline plugin-controller restoration plus acknowledgement-only set response regressed size; this candidate is rejected. The earlier symbol-size comparison did not predict linked-size behavior, so I’m inspecting R21 linked symbols before the next size edit. Evidence: [R21 build/tests](https://git.kayg.org/attachments/31ea0216-938d-4837-b425-c9c0948327f3), [size](https://git.kayg.org/attachments/83f90ec5-4455-4894-b03c-3036c87cf4a4).
Author
Owner

R21 symbol attribution attached. The 22,305,648 B candidate is +29,760 B from base, 13,376 B over the +16,384 B limit. The largest new named polls are TerminalPreferencesPlugin::call (9,796 B), compiled_with_hosts (7,821 B; inlined in base), pty::login_shell_command (6,048 B; inlined in base), and read_settings (2,846 B). The core control closure is 7,461 B versus 7,549 B in base; symbol deltas do not explain the 6,656 B R20-to-R21 whole-binary regression because controller and response changes were combined. I restored the shared controller implementation from R20 before measuring the next candidate.

Receipt: R21 size attribution

R21 symbol attribution attached. The 22,305,648 B candidate is +29,760 B from base, 13,376 B over the +16,384 B limit. The largest new named polls are TerminalPreferencesPlugin::call (9,796 B), compiled_with_hosts (7,821 B; inlined in base), pty::login_shell_command (6,048 B; inlined in base), and read_settings (2,846 B). The core control closure is 7,461 B versus 7,549 B in base; symbol deltas do not explain the 6,656 B R20-to-R21 whole-binary regression because controller and response changes were combined. I restored the shared controller implementation from R20 before measuring the next candidate. Receipt: [R21 size attribution](https://git.kayg.org/attachments/d6242ed6-3e48-4bbe-8c27-c4be0dfb03f9)
Author
Owner

R22 candidate measurement: 22,297,520 B stripped static, +21,632 B against merge base. Restoring shared controller dispatch and returning a fixed save acknowledgement reduced R21 by 8,128 B; this candidate is still 5,248 B above the +16,384 B limit. I’m keeping it uncommitted and splitting the two action futures to target the remaining generated poll code.

Receipt: R22 size metric

R22 candidate measurement: 22,297,520 B stripped static, +21,632 B against merge base. Restoring shared controller dispatch and returning a fixed save acknowledgement reduced R21 by 8,128 B; this candidate is still 5,248 B above the +16,384 B limit. I’m keeping it uncommitted and splitting the two action futures to target the remaining generated poll code. Receipt: [R22 size metric](https://git.kayg.org/attachments/43606807-ef15-4bf9-b976-6bf1e69bc613)
Author
Owner

R23 split-future experiment is rejected on size: 22,298,000 B stripped static, +22,112 B against base, 5,728 B over the +16,384 B limit; it is 480 B larger than R22. Server clippy passed and the 17 focused terminal_ tests passed. I’m gathering a fresh symbol report to guide the next reduction.

Receipt: R23 size metric and focused gates

R23 split-future experiment is rejected on size: 22,298,000 B stripped static, +22,112 B against base, 5,728 B over the +16,384 B limit; it is 480 B larger than R22. Server clippy passed and the 17 focused `terminal_` tests passed. I’m gathering a fresh symbol report to guide the next reduction. Receipt: [R23 size metric and focused gates](https://git.kayg.org/attachments/cca88a2b-e710-47c8-99da-565066b19374)
Author
Owner

R23 attribution attached. The +22,112 B stripped delta is spread across .text (+10,396), .rodata (+8,192), exception/unwind sections (+2,292 combined), and .data.rel.ro (+1,088). The split action polls are 4,087 B (prepare), 2,637 B (set), and 2,846 B (settings read); the shared action worker poll is 2,527 B. Same-name nm totals do not reconcile with stripped size because code moves across inlined functions and data sections. Full symbol report attached for the next cut.

Receipts: R23 section and symbol summary, R23 nm output

R23 attribution attached. The +22,112 B stripped delta is spread across `.text` (+10,396), `.rodata` (+8,192), exception/unwind sections (+2,292 combined), and `.data.rel.ro` (+1,088). The split action polls are 4,087 B (prepare), 2,637 B (set), and 2,846 B (settings read); the shared action worker poll is 2,527 B. Same-name `nm` totals do not reconcile with stripped size because code moves across inlined functions and data sections. Full symbol report attached for the next cut. Receipts: [R23 section and symbol summary](https://git.kayg.org/attachments/35ac8860-14d1-46fb-97c5-ced8e74b30e9), [R23 nm output](https://git.kayg.org/attachments/d6da25f6-5557-4da1-8f6a-4df810995b5e)
Author
Owner

R24 measured 22,296,112 B stripped static, +20,224 B from base and 3,840 B above the +16,384 B limit. Removing the inherited PROMPT_COMMAND environment scan and state saved 1,888 B against R23; Bash rc-defined scalar and array hooks remain covered by passing tests. I’m applying one more measured reduction to the action contract data and Bash array detection.

Receipt: R24 size metric

R24 measured 22,296,112 B stripped static, +20,224 B from base and 3,840 B above the +16,384 B limit. Removing the inherited PROMPT_COMMAND environment scan and state saved 1,888 B against R23; Bash rc-defined scalar and array hooks remain covered by passing tests. I’m applying one more measured reduction to the action contract data and Bash array detection. Receipt: [R24 size metric](https://git.kayg.org/attachments/d77ddc32-8b0b-4478-8dbb-1719f66b4bd0)
Author
Owner

R25 is still 22,296,112 B (+20,224 B), 3,840 B over the relative cap. Named action schema references and Bash declare -p array detection produced no stripped-size change from R24. The nested-Option parser experiment was reverted because clippy::option_option rejects it; the explicit tri-state parser passes clippy. I’m continuing with an implementation-level reduction rather than retaining a lint exception.

Receipt: R25 size metric

R25 is still 22,296,112 B (+20,224 B), 3,840 B over the relative cap. Named action schema references and Bash `declare -p` array detection produced no stripped-size change from R24. The nested-Option parser experiment was reverted because `clippy::option_option` rejects it; the explicit tri-state parser passes clippy. I’m continuing with an implementation-level reduction rather than retaining a lint exception. Receipt: [R25 size metric](https://git.kayg.org/attachments/87dc920e-52ec-4898-b24f-ebb4176e3fc4)
Author
Owner

SQL consolidation and clippy/test evidence: save_setting now applies global and host overrides through one SQLite write path. The 17 focused server tests pass; clippy passes for infraternal-server and infraternal-shim. The stripped static x86_64 binary is 22,295,568 B versus 22,296,112 B in R25 and 22,275,888 B at merge base: this saves 544 B, leaving +19,680 B, 3,296 B above the +16,384 B limit. Build receipt: size-iteration-r26.log. Continuing size attribution and reduction.

SQL consolidation and clippy/test evidence: `save_setting` now applies global and host overrides through one SQLite write path. The 17 focused server tests pass; clippy passes for infraternal-server and infraternal-shim. The stripped static x86_64 binary is 22,295,568 B versus 22,296,112 B in R25 and 22,275,888 B at merge base: this saves 544 B, leaving +19,680 B, 3,296 B above the +16,384 B limit. Build receipt: [size-iteration-r26.log](https://git.kayg.org/attachments/bbd1d432-0e1c-4638-b151-38964557958e). Continuing size attribution and reduction.
Author
Owner

R26 cargo-bloat attribution (unstripped static x86_64 release): the TerminalPreferencesPlugin::call async poll is 9.2 KiB, read_settings poll is 2.8 KiB, host_path is 334 B, and Zsh write_startup_file is 830 B. The largest repeated cost is the plugin async call future; no dependencies or Cargo features were added. Full function report: cargo-bloat-r26.log. I’m targeting the duplicated async settings path and startup helper while preserving owner checks and the notice claim.

R26 cargo-bloat attribution (unstripped static x86_64 release): the `TerminalPreferencesPlugin::call` async poll is 9.2 KiB, `read_settings` poll is 2.8 KiB, `host_path` is 334 B, and Zsh `write_startup_file` is 830 B. The largest repeated cost is the plugin async call future; no dependencies or Cargo features were added. Full function report: [cargo-bloat-r26.log](https://git.kayg.org/attachments/cda14882-9696-41d9-920b-88296fca6e21). I’m targeting the duplicated async settings path and startup helper while preserving owner checks and the notice claim.
Author
Owner

D241 UI copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. Use zellij here turns startup skipping off for that host; the global switch remains available. This is the exact copy from D241, recorded here as requested.

D241 UI copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. `Use zellij here` turns startup skipping off for that host; the global switch remains available. This is the exact copy from D241, recorded here as requested.
Author
Owner

R27 current source passes focused server clippy/tests. The updated size build is queued at the build-slot wrapper. The real-shell harness is staged on infraternal-perf-test and its SHA-256 matches the local artifact, but flock -w 3600 /var/lock/perf-bench.lock has not admitted the measurement yet. No R27 timing result is available.

R27 current source passes focused server clippy/tests. The updated size build is queued at the build-slot wrapper. The real-shell harness is staged on `infraternal-perf-test` and its SHA-256 matches the local artifact, but `flock -w 3600 /var/lock/perf-bench.lock` has not admitted the measurement yet. No R27 timing result is available.
Author
Owner

R27 static stripped x86_64 size is 22,293,904 B versus 22,275,888 B at merge base: +18,016 B, 1,632 B above the +16,384 B continuation ceiling. Relative to R26 (22,295,568 B), the parser, borrowed UUID bytes and startup changes saved 1,664 B. Artifact receipt: size-iteration-r27.log. Continuing to reduce the remaining overage before committing.

R27 static stripped x86_64 size is 22,293,904 B versus 22,275,888 B at merge base: +18,016 B, 1,632 B above the +16,384 B continuation ceiling. Relative to R26 (22,295,568 B), the parser, borrowed UUID bytes and startup changes saved 1,664 B. Artifact receipt: [size-iteration-r27.log](https://git.kayg.org/attachments/58958f6e-eb8e-4417-9d5b-643770573b10). Continuing to reduce the remaining overage before committing.
Author
Owner

R28 static stripped x86_64 size is 22,293,072 B versus 22,275,888 B at merge base: +17,184 B, 800 B above the +16,384 B ceiling. The test-only remote recheck removal saved 832 B from R27 (22,293,904 B) while focused clippy and tests remained green. Artifact receipt: size-iteration-r28.log. I’m trimming internal startup wrapper names and catalog wording to clear the remaining 800 B without changing behavior.

R28 static stripped x86_64 size is 22,293,072 B versus 22,275,888 B at merge base: +17,184 B, 800 B above the +16,384 B ceiling. The test-only remote recheck removal saved 832 B from R27 (22,293,904 B) while focused clippy and tests remained green. Artifact receipt: [size-iteration-r28.log](https://git.kayg.org/attachments/bd4409af-a41d-4d92-b41b-812300b7d6fe). I’m trimming internal startup wrapper names and catalog wording to clear the remaining 800 B without changing behavior.
Author
Owner

R29 focused checks are green: clippy passed, 17 server tests passed, and 5 shell-startup tests passed. The stripped static x86_64 size build has waited in build-slot since about 09:15 CET and has not started; free disk is 35 GB. Needed to continue: an available shared build slot. Current HEAD is e315ab021; R29 changes are uncommitted.

R29 focused checks are green: clippy passed, 17 server tests passed, and 5 shell-startup tests passed. The stripped static x86_64 size build has waited in build-slot since about 09:15 CET and has not started; free disk is 35 GB. Needed to continue: an available shared build slot. Current HEAD is e315ab021; R29 changes are uncommitted.
Author
Owner

The R29 size build is still queued in build-slot; all four slots remain occupied. The existing 13 GB job target is intact and disk availability has recovered to 72 GB. Since the last issue update, I added the parser-fuzzing-only entry point/target; cargo tree confirms that feature is absent from the production server tree and introduces no dependencies. Current HEAD remains e315ab021; the focused R29 checks are green, and the source changes remain uncommitted pending size/perf verification.

The R29 size build is still queued in build-slot; all four slots remain occupied. The existing 13 GB job target is intact and disk availability has recovered to 72 GB. Since the last issue update, I added the parser-fuzzing-only entry point/target; cargo tree confirms that feature is absent from the production server tree and introduces no dependencies. Current HEAD remains e315ab021; the focused R29 checks are green, and the source changes remain uncommitted pending size/perf verification.
Author
Owner

R29 remains queued: all four shared build slots are occupied, and size-iteration-r29.log has not been created because the static build has not started. Disk availability is 71 GB and this job's existing target remains intact. Focused clippy and tests are green (17 server, 5 shim); current HEAD is e315ab021 with R29 uncommitted. Needed to proceed: a shared build slot for the required stripped-size comparison.

R29 remains queued: all four shared build slots are occupied, and `size-iteration-r29.log` has not been created because the static build has not started. Disk availability is 71 GB and this job's existing target remains intact. Focused clippy and tests are green (17 server, 5 shim); current HEAD is e315ab021 with R29 uncommitted. Needed to proceed: a shared build slot for the required stripped-size comparison.
Author
Owner

R29 static stripped x86_64 size is 22,292,816 B versus 22,275,888 B at the merge base: +16,928 B, still 544 B above the +16,384 B ceiling. This saves 256 B from R28's +17,184 B. The build reports a stripped static PIE. Receipt: size-iteration-r29.log. I’m reducing the remaining 544 B before committing.

R29 static stripped x86_64 size is 22,292,816 B versus 22,275,888 B at the merge base: +16,928 B, still 544 B above the +16,384 B ceiling. This saves 256 B from R28's +17,184 B. The build reports a stripped static PIE. Receipt: [size-iteration-r29.log](https://git.kayg.org/attachments/9cd60591-7b94-4434-95c2-21979de87e5f). I’m reducing the remaining 544 B before committing.
Author
Owner

R30 focused clippy and test gates remain queued in build-slot after ~35 minutes; the wrapper is alive in its 20-second wait loop and has produced no gate log yet. Scratch filesystem has 65 GB free; the existing target is intact. Current branch head: e315ab021. Continuing with the queued request.

R30 focused clippy and test gates remain queued in build-slot after ~35 minutes; the wrapper is alive in its 20-second wait loop and has produced no gate log yet. Scratch filesystem has 65 GB free; the existing target is intact. Current branch head: e315ab021. Continuing with the queued request.
Author
Owner

R30 focused clippy/tests have been queued in build-slot for ~54 minutes. The request is alive in the wrapper wait loop with no gate log; all four ordinary slots remain occupied by other jobs. Two slots turned over and were acquired by other queued jobs. Scratch has 72 GB free; current branch head remains e315ab021. Continuing to wait for the next slot.

R30 focused clippy/tests have been queued in build-slot for ~54 minutes. The request is alive in the wrapper wait loop with no gate log; all four ordinary slots remain occupied by other jobs. Two slots turned over and were acquired by other queued jobs. Scratch has 72 GB free; current branch head remains e315ab021. Continuing to wait for the next slot.
Author
Owner

One hour after enqueue, R30 focused clippy/tests remain in the build-slot wait loop with no compiler log. All four ordinary slots remain occupied; the oldest current slot owner has been running since 13:08 CEST. Scratch has 71 GB free. Current head: e315ab021. No gate result yet; continuing to wait.

One hour after enqueue, R30 focused clippy/tests remain in the build-slot wait loop with no compiler log. All four ordinary slots remain occupied; the oldest current slot owner has been running since 13:08 CEST. Scratch has 71 GB free. Current head: e315ab021. No gate result yet; continuing to wait.
Author
Owner

R30 focused gates remain queued after ~66 minutes, with no output. Scratch free space has fallen to 56 GB (from 71 GB at the prior update); this job's single target remains present. The four ordinary slots are still held by other jobs. Continuing with the existing queue request.

R30 focused gates remain queued after ~66 minutes, with no output. Scratch free space has fallen to 56 GB (from 71 GB at the prior update); this job's single target remains present. The four ordinary slots are still held by other jobs. Continuing with the existing queue request.
Author
Owner

R30 focused gates passed against the working tree (branch head e315ab021): clippy for infraternal-server, infraternal-shim and infraternal-agent; 17 server tests passed; 5 shell-startup tests passed. The R30 size reductions shorten shell guard identifiers and action-catalogue text. Logs: clippy, server tests, shim tests. Next: static binary size measurement.

R30 focused gates passed against the working tree (branch head e315ab021): clippy for infraternal-server, infraternal-shim and infraternal-agent; 17 server tests passed; 5 shell-startup tests passed. The R30 size reductions shorten shell guard identifiers and action-catalogue text. Logs: [clippy](https://git.kayg.org/attachments/6a467f37-3478-422d-8906-f17833a6d67b), [server tests](https://git.kayg.org/attachments/09150c75-eb77-4bca-b868-ee4ece330036), [shim tests](https://git.kayg.org/attachments/fc403eb9-3f05-43ee-ac88-cf72855fb1f5). Next: static binary size measurement.
Author
Owner

R30 static release build passed, but the binary remains 22,292,816 B (+16,928 B vs merge base 22,275,888 B), 544 B over the 16,384 B cap. It is a stripped x86_64 static PIE. Size is unchanged from R29 despite the additional identifier/catalogue string cuts, so those changes did not reduce the final file size. Build receipt: size-iteration-r30.log. Continuing to trim production code before commit.

R30 static release build passed, but the binary remains 22,292,816 B (+16,928 B vs merge base 22,275,888 B), 544 B over the 16,384 B cap. It is a stripped x86_64 static PIE. Size is unchanged from R29 despite the additional identifier/catalogue string cuts, so those changes did not reduce the final file size. Build receipt: [size-iteration-r30.log](https://git.kayg.org/attachments/007b26ea-1c56-4e6d-b0d5-2bf9117f61f9). Continuing to trim production code before commit.
Author
Owner

The fresh R30 cargo-bloat/symbol comparison has waited one hour in build-slot and has produced no log. All four ordinary slots remain occupied by other jobs. Scratch has 70 GB free; this job's target is intact. The parser visitor reduction is formatted but still awaits compilation/clippy and size evidence. Continuing with the queued request.

The fresh R30 cargo-bloat/symbol comparison has waited one hour in build-slot and has produced no log. All four ordinary slots remain occupied by other jobs. Scratch has 70 GB free; this job's target is intact. The parser visitor reduction is formatted but still awaits compilation/clippy and size evidence. Continuing with the queued request.
Author
Owner

R30 size attribution against merge base b0a3799cf4: no production dependency or feature was added; the parser-fuzzing feature is enabled only by fuzz/Cargo.toml. The fresh nm --size-sort comparison reports +8,524 B of named symbols (+7,268 B excluding exception-table labels). Largest task-path symbols are the terminal preference action poll (7,840 B), read_settings poll (2,579 B), login_shell_command (5,737 B), and shared socket action worker (2,527 B). The branch-vs-base unstripped section delta is .text +7,132 B, .rodata +8,192 B, .gcc_except_table +800 B, .eh_frame +456 B, and .data.rel.ro +960 B. This explains the feature growth without serde derive machinery or new crates; the hand-written JSON visitor is being replaced with a derived strict struct and small null-preserving field decoder. Receipts: bloat functions, bloat crates, nm delta, base sections, branch sections. The parser change is now ready for focused clippy/tests and a new stripped size measurement.

R30 size attribution against merge base b0a3799cf459425c3402e745f329f4ebc441c144: no production dependency or feature was added; the parser-fuzzing feature is enabled only by fuzz/Cargo.toml. The fresh `nm --size-sort` comparison reports +8,524 B of named symbols (+7,268 B excluding exception-table labels). Largest task-path symbols are the terminal preference action poll (7,840 B), `read_settings` poll (2,579 B), `login_shell_command` (5,737 B), and shared socket action worker (2,527 B). The branch-vs-base unstripped section delta is `.text` +7,132 B, `.rodata` +8,192 B, `.gcc_except_table` +800 B, `.eh_frame` +456 B, and `.data.rel.ro` +960 B. This explains the feature growth without serde derive machinery or new crates; the hand-written JSON visitor is being replaced with a derived strict struct and small null-preserving field decoder. Receipts: [bloat functions](https://git.kayg.org/attachments/ad62865e-71d0-4455-9960-b293e36cb344), [bloat crates](https://git.kayg.org/attachments/e0707c1f-71ef-40bb-9d0e-da68e94a21c9), [nm delta](https://git.kayg.org/attachments/b29d0b89-0460-4718-aae9-52af9972fb24), [base sections](https://git.kayg.org/attachments/eb1e059b-de1f-496c-be2a-e48263b4adba), [branch sections](https://git.kayg.org/attachments/82e67ec3-efc4-4050-af35-2f28a7f3c51e). The parser change is now ready for focused clippy/tests and a new stripped size measurement.
Author
Owner

Correction to the attribution above: the R30 bloat artifact includes the new serde-derived ActionInput struct. Its null-preserving field decoder is small in the symbol report; there are no added dependencies or production features. The parser refactor is intended to reduce the hand-written visitor, and its effect still needs the post-change stripped size measurement.

Correction to the attribution above: the R30 bloat artifact includes the new serde-derived `ActionInput` struct. Its null-preserving field decoder is small in the symbol report; there are no added dependencies or production features. The parser refactor is intended to reduce the hand-written visitor, and its effect still needs the post-change stripped size measurement.
Author
Owner

The parser reduction passes focused gates against working-tree head e315ab021: clippy on infraternal-server, infraternal-shim and infraternal-agent; 17 server tests passed; 5 shell-startup tests passed. The input remains strict and preserves missing versus null through a small field deserializer, with duplicate and unknown keys rejected by the derived struct. Logs: clippy, server tests, shim tests. Next: stripped static size measurement.

The parser reduction passes focused gates against working-tree head e315ab021: clippy on infraternal-server, infraternal-shim and infraternal-agent; 17 server tests passed; 5 shell-startup tests passed. The input remains strict and preserves missing versus null through a small field deserializer, with duplicate and unknown keys rejected by the derived struct. Logs: [clippy](https://git.kayg.org/attachments/31e8199a-4e82-41f9-b5e8-918e7999aa88), [server tests](https://git.kayg.org/attachments/4df59be8-89e9-49e4-a8f0-4e9adc22d5d9), [shim tests](https://git.kayg.org/attachments/a034b3fc-30b4-45a0-b61d-59487672aee6). Next: stripped static size measurement.
Author
Owner

R31 size finding: the serde-derived input parser produced a stripped static binary of 22,293,328 B (+17,440 B vs merge base), 1,056 B over cap and 512 B larger than R30. That parser change is reverted. Receipt: R31 size build.

R32 focused gates pass at working-tree head e315ab021: clippy on server/shim/agent; 17 server tests; 5 shim startup tests. R32 replaces UUID formatting in host_path with lowercase hex appends and changes the atomic notice claim to use SQLite rows_affected() instead of RETURNING 1; ownership and notice tests pass. Logs: clippy, server tests, shim tests. Next: stripped static size measurement.

R31 size finding: the serde-derived input parser produced a stripped static binary of 22,293,328 B (+17,440 B vs merge base), 1,056 B over cap and 512 B larger than R30. That parser change is reverted. Receipt: [R31 size build](https://git.kayg.org/attachments/12295488-6c8d-4c46-a9ea-29ac1da8d0e4). R32 focused gates pass at working-tree head e315ab021: clippy on server/shim/agent; 17 server tests; 5 shim startup tests. R32 replaces UUID formatting in `host_path` with lowercase hex appends and changes the atomic notice claim to use SQLite `rows_affected()` instead of `RETURNING 1`; ownership and notice tests pass. Logs: [clippy](https://git.kayg.org/attachments/b807aa69-1dbb-4634-a930-62583f37163e), [server tests](https://git.kayg.org/attachments/9b61836b-74c4-47cf-881f-a5225342fd93), [shim tests](https://git.kayg.org/attachments/2e9b78ef-eedc-42f1-963b-235023ec9262). Next: stripped static size measurement.
Author
Owner

R32 static size is 22,292,880 B (+16,992 B vs merge base), 608 B over the 16,384 B cap. This is 448 B smaller than R31 but 64 B larger than R30, so the path-format and SQLite row-count edits do not yet clear the cap. Receipt: size-iteration-r32.log. I’m removing specialized serializer glue for the fixed settings response while keeping its four booleans and nullable override.

R32 static size is 22,292,880 B (+16,992 B vs merge base), 608 B over the 16,384 B cap. This is 448 B smaller than R31 but 64 B larger than R30, so the path-format and SQLite row-count edits do not yet clear the cap. Receipt: [size-iteration-r32.log](https://git.kayg.org/attachments/9b885240-5bc5-4b09-acd8-5921ac7c09b1). I’m removing specialized serializer glue for the fixed settings response while keeping its four booleans and nullable override.
Author
Owner

R33 focused gates pass against working-tree head e315ab021: clippy on server/shim/agent; 17 server tests; 5 shim startup tests. The settings response encoder now writes a fixed key sequence and scalar JSON tokens without a derived serializer; action tests parse its bytes and verify all four fields. Logs: clippy, server tests, shim tests. Next: stripped static size measurement.

R33 focused gates pass against working-tree head e315ab021: clippy on server/shim/agent; 17 server tests; 5 shim startup tests. The settings response encoder now writes a fixed key sequence and scalar JSON tokens without a derived serializer; action tests parse its bytes and verify all four fields. Logs: [clippy](https://git.kayg.org/attachments/cf060e64-6e6b-404c-84c0-7e84830cb9cb), [server tests](https://git.kayg.org/attachments/e8d2b538-626c-4e87-84e1-860ebe3d201c), [shim tests](https://git.kayg.org/attachments/836ebe17-86d3-479a-b4be-50e3d1d54681). Next: stripped static size measurement.
Author
Owner

R33 stripped static binary is 22,293,136 B (+17,248 B vs merge base), 864 B over cap and 256 B larger than R32. The fixed manual JSON encoder is reverted; serde serialization is retained. Receipt: R33 size build. I’m testing a direct boxed action future to remove the extra wrapper at the socket boundary.

R33 stripped static binary is 22,293,136 B (+17,248 B vs merge base), 864 B over cap and 256 B larger than R32. The fixed manual JSON encoder is reverted; serde serialization is retained. Receipt: [R33 size build](https://git.kayg.org/attachments/038a019c-8e9e-4cb2-bc3f-e728d3f819d4). I’m testing a direct boxed action future to remove the extra wrapper at the socket boundary.
Author
Owner

R34 focused gates pass at working-tree head e315ab021: clippy on server/shim/agent; 17 server tests; 5 shim startup tests. TerminalPreferencesPlugin::call now returns a boxed execute_action future directly; execute_action produces the handler's Result so no wrapper future is needed. Logs: clippy, server tests, shim tests. Next: stripped size measurement.

R34 focused gates pass at working-tree head e315ab021: clippy on server/shim/agent; 17 server tests; 5 shim startup tests. `TerminalPreferencesPlugin::call` now returns a boxed `execute_action` future directly; `execute_action` produces the handler's `Result` so no wrapper future is needed. Logs: [clippy](https://git.kayg.org/attachments/03865059-f6ec-48a8-ac36-80cc3b3c860a), [server tests](https://git.kayg.org/attachments/d19adb07-d3d2-49ee-9054-4223b8fac923), [shim tests](https://git.kayg.org/attachments/04d0ca85-e649-4458-a2df-2accc2183f94). Next: stripped size measurement.
Author
Owner

R34 static size result: stripped x86_64 musl binary is 22,292,720 B, +16,832 B over merge base b0a3799cf4 and 448 B above the 16,384 B cap. The direct boxed action future saves 160 B against R32, so it remains in place. Build log: https://git.kayg.org/attachments/58b7ef2d-5767-42a7-9dee-132864a67a91

R34 static size result: stripped x86_64 musl binary is 22,292,720 B, +16,832 B over merge base b0a3799cf459425c3402e745f329f4ebc441c144 and 448 B above the 16,384 B cap. The direct boxed action future saves 160 B against R32, so it remains in place. Build log: https://git.kayg.org/attachments/58b7ef2d-5767-42a7-9dee-132864a67a91
Author
Owner

R35 measured codegen trim: removed the inline(never) boundary on the action wrapper. Focused gates passed (17 settings/server tests, 5 shell startup tests, clippy clean). The stripped static binary is 22,292,528 B, +16,640 B against merge base and still 256 B above cap; this saves 192 B versus R34. Build and exact size receipt: https://git.kayg.org/attachments/26c92d49-d680-42d7-a66e-e9af410cba02

R35 measured codegen trim: removed the `inline(never)` boundary on the action wrapper. Focused gates passed (17 settings/server tests, 5 shell startup tests, clippy clean). The stripped static binary is 22,292,528 B, +16,640 B against merge base and still 256 B above cap; this saves 192 B versus R34. Build and exact size receipt: https://git.kayg.org/attachments/26c92d49-d680-42d7-a66e-e9af410cba02
Author
Owner

R36 removed the run_action inline boundary after R35 had removed the wrapper boundary. The static binary measured 22,292,720 B (+16,832 B), 192 B larger than R35 and back at the R34 size; focused gates remained green. I am reverting this codegen variant and keeping R35, which is 256 B over the cap. Receipt: https://git.kayg.org/attachments/bf052a39-1eba-478f-a5d0-40ff02ef92b0

R36 removed the `run_action` inline boundary after R35 had removed the wrapper boundary. The static binary measured 22,292,720 B (+16,832 B), 192 B larger than R35 and back at the R34 size; focused gates remained green. I am reverting this codegen variant and keeping R35, which is 256 B over the cap. Receipt: https://git.kayg.org/attachments/bf052a39-1eba-478f-a5d0-40ff02ef92b0
Author
Owner

R37 added inline(never) to read_settings after the R35 wrapper result. Focused gates passed, but the stripped binary measured 22,292,592 B (+16,704 B), 64 B larger than R35. Reverting the outline hint. Receipt: https://git.kayg.org/attachments/13743a47-95f0-400b-ab23-532c357b14e0

R37 added `inline(never)` to `read_settings` after the R35 wrapper result. Focused gates passed, but the stripped binary measured 22,292,592 B (+16,704 B), 64 B larger than R35. Reverting the outline hint. Receipt: https://git.kayg.org/attachments/13743a47-95f0-400b-ab23-532c357b14e0
Author
Owner

R38 outlined prepare_settings; the stripped binary is 22,292,464 B, +16,576 B over merge base and 192 B above cap. This saves 64 B vs R35, with focused gates green. Receipt: https://git.kayg.org/attachments/0c8f4c90-bbc4-4658-add1-16be79356e15

R38 outlined `prepare_settings`; the stripped binary is 22,292,464 B, +16,576 B over merge base and 192 B above cap. This saves 64 B vs R35, with focused gates green. Receipt: https://git.kayg.org/attachments/0c8f4c90-bbc4-4658-add1-16be79356e15
Author
Owner

R39 outlined claim_notice; the stripped binary measured 22,292,592 B (+16,704 B), 128 B larger than R38 and 64 B larger than R35. The variant is being reverted. Focused tests remained green. Receipt: https://git.kayg.org/attachments/9f9face6-cf16-4249-97c2-9ed74d12b0ac

R39 outlined `claim_notice`; the stripped binary measured 22,292,592 B (+16,704 B), 128 B larger than R38 and 64 B larger than R35. The variant is being reverted. Focused tests remained green. Receipt: https://git.kayg.org/attachments/9f9face6-cf16-4249-97c2-9ed74d12b0ac
Author
Owner

R40 outlined save_setting; focused gates passed, but the stripped static binary is 22,292,528 B (+16,640 B), 64 B larger than R38. Reverting this hint. Receipt: https://git.kayg.org/attachments/6f51c6ed-3375-4d7a-9c16-d7703f23dcc7

R40 outlined `save_setting`; focused gates passed, but the stripped static binary is 22,292,528 B (+16,640 B), 64 B larger than R38. Reverting this hint. Receipt: https://git.kayg.org/attachments/6f51c6ed-3375-4d7a-9c16-d7703f23dcc7
Author
Owner

R41 Bash startup update: remove the inherited guard from PROMPT_COMMAND before reading login files, then clear TMUX/ZELLIJ and run the user's replacement once. This survives .bashrc replacing the command as a string or array and leaves manual multiplexer launch available. Focused gates passed: clippy clean, 17 server tests, 5 shim startup tests. Receipts: https://git.kayg.org/attachments/119bc12b-aab8-4730-a444-c41a6f880f99 https://git.kayg.org/attachments/f1418089-625d-48b9-8274-6798c2ad37f2 https://git.kayg.org/attachments/023d4dbb-ec48-41fe-9f54-600e8e0e0fe2

R41 Bash startup update: remove the inherited guard from PROMPT_COMMAND before reading login files, then clear TMUX/ZELLIJ and run the user's replacement once. This survives `.bashrc` replacing the command as a string or array and leaves manual multiplexer launch available. Focused gates passed: clippy clean, 17 server tests, 5 shim startup tests. Receipts: https://git.kayg.org/attachments/119bc12b-aab8-4730-a444-c41a6f880f99 https://git.kayg.org/attachments/f1418089-625d-48b9-8274-6798c2ad37f2 https://git.kayg.org/attachments/023d4dbb-ec48-41fe-9f54-600e8e0e0fe2
Author
Owner

The R41 stripped-size build is still queued in build-slot after 24 minutes; the wrapper has not started Cargo. Focused gates passed and their receipts are in the previous comment. I am waiting for an admitted slot. Queue snapshot: https://git.kayg.org/attachments/ca12248e-d688-4861-943c-b06928c78cb5

The R41 stripped-size build is still queued in build-slot after 24 minutes; the wrapper has not started Cargo. Focused gates passed and their receipts are in the previous comment. I am waiting for an admitted slot. Queue snapshot: https://git.kayg.org/attachments/ca12248e-d688-4861-943c-b06928c78cb5
Author
Owner

R41 stripped static size is 22,292,464 B, +16,576 B against merge base, still 192 B above the 16,384 B ceiling. It exactly matches R38 despite the Bash hook source shrinking by 1,293 B; I am checking the linked artifact/codegen before selecting the next trim. Focused gates remain green (clippy, 17 server tests, 5 shell tests). Size receipt: https://git.kayg.org/attachments/615750b2-dc41-43b1-8b7a-1620871c0af3

R41 stripped static size is 22,292,464 B, +16,576 B against merge base, still 192 B above the 16,384 B ceiling. It exactly matches R38 despite the Bash hook source shrinking by 1,293 B; I am checking the linked artifact/codegen before selecting the next trim. Focused gates remain green (clippy, 17 server tests, 5 shell tests). Size receipt: https://git.kayg.org/attachments/615750b2-dc41-43b1-8b7a-1620871c0af3
Author
Owner

R42 outlined action_response; focused gates passed, but the stripped static binary grew to 22,292,528 B (+16,640 B), 64 B larger than R41 and 256 B above the ceiling. Reverting the outline hint. Receipt: https://git.kayg.org/attachments/53a516fd-df38-444d-b090-8be2e928acef

R42 outlined `action_response`; focused gates passed, but the stripped static binary grew to 22,292,528 B (+16,640 B), 64 B larger than R41 and 256 B above the ceiling. Reverting the outline hint. Receipt: https://git.kayg.org/attachments/53a516fd-df38-444d-b090-8be2e928acef
Author
Owner

R43 contract note: use concise schema reference labels TerminalPrepare, TerminalSettings, TerminalSet, and TerminalSaved in the action catalog and settings contract. Action IDs, JSON fields, and wire behavior remain unchanged; the owner-facing API definitions remain explicit in contracts/terminal-multiplexer-settings.md. This keeps catalog strings small under D243 while preserving the settings contract.

R43 contract note: use concise schema reference labels `TerminalPrepare`, `TerminalSettings`, `TerminalSet`, and `TerminalSaved` in the action catalog and settings contract. Action IDs, JSON fields, and wire behavior remain unchanged; the owner-facing API definitions remain explicit in `contracts/terminal-multiplexer-settings.md`. This keeps catalog strings small under D243 while preserving the settings contract.
Author
Owner

R43 focused gate remains queued in build-slot (PID 810948, about 24 minutes elapsed); no gate logs exist yet. All four ordinary slots are still occupied: slot 1 fuzz PID 687004, slots 2–3 verify fast PIDs 762211 and 645511, slot 4 addhost gate PID 789580. The R43 source is unchanged while waiting.

R43 focused gate remains queued in build-slot (PID 810948, about 24 minutes elapsed); no gate logs exist yet. All four ordinary slots are still occupied: slot 1 fuzz PID 687004, slots 2–3 verify fast PIDs 762211 and 645511, slot 4 addhost gate PID 789580. The R43 source is unchanged while waiting.
Author
Owner

R43 focused gate has now waited about 43 minutes in build-slot and still has no gate output. Three slots are held by full verification jobs (PIDs 587080, 645511, 762211), one by a transport-profile check (PID 857573), and the reserved slot by a fuzz campaign (PID 687004). The queued R43 command remains unchanged.

R43 focused gate has now waited about 43 minutes in build-slot and still has no gate output. Three slots are held by full verification jobs (PIDs 587080, 645511, 762211), one by a transport-profile check (PID 857573), and the reserved slot by a fuzz campaign (PID 687004). The queued R43 command remains unchanged.
Author
Owner

R43 has remained queued since 18:56. At the 19:45 check all four ordinary build slots and the reserved slot were occupied: three full verification jobs (PIDs 587080, 645511, 762211), transport-profile check 857573, and a newly admitted reserved verification job 1085437. No R43 logs exist yet.

R43 has remained queued since 18:56. At the 19:45 check all four ordinary build slots and the reserved slot were occupied: three full verification jobs (PIDs 587080, 645511, 762211), transport-profile check 857573, and a newly admitted reserved verification job 1085437. No R43 logs exist yet.
Author
Owner

R43 focused gate has been queued since 18:56 (+02:00), now about 59 minutes, with no output logs. Current slot owners are three full verify runs (PIDs 587080, 645511, 762211), a workspace cargo test (1107387), and the reserved verify run (1085437). The queue entry is still active.

R43 focused gate has been queued since 18:56 (+02:00), now about 59 minutes, with no output logs. Current slot owners are three full verify runs (PIDs 587080, 645511, 762211), a workspace cargo test (1107387), and the reserved verify run (1085437). The queue entry is still active.
Author
Owner

R43 has remained queued since 18:56 (+02:00), about 75 minutes, with no output logs. The four ordinary slots are still held by fuzz PID 687004, verify-fast PIDs 762211 and 645511, and SQLite prototype check PID 992648. The reserved slot is now held by verify-fast PID 1232051.

R43 has remained queued since 18:56 (+02:00), about 75 minutes, with no output logs. The four ordinary slots are still held by fuzz PID 687004, verify-fast PIDs 762211 and 645511, and SQLite prototype check PID 992648. The reserved slot is now held by verify-fast PID 1232051.
Author
Owner

R43 focused gate is still queued about 89 minutes after submission, with no output logs. The four ordinary slots remain held by fuzz PID 687004, verify-fast PIDs 762211 and 645511, and SQLite prototype check PID 992648; reserved slot remains verify-fast PID 1232051.

R43 focused gate is still queued about 89 minutes after submission, with no output logs. The four ordinary slots remain held by fuzz PID 687004, verify-fast PIDs 762211 and 645511, and SQLite prototype check PID 992648; reserved slot remains verify-fast PID 1232051.
Author
Owner

R43 focused gate has been queued about 110 minutes since 18:56 (+02:00), still with no output. Two ordinary slots have turned over to the designer version-pill serve loop (PID 977739) and transport dependency gate (PID 1359013); the other ordinary slots remain fuzz PID 687004 and verify-fast PID 762211. Reserved slot remains verify-fast PID 1364389.

R43 focused gate has been queued about 110 minutes since 18:56 (+02:00), still with no output. Two ordinary slots have turned over to the designer version-pill serve loop (PID 977739) and transport dependency gate (PID 1359013); the other ordinary slots remain fuzz PID 687004 and verify-fast PID 762211. Reserved slot remains verify-fast PID 1364389.
Author
Owner

R43 focused gate has been queued since 18:56 (+02:00), now 2 hours, with no output logs. The four ordinary slots remain held by fuzz PID 687004, verify-fast PID 762211, designer serve loop PID 977739, and transport dependency gate PID 1359013; reserved slot remains verify-fast PID 1364389.

R43 focused gate has been queued since 18:56 (+02:00), now 2 hours, with no output logs. The four ordinary slots remain held by fuzz PID 687004, verify-fast PID 762211, designer serve loop PID 977739, and transport dependency gate PID 1359013; reserved slot remains verify-fast PID 1364389.
Author
Owner

R43 focused gate remains queued 2 hours 15 minutes after submission, with no output logs. All ordinary slots and the reserved slot are still occupied: fuzz PID 687004, add-host browser resume PID 1163947, designer serve loop PID 977739, release test compilation PID 1550349, and verify-fast PID 1364389.

R43 focused gate remains queued 2 hours 15 minutes after submission, with no output logs. All ordinary slots and the reserved slot are still occupied: fuzz PID 687004, add-host browser resume PID 1163947, designer serve loop PID 977739, release test compilation PID 1550349, and verify-fast PID 1364389.
Author
Owner

R43 focused gate remains queued 2 hours 41 minutes after submission, with no output logs. Ordinary slots are held by remote plugin release test PIDs 1768840, app-windows build 1209834, add-host resume 1699027, and binary size build 1708114. Reserved slot remains an agent-reconnect baseline build (PID 1773410).

R43 focused gate remains queued 2 hours 41 minutes after submission, with no output logs. Ordinary slots are held by remote plugin release test PIDs 1768840, app-windows build 1209834, add-host resume 1699027, and binary size build 1708114. Reserved slot remains an agent-reconnect baseline build (PID 1773410).
Author
Owner

R43 focused gates passed. cargo clippy --locked -p infraternal-server -p infraternal-shim -p infraternal-agent --lib -- -D warnings completed (3.30s); 17 server terminal tests passed (6.19s); 5 shim shell-startup tests passed (0.07s), including Bash scalar/array PROMPT_COMMAND replacement and real Bash/Zsh manual-start cases. Outputs: clippy, server tests, shim tests.

R43 focused gates passed. `cargo clippy --locked -p infraternal-server -p infraternal-shim -p infraternal-agent --lib -- -D warnings` completed (3.30s); 17 server terminal tests passed (6.19s); 5 shim shell-startup tests passed (0.07s), including Bash scalar/array PROMPT_COMMAND replacement and real Bash/Zsh manual-start cases. Outputs: [clippy](https://git.kayg.org/attachments/bc96bfc2-9293-45af-8dbe-df5799727e06), [server tests](https://git.kayg.org/attachments/aedf8e13-3f18-4a8e-b04c-6c83081ce8a2), [shim tests](https://git.kayg.org/attachments/ecafa2a8-3023-4928-955b-4f87ff01a050).
Author
Owner

R43 focused clippy/tests passed and their logs are attached. The follow-up static x86_64 size build has waited 11 minutes in build-slot with no output/log file yet. Four ordinary slots remain occupied by designer preview, add-host resume, app-windows gate, and size-ratchet build; the reserved slot is running an agent test.

R43 focused clippy/tests passed and their logs are attached. The follow-up static x86_64 size build has waited 11 minutes in build-slot with no output/log file yet. Four ordinary slots remain occupied by designer preview, add-host resume, app-windows gate, and size-ratchet build; the reserved slot is running an agent test.
Author
Owner

The R43 static x86_64 size build has now waited about 22 minutes in build-slot, with no output file. The four ordinary slots are still held by the designer preview, add-host resume, app-windows gate, and another size-ratchet build. Focused clippy and tests passed earlier; no size claim is made yet.

The R43 static x86_64 size build has now waited about 22 minutes in build-slot, with no output file. The four ordinary slots are still held by the designer preview, add-host resume, app-windows gate, and another size-ratchet build. Focused clippy and tests passed earlier; no size claim is made yet.
Author
Owner

R43 static x86_64 size build has waited about 33 minutes in build-slot, with no log file. Four ordinary slots remain occupied by the designer preview loop, another size-ratchet branch build, app-windows gate, and VNC design baseline. The build has not started.

R43 static x86_64 size build has waited about 33 minutes in build-slot, with no log file. Four ordinary slots remain occupied by the designer preview loop, another size-ratchet branch build, app-windows gate, and VNC design baseline. The build has not started.
Author
Owner

The R43 static size build has waited about 40 minutes in build-slot without producing a log. All four ordinary slots remain occupied by designer preview, size-ratchet branch build, app-windows gate, and VNC baseline; the reserved slot is running a mesh order test.

The R43 static size build has waited about 40 minutes in build-slot without producing a log. All four ordinary slots remain occupied by designer preview, size-ratchet branch build, app-windows gate, and VNC baseline; the reserved slot is running a mesh order test.
Author
Owner

R43 static x86_64 size build has waited about 50 minutes in build-slot without output. Ordinary slots remain held by verify-fast, size-ratchet, app-windows, and VNC baseline jobs; the reserved slot has rotated to a core test/clippy job. Focused server/shim gates passed earlier, but the required binary size check remains pending.

R43 static x86_64 size build has waited about 50 minutes in build-slot without output. Ordinary slots remain held by verify-fast, size-ratchet, app-windows, and VNC baseline jobs; the reserved slot has rotated to a core test/clippy job. Focused server/shim gates passed earlier, but the required binary size check remains pending.
Author
Owner

R43 static x86_64 size build has waited 1 hour in build-slot, with no output or log file. All four ordinary slots remain occupied by verify-fast, size-ratchet, app-windows, and VNC design jobs; the reserved slot is running an agent-reconnect static build. The size comparison remains pending.

R43 static x86_64 size build has waited 1 hour in build-slot, with no output or log file. All four ordinary slots remain occupied by verify-fast, size-ratchet, app-windows, and VNC design jobs; the reserved slot is running an agent-reconnect static build. The size comparison remains pending.
Author
Owner

The R43 static x86_64 size build has waited about 70 minutes in build-slot, with no output log. The same four ordinary slots remain held by verify-fast, size-ratchet, app-windows, and VNC baseline jobs; the reserved slot remains on agent-reconnect static build. The size limit is still unverified.

The R43 static x86_64 size build has waited about 70 minutes in build-slot, with no output log. The same four ordinary slots remain held by verify-fast, size-ratchet, app-windows, and VNC baseline jobs; the reserved slot remains on agent-reconnect static build. The size limit is still unverified.
Author
Owner

R43 static x86_64 size build has waited about 80 minutes in build-slot without output. Ordinary slots remain occupied by verify-fast, size-ratchet branch size, app-windows gate, and add-host fix; reserved slot is running agent-reconnect baseline. The required size comparison remains pending.

R43 static x86_64 size build has waited about 80 minutes in build-slot without output. Ordinary slots remain occupied by verify-fast, size-ratchet branch size, app-windows gate, and add-host fix; reserved slot is running agent-reconnect baseline. The required size comparison remains pending.
Author
Owner

R43 static x86_64 musl build completed in 4m52s. Stripped PIE size: 22,292,432 B; merge-base b0a3799cf4: 22,275,888 B; delta +16,544 B. This is 160 B above the 16,384 B cap. The build is static PIE and stripped. Receipt: R43 size log. I am continuing to trim compiled code/data before the next measurement.

R43 static x86_64 musl build completed in 4m52s. Stripped PIE size: 22,292,432 B; merge-base b0a3799cf459425c3402e745f329f4ebc441c144: 22,275,888 B; delta +16,544 B. This is 160 B above the 16,384 B cap. The build is static PIE and stripped. Receipt: [R43 size log](https://git.kayg.org/attachments/b7e980ba-0a6f-4f8e-84d2-e7b922ebadfd). I am continuing to trim compiled code/data before the next measurement.
Author
Owner

The R45 combined clippy/test/static-size gate has waited about 30 minutes in build-slot with no output. All four ordinary slots are occupied by two verify-iterate runs, an app-windows final check, and an add-host fix run. The reserved slot is free but reserved for agent-reconnect jobs, so R45 is not eligible.

The R45 combined clippy/test/static-size gate has waited about 30 minutes in build-slot with no output. All four ordinary slots are occupied by two verify-iterate runs, an app-windows final check, and an add-host fix run. The reserved slot is free but reserved for agent-reconnect jobs, so R45 is not eligible.
Author
Owner

R45 combined validation has waited about 40 minutes in build-slot without output. All four ordinary slots are occupied by size-ratchet verify-iterate, edge-autoupdate resume, app-windows final check, and add-host fix work; the reserved slot runs agent-reconnect final runtime. No R45 tests or static size build have started.

R45 combined validation has waited about 40 minutes in build-slot without output. All four ordinary slots are occupied by size-ratchet verify-iterate, edge-autoupdate resume, app-windows final check, and add-host fix work; the reserved slot runs agent-reconnect final runtime. No R45 tests or static size build have started.
Author
Owner

R45 combined clippy/test/static-size gate has waited about 50 minutes in build-slot with no output. The four ordinary slots are occupied by size-ratchet verify-iterate, mesh scoped gates, app-windows final check, and add-host fix work. The reserved slot is free but unavailable to this non-agent-reconnect job.

R45 combined clippy/test/static-size gate has waited about 50 minutes in build-slot with no output. The four ordinary slots are occupied by size-ratchet verify-iterate, mesh scoped gates, app-windows final check, and add-host fix work. The reserved slot is free but unavailable to this non-agent-reconnect job.
Author
Owner

R45 focused gates passed: clippy for server/shim/agent; 17 server tests (6.31s); 5 shim startup tests (0.08s). Static x86_64 musl binary is 22,292,304 B, +16,416 B versus merge base b0a3799cf4 (22,275,888 B), 32 B above the 16,384 B cap. Logs: clippy, server tests, shim tests, size. I am reducing compiled metadata by another small amount and will remeasure.

R45 focused gates passed: clippy for server/shim/agent; 17 server tests (6.31s); 5 shim startup tests (0.08s). Static x86_64 musl binary is 22,292,304 B, +16,416 B versus merge base b0a3799cf459425c3402e745f329f4ebc441c144 (22,275,888 B), 32 B above the 16,384 B cap. Logs: [clippy](https://git.kayg.org/attachments/8dafc32e-2a06-4185-82e4-3431dd624bdf), [server tests](https://git.kayg.org/attachments/e0435bfd-f7e9-43c0-a10d-af23d65bda87), [shim tests](https://git.kayg.org/attachments/c0e88261-4575-4663-b63e-fea0facfc4e3), [size](https://git.kayg.org/attachments/649707f0-ec65-41a6-947e-671dd6dc9c45). I am reducing compiled metadata by another small amount and will remeasure.
Author
Owner

R46 combined clippy/test/static-size gate has waited about 30 minutes in build-slot with no output. Four ordinary slots are held by process-per-user verify, mesh integration gates, app-windows final check, and add-host fix work; the reserved slot is on agent-reconnect delta review. The candidate has not changed since submission.

R46 combined clippy/test/static-size gate has waited about 30 minutes in build-slot with no output. Four ordinary slots are held by process-per-user verify, mesh integration gates, app-windows final check, and add-host fix work; the reserved slot is on agent-reconnect delta review. The candidate has not changed since submission.
Author
Owner

Starting continuation r2 on multiplexer-skip, worktree .worktrees/multiplexer-skip, at e315ab021553f4b8553789f74b7a455838c1c083; merge base b0a3799cf459425c3402e745f329f4ebc441c144. Scope: reduce stripped static x86_64 binary growth to at most 16,384 bytes and preserve the Bash prompt-hook cleanup with real-shell coverage.

Starting continuation r2 on `multiplexer-skip`, worktree `.worktrees/multiplexer-skip`, at `e315ab021553f4b8553789f74b7a455838c1c083`; merge base `b0a3799cf459425c3402e745f329f4ebc441c144`. Scope: reduce stripped static x86_64 binary growth to at most 16,384 bytes and preserve the Bash prompt-hook cleanup with real-shell coverage.
Author
Owner

R46 candidate based on e315ab021553f4b8553789f74b7a455838c1c083: clippy passed for infraternal-server, infraternal-shim, and infraternal-agent (cargo clippy --locked ... -- -D warnings, exit 0). Focused server and shell-startup tests are compiling; static size remains pending. clippy log

R46 candidate based on `e315ab021553f4b8553789f74b7a455838c1c083`: clippy passed for `infraternal-server`, `infraternal-shim`, and `infraternal-agent` (`cargo clippy --locked ... -- -D warnings`, exit 0). Focused server and shell-startup tests are compiling; static size remains pending. [clippy log](https://git.kayg.org/attachments/63afa37b-513f-45fa-9765-cb0b0e5c92c6)
Author
Owner

R46 candidate based on e315ab021553f4b8553789f74b7a455838c1c083: 17 server tests passed in 8.26 s and 5 shell-startup tests passed in 0.06 s. Coverage includes persisted settings, remote-host ownership, one-time per-host notice claims, authenticated socket actions, and Bash PROMPT_COMMAND scalar/array replacement. Clippy passed; static size is compiling.
server test log
shell test log

R46 candidate based on `e315ab021553f4b8553789f74b7a455838c1c083`: 17 server tests passed in 8.26 s and 5 shell-startup tests passed in 0.06 s. Coverage includes persisted settings, remote-host ownership, one-time per-host notice claims, authenticated socket actions, and Bash PROMPT_COMMAND scalar/array replacement. Clippy passed; static size is compiling. [server test log](https://git.kayg.org/attachments/b14641cb-e30b-4d18-bf13-2f9468388edf) [shell test log](https://git.kayg.org/attachments/7d615d32-5334-4462-bfec-a08ee5d2df46)
Author
Owner

R46 focused gates passed (clippy; 17 server tests; 5 shell-startup tests). Static stripped x86_64 musl binary is 22,292,304 B versus merge-base 22,275,888 B: +16,416 B, still 32 B above the 16,384 B cap. The R46 source-label reductions did not change the measured binary size; I’m attributing the growth before another code trim. size log

R46 focused gates passed (clippy; 17 server tests; 5 shell-startup tests). Static stripped x86_64 musl binary is 22,292,304 B versus merge-base 22,275,888 B: +16,416 B, still 32 B above the 16,384 B cap. The R46 source-label reductions did not change the measured binary size; I’m attributing the growth before another code trim. [size log](https://git.kayg.org/attachments/420a5df6-3d9a-422d-8fd8-362bd2b42efa)
Author
Owner

R46 size attribution check: cargo tree --locked -e features -p infraternal --target x86_64-unknown-linux-musl is 2,793 lines at both merge base and candidate. After normalizing worktree paths, the only difference is the pre-existing lockfile update rustls 0.23.45 → 0.23.46 from commit e2ac27dfc; no dependency or production feature was added by this lane. The parser-fuzzing feature is not in the production tree. normalized feature diff

R46 size attribution check: `cargo tree --locked -e features -p infraternal --target x86_64-unknown-linux-musl` is 2,793 lines at both merge base and candidate. After normalizing worktree paths, the only difference is the pre-existing lockfile update `rustls` 0.23.45 → 0.23.46 from commit `e2ac27dfc`; no dependency or production feature was added by this lane. The `parser-fuzzing` feature is not in the production tree. [normalized feature diff](https://git.kayg.org/attachments/99c7375e-afa3-43e4-a819-e2d4663fcb04)
Author
Owner

The first merge-base cargo-bloat build stopped in openssl-sys: its new comparison target had no auth-tools/zig/zig at the path selected by .cargo/musl-cc.sh (status 127). I initialized the comparison target with the repository’s checksum-pinned scripts/auth-toolchain (exit 0, 4.59 s); the analysis is being retried through build-slot. failed attempt log

The first merge-base `cargo-bloat` build stopped in `openssl-sys`: its new comparison target had no `auth-tools/zig/zig` at the path selected by `.cargo/musl-cc.sh` (status 127). I initialized the comparison target with the repository’s checksum-pinned `scripts/auth-toolchain` (exit 0, 4.59 s); the analysis is being retried through build-slot. [failed attempt log](https://git.kayg.org/attachments/b18fa55e-cb28-4785-9717-d159fb5dabc6)
Author
Owner

Correction: my first cargo-bloat retry used the candidate worktree with the comparison target. I stopped only that wrapper’s process group after catching the workdir error; no code changed and no baseline result was taken from it. The corrected run is submitted from the detached merge-base worktree b0a3799.

Correction: my first cargo-bloat retry used the candidate worktree with the comparison target. I stopped only that wrapper’s process group after catching the workdir error; no code changed and no baseline result was taken from it. The corrected run is submitted from the detached merge-base worktree `b0a3799`.
Author
Owner

Current candidate cargo-bloat --crates completed: .text totals 16.4 MiB; the largest named product crates are infraternal-server 2.8 MiB, infraternal-agent 457.9 KiB and infraternal-shim 154.8 KiB. The tool attributes another 3.3 MiB to “Unknown” (mostly LTO monomorphizations). This establishes contributors but is not yet a base delta; the merge-base report is pending. current bloat log

Current candidate `cargo-bloat --crates` completed: `.text` totals 16.4 MiB; the largest named product crates are `infraternal-server` 2.8 MiB, `infraternal-agent` 457.9 KiB and `infraternal-shim` 154.8 KiB. The tool attributes another 3.3 MiB to “Unknown” (mostly LTO monomorphizations). This establishes contributors but is not yet a base delta; the merge-base report is pending. [current bloat log](https://git.kayg.org/attachments/02e07ddd-c305-40f7-8b13-9efce3ce6a5f)
Author
Owner

R46 attribution against b0a3799 is complete. Stripped static size remains 22,292,304 B vs 22,275,888 B (+16,416 B, 32 B over cap). cargo-bloat rounds total .text to 16.4 MiB for both; the server crate rounds to 2.8 MiB in both. Agent is +0.6 KiB, shim +4.5 KiB, rustls +1.4 KiB (the pre-existing 0.23.45→0.23.46 lock update); serde is unchanged, serde_json +0.8 KiB, and no regex feature or new dependency was introduced.

nm reports +6,347 B net named text symbols. The largest new groups are the reused plugin action path (ControlActionHandler::call +13,106 B, compiled_with_hosts +7,821 B, terminal_preferences::execute_action +6,898 B) and shell wrapper (login_shell_command +5,737 B), offset by previous socket-control and router paths shrinking/removing. size -A shows .text +6,172 B, .rodata +8,192 B, .gcc_except_table +804 B, .eh_frame +456 B, plus smaller relocation/data deltas. The .rodata increase is anonymous static data in these comparison artifacts; cargo-bloat/nm do not map all of it to named source symbols. No new format or regex machinery or dependency accounts for it.

candidate bloat
merge-base bloat
nm symbol delta
candidate sections
base sections

R46 attribution against `b0a3799` is complete. Stripped static size remains 22,292,304 B vs 22,275,888 B (+16,416 B, 32 B over cap). `cargo-bloat` rounds total `.text` to 16.4 MiB for both; the server crate rounds to 2.8 MiB in both. Agent is +0.6 KiB, shim +4.5 KiB, rustls +1.4 KiB (the pre-existing 0.23.45→0.23.46 lock update); serde is unchanged, serde_json +0.8 KiB, and no regex feature or new dependency was introduced. `nm` reports +6,347 B net named text symbols. The largest new groups are the reused plugin action path (`ControlActionHandler::call` +13,106 B, `compiled_with_hosts` +7,821 B, `terminal_preferences::execute_action` +6,898 B) and shell wrapper (`login_shell_command` +5,737 B), offset by previous socket-control and router paths shrinking/removing. `size -A` shows `.text` +6,172 B, `.rodata` +8,192 B, `.gcc_except_table` +804 B, `.eh_frame` +456 B, plus smaller relocation/data deltas. The `.rodata` increase is anonymous static data in these comparison artifacts; `cargo-bloat`/`nm` do not map all of it to named source symbols. No new format or regex machinery or dependency accounts for it. [candidate bloat](https://git.kayg.org/attachments/02e07ddd-c305-40f7-8b13-9efce3ce6a5f) [merge-base bloat](https://git.kayg.org/attachments/beaccc87-da1f-4320-86b6-e3ed2b0b582f) [nm symbol delta](https://git.kayg.org/attachments/07425d8b-eed0-4896-a9ba-ebcc6062d57e) [candidate sections](https://git.kayg.org/attachments/d137a96a-572d-423c-b8b4-09cc5f1f6d52) [base sections](https://git.kayg.org/attachments/b6d10bdb-336c-473f-b1a3-4ffbbab4b8b5)
Author
Owner

Finding: terminal.multiplexer declares no topics (topics: &[]) and is excluded from subscription providers at crates/infraternal-server/src/plugins.rs:823-825; the fallback event payload is used only by subscription dispatch. Its descriptor still embeds a 37-byte unavailable-event JSON string. Replacing that unused payload with &[] follows the existing action-only remote descriptor precedent and should save the remaining 32 bytes without changing the action API. I’ll verify with the static size recipe and focused gates.

Finding: `terminal.multiplexer` declares no topics (`topics: &[]`) and is excluded from subscription providers at `crates/infraternal-server/src/plugins.rs:823-825`; the fallback event payload is used only by subscription dispatch. Its descriptor still embeds a 37-byte unavailable-event JSON string. Replacing that unused payload with `&[]` follows the existing action-only remote descriptor precedent and should save the remaining 32 bytes without changing the action API. I’ll verify with the static size recipe and focused gates.
Author
Owner

D241 exact UI copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. The button turns the skip off for that host. After that, nothing. A global switch exists as well.

D241 exact UI copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. The button turns the skip off for that host. After that, nothing. A global switch exists as well.
Author
Owner

Finding: the committed x86_64 size ceiling is 22,204,304 bytes, but the recorded same-recipe merge-base artifact is 22,275,888 bytes (+71,584 over the ceiling). R46 was 22,292,304 bytes (+16,416 versus base, 32 bytes over the requested relative limit). I’m checking whether the R47 unused-event removal brings the relative delta under 16,384 bytes; the final fast gate will also show whether the inherited absolute ceiling fails independently. Evidence

Finding: the committed x86_64 size ceiling is 22,204,304 bytes, but the recorded same-recipe merge-base artifact is 22,275,888 bytes (+71,584 over the ceiling). R46 was 22,292,304 bytes (+16,416 versus base, 32 bytes over the requested relative limit). I’m checking whether the R47 unused-event removal brings the relative delta under 16,384 bytes; the final fast gate will also show whether the inherited absolute ceiling fails independently. [Evidence](https://git.kayg.org/attachments/fd0f8735-b2ee-4592-acba-bb61a57ce8c8)
Author
Owner

verify iterate reached the full workspace tests with fmt, VT fmt, CLI plugin compile-out, clippy, and cargo-deny passing. One unrelated server test failed: plugin_switches_survive_database_reopen at crates/infraternal-server/tests/plugin_settings_review.rs:99 read Bool(true) after restart where it expected false (disabled plugin reverted to default). The multiplexer persistence and authenticated-socket tests passed. This is not one of the listed host-load exceptions; I’m isolating it before proceeding. Full gate log

`verify iterate` reached the full workspace tests with fmt, VT fmt, CLI plugin compile-out, clippy, and cargo-deny passing. One unrelated server test failed: `plugin_switches_survive_database_reopen` at `crates/infraternal-server/tests/plugin_settings_review.rs:99` read `Bool(true)` after restart where it expected `false` (disabled plugin reverted to default). The multiplexer persistence and authenticated-socket tests passed. This is not one of the listed host-load exceptions; I’m isolating it before proceeding. [Full gate log](https://git.kayg.org/attachments/43b8e52f-0afd-4c08-9ddd-eb794f188362)
Author
Owner

Finding: the full gate failure is caused by plugin catalog order, not a lost SQLite switch. compiled_with_hosts prepended terminal.multiplexer, while plugin_switches_survive_database_reopen intentionally reads plugins[0] for the existing mesh plugin; it therefore observed the new plugin's default true. The old plugin/action order is externally visible in the shared catalog, so I’ll append the new plugin after existing entries and rerun the failure before continuing.

Finding: the full gate failure is caused by plugin catalog order, not a lost SQLite switch. `compiled_with_hosts` prepended `terminal.multiplexer`, while `plugin_switches_survive_database_reopen` intentionally reads `plugins[0]` for the existing mesh plugin; it therefore observed the new plugin's default `true`. The old plugin/action order is externally visible in the shared catalog, so I’ll append the new plugin after existing entries and rerun the failure before continuing.
Author
Owner

Queue wait: the corrected plugin-order test and full verify iterate are submitted through the required build-slot wrapper but have not started because all regular build slots and the reserved slot are occupied. Needed: a shared build slot to be released. I have not run builds outside the wrapper.

Queue wait: the corrected plugin-order test and full `verify iterate` are submitted through the required build-slot wrapper but have not started because all regular build slots and the reserved slot are occupied. Needed: a shared build slot to be released. I have not run builds outside the wrapper.
Author
Owner

Full verify iterate after catalog-order fix: 434 infraternal-server library tests passed, 46 ignored, and auth::tests::socket_tests::review_input_credit::review_full_input_writer_preserves_browser_control_progress timed out at crates/infraternal-server/src/auth/socket_tests/review_input_credit.rs:191 (Elapsed(())). All other completed Rust gates passed; cargo-deny passed. I’m rerunning this test on a detached origin/dev baseline in the same build/load window per the host-load gate rule.

Full verify iterate after catalog-order fix: 434 infraternal-server library tests passed, 46 ignored, and `auth::tests::socket_tests::review_input_credit::review_full_input_writer_preserves_browser_control_progress` timed out at `crates/infraternal-server/src/auth/socket_tests/review_input_credit.rs:191` (`Elapsed(())`). All other completed Rust gates passed; cargo-deny passed. I’m rerunning this test on a detached `origin/dev` baseline in the same build/load window per the host-load gate rule.
Author
Owner

Catalog order fix gate: the order-specific plugin_switches_survive_database_reopen regression now passes (4/4 plugin_settings_review). Full scripts/verify iterate: artifact, deployment fixtures, fmt, VT fmt, CLI compile-out, Clippy and cargo-deny pass; server library tests were 434 passed, 1 timeout, 46 ignored. The timed out case is review_full_input_writer_preserves_browser_control_progress at line 191 (Elapsed(())); the new authenticated settings route test passed. I’m comparing the isolated failure with detached base b0a3799 in the same shared-load window. Receipts: full iterator log, focused order-fix gate.

Catalog order fix gate: the order-specific `plugin_switches_survive_database_reopen` regression now passes (4/4 `plugin_settings_review`). Full `scripts/verify iterate`: artifact, deployment fixtures, fmt, VT fmt, CLI compile-out, Clippy and cargo-deny pass; server library tests were 434 passed, 1 timeout, 46 ignored. The timed out case is `review_full_input_writer_preserves_browser_control_progress` at line 191 (`Elapsed(())`); the new authenticated settings route test passed. I’m comparing the isolated failure with detached base b0a3799 in the same shared-load window. Receipts: [full iterator log](https://git.kayg.org/attachments/3df28279-4fdc-4b55-92d0-2f76fc880280), [focused order-fix gate](https://git.kayg.org/attachments/791eab8b-50a9-49a7-bff2-1c91178f103c).
Author
Owner

Baseline comparison (detached merge base b0a3799cf4): the isolated exact test passed, 1 passed; 0 failed; 0 ignored; 0 measured; 263 filtered out; finished in 1.05s. The branch full server suite had 434 passed; 1 failed; 46 ignored after 320.68s, with only review_full_input_writer_preserves_browser_control_progress timing out at line 191. Since the isolated baseline passed, this does not qualify for the documented host-load exception; I’m investigating branch isolation and suite-concurrency behavior before proceeding. Baseline test receipt; branch iterator receipt.

Baseline comparison (detached merge base b0a3799cf459425c3402e745f329f4ebc441c144): the isolated exact test passed, `1 passed; 0 failed; 0 ignored; 0 measured; 263 filtered out; finished in 1.05s`. The branch full server suite had `434 passed; 1 failed; 46 ignored` after 320.68s, with only `review_full_input_writer_preserves_browser_control_progress` timing out at line 191. Since the isolated baseline passed, this does not qualify for the documented host-load exception; I’m investigating branch isolation and suite-concurrency behavior before proceeding. [Baseline test receipt](https://git.kayg.org/attachments/22aa9e9b-911d-499c-a27e-42158a4dadd8); [branch iterator receipt](https://git.kayg.org/attachments/3df28279-4fdc-4b55-92d0-2f76fc880280).
Author
Owner

Isolated timeout comparison: the exact socket test passes on both detached base b0a3799 and the feature branch (baseline 1.05s; branch 0.79s). The full workspace run failed it only while 435 server tests were active; the full branch server library suite had 434 passes and one timeout. I’m running the baseline server library suite under the same host window to check whether suite concurrency reproduces it. Baseline receipt; branch isolated receipt.

Isolated timeout comparison: the exact socket test passes on both detached base b0a3799 and the feature branch (baseline 1.05s; branch 0.79s). The full workspace run failed it only while 435 server tests were active; the full branch server library suite had 434 passes and one timeout. I’m running the baseline server library suite under the same host window to check whether suite concurrency reproduces it. [Baseline receipt](https://git.kayg.org/attachments/22aa9e9b-911d-499c-a27e-42158a4dadd8); [branch isolated receipt](https://git.kayg.org/attachments/797bebd6-8173-4ca9-b636-c6a878c5b016).
Author
Owner

Break-it finding: the size-cut Bash wrapper dropped an exported parent PROMPT_COMMAND when the login files did not replace it. Added real-shell red case failed at shell_startup.rs:385 because $HOME/prompt-hooks was never created (0 passed; 1 failed). I’m restoring the inherited hook fallback while keeping a profile-defined scalar or array authoritative, and will remeasure binary size. Red receipt.

Break-it finding: the size-cut Bash wrapper dropped an exported parent `PROMPT_COMMAND` when the login files did not replace it. Added real-shell red case failed at `shell_startup.rs:385` because `$HOME/prompt-hooks` was never created (`0 passed; 1 failed`). I’m restoring the inherited hook fallback while keeping a profile-defined scalar or array authoritative, and will remeasure binary size. [Red receipt](https://git.kayg.org/attachments/83b6dd90-e4e5-4465-94ae-cc7759d7a8f9).
Author
Owner

Feature-matched baseline result (detached b0a3799, remote enabled; the baseline predates the fuzz-only feature): test result: ok. 423 passed; 0 failed; 46 ignored; 0 measured; 0 filtered out; finished in 251.19s. The full baseline runner passed review_full_input_writer_preserves_browser_control_progress. Current branch workspace run had 434 passed, that one timeout, 46 ignored in the server library suite. The isolated branch test also passes (0.79s), so this remains a full-suite-only branch failure and is not waived as a baseline host-load failure. I’m rerunning the branch server suite with remote,parser-fuzzing to see if it reproduces independently of the rest of the workspace. Baseline suite receipt; branch iterator receipt; branch isolated test.

Feature-matched baseline result (detached b0a3799, `remote` enabled; the baseline predates the fuzz-only feature): `test result: ok. 423 passed; 0 failed; 46 ignored; 0 measured; 0 filtered out; finished in 251.19s`. The full baseline runner passed `review_full_input_writer_preserves_browser_control_progress`. Current branch workspace run had 434 passed, that one timeout, 46 ignored in the server library suite. The isolated branch test also passes (0.79s), so this remains a full-suite-only branch failure and is not waived as a baseline host-load failure. I’m rerunning the branch server suite with `remote,parser-fuzzing` to see if it reproduces independently of the rest of the workspace. [Baseline suite receipt](https://git.kayg.org/attachments/4f68c4da-ba64-483c-8004-c30015bd74dd); [branch iterator receipt](https://git.kayg.org/attachments/3df28279-4fdc-4b55-92d0-2f76fc880280); [branch isolated test](https://git.kayg.org/attachments/797bebd6-8173-4ca9-b636-c6a878c5b016).
Author
Owner

The new D202 metadata assertion initially failed to compile because its nested test module had not imported ACTIONS (E0425, terminal_preferences.rs:705/708). Added the import; no runtime code changed. Rerunning the feature-matched server suite. Compile receipt.

The new D202 metadata assertion initially failed to compile because its nested test module had not imported `ACTIONS` (`E0425`, terminal_preferences.rs:705/708). Added the import; no runtime code changed. Rerunning the feature-matched server suite. [Compile receipt](https://git.kayg.org/attachments/5b425db2-e51c-42e6-a0a6-a8407ab3b66a).
Author
Owner

Inherited Bash hook fix: the real-shell regression now passes (1 passed, 98 filtered, 0.02s). A startup-only __IR_PC value preserves an exported parent hook; a profile-defined scalar or array still wins, and __IR_PC is removed after the first prompt. Green receipt.

Inherited Bash hook fix: the real-shell regression now passes (1 passed, 98 filtered, 0.02s). A startup-only `__IR_PC` value preserves an exported parent hook; a profile-defined scalar or array still wins, and `__IR_PC` is removed after the first prompt. [Green receipt](https://git.kayg.org/attachments/79b9d9e4-a3bb-4246-bf1d-c89ab8380aae).
Author
Owner

Feature-matched server rerun: branch cargo test --locked -p infraternal-server --lib --features remote,parser-fuzzing passed 435 passed; 0 failed; 46 ignored; 0 measured; 0 filtered out; finished in 207.21s. It passed review_full_input_writer_preserves_browser_control_progress, the new terminal settings socket route, migration compatibility, settings action/schema assertions, and notice persistence. Detached baseline with remote passed 423 passed; 0 failed; 46 ignored in 251.19s, including the same socket test. The earlier full workspace timeout is not reproducible in either matched server suite; I will rerun the complete iterator after finishing the shell/fuzz checks. Branch suite; baseline suite; initial branch iterator.

Feature-matched server rerun: branch `cargo test --locked -p infraternal-server --lib --features remote,parser-fuzzing` passed `435 passed; 0 failed; 46 ignored; 0 measured; 0 filtered out; finished in 207.21s`. It passed `review_full_input_writer_preserves_browser_control_progress`, the new terminal settings socket route, migration compatibility, settings action/schema assertions, and notice persistence. Detached baseline with `remote` passed `423 passed; 0 failed; 46 ignored` in 251.19s, including the same socket test. The earlier full workspace timeout is not reproducible in either matched server suite; I will rerun the complete iterator after finishing the shell/fuzz checks. [Branch suite](https://git.kayg.org/attachments/ea7114a8-c89e-479d-a5d8-95b474c55169); [baseline suite](https://git.kayg.org/attachments/4f68c4da-ba64-483c-8004-c30015bd74dd); [initial branch iterator](https://git.kayg.org/attachments/3df28279-4fdc-4b55-92d0-2f76fc880280).
Author
Owner

The focused shell startup suite is queued through build-slot since 03:55 local time; all four normal slots remain occupied by other jobs. The test process has not acquired a slot or started compiling. I am waiting for the shared slot to free before continuing the remaining gates.

The focused shell startup suite is queued through build-slot since 03:55 local time; all four normal slots remain occupied by other jobs. The test process has not acquired a slot or started compiling. I am waiting for the shared slot to free before continuing the remaining gates.
Author
Owner

The focused shell suite remains queued through build-slot after more than 30 minutes; it still has not started compiling because all four normal slots are occupied. I also removed this job's idle 8.6 GB debug incremental cache after free disk space fell below 60 GB; free space is now 62 GB.

The focused shell suite remains queued through build-slot after more than 30 minutes; it still has not started compiling because all four normal slots are occupied. I also removed this job's idle 8.6 GB debug incremental cache after free disk space fell below 60 GB; free space is now 62 GB.
Author
Owner

Historical perf VM result: real-shell-perf-vm-r3.log recorded Bash guard overhead +0.892 ms p99 and Zsh +1.205 ms p99 (budget 1.000 ms), on 4 cores with CPUWeight=10000, load average 1.79/1.21/1.10. The current optimized startup code is queued for a fresh run; this result is the comparison target. Evidence: real-shell-perf-vm-r3.log

Historical perf VM result: `real-shell-perf-vm-r3.log` recorded Bash guard overhead +0.892 ms p99 and Zsh +1.205 ms p99 (budget 1.000 ms), on 4 cores with `CPUWeight=10000`, load average 1.79/1.21/1.10. The current optimized startup code is queued for a fresh run; this result is the comparison target. Evidence: [real-shell-perf-vm-r3.log](https://git.kayg.org/attachments/bb74947c-b2d1-490c-b1f1-322855e8b0f2)
Author
Owner

Focused Bash/Zsh startup tests passed on the branch, including the inherited hook and rc replacement cases:

running 6 tests
test shell_startup::tests::bash_guard_clears_before_prompt_and_manual_start_still_works ... ok
test shell_startup::tests::bash_guard_clears_when_rc_replaces_prompt_command ... ok
test shell_startup::tests::bash_guard_preserves_an_inherited_prompt_command ... ok
test shell_startup::tests::bash_guard_uses_a_one_shot_first_prompt_hook ... ok
test shell_startup::tests::session_marker_is_always_set_and_startup_guards_are_opt_in ... ok
test shell_startup::tests::zsh_guard_clears_before_prompt_and_manual_start_still_works ... ok

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

Evidence: shell-startup-focused-r47.log

Focused Bash/Zsh startup tests passed on the branch, including the inherited hook and rc replacement cases: ``` running 6 tests test shell_startup::tests::bash_guard_clears_before_prompt_and_manual_start_still_works ... ok test shell_startup::tests::bash_guard_clears_when_rc_replaces_prompt_command ... ok test shell_startup::tests::bash_guard_preserves_an_inherited_prompt_command ... ok test shell_startup::tests::bash_guard_uses_a_one_shot_first_prompt_hook ... ok test shell_startup::tests::session_marker_is_always_set_and_startup_guards_are_opt_in ... ok test shell_startup::tests::zsh_guard_clears_before_prompt_and_manual_start_still_works ... ok test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 93 filtered out; finished in 0.14s ``` Evidence: [shell-startup-focused-r47.log](https://git.kayg.org/attachments/3895c012-d1cc-4b68-bdff-444b0616f936)
Author
Owner

The production settings decoder fuzz target completed successfully with no crash or sanitizer finding across 5,824,311 inputs (coverage counters: 1,018; features: 2,527). Evidence: terminal-multiplexer-fuzz-r47.log

The production settings decoder fuzz target completed successfully with no crash or sanitizer finding across 5,824,311 inputs (coverage counters: 1,018; features: 2,527). Evidence: [terminal-multiplexer-fuzz-r47.log](https://git.kayg.org/attachments/ab7fd572-b240-4f8b-ab58-4a621ce05b5b)
Author
Owner

The first current perf VM attempt failed before timing: HOME=/home/bench/.cache/codex-scratch/multiplexer-skip/real-startup/home-r47 made the test's nested scratch path too long for tmux's socket filename. No timing samples were collected. I am rerunning with HOME=/home/bench and TMPDIR=/home/bench/.cache/codex-scratch/multiplexer-skip, matching the short bench scratch layout used by the prior real-engine runs. Evidence: real-shell-perf-vm-r47.log

The first current perf VM attempt failed before timing: `HOME=/home/bench/.cache/codex-scratch/multiplexer-skip/real-startup/home-r47` made the test's nested scratch path too long for tmux's socket filename. No timing samples were collected. I am rerunning with `HOME=/home/bench` and `TMPDIR=/home/bench/.cache/codex-scratch/multiplexer-skip`, matching the short bench scratch layout used by the prior real-engine runs. Evidence: [real-shell-perf-vm-r47.log](https://git.kayg.org/attachments/47d5542b-43bb-4176-a3b4-71a5de236b58)
Author
Owner

The corrected real-engine run is waiting on /var/lock/perf-bench.lock on the perf VM for 11 minutes; the remote flock -w 3600 process is alive and no weighted scope/test has started. I am continuing to wait within the allowed timeout.

The corrected real-engine run is waiting on `/var/lock/perf-bench.lock` on the perf VM for 11 minutes; the remote `flock -w 3600` process is alive and no weighted scope/test has started. I am continuing to wait within the allowed timeout.
Author
Owner

The corrected real-engine perf VM run passed all five Bash/Zsh × tmux/Zellij/Oh My Zsh startup cases, and manual start remained available. On infraternal-perf-test (4 cores, CPUWeight=10000, load average 1.21/1.05/0.84), 101 real PTY samples per cell measured:

  • Bash open-to-first-prompt: baseline p50/p99 26.029/33.928 ms; guarded 24.887/34.225 ms; guarded p99 minus baseline p99 +0.297 ms.
  • Zsh open-to-first-prompt: baseline p50/p99 5.909/9.221 ms; guarded 6.499/8.915 ms; guarded p99 minus baseline p99 −0.306 ms.

Both guard deltas are within the 1.000 ms budget. Test result: 1 passed; 0 failed; 0 ignored; 0 measured; 98 filtered out. Evidence: real-shell-perf-vm-r47.log

The corrected real-engine perf VM run passed all five Bash/Zsh × tmux/Zellij/Oh My Zsh startup cases, and manual start remained available. On infraternal-perf-test (4 cores, `CPUWeight=10000`, load average 1.21/1.05/0.84), 101 real PTY samples per cell measured: - Bash open-to-first-prompt: baseline p50/p99 26.029/33.928 ms; guarded 24.887/34.225 ms; guarded p99 minus baseline p99 +0.297 ms. - Zsh open-to-first-prompt: baseline p50/p99 5.909/9.221 ms; guarded 6.499/8.915 ms; guarded p99 minus baseline p99 −0.306 ms. Both guard deltas are within the 1.000 ms budget. Test result: `1 passed; 0 failed; 0 ignored; 0 measured; 98 filtered out`. Evidence: [real-shell-perf-vm-r47.log](https://git.kayg.org/attachments/47f8c0b7-0ff9-476f-adc3-25024067689f)
Author
Owner

Completed the r2 implementation iteration. scripts/verify iterate passed on e315ab0215, including workspace Rust tests, clippy, formatter, and TypeScript protocol tests (37 passed, 0 failed). Full transcript: verify-iterate-r47-current.log. Next: static binary size comparison and final fast gate.

Completed the r2 implementation iteration. `scripts/verify iterate` passed on e315ab021553f4b8553789f74b7a455838c1c083, including workspace Rust tests, clippy, formatter, and TypeScript protocol tests (37 passed, 0 failed). Full transcript: [verify-iterate-r47-current.log](https://git.kayg.org/attachments/37261721-8eb8-47cd-96ff-2b7d7e921ace). Next: static binary size comparison and final fast gate.
Author
Owner

R50 static-size fix: stripped x86_64 musl binary is 22,289,392 B vs merge base 22,275,888 B, delta +13,504 B (2,880 B below the +16,384 B limit). Same locked release recipe and target. branch size log; base size log.

cargo-bloat merge-base/current comparison shows no added production crates or features; the only lockfile difference remains rustls 0.23.45→0.23.46 from e2ac27dfc. Rounded .text crate sizes: infraternal-shim 150.3→155.1 KiB, infraternal-agent 457.3→457.9 KiB, rustls 352.6→354.0 KiB; infraternal-server remains 2.8 MiB at this report's precision. base bloat; branch bloat. Reusing the existing derived ActionInput visitor increased the size by 576 B compared with the manual strict visitor; the manual visitor was restored and keeps duplicate/unknown-field rejection.

Focused settings tests passed 6/6 and shell startup tests passed 6/6, including Bash string and array PROMPT_COMMAND replacement. focused test log. The real-engine perf VM rerun is waiting for the shared measurement lock.

R50 static-size fix: stripped x86_64 musl binary is 22,289,392 B vs merge base 22,275,888 B, delta +13,504 B (2,880 B below the +16,384 B limit). Same locked release recipe and target. [branch size log](https://git.kayg.org/attachments/f5717905-9fe5-46b2-9890-008216de041c); [base size log](https://git.kayg.org/attachments/63d7856b-80cc-4b9b-a283-0cbddc30b195). `cargo-bloat` merge-base/current comparison shows no added production crates or features; the only lockfile difference remains rustls 0.23.45→0.23.46 from e2ac27dfc. Rounded `.text` crate sizes: infraternal-shim 150.3→155.1 KiB, infraternal-agent 457.3→457.9 KiB, rustls 352.6→354.0 KiB; infraternal-server remains 2.8 MiB at this report's precision. [base bloat](https://git.kayg.org/attachments/475fa83a-b91b-4229-9cc4-ddb9292aa66b); [branch bloat](https://git.kayg.org/attachments/d2cfe83b-f921-4893-bb5b-0784f2811cab). Reusing the existing derived ActionInput visitor increased the size by 576 B compared with the manual strict visitor; the manual visitor was restored and keeps duplicate/unknown-field rejection. Focused settings tests passed 6/6 and shell startup tests passed 6/6, including Bash string and array PROMPT_COMMAND replacement. [focused test log](https://git.kayg.org/attachments/86cf9973-538f-4250-a12e-e4c6700b9184). The real-engine perf VM rerun is waiting for the shared measurement lock.
Author
Owner

D241 exact notice copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. The button turns skipping off for that host.

D241 exact notice copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. The button turns skipping off for that host.
Author
Owner

Committed and pushed backend settings slice as 32401a6d5c0e83c1dfd700ed3c39e29ed393f2e4. Server settings tests: 6 passed, 0 failed; workspace scripts/verify iterate passed on the same server source, including clippy and integration coverage. focused tests; iterator transcript. The static branch measurement is +13,504 B from merge base and remains below the +16,384 B allowance.

Committed and pushed backend settings slice as 32401a6d5c0e83c1dfd700ed3c39e29ed393f2e4. Server settings tests: 6 passed, 0 failed; workspace `scripts/verify iterate` passed on the same server source, including clippy and integration coverage. [focused tests](https://git.kayg.org/attachments/86cf9973-538f-4250-a12e-e4c6700b9184); [iterator transcript](https://git.kayg.org/attachments/37261721-8eb8-47cd-96ff-2b7d7e921ace). The static branch measurement is +13,504 B from merge base and remains below the +16,384 B allowance.
Author
Owner

Committed and pushed the parser fuzz target as ee57baa7b4800f4a4efbd85c1afbb56910ea5d4b. The production ActionInput decoder completed 5,824,311 fuzz inputs in 61 seconds with no crash or sanitizer finding. fuzz log. The target uses parser-fuzzing, which is excluded from production builds.

Committed and pushed the parser fuzz target as ee57baa7b4800f4a4efbd85c1afbb56910ea5d4b. The production `ActionInput` decoder completed 5,824,311 fuzz inputs in 61 seconds with no crash or sanitizer finding. [fuzz log](https://git.kayg.org/attachments/ab7fd572-b240-4f8b-ab58-4a621ce05b5b). The target uses parser-fuzzing, which is excluded from production builds.
Author
Owner

Size reduction attribution: the first r48 branch image was +17,600 B, 1,216 B over the allowed growth. Reusing the strict ActionInput visitor instead of Serde's derived form saved 576 B, and removing the Bash version-probing path while preserving scalar/array prompt commands reduced the final image to +13,504 B. Current section deltas vs merge base: .text +6,940 B, .rodata +4,096 B, .gcc_except_table +844 B, .eh_frame +584 B, .data.rel.ro +928 B; file-size delta +13,504 B. initial image; settings symbol sizes; section comparison. Strict shim clippy passed. clippy log.

Size reduction attribution: the first r48 branch image was +17,600 B, 1,216 B over the allowed growth. Reusing the strict ActionInput visitor instead of Serde's derived form saved 576 B, and removing the Bash version-probing path while preserving scalar/array prompt commands reduced the final image to +13,504 B. Current section deltas vs merge base: .text +6,940 B, .rodata +4,096 B, .gcc_except_table +844 B, .eh_frame +584 B, .data.rel.ro +928 B; file-size delta +13,504 B. [initial image](https://git.kayg.org/attachments/25d7943a-7d97-4d27-8502-853bc526d0db); [settings symbol sizes](https://git.kayg.org/attachments/46ba2882-cdf2-4b8f-b55a-0971c41ff48a); [section comparison](https://git.kayg.org/attachments/828c7f37-c415-4ae7-abec-e731eac69da8). Strict shim clippy passed. [clippy log](https://git.kayg.org/attachments/7187f4d7-d096-4110-bae6-0a163bcf3967).
Author
Owner

Committed and pushed the shell startup guard as 041c915d2feac0b5cbe49d2978787f9b9d00c78d. Focused shell tests passed 6/6; strict shim clippy passed. Coverage includes Bash string and array PROMPT_COMMAND replacement, inherited hooks, cleanup before prompt, and manual start. tests; clippy. The real-engine perf VM run remains queued on the shared lock.

Committed and pushed the shell startup guard as 041c915d2feac0b5cbe49d2978787f9b9d00c78d. Focused shell tests passed 6/6; strict shim clippy passed. Coverage includes Bash string and array PROMPT_COMMAND replacement, inherited hooks, cleanup before prompt, and manual start. [tests](https://git.kayg.org/attachments/86cf9973-538f-4250-a12e-e4c6700b9184); [clippy](https://git.kayg.org/attachments/7187f4d7-d096-4110-bae6-0a163bcf3967). The real-engine perf VM run remains queued on the shared lock.
Author
Owner

Reviewer checklist finding fixed in docs commit c39ce7505: the Set contract now distinguishes account skip_autostart (boolean only) from host overrides (boolean or null to inherit). The existing server test asserts global null is refused and host null clears the override; no wire behavior changed. settings tests. Commit pushed to multiplexer-skip.

Reviewer checklist finding fixed in docs commit c39ce7505: the Set contract now distinguishes account `skip_autostart` (boolean only) from host overrides (boolean or null to inherit). The existing server test asserts global null is refused and host null clears the override; no wire behavior changed. [settings tests](https://git.kayg.org/attachments/86cf9973-538f-4250-a12e-e4c6700b9184). Commit pushed to multiplexer-skip.
Author
Owner

R50 perf VM finding: five real-shell cases passed (Bash plain tmux and generated Zellij; Zsh plain tmux, Oh My Zsh tmux, and generated Zellij); manual starts worked in all cases. On infraternal-perf-test (4 cores, CPUWeight=10000, load 0.11/0.30/0.45), Bash p99 overhead was -2.907 ms; Zsh was +1.851 ms against the 1 ms budget (baseline p99 7.058 ms, guarded p99 8.909 ms). The ignored real-engine/timing test failed only at the Zsh latency assertion. I am investigating the overlay path and will rerun under the VM lock after changes. run log.

R50 perf VM finding: five real-shell cases passed (Bash plain tmux and generated Zellij; Zsh plain tmux, Oh My Zsh tmux, and generated Zellij); manual starts worked in all cases. On infraternal-perf-test (4 cores, CPUWeight=10000, load 0.11/0.30/0.45), Bash p99 overhead was -2.907 ms; Zsh was +1.851 ms against the 1 ms budget (baseline p99 7.058 ms, guarded p99 8.909 ms). The ignored real-engine/timing test failed only at the Zsh latency assertion. I am investigating the overlay path and will rerun under the VM lock after changes. [run log](https://git.kayg.org/attachments/f3ec527b-7679-43a3-8914-182d6b21ce2e).
Author
Owner

Real-engine startup measurement passed on infraternal-perf-test (4 cores, CPUWeight=10000), 1,001 samples per condition; load ranged 1.22 to 1.03. Bash p99 baseline/guarded 31.915/30.920 ms (delta -0.995 ms); Zsh 7.944/8.407 ms (delta +0.463 ms), both within the 1 ms budget. All five Bash/Zsh startup cases passed and manual tmux/Zellij start remained available. Harness: 68.75 s. Receipt: real-shell-perf-vm-r51.log. This supports committing the real-engine p99 test calibration.

Real-engine startup measurement passed on infraternal-perf-test (4 cores, CPUWeight=10000), 1,001 samples per condition; load ranged 1.22 to 1.03. Bash p99 baseline/guarded 31.915/30.920 ms (delta -0.995 ms); Zsh 7.944/8.407 ms (delta +0.463 ms), both within the 1 ms budget. All five Bash/Zsh startup cases passed and manual tmux/Zellij start remained available. Harness: 68.75 s. Receipt: [real-shell-perf-vm-r51.log](https://git.kayg.org/attachments/4f9dbcb8-14dc-44d2-90e9-b13a00303e2d). This supports committing the real-engine p99 test calibration.
Author
Owner

Committed and pushed PTY real-engine p99 harness calibration: 2b0a5dd11cfe85c93a41b9e982cb221741c50d2b. The five real Bash/Zsh startup cases and manual tmux/Zellij launch checks passed. On infraternal-perf-test (4 cores, CPUWeight=10000, load 1.22 to 1.03), 1,001 samples gave Bash p99 delta -0.995 ms and Zsh +0.463 ms, within the 1 ms budget; run took 68.75 s. Crate library tests: 85 passed, 14 ignored; Clippy passed. Receipts: real-shell-perf-vm-r51.log, pty-test-clippy-r51.log.

Committed and pushed PTY real-engine p99 harness calibration: `2b0a5dd11cfe85c93a41b9e982cb221741c50d2b`. The five real Bash/Zsh startup cases and manual tmux/Zellij launch checks passed. On infraternal-perf-test (4 cores, CPUWeight=10000, load 1.22 to 1.03), 1,001 samples gave Bash p99 delta -0.995 ms and Zsh +0.463 ms, within the 1 ms budget; run took 68.75 s. Crate library tests: 85 passed, 14 ignored; Clippy passed. Receipts: [real-shell-perf-vm-r51.log](https://git.kayg.org/attachments/4f9dbcb8-14dc-44d2-90e9-b13a00303e2d), [pty-test-clippy-r51.log](https://git.kayg.org/attachments/01568aca-9018-4561-8cb0-dd42e867972b).
Author
Owner

Finished #170 on branch multiplexer-skip, pushed head 2b0a5dd11cfe85c93a41b9e982cb221741c50d2b (worktree clean).

Real-engine startup checks passed for five Bash/Zsh cases; manual tmux/Zellij startup remains available. Perf VM results (4 cores, CPUWeight=10000, 1,001 samples): Bash p99 baseline/guarded 31.915/30.920 ms, delta -0.995 ms; Zsh 7.944/8.407 ms, delta +0.463 ms. Both meet the 1 ms budget. Static stripped x86_64 binary is 22,289,392 B, +13,504 B from merge base (within the +16,384 B limit). The inherited absolute cap is 22,204,304 B; the merge base was already 71,584 B over it. Aarch64 binary is 19,720,800 B against a 19,638,744 B cap.

Final scripts/verify fast summary (verbatim):

(static builds: 2060s)

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

The only failed gate is static builds: both architecture outputs exceed the absolute size caps, and the x86_64 size-boundary fixture consequently rejects the oversized binary. Full transcript: verify-fast-final-r51.log. Startup measurements: real-shell-perf-vm-r51.log. The PTY crate gate passed 85 tests (14 ignored) and Clippy: pty-test-clippy-r51.log.

Finished #170 on branch `multiplexer-skip`, pushed head `2b0a5dd11cfe85c93a41b9e982cb221741c50d2b` (worktree clean). Real-engine startup checks passed for five Bash/Zsh cases; manual tmux/Zellij startup remains available. Perf VM results (4 cores, CPUWeight=10000, 1,001 samples): Bash p99 baseline/guarded 31.915/30.920 ms, delta -0.995 ms; Zsh 7.944/8.407 ms, delta +0.463 ms. Both meet the 1 ms budget. Static stripped x86_64 binary is 22,289,392 B, +13,504 B from merge base (within the +16,384 B limit). The inherited absolute cap is 22,204,304 B; the merge base was already 71,584 B over it. Aarch64 binary is 19,720,800 B against a 19,638,744 B cap. Final `scripts/verify fast` summary (verbatim): ``` (static builds: 2060s) +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ``` The only failed gate is static builds: both architecture outputs exceed the absolute size caps, and the x86_64 size-boundary fixture consequently rejects the oversized binary. Full transcript: [verify-fast-final-r51.log](https://git.kayg.org/attachments/000649c7-7328-4263-a03c-239d32893248). Startup measurements: [real-shell-perf-vm-r51.log](https://git.kayg.org/attachments/4f9dbcb8-14dc-44d2-90e9-b13a00303e2d). The PTY crate gate passed 85 tests (14 ignored) and Clippy: [pty-test-clippy-r51.log](https://git.kayg.org/attachments/01568aca-9018-4561-8cb0-dd42e867972b).
Author
Owner

Post-gate author review found a D198 packaging mismatch: TerminalPreferencesPlugin and its action implementation currently live in crates/infraternal-server/src/terminal_preferences.rs and are always added from crates/infraternal-server/src/plugins.rs, rather than being a separately removable plugin crate behind a Cargo feature. I’m extracting the provider into its own server plugin crate and keeping the existing persisted schema and wire behavior.

Post-gate author review found a D198 packaging mismatch: `TerminalPreferencesPlugin` and its action implementation currently live in `crates/infraternal-server/src/terminal_preferences.rs` and are always added from `crates/infraternal-server/src/plugins.rs`, rather than being a separately removable plugin crate behind a Cargo feature. I’m extracting the provider into its own server plugin crate and keeping the existing persisted schema and wire behavior.
Author
Owner

D198 extraction test finding: all six new plugin unit tests fail in the extracted minimal fixture because its remote_hosts table omits the existing mode column used by the fixture insert (crates/plugins/terminal-preferences/src/lib.rs:575; SQLite: table remote_hosts has no column named mode). Production code is not reached. I’m correcting the fixture schema and rerunning the targeted gates.

D198 extraction test finding: all six new plugin unit tests fail in the extracted minimal fixture because its `remote_hosts` table omits the existing `mode` column used by the fixture insert (`crates/plugins/terminal-preferences/src/lib.rs:575`; SQLite: `table remote_hosts has no column named mode`). Production code is not reached. I’m correcting the fixture schema and rerunning the targeted gates.
Author
Owner

Second extraction fixture finding: after adding the missing remote-host columns, five of six plugin tests pass; the ownership test still fails before exercising production code because its setup inserts an unused second user into a users table absent from the isolated fixture (crates/plugins/terminal-preferences/src/lib.rs:656; SQLite: no such table: users). I’m removing that unnecessary user-row insert; the ownership check only needs a distinct owner id.

Second extraction fixture finding: after adding the missing remote-host columns, five of six plugin tests pass; the ownership test still fails before exercising production code because its setup inserts an unused second user into a `users` table absent from the isolated fixture (`crates/plugins/terminal-preferences/src/lib.rs:656`; SQLite: `no such table: users`). I’m removing that unnecessary user-row insert; the ownership check only needs a distinct owner id.
Author
Owner

The extraction Clippy run found that promoting the shared action decoder to the public plugin API requires a documented error type (socket_actions.rs:10: missing_errors_doc and result_unit_err). I’m adding a small typed input error while preserving callers’ current accept/refuse behavior.

The extraction Clippy run found that promoting the shared action decoder to the public plugin API requires a documented error type (`socket_actions.rs:10`: `missing_errors_doc` and `result_unit_err`). I’m adding a small typed input error while preserving callers’ current accept/refuse behavior.
Author
Owner

The rerun now passes all 20 plugin API and 6 preference tests, but Clippy found three public API documentation/error-shape issues (read_settings and execute_action, lines 152/455) plus 43 test-only expect/unwrap lints because the new crate lacks the established test lint allowance. I’m documenting the storage/ownership error and simplifying the action response API to avoid a public unit-error Result.

The rerun now passes all 20 plugin API and 6 preference tests, but Clippy found three public API documentation/error-shape issues (`read_settings` and `execute_action`, lines 152/455) plus 43 test-only expect/unwrap lints because the new crate lacks the established test lint allowance. I’m documenting the storage/ownership error and simplifying the action response API to avoid a public unit-error Result.
Author
Owner

The plugin/API tests and Clippy now pass. The server integration compile found one caller that pattern-matched the old private decoder's unit error (crates/infraternal-server/src/plugins.rs:411, expected ControlInputError, found ()). I’m updating that refusal branch to accept the new typed error without changing its wire response.

The plugin/API tests and Clippy now pass. The server integration compile found one caller that pattern-matched the old private decoder's unit error (`crates/infraternal-server/src/plugins.rs:411`, expected `ControlInputError`, found `()`). I’m updating that refusal branch to accept the new typed error without changing its wire response.
Author
Owner

Completed and pushed the D198 packaging correction: e4a7b21cceba638f6fa0c6c2e4fb1207d330cdfd. terminal.multiplexer now lives in optional infraternal-plugin-terminal-preferences, enabled through the removable terminal-preferences server feature; the server no-default-features build passes. Shared action decoding/dispatch moved to plugin API and is reused by core controls and the feature plugin. Cargo feature review shows no new external dependency.

Gates: plugin API 20/20 tests, preferences plugin 6/6 tests, authenticated server socket action 1/1, Clippy for API/plugin/server, server --no-default-features check, and the moved fuzz target compile all passed. Receipts: d198-plugin-api-final-r58.log, d198-plugin-extract-r58.log, d198-fuzz-check-r58.log.

Completed and pushed the D198 packaging correction: `e4a7b21cceba638f6fa0c6c2e4fb1207d330cdfd`. `terminal.multiplexer` now lives in optional `infraternal-plugin-terminal-preferences`, enabled through the removable `terminal-preferences` server feature; the server no-default-features build passes. Shared action decoding/dispatch moved to plugin API and is reused by core controls and the feature plugin. Cargo feature review shows no new external dependency. Gates: plugin API 20/20 tests, preferences plugin 6/6 tests, authenticated server socket action 1/1, Clippy for API/plugin/server, server `--no-default-features` check, and the moved fuzz target compile all passed. Receipts: [d198-plugin-api-final-r58.log](https://git.kayg.org/attachments/f264d03e-b4c0-4306-93fe-055d87e96925), [d198-plugin-extract-r58.log](https://git.kayg.org/attachments/5ce0b4f0-51da-4712-994e-7a741805999e), [d198-fuzz-check-r58.log](https://git.kayg.org/attachments/949ed694-8125-4be2-9f79-30ed9cf24d0b).
Author
Owner

Post-D198 scripts/verify iterate passed on head e4a7b21cceba638f6fa0c6c2e4fb1207d330cdfd. Rust, CLI, auth, terminal, plugin, and TypeScript suites passed; the terminal preferences socket action and the removable plugin feature were included. Output ended: ITERATE gate passed. This is not the final gate: run scripts/verify fast before reporting done. Full receipt: verify-iterate-final-r58.log.

Post-D198 `scripts/verify iterate` passed on head `e4a7b21cceba638f6fa0c6c2e4fb1207d330cdfd`. Rust, CLI, auth, terminal, plugin, and TypeScript suites passed; the terminal preferences socket action and the removable plugin feature were included. Output ended: `ITERATE gate passed. This is not the final gate: run scripts/verify fast before reporting done.` Full receipt: [verify-iterate-final-r58.log](https://git.kayg.org/attachments/ab5d877c-cbed-47f4-8a52-0c5bd2b6aed6).
Author
Owner

Final static x86_64 size: 22,275,408 B vs 22,204,304 B cap (71,104 B over). Compared with merge base b0a3799cf4 at 22,275,888 B, this branch is 480 B smaller. The extracted plugin removes the earlier +57,792 B branch growth; the absolute-size gate remains over because the base also exceeds its cap. aarch64 static build is still running.

Final static x86_64 size: 22,275,408 B vs 22,204,304 B cap (71,104 B over). Compared with merge base b0a3799cf459425c3402e745f329f4ebc441c144 at 22,275,888 B, this branch is 480 B smaller. The extracted plugin removes the earlier +57,792 B branch growth; the absolute-size gate remains over because the base also exceeds its cap. aarch64 static build is still running.
Author
Owner

Finished implementation on multiplexer-skip, HEAD e4a7b21cceba638f6fa0c6c2e4fb1207d330cdfd (base b0a3799cf459425c3402e745f329f4ebc441c144). The worktree is clean and the branch ref matches HEAD.

Final scripts/verify fast Rust summary (verbatim):

(static builds: 657s)

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

The only failing row is the static binary size budget. Stripped x86_64 is 22,275,408 B vs 22,204,304 B cap; this is 480 B below merge base (22,275,888 B), within the +16 KiB growth rule. Stripped aarch64 is 19,710,464 B vs 19,638,744 B cap (+71,720 B). The full gate transcript is attached: verify-fast-final-r58.log.

Real-engine perf VM run: 5 Bash/Zsh cases passed with manual tmux/Zellij startup still available. At 4 vCPU, load average 1.22 → 1.03, Bash first-prompt p99 was 31.915 ms baseline / 30.920 ms guarded (−0.995 ms); Zsh was 7.944 / 8.407 ms (+0.463 ms). Receipt: real-shell-perf-vm-r51.log. scripts/verify iterate passed after the plugin extraction: verify-iterate-final-r58.log.

D241 UI copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. This is shown once per host; the button disables the skip for that host.

Author break-it checklist: reviewed the plugin feature boundary and compile-out, authenticated settings ownership and persistence, shell startup guard cleanup and manual starts, and current size delta. No additional issue found. Stopping here for the independent break-it review.

Finished implementation on `multiplexer-skip`, HEAD `e4a7b21cceba638f6fa0c6c2e4fb1207d330cdfd` (base `b0a3799cf459425c3402e745f329f4ebc441c144`). The worktree is clean and the branch ref matches HEAD. Final `scripts/verify fast` Rust summary (verbatim): ``` (static builds: 657s) +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ``` The only failing row is the static binary size budget. Stripped x86_64 is 22,275,408 B vs 22,204,304 B cap; this is 480 B below merge base (22,275,888 B), within the +16 KiB growth rule. Stripped aarch64 is 19,710,464 B vs 19,638,744 B cap (+71,720 B). The full gate transcript is attached: [verify-fast-final-r58.log](https://git.kayg.org/attachments/974efa1b-84ba-4918-82e9-c86cdee5674f). Real-engine perf VM run: 5 Bash/Zsh cases passed with manual tmux/Zellij startup still available. At 4 vCPU, load average 1.22 → 1.03, Bash first-prompt p99 was 31.915 ms baseline / 30.920 ms guarded (−0.995 ms); Zsh was 7.944 / 8.407 ms (+0.463 ms). Receipt: [real-shell-perf-vm-r51.log](https://git.kayg.org/attachments/4f9dbcb8-14dc-44d2-90e9-b13a00303e2d). `scripts/verify iterate` passed after the plugin extraction: [verify-iterate-final-r58.log](https://git.kayg.org/attachments/ab5d877c-cbed-47f4-8a52-0c5bd2b6aed6). D241 UI copy for the later UI pass: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. This is shown once per host; the button disables the skip for that host. Author break-it checklist: reviewed the plugin feature boundary and compile-out, authenticated settings ownership and persistence, shell startup guard cleanup and manual starts, and current size delta. No additional issue found. Stopping here for the independent break-it review.
Author
Owner

Starting continuation r3 on multiplexer-skip at e4a7b21cceba638f6fa0c6c2e4fb1207d330cdfd, based on current fetched origin/dev 190bf088dfb9375633551d09331f561a6b9bf5a5. Worktree is clean. Scope: rebase the existing atomic commits, resolve current-dev conflicts, rerun touched-crate gates, meet D243 static size deltas on both architectures, run scripts/verify fast, then push only this branch and hand off for independent review.

Starting continuation r3 on `multiplexer-skip` at `e4a7b21cceba638f6fa0c6c2e4fb1207d330cdfd`, based on current fetched `origin/dev` `190bf088dfb9375633551d09331f561a6b9bf5a5`. Worktree is clean. Scope: rebase the existing atomic commits, resolve current-dev conflicts, rerun touched-crate gates, meet D243 static size deltas on both architectures, run `scripts/verify fast`, then push only this branch and hand off for independent review.
Author
Owner

Rebase complete: multiplexer-skip is now 20 atomic commits on origin/dev 190bf088dfb9375633551d09331f561a6b9bf5a5, head 6e56be2f58ab369886fa072f11696e4878123abe. No conflicts. Git skipped the rustls lockfile commit because its patch is already in current origin/dev; all feature commits were replayed. Worktree is clean and the old base is no longer an ancestor. Running post-rebase touched-crate validation next.

Rebase complete: `multiplexer-skip` is now 20 atomic commits on `origin/dev` `190bf088dfb9375633551d09331f561a6b9bf5a5`, head `6e56be2f58ab369886fa072f11696e4878123abe`. No conflicts. Git skipped the rustls lockfile commit because its patch is already in current `origin/dev`; all feature commits were replayed. Worktree is clean and the old base is no longer an ancestor. Running post-rebase touched-crate validation next.
Author
Owner

Post-rebase validation: scripts/verify iterate is queued through build-slot against head 6e56be2f58ab369886fa072f11696e4878123abe; the wrapper has not acquired a slot and its log is still empty. No test result is claimed yet. Free disk: 70 GB.

Post-rebase validation: `scripts/verify iterate` is queued through `build-slot` against head `6e56be2f58ab369886fa072f11696e4878123abe`; the wrapper has not acquired a slot and its log is still empty. No test result is claimed yet. Free disk: 70 GB.
Author
Owner

Post-rebase scripts/verify iterate passed at 6e56be2f58ab369886fa072f11696e4878123abe (base 190bf088dfb9375633551d09331f561a6b9bf5a5). Rust: fmt, VT native fmt, CLI plugin compile-out, clippy, tests, and cargo-deny all PASS; 1,121 passed, 0 failed, 143 ignored across 111 test-result rows. TypeScript protocol: 37 passed, 0 failed, 34,463 expectations; stream differential: 134 streams, 11,439 schedules, zero divergences. Final line: ITERATE gate passed. This is not the final gate: run scripts/verify fast before reporting done.

Post-rebase `scripts/verify iterate` passed at `6e56be2f58ab369886fa072f11696e4878123abe` (base `190bf088dfb9375633551d09331f561a6b9bf5a5`). Rust: fmt, VT native fmt, CLI plugin compile-out, clippy, tests, and cargo-deny all PASS; 1,121 passed, 0 failed, 143 ignored across 111 test-result rows. TypeScript protocol: 37 passed, 0 failed, 34,463 expectations; stream differential: 134 streams, 11,439 schedules, zero divergences. Final line: `ITERATE gate passed. This is not the final gate: run scripts/verify fast before reporting done.`
Author
Owner

Measured current origin/dev (190bf088df) with the verifier's static release recipe and shared target: x86_64 21,422,096 bytes (cap 21,422,096; delta +0), AArch64 19,594,856 bytes (cap 19,594,856; delta +0). Production trust passed for both; native key-memory check passed on x86_64. Receipt: origin-dev-static.log.

Measured current origin/dev (190bf088dfb9375633551d09331f561a6b9bf5a5) with the verifier's static release recipe and shared target: x86_64 21,422,096 bytes (cap 21,422,096; delta +0), AArch64 19,594,856 bytes (cap 19,594,856; delta +0). Production trust passed for both; native key-memory check passed on x86_64. Receipt: [origin-dev-static.log](https://git.kayg.org/attachments/f6112ad5-2316-4422-a229-262866f15cfe).
Author
Owner

Post-rebase iterate passed. The current origin/dev static baseline measured x86_64 21,422,096 bytes and AArch64 19,594,856 bytes, both at their exact caps; receipt is in the prior comment. The branch static measurement is waiting in the host build-slot queue; no branch compilation has started yet.

Post-rebase iterate passed. The current origin/dev static baseline measured x86_64 21,422,096 bytes and AArch64 19,594,856 bytes, both at their exact caps; receipt is in the prior comment. The branch static measurement is waiting in the host build-slot queue; no branch compilation has started yet.
Author
Owner

Rebased branch x86_64 static artifact measured 21,420,912 bytes versus origin/dev 21,422,096 bytes: -1,184 bytes. Production trust and native key-memory checks passed. This requires ratcheting the x86_64 D243 cap to the exact branch size; AArch64 measurement is still running. Receipt: branch-static.log.

Rebased branch x86_64 static artifact measured 21,420,912 bytes versus origin/dev 21,422,096 bytes: -1,184 bytes. Production trust and native key-memory checks passed. This requires ratcheting the x86_64 D243 cap to the exact branch size; AArch64 measurement is still running. Receipt: [branch-static.log](https://git.kayg.org/attachments/eeaba9be-a314-4729-b0c0-42565030c643).
Author
Owner

Static size comparison against exact origin/dev 190bf088df: x86_64 branch 21,420,912 bytes (-1,184); AArch64 branch 19,602,368 bytes (+7,512). Both static production-trust checks passed; x86_64 native key-memory passed. AArch64 growth is below D243's 16 KiB limit. The first static check correctly rejected the stale caps (x86_64 shrink requires ratchet; AArch64 is +7,512 above old cap). I will set the exact caps to these measured artifacts and rerun the full gate. Receipt: branch-static.log.

Static size comparison against exact origin/dev 190bf088dfb9375633551d09331f561a6b9bf5a5: x86_64 branch 21,420,912 bytes (-1,184); AArch64 branch 19,602,368 bytes (+7,512). Both static production-trust checks passed; x86_64 native key-memory passed. AArch64 growth is below D243's 16 KiB limit. The first static check correctly rejected the stale caps (x86_64 shrink requires ratchet; AArch64 is +7,512 above old cap). I will set the exact caps to these measured artifacts and rerun the full gate. Receipt: [branch-static.log](https://git.kayg.org/attachments/3ee4747a-496b-4654-b843-a61892b41a3f).
Author
Owner

Committed size-baseline ratchet as 9e52a1651. scripts/verify.d/rust.sh and docs/PROCESS.md now carry exact caps of 21,420,912 bytes (x86_64) and 19,602,368 bytes (AArch64); git diff --check passed. rust_static_build_check passed: both exact caps accepted, the next byte rejected, smaller-artifact ratchets detected, production trust passed, and x86_64 key-memory initialization passed. Receipt: branch-static-ratcheted.log. Next: run scripts/verify fast on the branch head.

Committed size-baseline ratchet as 9e52a1651. `scripts/verify.d/rust.sh` and `docs/PROCESS.md` now carry exact caps of 21,420,912 bytes (x86_64) and 19,602,368 bytes (AArch64); `git diff --check` passed. `rust_static_build_check` passed: both exact caps accepted, the next byte rejected, smaller-artifact ratchets detected, production trust passed, and x86_64 key-memory initialization passed. Receipt: [branch-static-ratcheted.log](https://git.kayg.org/attachments/be28015d-d8dd-4f66-aa6f-44c0fb05db79). Next: run `scripts/verify fast` on the branch head.
Author
Owner

Pre-push fetch found origin/dev advanced from 190bf088df to 41a3a81abc. Rebased successfully to head a9c77cad45; the upstream delta was only DECISIONS.md, with no conflicts, and all 21 branch commits remain. The earlier fast gate was on the prior head, so I am rerunning it here before push.

Pre-push fetch found `origin/dev` advanced from 190bf088dfb9375633551d09331f561a6b9bf5a5 to 41a3a81abceaa4ea7457d84ee05297ca2244efcc. Rebased successfully to head a9c77cad45cbbc83179781958bdf24eb0d6375da; the upstream delta was only `DECISIONS.md`, with no conflicts, and all 21 branch commits remain. The earlier fast gate was on the prior head, so I am rerunning it here before push.
Author
Owner

The final scripts/verify fast run on rebased head a9c77cad45 is waiting in the host build-slot queue; all four regular slots are occupied and its log is still empty. At 13:42 CEST the build filesystem had 57 GB free. The job unit remains active and protects this job's target. I am waiting for a regular slot before pushing.

The final `scripts/verify fast` run on rebased head a9c77cad45cbbc83179781958bdf24eb0d6375da is waiting in the host build-slot queue; all four regular slots are occupied and its log is still empty. At 13:42 CEST the build filesystem had 57 GB free. The job unit remains active and protects this job's target. I am waiting for a regular slot before pushing.
Author
Owner

Finished and pushed multiplexer-skip with --force-with-lease to head a9c77cad45cbbc83179781958bdf24eb0d6375da, based on current origin/dev 41a3a81abceaa4ea7457d84ee05297ca2244efcc. Worktree is clean; no deploy. The upstream change after the earlier baseline was DECISIONS.md only, so static code inputs are unchanged: x86_64 21,420,912 bytes (-1,184 vs origin/dev); AArch64 19,602,368 bytes (+7,512 vs origin/dev), within D243's 16 KiB limit.

scripts/verify fast exited 0. Verbatim gate summary:

PT_INTERP: absent; size: 21420912 bytes; cap: 21420912 bytes; delta: +0 bytes
PT_INTERP: absent; size: 19602368 bytes; cap: 19602368 bytes; delta: +0 bytes
x86_64-unknown-linux-musl: exact 21420912-byte cap PASS; 21420913 bytes rejected PASS; smaller artifact requires ratchet PASS
aarch64-unknown-linux-musl: exact 19602368-byte cap PASS; 19602369 bytes rejected PASS; smaller artifact requires ratchet PASS
unsupported target: rejected PASS
server subcommand: exit 2, versioned JSON unavailable result
agent subcommand: exit 2, versioned JSON unavailable result
(static builds: 421s)

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

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

 37 pass
 0 fail
 34463 expect() calls
Ran 37 tests across 10 files. [2.11s]

Full transcript: verify-fast-final-rebased.log.

Stopped for the independent break-it review.

Finished and pushed `multiplexer-skip` with `--force-with-lease` to head `a9c77cad45cbbc83179781958bdf24eb0d6375da`, based on current `origin/dev` `41a3a81abceaa4ea7457d84ee05297ca2244efcc`. Worktree is clean; no deploy. The upstream change after the earlier baseline was `DECISIONS.md` only, so static code inputs are unchanged: x86_64 21,420,912 bytes (-1,184 vs origin/dev); AArch64 19,602,368 bytes (+7,512 vs origin/dev), within D243's 16 KiB limit. `scripts/verify fast` exited 0. Verbatim gate summary: ``` PT_INTERP: absent; size: 21420912 bytes; cap: 21420912 bytes; delta: +0 bytes PT_INTERP: absent; size: 19602368 bytes; cap: 19602368 bytes; delta: +0 bytes x86_64-unknown-linux-musl: exact 21420912-byte cap PASS; 21420913 bytes rejected PASS; smaller artifact requires ratchet PASS aarch64-unknown-linux-musl: exact 19602368-byte cap PASS; 19602369 bytes rejected PASS; smaller artifact requires ratchet PASS unsupported target: rejected PASS server subcommand: exit 2, versioned JSON unavailable result agent subcommand: exit 2, versioned JSON unavailable result (static builds: 421s) +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ==> Vendored Ghostty artifact checksums dist/ghostty-web.js: OK dist/ghostty-vt.wasm: OK dist/index.d.ts: OK 37 pass 0 fail 34463 expect() calls Ran 37 tests across 10 files. [2.11s] ``` Full transcript: [verify-fast-final-rebased.log](https://git.kayg.org/attachments/2cc1eb30-7981-462d-9696-629601f6466d). Stopped for the independent break-it review.
Author
Owner

Starting independent verification on branch review-multiplexer-skip, anchored to review head a9c77cad45cbbc83179781958bdf24eb0d6375da (diff base origin/dev 41a3a81abceaa4ea7457d84ee05297ca2244efcc). I’m reading the D241 contract and probing the startup guards, settings route, real shells, size artifacts, and claimed startup measurements.

Starting independent verification on branch `review-multiplexer-skip`, anchored to review head `a9c77cad45cbbc83179781958bdf24eb0d6375da` (diff base `origin/dev` `41a3a81abceaa4ea7457d84ee05297ca2244efcc`). I’m reading the D241 contract and probing the startup guards, settings route, real shells, size artifacts, and claimed startup measurements.
Author
Owner

MS-1 (P2): interactive POSIX sh startup is not skipped. Added failing regression test shell_startup::tests::posix_sh_startup_guard_skips_automatic_multiplexer_start; it exited 101 because the ENV startup command ran tmux automatic. Evidence log: $HOME/.cache/codex-scratch/multiplexer-skip-review/posix-sh-test.log. Test-only commit: a6c95ee782.

MS-1 (P2): interactive POSIX sh startup is not skipped. Added failing regression test `shell_startup::tests::posix_sh_startup_guard_skips_automatic_multiplexer_start`; it exited 101 because the ENV startup command ran `tmux automatic`. Evidence log: `$HOME/.cache/codex-scratch/multiplexer-skip-review/posix-sh-test.log`. Test-only commit: a6c95ee782f6e601746af21f6851df717389e0be.
Author
Owner

MS-2 (P2): Bash startup tmux attach || tmux new still starts automatically. Added shell_startup::tests::bash_guard_skips_unconditional_attach_fallback_but_allows_manual_start; it fails with recorded calls attach, new, manual instead of only manual. Evidence log: $HOME/.cache/codex-scratch/multiplexer-skip-review/unconditional-attach-test.log. Test-only commit: 1690b03abf.

MS-2 (P2): Bash startup `tmux attach || tmux new` still starts automatically. Added `shell_startup::tests::bash_guard_skips_unconditional_attach_fallback_but_allows_manual_start`; it fails with recorded calls `attach`, `new`, `manual` instead of only `manual`. Evidence log: `$HOME/.cache/codex-scratch/multiplexer-skip-review/unconditional-attach-test.log`. Test-only commit: 1690b03abfe4a8defe2bc04d52cbfe9e70fc4983.
Author
Owner

MS-3 (P1): disabling runtime plugin terminal.multiplexer does not disable its shell-startup behavior. With the account default still enabled, ssh.session.open sends skip_multiplexer_autostart: true to the host. Regression test auth::tests::terminal_refusal_tests::disabled_terminal_preferences_plugin_does_not_apply_skip_to_open_session fails with observed Some(true) vs expected Some(false). Evidence log: $HOME/.cache/codex-scratch/multiplexer-skip-review/disabled-plugin-test.log. Test-only commit: 89d84d30ac.

MS-3 (P1): disabling runtime plugin `terminal.multiplexer` does not disable its shell-startup behavior. With the account default still enabled, `ssh.session.open` sends `skip_multiplexer_autostart: true` to the host. Regression test `auth::tests::terminal_refusal_tests::disabled_terminal_preferences_plugin_does_not_apply_skip_to_open_session` fails with observed `Some(true)` vs expected `Some(false)`. Evidence log: `$HOME/.cache/codex-scratch/multiplexer-skip-review/disabled-plugin-test.log`. Test-only commit: 89d84d30acd1f894d2c740bdb49f32917b4cc822.
Author
Owner

MS-4 (P1): the first-session notice and host reversal control are missing from the real canvas. The production-build Playwright test the first shell shows the multiplexer skip notice and host control fails because the D241 notice is absent; app source has no terminal.multiplexer.prepare or .set calls. Test-only commit: 6e3ff05b5f. Production screenshot: multiplexer-skip-first-shell.png. Test log: ui-notice-test.log.

MS-4 (P1): the first-session notice and host reversal control are missing from the real canvas. The production-build Playwright test `the first shell shows the multiplexer skip notice and host control` fails because the D241 notice is absent; app source has no `terminal.multiplexer.prepare` or `.set` calls. Test-only commit: 6e3ff05b5fce8fb1fecc7a6d4f4d73c05bc3b905. Production screenshot: ![multiplexer-skip-first-shell.png](https://git.kayg.org/attachments/67b86a59-72df-4f91-9a10-c904c1b40c75). Test log: [ui-notice-test.log](https://git.kayg.org/attachments/f349c504-39c6-407c-a684-d9fc812f9713).
Author
Owner

Perf VM step complete for job head a9c77cad4. The ignored real startup suite passed all five Bash/Zsh × tmux/Zellij/Oh My Zsh cases and manual starts under CPUWeight=10000. At n=1001, measured p99 deltas were Bash -1.025 ms and Zsh +0.844 ms (budget <=1 ms); load at measurement was 1.45/0.70/0.41 and 1.38/0.71/0.42 on infraternal-perf-test (4 cores). This reproduces the budget but not the report's exact Zsh +0.463 ms. Full log: startup-perf.log. Review harness support commit: f66e60b8b0.

Perf VM step complete for job head a9c77cad4. The ignored real startup suite passed all five Bash/Zsh × tmux/Zellij/Oh My Zsh cases and manual starts under CPUWeight=10000. At n=1001, measured p99 deltas were Bash -1.025 ms and Zsh +0.844 ms (budget <=1 ms); load at measurement was 1.45/0.70/0.41 and 1.38/0.71/0.42 on `infraternal-perf-test` (4 cores). This reproduces the budget but not the report's exact Zsh +0.463 ms. Full log: [startup-perf.log](https://git.kayg.org/attachments/f0c49948-95eb-4618-add5-c49c9f4a98f2). Review harness support commit: f66e60b8b0108113d109107cd5d7e14de24de8a5.
Author
Owner

MS-5 (P2): configuring a Fish shell path installs no D241 skip guard (neither startup overlay nor TMUX/ZELLIJ sentinels). The regression test shell_startup::tests::fish_startup_configuration_installs_a_multiplexer_guard fails with “Fish startup configuration installed no multiplexer guard.” No Fish binary is present on the build host or perf VM, so this is a helper configuration-path assertion. Evidence log: $HOME/.cache/codex-scratch/multiplexer-skip-review/fish-startup-test.log. Test-only commit: 120e75e278.

MS-5 (P2): configuring a Fish shell path installs no D241 skip guard (neither startup overlay nor TMUX/ZELLIJ sentinels). The regression test `shell_startup::tests::fish_startup_configuration_installs_a_multiplexer_guard` fails with “Fish startup configuration installed no multiplexer guard.” No Fish binary is present on the build host or perf VM, so this is a helper configuration-path assertion. Evidence log: `$HOME/.cache/codex-scratch/multiplexer-skip-review/fish-startup-test.log`. Test-only commit: 120e75e278e6fd8b995796cf5e785ab2c5a6f8ee.
Author
Owner

Size step complete. Built from the exact origin/dev base and reviewed job head with the same pinned toolchain and cargo build --locked --release -p infraternal targets. Baseline sizes: x86_64 21,421,840 B; AArch64 19,594,856 B. Job-head sizes from the exact-head fast gate: x86_64 21,420,912 B; AArch64 19,602,368 B; both exactly match their committed caps. Measured deltas are x86_64 -928 B and AArch64 +7,512 B. The AArch64 claim reproduces; the report's x86_64 -1,184 B delta is 256 B different from this build. Receipts: size-verification.txt, baseline-x86-build.log, baseline-arm-build.log, head-x86-build.log.

Size step complete. Built from the exact origin/dev base and reviewed job head with the same pinned toolchain and `cargo build --locked --release -p infraternal` targets. Baseline sizes: x86_64 21,421,840 B; AArch64 19,594,856 B. Job-head sizes from the exact-head fast gate: x86_64 21,420,912 B; AArch64 19,602,368 B; both exactly match their committed caps. Measured deltas are x86_64 -928 B and AArch64 +7,512 B. The AArch64 claim reproduces; the report's x86_64 -1,184 B delta is 256 B different from this build. Receipts: [size-verification.txt](https://git.kayg.org/attachments/d9055917-2790-40bd-a853-5b8994a27a0c), [baseline-x86-build.log](https://git.kayg.org/attachments/68938d4a-f603-48a1-b3dd-19682ee655a6), [baseline-arm-build.log](https://git.kayg.org/attachments/cf3a1038-add5-4733-87bc-ed040a01dc5b), [head-x86-build.log](https://git.kayg.org/attachments/9ff53363-b1cf-48d7-a627-8f07531c8271).
Author
Owner

MS-4 supplemental evidence: a second production-canvas test, the global multiplexer auto-start switch is available, fails because there is no accessible global multiplexer/auto-start switch. Screenshot: multiplexer-skip-global-setting.png. Log: ui-global-switch-test.log. Test-only commit: 591e4b5964. This joins the missing notice and host control already recorded above.

MS-4 supplemental evidence: a second production-canvas test, `the global multiplexer auto-start switch is available`, fails because there is no accessible global multiplexer/auto-start switch. Screenshot: ![multiplexer-skip-global-setting.png](https://git.kayg.org/attachments/3a5d8e08-6198-4b3d-ba02-77767b50cf46). Log: [ui-global-switch-test.log](https://git.kayg.org/attachments/e2ed059e-787c-442e-a076-4e8ea0d97545). Test-only commit: 591e4b596409bc29683e07f5ae1fb27297149f90. This joins the missing notice and host control already recorded above.
Author
Owner

Independent review finished.

Verdict: do not merge — 0 P0, 2 P1, 3 P2, 0 P3.

Reviewed job head: a9c77cad45. Review evidence branch review-multiplexer-skip HEAD: 591e4b5964. The job branch/worktree was not changed; review commits contain failing tests and test-only harness support.

P1 findings: disabling terminal.multiplexer still sends skip_multiplexer_autostart: true; the real canvas has no first-session notice, host reversal, or global switch. P2 findings: POSIX sh and Fish are not configured for the guard; Bash tmux attach || tmux new still auto-starts.

Perf VM (infraternal-perf-test, 4 cores, CPUWeight=10000), n=1001: Bash p99 delta -1.025 ms (load 1.45/0.70/0.41); Zsh +0.844 ms (load 1.38/0.71/0.42). All five real Bash/Zsh tmux/Zellij/Oh My Zsh startup cases and manual starts passed; both deltas meet the 1 ms budget. The report's Zsh +0.463 ms was not reproduced.

Static sizes: the head artifacts exactly match their caps (x86_64 21,420,912 B; AArch64 19,602,368 B). Against independently built origin/dev artifacts (x86_64 21,421,840 B; AArch64 19,594,856 B), measured deltas are -928 B and +7,512 B. The ARM claim reproduces; the reported x86 delta -1,184 B differs by 256 B. Receipts are attached above.

scripts/verify fast on the job head exited 0. Verbatim summary:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| CLI plugin compile-out    | PASS         |
| clippy                    | PASS         |
| test                      | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+
Independent review finished. Verdict: do not merge — 0 P0, 2 P1, 3 P2, 0 P3. Reviewed job head: a9c77cad45cbbc83179781958bdf24eb0d6375da. Review evidence branch `review-multiplexer-skip` HEAD: 591e4b596409bc29683e07f5ae1fb27297149f90. The job branch/worktree was not changed; review commits contain failing tests and test-only harness support. P1 findings: disabling `terminal.multiplexer` still sends `skip_multiplexer_autostart: true`; the real canvas has no first-session notice, host reversal, or global switch. P2 findings: POSIX sh and Fish are not configured for the guard; Bash `tmux attach || tmux new` still auto-starts. Perf VM (`infraternal-perf-test`, 4 cores, CPUWeight=10000), n=1001: Bash p99 delta -1.025 ms (load 1.45/0.70/0.41); Zsh +0.844 ms (load 1.38/0.71/0.42). All five real Bash/Zsh tmux/Zellij/Oh My Zsh startup cases and manual starts passed; both deltas meet the 1 ms budget. The report's Zsh +0.463 ms was not reproduced. Static sizes: the head artifacts exactly match their caps (x86_64 21,420,912 B; AArch64 19,602,368 B). Against independently built origin/dev artifacts (x86_64 21,421,840 B; AArch64 19,594,856 B), measured deltas are -928 B and +7,512 B. The ARM claim reproduces; the reported x86 delta -1,184 B differs by 256 B. Receipts are attached above. `scripts/verify fast` on the job head exited 0. Verbatim summary: ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ```
Author
Owner

Starting continuation r4 on multiplexer-skip at a9c77cad45cbbc83179781958bdf24eb0d6375da, based on origin/dev 41a3a81abceaa4ea7457d84ee05297ca2244efcc. Read D241 and the existing #170 findings. Scope: cherry-pick and confirm the five independent regressions, fix MS-1 through MS-5 in atomic commits, run the reviewer checklist and required UI captures/perf checks, measure static sizes, run scripts/verify fast, push only this branch, and stop for delta review. Existing perf and binary receipts are recorded above; no deploy.

Starting continuation r4 on `multiplexer-skip` at `a9c77cad45cbbc83179781958bdf24eb0d6375da`, based on `origin/dev` `41a3a81abceaa4ea7457d84ee05297ca2244efcc`. Read D241 and the existing #170 findings. Scope: cherry-pick and confirm the five independent regressions, fix MS-1 through MS-5 in atomic commits, run the reviewer checklist and required UI captures/perf checks, measure static sizes, run `scripts/verify fast`, push only this branch, and stop for delta review. Existing perf and binary receipts are recorded above; no deploy.
Author
Owner

Finding: before the review-fix continuation, local origin/dev had advanced from the prior base 41a3a81abceaa4ea7457d84ee05297ca2244efcc to 650472b987dbd1fe7192248dd1367d0766c5fb79 (174 commits; current tip merges mesh autoswitch #201). The reviewed feature head a9c77cad45cbbc83179781958bdf24eb0d6375da is now 21 commits ahead and 174 behind. I’m rebasing the feature commits onto the current base before fixes; no source changes or tests have been made in this continuation yet.

Finding: before the review-fix continuation, local `origin/dev` had advanced from the prior base `41a3a81abceaa4ea7457d84ee05297ca2244efcc` to `650472b987dbd1fe7192248dd1367d0766c5fb79` (174 commits; current tip merges mesh autoswitch #201). The reviewed feature head `a9c77cad45cbbc83179781958bdf24eb0d6375da` is now 21 commits ahead and 174 behind. I’m rebasing the feature commits onto the current base before fixes; no source changes or tests have been made in this continuation yet.
Author
Owner

Rebase finding: current origin/dev already assigns Hello capability bits 6 and 7 to REMOTE_PATH_BACKUP and REMOTE_PATH_PROOF (crates/infraternal-plugin-api/src/channel.rs). The unmerged #170 branch used bit 6 for TERMINAL_MULTIPLEXER_GUARD. I will resolve the collision additively by assigning the guard bit 8 and advertising it through the current shared hello_capabilities helper; existing capability meanings remain unchanged.

Rebase finding: current `origin/dev` already assigns Hello capability bits 6 and 7 to `REMOTE_PATH_BACKUP` and `REMOTE_PATH_PROOF` (`crates/infraternal-plugin-api/src/channel.rs`). The unmerged #170 branch used bit 6 for `TERMINAL_MULTIPLEXER_GUARD`. I will resolve the collision additively by assigning the guard bit 8 and advertising it through the current shared `hello_capabilities` helper; existing capability meanings remain unchanged.
Author
Owner

Rebase finding: the final #170 size-ratchet commit was measured on origin/dev 190bf088; current origin/dev already has #201's measured ceilings (x86_64 21,320,400 B; AArch64 19,513,440 B) and its updated PROCESS rationale. I’m dropping the stale ratchet commit during rebase. I’ll build current base and branch with the shipping recipe, enforce the ≤16 KiB D243 delta, then commit new exact ceilings from those measurements.

Rebase finding: the final #170 size-ratchet commit was measured on `origin/dev` `190bf088`; current `origin/dev` already has #201's measured ceilings (x86_64 21,320,400 B; AArch64 19,513,440 B) and its updated PROCESS rationale. I’m dropping the stale ratchet commit during rebase. I’ll build current base and branch with the shipping recipe, enforce the ≤16 KiB D243 delta, then commit new exact ceilings from those measurements.
Author
Owner

Step complete: rebased the 20 D241/D198 feature commits onto current origin/dev 650472b987dbd1fe7192248dd1367d0766c5fb79; new head 863fc9ef6a2721bdc3c8050c94359c1c6e10ef32 (20 commits ahead, clean tree). Resolved current-path conflicts by retaining remote-path capability bits 6/7 and assigning the unmerged terminal guard bit 8, using the shared Hello helper, and preserving both plugin-api storage and socket-action modules. Dropped the old-base size ratchet; no implementation fixes or green tests are claimed yet. The POSIX sh red regression is compiling in the build-slot queue.

Step complete: rebased the 20 D241/D198 feature commits onto current `origin/dev` `650472b987dbd1fe7192248dd1367d0766c5fb79`; new head `863fc9ef6a2721bdc3c8050c94359c1c6e10ef32` (20 commits ahead, clean tree). Resolved current-path conflicts by retaining remote-path capability bits 6/7 and assigning the unmerged terminal guard bit 8, using the shared Hello helper, and preserving both plugin-api storage and socket-action modules. Dropped the old-base size ratchet; no implementation fixes or green tests are claimed yet. The POSIX sh red regression is compiling in the build-slot queue.
Author
Owner

Correction to the rebase completion comment: the exact new head is 863fc9ef643379b6279548dc782a4a1be8570d96. The worktree has the staged, test-only MS-1 POSIX sh regression from the review branch; the feature rebase itself was clean before that test was applied.

Correction to the rebase completion comment: the exact new head is `863fc9ef643379b6279548dc782a4a1be8570d96`. The worktree has the staged, test-only MS-1 POSIX sh regression from the review branch; the feature rebase itself was clean before that test was applied.
Author
Owner

MS-1 reproduced on the rebased head with the cherry-picked regression: real interactive /bin/sh sourced the configured ENV file and ran its automatic tmux command. Focused result: 0 passed, 1 failed, 99 filtered; assertion recorded automatic. Receipt: red-ms1.log. I’m implementing a temporary ENV wrapper that evaluates the user's configured file with both standard guards set, then removes those guards before the first prompt.

MS-1 reproduced on the rebased head with the cherry-picked regression: real interactive `/bin/sh` sourced the configured `ENV` file and ran its automatic `tmux` command. Focused result: 0 passed, 1 failed, 99 filtered; assertion recorded `automatic`. Receipt: [red-ms1.log](https://git.kayg.org/attachments/8a11eeb3-7534-4315-9717-ba5fcfaf8348). I’m implementing a temporary `ENV` wrapper that evaluates the user's configured file with both standard guards set, then removes those guards before the first prompt.
Author
Owner

MS-2 confirmed red: the real Bash regression test fails because .bashrc runs both tmux attach and tmux new during startup (attach\nnew\n); the test then proves the manual tmux manual invocation still runs (manual\n). Focused test output: red-ms2.log.

MS-2 confirmed red: the real Bash regression test fails because `.bashrc` runs both `tmux attach` and `tmux new` during startup (`attach\nnew\n`); the test then proves the manual `tmux manual` invocation still runs (`manual\n`). Focused test output: [red-ms2.log](https://git.kayg.org/attachments/1408978b-65c3-4a8c-adf0-2665eaaefeff).
Author
Owner

MS-3 confirmed red: with terminal.multiplexer disabled, opening an authenticated terminal still sends skip_multiplexer_autostart=true; the new socket regression test fails with expected Some(false), got Some(true). red-ms3.log.

MS-3 confirmed red: with `terminal.multiplexer` disabled, opening an authenticated terminal still sends `skip_multiplexer_autostart=true`; the new socket regression test fails with expected `Some(false)`, got `Some(true)`. [red-ms3.log](https://git.kayg.org/attachments/d3d0cf26-5288-421c-95c3-6e0781cd4519).
Author
Owner

MS-5 confirmed red: configure() returns no Fish startup guard and sets neither multiplexer sentinel; the focused assertion fails with Fish startup configuration installed no multiplexer guard. The VM has no Fish executable, so I will validate Fish startup arguments and hook configuration in the unit test and report the engine-test limit. red-ms5.log.

MS-5 confirmed red: `configure()` returns no Fish startup guard and sets neither multiplexer sentinel; the focused assertion fails with `Fish startup configuration installed no multiplexer guard`. The VM has no Fish executable, so I will validate Fish startup arguments and hook configuration in the unit test and report the engine-test limit. [red-ms5.log](https://git.kayg.org/attachments/4f63d3de-4d42-4711-aeef-f5852acaa9f2).
Author
Owner

Step complete: 9a6fb9e3c sorts the guarded socket_actions/storage declarations so rustfmt passes after the D198 merge; pushed to multiplexer-skip. cargo fmt --all -- --check passed. Plugin API Clippy passed; cargo test --locked -p infraternal-plugin-api --lib: 21 passed, 0 failed. plugin-api-format-gate.log.

Step complete: `9a6fb9e3c` sorts the guarded `socket_actions`/`storage` declarations so rustfmt passes after the D198 merge; pushed to `multiplexer-skip`. `cargo fmt --all -- --check` passed. Plugin API Clippy passed; `cargo test --locked -p infraternal-plugin-api --lib`: 21 passed, 0 failed. [plugin-api-format-gate.log](https://git.kayg.org/attachments/cc26b808-bff6-4c47-b239-89b6307f7646).
Author
Owner

MS-4 confirmed red on the real canvas: after the fresh production server opens its first shell, the D241 notice and Use zellij here action are absent; the accessibility assertion fails after 5 s. The attached desktop capture shows the live shell and no notice. red-ms4-notice.log desktop capture.

MS-4 confirmed red on the real canvas: after the fresh production server opens its first shell, the D241 notice and `Use zellij here` action are absent; the accessibility assertion fails after 5 s. The attached desktop capture shows the live shell and no notice. [red-ms4-notice.log](https://git.kayg.org/attachments/73554617-6287-4239-83a4-3aa09119dc26) [desktop capture](https://git.kayg.org/attachments/99686abc-36a0-4f75-9a14-752e58395a45).
Author
Owner

MS-1 follow-up: found a misspelled INFRATERNAL_SESSION reference in the new POSIX sh state assertion (shell_startup.rs), which would have made the test read unset. Corrected it and added a real dash ENV autostart/manual-start case plus sh prompt-overhead samples to the perf harness. Finding receipt. The Rust gates are queued through the build-slot wrapper.

MS-1 follow-up: found a misspelled `INFRATERNAL_SESSION` reference in the new POSIX sh state assertion (`shell_startup.rs`), which would have made the test read `unset`. Corrected it and added a real dash `ENV` autostart/manual-start case plus sh prompt-overhead samples to the perf harness. [Finding receipt](https://git.kayg.org/attachments/c7eef238-9497-4b24-a45d-b279b3881dd0). The Rust gates are queued through the build-slot wrapper.
Author
Owner

MS-1 follow-up: the temporary POSIX ENV wrapper also needed to restore the original ENV path before the first command; otherwise later interactive shells could inherit a removed wrapper file. The wrapper now restores it before sourcing, and the unit test asserts it. Finding receipt. Rust gates remain queued in the build-slot wrapper.

MS-1 follow-up: the temporary POSIX `ENV` wrapper also needed to restore the original `ENV` path before the first command; otherwise later interactive shells could inherit a removed wrapper file. The wrapper now restores it before sourcing, and the unit test asserts it. [Finding receipt](https://git.kayg.org/attachments/8c408fe8-6bca-455e-a902-a5a852df90e5). Rust gates remain queued in the build-slot wrapper.
Author
Owner

Focused Rust gate found one lint in the new test scratch-path helper: clippy::map_unwrap_or at crates/infraternal-shim/src/pty.rs:600. Replaced it with map_or_else; the attached output records the failure, and I am rerunning the gates after the correction. Gate receipt.

Focused Rust gate found one lint in the new test scratch-path helper: `clippy::map_unwrap_or` at `crates/infraternal-shim/src/pty.rs:600`. Replaced it with `map_or_else`; the attached output records the failure, and I am rerunning the gates after the correction. [Gate receipt](https://git.kayg.org/attachments/5b400ec8-3aca-40c3-8630-3a6785b385d2).
Author
Owner

MS-4 red recheck on preserved production dist: after opening Settings → Hosts, the existing Details switch is present but Skip automatic tmux and zellij start is absent; the corrected Playwright check fails only at that switch. TRACER_TEST_PORT=4220. The first pass stopped at a case-mismatched pane selector, which was corrected before this run. Log · accessible snapshot.

MS-4 red recheck on preserved production dist: after opening Settings → Hosts, the existing Details switch is present but `Skip automatic tmux and zellij start` is absent; the corrected Playwright check fails only at that switch. `TRACER_TEST_PORT=4220`. The first pass stopped at a case-mismatched pane selector, which was corrected before this run. [Log](https://git.kayg.org/attachments/e9f35f09-ca1f-4e0e-bed6-6d5cb3bdf5dc) · [accessible snapshot](https://git.kayg.org/attachments/00ba2d36-966d-4f89-913d-58414123c0a3).
Author
Owner

MS-3 test refinement: the focused server test correctly observed no skip field after the plugin was disabled; embedded.rs omits skip_multiplexer_autostart when false. The assertion had required Some(false), so I changed it to reject only Some(true), matching the wire contract. Gate output.

MS-3 test refinement: the focused server test correctly observed no skip field after the plugin was disabled; `embedded.rs` omits `skip_multiplexer_autostart` when false. The assertion had required `Some(false)`, so I changed it to reject only `Some(true)`, matching the wire contract. [Gate output](https://git.kayg.org/attachments/1e3a093e-6ba3-43a5-9225-e6a16fa31fa3).
Author
Owner

MS-5 evidence: Zellij 0.45.1's generated Fish startup checks if not set -q ZELLIJ; Fish 4.0.2 was extracted under the perf VM bench scratch directory for real-shell coverage. The harness now covers plain tmux and generated Zellij Fish startup, manual start, and Fish first-prompt overhead. Generator output: zellij-fish-autostart.txt. Measurements are pending the queued build-slot run.

MS-5 evidence: Zellij 0.45.1's generated Fish startup checks `if not set -q ZELLIJ`; Fish 4.0.2 was extracted under the perf VM bench scratch directory for real-shell coverage. The harness now covers plain tmux and generated Zellij Fish startup, manual start, and Fish first-prompt overhead. Generator output: [zellij-fish-autostart.txt](https://git.kayg.org/attachments/ff248fd0-aacc-46fd-aa41-17089b8e464c). Measurements are pending the queued build-slot run.
Author
Owner

MS-3 fix passes: the authenticated terminal open now consults persisted preferences only while terminal.multiplexer is enabled. Server clippy passed and disabled_terminal_preferences_plugin_does_not_apply_skip_to_open_session passed (1/1; log includes EXIT=0). The wire omits false fields, so the regression rejects only skip=true. server-ms3-rerun.log

MS-3 fix passes: the authenticated terminal open now consults persisted preferences only while `terminal.multiplexer` is enabled. Server clippy passed and `disabled_terminal_preferences_plugin_does_not_apply_skip_to_open_session` passed (1/1; log includes `EXIT=0`). The wire omits false fields, so the regression rejects only `skip=true`. [server-ms3-rerun.log](https://git.kayg.org/attachments/ba38421f-561f-4c86-a904-6eccb450de12)
Author
Owner

The expanded Fish real-engine harness first hit two shim clippy errors: real_startup_case crossed 100 lines and the Fish path used map().unwrap_or_else(). I extracted the shell-state assertion and changed the path fallback to map_or_else; rerunning shim clippy and tests. shim-gates-and-musl-build.log

The expanded Fish real-engine harness first hit two shim clippy errors: `real_startup_case` crossed 100 lines and the Fish path used `map().unwrap_or_else()`. I extracted the shell-state assertion and changed the path fallback to `map_or_else`; rerunning shim clippy and tests. [shim-gates-and-musl-build.log](https://git.kayg.org/attachments/1444a147-7b02-40bc-bfbe-2b51bcb874a3)
Author
Owner

Committed and pushed 09611a032 (MS-3): the terminal open path now ignores stored skip preference while terminal.multiplexer is disabled. Gate receipt: server clippy Finished dev profile; disabled_terminal_preferences_plugin_does_not_apply_skip_to_open_session — test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 295 filtered out; EXIT=0. server-ms3-rerun.log

Committed and pushed `09611a032` (MS-3): the terminal open path now ignores stored skip preference while `terminal.multiplexer` is disabled. Gate receipt: server clippy `Finished dev profile`; `disabled_terminal_preferences_plugin_does_not_apply_skip_to_open_session` — `test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 295 filtered out`; `EXIT=0`. [server-ms3-rerun.log](https://git.kayg.org/attachments/ba38421f-561f-4c86-a904-6eccb450de12)
Author
Owner

MS-4 integration finding: the default production CLI does not compile infraternal-plugin-terminal-preferences. cargo tree --package infraternal shows only infraternal-server, and the release build warned PluginRuntime::is_enabled is unused; the server dependency uses default-features = false. I’m adding the explicit removable CLI feature and enabling it in the default build before running the real production canvas. feature graph, release build log

MS-4 integration finding: the default production CLI does not compile `infraternal-plugin-terminal-preferences`. `cargo tree --package infraternal` shows only `infraternal-server`, and the release build warned `PluginRuntime::is_enabled` is unused; the server dependency uses `default-features = false`. I’m adding the explicit removable CLI feature and enabling it in the default build before running the real production canvas. [feature graph](https://git.kayg.org/attachments/f1fe818a-c361-4fe1-b287-62d7834eceb8), [release build log](https://git.kayg.org/attachments/d06aed15-05b0-42a9-be18-534055c92384)
Author
Owner

The shim rerun passes after the clippy fixes: cargo clippy -p infraternal-shim --all-targets -- -D warnings; cargo test -p infraternal-shim --lib reports 88 passed, 14 ignored, 0 failed; the x86_64 musl test binary also built (EXIT=0). The ignored real-engine matrix and its p99 measurements remain to run on the perf VM. shim-gates-r2.log

The shim rerun passes after the clippy fixes: `cargo clippy -p infraternal-shim --all-targets -- -D warnings`; `cargo test -p infraternal-shim --lib` reports 88 passed, 14 ignored, 0 failed; the x86_64 musl test binary also built (`EXIT=0`). The ignored real-engine matrix and its p99 measurements remain to run on the perf VM. [shim-gates-r2.log](https://git.kayg.org/attachments/2adfc200-c098-4d5e-b051-1ec58c8f69db)
Author
Owner

First perf-VM real-shell run: POSIX sh/tmux, Bash plain, Bash attach || new, and Bash/generated Zellij all passed. Fish 4.0.2 extracted under bench scratch could not locate its assets at /usr/share/fish, so it refused configuration and timed out before measurements. I released the perf lock; no p99 data was produced. I’m locating Fish’s supported relocatable data path and will rerun. run finding

First perf-VM real-shell run: POSIX sh/tmux, Bash plain, Bash `attach || new`, and Bash/generated Zellij all passed. Fish 4.0.2 extracted under bench scratch could not locate its assets at `/usr/share/fish`, so it refused configuration and timed out before measurements. I released the perf lock; no p99 data was produced. I’m locating Fish’s supported relocatable data path and will rerun. [run finding](https://git.kayg.org/attachments/74e8ebae-b203-4625-a5c9-97e0db594e5b)
Author
Owner

Static x86_64 release build is 21,464,144 B against the 21,320,400 B cap (+143,744 B). The enabled production terminal-preferences plugin and current branch changes need attribution and reduction before completion. Build log: production-plugin-feature-build.log.

Static x86_64 release build is 21,464,144 B against the 21,320,400 B cap (+143,744 B). The enabled production terminal-preferences plugin and current branch changes need attribution and reduction before completion. Build log: [production-plugin-feature-build.log](https://git.kayg.org/attachments/fa4678ae-6e87-4ea3-8b85-b13b5e1ac37e).
Author
Owner

The Fish asset namespace run reached the real-shell harness, but the first tmux case hit the Unix socket path limit due to the extra real-shell-r2 nesting; it produced no timing samples. I’ll rerun with the per-job scratch root. Failure receipt.

The Fish asset namespace run reached the real-shell harness, but the first tmux case hit the Unix socket path limit due to the extra `real-shell-r2` nesting; it produced no timing samples. I’ll rerun with the per-job scratch root. [Failure receipt](https://git.kayg.org/attachments/c789054b-ef5e-4416-9ff3-e3520721b7c0).
Author
Owner

The second perf VM run passed POSIX sh/tmux and Bash/tmux, then the Bash tmux attach || tmux new case exceeded tmux’s socket path limit because the fixture label was included in its scratch directory name. The harness now needs short fixture paths before it can produce p99 samples. Run log.

The second perf VM run passed POSIX sh/tmux and Bash/tmux, then the Bash `tmux attach || tmux new` case exceeded tmux’s socket path limit because the fixture label was included in its scratch directory name. The harness now needs short fixture paths before it can produce p99 samples. [Run log](https://git.kayg.org/attachments/3a07734b-2326-413c-a2e7-37fc0d98e9b6).
Author
Owner

The focused shim unit suite passed (88 passed, 14 ignored), but the integration mouse test failed because this gate command omitted CARGO_TARGET_DIR; verify-vt-native.py therefore searched the worktree target for libghostty-vt.a, although this job’s build artifacts are in scratch. I’ll make the test honor the external target directory, then rerun with CARGO_TARGET_DIR set. Gate log · Failure.

The focused shim unit suite passed (88 passed, 14 ignored), but the integration `mouse` test failed because this gate command omitted `CARGO_TARGET_DIR`; `verify-vt-native.py` therefore searched the worktree target for `libghostty-vt.a`, although this job’s build artifacts are in scratch. I’ll make the test honor the external target directory, then rerun with `CARGO_TARGET_DIR` set. [Gate log](https://git.kayg.org/attachments/893a97d9-7be7-4de3-ade4-bf8d5036b4e3) · [Failure](https://git.kayg.org/attachments/1d4d5abb-4fb0-4b85-ae10-e3763e425fe9).
Author
Owner

Clippy caught two expect_used diagnostics in the test’s external target-root fallback. The test file already permits unwrap_used for fixture setup; I’ll allow expect_used here because current_exe and its Cargo directory chain are required test invariants. Gate output.

Clippy caught two `expect_used` diagnostics in the test’s external target-root fallback. The test file already permits `unwrap_used` for fixture setup; I’ll allow `expect_used` here because `current_exe` and its Cargo directory chain are required test invariants. [Gate output](https://git.kayg.org/attachments/6bd13692-a4ac-41cd-876a-d46075c41019).
Author
Owner

The probe import also created scripts/__pycache__/evidence_path.cpython-314.pyc; I removed it and set PYTHONDONTWRITEBYTECODE=1 on the test subprocess. Probe artifacts now use the external Cargo target. Receipt.

The probe import also created `scripts/__pycache__/evidence_path.cpython-314.pyc`; I removed it and set `PYTHONDONTWRITEBYTECODE=1` on the test subprocess. Probe artifacts now use the external Cargo target. [Receipt](https://git.kayg.org/attachments/774e59d5-79a4-4a84-9392-b8b3de850d8c).
Author
Owner

Correction to the target-path note: the probe log files go under external INFRATER_EVIDENCE_DIR; only the C probe executable and Cargo artifacts go under CARGO_TARGET_DIR. The test now uses those separate paths.

Correction to the target-path note: the probe log files go under external `INFRATER_EVIDENCE_DIR`; only the C probe executable and Cargo artifacts go under `CARGO_TARGET_DIR`. The test now uses those separate paths.
Author
Owner

Perf VM run under systemd-run --user --scope -p CPUWeight=10000 reached and passed sh, Bash plain and Bash fallback cases, then Zellij panicked with Operation not permitted inside the Fish asset mount’s unprivileged user namespace. Load was 0.79 0.89 0.59 before and 0.66 0.86 0.58 after. No timing samples were produced; the perf lock is released. Run log.

Perf VM run under `systemd-run --user --scope -p CPUWeight=10000` reached and passed sh, Bash plain and Bash fallback cases, then Zellij panicked with `Operation not permitted` inside the Fish asset mount’s unprivileged user namespace. Load was 0.79 0.89 0.59 before and 0.66 0.86 0.58 after. No timing samples were produced; the perf lock is released. [Run log](https://git.kayg.org/attachments/e0dc45e0-3eee-4acf-a043-0d31b146420f).
Author
Owner

MS-4 production canvas slice: real production build tests passed (2/2); first-session notice, host “Use zellij here” action, and global switch are covered on desktop and phone. Captures: notice desktop, notice phone, switch desktop, switch phone. Test receipt: canvas-real-r2.log.

Real-engine shell matrix passed all nine cases with real tmux/Zellij, but the startup budget failed on Bash: paired p99 was 32.323 ms baseline and 33.885 ms guarded, +1.562 ms against the 1 ms limit; 1001 pairs, 4 cores, CPUWeight=10000, load before 0.03/0.29/0.40 and after 0.72/0.44/0.45. Receipt: real-shell-startup-r2d.log. I will reduce/re-measure the guard overhead before finish.

MS-4 production canvas slice: real production build tests passed (2/2); first-session notice, host “Use zellij here” action, and global switch are covered on desktop and phone. Captures: [notice desktop](https://git.kayg.org/attachments/50e46e57-a5c7-4940-8cd6-cbd94a39ef1f), [notice phone](https://git.kayg.org/attachments/6553d083-81b6-45ea-a448-46a608182d41), [switch desktop](https://git.kayg.org/attachments/fca5d81f-f03c-48b6-96f8-8ade2de4c7dd), [switch phone](https://git.kayg.org/attachments/98cdfb8f-b128-4b96-a7c5-9e2ca2d3f323). Test receipt: [canvas-real-r2.log](https://git.kayg.org/attachments/c2f3f92a-aaca-46b3-b00b-3ff280748665). Real-engine shell matrix passed all nine cases with real tmux/Zellij, but the startup budget failed on Bash: paired p99 was 32.323 ms baseline and 33.885 ms guarded, +1.562 ms against the 1 ms limit; 1001 pairs, 4 cores, CPUWeight=10000, load before 0.03/0.29/0.40 and after 0.72/0.44/0.45. Receipt: [real-shell-startup-r2d.log](https://git.kayg.org/attachments/cd5c31aa-cfb4-4263-953c-c1f77b21d1e6). I will reduce/re-measure the guard overhead before finish.
Author
Owner

Committed and pushed 1d4343863 (test(shim): keep native mouse receipts outside checkout). The native probe now follows the external Cargo target and evidence roots; it no longer writes verification artifacts into the checkout. Shim gate receipt: shim-gates-r5.log. Results: clippy passed; 88 shim unit tests, 14 ignored; detach 2 passed; native mouse probe 1 passed; process-exit 2 passed; doc tests passed.

Committed and pushed `1d4343863` (`test(shim): keep native mouse receipts outside checkout`). The native probe now follows the external Cargo target and evidence roots; it no longer writes verification artifacts into the checkout. Shim gate receipt: [shim-gates-r5.log](https://git.kayg.org/attachments/ed79555a-de6f-4f23-9e65-d2a9d948a5a5). Results: clippy passed; 88 shim unit tests, 14 ignored; detach 2 passed; native mouse probe 1 passed; process-exit 2 passed; doc tests passed.
Author
Owner

Updated real-engine run used the rebuilt r6 binary (local/VM SHA matched). All nine functional cases passed. With 1,001 paired samples on the 4-core perf VM under CPUWeight=10000, Bash p99 was 32.903 ms baseline and 35.257 ms guarded (+2.353 ms; budget 1 ms); p50 was 25.418/25.510 ms. Load was 0.00/0.04/0.37 before and 1.04/0.35/0.45 after. Receipts: focused shell tests/clippy, musl test binary build, perf run. I will reduce or re-measure Bash hook overhead before finish.

Updated real-engine run used the rebuilt `r6` binary (local/VM SHA matched). All nine functional cases passed. With 1,001 paired samples on the 4-core perf VM under CPUWeight=10000, Bash p99 was 32.903 ms baseline and 35.257 ms guarded (+2.353 ms; budget 1 ms); p50 was 25.418/25.510 ms. Load was 0.00/0.04/0.37 before and 1.04/0.35/0.45 after. Receipts: [focused shell tests/clippy](https://git.kayg.org/attachments/df69a123-0906-4628-b1ba-25ed7fc19ba7), [musl test binary build](https://git.kayg.org/attachments/a7c85fa4-83b8-454b-9505-5d97a4958fc1), [perf run](https://git.kayg.org/attachments/543470a3-e465-4650-85ac-9a09ac0b1c67). I will reduce or re-measure Bash hook overhead before finish.
Author
Owner

The direct PROMPT_COMMAND script passed all nine real-engine functional cases and improved Bash to +0.109 ms p99 (36.719/36.828 ms; p50 25.118/24.538). POSIX sh measured +0.911 ms (11.950/12.861 ms; p50 7.228/7.259). Zsh still exceeds the 1 ms budget: +2.105 ms (9.752/11.856 ms; p50 6.230/6.836), so the full test stopped before Fish timing. Four cores, CPUWeight=10000; load 0.00/0.07/0.27 before, 1.15/0.46/0.39 after. Receipts: shim tests/clippy and musl build, real shell run. The Zsh path creates four temporary startup files and chowns each; I will reduce that per-open setup and remeasure.

The direct PROMPT_COMMAND script passed all nine real-engine functional cases and improved Bash to +0.109 ms p99 (36.719/36.828 ms; p50 25.118/24.538). POSIX sh measured +0.911 ms (11.950/12.861 ms; p50 7.228/7.259). Zsh still exceeds the 1 ms budget: +2.105 ms (9.752/11.856 ms; p50 6.230/6.836), so the full test stopped before Fish timing. Four cores, CPUWeight=10000; load 0.00/0.07/0.27 before, 1.15/0.46/0.39 after. Receipts: [shim tests/clippy and musl build](https://git.kayg.org/attachments/8bb99509-9222-43b7-9f71-bb82e4e7b650), [real shell run](https://git.kayg.org/attachments/119be461-e43a-4168-983b-560396d4a3a7). The Zsh path creates four temporary startup files and chowns each; I will reduce that per-open setup and remeasure.
Author
Owner

Continuation start: branch multiplexer-skip at 1d434386330970e5313b19ffbc0f6698ebc36e32, based on origin/dev 650472b987dbd1fe7192248dd1367d0766c5fb79. Resuming the Zsh startup p99 reduction and production binary-size attribution. The focused startup unit suite passes (9 tests); broader shim gates are queued through build-slot.

Continuation start: branch `multiplexer-skip` at `1d434386330970e5313b19ffbc0f6698ebc36e32`, based on `origin/dev` `650472b987dbd1fe7192248dd1367d0766c5fb79`. Resuming the Zsh startup p99 reduction and production binary-size attribution. The focused startup unit suite passes (9 tests); broader shim gates are queued through build-slot.
Author
Owner

Finding update: the Zsh path created four private startup files; it now uses one wrapper that sources the user's files in native order and restores ZDOTDIR before the first prompt. Focused startup tests: 9 passed. Full shim gate: Clippy passed; 88 passed, 14 ignored; x86_64 musl test binaries built. Perf-VM p99 remeasurement is pending. Current head remains 1d434386330970e5313b19ffbc0f6698ebc36e32. Receipt: shim-gates-zsh-onefile-r8.log.

Finding update: the Zsh path created four private startup files; it now uses one wrapper that sources the user's files in native order and restores `ZDOTDIR` before the first prompt. Focused startup tests: 9 passed. Full shim gate: Clippy passed; 88 passed, 14 ignored; x86_64 musl test binaries built. Perf-VM p99 remeasurement is pending. Current head remains `1d434386330970e5313b19ffbc0f6698ebc36e32`. Receipt: [shim-gates-zsh-onefile-r8.log](https://git.kayg.org/attachments/259670f2-2d47-4392-9672-f1daeb8252b8).
Author
Owner

Finding: with plugin-terminal-preferences enabled, the stripped x86_64 static binary is 21,464,144 B, +145,856 B versus the feature-off branch artifact (21,318,288 B), exceeding D243's +16,384 B allowance. Cargo feature-graph inspection found no newly enabled external crates or features; symbol attribution is queued behind the build-slot pool. I’m reducing and remeasuring before the final gate.

Finding: with `plugin-terminal-preferences` enabled, the stripped x86_64 static binary is 21,464,144 B, +145,856 B versus the feature-off branch artifact (21,318,288 B), exceeding D243's +16,384 B allowance. Cargo feature-graph inspection found no newly enabled external crates or features; symbol attribution is queued behind the build-slot pool. I’m reducing and remeasuring before the final gate.
Author
Owner

Finding: the one-file Zsh real-shell run stopped in the Bash tmux attach || tmux new fixture: Bash plain startup passed, then the next PTY timed out before its prompt (real-shell-perf-vm-r8.log). I’ve queued a fresh full matrix on the perf VM to reproduce and fix it. Receipt: real-shell-perf-vm-r8.log.

Finding: the one-file Zsh real-shell run stopped in the Bash `tmux attach || tmux new` fixture: Bash plain startup passed, then the next PTY timed out before its prompt (real-shell-perf-vm-r8.log). I’ve queued a fresh full matrix on the perf VM to reproduce and fix it. Receipt: [real-shell-perf-vm-r8.log](https://git.kayg.org/attachments/2de3b300-d8fe-4ef4-8be5-c51085573450).
Author
Owner

Perf-VM rerun: the short scratch root fixed the socket-path issue; POSIX sh, Bash plain, Bash tmux attach || tmux new, and Bash/generated Zellij all passed (manual starts also passed). Fish 4.0.2 then refused to load config because its extracted tree expects a relocatable install path; no timing samples ran. I’ll install its data tree in job scratch and rerun. Load: 1.20/1.45/1.14 before, 1.25/1.45/1.14 after; scope CPUWeight=10000, user bench. Receipt: real-shell-perf-vm-r9.log.

Perf-VM rerun: the short scratch root fixed the socket-path issue; POSIX sh, Bash plain, Bash `tmux attach || tmux new`, and Bash/generated Zellij all passed (manual starts also passed). Fish 4.0.2 then refused to load config because its extracted tree expects a relocatable install path; no timing samples ran. I’ll install its data tree in job scratch and rerun. Load: 1.20/1.45/1.14 before, 1.25/1.45/1.14 after; scope CPUWeight=10000, user bench. Receipt: [real-shell-perf-vm-r9.log](https://git.kayg.org/attachments/04ada21b-acda-4fde-997b-117e84b19adc).
Author
Owner

Finding on 1d434386: the real startup benchmark passed sh at +0.395 ms p99 and Bash at -0.211 ms, but Zsh measured +1.347 ms against the 1 ms budget (1,001 samples per state; infraternal-perf-test, 4 vCPU, CPUWeight=10000; load 1.56–2.07). The run stopped before Fish and exited 101. Receipt: https://git.kayg.org/attachments/86ce675d-9fde-4255-a8dc-638948ae6a61. I am simplifying the Zsh startup wrapper and will rerun the full shell matrix.

Finding on 1d434386: the real startup benchmark passed sh at +0.395 ms p99 and Bash at -0.211 ms, but Zsh measured +1.347 ms against the 1 ms budget (1,001 samples per state; infraternal-perf-test, 4 vCPU, CPUWeight=10000; load 1.56–2.07). The run stopped before Fish and exited 101. Receipt: https://git.kayg.org/attachments/86ce675d-9fde-4255-a8dc-638948ae6a61. I am simplifying the Zsh startup wrapper and will rerun the full shell matrix.
Author
Owner

Initial x86_64 cargo bloat after setting the new preferences crate to opt-level = "s": infraternal_plugin_terminal_preferences contributes 23.6 KiB of .text, while infraternal_server is 2.5 MiB. That does not explain the earlier +145,856 B stripped delta, so I am comparing the full crate and symbol breakdown against the merge base before changing more code. Receipt: https://git.kayg.org/attachments/9365ebc2-5856-42ab-b32c-24d443b7387d.

Initial x86_64 `cargo bloat` after setting the new preferences crate to `opt-level = "s"`: `infraternal_plugin_terminal_preferences` contributes 23.6 KiB of `.text`, while `infraternal_server` is 2.5 MiB. That does not explain the earlier +145,856 B stripped delta, so I am comparing the full crate and symbol breakdown against the merge base before changing more code. Receipt: https://git.kayg.org/attachments/9365ebc2-5856-42ab-b32c-24d443b7387d.
Author
Owner

The first stripped x86_64 candidate after opt-level = "s" is 21,417,960 B, 97,560 B above the current 21,320,400 B ceiling. The profile cut 46,184 B from the prior 21,464,144 B artifact, but that is not enough. The comparison-release artifact is stale (22,273,384 B), so I am rebuilding the exact origin/dev baseline before making the next reduction. Receipt: https://git.kayg.org/attachments/f4f92579-7133-4d39-a801-46156c4e9328.

The first stripped x86_64 candidate after `opt-level = "s"` is 21,417,960 B, 97,560 B above the current 21,320,400 B ceiling. The profile cut 46,184 B from the prior 21,464,144 B artifact, but that is not enough. The `comparison-release` artifact is stale (22,273,384 B), so I am rebuilding the exact origin/dev baseline before making the next reduction. Receipt: https://git.kayg.org/attachments/f4f92579-7133-4d39-a801-46156c4e9328.
Author
Owner

Size attribution from exact merge base 650472b987: same-recipe GNU strip gives 21,327,688 B base and 21,417,960 B candidate (+90,272 B; D243 limit +16,384 B). cargo bloat attributes the largest crate deltas to std (+104,858 B), release plugin (+28,672 B), sqlx_core (+26,624 B), and terminal-preferences (+24,166 B). nm shows +73,546 B code/data net; largest symbols include SQLite pool acquire (+16,757 B), ControlActionHandler::call (+12,855 B), TerminalPreferencesPlugin::call (+12,352 B), and compiled_with_hosts (+7,668 B). No external crate feature was newly enabled. Receipts: nm attribution, base cargo-bloat. I am reducing the candidate before final gates.

Size attribution from exact merge base 650472b987dbd1fe7192248dd1367d0766c5fb79: same-recipe GNU strip gives 21,327,688 B base and 21,417,960 B candidate (+90,272 B; D243 limit +16,384 B). `cargo bloat` attributes the largest crate deltas to std (+104,858 B), release plugin (+28,672 B), sqlx_core (+26,624 B), and terminal-preferences (+24,166 B). `nm` shows +73,546 B code/data net; largest symbols include SQLite pool acquire (+16,757 B), `ControlActionHandler::call` (+12,855 B), `TerminalPreferencesPlugin::call` (+12,352 B), and `compiled_with_hosts` (+7,668 B). No external crate feature was newly enabled. Receipts: [nm attribution](https://git.kayg.org/attachments/cdb387d2-a491-47cd-936b-15fcc8e10334), [base cargo-bloat](https://git.kayg.org/attachments/0c4996b9-cd27-48a8-b435-28b8f836e0c2). I am reducing the candidate before final gates.
Author
Owner

Exact merge-base release measurement completed at 650472b987: Cargo's default stripped x86_64-unknown-linux-musl binary is 21,320,400 B, exactly the current D243 cap. Build receipt: base x86 build log. AArch64 measurement is in progress; branch size work continues.

Exact merge-base release measurement completed at 650472b987dbd1fe7192248dd1367d0766c5fb79: Cargo's default stripped x86_64-unknown-linux-musl binary is 21,320,400 B, exactly the current D243 cap. Build receipt: [base x86 build log](https://git.kayg.org/attachments/50ce8fde-1251-4547-9ce6-f89ce477abf2). AArch64 measurement is in progress; branch size work continues.
Author
Owner

Current source candidate (x86_64-unknown-linux-musl, Cargo default strip) measures 21,416,464 B versus merge base 21,320,400 B: +96,064 B, exceeding the +16,384 B allowance by 79,680 B. The action-future refactor alone did not reach the cap. Receipt: branch build log. Testing package-scoped size optimization next; the infraternal-agent profile stays speed-optimized pending terminal-open measurements.

Current source candidate (x86_64-unknown-linux-musl, Cargo default strip) measures 21,416,464 B versus merge base 21,320,400 B: +96,064 B, exceeding the +16,384 B allowance by 79,680 B. The action-future refactor alone did not reach the cap. Receipt: [branch build log](https://git.kayg.org/attachments/0e05b31e-79ca-4984-8b0c-42f14f4c247b). Testing package-scoped size optimization next; the infraternal-agent profile stays speed-optimized pending terminal-open measurements.
Author
Owner

Exact merge-base AArch64 release measurement completed at 650472b987: Cargo's default stripped aarch64-unknown-linux-musl binary is 19,513,440 B, exactly the current D243 cap. Both merge-base caps now have same-recipe artifacts: x86_64 21,320,400 B and AArch64 19,513,440 B. Receipt: base AArch64 build log.

Exact merge-base AArch64 release measurement completed at 650472b987dbd1fe7192248dd1367d0766c5fb79: Cargo's default stripped aarch64-unknown-linux-musl binary is 19,513,440 B, exactly the current D243 cap. Both merge-base caps now have same-recipe artifacts: x86_64 21,320,400 B and AArch64 19,513,440 B. Receipt: [base AArch64 build log](https://git.kayg.org/attachments/e2ee186d-917c-4714-96b8-c3226e335790).
Author
Owner

The package-scoped opt-level=z candidate (server, terminal-preferences, release metadata and host-facts; infraternal-agent remains s) is 21,169,104 B on x86_64. It saves 247,360 B versus the same-source s candidate (21,416,464 B) and is 151,296 B below the merge-base cap. Receipt: size-profile candidate build. I’m checking terminal-open latency with the preference plugin on/off and comparing s against z before keeping this profile.

The package-scoped `opt-level=z` candidate (server, terminal-preferences, release metadata and host-facts; infraternal-agent remains `s`) is 21,169,104 B on x86_64. It saves 247,360 B versus the same-source `s` candidate (21,416,464 B) and is 151,296 B below the merge-base cap. Receipt: [size-profile candidate build](https://git.kayg.org/attachments/b410046b-296f-40dc-9cb9-26d9897fd925). I’m checking terminal-open latency with the preference plugin on/off and comparing `s` against `z` before keeping this profile.
Author
Owner

Perf test launch diagnosis: the server test binary built for the build host is a PIE using a Nix glibc interpreter absent on the perf VM (systemd-run: “Failed to execute: No such file or directory”; file reports /nix/store/.../ld-linux-x86-64.so.2). It produced no timing data. I’m rebuilding the measurement binaries for static musl before retrying under the perf lock. Receipt: failed launch log.

Perf test launch diagnosis: the server test binary built for the build host is a PIE using a Nix glibc interpreter absent on the perf VM (`systemd-run`: “Failed to execute: No such file or directory”; `file` reports `/nix/store/.../ld-linux-x86-64.so.2`). It produced no timing data. I’m rebuilding the measurement binaries for static musl before retrying under the perf lock. Receipt: [failed launch log](https://git.kayg.org/attachments/c36ea411-e0a4-4772-a2b8-97a42099c74d).
Author
Owner

Perf VM measurement is queued on /var/lock/perf-bench.lock via flock -w 3600; another job still owns the lock, so no timing run has started. The queued server-open comparison will begin when the current lock holder releases it.

Perf VM measurement is queued on `/var/lock/perf-bench.lock` via `flock -w 3600`; another job still owns the lock, so no timing run has started. The queued server-open comparison will begin when the current lock holder releases it.
Author
Owner

The narrower x86_64 size candidate uses opt-level = "z" only for infraternal-server and infraternal-plugin-terminal-preferences; infraternal-agent and unrelated release/host-facts packages retain s. Stripped static binary: 21,192,080 B versus the 21,320,400 B merge-base baseline (−128,320 B, within D243). Build receipt: branch-size-z-server-pref-x86-build.log. Real terminal-open p99 comparison and AArch64 gate remain pending.

The narrower x86_64 size candidate uses `opt-level = "z"` only for `infraternal-server` and `infraternal-plugin-terminal-preferences`; `infraternal-agent` and unrelated release/host-facts packages retain `s`. Stripped static binary: 21,192,080 B versus the 21,320,400 B merge-base baseline (−128,320 B, within D243). Build receipt: branch-size-z-server-pref-x86-build.log. Real terminal-open p99 comparison and AArch64 gate remain pending.
Author
Owner

Production-build canvas verification passed: the real-canvas Playwright notice/action and global Hosts switch tests both passed (2/2, log attached). Fresh desktop and phone screenshots for the notice and switch are attached. They are rendered by the production tracer bundle and real server binary; no timing specs were run on the build host.

Production-build canvas verification passed: the real-canvas Playwright notice/action and global Hosts switch tests both passed (2/2, log attached). Fresh desktop and phone screenshots for the notice and switch are attached. They are rendered by the production tracer bundle and real server binary; no timing specs were run on the build host.
Author
Owner

Real perf-VM matrix passed: tmux/Zellij auto-start was skipped and manual start worked in POSIX sh ENV, Bash plain and tmux attach || tmux new, Bash generated Zellij, Fish plain and generated Zellij, Zsh plain, oh-my-zsh tmux, and generated Zellij. Guarded-minus-baseline first-prompt p99 deltas (1,001 samples/shell, 4 cores, CPUWeight=10000, infraternal-perf-test): sh −0.880 ms (load 1.14/1.51/1.30); Bash +0.178 ms (1.16/1.45/1.29); Zsh +0.905 ms (1.12/1.43/1.29); Fish −7.354 ms (1.78/1.58/1.36). All are within the 1 ms overhead budget. Receipt attached.

Real perf-VM matrix passed: tmux/Zellij auto-start was skipped and manual start worked in POSIX sh ENV, Bash plain and `tmux attach || tmux new`, Bash generated Zellij, Fish plain and generated Zellij, Zsh plain, oh-my-zsh tmux, and generated Zellij. Guarded-minus-baseline first-prompt p99 deltas (1,001 samples/shell, 4 cores, CPUWeight=10000, infraternal-perf-test): sh −0.880 ms (load 1.14/1.51/1.30); Bash +0.178 ms (1.16/1.45/1.29); Zsh +0.905 ms (1.12/1.43/1.29); Fish −7.354 ms (1.78/1.58/1.36). All are within the 1 ms overhead budget. Receipt attached.
Author
Owner

Cherry-picked the independent review regression commits onto a disposable checkout at a9c77cad4 and confirmed the pre-fix failures: POSIX sh ran the automatic tmux command; Bash ran attach and new before manual start; Fish installed no guard. Receipts: sh, Bash, Fish. The disabled-plugin and real-UI baseline cases are running next.

Cherry-picked the independent review regression commits onto a disposable checkout at a9c77cad4 and confirmed the pre-fix failures: POSIX sh ran the automatic tmux command; Bash ran `attach` and `new` before manual start; Fish installed no guard. Receipts: [sh](https://git.kayg.org/attachments/9f433fc1-0492-4c04-b658-c12e8016f7d4), [Bash](https://git.kayg.org/attachments/d4ca96de-2bd4-44b1-9fb0-c07c8456f1ee), [Fish](https://git.kayg.org/attachments/52da4eeb-34e2-4599-8c97-c0fa1914a50d). The disabled-plugin and real-UI baseline cases are running next.
Author
Owner

MS-3 red reproduction confirmed on the cherry-picked a9c77cad4 review checkout: with terminal.multiplexer disabled, terminal.open still forwarded skip_multiplexer_autostart=true; the regression failed with expected Some(false), got Some(true). Receipt: disabled-plugin test. The branch fix now gates the preference read on the compiled plugin feature; current-branch green verification follows.

MS-3 red reproduction confirmed on the cherry-picked a9c77cad4 review checkout: with `terminal.multiplexer` disabled, `terminal.open` still forwarded `skip_multiplexer_autostart=true`; the regression failed with expected `Some(false)`, got `Some(true)`. Receipt: [disabled-plugin test](https://git.kayg.org/attachments/b45f6cf4-a222-4885-8837-8955b4fb2e96). The branch fix now gates the preference read on the compiled plugin feature; current-branch green verification follows.
Author
Owner

D241 copy used in the real canvas: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. The toast action stores skip_autostart=false for that host; the switch in Settings → Hosts stores the account-wide value.

D241 copy used in the real canvas: “zellij start skipped: infraternal keeps this session for you · [Use zellij here]”. The toast action stores `skip_autostart=false` for that host; the switch in Settings → Hosts stores the account-wide value.
Author
Owner

MS-4 red reproduction confirmed on the cherry-picked a9c77cad4 real-canvas tests: the first-shell D241 notice/action was absent, and the global multiplexer switch locator was absent. Both are failing assertions against a production tracer build and real server; logs: notice, global switch. The current branch passes these two tests with fresh phone and desktop captures already attached above.

MS-4 red reproduction confirmed on the cherry-picked a9c77cad4 real-canvas tests: the first-shell D241 notice/action was absent, and the global multiplexer switch locator was absent. Both are failing assertions against a production tracer build and real server; logs: [notice](https://git.kayg.org/attachments/8c5155a6-a7ef-4efc-9d2c-8a2beefd1ba3), [global switch](https://git.kayg.org/attachments/c5a296d2-1e12-43b4-aac3-27a2514b7631). The current branch passes these two tests with fresh phone and desktop captures already attached above.
Author
Owner

The first real-pool server timing attempt reached the request path and caught a stale harness expectation: plugin-off opens now omit skip_multiplexer_autostart (MS-3), while the benchmark asserted explicit false. This is the intended wire contract; I updated the harness to expect absent when off and true when on. No timing was recorded in this attempt. Receipt: server benchmark harness assertion.

The first real-pool server timing attempt reached the request path and caught a stale harness expectation: plugin-off opens now omit `skip_multiplexer_autostart` (MS-3), while the benchmark asserted explicit `false`. This is the intended wire contract; I updated the harness to expect absent when off and `true` when on. No timing was recorded in this attempt. Receipt: [server benchmark harness assertion](https://git.kayg.org/attachments/741b758b-5558-4c4b-920d-989161e739a2).
Author
Owner

MS-3 green on current branch 1d434386330970e5313b19ffbc0f6698ebc36e32: after a clean scratch-target build, disabled_terminal_preferences_plugin_does_not_apply_skip_to_open_session passed (1 passed, 0 failed; 0.42s). With the plugin switched off, the open request omits skip_multiplexer_autostart. Receipt: server test.

MS-3 green on current branch `1d434386330970e5313b19ffbc0f6698ebc36e32`: after a clean scratch-target build, `disabled_terminal_preferences_plugin_does_not_apply_skip_to_open_session` passed (1 passed, 0 failed; 0.42s). With the plugin switched off, the open request omits `skip_multiplexer_autostart`. Receipt: [server test](https://git.kayg.org/attachments/fb3c75ee-cf99-45ea-a3fe-b944813d8553).
Author
Owner

Focused current-source checks are green: terminal-preferences plugin tests 6/6; shell startup unit tests 9/9, including POSIX ENV, Bash attach || new, Fish release hook, Bash hook reassignment, and manual starts. Receipts: preferences, shell startup.

Focused current-source checks are green: terminal-preferences plugin tests 6/6; shell startup unit tests 9/9, including POSIX `ENV`, Bash `attach || new`, Fish release hook, Bash hook reassignment, and manual starts. Receipts: [preferences](https://git.kayg.org/attachments/8117818a-5089-496f-915c-8e6c3f568cb0), [shell startup](https://git.kayg.org/attachments/79a5b4ed-588c-4157-ab2b-1adb2a1af294).
Author
Owner

Benchmark-harness lint finding resolved: clippy rejected a percentile helper declared after test statements. I moved it to module scope and made the 1,001-sample comparisons alternate off/on order; cargo fmt --all -- --check and focused clippy for shim, server (terminal-preferences enabled), and the preferences plugin pass. Receipts: initial lint, green rerun.

Benchmark-harness lint finding resolved: clippy rejected a percentile helper declared after test statements. I moved it to module scope and made the 1,001-sample comparisons alternate off/on order; `cargo fmt --all -- --check` and focused clippy for shim, server (terminal-preferences enabled), and the preferences plugin pass. Receipts: [initial lint](https://git.kayg.org/attachments/3b112e94-c0a7-4d8a-8572-90d7e31c124b), [green rerun](https://git.kayg.org/attachments/48db2024-fb63-448f-9974-1171d8a17910).
Author
Owner

Shell guard step committed and pushed: d4114f5b0. The current shim startup suite passes 9/9, covering POSIX ENV, Bash attach fallback and prompt-hook reassignment, Fish guard cleanup, and manual starts; focused Clippy and fmt pass. Receipts: tests, clippy.

Shell guard step committed and pushed: `d4114f5b0`. The current shim startup suite passes 9/9, covering POSIX `ENV`, Bash attach fallback and prompt-hook reassignment, Fish guard cleanup, and manual starts; focused Clippy and fmt pass. Receipts: [tests](https://git.kayg.org/attachments/79a5b4ed-588c-4157-ab2b-1adb2a1af294), [clippy](https://git.kayg.org/attachments/48db2024-fb63-448f-9974-1171d8a17910).
Author
Owner

MS-3 server fix committed and pushed: 66642edec. With terminal.multiplexer disabled, the terminal-open route omits skip_multiplexer_autostart; the regression passed 1/1, and preferences tests passed 6/6. Focused Clippy and fmt pass. The real-pool profile comparison remains queued behind the perf VM lock. Receipts: disabled-plugin regression, preferences tests, clippy.

MS-3 server fix committed and pushed: `66642edec`. With `terminal.multiplexer` disabled, the terminal-open route omits `skip_multiplexer_autostart`; the regression passed 1/1, and preferences tests passed 6/6. Focused Clippy and fmt pass. The real-pool profile comparison remains queued behind the perf VM lock. Receipts: [disabled-plugin regression](https://git.kayg.org/attachments/fb3c75ee-cf99-45ea-a3fe-b944813d8553), [preferences tests](https://git.kayg.org/attachments/8117818a-5089-496f-915c-8e6c3f568cb0), [clippy](https://git.kayg.org/attachments/48db2024-fb63-448f-9974-1171d8a17910).
Author
Owner

MS-4 UI slice committed and pushed: 23a2442fe. The production real-canvas tests pass 2/2; tracer TypeScript check passes. The D241 notice/action and global Hosts switch are captured on desktop and phone: notice desktop, notice phone, switch desktop, switch phone. Receipts: canvas tests, type check.

MS-4 UI slice committed and pushed: `23a2442fe`. The production real-canvas tests pass 2/2; tracer TypeScript check passes. The D241 notice/action and global Hosts switch are captured on desktop and phone: [notice desktop](https://git.kayg.org/attachments/50e46e57-a5c7-4940-8cd6-cbd94a39ef1f), [notice phone](https://git.kayg.org/attachments/6553d083-81b6-45ea-a448-46a608182d41), [switch desktop](https://git.kayg.org/attachments/fca5d81f-f03c-48b6-96f8-8ade2de4c7dd), [switch phone](https://git.kayg.org/attachments/98cdfb8f-b128-4b96-a7c5-9e2ca2d3f323). Receipts: [canvas tests](https://git.kayg.org/attachments/c2f3f92a-aaca-46b3-b00b-3ff280748665), [type check](https://git.kayg.org/attachments/ae3c3bd8-2b09-4b13-9f92-4d26ef402dad).
Author
Owner

Measured server terminal-open path under the s profile on infraternal-perf-test (4 cores, CPUWeight=10000), using a real SQLite WAL pool and 1,001 samples per state. Disabled/enabled p50: 719/800 µs; p99: 5,226/5,293 µs; enabled delta +67 µs. Load average was 1.94/1.57/1.45 before and after. The z profile run is next for the same alternating 100-request-block harness. Receipt: s profile measurement.

Measured server terminal-open path under the `s` profile on infraternal-perf-test (4 cores, CPUWeight=10000), using a real SQLite WAL pool and 1,001 samples per state. Disabled/enabled p50: 719/800 µs; p99: 5,226/5,293 µs; enabled delta +67 µs. Load average was 1.94/1.57/1.45 before and after. The `z` profile run is next for the same alternating 100-request-block harness. Receipt: [s profile measurement](https://git.kayg.org/attachments/def536ab-3f95-4f09-beb9-7d0044aca05c).
Author
Owner

Default CLI feature wiring committed and pushed: 964812275. The production default set now includes the optional terminal-preferences plugin; no-default builds still compile it out. Default cargo check passed and no-default CLI tests passed 25/25. Receipts: default check, no-default tests.

Default CLI feature wiring committed and pushed: `964812275`. The production default set now includes the optional terminal-preferences plugin; no-default builds still compile it out. Default `cargo check` passed and no-default CLI tests passed 25/25. Receipts: [default check](https://git.kayg.org/attachments/03f7a490-cd93-4452-ab59-c948b304a6ce), [no-default tests](https://git.kayg.org/attachments/92531cf8-24c8-456d-a94b-97a7d3d6656e).
Author
Owner

Protocol docs committed and pushed: b75b887e9. The wire contract records Hello bit 8 (preserving current bit 6/7 assignments) and the optional field; the shim contract documents the four shell startup hooks and manual-start boundary. git diff --cached --check passed.

Protocol docs committed and pushed: `b75b887e9`. The wire contract records Hello bit 8 (preserving current bit 6/7 assignments) and the optional field; the shim contract documents the four shell startup hooks and manual-start boundary. `git diff --cached --check` passed.
Author
Owner

Terminal-preferences code-size trim committed and pushed: b01aa992c. Its socket handler now returns the existing operation directly, removing the redundant async wrapper; preference tests passed 6/6 and focused Clippy/fmt pass. Static size and s/z terminal-open measurements are running with this source. Receipts: plugin tests, clippy.

Terminal-preferences code-size trim committed and pushed: `b01aa992c`. Its socket handler now returns the existing operation directly, removing the redundant async wrapper; preference tests passed 6/6 and focused Clippy/fmt pass. Static size and `s`/`z` terminal-open measurements are running with this source. Receipts: [plugin tests](https://git.kayg.org/attachments/8117818a-5089-496f-915c-8e6c3f568cb0), [clippy](https://git.kayg.org/attachments/48db2024-fb63-448f-9974-1171d8a17910).
Author
Owner

D243 feature-graph finding: compared cargo tree -e features for origin/dev 650472b9 and the default CLI at b01aa992c. The branch adds the existing internal terminal-preferences plugin package; the normalized external graph adds no crates and no external crate features. Cargo.lock is unchanged. Receipt: feature graph comparison.

D243 feature-graph finding: compared `cargo tree -e features` for origin/dev `650472b9` and the default CLI at `b01aa992c`. The branch adds the existing internal terminal-preferences plugin package; the normalized external graph adds no crates and no external crate features. Cargo.lock is unchanged. Receipt: [feature graph comparison](https://git.kayg.org/attachments/33df9876-092a-4068-b7d8-20bcd7990035).
Author
Owner

z profile measurements completed on infraternal-perf-test (4 cores, CPUWeight=10000). The real-pool server terminal-open benchmark used 1,001 samples per state: disabled p50/p99 672/2,505 µs; enabled 716/3,343 µs; enabled p99 delta +838 µs. Load average 1.03/1.37/1.43 before and 1.03/1.36/1.43 after. One repeat is planned because the delta is near 1 ms. The same-source stripped static x86_64 shipping binary is 21,192,080 B, -128,320 B versus origin/dev 21,320,400 B. Receipts: z open measurement, static build.

`z` profile measurements completed on infraternal-perf-test (4 cores, CPUWeight=10000). The real-pool server terminal-open benchmark used 1,001 samples per state: disabled p50/p99 672/2,505 µs; enabled 716/3,343 µs; enabled p99 delta +838 µs. Load average 1.03/1.37/1.43 before and 1.03/1.36/1.43 after. One repeat is planned because the delta is near 1 ms. The same-source stripped static x86_64 shipping binary is 21,192,080 B, -128,320 B versus origin/dev 21,320,400 B. Receipts: [z open measurement](https://git.kayg.org/attachments/a991e802-4784-4259-a9e9-c1c88a239a37), [static build](https://git.kayg.org/attachments/7d84e4dc-4fca-4d3f-a3c0-5f5dedb5c8b9).
Author
Owner

Rebased the 29 atomic multiplexer-skip commits onto origin/dev 3b2183eaa (base 3b2183eaac); no conflicts. New head: 7c5ffad3ad. Re-running touched Rust gates and final size/performance checks against this base.

Rebased the 29 atomic multiplexer-skip commits onto origin/dev 3b2183eaa (base 3b2183eaac8a9d8cc52a922dfbbbaecf895fd854); no conflicts. New head: 7c5ffad3ad7ebc511dabb72c714d84c331388e79. Re-running touched Rust gates and final size/performance checks against this base.
Author
Owner

Repeat terminal-open profile measurement: s measured p99 off=2,831 µs, on=5,016 µs, delta=+2,185 µs (1,001 samples/state; 4-core infraternal-perf-test; CPUWeight=10000; load 0.50/1.00/1.21 before and after). This exceeds the 1 ms p99 budget, so the server and terminal-preferences packages use z. The first z run measured +838 µs; its repeat is pending. Receipt: terminal-open-perf-s-repeat.log.

Repeat terminal-open profile measurement: `s` measured p99 off=2,831 µs, on=5,016 µs, delta=+2,185 µs (1,001 samples/state; 4-core infraternal-perf-test; CPUWeight=10000; load 0.50/1.00/1.21 before and after). This exceeds the 1 ms p99 budget, so the server and terminal-preferences packages use `z`. The first `z` run measured +838 µs; its repeat is pending. Receipt: [terminal-open-perf-s-repeat.log](https://git.kayg.org/attachments/d4caad64-02c9-4349-814c-89d7a0dffb08).
Author
Owner

Repeat z terminal-open measurement passed the 1 ms p99 budget: 1,001 samples/state; off p50/p99=662/2,753 µs, on=680/2,234 µs, delta=−519 µs; 4-core infraternal-perf-test, CPUWeight=10000, load 0.64/1.01/1.19 before and 0.67/1.01/1.19 after. The first z run was off=672/2,505 µs and on=716/3,343 µs, delta=+838 µs (also under budget). Receipt: terminal-open-perf-z-repeat.log.

Repeat `z` terminal-open measurement passed the 1 ms p99 budget: 1,001 samples/state; off p50/p99=662/2,753 µs, on=680/2,234 µs, delta=−519 µs; 4-core infraternal-perf-test, CPUWeight=10000, load 0.64/1.01/1.19 before and 0.67/1.01/1.19 after. The first `z` run was off=672/2,505 µs and on=716/3,343 µs, delta=+838 µs (also under budget). Receipt: [terminal-open-perf-z-repeat.log](https://git.kayg.org/attachments/b24c5104-2110-4596-9b9e-193308417bd0).
Author
Owner

Same-profile normalized x86_64 static comparison found +147,680 B: origin/dev 3b2183e at 21,075,216 B versus multiplexer-skip 7c5ffad at 21,222,896 B (both server z; candidate also includes terminal-preferences z). This is over the D243 +16 KiB limit. The shipping branch profile (z) is 21,222,896 B, 77,120 B below the origin/dev s-profile cap of 21,300,016 B, but I’m tracing same-profile symbol growth before accepting the ratchet. Both images are stripped static PIEs and pass the production-trust check. Receipts: comparison, base build, branch build.

Same-profile normalized x86_64 static comparison found +147,680 B: origin/dev 3b2183e at 21,075,216 B versus multiplexer-skip 7c5ffad at 21,222,896 B (both server `z`; candidate also includes terminal-preferences `z`). This is over the D243 +16 KiB limit. The shipping branch profile (`z`) is 21,222,896 B, 77,120 B below the origin/dev `s`-profile cap of 21,300,016 B, but I’m tracing same-profile symbol growth before accepting the ratchet. Both images are stripped static PIEs and pass the production-trust check. Receipts: [comparison](https://git.kayg.org/attachments/7b6c1d3d-e9de-4b0f-a953-cd998aeb6ee0), [base build](https://git.kayg.org/attachments/150e8be1-0712-4f76-b5ac-0d9c82cbdcf2), [branch build](https://git.kayg.org/attachments/9ddd8cba-8297-4956-b201-32003e79c899).
Author
Owner

The matched-profile cargo bloat --crates reports attribute the x86_64 .text change: the new terminal-preferences crate is 21.1 KiB; infraternal_plugin_api is 60.0 KiB vs 54.4 KiB (+5.6); sqlx_core is 212.7 KiB vs 185.4 KiB (+27.3); infraternal_agent is +1.4 KiB and infraternal_shim +6.5 KiB. infraternal_server rounds to 2.2 MiB in both reports. The graph comparison already attached to #170 found no external dependency or feature changes. These are diagnostic same-profile figures; the shipping branch artifact uses the measured z profile and is 77,120 B smaller than origin/dev's exact x86_64 default ceiling. Reports: base, branch.

The matched-profile `cargo bloat --crates` reports attribute the x86_64 `.text` change: the new terminal-preferences crate is 21.1 KiB; `infraternal_plugin_api` is 60.0 KiB vs 54.4 KiB (+5.6); `sqlx_core` is 212.7 KiB vs 185.4 KiB (+27.3); `infraternal_agent` is +1.4 KiB and `infraternal_shim` +6.5 KiB. `infraternal_server` rounds to 2.2 MiB in both reports. The graph comparison already attached to #170 found no external dependency or feature changes. These are diagnostic same-profile figures; the shipping branch artifact uses the measured `z` profile and is 77,120 B smaller than origin/dev's exact x86_64 default ceiling. Reports: [base](https://git.kayg.org/attachments/6876d498-4b64-46dc-9cdb-0020d2b0fa91), [branch](https://git.kayg.org/attachments/7ea228f7-b884-44ef-9076-2f43433417ab).
Author
Owner

Rebased static size measurements are complete. With the shipping z profiles, x86_64 is 21,222,896 B (−77,120 B vs origin/dev's 21,300,016 B ceiling) and AArch64 is 19,341,600 B (−158,776 B vs 19,500,376 B). Both are stripped static images and pass production-trust checks. Exact caps and docs are being ratcheted to these measured bytes. Receipts: results, AArch64 build.

Rebased static size measurements are complete. With the shipping `z` profiles, x86_64 is 21,222,896 B (−77,120 B vs origin/dev's 21,300,016 B ceiling) and AArch64 is 19,341,600 B (−158,776 B vs 19,500,376 B). Both are stripped static images and pass production-trust checks. Exact caps and docs are being ratcheted to these measured bytes. Receipts: [results](https://git.kayg.org/attachments/0d530096-1f10-4090-8e24-1dc2f0054816), [AArch64 build](https://git.kayg.org/attachments/9ee416ad-b78d-4da8-81f4-9462f6ad2b5b).
Author
Owner

Committed the measured z profile and exact size ratchet: f4062dfb9. x86_64 is 21,222,896 B (−77,120 B vs origin/dev); AArch64 is 19,341,600 B (−158,776 B). Weighted terminal-open p99 deltas were +838 µs and −519 µs with z; the repeat s run was +2,185 µs. scripts/verify iterate is running on this head.

Committed the measured `z` profile and exact size ratchet: f4062dfb9. x86_64 is 21,222,896 B (−77,120 B vs origin/dev); AArch64 is 19,341,600 B (−158,776 B). Weighted terminal-open p99 deltas were +838 µs and −519 µs with `z`; the repeat `s` run was +2,185 µs. `scripts/verify iterate` is running on this head.
Author
Owner

Post-rebase workspace clippy exposed a test compile error: two remote_listener_tests.rs calls at lines 273 and 556 still use the old one-argument respond helper; it now requires expects_startup_guard. These remote-listener fixtures do not load terminal preferences, so I’m updating both to pass false and rerunning the gate. Diagnostic: verify-iterate.log.

Post-rebase workspace clippy exposed a test compile error: two `remote_listener_tests.rs` calls at lines 273 and 556 still use the old one-argument `respond` helper; it now requires `expects_startup_guard`. These remote-listener fixtures do not load terminal preferences, so I’m updating both to pass `false` and rerunning the gate. Diagnostic: [verify-iterate.log](https://git.kayg.org/attachments/b16c7c79-c135-4068-940b-7b87f6f10266).
Author
Owner

Committed the remote listener fixture update as b414cf508. The two respond calls now pass false, matching the existing no-preferences expectations. Focused listener tests pass 7/7; remote server clippy and cargo fmt --all --check pass. Full scripts/verify iterate is rerunning. Receipts: tests, clippy.

Committed the remote listener fixture update as b414cf508. The two `respond` calls now pass `false`, matching the existing no-preferences expectations. Focused listener tests pass 7/7; remote server clippy and `cargo fmt --all --check` pass. Full `scripts/verify iterate` is rerunning. Receipts: [tests](https://git.kayg.org/attachments/35694335-e3c7-42da-83ac-f4e326f2baf1), [clippy](https://git.kayg.org/attachments/150cd4cf-6f8b-47e7-945d-6f427e4fd2e2).
Author
Owner

Full scripts/verify iterate passed on head b414cf508f. The focused RemoteListeners suite passed 7/7; server clippy and cargo fmt --all --check passed. The disabled-plugin and authenticated settings-route regressions passed in the full server suite. Full log: verify-iterate-final.log

Full `scripts/verify iterate` passed on head b414cf508f87e6d8e2de157df9a562d99e57e6cb. The focused RemoteListeners suite passed 7/7; server clippy and `cargo fmt --all --check` passed. The disabled-plugin and authenticated settings-route regressions passed in the full server suite. Full log: [verify-iterate-final.log](https://git.kayg.org/attachments/33b8290d-7ce8-449a-b8ea-3cf6f8681d33)
Author
Owner

The full scripts/verify iterate gate passed on b414cf508f. The required final scripts/verify fast is queued through build-slot; all four shared slots remain occupied by other verification jobs. No fast checks have started yet; this job is waiting for a slot to free.

The full `scripts/verify iterate` gate passed on b414cf508f87e6d8e2de157df9a562d99e57e6cb. The required final `scripts/verify fast` is queued through build-slot; all four shared slots remain occupied by other verification jobs. No fast checks have started yet; this job is waiting for a slot to free.
Author
Owner

First scripts/verify fast on b414cf508f exited 1. fmt, CLI compile-out, clippy, workspace tests, cargo-deny and AArch64 static checks passed. x86_64 static size was 21,206,512 bytes against the 21,222,896-byte ceiling (delta -16,384; ratchet required); AArch64 was 19,341,600 against 19,341,600 (delta 0). The static metadata review then failed on both targets because the binary contained the Cargo registry root. Full output: verify-fast-final.log

First `scripts/verify fast` on b414cf508f87e6d8e2de157df9a562d99e57e6cb exited 1. fmt, CLI compile-out, clippy, workspace tests, cargo-deny and AArch64 static checks passed. x86_64 static size was 21,206,512 bytes against the 21,222,896-byte ceiling (delta -16,384; ratchet required); AArch64 was 19,341,600 against 19,341,600 (delta 0). The static metadata review then failed on both targets because the binary contained the Cargo registry root. Full output: [verify-fast-final.log](https://git.kayg.org/attachments/32b9154c-ba4c-405c-956c-6d8160357584)
Author
Owner

A clean release rebuild with SCCACHE_DISABLE=1 ruled out stale object files: both static builds completed, but the binaries still contained dependency file!() strings under /home/kayg/.cargo/registry/src/. Measured sizes were x86_64 21,181,936 bytes and AArch64 19,296,544 bytes. The compiler driver now explicitly requests --remap-path-scope=all; a clean rebuild is queued to verify the path fix. Receipt: static-clean-rebuild.log

A clean release rebuild with `SCCACHE_DISABLE=1` ruled out stale object files: both static builds completed, but the binaries still contained dependency `file!()` strings under `/home/kayg/.cargo/registry/src/`. Measured sizes were x86_64 21,181,936 bytes and AArch64 19,296,544 bytes. The compiler driver now explicitly requests `--remap-path-scope=all`; a clean rebuild is queued to verify the path fix. Receipt: [static-clean-rebuild.log](https://git.kayg.org/attachments/e78f6302-2064-4dae-8030-6abc90284413)
Author
Owner

Finding: the clean x86_64 static artifact still contains 165 raw registry path byte occurrences after a clean release rebuild and explicit --remap-path-scope=all. The extracted mime rlib codegen object has 0, while its lib.rmeta has 6; a direct rustc base64 probe maps its source to /cargo. Evidence and exact paths: registry-path-localization.txt. I am tracing Cargo's dependency invocation and final LTO before changing the wrapper or metadata gate.

Finding: the clean x86_64 static artifact still contains 165 raw registry path byte occurrences after a clean release rebuild and explicit `--remap-path-scope=all`. The extracted `mime` rlib codegen object has 0, while its `lib.rmeta` has 6; a direct rustc base64 probe maps its source to `/cargo`. Evidence and exact paths: [registry-path-localization.txt](https://git.kayg.org/attachments/b23f3b10-ace4-4255-a4b6-b0df91fdb04d). I am tracing Cargo's dependency invocation and final LTO before changing the wrapper or metadata gate.
Author
Owner

Correction to the previous localization note: the raw dependency metadata came from sccache cache entries, not the link/LTO path. With RUSTC_WRAPPER= and only mime rebuilt, its rmeta changed from 6 raw/0 mapped registry paths to 0 raw/4 mapped. scripts/static-cargo now fingerprints .cargo/rustc.sh with the existing native wrapper in SCCACHE_EXTRAFILES; I am verifying the cache-enabled rebuild before rebuilding both shipping artifacts.

Correction to the previous localization note: the raw dependency metadata came from sccache cache entries, not the link/LTO path. With `RUSTC_WRAPPER=` and only `mime` rebuilt, its rmeta changed from 6 raw/0 mapped registry paths to 0 raw/4 mapped. `scripts/static-cargo` now fingerprints `.cargo/rustc.sh` with the existing native wrapper in `SCCACHE_EXTRAFILES`; I am verifying the cache-enabled rebuild before rebuilding both shipping artifacts.
Author
Owner

Finding confirmed and fix verified: sccache reused pre-remap Rust dependency metadata because the remap flags were appended inside .cargo/rustc.sh after sccache formed its key. scripts/static-cargo now fingerprints .cargo/rustc.sh together with .cargo/musl-cc.sh. A cache-enabled mime_guess build completed in 0.54s; rebuilt mime rmeta now has 0 raw and 4 remapped registry paths (was 6 raw/0 mapped). Receipt: static-cache-key-probe.txt. I am rebuilding the two shipping targets with this driver now.

Finding confirmed and fix verified: sccache reused pre-remap Rust dependency metadata because the remap flags were appended inside `.cargo/rustc.sh` after sccache formed its key. `scripts/static-cargo` now fingerprints `.cargo/rustc.sh` together with `.cargo/musl-cc.sh`. A cache-enabled `mime_guess` build completed in 0.54s; rebuilt `mime` rmeta now has 0 raw and 4 remapped registry paths (was 6 raw/0 mapped). Receipt: [static-cache-key-probe.txt](https://git.kayg.org/attachments/74b7f430-0ac8-401f-8acb-0bfd71877c6b). I am rebuilding the two shipping targets with this driver now.
Author
Owner

Correction: the prior SCCACHE_EXTRAFILES fingerprint probe was not a fix. The full clean static rebuild still had 165 raw registry-path occurrences in x86_64 (21,181,936 bytes) and 164 in aarch64 (19,296,544 bytes); static-metadata-review failed both targets. The evidence is attached: counts, build log. The compiler trace shows remap flags are appended by .cargo/rustc.sh after sccache receives the arguments. I’m moving dynamic remap flags into Cargo target rustflags so the cache key includes them, then I’ll verify with a fresh dep compile and both static targets.

Correction: the prior SCCACHE_EXTRAFILES fingerprint probe was not a fix. The full clean static rebuild still had 165 raw registry-path occurrences in x86_64 (21,181,936 bytes) and 164 in aarch64 (19,296,544 bytes); static-metadata-review failed both targets. The evidence is attached: [counts](https://git.kayg.org/attachments/0598abaf-7f3e-472b-80d5-d3157d49f74d), [build log](https://git.kayg.org/attachments/2a76c6a8-0538-4b70-b114-08de5ed10bcd). The compiler trace shows remap flags are appended by .cargo/rustc.sh after sccache receives the arguments. I’m moving dynamic remap flags into Cargo target rustflags so the cache key includes them, then I’ll verify with a fresh dep compile and both static targets.
Author
Owner

Cache-key fix probe: scripts/static-cargo check compiled mime for x86_64 with the active sccache wrapper and target remap flags present in the compiler arguments; resulting .rmeta is 107,301 bytes with 0 raw registry path occurrences. The compiler flags and result are attached: https://git.kayg.org/attachments/d69442cf-76d1-4d80-abe8-0fdd1954ad69. Both full release builds and the metadata review are running.

Cache-key fix probe: `scripts/static-cargo check` compiled `mime` for x86_64 with the active sccache wrapper and target remap flags present in the compiler arguments; resulting `.rmeta` is 107,301 bytes with 0 raw registry path occurrences. The compiler flags and result are attached: https://git.kayg.org/attachments/d69442cf-76d1-4d80-abe8-0fdd1954ad69. Both full release builds and the metadata review are running.
Author
Owner

Fixed-remap x86_64 artifact measured: 21,169,648 bytes, with 0 raw source-root, target-root, and Cargo registry prefixes. This is 130,368 bytes under origin/dev's exact 21,300,016-byte baseline and 53,248 bytes under this branch's current ceiling, so its D243 ceiling needs ratcheting down. Receipt attached: https://git.kayg.org/attachments/2d743cb5-f783-4af7-a9e0-ca0878b47868. AArch64 remains in progress.

Fixed-remap x86_64 artifact measured: 21,169,648 bytes, with 0 raw source-root, target-root, and Cargo registry prefixes. This is 130,368 bytes under origin/dev's exact 21,300,016-byte baseline and 53,248 bytes under this branch's current ceiling, so its D243 ceiling needs ratcheting down. Receipt attached: https://git.kayg.org/attachments/2d743cb5-f783-4af7-a9e0-ca0878b47868. AArch64 remains in progress.
Author
Owner

The cache-safe static remaps pass on both shipping targets. The release metadata review reports 2 pass, 0 fail (10 assertions); raw source, target and registry path counts are zero for each binary. Sizes: x86_64 21,169,648 bytes (−130,368 vs origin/dev); aarch64 19,288,352 bytes (−212,024 vs origin/dev). Each is 53,248 bytes below the current branch ceiling, so I’ll ratchet both exact caps to these measured sizes. Receipts: sizes and path counts, build and test log.

The cache-safe static remaps pass on both shipping targets. The release metadata review reports 2 pass, 0 fail (10 assertions); raw source, target and registry path counts are zero for each binary. Sizes: x86_64 21,169,648 bytes (−130,368 vs origin/dev); aarch64 19,288,352 bytes (−212,024 vs origin/dev). Each is 53,248 bytes below the current branch ceiling, so I’ll ratchet both exact caps to these measured sizes. Receipts: [sizes and path counts](https://git.kayg.org/attachments/598715b5-d212-47d4-b985-9a93dd103d69), [build and test log](https://git.kayg.org/attachments/2b8d5e32-9c0c-4960-b28c-a974bd1ac198).
Author
Owner

verify iterate failed only in remote_runtime::tests::standby::control_queue::saturated_native_control_queue_does_not_hide_primary_terminal_output: 473 passed, 1 failed, 49 ignored. At remote_control_queue_tests.rs:216, the live connection had closed after control queue saturation; the full log is attached: https://git.kayg.org/attachments/06cbc3a1-b6c2-4904-b0af-bf9c5380db74. This test is outside the named host-load exceptions. I’m rerunning it in isolation before deciding whether there is a code issue.

`verify iterate` failed only in `remote_runtime::tests::standby::control_queue::saturated_native_control_queue_does_not_hide_primary_terminal_output`: 473 passed, 1 failed, 49 ignored. At `remote_control_queue_tests.rs:216`, the live connection had closed after control queue saturation; the full log is attached: https://git.kayg.org/attachments/06cbc3a1-b6c2-4904-b0af-bf9c5380db74. This test is outside the named host-load exceptions. I’m rerunning it in isolation before deciding whether there is a code issue.
Author
Owner

The isolated rerun of the one verify iterate failure passed with the remote feature enabled: saturated_native_control_queue_does_not_hide_primary_terminal_output, 1 passed in 0.37 s, reporting native_primary_live=true. Receipt: https://git.kayg.org/attachments/d922cd0d-36bb-44d8-ab4b-9c883e7e6801. No code changes were made for this failure; the final scripts/verify fast will rerun the full test row.

The isolated rerun of the one `verify iterate` failure passed with the `remote` feature enabled: `saturated_native_control_queue_does_not_hide_primary_terminal_output`, 1 passed in 0.37 s, reporting `native_primary_live=true`. Receipt: https://git.kayg.org/attachments/d922cd0d-36bb-44d8-ab4b-9c883e7e6801. No code changes were made for this failure; the final `scripts/verify fast` will rerun the full test row.
Author
Owner

Cache-safe remap plumbing is committed and pushed as c3c2dc8b8. The targeted cache probe produced 0 raw registry paths; static metadata review passed 2/2 targets, and binaries contain 0 raw source/target/registry prefixes. The build measured x86_64 21,169,648 bytes (−130,368 vs origin/dev) and AArch64 19,288,352 bytes (−212,024). Evidence: probe, static build. verify iterate had one unrelated control-queue test fail in the full suite; the exact remote-feature test passed alone in 0.37 s (https://git.kayg.org/attachments/d922cd0d-36bb-44d8-ab4b-9c883e7e6801). The final fast gate will rerun the full test row.

Cache-safe remap plumbing is committed and pushed as c3c2dc8b8. The targeted cache probe produced 0 raw registry paths; static metadata review passed 2/2 targets, and binaries contain 0 raw source/target/registry prefixes. The build measured x86_64 21,169,648 bytes (−130,368 vs origin/dev) and AArch64 19,288,352 bytes (−212,024). Evidence: [probe](https://git.kayg.org/attachments/d69442cf-76d1-4d80-abe8-0fdd1954ad69), [static build](https://git.kayg.org/attachments/2b8d5e32-9c0c-4960-b28c-a974bd1ac198). `verify iterate` had one unrelated control-queue test fail in the full suite; the exact remote-feature test passed alone in 0.37 s (https://git.kayg.org/attachments/d922cd0d-36bb-44d8-ab4b-9c883e7e6801). The final fast gate will rerun the full test row.
Author
Owner

Exact D243 ceilings and docs/PROCESS.md are committed as 76755c409. The static binary checker accepts both freshly built artifacts at delta +0 bytes: x86_64 21,169,648 bytes (−130,368 vs origin/dev), AArch64 19,288,352 bytes (−212,024). Measured receipts are attached: https://git.kayg.org/attachments/598715b5-d212-47d4-b985-9a93dd103d69. Running the required final scripts/verify fast on this branch head now.

Exact D243 ceilings and `docs/PROCESS.md` are committed as 76755c409. The static binary checker accepts both freshly built artifacts at delta +0 bytes: x86_64 21,169,648 bytes (−130,368 vs origin/dev), AArch64 19,288,352 bytes (−212,024). Measured receipts are attached: https://git.kayg.org/attachments/598715b5-d212-47d4-b985-9a93dd103d69. Running the required final `scripts/verify fast` on this branch head now.
Author
Owner

First final scripts/verify fast failed in two places; full log attached: https://git.kayg.org/attachments/c61bdefc-36e8-44ec-add0-229e3ced6282. Static-build path review failed because scripts/test-rustc-paths.py copies .cargo/rustc.sh without its new .cargo/rust-remap-flags.sh dependency. The test row also had one failure in agent_sessions::restart_discovery_keeps_a_live_shim_and_drops_clean_exit_and_sigkill: launching a fixture returned ETXTBSY at agent_sessions.rs:236. This is outside the named host-load exceptions; I’m fixing the fixture dependency and checking the session case separately before the next full fast run.

First final `scripts/verify fast` failed in two places; full log attached: https://git.kayg.org/attachments/c61bdefc-36e8-44ec-add0-229e3ced6282. Static-build path review failed because `scripts/test-rustc-paths.py` copies `.cargo/rustc.sh` without its new `.cargo/rust-remap-flags.sh` dependency. The test row also had one failure in `agent_sessions::restart_discovery_keeps_a_live_shim_and_drops_clean_exit_and_sigkill`: launching a fixture returned `ETXTBSY` at `agent_sessions.rs:236`. This is outside the named host-load exceptions; I’m fixing the fixture dependency and checking the session case separately before the next full fast run.
Author
Owner

Focused follow-up: the rustc path fixture now passes with the helper copied into both synthetic checkouts, and agent_sessions::restart_discovery_keeps_a_live_shim_and_drops_clean_exit_and_sigkill passed alone (1 passed, 0 failed). No runtime code change was made for the one-off ETXTBSY result; the full fast gate will rerun the test. Receipt: https://git.kayg.org/attachments/66facc77-b73f-4133-b4f6-4c896cf5eeae.

Focused follow-up: the rustc path fixture now passes with the helper copied into both synthetic checkouts, and `agent_sessions::restart_discovery_keeps_a_live_shim_and_drops_clean_exit_and_sigkill` passed alone (1 passed, 0 failed). No runtime code change was made for the one-off ETXTBSY result; the full fast gate will rerun the test. Receipt: https://git.kayg.org/attachments/66facc77-b73f-4133-b4f6-4c896cf5eeae.
Author
Owner

The rustc path fixture dependency fix is committed as d85359805. scripts/test-rustc-paths.py now passes across both synthetic roots, and the isolated agent_sessions::restart_discovery_keeps_a_live_shim_and_drops_clean_exit_and_sigkill test passes 1/1. I’m rerunning scripts/verify fast on this head; the prior log remains attached for the fixture and one-off ETXTBSY findings.

The rustc path fixture dependency fix is committed as d85359805. `scripts/test-rustc-paths.py` now passes across both synthetic roots, and the isolated `agent_sessions::restart_discovery_keeps_a_live_shim_and_drops_clean_exit_and_sigkill` test passes 1/1. I’m rerunning `scripts/verify fast` on this head; the prior log remains attached for the fixture and one-off ETXTBSY findings.
Author
Owner

Finding: the full gate reached compiler metadata generator checks but the existing fake-Cargo test expected static-cargo to pass arguments through unchanged. The failure was in scripts/release/build-metadata.test.ts:45; its received argv now includes the two target rustflags --config options. Gate log: https://git.kayg.org/attachments/6fea81dc-67d6-4126-b339-76188655fccd

Finding: the full gate reached compiler metadata generator checks but the existing fake-Cargo test expected static-cargo to pass arguments through unchanged. The failure was in scripts/release/build-metadata.test.ts:45; its received argv now includes the two target rustflags --config options. Gate log: https://git.kayg.org/attachments/6fea81dc-67d6-4126-b339-76188655fccd
Author
Owner

Step complete: b8dfc690c moves inherited plain or encoded rust flags into the selected musl target config so sccache sees remap flags; host build scripts keep their own flags. Verification: apps/tracer bun run check PASS; strict TypeScript check of scripts/release/build-metadata.test.ts PASS; focused Bun test 2 pass, 0 fail, 24 assertions; bash -n scripts/static-cargo PASS. The checkout root has no package.json, so root bun run check is not defined.

Step complete: b8dfc690c moves inherited plain or encoded rust flags into the selected musl target config so sccache sees remap flags; host build scripts keep their own flags. Verification: `apps/tracer` `bun run check` PASS; strict TypeScript check of `scripts/release/build-metadata.test.ts` PASS; focused Bun test 2 pass, 0 fail, 24 assertions; `bash -n scripts/static-cargo` PASS. The checkout root has no package.json, so root `bun run check` is not defined.
Author
Owner

Finding: final scripts/verify fast stopped in the test row because INFRATERNAL_TEST_STATE_ROOT=/home/kayg/.cache/codex-scratch/multiplexer-skip made the generated Unix socket path 109 bytes; scripts/agent_fixture.py:55 rejects paths over its limit. Static builds passed: x86_64 21,169,648 bytes (cap exact, +0); aarch64 19,288,352 bytes (cap exact, +0). Full log: https://git.kayg.org/attachments/a89310cb-1a15-4634-adfd-0ac6b2cca2f6. Rerunning with a shorter scratch state root.

Finding: final `scripts/verify fast` stopped in the test row because `INFRATERNAL_TEST_STATE_ROOT=/home/kayg/.cache/codex-scratch/multiplexer-skip` made the generated Unix socket path 109 bytes; `scripts/agent_fixture.py:55` rejects paths over its limit. Static builds passed: x86_64 21,169,648 bytes (cap exact, +0); aarch64 19,288,352 bytes (cap exact, +0). Full log: https://git.kayg.org/attachments/a89310cb-1a15-4634-adfd-0ac6b2cca2f6. Rerunning with a shorter scratch state root.
Author
Owner

Status: final scripts/verify fast rerun is queued in the shared build-slot wrapper and is waiting without holding a slot. The rerun uses the shorter fixture state root /home/kayg/.cache/codex-scratch/mux170. Next: complete the gate, push multiplexer-skip, and stop for independent break-it review.

Status: final `scripts/verify fast` rerun is queued in the shared build-slot wrapper and is waiting without holding a slot. The rerun uses the shorter fixture state root `/home/kayg/.cache/codex-scratch/mux170`. Next: complete the gate, push `multiplexer-skip`, and stop for independent break-it review.
Author
Owner

Finished: head b8dfc690c3fb0c864f73ae6fc6f2ab451a708a83 pushed to multiplexer-skip with --force-with-lease. Merge base: 3b2183eaac8a9d8cc52a922dfbbbaecf895fd854.

scripts/verify fast exited 0. Rust gate output (verbatim):

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

Static binaries: x86_64 21,169,648 bytes, delta +0 at cap and 130,368 bytes smaller than origin/dev; aarch64 19,288,352 bytes, delta +0 at cap and 212,024 bytes smaller than origin/dev. Protocol tests: 37 pass, 0 fail, 34,463 assertions.

Full gate transcript: final-verify-fast-retry.log.

Stopping for independent break-it review. No deploy performed.

Finished: head `b8dfc690c3fb0c864f73ae6fc6f2ab451a708a83` pushed to `multiplexer-skip` with `--force-with-lease`. Merge base: `3b2183eaac8a9d8cc52a922dfbbbaecf895fd854`. `scripts/verify fast` exited 0. Rust gate output (verbatim): ```text +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` Static binaries: x86_64 21,169,648 bytes, delta +0 at cap and 130,368 bytes smaller than origin/dev; aarch64 19,288,352 bytes, delta +0 at cap and 212,024 bytes smaller than origin/dev. Protocol tests: 37 pass, 0 fail, 34,463 assertions. Full gate transcript: [final-verify-fast-retry.log](https://git.kayg.org/attachments/a9718869-4714-475f-9c60-cfbd02cbb724). Stopping for independent break-it review. No deploy performed.
Author
Owner

Delta review started on review-multiplexer-skip at b8dfc690c3; previous review preserved at 591e4b596 on review-multiplexer-skip-prior. Prior regression tests are already incorporated in the author head. Rechecking MS-1 through MS-5, production controls in both themes, static remap isolation/reproducibility, and final fast gate. No deploy.

Delta review started on review-multiplexer-skip at b8dfc690c3fb0c864f73ae6fc6f2ab451a708a83; previous review preserved at 591e4b596 on review-multiplexer-skip-prior. Prior regression tests are already incorporated in the author head. Rechecking MS-1 through MS-5, production controls in both themes, static remap isolation/reproducibility, and final fast gate. No deploy.
Author
Owner

Delta finding MS-6 (P2): POSIX login .profile assigning ENV="$HOME/.sh-env" replaces the private wrapper. After startup, TMUX and ZELLIJ both remain "infraternal-session", so manual multiplexer use sees a fake existing session. Regression posix_login_profile_env_keeps_manual_multiplexer_available committed at 7b2ab7760; standalone normal test-module run: 9 passed, 1 failed, actual STATE:infraternal-session:infraternal-session vs expected STATE:unset:unset. Receipt: /home/kayg/.cache/codex-scratch/review-multiplexer-skip/standalone-shell-tests.log. The original sh/Bash/Fish regressions pass (full-crate focused run 9 passed, 0 failed).

For the required author-head fast gate, the additional red test is temporarily removed from the working file so its source matches b8dfc690c; it remains safely committed and will be restored after the gate. No implementation edits.

Delta finding MS-6 (P2): POSIX login .profile assigning ENV="$HOME/.sh-env" replaces the private wrapper. After startup, TMUX and ZELLIJ both remain "infraternal-session", so manual multiplexer use sees a fake existing session. Regression posix_login_profile_env_keeps_manual_multiplexer_available committed at 7b2ab7760; standalone normal test-module run: 9 passed, 1 failed, actual STATE:infraternal-session:infraternal-session vs expected STATE:unset:unset. Receipt: /home/kayg/.cache/codex-scratch/review-multiplexer-skip/standalone-shell-tests.log. The original sh/Bash/Fish regressions pass (full-crate focused run 9 passed, 0 failed). For the required author-head fast gate, the additional red test is temporarily removed from the working file so its source matches b8dfc690c; it remains safely committed and will be restored after the gate. No implementation edits.
Author
Owner

Delta verification step: native latency gate PASS on the perf VM (4 vCPU, weighted scope, shared lock with holder file, load in receipt). 100 probes at zero added RTT: PTY echo p99 1.75 ms baseline, 3.48 ms under other-session flood, 13.05 ms under same-session flood; growth 1.73/11.30 ms versus the 16.67 ms budget. This is native PTY confirmation, not browser input-to-photon. Shipping binary SHA-256 642d8a2cd9267fe8f33f7e3c3214b2ed8d39fc1885c928615a74055b09459813; independent artifact comparison and startup measurements are still pending.

Receipt: https://git.kayg.org/attachments/f6e04a58-1f5f-4f7e-913e-cbedf6c52811

MS-6 regression 7b2ab7760 is pushed only to review-multiplexer-skip. Original shell regressions pass 9/9. Fast gate and production browser tests remain in progress. No deploy.

Delta verification step: native latency gate PASS on the perf VM (4 vCPU, weighted scope, shared lock with holder file, load in receipt). 100 probes at zero added RTT: PTY echo p99 1.75 ms baseline, 3.48 ms under other-session flood, 13.05 ms under same-session flood; growth 1.73/11.30 ms versus the 16.67 ms budget. This is native PTY confirmation, not browser input-to-photon. Shipping binary SHA-256 642d8a2cd9267fe8f33f7e3c3214b2ed8d39fc1885c928615a74055b09459813; independent artifact comparison and startup measurements are still pending. Receipt: https://git.kayg.org/attachments/f6e04a58-1f5f-4f7e-913e-cbedf6c52811 MS-6 regression 7b2ab7760 is pushed only to review-multiplexer-skip. Original shell regressions pass 9/9. Fast gate and production browser tests remain in progress. No deploy.
Author
Owner

First delta fast gate test row failed: infraternal-server reports 473 passed, 1 failed, 49 ignored. Failure is responsive_socket_survives_a_held_terminal_open_with_an_existing_attachment, socket_clock.rs:81: "socket test stopped before its observed event". The exact isolated rerun passes 1/1. This is outside the named #118 exceptions and is not waived. The gate is continuing through static builds; a complete rerun is required afterward. MS-3's disabled-plugin regression also passes in the full run.

Logs: /home/kayg/.cache/codex-scratch/review-multiplexer-skip/verify-fast.log and socket-liveness-isolated.log. No implementation edits.

First delta fast gate test row failed: infraternal-server reports 473 passed, 1 failed, 49 ignored. Failure is responsive_socket_survives_a_held_terminal_open_with_an_existing_attachment, socket_clock.rs:81: "socket test stopped before its observed event". The exact isolated rerun passes 1/1. This is outside the named #118 exceptions and is not waived. The gate is continuing through static builds; a complete rerun is required afterward. MS-3's disabled-plugin regression also passes in the full run. Logs: /home/kayg/.cache/codex-scratch/review-multiplexer-skip/verify-fast.log and socket-liveness-isolated.log. No implementation edits.
Author
Owner

Additional perf-VM default-network run found a latency-gate failure: RTT 300 ms, 100 probes, baseline PTY echo p99 323.14 ms; same-session flood 423.99 ms (budget 334 ms), growth 100.85 ms (budget 16.67 ms). Other-session flood passes. A zero-added-RTT run passed all metrics earlier. I am building the exact new merge base 3b2183eaa in a disposable review-owned checkout for a controlled VM comparison before attributing this to #170; no severity verdict is assigned yet. Receipt: /home/kayg/.cache/codex-scratch/review-multiplexer-skip/perf-native-latency-rtt300.log.

Additional perf-VM default-network run found a latency-gate failure: RTT 300 ms, 100 probes, baseline PTY echo p99 323.14 ms; same-session flood 423.99 ms (budget 334 ms), growth 100.85 ms (budget 16.67 ms). Other-session flood passes. A zero-added-RTT run passed all metrics earlier. I am building the exact new merge base 3b2183eaa in a disposable review-owned checkout for a controlled VM comparison before attributing this to #170; no severity verdict is assigned yet. Receipt: /home/kayg/.cache/codex-scratch/review-multiplexer-skip/perf-native-latency-rtt300.log.
Author
Owner

Delta prior-findings verification: MS-1 FIXED, MS-2 FIXED, MS-3 FIXED, MS-4 FIXED, MS-5 FIXED for all original scenarios. New P2 MS-6 remains separately committed at 7b2ab7760. Production UI spec 40523d883 passes 2/2 in ink and paper; host and global setting writes are acknowledged, the switch persists after reload. Screenshots cover desktop and phone; no visual-taste judgement.

Independent real-engine matrix passes 9/9. Current-head startup p99 guarded-minus-baseline deltas (1,001 pairs/shell, 4-core perf VM, CPUWeight=10000, lock and load recorded): sh +0.488 ms; Bash -1.045 ms; Zsh -1.139 ms; Fish +0.370 ms. All pass the 1 ms overhead limit. The separate RTT300 flood failure still needs merge-base comparison. Fast gate remains in static builds after its one isolated-green server-test failure.

ink-notice-desktop.png
ink-notice-phone.png
ink-setting-desktop.png
ink-setting-phone.png
paper-notice-desktop.png
paper-notice-phone.png
paper-setting-desktop.png
paper-setting-phone.png
ui-review-retry.log
disabled-plugin.log

perf-shell.log
perf-native-latency-rtt300.log

Delta prior-findings verification: MS-1 FIXED, MS-2 FIXED, MS-3 FIXED, MS-4 FIXED, MS-5 FIXED for all original scenarios. New P2 MS-6 remains separately committed at 7b2ab7760. Production UI spec 40523d883 passes 2/2 in ink and paper; host and global setting writes are acknowledged, the switch persists after reload. Screenshots cover desktop and phone; no visual-taste judgement. Independent real-engine matrix passes 9/9. Current-head startup p99 guarded-minus-baseline deltas (1,001 pairs/shell, 4-core perf VM, CPUWeight=10000, lock and load recorded): sh +0.488 ms; Bash -1.045 ms; Zsh -1.139 ms; Fish +0.370 ms. All pass the 1 ms overhead limit. The separate RTT300 flood failure still needs merge-base comparison. Fast gate remains in static builds after its one isolated-green server-test failure. ![ink-notice-desktop.png](https://git.kayg.org/attachments/d8b2ea7b-8bd2-4b75-b918-6f1c8d4a206d) ![ink-notice-phone.png](https://git.kayg.org/attachments/f13f4fef-715a-44eb-b72b-dc0a00cfa674) ![ink-setting-desktop.png](https://git.kayg.org/attachments/7186cf25-74e7-4e19-931f-0cabbee15aed) ![ink-setting-phone.png](https://git.kayg.org/attachments/642f929b-8412-4331-8c74-357e1cf71da9) ![paper-notice-desktop.png](https://git.kayg.org/attachments/ddda6f22-d1cf-419a-b80a-6deb6deb6dd7) ![paper-notice-phone.png](https://git.kayg.org/attachments/debf8098-bd5b-43f2-b88f-adf2e836163f) ![paper-setting-desktop.png](https://git.kayg.org/attachments/b9ce4f9f-8947-4c10-a61f-a40eef65e085) ![paper-setting-phone.png](https://git.kayg.org/attachments/47e889ab-2ca8-4af4-b89a-07a4e7f4e256) [ui-review-retry.log](https://git.kayg.org/attachments/ebe87b78-a0fd-4927-bf79-bfed35945c03) [disabled-plugin.log](https://git.kayg.org/attachments/86e1b8d6-08f4-43c6-924f-f7b75feea192) [perf-shell.log](https://git.kayg.org/attachments/e4cf4135-8116-4f99-8325-0267c77412e8) [perf-native-latency-rtt300.log](https://git.kayg.org/attachments/80e3c4e0-a77e-41cd-a68b-66844461693a)
Author
Owner

Independent shipping build: x86_64 is byte-identical to the author's final artifact across different checkout and target roots. Size 21,169,648 bytes (exact cap); SHA-256 642d8a2cd9267fe8f33f7e3c3214b2ed8d39fc1885c928615a74055b09459813. This validates the binary used for the production UI and native VM checks. ARM is building.

The full fast rerun has started with cached builds. The RTT300 native failure reproduced: same-session PTY echo p99 345.42 ms vs 334 ms, growth 16.92 ms vs 16.67 ms; baseline/other-session pass. Exact merge-base comparison is still queued, so attribution remains pending. Review head 40523d883; no implementation changes or deploy.

Independent shipping build: x86_64 is byte-identical to the author's final artifact across different checkout and target roots. Size 21,169,648 bytes (exact cap); SHA-256 642d8a2cd9267fe8f33f7e3c3214b2ed8d39fc1885c928615a74055b09459813. This validates the binary used for the production UI and native VM checks. ARM is building. The full fast rerun has started with cached builds. The RTT300 native failure reproduced: same-session PTY echo p99 345.42 ms vs 334 ms, growth 16.92 ms vs 16.67 ms; baseline/other-session pass. Exact merge-base comparison is still queued, so attribution remains pending. Review head 40523d883; no implementation changes or deploy.
Author
Owner

New delta finding MS-7 (P2), scripts/static-cargo: repeated --target x86_64-unknown-linux-musl --target aarch64-unknown-linux-musl loses inherited RUSTFLAGS on ARM. The wrapper unsets global flags but copies them only to its first selected target.

Failing test committed/pushed as 678266d20: static driver preserves inherited flags for every requested shipping target (scripts/release/build-metadata.test.ts). Existing metadata tests pass 2/2; this new case fails. Real-Cargo confirmation: a crate requiring the inherited cfg on both targets exits 101 through static-cargo, while direct Cargo with the identical inherited flags and target arguments exits 0. Receipts: multiple-targets.log, multiple-targets-real.log and multiple-targets-cargo-control.log under /home/kayg/.cache/codex-scratch/review-multiplexer-skip/. Single-target shipping builds are unaffected. No implementation fix.

The additional regression is temporarily absent from the working file for the author-head fast gates; it remains committed on the review branch.

New delta finding MS-7 (P2), scripts/static-cargo: repeated --target x86_64-unknown-linux-musl --target aarch64-unknown-linux-musl loses inherited RUSTFLAGS on ARM. The wrapper unsets global flags but copies them only to its first selected target. Failing test committed/pushed as 678266d20: static driver preserves inherited flags for every requested shipping target (scripts/release/build-metadata.test.ts). Existing metadata tests pass 2/2; this new case fails. Real-Cargo confirmation: a crate requiring the inherited cfg on both targets exits 101 through static-cargo, while direct Cargo with the identical inherited flags and target arguments exits 0. Receipts: multiple-targets.log, multiple-targets-real.log and multiple-targets-cargo-control.log under /home/kayg/.cache/codex-scratch/review-multiplexer-skip/. Single-target shipping builds are unaffected. No implementation fix. The additional regression is temporarily absent from the working file for the author-head fast gates; it remains committed on the review branch.
Author
Owner

Author-source b8dfc690c scripts/verify fast rerun finished with exit 0. All Rust rows pass; tracer 210/0 (11,471 assertions), protocol 37/0 (34,463 assertions). The initial server test failure is retained; the complete server rerun passes 474/0/49 ignored, with no waiver or deadline changes. The two new review regressions remain committed on review-multiplexer-skip and are restored after this author-source gate.

Gate output, verbatim:

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

The verdict remains pending only for attribution of the RTT300 native flood failure against the exact merge base.

Author-source b8dfc690c scripts/verify fast rerun finished with exit 0. All Rust rows pass; tracer 210/0 (11,471 assertions), protocol 37/0 (34,463 assertions). The initial server test failure is retained; the complete server rerun passes 474/0/49 ignored, with no waiver or deadline changes. The two new review regressions remain committed on review-multiplexer-skip and are restored after this author-source gate. Gate output, verbatim: ```text +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` The verdict remains pending only for attribution of the RTT300 native flood failure against the exact merge base.
Author
Owner

Delta review checkpoint, head 678266d20: all prior findings FIXED; new confirmed findings MS-6 P2 and MS-7 P2 have failing tests committed and pushed only on the review branch. Author-source b8dfc690c fast gate PASS; both architectures independently byte-identical with exact caps; production controls work in both themes and all startup budgets pass.

Remaining comparison is blocked on shared build-slot capacity: exact merge base 3b2183eaa static binary (review-owned baseline checkout, pinned toolchain ready) remains queued for its RTT300 flood control. The reviewed head fails this existing native budget twice; attribution is pending. I will continue automatically when the slot opens.

verify-fast-retry.log
verify-fast.log

shipping-reproducibility.txt

multiple-targets.log
multiple-targets-real.log
multiple-targets-cargo-control.log

Delta review checkpoint, head 678266d20: all prior findings FIXED; new confirmed findings MS-6 P2 and MS-7 P2 have failing tests committed and pushed only on the review branch. Author-source b8dfc690c fast gate PASS; both architectures independently byte-identical with exact caps; production controls work in both themes and all startup budgets pass. Remaining comparison is blocked on shared build-slot capacity: exact merge base 3b2183eaa static binary (review-owned baseline checkout, pinned toolchain ready) remains queued for its RTT300 flood control. The reviewed head fails this existing native budget twice; attribution is pending. I will continue automatically when the slot opens. [verify-fast-retry.log](https://git.kayg.org/attachments/6c16e218-e016-459b-93e4-0b77b326d985) [verify-fast.log](https://git.kayg.org/attachments/8874b964-0a81-4be5-98cd-bb46e8309864) [shipping-reproducibility.txt](https://git.kayg.org/attachments/aa005b0c-bce9-416c-a8dd-6f281eb66816) [multiple-targets.log](https://git.kayg.org/attachments/7f9c4de7-7334-4632-b481-6d57cd375399) [multiple-targets-real.log](https://git.kayg.org/attachments/426d23f1-34ba-4d05-88d7-f2fab391d24c) [multiple-targets-cargo-control.log](https://git.kayg.org/attachments/b969466e-708b-4dd2-8e2e-3c42dfb81787)
Author
Owner

Correction to the queued-baseline status: polling the execution session returned exit 143 with an empty build log; the baseline process had been terminated before producing output. Its termination time/cause is unknown. I mistook the empty log for a continuing queue wait. Restarting the exact 3b2183eaa build through build-slot, now with direct process-status polling. New receipt baseline-static-r3.log. All completed results and committed review findings are unchanged.

Correction to the queued-baseline status: polling the execution session returned exit 143 with an empty build log; the baseline process had been terminated before producing output. Its termination time/cause is unknown. I mistook the empty log for a continuing queue wait. Restarting the exact 3b2183eaa build through build-slot, now with direct process-status polling. New receipt baseline-static-r3.log. All completed results and committed review findings are unchanged.
Author
Owner

New delta finding MS-8 (P2), SH_ENV_STARTUP in shell_startup.rs: valid POSIX ENV parameter expansion is lost. With ENV='$HOME/.sh-env', the real /bin/sh reads initialization when skip=false, but the wrapper treats the restored value as a literal filename and silently omits the same initialization when skip=true.

Regression posix_sh_startup_keeps_env_parameter_expansion committed/pushed at 4c184bb6a. Its control runs first and succeeds; only the enabled-skip case fails (exit 101, 0 passed/1 failed/103 filtered). Evidence: /home/kayg/.cache/codex-scratch/review-multiplexer-skip/env-expansion.log. Separate from MS-6's retained sentinels after a login profile overwrites ENV. No implementation fix.

The merge-base control build is now running and has reached the application crates. Current confirmed delta counts: 0 P0, 0 P1, 3 P2, 0 P3; native RTT300 attribution remains pending.

New delta finding MS-8 (P2), SH_ENV_STARTUP in shell_startup.rs: valid POSIX ENV parameter expansion is lost. With ENV='$HOME/.sh-env', the real /bin/sh reads initialization when skip=false, but the wrapper treats the restored value as a literal filename and silently omits the same initialization when skip=true. Regression posix_sh_startup_keeps_env_parameter_expansion committed/pushed at 4c184bb6a. Its control runs first and succeeds; only the enabled-skip case fails (exit 101, 0 passed/1 failed/103 filtered). Evidence: /home/kayg/.cache/codex-scratch/review-multiplexer-skip/env-expansion.log. Separate from MS-6's retained sentinels after a login profile overwrites ENV. No implementation fix. The merge-base control build is now running and has reached the application crates. Current confirmed delta counts: 0 P0, 0 P1, 3 P2, 0 P3; native RTT300 attribution remains pending.
Author
Owner

New delta finding MS-9 (P2), BASH_PROMPT_COMMAND in shell_startup.rs: unconditional unset -f tmux zellij also removes a user function newly defined by .bashrc. Later manual invocation loses the wrapper and its usual options.

Regression bash_startup_keeps_the_users_manual_multiplexer_function committed/pushed at ae028c19b. Real Bash control skip=false runs CUSTOM:review-manual; skip=true instead runs EXTERNAL:review-manual (private probe, no real multiplexer session needed). Focused normal-crate test exits 101: 0 passed/1 failed/104 filtered. Receipt bash-function.log under /home/kayg/.cache/codex-scratch/review-multiplexer-skip/.

The new-code break-it pass is complete. Current confirmed delta counts: 0 P0, 0 P1, 4 P2, 0 P3. All five prior findings remain FIXED for their original scenarios. The exact merge-base build is active; only the RTT300 performance attribution remains before verdict. No implementation changes.

New delta finding MS-9 (P2), BASH_PROMPT_COMMAND in shell_startup.rs: unconditional unset -f tmux zellij also removes a user function newly defined by .bashrc. Later manual invocation loses the wrapper and its usual options. Regression bash_startup_keeps_the_users_manual_multiplexer_function committed/pushed at ae028c19b. Real Bash control skip=false runs CUSTOM:review-manual; skip=true instead runs EXTERNAL:review-manual (private probe, no real multiplexer session needed). Focused normal-crate test exits 101: 0 passed/1 failed/104 filtered. Receipt bash-function.log under /home/kayg/.cache/codex-scratch/review-multiplexer-skip/. The new-code break-it pass is complete. Current confirmed delta counts: 0 P0, 0 P1, 4 P2, 0 P3. All five prior findings remain FIXED for their original scenarios. The exact merge-base build is active; only the RTT300 performance attribution remains before verdict. No implementation changes.
Author
Owner

MERGE — 0 P0, 0 P1, 4 P2, 0 P3, under the requested severity rule.

Reviewed author head b8dfc690c3. Final review head f8b890d7df is pushed only to review-multiplexer-skip; worktree clean. No implementation changes or deploy. Temporary build targets, baseline checkout and own VM staging are removed; raw receipts remain attached and in review scratch.

Prior MS-1, MS-2, MS-3, MS-4, MS-5: FIXED for their original scenarios. Original shell regressions, disabled-plugin WebSocket regression, real-engine matrix (9 cases), and production controls in ink/paper pass.

New P2 findings remain unfixed, each with a separately committed failing test:

  • MS-6 (7b2ab7760): login .profile replaces ENV wrapper and leaves temporary sentinels set.
  • MS-7 (678266d20): multiple --target options drop inherited flags on additional architectures; real Cargo control passes directly and fails through static-cargo.
  • MS-8 (4c184bb6a): deferred ENV parameter expansion is lost and initialization is omitted.
  • MS-9 (ae028c19b): Bash cleanup removes a user's manual multiplexer function.

Normal review reruns: shell 9 passed/3 failed, metadata 2 passed/1 failed, exactly those new cases; shim Clippy and strict touched TypeScript pass. Production UI 2/2, screenshots both themes and desktop/phone attached. Report: f8b890d7df/docs/verification/multiplexer-skip-delta-review.md

Measured startup p99 overhead (1,001 pairs/shell, perf VM, CPUWeight=10000): sh +0.488 ms, Bash -1.045 ms, Zsh -1.139 ms, Fish +0.370 ms; all within 1 ms. Independent shipping binaries are byte-identical to the author's artifacts: x86_64 21,169,648 bytes, ARM 19,288,352 bytes, exact caps and zero raw path prefixes. Clean merge-base x86_64 is 21,300,016 bytes, confirming -130,368 bytes.

RTT300 same-session flood fails on the exact merge base too: PTY p99 367.72 ms vs 334 ms, growth 40.01 ms vs 16.67 ms. Head runs were 423.99 and 345.42 ms. The existing budget failure is recorded; these runs do not isolate a delta regression. Native zero-RTT gate passes. Identical scripts, VM, scheduling and 100 probes; load recorded.

Author-source scripts/verify fast rerun exited 0: tracer 210/0 (11,471 assertions), protocol 37/0 (34,463 assertions). Initial socket-clock failure passes both alone and in the complete rerun, without waiver or deadline changes. Additional red review tests were restored after this author-source gate.

Gate output, verbatim:

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

Selected final receipts:

verify-fast-retry.log
verify-fast.log

shipping-reproducibility.txt

perf-native-baseline-rtt300.log
baseline-artifact.txt
shell-all-review.log
review-shim-clippy.log

env-expansion.log

bash-function.log

MERGE — 0 P0, 0 P1, 4 P2, 0 P3, under the requested severity rule. Reviewed author head b8dfc690c3fb0c864f73ae6fc6f2ab451a708a83. Final review head f8b890d7df6ddb01487bc7c2348651246de768be is pushed only to review-multiplexer-skip; worktree clean. No implementation changes or deploy. Temporary build targets, baseline checkout and own VM staging are removed; raw receipts remain attached and in review scratch. Prior MS-1, MS-2, MS-3, MS-4, MS-5: FIXED for their original scenarios. Original shell regressions, disabled-plugin WebSocket regression, real-engine matrix (9 cases), and production controls in ink/paper pass. New P2 findings remain unfixed, each with a separately committed failing test: - MS-6 (7b2ab7760): login .profile replaces ENV wrapper and leaves temporary sentinels set. - MS-7 (678266d20): multiple --target options drop inherited flags on additional architectures; real Cargo control passes directly and fails through static-cargo. - MS-8 (4c184bb6a): deferred ENV parameter expansion is lost and initialization is omitted. - MS-9 (ae028c19b): Bash cleanup removes a user's manual multiplexer function. Normal review reruns: shell 9 passed/3 failed, metadata 2 passed/1 failed, exactly those new cases; shim Clippy and strict touched TypeScript pass. Production UI 2/2, screenshots both themes and desktop/phone attached. Report: https://git.kayg.org/kayg/infraternal/src/commit/f8b890d7df6ddb01487bc7c2348651246de768be/docs/verification/multiplexer-skip-delta-review.md Measured startup p99 overhead (1,001 pairs/shell, perf VM, CPUWeight=10000): sh +0.488 ms, Bash -1.045 ms, Zsh -1.139 ms, Fish +0.370 ms; all within 1 ms. Independent shipping binaries are byte-identical to the author's artifacts: x86_64 21,169,648 bytes, ARM 19,288,352 bytes, exact caps and zero raw path prefixes. Clean merge-base x86_64 is 21,300,016 bytes, confirming -130,368 bytes. RTT300 same-session flood fails on the exact merge base too: PTY p99 367.72 ms vs 334 ms, growth 40.01 ms vs 16.67 ms. Head runs were 423.99 and 345.42 ms. The existing budget failure is recorded; these runs do not isolate a delta regression. Native zero-RTT gate passes. Identical scripts, VM, scheduling and 100 probes; load recorded. Author-source scripts/verify fast rerun exited 0: tracer 210/0 (11,471 assertions), protocol 37/0 (34,463 assertions). Initial socket-clock failure passes both alone and in the complete rerun, without waiver or deadline changes. Additional red review tests were restored after this author-source gate. Gate output, verbatim: ```text +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` Selected final receipts: [verify-fast-retry.log](https://git.kayg.org/attachments/6c16e218-e016-459b-93e4-0b77b326d985) [verify-fast.log](https://git.kayg.org/attachments/8874b964-0a81-4be5-98cd-bb46e8309864) [shipping-reproducibility.txt](https://git.kayg.org/attachments/aa005b0c-bce9-416c-a8dd-6f281eb66816) [perf-native-baseline-rtt300.log](https://git.kayg.org/attachments/fea0a685-812b-454d-912d-dc32e37bbc42) [baseline-artifact.txt](https://git.kayg.org/attachments/1b2e5bff-6680-4dc6-a0d4-1b5614fadf30) [shell-all-review.log](https://git.kayg.org/attachments/9c57aff7-6216-46f2-9c74-1cf8a4cf5870) [review-shim-clippy.log](https://git.kayg.org/attachments/5244352d-302f-45ad-8f52-1f8ba8efdd9e) [env-expansion.log](https://git.kayg.org/attachments/d9f1dca9-05e2-4908-ba5b-97356bf2f059) [bash-function.log](https://git.kayg.org/attachments/81355266-5c47-4385-95c1-193c90e9aaf7)
Author
Owner

Continuation started on multiplexer-skip at b8dfc690c3fb0c864f73ae6fc6f2ab451a708a83; fetched origin/dev is 06be8b0000f7d476eeeeed3472a4605757151243. Worktree was clean. Read the #170 and #169 histories, D241/D240/D247, and the repository contract. Scope: rebase onto current origin/dev, confirm and fix MS-6 through MS-9 from review head f8b890d7d, one atomic commit per finding, run focused gates and scripts/verify fast, compare both static sizes, push only multiplexer-skip, and stop for independent review.

Continuation started on `multiplexer-skip` at `b8dfc690c3fb0c864f73ae6fc6f2ab451a708a83`; fetched `origin/dev` is `06be8b0000f7d476eeeeed3472a4605757151243`. Worktree was clean. Read the #170 and #169 histories, D241/D240/D247, and the repository contract. Scope: rebase onto current `origin/dev`, confirm and fix MS-6 through MS-9 from review head `f8b890d7d`, one atomic commit per finding, run focused gates and `scripts/verify fast`, compare both static sizes, push only `multiplexer-skip`, and stop for independent review.
Author
Owner

Rebase completed on current origin/dev 06be8b0000f7d476eeeeed3472a4605757151243: 35 commits, new head 1cac6bf97fa1243dea8db9bf40e55e3daa25c984. One conflict in apps/tracer/src/canvas/sessions/live.ts was resolved by keeping dev's reconnect grace and D241's non-blocking preference preparation. The tree is clean; no gates have run on this rebased head yet. Review regression commits to replay next: 7b2ab7760, 678266d20, 4c184bb6a, ae028c19b.

Rebase completed on current `origin/dev` `06be8b0000f7d476eeeeed3472a4605757151243`: 35 commits, new head `1cac6bf97fa1243dea8db9bf40e55e3daa25c984`. One conflict in `apps/tracer/src/canvas/sessions/live.ts` was resolved by keeping dev's reconnect grace and D241's non-blocking preference preparation. The tree is clean; no gates have run on this rebased head yet. Review regression commits to replay next: `7b2ab7760`, `678266d20`, `4c184bb6a`, `ae028c19b`.
Author
Owner

MS-6 regression reproduced after rebasing: cherry-picked 7b2ab7760; real /bin/sh test posix_login_profile_env_keeps_manual_multiplexer_available fails before the fix (0 passed, 1 failed). A login .profile assigns ENV="$HOME/.sh-env", and the first command sees TMUX=ZELLIJ=infraternal-session. Receipt: /home/kayg/.cache/codex-scratch/multiplexer-skip/evidence/red-ms6.log.

MS-6 regression reproduced after rebasing: cherry-picked `7b2ab7760`; real `/bin/sh` test `posix_login_profile_env_keeps_manual_multiplexer_available` fails before the fix (0 passed, 1 failed). A login `.profile` assigns `ENV="$HOME/.sh-env"`, and the first command sees `TMUX=ZELLIJ=infraternal-session`. Receipt: `/home/kayg/.cache/codex-scratch/multiplexer-skip/evidence/red-ms6.log`.
Author
Owner

Started review-d297-fit at 7884d13dca (origin/dev, clean branch). Read D288/D297, CLAUDE.md, architecture/process and #170/#169 history. Scope: decision-fit review only; concrete counterexamples and owner options in docs/verification/d297-fit-review.md. No implementation or decision edits; push review-d297-fit only, no deploy.

Started review-d297-fit at 7884d13dcad71e8bc6f7d73fe1339c3f688e650b (origin/dev, clean branch). Read D288/D297, CLAUDE.md, architecture/process and #170/#169 history. Scope: decision-fit review only; concrete counterexamples and owner options in docs/verification/d297-fit-review.md. No implementation or decision edits; push review-d297-fit only, no deploy.
Author
Owner

Authority review committed as 06b120162 (docs/verification/d297-fit-review.md, 7 findings, 229 lines; git diff --check passed). F1: D235/D289 plain SSH vs D297's default-off promise. F2: D154/D164/D252 distinguish app actions, network reach and login; none names automatic session approval. F3: D187 needs session-owner consent but D297 only admins answer, including self-approval. F4: D240 separates people sharing deploy; D297's local-account prompt vs global automatic mode is unresolved. F5: D231 root fallback and sudo inside an approved shell change its power; D274's service-upgrade consent is separate. F6: rule-based automatic approval vs unconditional unattended denial. F7: D211 all-tag authority vs undefined setting/global-mode/approval permissions. Each has a concrete example, severity, 3 options and recommendation; proposals only. Continuing desktop, canvas, revocation, recovery, audit and batch review. No code or decisions changed.

Authority review committed as 06b120162 (docs/verification/d297-fit-review.md, 7 findings, 229 lines; git diff --check passed). F1: D235/D289 plain SSH vs D297's default-off promise. F2: D154/D164/D252 distinguish app actions, network reach and login; none names automatic session approval. F3: D187 needs session-owner consent but D297 only admins answer, including self-approval. F4: D240 separates people sharing deploy; D297's local-account prompt vs global automatic mode is unresolved. F5: D231 root fallback and sudo inside an approved shell change its power; D274's service-upgrade consent is separate. F6: rule-based automatic approval vs unconditional unattended denial. F7: D211 all-tag authority vs undefined setting/global-mode/approval permissions. Each has a concrete example, severity, 3 options and recommendation; proposals only. Continuing desktop, canvas, revocation, recovery, audit and batch review. No code or decisions changed.
Author
Owner

Integration/recovery review committed and pushed as 49c6251ba. Report now has 15 findings (9 blocks build, 5 needs a decision, 1 wording only), 521 lines. New findings: F8 D294 Give/Keep/idle handover vs admin approval and browser exception; F9 canvas/MCP relay must preserve original caller (D16/D178/D248/D288); F10 no agreed approval scope/ending for open/read/type/close and Revoke; F11 immediate stop vs disconnected D285 mesh, D128 lease and queued input; F12 live approval survival/CA lock/worker restart/D295 rollback undefined; F13 connection/byte recording cannot attribute a new controller without approval/control records; F14 D279 mixed-target batches vs D211 tag scope and per-machine stop confirmation; F15 D241 session retention is not D288 command compatibility. Includes phone-only admin, offline denial, self-approval, same-machine and same-person/two-account cases. Each finding has 3 options and a recommendation; only the owner may settle them. Structure and whitespace checks passed. Final head scripts/verify fast is running through build-slot; no product tests or performance claims for unimplemented D297.

Integration/recovery review committed and pushed as 49c6251ba. Report now has 15 findings (9 blocks build, 5 needs a decision, 1 wording only), 521 lines. New findings: F8 D294 Give/Keep/idle handover vs admin approval and browser exception; F9 canvas/MCP relay must preserve original caller (D16/D178/D248/D288); F10 no agreed approval scope/ending for open/read/type/close and Revoke; F11 immediate stop vs disconnected D285 mesh, D128 lease and queued input; F12 live approval survival/CA lock/worker restart/D295 rollback undefined; F13 connection/byte recording cannot attribute a new controller without approval/control records; F14 D279 mixed-target batches vs D211 tag scope and per-machine stop confirmation; F15 D241 session retention is not D288 command compatibility. Includes phone-only admin, offline denial, self-approval, same-machine and same-person/two-account cases. Each finding has 3 options and a recommendation; only the owner may settle them. Structure and whitespace checks passed. Final head scripts/verify fast is running through build-slot; no product tests or performance claims for unimplemented D297.
Author
Owner

Self-review refinement pushed as b5c352450: removed the proposed multiplexer compatibility finding. D288 already requires boundary denial and D241 preserves manual use, so that was expected behaviour, not a real conflict. Final report has 14 findings: 9 blocks build, 5 needs a decision. Multiplexer skip remains checked in the coverage record. No executable files changed during final verification. Head b5c352450: report structure and whitespace pass; final gate is still compiling.

Self-review refinement pushed as b5c352450: removed the proposed multiplexer compatibility finding. D288 already requires boundary denial and D241 preserves manual use, so that was expected behaviour, not a real conflict. Final report has 14 findings: 9 blocks build, 5 needs a decision. Multiplexer skip remains checked in the coverage record. No executable files changed during final verification. Head b5c352450: report structure and whitespace pass; final gate is still compiling.
Author
Owner

MS-6 real-engine run on the perf VM (4 vCPU, CPUWeight=10000, 1,001 baseline and guarded launches per shell) passed all nine startup/manual-start cases. Measured guarded p99 deltas: sh -1.333 ms, Bash -1.184 ms, Zsh +0.553 ms, Fish +2.854 ms; Fish exceeded the 1 ms budget at load 2.30 / 1.08 / 0.63. No code attribution yet: this fix changes guarded POSIX login startup, while Fish follows its existing path. The perf lock is now held by another run; I will wait for it and repeat the matrix before attributing or accepting this result. Receipt: full VM log.

MS-6 real-engine run on the perf VM (4 vCPU, CPUWeight=10000, 1,001 baseline and guarded launches per shell) passed all nine startup/manual-start cases. Measured guarded p99 deltas: sh -1.333 ms, Bash -1.184 ms, Zsh +0.553 ms, Fish +2.854 ms; Fish exceeded the 1 ms budget at load 2.30 / 1.08 / 0.63. No code attribution yet: this fix changes guarded POSIX login startup, while Fish follows its existing path. The perf lock is now held by another run; I will wait for it and repeat the matrix before attributing or accepting this result. Receipt: [full VM log](https://git.kayg.org/attachments/10d630ab-3344-4f1d-9106-a96bac7a8f23).
Author
Owner

Final content is pushed at b5c352450f. Source review/checklist complete: 14 scenarios, 9 blocks build + 5 needs a decision; each has 3 alternatives, recommendation and acceptance example. Report-only diff; all other tracked inputs exactly match merge base 7884d13dc (tree hash 6fad2c8566c570e9aca6bf4b2438b329e17140b2ef64c464766622f5948e1cb7). Check receipt: report-check.json. Final fast gate began at documentation head 49c6251ba and continues on b5c352450; the sole intervening change removed the non-conflict prose, with no executable input change. Formatting and compile-out passed; Clippy/tests/static builds still running. No performance measurement or D297 runtime proof claimed.

Final content is pushed at b5c352450fe21e196604d3f12d9ca4cbbc692296. Source review/checklist complete: 14 scenarios, 9 blocks build + 5 needs a decision; each has 3 alternatives, recommendation and acceptance example. Report-only diff; all other tracked inputs exactly match merge base 7884d13dc (tree hash 6fad2c8566c570e9aca6bf4b2438b329e17140b2ef64c464766622f5948e1cb7). Check receipt: [report-check.json](https://git.kayg.org/attachments/c9ca967a-a2bb-4ecd-ac57-99a452927e28). Final fast gate began at documentation head 49c6251ba and continues on b5c352450; the sole intervening change removed the non-conflict prose, with no executable input change. Formatting and compile-out passed; Clippy/tests/static builds still running. No performance measurement or D297 runtime proof claimed.
Author
Owner

MS-7 test-only commit 40f8d14f6 is cherry-picked on the rebased branch. It adds a static-cargo regression with both shipping --target arguments and inherited RUSTFLAGS; the required red run is queued through build-slot. No implementation change yet.

MS-7 test-only commit `40f8d14f6` is cherry-picked on the rebased branch. It adds a static-cargo regression with both shipping `--target` arguments and inherited `RUSTFLAGS`; the required red run is queued through build-slot. No implementation change yet.
Author
Owner

MS-6 real-engine validation is green on the 4-vCPU perf VM: all 9 startup/manual-start cases passed and 1,001 paired baseline/guarded samples per shell met the 1 ms p99 overhead budget (CPUWeight=10000). Guarded-minus-baseline p99: sh +0.517 ms, Bash +0.235 ms, Zsh +0.792 ms, Fish -0.135 ms; load snapshots were 2.09 / 1.96 / 1.15 through 1.63 / 1.78 / 1.22. The earlier Fish +2.854 ms result was not reproduced on this rerun. Receipt: full VM log.

MS-6 real-engine validation is green on the 4-vCPU perf VM: all 9 startup/manual-start cases passed and 1,001 paired baseline/guarded samples per shell met the 1 ms p99 overhead budget (CPUWeight=10000). Guarded-minus-baseline p99: sh +0.517 ms, Bash +0.235 ms, Zsh +0.792 ms, Fish -0.135 ms; load snapshots were 2.09 / 1.96 / 1.15 through 1.63 / 1.78 / 1.22. The earlier Fish +2.854 ms result was not reproduced on this rerun. Receipt: [full VM log](https://git.kayg.org/attachments/29739f93-b39b-41dc-8f7f-f5b775799dde).
Author
Owner

MS-6 implementation committed as 72e9fcd86 (separate from test commit 0a7d401ff). The login-profile regression is green, shim Clippy passes, the startup unit suite passes 10/10, and the perf-VM real-engine matrix passes 9/9 with all p99 deltas within 1 ms: sh +0.517, Bash +0.235, Zsh +0.792, Fish -0.135 ms. Receipt: real-shell matrix.

MS-6 implementation committed as `72e9fcd86` (separate from test commit `0a7d401ff`). The login-profile regression is green, shim Clippy passes, the startup unit suite passes 10/10, and the perf-VM real-engine matrix passes 9/9 with all p99 deltas within 1 ms: sh +0.517, Bash +0.235, Zsh +0.792, Fish -0.135 ms. Receipt: [real-shell matrix](https://git.kayg.org/attachments/29739f93-b39b-41dc-8f7f-f5b775799dde).
Author
Owner

Final fast attempt found an environment-sensitive test failure: restart::tests::runtime_directory_symlinks_and_public_permissions_are_refused, crates/infraternal/src/restart_tests.rs:222, assertion Control::start(&directory.0).is_err(); CLI results 78 passed / 1 failed / 1 ignored. This invocation used umask 077; the fixture requests a public directory via its creation mode, which a restrictive umask removes. No source changes and no #118 waiver. Retaining the first log and allowing its static builds to finish; then replay the exact test and full gate with ordinary umask 022. The report remains pushed at b5c352450. Initial transcript: /home/kayg/.cache/codex-scratch/review-d297-fit/evidence/verify-fast.log.

Final fast attempt found an environment-sensitive test failure: restart::tests::runtime_directory_symlinks_and_public_permissions_are_refused, crates/infraternal/src/restart_tests.rs:222, assertion Control::start(&directory.0).is_err(); CLI results 78 passed / 1 failed / 1 ignored. This invocation used umask 077; the fixture requests a public directory via its creation mode, which a restrictive umask removes. No source changes and no #118 waiver. Retaining the first log and allowing its static builds to finish; then replay the exact test and full gate with ordinary umask 022. The report remains pushed at b5c352450. Initial transcript: /home/kayg/.cache/codex-scratch/review-d297-fit/evidence/verify-fast.log.
Author
Owner

MS-7 red confirmed after cherry-picking 40f8d14f6: bun test scripts/release/build-metadata.test.ts reports 2 pass / 1 fail (2.07 s). With both shipping --target arguments, scripts/static-cargo places --cfg=review_multiple_targets only on the first target, so the second target lacks inherited RUSTFLAGS. The wrapped run is still queued; this short fixture-only Bun test was run directly while build-slot remained occupied. No implementation change yet. Receipt: test output.

MS-7 red confirmed after cherry-picking `40f8d14f6`: `bun test scripts/release/build-metadata.test.ts` reports 2 pass / 1 fail (2.07 s). With both shipping `--target` arguments, `scripts/static-cargo` places `--cfg=review_multiple_targets` only on the first target, so the second target lacks inherited `RUSTFLAGS`. The wrapped run is still queued; this short fixture-only Bun test was run directly while build-slot remained occupied. No implementation change yet. Receipt: [test output](https://git.kayg.org/attachments/877bccfb-4c8d-4ac0-a0ab-89f0d0064758).
Author
Owner

MS-7 fix committed as cc0b8e626, after the separate regression test commit 40f8d14f6. The release metadata suite now passes 3/3 (29 assertions), including inherited flags on both requested shipping targets; bash -n scripts/static-cargo and git diff --check pass. Receipt: green test.

MS-7 fix committed as `cc0b8e626`, after the separate regression test commit `40f8d14f6`. The release metadata suite now passes 3/3 (29 assertions), including inherited flags on both requested shipping targets; `bash -n scripts/static-cargo` and `git diff --check` pass. Receipt: [green test](https://git.kayg.org/attachments/7f5079ae-5243-4b3f-a571-bc0ef98f4bff).
Author
Owner

MS-8 test-only commit 9c89b939f is cherry-picked on the branch. It covers deferred ENV="$HOME/.sh-env" expansion with skip disabled and enabled; the targeted Rust test is queued through build-slot. No implementation change yet.

MS-8 test-only commit `9c89b939f` is cherry-picked on the branch. It covers deferred `ENV="$HOME/.sh-env"` expansion with skip disabled and enabled; the targeted Rust test is queued through build-slot. No implementation change yet.
Author
Owner

MS-8 red confirmation is queued through build-slot. All four regular build slots were held on the last status check; no implementation edit has been made before the required red run. The targeted command is cargo test --locked -p infraternal-shim --lib shell_startup::tests::posix_sh_startup_keeps_env_parameter_expansion -- --exact --nocapture.

MS-8 red confirmation is queued through build-slot. All four regular build slots were held on the last status check; no implementation edit has been made before the required red run. The targeted command is `cargo test --locked -p infraternal-shim --lib shell_startup::tests::posix_sh_startup_keeps_env_parameter_expansion -- --exact --nocapture`.
Author
Owner

MS-8 red confirmed after cherry-picking 9c89b939f. The targeted test's non-skip control reads the deferred $HOME/.sh-env, but skip=true omits it (0 passed / 1 failed; 103 filtered). The wrapper saves the unevaluated ENV value and then treats it as a literal pathname. Receipt: red Rust test.

MS-8 red confirmed after cherry-picking `9c89b939f`. The targeted test's non-skip control reads the deferred `$HOME/.sh-env`, but skip=true omits it (0 passed / 1 failed; 103 filtered). The wrapper saves the unevaluated `ENV` value and then treats it as a literal pathname. Receipt: [red Rust test](https://git.kayg.org/attachments/6069cc77-d788-4bf6-87bb-fda131bf0da6).
Author
Owner

First full fast attempt finished. Static builds PASS: x86_64 21,300,016 B; aarch64 19,500,376 B, both exact caps and no PT_INTERP. Native x86 key-memory check PASS. fmt/VT fmt/compile-out/Clippy/cargo-deny PASS; test FAIL (101), solely restart::tests::runtime_directory_symlinks_and_public_permissions_are_refused under invocation umask 077. Same compiled test under umask 022: 1 passed / 0 failed; no source/assertion/deadline change or waiver. Dispatcher did not reach TypeScript because Rust test row failed. Exact-base static comparison queued through build-slot, then final head full replay with umask 022. Initial gate also ended with an outer zsh readonly-variable error in the status-printing wrapper; the complete inner gate summary is retained below.

First Rust summary (verbatim):

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

First full gate
Unchanged exact test replay
Head static receipt

First full fast attempt finished. Static builds PASS: x86_64 21,300,016 B; aarch64 19,500,376 B, both exact caps and no PT_INTERP. Native x86 key-memory check PASS. fmt/VT fmt/compile-out/Clippy/cargo-deny PASS; test FAIL (101), solely restart::tests::runtime_directory_symlinks_and_public_permissions_are_refused under invocation umask 077. Same compiled test under umask 022: 1 passed / 0 failed; no source/assertion/deadline change or waiver. Dispatcher did not reach TypeScript because Rust test row failed. Exact-base static comparison queued through build-slot, then final head full replay with umask 022. Initial gate also ended with an outer zsh readonly-variable error in the status-printing wrapper; the complete inner gate summary is retained below. First Rust summary (verbatim): ```text +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | test | FAIL (101) | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` [First full gate](https://git.kayg.org/attachments/c8fa72c5-efdc-4322-9954-e5eb836ef887) [Unchanged exact test replay](https://git.kayg.org/attachments/0f30aa4a-18c1-4594-8bd6-25e524fda170) [Head static receipt](https://git.kayg.org/attachments/86cc3420-a9d6-47db-a372-969ed889ff0f)
Author
Owner

MS-8 local fix is green in the focused gates: shim Clippy passes, shell-startup tests pass 11/11, including the deferred $HOME/.sh-env regression. The shell wrapper re-applies parameter expansion with the result held as one pathname; absolute ENV paths bypass the expansion loop. Perf-VM startup measurement remains pending before commit. Receipt: focused gates.

MS-8 local fix is green in the focused gates: shim Clippy passes, shell-startup tests pass 11/11, including the deferred `$HOME/.sh-env` regression. The shell wrapper re-applies parameter expansion with the result held as one pathname; absolute ENV paths bypass the expansion loop. Perf-VM startup measurement remains pending before commit. Receipt: [focused gates](https://git.kayg.org/attachments/a977167b-0b95-46a5-a61f-0f2fe8ece292).
Author
Owner

Size comparison complete, same shipping recipe on exact merge base 7884d13dc and head b5c352450: x86_64 base = head = 21,300,016 B, measured delta 0 B, byte-identical SHA256 236e8496260f6de12d93ecd0e0ce1f920716e1029b6a3db0ecdf1bccfe055606. Base file is stripped static PIE. One job target folder was reused; no dependency or binary feature changes. Final head full fast replay queued through build-slot with umask 022 and RUST_TEST_THREADS=1; first failed transcript remains attached and no test/assertion/deadline is changed.

Size comparison complete, same shipping recipe on exact merge base 7884d13dc and head b5c352450: x86_64 base = head = 21,300,016 B, measured delta 0 B, byte-identical SHA256 236e8496260f6de12d93ecd0e0ce1f920716e1029b6a3db0ecdf1bccfe055606. Base file is stripped static PIE. One job target folder was reused; no dependency or binary feature changes. Final head full fast replay queued through build-slot with umask 022 and RUST_TEST_THREADS=1; first failed transcript remains attached and no test/assertion/deadline is changed.
Author
Owner

The umask-022 full replay stopped before Rust/TS at scripts/latency_proxy.py self-test --samples 3: configured 300 ms RTT did not arrive (p50=335.72 ms, p99=478.04 ms). This is a shared-build-host harness failure, not accepted product performance evidence and not a #118 waiver. No test/assertion/deadline changes. Retrying the identical full gate through build-slot inside systemd-run --user --scope -p CPUWeight=10000, with serial Rust tests. Exact-base size comparison passed with byte-identical base/head (0 B delta); receipts: comparison, base build. Head remains b5c352450.

The umask-022 full replay stopped before Rust/TS at scripts/latency_proxy.py self-test --samples 3: configured 300 ms RTT did not arrive (p50=335.72 ms, p99=478.04 ms). This is a shared-build-host harness failure, not accepted product performance evidence and not a #118 waiver. No test/assertion/deadline changes. Retrying the identical full gate through build-slot inside systemd-run --user --scope -p CPUWeight=10000, with serial Rust tests. Exact-base size comparison passed with byte-identical base/head (0 B delta); receipts: [comparison](https://git.kayg.org/attachments/618706b4-5225-4e43-b779-729c6a77f32f), [base build](https://git.kayg.org/attachments/af293898-0160-47f2-a5ae-cdcbe76652f3). Head remains b5c352450.
Author
Owner

MS-8 focused gates are green (targeted regression 1/1; shim Clippy passes; shell-startup suite 11/11). I am consolidating the perf-VM startup matrix after MS-9 because it changes the same shell startup hook; the ≤1 ms p99 budget remains an end-of-lane gate. The static test-binary build is queued through build-slot.

MS-8 focused gates are green (targeted regression 1/1; shim Clippy passes; shell-startup suite 11/11). I am consolidating the perf-VM startup matrix after MS-9 because it changes the same shell startup hook; the ≤1 ms p99 budget remains an end-of-lane gate. The static test-binary build is queued through build-slot.
Author
Owner

MS-8 fix committed as 06184b65c, after regression-test commit 9c89b939f. The targeted ENV expansion test passes 1/1, shim Clippy passes, and the shell-startup suite passes 11/11. The real-engine p99 matrix remains scheduled after MS-9; no performance result is attributed to this commit yet. Receipt: focused gates.

MS-8 fix committed as `06184b65c`, after regression-test commit `9c89b939f`. The targeted ENV expansion test passes 1/1, shim Clippy passes, and the shell-startup suite passes 11/11. The real-engine p99 matrix remains scheduled after MS-9; no performance result is attributed to this commit yet. Receipt: [focused gates](https://git.kayg.org/attachments/a977167b-0b95-46a5-a61f-0f2fe8ece292).
Author
Owner

MS-9 test-only commit efe520df2 is cherry-picked on the branch. It defines a manual tmux function in a real Bash login profile and asserts skip=true preserves it; the targeted Rust test is queued through build-slot. No implementation change yet.

MS-9 test-only commit `efe520df2` is cherry-picked on the branch. It defines a manual `tmux` function in a real Bash login profile and asserts skip=true preserves it; the targeted Rust test is queued through build-slot. No implementation change yet.
Author
Owner

MS-9 red confirmed after cherry-picking efe520df2. The real-Bash regression passes with skipping disabled, but with skip=true the manual call resolves to the external probe (EXTERNAL:review-manual) instead of the user's .bashrc function (CUSTOM:review-manual); 0 passed / 1 failed, 104 filtered. This ran from the already-built static test binary as a non-timing functional test. Receipt: red Bash test.

MS-9 red confirmed after cherry-picking `efe520df2`. The real-Bash regression passes with skipping disabled, but with skip=true the manual call resolves to the external probe (`EXTERNAL:review-manual`) instead of the user's `.bashrc` function (`CUSTOM:review-manual`); 0 passed / 1 failed, 104 filtered. This ran from the already-built static test binary as a non-timing functional test. Receipt: [red Bash test](https://git.kayg.org/attachments/ab81cc87-e981-4f69-9620-5f477b73d11a).
Author
Owner

Weighted full replay passed RTT precheck and all 79 CLI tests, including the prior directory-mode case. It then failed daemon::gone_tests::a_vanished_session_gets_a_final_close_and_the_channel_stays_up at crates/infraternal-agent/src/daemon_gone_tests.rs:111: UnixListener bind: path must be shorter than SUN_LEN. Fixture path under TMPDIR=.../d297 is 109 bytes. A job-owned compact .../d7 root makes the same generated path 107 bytes. No source/assertion/deadline change or #118 waiver. Retain this run through static checks, replay the exact test with the shorter root, then rerun full fast. Head b5c352450 remains report-only; these are test-environment corrections, not D297 findings.

Weighted full replay passed RTT precheck and all 79 CLI tests, including the prior directory-mode case. It then failed daemon::gone_tests::a_vanished_session_gets_a_final_close_and_the_channel_stays_up at crates/infraternal-agent/src/daemon_gone_tests.rs:111: UnixListener bind: path must be shorter than SUN_LEN. Fixture path under TMPDIR=.../d297 is 109 bytes. A job-owned compact .../d7 root makes the same generated path 107 bytes. No source/assertion/deadline change or #118 waiver. Retain this run through static checks, replay the exact test with the shorter root, then rerun full fast. Head b5c352450 remains report-only; these are test-environment corrections, not D297 findings.
Author
Owner

MS-9 fix is in the worktree but not committed. Its targeted green Cargo run and the final shim gates are queued behind the host-wide build-slot pool; all four regular slots remain occupied. Needed to continue: one slot to open in the shared queue. No test or build is running outside that manager.

MS-9 fix is in the worktree but not committed. Its targeted green Cargo run and the final shim gates are queued behind the host-wide build-slot pool; all four regular slots remain occupied. Needed to continue: one slot to open in the shared queue. No test or build is running outside that manager.
Author
Owner

Checkpoint: report complete and pushed at b5c352450f; only docs/verification/d297-fit-review.md changed. Measured x86 delta 0 B and byte-identical exact-base/head, 21,300,016 B. Both shipping static checks pass at exact caps. Prior weighted full attempt failed only the 109-byte scratch socket (126 pass/1 fail/21 ignored in infraternal-agent); same executable passes that case with 107-byte .../d7 root.

Final full replay is alive but waiting about 10 minutes in build-slot; no build/test from this job is currently running. Invocation: build-slot systemd-run --user --scope -p CPUWeight=10000 scripts/verify fast. Environment: umask 022; CARGO_TARGET_DIR=/home/kayg/.cache/codex-scratch/review-d297-fit/target; TMPDIR and INFRATERNAL_TEST_STATE_ROOT=/home/kayg/.cache/codex-scratch/d7; RUST_TEST_THREADS=1; TRACER_TEST_PORT=4297. Pending log: /home/kayg/.cache/codex-scratch/review-d297-fit/evidence/verify-fast-compact.log. No source/assertion/deadline changes or waived gate rows.

Weighted attempt
Unchanged short-root replay
RTT-precheck failed attempt

Checkpoint: report complete and pushed at b5c352450fe21e196604d3f12d9ca4cbbc692296; only docs/verification/d297-fit-review.md changed. Measured x86 delta 0 B and byte-identical exact-base/head, 21,300,016 B. Both shipping static checks pass at exact caps. Prior weighted full attempt failed only the 109-byte scratch socket (126 pass/1 fail/21 ignored in infraternal-agent); same executable passes that case with 107-byte .../d7 root. Final full replay is alive but waiting about 10 minutes in build-slot; no build/test from this job is currently running. Invocation: build-slot systemd-run --user --scope -p CPUWeight=10000 scripts/verify fast. Environment: umask 022; CARGO_TARGET_DIR=/home/kayg/.cache/codex-scratch/review-d297-fit/target; TMPDIR and INFRATERNAL_TEST_STATE_ROOT=/home/kayg/.cache/codex-scratch/d7; RUST_TEST_THREADS=1; TRACER_TEST_PORT=4297. Pending log: /home/kayg/.cache/codex-scratch/review-d297-fit/evidence/verify-fast-compact.log. No source/assertion/deadline changes or waived gate rows. [Weighted attempt](https://git.kayg.org/attachments/240c2ca0-006e-4a45-ac07-959a7b7fcf47) [Unchanged short-root replay](https://git.kayg.org/attachments/153e870c-a1d1-4e64-bd6f-79687604dd8f) [RTT-precheck failed attempt](https://git.kayg.org/attachments/8717532c-28f1-4c36-994d-3d8e2c73b140)
Author
Owner

Final compact-root fast replay remains queued after about 20 minutes; execution session is alive and verify-fast-compact.log is still empty (the wrapper has not started the gate). No build/test is running from this job and no slot bypass. Report/head b5c352450 and exact-base 0 B comparison are complete. Continuing to wait for the shared build slot; all pending invocation/environment details are in the previous checkpoint.

Final compact-root fast replay remains queued after about 20 minutes; execution session is alive and verify-fast-compact.log is still empty (the wrapper has not started the gate). No build/test is running from this job and no slot bypass. Report/head b5c352450 and exact-base 0 B comparison are complete. Continuing to wait for the shared build slot; all pending invocation/environment details are in the previous checkpoint.
Author
Owner

Final compact-root scripts/verify fast is still queued after about 30 minutes, with no gate output yet. Queue process 1318867 and controlling shell 1318863 remain alive; no earlier test/build descendants are running from this job. Head b5c352450 is fully pushed; report has 14 findings, exact-base/head x86 artifacts are byte-identical (0 B). Waiting on ordinary host build-slot capacity only. No source edits, slot bypass, deployment or issue closure.

Final compact-root scripts/verify fast is still queued after about 30 minutes, with no gate output yet. Queue process 1318867 and controlling shell 1318863 remain alive; no earlier test/build descendants are running from this job. Head b5c352450 is fully pushed; report has 14 findings, exact-base/head x86 artifacts are byte-identical (0 B). Waiting on ordinary host build-slot capacity only. No source edits, slot bypass, deployment or issue closure.
Author
Owner

MS-9 implementation smoke passes with real Bash: the current BASH_PROMPT_COMMAND was extracted from shell_startup.rs, installed in a fresh login shell, and sourced a test .bashrc; tmux review-manual resolved to CUSTOM:review-manual, not the external probe. This functional smoke does not replace the queued Rust regression/Clippy gates. Receipt: Bash smoke.

MS-9 implementation smoke passes with real Bash: the current `BASH_PROMPT_COMMAND` was extracted from `shell_startup.rs`, installed in a fresh login shell, and sourced a test `.bashrc`; `tmux review-manual` resolved to `CUSTOM:review-manual`, not the external probe. This functional smoke does not replace the queued Rust regression/Clippy gates. Receipt: [Bash smoke](https://git.kayg.org/attachments/d4ecca2a-5683-4427-86c2-87f1b46f8c81).
Author
Owner

Final compact-root fast is still queued at about 40 minutes. Queue PID 1318867 and its shell 1318863 remain alive; log remains empty, no gate started. Disk is above the shared guard threshold. All report work and exact-base 0 B comparison are complete; only shared build-slot capacity delays the full replay. Continuing to wait without bypassing the wrapper. Head b5c352450 remains pushed, unchanged.

Final compact-root fast is still queued at about 40 minutes. Queue PID 1318867 and its shell 1318863 remain alive; log remains empty, no gate started. Disk is above the shared guard threshold. All report work and exact-base 0 B comparison are complete; only shared build-slot capacity delays the full replay. Continuing to wait without bypassing the wrapper. Head b5c352450 remains pushed, unchanged.
Author
Owner

Review artifact ready: D297 fit review at b5c352450. 14 concrete scenarios: 9 blocks build, 5 needs a decision; 3 options and recommendation each. Strongest collisions are plain SSH vs the default-off promise, admin approval vs session-owner consent (D187), and immediate stop vs disconnected mesh operation. Recommendations preserve one automation switch and existing human control paths, rather than choosing a new engine or changing owner decisions. Report-only diff and whitespace rechecked; all other tracked inputs match base. Exact-base x86 size delta 0 B. Final compact-root full gate remains queued; no green final gate claimed yet.

Review artifact ready: [D297 fit review at b5c352450](https://git.kayg.org/kayg/infraternal/src/commit/b5c352450fe21e196604d3f12d9ca4cbbc692296/docs/verification/d297-fit-review.md). 14 concrete scenarios: 9 blocks build, 5 needs a decision; 3 options and recommendation each. Strongest collisions are plain SSH vs the default-off promise, admin approval vs session-owner consent (D187), and immediate stop vs disconnected mesh operation. Recommendations preserve one automation switch and existing human control paths, rather than choosing a new engine or changing owner decisions. Report-only diff and whitespace rechecked; all other tracked inputs match base. Exact-base x86 size delta 0 B. Final compact-root full gate remains queued; no green final gate claimed yet.
Author
Owner

Read-only scheduler check after the long wait: build-slot tries four ordinary flock slots every 20 s. All four owner processes are alive; no dead queued command found. Recorded ordinary owners (2026-10-17 local +02): slot 1 PID3491399, acquired05:36:54, elapsed2h57m; slot2 PID1218343, acquired07:33:22, elapsed56m; slot3 PID3431285, acquired05:33:50, elapsed2h59m; slot4 PID3391291, acquired05:36:01, elapsed3h01m. Owner headers all have job=?. No holder, lock, priority list or job state changed. Final gate for review-d297-fit remains queued at PID1318867; report b5c352450 and measured 0 B comparison are complete. Continuing to wait for current owners to release ordinary capacity; orchestrator visibility only, no request to bypass slots.

Read-only scheduler check after the long wait: build-slot tries four ordinary flock slots every 20 s. All four owner processes are alive; no dead queued command found. Recorded ordinary owners (2026-10-17 local +02): slot 1 PID3491399, acquired05:36:54, elapsed2h57m; slot2 PID1218343, acquired07:33:22, elapsed56m; slot3 PID3431285, acquired05:33:50, elapsed2h59m; slot4 PID3391291, acquired05:36:01, elapsed3h01m. Owner headers all have job=?. No holder, lock, priority list or job state changed. Final gate for review-d297-fit remains queued at PID1318867; report b5c352450 and measured 0 B comparison are complete. Continuing to wait for current owners to release ordinary capacity; orchestrator visibility only, no request to bypass slots.
Author
Owner

Read-only capacity checkpoint: slot1 edge-autoupdate PID3491399 (cargo/rustc); slot2 ping-fifo-fix PID2267146 (cargo/sccache); slot3 app-windows-ship PID3431285 (cargo/rustc); slot4 edge-autoupdate PID3391291 (cargo/rustc). Slots1/3/4 remain held for roughly3h; slot2 changed owner while review-d297-fit waited. All current holders have live commands, so this is not an empty/dead queue. edge-autoupdate currently occupies two ordinary slots. No other process/lock/job was changed. review-d297-fit still waits at PID1318867; its report b5c352450 and 0 B size comparison are complete, final compact-root full replay pending ordinary capacity. Recording for orchestrator visibility; continuing without bypass.

Read-only capacity checkpoint: slot1 edge-autoupdate PID3491399 (cargo/rustc); slot2 ping-fifo-fix PID2267146 (cargo/sccache); slot3 app-windows-ship PID3431285 (cargo/rustc); slot4 edge-autoupdate PID3391291 (cargo/rustc). Slots1/3/4 remain held for roughly3h; slot2 changed owner while review-d297-fit waited. All current holders have live commands, so this is not an empty/dead queue. edge-autoupdate currently occupies two ordinary slots. No other process/lock/job was changed. review-d297-fit still waits at PID1318867; its report b5c352450 and 0 B size comparison are complete, final compact-root full replay pending ordinary capacity. Recording for orchestrator visibility; continuing without bypass.
Author
Owner

review-d297-fit, takeover after the previous worker stopped: finished.

  • Branch review-d297-fit, head b5c352450 (already pushed, no new commits). The diff against base 7884d13dc is docs only: docs/verification/d297-fit-review.md.
  • I checked the report's main citations against DECISIONS.md on origin/dev: D297's text, D187 (an uninvited admin can only view), D294 Give/Keep, and D235 (plain authorized_keys without a person). They match. The 14 findings stand.
  • Gate: the last compact-root scripts/verify fast run started and then ended along with the interrupted worker. Its log (~/.cache/codex-scratch/review-d297-fit/evidence/verify-fast-compact.log) has 0 failures as far as it got, but no final table. I have not re-run it: this takeover was told to run no builds, and the diff is docs only. No green final gate is claimed.
  • Owner questions from the report (F1 SSH scope, F3 admin approval vs owner consent, F4 accounts on one machine, F5 root/sudo, F6 unattended work vs "Allow when a rule permits", F8 Remote Desktop handover, F10 what one approval covers, F11/F12 offline and restart) go to the orchestrator for the owner grill.
review-d297-fit, takeover after the previous worker stopped: finished. - Branch `review-d297-fit`, head `b5c352450` (already pushed, no new commits). The diff against base `7884d13dc` is docs only: `docs/verification/d297-fit-review.md`. - I checked the report's main citations against DECISIONS.md on origin/dev: D297's text, D187 (an uninvited admin can only view), D294 Give/Keep, and D235 (plain `authorized_keys` without a person). They match. The 14 findings stand. - Gate: the last compact-root `scripts/verify fast` run started and then ended along with the interrupted worker. Its log (`~/.cache/codex-scratch/review-d297-fit/evidence/verify-fast-compact.log`) has 0 failures as far as it got, but no final table. I have not re-run it: this takeover was told to run no builds, and the diff is docs only. **No green final gate is claimed.** - Owner questions from the report (F1 SSH scope, F3 admin approval vs owner consent, F4 accounts on one machine, F5 root/sudo, F6 unattended work vs "Allow when a rule permits", F8 Remote Desktop handover, F10 what one approval covers, F11/F12 offline and restart) go to the orchestrator for the owner grill.
Author
Owner

Takeover finish. Head 90a3f065f on multiplexer-skip. Delta-review P2s 1-4 fixed, each failing test cherry-picked first, one fix commit per finding.

scripts/verify fast final table (run under nice 19, host load ~37):

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

Static size: aarch64 +1024 B, x86_64 +5312 B over caps (known registry-path environment issue, caps not raised).
clippy FAIL was an OpenSSL build race under load (missing generated headers); standalone rerun: clippy --workspace --all-targets -D warnings exit 0. test FAIL was ssh_askpass real_cli_unlocks...; standalone rerun 2 passed 0 failed. Not rerun as a whole table.

Takeover finish. Head 90a3f065f on multiplexer-skip. Delta-review P2s 1-4 fixed, each failing test cherry-picked first, one fix commit per finding. `scripts/verify fast` final table (run under nice 19, host load ~37): ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | FAIL (101) | | test | FAIL (101) | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ``` Static size: aarch64 +1024 B, x86_64 +5312 B over caps (known registry-path environment issue, caps not raised). clippy FAIL was an OpenSSL build race under load (missing generated headers); standalone rerun: clippy --workspace --all-targets -D warnings exit 0. test FAIL was ssh_askpass real_cli_unlocks...; standalone rerun 2 passed 0 failed. Not rerun as a whole table.
Author
Owner

Takeover finish. Head 00299ee9f (rebased onto remote tip; shell_startup 12/12 and test-rustc-paths rerun after rebase) on multiplexer-skip. Delta-review P2s 1-4 fixed, each failing test cherry-picked first, one fix commit per finding.

scripts/verify fast final table (run under nice 19, host load ~37):

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

Static size: aarch64 +1024 B, x86_64 +5312 B over caps (known registry-path environment issue, caps not raised).
clippy FAIL was an OpenSSL build race under load (missing generated headers); standalone rerun: clippy --workspace --all-targets -D warnings exit 0. test FAIL was ssh_askpass real_cli_unlocks...; standalone rerun 2 passed 0 failed. Not rerun as a whole table.

Takeover finish. Head 00299ee9f (rebased onto remote tip; shell_startup 12/12 and test-rustc-paths rerun after rebase) on multiplexer-skip. Delta-review P2s 1-4 fixed, each failing test cherry-picked first, one fix commit per finding. `scripts/verify fast` final table (run under nice 19, host load ~37): ``` +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | FAIL (101) | | test | FAIL (101) | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ``` Static size: aarch64 +1024 B, x86_64 +5312 B over caps (known registry-path environment issue, caps not raised). clippy FAIL was an OpenSSL build race under load (missing generated headers); standalone rerun: clippy --workspace --all-targets -D warnings exit 0. test FAIL was ssh_askpass real_cli_unlocks...; standalone rerun 2 passed 0 failed. Not rerun as a whole table.
Author
Owner

Started S0 on branch d241-shell-marker, based on origin/dev at adee19da07cea19e538cb801858ce0d901841b3a (HEAD matches base; worktree clean). Read D241, the #251 map/comments and the #170 history. Scope is D241 session marker, startup-only auto-start skip, first-use notice, and per-host/global opt-out; no deploy.

Started S0 on branch `d241-shell-marker`, based on `origin/dev` at `adee19da07cea19e538cb801858ce0d901841b3a` (HEAD matches base; worktree clean). Read D241, the #251 map/comments and the #170 history. Scope is D241 session marker, startup-only auto-start skip, first-use notice, and per-host/global opt-out; no deploy.
Author
Owner

Finding: D241 needs an additive terminal.open setting so the server can tell the shim to guard login startup. The existing leg-B Open schema is strict; Hello capability bit 8 is unused on this branch. I am adding optional skip_multiplexer_autostart with default false, sending it only to peers advertising that bit, and omitting it for readiness opens. This keeps old peers compatible and preserves the existing frame shape. The account-scoped preference migration also preserves all existing global plugin rows.

Finding: D241 needs an additive terminal.open setting so the server can tell the shim to guard login startup. The existing leg-B Open schema is strict; Hello capability bit 8 is unused on this branch. I am adding optional `skip_multiplexer_autostart` with default false, sending it only to peers advertising that bit, and omitting it for readiness opens. This keeps old peers compatible and preserves the existing frame shape. The account-scoped preference migration also preserves all existing global plugin rows.
Author
Owner

Finding: the first bun run check in apps/tracer stopped with TS2688 for missing bun-types and node definitions. This worktree has no node_modules; I am installing the app's locked Bun dependencies and will rerun the check.

Finding: the first `bun run check` in `apps/tracer` stopped with TS2688 for missing `bun-types` and `node` definitions. This worktree has no `node_modules`; I am installing the app's locked Bun dependencies and will rerun the check.
Author
Owner

Step complete: installed the 38 locked app packages with bun install --no-save; bun run check in apps/tracer exited 0. apps/tracer/bun.lock is unchanged.

Step complete: installed the 38 locked app packages with `bun install --no-save`; `bun run check` in `apps/tracer` exited 0. `apps/tracer/bun.lock` is unchanged.
Author
Owner

Step complete: committed and pushed 3e358da1f (shared plugin API socket actions). Object-only decoding and authenticated bounded reply framing now have one reusable API; plugin-specific action behavior remains in each plugin. cargo test -p infraternal-plugin-api --features socket-host: 32 passed, 1 ignored; routing review: 2 passed. cargo clippy -p infraternal-plugin-api --features socket-host --all-targets -- -D warnings: PASS. cargo fmt --all -- --check and git diff --check: PASS.

Step complete: committed and pushed `3e358da1f` (shared plugin API socket actions). Object-only decoding and authenticated bounded reply framing now have one reusable API; plugin-specific action behavior remains in each plugin. `cargo test -p infraternal-plugin-api --features socket-host`: 32 passed, 1 ignored; routing review: 2 passed. `cargo clippy -p infraternal-plugin-api --features socket-host --all-targets -- -D warnings`: PASS. `cargo fmt --all -- --check` and `git diff --check`: PASS.
Author
Owner

Finding: D198 requires plugin settings and defaults to be declared with the plugin. The new preference descriptor in crates/plugins/terminal-preferences/src/lib.rs initially had no settings schema/default and its action schemas were placeholders. It now declares JSON schemas, the enabled=true default, and tests that validate the descriptor and both action schemas. I will rerun the plugin tests and clippy before committing the module.

Finding: D198 requires plugin settings and defaults to be declared with the plugin. The new preference descriptor in `crates/plugins/terminal-preferences/src/lib.rs` initially had no settings schema/default and its action schemas were placeholders. It now declares JSON schemas, the `enabled=true` default, and tests that validate the descriptor and both action schemas. I will rerun the plugin tests and clippy before committing the module.
Author
Owner

Gate wait: the migration test plus server clippy remain queued in the host build-slot wrapper. The four slots currently show a baseline server test, two scripts/verify iterate runs, and a browser integration run. No result or source failure yet; progress needs one slot released by those jobs. I am continuing read-only review while waiting.

Gate wait: the migration test plus server clippy remain queued in the host build-slot wrapper. The four slots currently show a baseline server test, two `scripts/verify iterate` runs, and a browser integration run. No result or source failure yet; progress needs one slot released by those jobs. I am continuing read-only review while waiting.
Author
Owner

Finding: the real Zsh integration test in crates/infraternal-shim/src/shell_startup.rs previously returned success when zsh was missing, which could silently skip a required shell check. It now requires Zsh to start successfully, matching the Bash test's fail-closed behavior. I will run both login-shell tests on this host before the shim commit.

Finding: the real Zsh integration test in `crates/infraternal-shim/src/shell_startup.rs` previously returned success when `zsh` was missing, which could silently skip a required shell check. It now requires Zsh to start successfully, matching the Bash test's fail-closed behavior. I will run both login-shell tests on this host before the shim commit.
Author
Owner

Finding: crates/infraternal-server/src/websocket.rs currently checks the terminal.multiplexer plugin ID and reads its storage directly. That is a feature-specific branch in core, contrary to D198. Proposed additive plugin API hook: enabled plugins may return bounded action options for a generic action ID and account/target context; the runtime gathers and merges them, and core forwards the merged options without naming a feature. The terminal preferences plugin would supply skip_multiplexer_autostart for terminal.open. The default hook is a no-op, so existing plugins and peers remain unchanged. I will record this contract addition before implementing it.

Finding: `crates/infraternal-server/src/websocket.rs` currently checks the `terminal.multiplexer` plugin ID and reads its storage directly. That is a feature-specific branch in core, contrary to D198. Proposed additive plugin API hook: enabled plugins may return bounded action options for a generic action ID and account/target context; the runtime gathers and merges them, and core forwards the merged options without naming a feature. The terminal preferences plugin would supply `skip_multiplexer_autostart` for `terminal.open`. The default hook is a no-op, so existing plugins and peers remain unchanged. I will record this contract addition before implementing it.
Author
Owner

Contract amendment for the D198 finding: each generic action extension will carry required_capabilities plus a JSON field map. The plugin runtime will collect extensions only from enabled plugins; the embedded transport will merge an extension only when the peer Hello advertises all required capability bits. It will reject duplicate/reserved keys and bound the merged object by MAX_ACTION_BYTES. This keeps legacy peers compatible without putting the feature name or capability bit in core; the terminal preferences plugin supplies the D241 field and capability. The hook remains optional and defaults to no extension.

Contract amendment for the D198 finding: each generic action extension will carry `required_capabilities` plus a JSON field map. The plugin runtime will collect extensions only from enabled plugins; the embedded transport will merge an extension only when the peer Hello advertises all required capability bits. It will reject duplicate/reserved keys and bound the merged object by `MAX_ACTION_BYTES`. This keeps legacy peers compatible without putting the feature name or capability bit in core; the terminal preferences plugin supplies the D241 field and capability. The hook remains optional and defaults to no extension.
Author
Owner

Finding: LiveSessions called prepare() from both onSessionCreated and onAttached; resumed sessions also attach, so they could claim the one-time “startup skipped” notice without running a guarded startup. Evidence: apps/tracer/src/canvas/sessions/live.ts had both calls. I’m restricting preparation to newly created sessions.

Finding: `LiveSessions` called `prepare()` from both `onSessionCreated` and `onAttached`; resumed sessions also attach, so they could claim the one-time “startup skipped” notice without running a guarded startup. Evidence: `apps/tracer/src/canvas/sessions/live.ts` had both calls. I’m restricting preparation to newly created sessions.
Author
Owner

Finding: the new terminal-preferences descriptor was inserted before the existing canvas descriptor in crates/infraternal-server/src/lib.rs, while compiled_with_hosts appends the plugin after canvas to preserve discovery positions. I’m moving the descriptor to the end of the catalog list.

Finding: the new terminal-preferences descriptor was inserted before the existing canvas descriptor in `crates/infraternal-server/src/lib.rs`, while `compiled_with_hosts` appends the plugin after canvas to preserve discovery positions. I’m moving the descriptor to the end of the catalog list.
Author
Owner

Finding: the first server compile rejected the new descriptor reference because crates/plugins/terminal-preferences/src/lib.rs declared DESCRIPTOR private; crates/infraternal-server/src/lib.rs includes it in the shared action catalog. I’m exporting the descriptor and rerunning the server migration gate.

Finding: the first server compile rejected the new descriptor reference because `crates/plugins/terminal-preferences/src/lib.rs` declared `DESCRIPTOR` private; `crates/infraternal-server/src/lib.rs` includes it in the shared action catalog. I’m exporting the descriptor and rerunning the server migration gate.
Author
Owner

Finding: server clippy failed on a needless borrow in crates/infraternal-shim/src/pty.rs:193 (&shell where shell is already a path reference). The migration tests passed 9/9; I’m removing the borrow and rerunning clippy.

Finding: server clippy failed on a needless borrow in `crates/infraternal-shim/src/pty.rs:193` (`&shell` where `shell` is already a path reference). The migration tests passed 9/9; I’m removing the borrow and rerunning clippy.
Author
Owner

Finding from the first server clippy run: crates/infraternal-server/src/websocket.rs has a redundant closure and an ignored-unit pattern at the generic action-options call; crates/infraternal-server/src/auth/socket_tests/plugin_lifecycle.rs has a 107-line test over the 100-line limit. Evidence: server clippy exited 101 with those three diagnostics. I will make the narrow style/test-organization fixes and rerun the gate.

Finding from the first server clippy run: `crates/infraternal-server/src/websocket.rs` has a redundant closure and an ignored-unit pattern at the generic action-options call; `crates/infraternal-server/src/auth/socket_tests/plugin_lifecycle.rs` has a 107-line test over the 100-line limit. Evidence: server clippy exited 101 with those three diagnostics. I will make the narrow style/test-organization fixes and rerun the gate.
Author
Owner

Step complete, HEAD 9b619f779 (pushed on d241-shell-marker). Migration 0031 adds account-scoped plugin rows, preserves global rows, and removes deleted-host overrides; release reads/writes remain global. Gates: cargo test -p infraternal-server --features terminal-preferences migration_compat_tests passed (9 tests); cargo test -p infraternal-plugin-release passed (8 passed, 1 ignored); server and release clippy passed with -D warnings. The ignored release writer-latency test remains scheduled for the perf VM.

Step complete, HEAD `9b619f779` (pushed on `d241-shell-marker`). Migration 0031 adds account-scoped plugin rows, preserves global rows, and removes deleted-host overrides; release reads/writes remain global. Gates: `cargo test -p infraternal-server --features terminal-preferences migration_compat_tests` passed (9 tests); `cargo test -p infraternal-plugin-release` passed (8 passed, 1 ignored); server and release clippy passed with `-D warnings`. The ignored release writer-latency test remains scheduled for the perf VM.
Author
Owner

Step complete, HEAD e1cc2c04e (pushed on d241-shell-marker). Added the generic plugin action-options hook and a capability bit; existing plugins retain the no-op default. Gates: plugin API tests passed (32 unit tests + 2 routing tests; 1 perf test ignored for the perf VM); clippy with -D warnings passed.

Step complete, HEAD `e1cc2c04e` (pushed on `d241-shell-marker`). Added the generic plugin action-options hook and a capability bit; existing plugins retain the no-op default. Gates: plugin API tests passed (32 unit tests + 2 routing tests; 1 perf test ignored for the perf VM); clippy with `-D warnings` passed.
Author
Owner

Finding during dependency review: crates/plugins/terminal-preferences/Cargo.toml listed infraternal-protocol, but the plugin source has no infraternal_protocol use; cargo tree -e features -p infraternal-plugin-terminal-preferences --depth 2 showed it as a direct dependency. I am removing this unused local dependency before the package gate.

Finding during dependency review: `crates/plugins/terminal-preferences/Cargo.toml` listed `infraternal-protocol`, but the plugin source has no `infraternal_protocol` use; `cargo tree -e features -p infraternal-plugin-terminal-preferences --depth 2` showed it as a direct dependency. I am removing this unused local dependency before the package gate.
Author
Owner

Finding: crates/infraternal-shim/src/shell_startup.rs clears PROMPT_COMMAND and runs the user's hook only once. That breaks normal Bash login sessions, where the hook must run on later prompts too. The existing test asserts only one invocation; I am strengthening it to verify consecutive prompts before changing the startup guard.

Finding: `crates/infraternal-shim/src/shell_startup.rs` clears `PROMPT_COMMAND` and runs the user's hook only once. That breaks normal Bash login sessions, where the hook must run on later prompts too. The existing test asserts only one invocation; I am strengthening it to verify consecutive prompts before changing the startup guard.
Author
Owner

Finding from the first terminal-preferences package test run: the nested test module uses DefaultValue without importing it (crates/plugins/terminal-preferences/src/lib.rs:766), so cargo test -p infraternal-plugin-terminal-preferences exited 101 with E0433. I will add the missing test import and rerun the package gate.

Finding from the first terminal-preferences package test run: the nested test module uses `DefaultValue` without importing it (`crates/plugins/terminal-preferences/src/lib.rs:766`), so `cargo test -p infraternal-plugin-terminal-preferences` exited 101 with E0433. I will add the missing test import and rerun the package gate.
Author
Owner

The new real-Bash regression test failed before the fix as intended: bash_guard_restores_an_inherited_prompt_command_after_the_first_prompt observed one inherited-hook:unset line where two prompt invocations were expected (0 passed, 1 failed). This confirms the guard discarded the user's hook after startup; I will restore the original scalar or array for subsequent prompts.

The new real-Bash regression test failed before the fix as intended: `bash_guard_restores_an_inherited_prompt_command_after_the_first_prompt` observed one `inherited-hook:unset` line where two prompt invocations were expected (0 passed, 1 failed). This confirms the guard discarded the user's hook after startup; I will restore the original scalar or array for subsequent prompts.
Author
Owner

Step complete, HEAD a5d9ef433 (pushed on d241-shell-marker). Added the build-removable terminal-preferences plugin package and wired its server/infraternal feature. Gates: cargo test -p infraternal-plugin-terminal-preferences passed (7/7); plugin clippy passed with -D warnings; cargo tree -e features showed no new third-party dependency. The unused local protocol dependency found during review was removed before the passing run.

Step complete, HEAD `a5d9ef433` (pushed on `d241-shell-marker`). Added the build-removable terminal-preferences plugin package and wired its server/infraternal feature. Gates: `cargo test -p infraternal-plugin-terminal-preferences` passed (7/7); plugin clippy passed with `-D warnings`; `cargo tree -e features` showed no new third-party dependency. The unused local protocol dependency found during review was removed before the passing run.
Author
Owner

Bash prompt-hook finding resolved. The new test failed before the fix (one invocation, expected two); after restoring the user's original scalar/array PROMPT_COMMAND, cargo test -p infraternal-shim shell_startup::tests::bash_guard_restores_an_inherited_prompt_command_after_the_first_prompt -- --exact passed (1 passed). The test uses a real interactive login Bash and confirms later hooks see the released marker state.

Bash prompt-hook finding resolved. The new test failed before the fix (one invocation, expected two); after restoring the user's original scalar/array `PROMPT_COMMAND`, `cargo test -p infraternal-shim shell_startup::tests::bash_guard_restores_an_inherited_prompt_command_after_the_first_prompt -- --exact` passed (1 passed). The test uses a real interactive login Bash and confirms later hooks see the released marker state.
Author
Owner

Finding from shim integration review: renaming Pty::spawn_with_readiness to carry the new startup policy left two call sites stale: crates/infraternal-shim/src/pty_handoff.rs:134 (test helper) and crates/infraternal-shim/src/user_host.rs:289 (runtime). rg confirms both still call the removed method. I stopped this job's queued clippy before it acquired a slot, and am updating those call sites before rerunning the gate.

Finding from shim integration review: renaming `Pty::spawn_with_readiness` to carry the new startup policy left two call sites stale: `crates/infraternal-shim/src/pty_handoff.rs:134` (test helper) and `crates/infraternal-shim/src/user_host.rs:289` (runtime). `rg` confirms both still call the removed method. I stopped this job's queued clippy before it acquired a slot, and am updating those call sites before rerunning the gate.
Author
Owner

The full shim test run completed its unit tests (103 passed, 13 ignored), including real Bash/Zsh login tests, then tests/mouse.rs failed because scripts/verify-vt-native.py could not find the zig executable (FileNotFoundError: [Errno 2]). This is a missing host toolchain, not an assertion failure. I am installing Zig under this job's scratch directory and will rerun the integration test.

The full shim test run completed its unit tests (103 passed, 13 ignored), including real Bash/Zsh login tests, then `tests/mouse.rs` failed because `scripts/verify-vt-native.py` could not find the `zig` executable (`FileNotFoundError: [Errno 2]`). This is a missing host toolchain, not an assertion failure. I am installing Zig under this job's scratch directory and will rerun the integration test.
Author
Owner

The mouse integration failure was environmental: the first run could not find Zig. Zig is now available under this job's scratch path, and cargo test -p infraternal-shim --test mouse passes (1/1). I am rerunning the complete shim package suite with the same PATH so all package integration tests execute.

The mouse integration failure was environmental: the first run could not find Zig. Zig is now available under this job's scratch path, and `cargo test -p infraternal-shim --test mouse` passes (1/1). I am rerunning the complete shim package suite with the same PATH so all package integration tests execute.
Author
Owner

Step complete, HEAD 8d27c6fa3 (pushed on d241-shell-marker). The agent now accepts the capability-negotiated optional open field; the shim exports INFRATERNAL_SESSION=1, guards startup only, and restores manual starts and Bash prompt hooks. Gates: shim tests passed (103 unit + 5 integration; 13 ignored); agent tests passed (71 unit + 2 transport; 7 ignored); shim and agent clippy passed with -D warnings. The real Bash and Zsh login-shell checks both passed.

Step complete, HEAD `8d27c6fa3` (pushed on `d241-shell-marker`). The agent now accepts the capability-negotiated optional open field; the shim exports `INFRATERNAL_SESSION=1`, guards startup only, and restores manual starts and Bash prompt hooks. Gates: shim tests passed (103 unit + 5 integration; 13 ignored); agent tests passed (71 unit + 2 transport; 7 ignored); shim and agent clippy passed with `-D warnings`. The real Bash and Zsh login-shell checks both passed.
Author
Owner

Docs slice pushed at 5eb0f2041. Updated wire and shim contracts and added the terminal startup settings schema. git diff --cached --check passed. Refs: D198, D202, D241.

Docs slice pushed at 5eb0f2041. Updated wire and shim contracts and added the terminal startup settings schema. `git diff --cached --check` passed. Refs: D198, D202, D241.
Author
Owner

Finding: isolated server clippy with terminal-preferences,remote linted infraternal-agent without its mesh feature and reported unnecessary_wraps at crates/infraternal-agent/src/plugins.rs:123,133. That file is unchanged from base adee19da0; production workspace defaults enable both agent features. Remote TCP and QUIC open tests passed 1/1 each. I’m rerunning package-scoped clippy and the agent with its production feature combination.

Finding: isolated server clippy with `terminal-preferences,remote` linted `infraternal-agent` without its mesh feature and reported `unnecessary_wraps` at `crates/infraternal-agent/src/plugins.rs:123,133`. That file is unchanged from base `adee19da0`; production workspace defaults enable both agent features. Remote TCP and QUIC open tests passed 1/1 each. I’m rerunning package-scoped clippy and the agent with its production feature combination.
Author
Owner

Gate queue status: the remaining remote clippy, production build, real-browser checks and repository iteration are queued behind the four shared build slots. No code check has failed in this wait; the feature-only clippy finding is recorded above. Continuing when a slot frees; no owner decision is needed.

Gate queue status: the remaining remote clippy, production build, real-browser checks and repository iteration are queued behind the four shared build slots. No code check has failed in this wait; the feature-only clippy finding is recorded above. Continuing when a slot frees; no owner decision is needed.
Author
Owner

Server slice pushed at 50405eee3. Enabled plugins now contribute bounded terminal.open options, gated by the connected agent capability; readiness opens and older peers retain the old shape. Tests passed: request shape 2/2; plugin socket/persistence, authenticated route, disabled plugin and local capability handshake 4/4; remote TCP/QUIC 2/2. Server clippy passed for default and remote feature sets; agent clippy passed with remote+mesh. The initial remote-without-mesh lint finding is recorded above and the file matched base.

Server slice pushed at 50405eee3. Enabled plugins now contribute bounded terminal.open options, gated by the connected agent capability; readiness opens and older peers retain the old shape. Tests passed: request shape 2/2; plugin socket/persistence, authenticated route, disabled plugin and local capability handshake 4/4; remote TCP/QUIC 2/2. Server clippy passed for default and remote feature sets; agent clippy passed with remote+mesh. The initial remote-without-mesh lint finding is recorded above and the file matched base.
Author
Owner

Gate queue update: the production static binary build and real-browser run have not started. The shared build-slot receipts show slots 1–3 occupied by scripts/verify fast and slot 4 by scripts/verify integration (23:06–23:25 +02). I am waiting for a slot; no source check has failed.

Gate queue update: the production static binary build and real-browser run have not started. The shared build-slot receipts show slots 1–3 occupied by `scripts/verify fast` and slot 4 by `scripts/verify integration` (23:06–23:25 +02). I am waiting for a slot; no source check has failed.
Author
Owner

Gate wait: all four build slots remain occupied (three scripts/verify fast, one scripts/verify integration). The shared filesystem has 19 GB available (97% used); the production static build is queued and has not started. I am waiting for a slot and disk headroom; no source check has failed.

Gate wait: all four build slots remain occupied (three `scripts/verify fast`, one `scripts/verify integration`). The shared filesystem has 19 GB available (97% used); the production static build is queued and has not started. I am waiting for a slot and disk headroom; no source check has failed.
Author
Owner

Gate wait update: all four build slots remain occupied by three scripts/verify fast runs and one scripts/verify integration run. Shared disk availability fell from 19 GB to 13 GB (98% used); the production static build remains queued and has not started. I am waiting for a slot and monitoring headroom; no source check has failed.

Gate wait update: all four build slots remain occupied by three `scripts/verify fast` runs and one `scripts/verify integration` run. Shared disk availability fell from 19 GB to 13 GB (98% used); the production static build remains queued and has not started. I am waiting for a slot and monitoring headroom; no source check has failed.
Author
Owner

Gate wait update: slot 1 is now running a WebKit test, slots 2 and 4 are running scripts/verify fast, and slot 3 is running a size gate. Shared disk availability is 9.6 GB (98% used); the production static build remains queued and has not started. I am waiting for capacity; no source check has failed.

Gate wait update: slot 1 is now running a WebKit test, slots 2 and 4 are running `scripts/verify fast`, and slot 3 is running a size gate. Shared disk availability is 9.6 GB (98% used); the production static build remains queued and has not started. I am waiting for capacity; no source check has failed.
Author
Owner

Finding: the first real-browser attempt stopped in fixture setup before application assertions. The socket path exceeded the 107-byte limit because INFRATERNAL_TEST_STATE_ROOT used the full job path. Evidence: run log, fixture error context. I created a 36-byte symlink alias inside scratch that resolves to this job's scratch directory; its constructed socket path is 103 bytes. I am retrying the regression check.

Finding: the first real-browser attempt stopped in fixture setup before application assertions. The socket path exceeded the 107-byte limit because `INFRATERNAL_TEST_STATE_ROOT` used the full job path. Evidence: [run log](https://git.kayg.org/attachments/ec521674-35e4-4f48-b7f0-9e26f9b9bcae), [fixture error context](https://git.kayg.org/attachments/05dae32e-ba72-4762-8344-dbc136c3f0bc). I created a 36-byte symlink alias inside scratch that resolves to this job's scratch directory; its constructed socket path is 103 bytes. I am retrying the regression check.
Author
Owner

Red regression check: when I temporarily prepared preferences on every attach, the real-server browser run passed the first-shell notice and host control, then failed on reattach with 2 terminal.multiplexer.prepare calls where 1 was expected (1 passed, 1 failed, 1 skipped). This demonstrates that reattaching can trigger another preference read. The final source keeps preparation on newly created sessions only. Receipt: red browser run.

Red regression check: when I temporarily prepared preferences on every attach, the real-server browser run passed the first-shell notice and host control, then failed on reattach with 2 `terminal.multiplexer.prepare` calls where 1 was expected (1 passed, 1 failed, 1 skipped). This demonstrates that reattaching can trigger another preference read. The final source keeps preparation on newly created sessions only. Receipt: [red browser run](https://git.kayg.org/attachments/6bc18983-f38e-4c11-8a4f-cc7e56caa0e8).
Author
Owner

UI slice committed and pushed as e3a06ba42.

The product uses the existing shared notice and Hosts switch row. Preparation runs only on new sessions. bun run check and git diff --check passed. The real production-server browser sequence passed 3/3: first-shell notice and host override, reattach without another preparation, and the account-wide switch. The stripped static x86_64 server binary is 21,196,368 bytes; base comparison is pending.

Screenshots were captured at 1440 px, 393 px and 375 px; Settings captures cover ink and paper themes. Notice desktop, notice phone, notice narrow phone, Settings desktop, ink, Settings phone, ink, Settings narrow phone, ink, Settings desktop, paper, Settings phone, paper, Settings narrow phone, paper. Browser transcript, static build receipt.

Refs: D16, D160, D198, D202, D241.

UI slice committed and pushed as `e3a06ba42`. The product uses the existing shared notice and Hosts switch row. Preparation runs only on new sessions. `bun run check` and `git diff --check` passed. The real production-server browser sequence passed 3/3: first-shell notice and host override, reattach without another preparation, and the account-wide switch. The stripped static x86_64 server binary is 21,196,368 bytes; base comparison is pending. Screenshots were captured at 1440 px, 393 px and 375 px; Settings captures cover ink and paper themes. [Notice desktop](https://git.kayg.org/attachments/a9e7cdc7-1478-4c8f-83d8-93f97d8e144f), [notice phone](https://git.kayg.org/attachments/7176404a-6f9c-4ed4-8d30-818a3dd6f43d), [notice narrow phone](https://git.kayg.org/attachments/50752411-d4e1-486c-afff-266ef361e460), [Settings desktop, ink](https://git.kayg.org/attachments/f5b3288b-7fa3-4eb3-8b7c-0d84f395c583), [Settings phone, ink](https://git.kayg.org/attachments/5216e8d6-224f-4d4e-baf9-ae1553482de3), [Settings narrow phone, ink](https://git.kayg.org/attachments/935661be-2dc8-4cd1-b000-0f37d6cb00a7), [Settings desktop, paper](https://git.kayg.org/attachments/7973a9ae-e753-4f09-a3ba-f488929350a5), [Settings phone, paper](https://git.kayg.org/attachments/95ccd071-e60b-4778-93e3-ed9b2118b154), [Settings narrow phone, paper](https://git.kayg.org/attachments/e0731f8f-135a-40e9-86f8-ac4e23fe59b2). [Browser transcript](https://git.kayg.org/attachments/73a971de-b241-4b9c-8867-368c86378403), [static build receipt](https://git.kayg.org/attachments/7430b2ed-8170-4c25-940b-cb8269107ef8). Refs: D16, D160, D198, D202, D241.
Author
Owner

The first perf VM harness invocation selected 0 tests: the short --exact filter reported 418 filtered out and produced no timing data (run transcript). The correct test ID is auth::tests::terminal_refusal_tests::terminal_open_preference_lookup_overhead_on_real_pool; rerunning with that fully qualified name.

The first perf VM harness invocation selected 0 tests: the short `--exact` filter reported 418 filtered out and produced no timing data ([run transcript](https://git.kayg.org/attachments/1f497493-5174-4482-8555-14964ba2f4f7)). The correct test ID is `auth::tests::terminal_refusal_tests::terminal_open_preference_lookup_overhead_on_real_pool`; rerunning with that fully qualified name.
Author
Owner

The second perf VM attempt selected the intended test but failed its environment precondition before collecting samples: INFRATERNAL_TEST_CPU_WEIGHT was absent (transcript). The shell assignment omitted the final L; rerunning with the exact variable name from the test.

The second perf VM attempt selected the intended test but failed its environment precondition before collecting samples: `INFRATERNAL_TEST_CPU_WEIGHT` was absent ([transcript](https://git.kayg.org/attachments/a423570b-0473-43be-ba4b-3393836723cc)). The shell assignment omitted the final `L`; rerunning with the exact variable name from the test.
Author
Owner

Perf and static-size step completed from source head e3a06ba42faf0857757abc5484dcef2c0e4238e7 (Cargo profile evidence comments are updated; profile commit and final gates are next).

Both runs used the static release test on infraternal-perf-test (4 cores), CPUWeight=10000, with 1,001 samples per state and load average recorded in each receipt. Run 1: off p99 7,855 µs, on p99 6,393 µs, delta -1,462 µs; load 0.00,0.02,0.01 before and after. Run 2: off p99 2,234 µs, on p99 1,441 µs, delta -793 µs; load 0.05,0.03,0.01 before and 0.20,0.06,0.02 after. Neither run measured a positive p99 delta. At 32 opens, simple linear arithmetic gives -46.784 ms and -25.376 ms; the harness serialized opens, so those are not concurrency measurements.

Stripped static x86_64 size: merge base 21,389,232 bytes; branch 21,196,368 bytes; delta -192,864 bytes.

Receipts: run 1, run 2, size comparison, branch size, base size.

Perf and static-size step completed from source head `e3a06ba42faf0857757abc5484dcef2c0e4238e7` (Cargo profile evidence comments are updated; profile commit and final gates are next). Both runs used the static release test on `infraternal-perf-test` (4 cores), `CPUWeight=10000`, with 1,001 samples per state and load average recorded in each receipt. Run 1: off p99 7,855 µs, on p99 6,393 µs, delta -1,462 µs; load 0.00,0.02,0.01 before and after. Run 2: off p99 2,234 µs, on p99 1,441 µs, delta -793 µs; load 0.05,0.03,0.01 before and 0.20,0.06,0.02 after. Neither run measured a positive p99 delta. At 32 opens, simple linear arithmetic gives -46.784 ms and -25.376 ms; the harness serialized opens, so those are not concurrency measurements. Stripped static x86_64 size: merge base 21,389,232 bytes; branch 21,196,368 bytes; delta -192,864 bytes. Receipts: [run 1](https://git.kayg.org/attachments/b76a5020-d748-41f8-bd28-89a34a728072), [run 2](https://git.kayg.org/attachments/6ed16a93-f34e-41cc-b6a5-3a1bd2b2fa3c), [size comparison](https://git.kayg.org/attachments/afb1438e-998b-4bdd-aea5-b95d101cfa2f), [branch size](https://git.kayg.org/attachments/1cb66492-a49f-439f-9aaf-3ba794150cc1), [base size](https://git.kayg.org/attachments/11e428c3-60ce-474f-9ef5-85f27c69d74b).
Author
Owner

D241 continuation handoff — blocked by D243 size, not ready to merge.

Pushed head: 6081996038 on d241-shell-marker. Merged dev 63773bb3ec; preserved #255 Tokio/AsyncFd code exactly and updated only the migration-chain test expectations for D241's 0031 migration. Working tree clean. All WIP release-profile changes and both reduction experiments were dropped. No new perf run is needed; no perf host was contacted.

Pinned scripts/static-cargo recipe, sequential architectures under build-slot, same job target:

  • x86_64: dev/current cap 21,386,512 B; head 21,538,768 B; +152,256 B.
  • aarch64: dev/current cap 19,563,608 B; head 19,701,056 B; +137,448 B.

Both exceed the shared rules' 64 KiB growth limit. Caps and docs/PROCESS.md remain unchanged. The next step requires owner authorization for these measured increases or a further source reduction. The unrelated server-wide s→z candidate must be reviewed separately; the earlier −192,864 B measurement is not D241's independent cost. Preferences-only z still grew +126,912 / +109,880 B, and the shared-query source candidate added 5,952 B versus this head; neither was retained. Attribution found no external feature/dependency additions and mainly SQLite pool/query text plus preference handlers.

Receipts: exact dev/head size builds, symbol attribution, rejected shared-query candidate, rejected scoped profile candidate.

Prior functional evidence: all 12 real-shell startup tests passed, including later manual starts; corrected remote migration suite 5/0; full separate TypeScript gate passed (356/0, 105/0, 17/0 frontend and 39/0 protocol, compiler and production build). The existing real production-server browser sequence passed 3/3 before the continuation merge; screenshot links remain in #251. Final fast results below supersede any earlier gate claim.

Final scripts/verify fast on the exact head exited 1. Only static builds failed: both size caps and the size-boundary regression that checks those same artifacts. TypeScript is not reached after the Rust failure; the separate full TypeScript pass above is the applicable evidence. Static linkage and production trust passed on both architectures; x86 AES and locked key-memory passed. aarch64 key-memory execution was not checked on this x86 host.

Full verbatim final gate transcript

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| CLI plugin compile-out    | PASS         |
| clippy                    | PASS         |
| SSH runtime test helper   | PASS         |
| real-binary fixture paths | PASS         |
| test                      | PASS         |
| SSH inode reuse fixture   | PASS         |
| shim process-per-user     | PASS         |
| cargo-deny                | PASS         |
| static builds             | FAIL (1)     |
+---------------------------+--------------+

Cleanup: temporary dev baseline worktree and job CARGO_TARGET_DIR removed; evidence retained outside the repo. No deploy. Issues remain open.

D241 continuation handoff — blocked by D243 size, not ready to merge. Pushed head: 6081996038b7cf8a6521adef9add9dea8596ce38 on d241-shell-marker. Merged dev 63773bb3ecd990b09d3663c1bd32b2cd8e49991f; preserved #255 Tokio/AsyncFd code exactly and updated only the migration-chain test expectations for D241's 0031 migration. Working tree clean. All WIP release-profile changes and both reduction experiments were dropped. No new perf run is needed; no perf host was contacted. Pinned scripts/static-cargo recipe, sequential architectures under build-slot, same job target: - x86_64: dev/current cap 21,386,512 B; head 21,538,768 B; +152,256 B. - aarch64: dev/current cap 19,563,608 B; head 19,701,056 B; +137,448 B. Both exceed the shared rules' 64 KiB growth limit. Caps and docs/PROCESS.md remain unchanged. The next step requires owner authorization for these measured increases or a further source reduction. The unrelated server-wide s→z candidate must be reviewed separately; the earlier −192,864 B measurement is not D241's independent cost. Preferences-only z still grew +126,912 / +109,880 B, and the shared-query source candidate added 5,952 B versus this head; neither was retained. Attribution found no external feature/dependency additions and mainly SQLite pool/query text plus preference handlers. Receipts: [exact dev/head size builds](https://git.kayg.org/attachments/c16bf8c8-07d6-4034-b524-fb97e35a3b6b), [symbol attribution](https://git.kayg.org/attachments/ea1a505e-37ba-4682-ac2e-17d2b7f30fe0), [rejected shared-query candidate](https://git.kayg.org/attachments/9a410766-43b3-4a28-8d98-d8f00a4fc15c), [rejected scoped profile candidate](https://git.kayg.org/attachments/d0872904-b1e1-497d-8626-b694eac3fb00). Prior functional evidence: all 12 real-shell startup tests passed, including later manual starts; corrected remote migration suite 5/0; full separate TypeScript gate passed (356/0, 105/0, 17/0 frontend and 39/0 protocol, compiler and production build). The existing real production-server browser sequence passed 3/3 before the continuation merge; screenshot links remain in #251. Final fast results below supersede any earlier gate claim. Final `scripts/verify fast` on the exact head exited 1. Only static builds failed: both size caps and the size-boundary regression that checks those same artifacts. TypeScript is not reached after the Rust failure; the separate full TypeScript pass above is the applicable evidence. Static linkage and production trust passed on both architectures; x86 AES and locked key-memory passed. aarch64 key-memory execution was not checked on this x86 host. [Full verbatim final gate transcript](https://git.kayg.org/attachments/771db28c-1e80-417e-acee-a6e47b29df41) ```text +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | SSH runtime test helper | PASS | | real-binary fixture paths | PASS | | test | PASS | | SSH inode reuse fixture | PASS | | shim process-per-user | PASS | | cargo-deny | PASS | | static builds | FAIL (1) | +---------------------------+--------------+ ``` Cleanup: temporary dev baseline worktree and job CARGO_TARGET_DIR removed; evidence retained outside the repo. No deploy. Issues remain open.
Author
Owner

D241 size implementation started on d241-shell-marker at 6081996038, matched dev baseline 63773bb3ec. Read the latest #251 handoff first and continuing its measurements. Worktree: ~/wt-infraternal/d241-size; sequential pinned static builds through build-slot, no release-profile changes or deployment. Will post crate/symbol attribution before source changes, then reduction measurements and final gate.

D241 size implementation started on d241-shell-marker at 6081996038b7cf8a6521adef9add9dea8596ce38, matched dev baseline 63773bb3ecd990b09d3663c1bd32b2cd8e49991f. Read the latest #251 handoff first and continuing its measurements. Worktree: ~/wt-infraternal/d241-size; sequential pinned static builds through build-slot, no release-profile changes or deployment. Will post crate/symbol attribution before source changes, then reduction measurements and final gate.
Author
Owner

D241 size follow-up finished; full attribution, retained-cost explanation and receipts are on #251.

Finished the D241 size implementation on pushed branch d241-shell-marker, head 1c349284b6. Four atomic commits retain host SQL execution sharing, fixed-response/discovery reuse, shared startup-file publication, and exact caps/docs. Working tree clean; remote HEAD matches.

Target Final stripped bytes Delta versus dev 63773bb3e Saved versus original D241
x86_64 musl 21,426,544 +40,032 112,224
aarch64 musl 19,596,928 +33,320 104,128

The <=16 KiB target remains unmet. The retained-cost justification above is for owner decision; this job does not claim an approved size exception. The third SQLx pool/worker instantiation is removed; no profile, dependency, feature, SQL, shell-program or existing assertion changes are retained. Atomic notice claims, account/host isolation, strict input validation, startup-only guards and build-removable plugin behavior remain covered. Author review checked those invariants and private-file publication order.

Final scripts/verify fast on this exact head exited 0. Both final gate binaries are byte-identical to the retained measured artifacts. Rust summary, verbatim:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| CLI plugin compile-out    | PASS         |
| clippy                    | PASS         |
| SSH runtime test helper   | PASS         |
| real-binary fixture paths | PASS         |
| test                      | PASS         |
| SSH inode reuse fixture   | PASS         |
| shim process-per-user     | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+

The complete TypeScript gate also passes: compiler, frontend 356/0, connection 105/0, terminal-query/write 17/0, production build/transfer budget, and protocol 39/0. Final protocol output, verbatim:

 39 pass
 0 fail
 36135 expect() calls
Ran 39 tests across 10 files. [3.50s]

Static production trust/linkage pass on both targets; x86_64 AES vector and locked/dump-excluded key heap pass. The gate explicitly does not execute the aarch64 key-memory check on this x86_64 host. No runtime performance claim is inferred from build-host test timings.

Two earlier failed gate runs are retained: a symlink scratch root conflicted with restart path validation; a later 111-byte fixture pathname exceeded Linux's Unix socket bound. A real private short directory fixed both, and the complete final gate was rerun without source changes or waived tests.

Cleanup verified: job CARGO_TARGET_DIR, temporary dev baseline worktree and all owned short fixture roots removed. Evidence stays outside the repository. No deploy; issues remain open.

final-fast.log
final-verification.txt
final-shipping-comparison.txt
check-cut2.log
check-cut3.log
cut3-x86_64-sections.txt
final-fast-symlink-fixture.log
final-fast-socket-path.log

D241 size follow-up finished; full attribution, retained-cost explanation and receipts are on #251. Finished the D241 size implementation on pushed branch `d241-shell-marker`, head **1c349284b6206e4c48eb4fd52a7acc7617611fa1**. Four atomic commits retain host SQL execution sharing, fixed-response/discovery reuse, shared startup-file publication, and exact caps/docs. Working tree clean; remote HEAD matches. | Target | Final stripped bytes | Delta versus dev 63773bb3e | Saved versus original D241 | |---|---:|---:|---:| | x86_64 musl | 21,426,544 | +40,032 | 112,224 | | aarch64 musl | 19,596,928 | +33,320 | 104,128 | **The <=16 KiB target remains unmet.** The retained-cost justification above is for owner decision; this job does not claim an approved size exception. The third SQLx pool/worker instantiation is removed; no profile, dependency, feature, SQL, shell-program or existing assertion changes are retained. Atomic notice claims, account/host isolation, strict input validation, startup-only guards and build-removable plugin behavior remain covered. Author review checked those invariants and private-file publication order. Final `scripts/verify fast` on this exact head **exited 0**. Both final gate binaries are byte-identical to the retained measured artifacts. Rust summary, verbatim: ```text +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | SSH runtime test helper | PASS | | real-binary fixture paths | PASS | | test | PASS | | SSH inode reuse fixture | PASS | | shim process-per-user | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` The complete TypeScript gate also passes: compiler, frontend 356/0, connection 105/0, terminal-query/write 17/0, production build/transfer budget, and protocol 39/0. Final protocol output, verbatim: ```text 39 pass 0 fail 36135 expect() calls Ran 39 tests across 10 files. [3.50s] ``` Static production trust/linkage pass on both targets; x86_64 AES vector and locked/dump-excluded key heap pass. The gate explicitly does not execute the aarch64 key-memory check on this x86_64 host. No runtime performance claim is inferred from build-host test timings. Two earlier failed gate runs are retained: a symlink scratch root conflicted with restart path validation; a later 111-byte fixture pathname exceeded Linux's Unix socket bound. A real private short directory fixed both, and the complete final gate was rerun without source changes or waived tests. Cleanup verified: job CARGO_TARGET_DIR, temporary dev baseline worktree and all owned short fixture roots removed. Evidence stays outside the repository. No deploy; issues remain open. [final-fast.log](https://git.kayg.org/attachments/370006d8-f395-4583-ac39-a9c5c87140a0) [final-verification.txt](https://git.kayg.org/attachments/90a0cb79-9850-4203-89df-9db1a418d73a) [final-shipping-comparison.txt](https://git.kayg.org/attachments/0f72a027-461a-460d-b430-b5897cf70fe2) [check-cut2.log](https://git.kayg.org/attachments/459dac0f-b96e-4e01-b0ac-45d8dce147bb) [check-cut3.log](https://git.kayg.org/attachments/02eb3283-e3a8-4f0b-8908-76404e025696) [cut3-x86_64-sections.txt](https://git.kayg.org/attachments/94970140-6e18-417f-baf8-82b769f0f0cf) [final-fast-symlink-fixture.log](https://git.kayg.org/attachments/cfcccfed-af24-41b5-ba55-54e36884161a) [final-fast-socket-path.log](https://git.kayg.org/attachments/5f723c52-2b0e-4360-8af4-6b4fc12aa8cb)
Author
Owner

Independent D241 review of 1c349284b is recorded on #251. Verdict: merge after fixes (0 P0 / 0 P1 / 3 P2 / 0 P3). Review branch review-d241, head 50d984e62ab1eccba3360e77d77af2f593389345, pushed; implementation unchanged. Failing tests cover stale persisted account setting after reload, retained startup markers after replacing the Zsh prompt-hook array, and retained markers after a Bash login profile execs Zsh. Required head fast gate exited 1 only on the two intentional shell regressions (both workspace and process-per-user); all other Rust rows, including both static builds, pass. The #251 comment contains the verbatim gate summary, full transcript, tests, locations, and evidence. Same-recipe merge-base size comparison and scratch cleanup are still pending behind shared slots. Issues remain open; no deployment.

Independent D241 review of `1c349284b` is recorded on #251. Verdict: **merge after fixes** (0 P0 / 0 P1 / 3 P2 / 0 P3). Review branch `review-d241`, head `50d984e62ab1eccba3360e77d77af2f593389345`, pushed; implementation unchanged. Failing tests cover stale persisted account setting after reload, retained startup markers after replacing the Zsh prompt-hook array, and retained markers after a Bash login profile execs Zsh. Required head fast gate exited 1 only on the two intentional shell regressions (both workspace and process-per-user); all other Rust rows, including both static builds, pass. The #251 comment contains the verbatim gate summary, full transcript, tests, locations, and evidence. Same-recipe merge-base size comparison and scratch cleanup are still pending behind shared slots. Issues remain open; no deployment.
Author
Owner

Independent review cleanup and size comparison finished; final record is on #251. x86_64 merge-base/head: 21,386,512 / 21,426,544 bytes (+40,032); aarch64 head matches 19,596,928 bytes. Review head 50d984e62ab1eccba3360e77d77af2f593389345 is pushed on review-d241; clean worktree, remote matches. Verdict remains merge after fixes: three P2 findings with committed failing tests. Required fast gate transcript and verbatim summary are on #251 (only R2/R3 fail in each shim configuration; other Rust rows pass). Review target directory, temporary baseline and private fixtures removed. No deployment; issues remain open.

Independent review cleanup and size comparison finished; final record is on #251. x86_64 merge-base/head: 21,386,512 / 21,426,544 bytes (+40,032); aarch64 head matches 19,596,928 bytes. Review head `50d984e62ab1eccba3360e77d77af2f593389345` is pushed on `review-d241`; clean worktree, remote matches. Verdict remains merge after fixes: three P2 findings with committed failing tests. Required fast gate transcript and verbatim summary are on #251 (only R2/R3 fail in each shim configuration; other Rust rows pass). Review target directory, temporary baseline and private fixtures removed. No deployment; issues remain open.
Author
Owner

D241 review fixes starting on d241-shell-marker, base 1c349284b6, worktree ~/wt-infraternal/d241-fix. Read #251/#170 history and merge-after-fixes verdict (R1/R2/R3, three P2). Will merge review-d241 and dev, fix each finding without weakening tests, remeasure both pinned static images and run the final fast gate. No deployment.

D241 review fixes starting on d241-shell-marker, base 1c349284b6206e4c48eb4fd52a7acc7617611fa1, worktree ~/wt-infraternal/d241-fix. Read #251/#170 history and merge-after-fixes verdict (R1/R2/R3, three P2). Will merge review-d241 and dev, fix each finding without weakening tests, remeasure both pinned static images and run the final fast gate. No deployment.
Author
Owner

Finished D241 R1–R3 on pushed branch d241-shell-marker, head e18cd7a0e5. Working tree is clean; remote head matches.

  • R1: read saved account preferences on welcome without claiming a startup notice; keep account defaults distinct from host overrides. Both opposite account/host combinations are covered.
  • R2: release Zsh guards at startup-file boundaries, independent of replaced prompt hooks; preserve top-level declarations, startup order and ZDOTDIR changes. Rejected adding more prompt hooks.
  • R3: keep Bash startup markers unexported, so an exec-selected replacement shell cannot inherit them. Rejected another cleanup hook because exec cannot return to it.

All 14 earlier shell test bodies and the original R1 review test remain byte-identical to review-d241. Both shim modes pass all 16 startup tests. The production-browser notice, reattach and saved-switch reload checks pass 3/3; seven real-production screenshots and earlier build/test receipts are attached above on #251.

Stripped static image Final bytes Delta versus dev 8f88bf086
x86_64 musl 21,457,904 +37,312 (dev 21,420,592)
aarch64 musl 19,632,048 +39,544 (dev 19,592,504)

The pinned builds ran one target at a time. Both exact caps and the short D243 paragraph use these measured artifacts with no slack; no dependency, feature, profile or recipe changes. Final gate images are byte-identical to the measured images.

Final scripts/verify fast on this exact head exited 0. Rust summary, verbatim:

+---------------------------+--------------+
| Rust gate                 | Result       |
+---------------------------+--------------+
| fmt                       | PASS         |
| VT native fmt             | PASS         |
| CLI plugin compile-out    | PASS         |
| clippy                    | PASS         |
| SSH runtime test helper   | PASS         |
| real-binary fixture paths | PASS         |
| test                      | PASS         |
| SSH inode reuse fixture   | PASS         |
| shim process-per-user     | PASS         |
| cargo-deny                | PASS         |
| static builds             | PASS         |
+---------------------------+--------------+

TypeScript compiler, production build and transfer budget pass; frontend 358/0, connection 105/0, terminal query/write 17/0. Final protocol output, verbatim:

 39 pass
 0 fail
 36135 expect() calls
Ran 39 tests across 10 files. [2.20s]

The complete unedited gate output and final verification receipt are attached below. Static trust/linkage checks pass on both targets; the key-memory runtime check runs on x86_64 and is explicitly skipped for aarch64 on this host.

Cleanup verified: CARGO_TARGET_DIR, the private short fixture root and scratch shell binary are deleted; no owned target/fixture processes remain. Evidence is outside the repository. Issues remain open.

final-fast.log
final-verification.txt

Finished D241 R1–R3 on pushed branch `d241-shell-marker`, head **e18cd7a0e5e1a9b58c192d5d6e9763b6eadfe451**. Working tree is clean; remote head matches. - R1: read saved account preferences on welcome without claiming a startup notice; keep account defaults distinct from host overrides. Both opposite account/host combinations are covered. - R2: release Zsh guards at startup-file boundaries, independent of replaced prompt hooks; preserve top-level declarations, startup order and ZDOTDIR changes. Rejected adding more prompt hooks. - R3: keep Bash startup markers unexported, so an exec-selected replacement shell cannot inherit them. Rejected another cleanup hook because exec cannot return to it. All 14 earlier shell test bodies and the original R1 review test remain byte-identical to review-d241. Both shim modes pass all 16 startup tests. The production-browser notice, reattach and saved-switch reload checks pass 3/3; seven real-production screenshots and earlier build/test receipts are attached above on #251. | Stripped static image | Final bytes | Delta versus dev 8f88bf086 | | --- | ---: | ---: | | x86_64 musl | 21,457,904 | +37,312 (dev 21,420,592) | | aarch64 musl | 19,632,048 | +39,544 (dev 19,592,504) | The pinned builds ran one target at a time. Both exact caps and the short D243 paragraph use these measured artifacts with no slack; no dependency, feature, profile or recipe changes. Final gate images are byte-identical to the measured images. Final `scripts/verify fast` on this exact head **exited 0**. Rust summary, verbatim: ```text +---------------------------+--------------+ | Rust gate | Result | +---------------------------+--------------+ | fmt | PASS | | VT native fmt | PASS | | CLI plugin compile-out | PASS | | clippy | PASS | | SSH runtime test helper | PASS | | real-binary fixture paths | PASS | | test | PASS | | SSH inode reuse fixture | PASS | | shim process-per-user | PASS | | cargo-deny | PASS | | static builds | PASS | +---------------------------+--------------+ ``` TypeScript compiler, production build and transfer budget pass; frontend 358/0, connection 105/0, terminal query/write 17/0. Final protocol output, verbatim: ```text 39 pass 0 fail 36135 expect() calls Ran 39 tests across 10 files. [2.20s] ``` The complete unedited gate output and final verification receipt are attached below. Static trust/linkage checks pass on both targets; the key-memory runtime check runs on x86_64 and is explicitly skipped for aarch64 on this host. Cleanup verified: CARGO_TARGET_DIR, the private short fixture root and scratch shell binary are deleted; no owned target/fixture processes remain. Evidence is outside the repository. Issues remain open. [final-fast.log](https://git.kayg.org/attachments/5aaa3801-7ee3-482b-b879-b7a701360bcc) [final-verification.txt](https://git.kayg.org/attachments/cf17af6d-96d2-4827-bf8a-15c6ded8227d)
Author
Owner

D241 round-2 delta review completed on review-d241-r2 at ad78229dcf against e18cd7a0e. Verdict on #251: merge after fixes, 0 P0 / 0 P1 / 4 P2 / 0 P3. Failing review tests cover exported marker lifetime across handoff, lost automatic-start suppression across Bash/Zsh handoff, queued account-save/preparation ordering, and set -e login exit. Original regression tests remain unchanged and pass; production browser checks pass 4/4. Final fast gate fails only the four review shell tests in both shim modes; full verbatim output, findings, screenshots, size comparisons and cleanup are recorded on #251 . No implementation fixes or deployment; issues left open.

D241 round-2 delta review completed on review-d241-r2 at ad78229dcf7d0d722962242bd482eb51899a20b4 against e18cd7a0e. Verdict on #251: merge after fixes, 0 P0 / 0 P1 / 4 P2 / 0 P3. Failing review tests cover exported marker lifetime across handoff, lost automatic-start suppression across Bash/Zsh handoff, queued account-save/preparation ordering, and set -e login exit. Original regression tests remain unchanged and pass; production browser checks pass 4/4. Final fast gate fails only the four review shell tests in both shim modes; full verbatim output, findings, screenshots, size comparisons and cleanup are recorded on https://git.kayg.org/kayg/infraternal/issues/251 . No implementation fixes or deployment; issues left open.
Author
Owner

D241 final fix round starting on d241-shell-marker at e18cd7a0e5, worktree ~/wt-infraternal/d241-final. Reading both review rounds and #170 before evaluating exact-process/startup-phase suppression. Will stop and propose an owner plan if shell-local state cannot meet the handoff requirement. No deployment.

D241 final fix round starting on d241-shell-marker at e18cd7a0e5e1a9b58c192d5d6e9763b6eadfe451, worktree ~/wt-infraternal/d241-final. Reading both review rounds and #170 before evaluating exact-process/startup-phase suppression. Will stop and propose an owner plan if shell-local state cannot meet the handoff requirement. No deployment.
Author
Owner

D241 final-round stop: no implementation patch. Under the requested stop condition, I do not find an in-shell mechanism that meets all current requirements with unchanged startup files and review assertions.

Evidence: mechanism-probes.txt. The probe executes the actual BASH_PROMPT_COMMAND constant with R2-4's profile/rc contents: skip=false exits 0, reaches PROFILE:done and START:manual; skip=true exits 1 before either. A correct-PID INFRATERNAL_SESSION marker alone still prints START:automatic with the unchanged TMUX conditional. Same-binary exec preserves PID in real sh, dash, Bash and Zsh. These are functional reproductions, not performance measurements or a completed shell matrix; Fish was not rerun.

Why the suggested marker cannot satisfy this contract by itself:

  • Existing checks and unchanged review fixtures read TMUX/ZELLIJ, not INFRATERNAL_SESSION or shim phase state. Their ordinary scalar values cannot consult the shim when expanded. A helper cannot affect a conditional that never invokes it.
  • R2-2 explicitly requires skipping inside the replacement shell's startup. Treating every replacement shell as outside the guard fails those assertions. Inheriting fake values reintroduces R2-1; unexporting them reintroduces R2-2. Reject “unset the marker in every possible child”.
  • PID plus binary does not distinguish same-binary exec, including exec before first prompt. No universal first-prompt acknowledgement exists in the current shim; PTY bytes alone cannot prove startup completion. Polling cannot safely modify the running shell's variable table.
  • R2-4 is semantic: the skipped final [ -z "${TMUX-}" ] && tmux automatic returns 1; its enclosing . then trips errexit. Appending cleanup cannot run after that exit. Sourcing under a conditional suppresses errexit throughout the user's file, changing unrelated failures; disabling errexit or overriding tests/source/exec changes the user's shell. Those violate the fail-safe requirement.

Short owner plan (D241 requires owner decision, not another case patch):

  1. Decide the contract: retain session identity and saved settings, but make suppression fail open unless an explicit, cooperative startup integration is present. Agree whether a startup exec continues the guarded startup transaction; current R2-2 says yes, whereas exact-original-process-only says no. Do not claim transparent suppression for arbitrary existing files.
  2. If cooperative integration is approved, define a bounded shim query/acknowledgement for exact shell incarnation and startup completion, with unknown state allowing normal startup. Integrate an explicit if ...; then ...; fi guard at the auto-start site so skipping returns success without changing errexit elsewhere. This requires permission to change the no-dotfile-edit contract or a user-installed integration; no engine/library choice is made here. Keep the existing failing tests as evidence and have the owner explicitly approve any changed acceptance expectations.
  3. Resume implementation only against that agreed contract: repair R2-3 separately by reconciling from a server read after the serialized save queue settles (including failures/reconnects); run the unchanged settings reviews, agreed shell matrix including same-binary exec, strict/non-interactive checks, sequential pinned static builds against dev 0c8639496, exact caps and full fast gate.

Finish state: branch restored to e18cd7a0e5; git push reports Everything up-to-date. The temporary review-test merge was discarded and the conflicted dev merge aborted; no merge result, cap change, new commit or deployment is published. No review finding is claimed closed. Size remeasurement and scripts/verify fast were not run because this is the requested stop-and-plan result, not an implementation completion; there is no new gate output to quote. Prior round's sizes/gates are not evidence for a merged final fix. No CARGO_TARGET_DIR was created; scratch evidence remains outside the repository.

D241 final-round stop: no implementation patch. Under the requested stop condition, I do not find an in-shell mechanism that meets all current requirements with unchanged startup files and review assertions. Evidence: [mechanism-probes.txt](https://git.kayg.org/attachments/14a052a6-0dd0-4c52-934e-9bbbb6a506c3). The probe executes the actual BASH_PROMPT_COMMAND constant with R2-4's profile/rc contents: skip=false exits 0, reaches PROFILE:done and START:manual; skip=true exits 1 before either. A correct-PID INFRATERNAL_SESSION marker alone still prints START:automatic with the unchanged TMUX conditional. Same-binary exec preserves PID in real sh, dash, Bash and Zsh. These are functional reproductions, not performance measurements or a completed shell matrix; Fish was not rerun. Why the suggested marker cannot satisfy this contract by itself: - Existing checks and unchanged review fixtures read TMUX/ZELLIJ, not INFRATERNAL_SESSION or shim phase state. Their ordinary scalar values cannot consult the shim when expanded. A helper cannot affect a conditional that never invokes it. - R2-2 explicitly requires skipping inside the replacement shell's startup. Treating every replacement shell as outside the guard fails those assertions. Inheriting fake values reintroduces R2-1; unexporting them reintroduces R2-2. Reject “unset the marker in every possible child”. - PID plus binary does not distinguish same-binary exec, including exec before first prompt. No universal first-prompt acknowledgement exists in the current shim; PTY bytes alone cannot prove startup completion. Polling cannot safely modify the running shell's variable table. - R2-4 is semantic: the skipped final `[ -z "${TMUX-}" ] && tmux automatic` returns 1; its enclosing `.` then trips errexit. Appending cleanup cannot run after that exit. Sourcing under a conditional suppresses errexit throughout the user's file, changing unrelated failures; disabling errexit or overriding tests/source/exec changes the user's shell. Those violate the fail-safe requirement. Short owner plan (D241 requires owner decision, not another case patch): 1. Decide the contract: retain session identity and saved settings, but make suppression fail open unless an explicit, cooperative startup integration is present. Agree whether a startup exec continues the guarded startup transaction; current R2-2 says yes, whereas exact-original-process-only says no. Do not claim transparent suppression for arbitrary existing files. 2. If cooperative integration is approved, define a bounded shim query/acknowledgement for exact shell incarnation and startup completion, with unknown state allowing normal startup. Integrate an explicit `if ...; then ...; fi` guard at the auto-start site so skipping returns success without changing errexit elsewhere. This requires permission to change the no-dotfile-edit contract or a user-installed integration; no engine/library choice is made here. Keep the existing failing tests as evidence and have the owner explicitly approve any changed acceptance expectations. 3. Resume implementation only against that agreed contract: repair R2-3 separately by reconciling from a server read after the serialized save queue settles (including failures/reconnects); run the unchanged settings reviews, agreed shell matrix including same-binary exec, strict/non-interactive checks, sequential pinned static builds against dev 0c8639496, exact caps and full fast gate. Finish state: branch restored to e18cd7a0e5e1a9b58c192d5d6e9763b6eadfe451; git push reports Everything up-to-date. The temporary review-test merge was discarded and the conflicted dev merge aborted; no merge result, cap change, new commit or deployment is published. No review finding is claimed closed. Size remeasurement and scripts/verify fast were not run because this is the requested stop-and-plan result, not an implementation completion; there is no new gate output to quote. Prior round's sizes/gates are not evidence for a merged final fix. No CARGO_TARGET_DIR was created; scratch evidence remains outside the repository.
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#170
No description provided.