fix(ci): make the cluster-global serial group actually group - #816
Merged
Conversation
`.config/nextest.toml` filtered the serial minority with `test(/name/)`, but every name in that list is a test BINARY name and `test()` matches TEST names. The group therefore captured only tests whose own name happened to contain the binary name. Measured with `cargo nextest show-config test-groups` (cargo-nextest 0.9.138): apalis_adapter 1 of 4 tests grouped apalis_schema_contract 1 of 1 leave_migration_expand_contract 0 of 9 2 of 14 tests across those binaries were serialised, by a control that read as if it covered all of them. `binary(name)` gives 4/4, 1/1 and 9/9. This is live regardless of whether the nextest runner is ever adopted: it is the mechanism ADR-0039 / DN-0005 P3 landed to keep cluster-global mutators off each other, and it has never worked. The gate could not have caught it. `check-nextest-config.mjs` asserted that each name appeared ANYWHERE in the file, which the broken form satisfies -- it validated spelling while the control was inert. It now asserts the form that actually groups: `binary(<name>)` present, and `test(<name>)` rejected with the remedy named. The filter block is extracted first so prose may quote the broken form while explaining it, and the extractor accepts all three TOML string shapes rather than only the multi-line one the repo happens to use. Mutation-proven: committed config -> 0 failures; the exact pre-fix `test()` form -> 10 failures; one suite dropped from the filter -> 1 failure. Verified: node tools/ci/check-nextest-config.mjs -> OK; node --test tools/ci/check-nextest-config.test.mjs -> 7 pass, 0 fail; npm run check:ci-preflight -> exit 0; dark-suites --strict -> exit 0; show-config against the committed file -> 4/4 and 9/9. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jason931225
enabled auto-merge
August 19, 2026 02:41
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Aug 19, 2026
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.
Independent of #814/#815 — touches only
.config/nextest.tomland its gate.The defect
The serial minority was filtered with
test(/name/), but every name in that list is a test binary name andtest()matches test names. The group captured only tests whose own name happened to contain the binary name.Measured with
cargo nextest show-config test-groups(cargo-nextest 0.9.138):apalis_adapterapalis_schema_contractleave_migration_expand_contract2 of 14 tests across those binaries were serialised, by a control that read as though it covered all of them. With
binary(name): 4/4, 1/1, 9/9.This is live regardless of whether the nextest runner is ever adopted — it's the mechanism ADR-0039 / DN-0005 P3 landed to keep cluster-global mutators off each other, and it has never worked.
The gate could not have caught it
check-nextest-config.mjsasserted each name appeared anywhere in the file, which the broken form satisfies. It validated spelling while the control was inert.It now asserts the form that actually groups:
binary(<name>)present,test(<name>)rejected with the remedy named. The filter block is extracted first so prose may quote the broken form while explaining it, and the extractor accepts all three TOML string shapes rather than only the multi-line one this repo happens to use — the pre-existing test used a single-quoted filter and caught that gap.Mutation proof
test()formVerification
check-nextest-config.mjs→ OK ·check-nextest-config.test.mjs→ 7 pass, 0 fail ·npm run check:ci-preflight→ exit 0 ·check-mjs-dark-suites --strict→ exit 0 ·show-configagainst the committed file → 4/4 and 9/9🤖 Generated with Claude Code