ci(bootstrap): ratchet the test suite over failing names, with --no-fail-fast - #2383
Merged
Conversation
…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
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
PR DashboardGenerated at: 2026-08-22 07:31:03 UTC
Summary
Seal Status
|
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.
Closes #2382
The measurement
On
e53b9d048, with a warm target dir:cargo test -p t27c --tests--no-fail-fastcargo teststops after the first failing target. The unit-test target fails — those arethe 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 thisweek: #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
--binsobservation on #2363: that measurement missed the guard bya different mechanism, and the recorded "13 failures" in
corpus-ratchet.yml's comment isthe fail-fast artefact.
The 383 is not 383 problems
tests/icarus_lowerable.rs, 0 passed of 358.iverilogis installed, so not a missing tool: attributable by shape to the emitterdefect gen-verilog: 26 of 32 modules reference struct fields under a prefix declared nowhere — no single prefix can be correct #2325, counted once per spec.
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 insidecorpus-ratchet.yml, which is red on masterand where a new failure would be indistinguishable from the standing one.
Three design choices, each against a specific failure this repository has already had:
target<TAB>testkeys, not a count. 383 still passes when one failure isfixed and a different one appears.
corpus-ratchet.ymlalready records why: "a gate that landsred gets disabled rather than obeyed."
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:85altered to assert a string the emitter never produces:
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
Born-failing, long-failing and just-regressed need different responses. One of them,
dma_local_addr_autoincrement_both_paths, sits in the file fix(bitnet): pair the DMA local write address with its own beat (Closes #2003) #2345 changed — a lead, nota regression claim.
show whether it does, and if so the baseline must be regenerated from a runner log rather
than patched by hand.
the repository owner's decision.