ci: add rust-test job for per-PR Rust test coverage - #724
Merged
Conversation
…ll path
The shared `sleeper_cli_spec` in `tests/common/mod.rs` used a
`{name}-{pid}`-only script path, so parallel tests in the same binary
that call `sleeper_cli_spec("claude")` share ONE path. When test 2's
`fs::write` races test 1's still-in-flight `execve` of the same file,
Linux holds deny-write during exec and the write fails with ETXTBSY
("Text file busy"). This was already fixed in the local copy in
`cross_kind_liveness.rs` (commit 1839b11) but not in the shared
`common/mod.rs` version used by 17 other test files.
Fix: add a global `AtomicU64` counter to the script filename so every
call gets a fresh path. Verified with the existing
`sleeper_cli_spec_paths_are_unique_per_call` test pattern.
pull Bot
pushed a commit
to HinchK/freshell
that referenced
this pull request
Sep 7, 2026
… add regression test Delta review of PR danshapiro#724 found four actionable findings: 1. Missing --no-fail-fast: one flake aborted the entire workspace test run, hiding all later test binaries. Add --no-fail-fast so all binaries run. 2. restore_spawn_gate.rs had the same ETXTBSY race as common/mod.rs (shared {name}-{pid} path, 10 parallel tests). Add AtomicU64 counter matching the common/mod.rs fix. 3. No regression test for the shared common::sleeper_cli_spec uniqueness. Add shared_sleeper_cli_spec_paths_are_unique_per_call in pane_ledger_triggers matching the existing test in cross_kind_liveness.rs (commit 1839b11). Kata 299r tracks the auto_resume_e2e timing flakes that block rust-test from going green on 4-core CI runners.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a parallel
rust-testjob torust-clippy.ymlthat runscargo test --workspace --locked+ the Tauri app-bound server-spawn smoke on every PR.What the job does
Swatinem/rust-cache@v2, and Tauri GTK/WebKit apt deps as theclippyjobnpm ci(required becausefreshell-freshagentandfreshell-wstests spawn MCP servers that resolvetsxfromnode_modules)freshell-serverso the Tauri smoke cannot soft-skipFRESHELL_SERVER_BINto the built binary path for deterministic non-vacuitycargo test --workspace --locked--nocapture+grepenforcement so CI turns red if the smoke soft-skips or the test failsWhy
Today, only
freshell-protocolandfreshell-terminalrun in CI (viaport-contract.yml). The other ~11 Rust crates have zero CI test coverage. This PR wires the full workspace test suite into CI as a parallel job alongside clippy, so required-check wall time is unaffected.Relation to PR #699
PR #699 ("Retire the Node server") already modifies
rust-clippy.ymlto addcargo test --workspace --locked, but it's stuck (CONFLICTING, failing clippy, 1000+ files, no reviews). This PR extracts just the CI workflow change so it lands independently. When PR #699 merges, it should droprust-clippy.ymlfrom its diff.Post-merge follow-up
Making
rust-testa required merge gate requires a post-merge ruleset amendment (ruleset 14473229). That is a separate user follow-up, not part of this PR.Test plan
rust-testjob passes on this PRclippyjob still passes (no changes to existing job)