fix(ci): drop the 1x1 matrix so the required check name is actually stable - #40
Merged
Merged
Conversation
#39 renamed this job to `Julia tests` and claimed the required status check was therefore version-stable. It was not, and the claim was never measured. MEASURED on PR #39 head 776e340, after that change had landed: Julia tests (1.12.5, ubuntu-24.04) <- what GitHub actually posted Julia tests <- what the ruleset requires GitHub appends the matrix combination to a job's posted check name whenever the `name:` does not itself reference the matrix. The old interpolating name suppressed the suffix by accident; replacing it with a static string turned the suffix on. A 1x1 matrix is still a matrix, so both pins stayed embedded in the check name and the required context `Julia tests` was never reported at all -- so `main` has been sitting in precisely the deadlock issue #38 describes, with #39 itself merged only by an admin bypass. The matrix selected exactly one combination and bought nothing, so it is removed rather than worked around: `runs-on: ubuntu-24.04` and the setup-julia `version: "1.12.5"` are literals, each keeping the reasoning that used to sit beside the matrix entry. The non-matrix `repo-hygiene` job was the control -- it has always posted its `name:` verbatim. Why the guard did not catch it: `test_install_pins.jl` asserted that no job name interpolates anything -- a property of the YAML `name:` field -- while the consumer, the ruleset, matches the rendered check-run name. The guard asked a different question than its consumer, so it passed on a broken fix. It now asserts BOTH necessary conditions, over every job in the file: the name interpolates nothing AND the job has no `strategy.matrix`. Run against the previous commit that assertion fails on `test` alone (5 pass / 1 fail), so it discriminates rather than blanket-failing. `CI installs what is pinned` made the same claims about the same two values and has been repointed at where they now live, locating the setup step by its `uses:` rather than by index. Mutating either literal fails it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
|
Warning Review limit reachedNext included review available in 50 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Advanced Run ID: 📒 Files selected for processing (2)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
4 tasks
hyperpolymath
added a commit
that referenced
this pull request
Sep 21, 2026
The third and last class of `ci.yml` reader. Removing the 1x1 matrix in #40 fixed the workflow and #41 fixed the TypeScript coupling test, but five live documents still describe the julia pin as living in "the CI matrix", which no longer exists. A pin table that names a source of truth that is not there is worse than no table: the next person to bump julia goes looking for a matrix, does not find one, and has no way to tell whether the doc or the workflow is wrong. docs/reproducibility.md:26,60 the pin table and the pin web docs/compliance/standards-alignment.md:40 the single-sourcing claim docs/audit/type-system-reconnaissance.md:210 what test_install_pins.jl gates README.md:546 the CI gate summary Left alone deliberately: the nine occurrences under `docs/milestones/` and `docs/milestones/02c-cicd.md`. Those are dated records of what the workflow was at that milestone, and rewriting history to match today's shape would destroy the only evidence that the matrix ever existed -- which is exactly the evidence issue #38 turned on. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
hyperpolymath
added a commit
that referenced
this pull request
Sep 21, 2026
The third and last class of `ci.yml` reader. Removing the 1x1 matrix in #40 fixed the workflow and #41 fixed the TypeScript coupling test, but five live documents still describe the julia pin as living in "the CI matrix", which no longer exists. A pin table that names a source of truth that is not there is worse than no table: the next person to bump julia goes looking for a matrix, does not find one, and has no way to tell whether the doc or the workflow is wrong. docs/reproducibility.md:26,60 the pin table and the pin web docs/compliance/standards-alignment.md:40 the single-sourcing claim docs/audit/type-system-reconnaissance.md:210 what test_install_pins.jl gates README.md:546 the CI gate summary Left alone deliberately: the nine occurrences under `docs/milestones/` and `docs/milestones/02c-cicd.md`. Those are dated records of what the workflow was at that milestone, and rewriting history to match today's shape would destroy the only evidence that the matrix ever existed -- which is exactly the evidence issue #38 turned on. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
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 #38.
What #39 got wrong
#39 renamed the job to
Julia testsand I reported the required check as version-stable. It is not, and I never measured the thing that matters. Measured on #39's own head776e340d, after it had landed:Julia tests (1.12.5, ubuntu-24.04)Julia testsGitHub appends the matrix combination to a job's posted check name whenever the
name:does not itself reference the matrix. The old name,Julia ${{ matrix.julia-version }} / ${{ matrix.os }}, suppressed the suffix by accident; replacing it with a static string switched the suffix on. A 1×1 matrix is still a matrix.So both pins stayed embedded in the check name, the required context
Julia testswas never reported at all, andmainhas been sitting in exactly the deadlock this issue describes — #39 merged only because an admin bypass was available. The bump demonstration in that PR parsed the YAMLname:field and called it "the check name"; it could not have caught this.The control was in the same output all along:
Repo hygiene (licence · format · lint · commit), a job with no matrix, posts itsname:verbatim.The fix
The matrix selected exactly one combination and bought nothing, so it is removed rather than worked around:
runs-on: ubuntu-24.04— a literal, becauseruns-oncannot readenvversion: "1.12.5"— a literalEach keeps the reasoning that used to sit beside its matrix entry. The ruleset context is unchanged —
Julia testswas always the target state; the only thing wrong was what the workflow posted.Why the guard did not catch it
test_install_pins.jlasserted that no job name interpolates anything — a property of the YAMLname:field — while the consumer, the ruleset, matches the rendered check-run name. The guard asked a different question than its consumer, so it passed on a broken fix.It now asserts both necessary conditions, over every job in the file:
strategy.matrix.Run against the previous commit, that assertion fails on
testalone — 5 pass / 1 fail — so it discriminates rather than blanket-failing. If a matrix is ever genuinely wanted, the required context must first move to a matrix-free aggregator job, and the comment says so.CI installs what is pinnedmade the same claims about the same two values and is repointed at where they now live, locating the setup step by itsuses:rather than by index. Mutating either literal fails it (verified: version →1.12.6,runs-on→ubuntu-latest, one failure each at the right line).Acceptance criteria
Julia tests— evidence added as a comment below, read off this PR's head, not off the YAMLJulia tests; unchanged, and now actually satisfiabletest_install_pins.jlpassing🤖 Generated with Claude Code
https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm