Skip to content

ci: delete fake mutation testing and dead CI config; resolve the V2-210 ignored tests - #182

Merged
Nic-dorman merged 4 commits into
mainfrom
nic/v2-1762-saorsa-core-ci-cleanup
Oct 28, 2026
Merged

Nic-dorman merged 4 commits into
mainfrom
nic/v2-1762-saorsa-core-ci-cleanup

Conversation

@Nic-dorman

@Nic-dorman Nic-dorman commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

Linear issue

Closes V2-1762

Summary

This PR covers items 1, 2 and 5 of V2-1745 (the saorsa-core faux-CI audit). Items 3 and 4 (no CI on main, release not gated) wait on the org decision in V2-1746. The root debris files from item 5 are removed by #181. Review it commit by commit:

  1. ci: delete the Mutation Testing workflow that never ran a mutant
    • cargo-mutants 27 rejects --test-timeout, so the tool exited within a second on every PR.
    • || echo hid that error, and the report step then wrote a hard-coded "✅ … Completed successfully" summary.
    • 58 of the last 60 runs were green in about 90 s, and no mutant was ever generated.
    • mutation-testing.toml goes too: cargo-mutants reads .cargo/mutants.toml, so nothing ever read this file.
  2. ci: drop duplicate and dead CI jobs and config
    • wasm.yml and rust.yml's portable-core-wasm ran the same cargo check --lib --no-default-features --target wasm32-unknown-unknown that the MSRV job already runs with --locked. Only the MSRV copy is kept, so the wasm check required downstream stays.
    • rust.yml's build matrix ran plain cargo build on 3 OSes. The nextest jobs in unit-tests.yml already build the crate on all three.
    • rust.yml's minimal-versions job was if: false, and its comment cites a Rust 1.88 limit that no longer applies (MSRV is 1.95). If it's ever re-added as a new job, -Z direct-minimal-versions is the variant worth running.
    • The root nextest.toml was never read. Nextest only loads .config/nextest.toml: with a profile added to the root file, --profile <it> fails with "profile not found". So CI never applied the file's retries = 1, its timeouts or its per-binary overrides. Those overrides named test binaries that no longer exist and used keys nextest doesn't have. Deleting the file doesn't change CI behaviour.
    • The stale sp1 comments are gone (sp1 and its feature were removed long ago).
  3. ci: lint test targets with clippy
    • lint.yml now runs clippy with --all-targets, so tests and integration tests are linted too. .clippy.toml already allows unwrap/expect in tests.
    • The only finding was an orphaned doc comment in network.rs's test module.
  4. test: run the pinned-address test, delete the loopback MASQUE e2e tests
    • All four tests were #[ignore]d against V2-210, which was cancelled in July, so nothing tracked them.
    • pinned_address_survives_connection_drop passes again, so it runs in CI from now on.
    • The three masque_relay_e2e tests can't pass on one host, by design. Same-machine and local-scope peers are never relay candidates (first_direct_dialable_for_relay). Since the canary gate (feat(reachability): gate relay publication with canary quorum #136), witnesses also reject local-scope relay addresses, and publishing needs three non-close witnesses. On main they fail with no direct-addressable candidates in routing table.
    • The relay logic keeps its unit tests: the acquisition walk with mock establishers, canary request validation and driver state. saorsa-transport keeps its own MASQUE integration tests.

Runner cost: each PR runs 6 fewer jobs: Mutation Testing (which also built cargo-mutants from source), WASM portability, Portable core WASM, and Build on ubuntu, windows and macOS. That's one fewer macOS job and one fewer Windows job on every PR.

Kept: the ignored doctests (8, unchanged) and claude.yml's if:. That if: doesn't check author_association, which is harmless because the action already requires write access.

Not touched: the "ADR Governance" entry in this repo's Actions list. It isn't an orphan: it comes from #127, David's still-open ADR lint PR, which ran it on its own branch. It runs nowhere else.

Risk tier

  • T0 — docs / tooling / CI / pure UX-output. Repo CI only.
  • T1 — client-only, no network-facing behavior change. CI + prod compat smoke.
  • T2 — node/client logic with behavioral surface, no protocol/format/economics change. Dev testnet + ADR.
  • T3 — protocol / storage format / payments / routing. T2 evidence + adversarial testing.

Compatibility

  • Wire: none
  • Storage: none
  • API: none. The only src/ change removes a doc comment inside a #[cfg(test)] module.

Semver impact

  • breaking
  • feature
  • fix

Test evidence

Every run step of the changed lint.yml, rust.yml and unit-tests.yml was run on dev2 (Ubuntu 24.04), on main 16b395c plus this diff. The tested tree is byte-identical to this branch.

