Skip to content

fix(test): repoint the frontend pin-coupling test at the setup-julia step - #41

Merged
hyperpolymath merged 2 commits into
mainfrom
fix/38-coupling-test-second-reader
Sep 21, 2026
Merged

hyperpolymath merged 2 commits into
mainfrom
fix/38-coupling-test-second-reader

Conversation

@hyperpolymath

@hyperpolymath hyperpolymath commented Sep 21, 2026 •

Copy link
Copy Markdown
Owner

Follow-up to #40, which merged while this was still in flight. main is red without it.

Removing the 1×1 matrix in #40 broke a second consumer of ci.yml that I had not looked for. frontend/tests/unit/coupling-toolchain-pins.test.ts matched julia-version: ["..."] to cross-check the CI copy of the Julia pin against mise.toml and tool_versions.yml. With the matrix gone the match returns undefined:

##[error]Expected: "1.12.5"
Received: undefined
  at frontend/tests/unit/coupling-toolchain-pins.test.ts:47:21
(fail) coupling/drift: toolchain pins agree across all copies > julia: mise.toml == tool_versions.yml == CI matrix

The guard was right; my fix was incomplete. Two files read the Julia pin out of ci.yml, in two different languages, and I updated only the Julia one — a single-language sweep misses the other. grep -rln 'ci\.yml' finds both; the six bench/*.jl hits are comments.

The pattern is now anchored on julia-actions/setup-julia@<sha> rather than on a bare version: key, so it cannot latch onto some other step's version and pass for the wrong reason. A missing anchor yields undefined and fails loudly rather than vacuously.

Verified

check result
bump the literal in ci.yml → this test must fail 3 pass / 1 fail
frontend suite 599 pass / 0 fail (5 todo)
test_install_pins.jl 102 / 102

Also worth recording from #40's run, against my own prediction: Gate triage (cicd-squabbler) passed on the first fork-internal PR to meet a real gate that lists the triage job itself. The predicted "squabble treats its own in-progress self-context as a failing required check" defect did not occur.


Third commit: the docs were the third reader.

0af84a5 repoints five live documents that still described the julia pin as living in "the CI matrix". The matrix was deleted in #40, so those lines named a source of truth that no longer exists — and a pin table that points at a missing source is worse than no table, because the next person to bump julia cannot tell whether the doc or the workflow is the stale one.

file what it claimed
docs/reproducibility.md:26 the pin table's "Pinned where" column
docs/reproducibility.md:60 the pin web's "Checked copies" column
docs/compliance/standards-alignment.md:40 the pin single-sourcing compliance claim
docs/audit/type-system-reconnaissance.md:210 what test_install_pins.jl gates
README.md:546 the CI gate summary

Deliberately not touched: the nine occurrences under docs/milestones/ and in docs/milestones/02c-cicd.md. Those are dated records of what the workflow was at each milestone. Rewriting them to match today's shape would erase the only evidence that the matrix ever existed — which is precisely the evidence #38 turned on.

So ci.yml had three classes of reader, not two: the workflow's own consumers (the ruleset), the tests (test_install_pins.jl in Julia, coupling-toolchain-pins.test.ts in TypeScript), and the prose. A sweep that stops at executable readers is still incomplete — nothing fails when a document goes stale, which is exactly why it stays stale.

🤖 Generated with Claude Code

https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm

…step

Removing the 1x1 matrix broke a second consumer of `ci.yml` that I had not
looked for: `frontend/tests/unit/coupling-toolchain-pins.test.ts` matched
`julia-version: ["..."]` to check the CI copy of the Julia pin against
mise.toml and tool_versions.yml. With the matrix gone the match returned
undefined and CI failed with `Expected: "1.12.5" / Received: undefined`.

The guard was right and the fix was incomplete: two files read the Julia pin
out of `ci.yml`, and only the Julia-side one was updated. `grep -rln ci.yml`
finds both; the six `bench/*.jl` hits are comments.

The pattern is now anchored on `julia-actions/setup-julia@<sha>` rather than
on a bare `version:` key, so it cannot latch onto some other step's version
and pass for the wrong reason. A missing anchor yields undefined and fails
loudly rather than vacuously.

Verified: bumping the literal in ci.yml fails this test (3 pass / 1 fail);
frontend suite 599 pass / 0 fail; test_install_pins.jl 102 / 102.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3hgXxWm6umMgZkjYyHnnm
@coderabbitai

coderabbitai Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 37 minutes.

Check out review usage here.

View limit details

Limit 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.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: e60787e2-c5d9-4fe3-b765-0aef702b3a64

📥 Commits

Reviewing files that changed from the base of the PR and between 6c29b53 and 0af84a5.

📒 Files selected for processing (5)
  • README.md
  • docs/audit/type-system-reconnaissance.md
  • docs/compliance/standards-alignment.md
  • docs/reproducibility.md
  • frontend/tests/unit/coupling-toolchain-pins.test.ts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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
@sonarqubecloud

Copy link
Copy Markdown

@hyperpolymath
hyperpolymath merged commit 64efa88 into main Sep 21, 2026
4 checks passed
@hyperpolymath
hyperpolymath deleted the fix/38-coupling-test-second-reader branch September 21, 2026 23:25
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.

1 participant