Skip to content

ci(bootstrap): ratchet the test suite over failing names, with --no-fail-fast - #2383

Merged
gHashTag merged 1 commit into
masterfrom
fix/2382-bootstrap-test-ratchet
Aug 22, 2026
Merged

ci(bootstrap): ratchet the test suite over failing names, with --no-fail-fast#2383
gHashTag merged 1 commit into
masterfrom
fix/2382-bootstrap-test-ratchet

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #2382

The measurement

On e53b9d048, with a warm target dir:

command targets run passed failed
cargo test -p t27c --tests 1 1621 13
same, --no-fail-fast 73 2031 383

cargo test stops after the first failing target. The unit-test target fails — those are
the 13 named in #2292 — so the other 72 compile and never run. Every integration test
under bootstrap/tests/ is in that group, including every regression guard added this
week: #2363, #2003, #2006, #1977, #1985. They were not broken and not missing. They were
unreachable. The guard for #2363 passes when actually run.

This also explains the --bins observation on #2363: that measurement missed the guard by
a different mechanism, and the recorded "13 failures" in corpus-ratchet.yml's comment is
the fail-fast artefact.

The 383 is not 383 problems

What landed

scripts/ci/test_ratchet.py, scripts/ci/test-baseline.txt (383 entries), and
.github/workflows/bootstrap-tests.yml — its own workflow with its own check name
(test-ratchet), deliberately not inside corpus-ratchet.yml, which is red on master
and where a new failure would be indistinguishable from the standing one.

Three design choices, each against a specific failure this repository has already had:

  • A set of target<TAB>test keys, not a count. 383 still passes when one failure is
    fixed and a different one appears.
  • A ratchet, not a gate. corpus-ratchet.yml already records why: "a gate that lands
    red gets disabled rather than obeyed."
  • Degenerate logs refuse rather than certify. A one-target log — the exact condition
    that hid 72 targets — exits 2 with NOT evaluated, as do an empty and a missing log.
    Absence never reads as a clean set.

A baselined test that starts passing is reported, not failed on, so the baseline
cannot rot into a list nobody can tell is stale.

Evidence

TRUE — unmodified log against its own baseline: 73 targets ran; 383 failing test(s) (baseline 383) / No new failures. Baseline holds. exit 0.

BITING, on a real rebuild and rerun, not a doctored log — bootstrap/tests/on_clock_plain_assign.rs:85
altered to assert a string the emitter never produces:

73 targets ran; 384 failing test(s) (baseline 383)

**FAILED — these tests are newly failing:**
  - `on_clock_emits_assignment_whose_rhs_does_not_reference_the_target`   (tests/on_clock_plain_assign.rs)

exit 1. Restored afterwards; the tree is byte-identical to master apart from the three new files.

Degenerate — fail-fast log, empty log, missing log: all exit 2. Exit codes were measured
without a pipeline, since $? after a pipe reports the last command's status.

Cost: 1 min 49 s wall, warm cache.

What this does not establish

…ail-fast

cargo test -p t27c --tests runs 1 of 73 targets: it stops after the first
failing target, so every integration test under bootstrap/tests/ compiles
and never runs. The regression guards added this week were unreachable,
not broken.

Measured on e53b9d0: 1 target / 13 failed without --no-fail-fast,
73 targets / 383 failed with it. 61 targets are clean; 358 of the failures
are one target attributable to #2325; 12 across 10 targets are unexamined.

Baseline is a set of names, not a count. Degenerate logs exit 2 rather
than reading absence as a clean set.

Closes #2382
@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-22 07:31:03 UTC

Summary

Status Count
Total Open PRs 3
PRs with Failing Checks 1
PRs with All Checks Green 2
READY 1
FAILING 1
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=fba627661c36 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

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.

cargo test -p t27c runs 1 of 73 targets: the 13 known failures hide 60 clean targets and 12 unexamined ones

1 participant