Check Result
actionlint 1.7.12 on every workflow clean
PyYAML parse of every workflow pass
cargo +stable fmt --all -- --check pass
cargo +stable clippy --all-features --all-targets -- -D warnings -D clippy::unwrap_used -D clippy::expect_used pass (main fails only on the network.rs doc comment)
backup-file check pass
cargo +1.95 check --locked --lib --all-features (MSRV read from Cargo.toml) pass
cargo +1.95 check --locked --lib --no-default-features --target wasm32-unknown-unknown pass
cargo nextest run --lib --profile default 614 passed
cargo nextest run --test '*' --profile default ×5 59 passed, 0 skipped, every run
cargo test --doc 0 passed, 8 ignored (unchanged)

Ignored tests on main 16b395c, run with --run-ignored only:

  • pinned_address_survives_connection_drop passed 20/20 runs of its whole target.
  • The 3 MASQUE tests failed at masque_relay_e2e.rs:134 ("relay address should be acquired before timeout"). Driver log: acquisition failed … reason="no direct-addressable candidates in routing table".

New dependency

none

ADR

n/a

Mitigation / rollback

Revert the PR. Each commit is self-contained, so any one can be reverted alone.

🤖 Generated with Claude Code

Nic-dorman and others added 4 commits October 27, 2026 15:22
cargo-mutants 27 rejects `--test-timeout`, so the tool exited within a
second on every run. `|| echo` swallowed the error and the report step
wrote a hard-coded "Completed successfully" summary: 58 of the last 60
runs were green in ~90 s without generating a single mutant.

mutation-testing.toml goes too: cargo-mutants reads .cargo/mutants.toml,
so nothing ever read it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- wasm.yml and rust.yml's portable-core-wasm ran the same
  `cargo check --lib --no-default-features --target wasm32` that the
  MSRV job already runs with --locked. Keep only the MSRV one.
- rust.yml's build matrix ran plain `cargo build` on 3 OSes; the
  nextest jobs in unit-tests.yml already build the crate on all three.
- rust.yml's minimal-versions job was `if: false`, citing a Rust 1.88
  limit that no longer applies (MSRV is 1.95).
- nextest.toml was never read: nextest only loads .config/nextest.toml,
  so CI never applied its retries, timeouts or per-binary overrides
  (which named test binaries that no longer exist and used keys nextest
  does not have). Deleting it does not change CI behaviour.
- Drop the stale sp1 comments; sp1 and its feature are long gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Clippy ran without --all-targets, so tests, integration tests and
examples were never linted. .clippy.toml already allows unwrap/expect
in tests; the only finding was an orphaned doc comment in network.rs's
test module (empty_line_after_doc_comments).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All four were ignored against V2-210, which was cancelled in July, so
nothing tracked them.

pinned_address_survives_connection_drop passes again (20/20 runs of its
target on main 16b395c), so it runs in CI from now on.

The three masque_relay_e2e tests cannot pass on one host by design.
Relay candidates exclude same-machine and local-scope peers
(first_direct_dialable_for_relay), and since the canary gate witnesses
reject local-scope relay addresses and publication needs three
non-close witnesses. They fail with "no direct-addressable candidates
in routing table". The acquisition walk, canary validation and driver
state keep their unit tests; saorsa-transport keeps its MASQUE
integration tests.

Closes V2-1762

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@MaidSafe-Hermes MaidSafe-Hermes left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No blocking defects found at 371afab1a86c4d9d01122213093215d2116f58ab. Current PR checks are green (9/9), including lint, Linux/macOS/Windows tests, MSRV/WASM and security audit. The restored pinned-address integration test is included in the passing current test runs.

Review coverage: 2/2 seats reviewed (sol-1 gpt-6.1-sol xhigh; glm-1 z-ai/glm-5.3). The seats did not fully agree. glm-1 raised a concern that deleting root nextest.toml removes active retry/timeout settings; the PR explains that this file was not loaded by Nextest, and the workflow does not explicitly load it. glm-1 also questioned test linting; .clippy.toml allows unwrap/expect in tests and the current lint check passes.

Non-blocking follow-up: removing the separate three-OS cargo build matrix reduces explicit validation of the normal build profile, although the unit/integration test targets still build on all three operating systems. No binaries or examples are present in the tree. The deleted MASQUE E2E tests were already ignored and the PR documents why they cannot pass in the local topology; relay integration coverage remains in saorsa-transport.

@Nic-dorman
Nic-dorman merged commit 4fe5113 into main Oct 28, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants