Repository navigation
ci: pin Node to the patch in .tool-versions, and stop pinning the URL parser's verdict on xn-- - #171
Merged
Merged
Conversation
xn-- labelxn--
`hostMatcher("xn--")` was asserted to throw as "undecodable punycode". That
was the URL parser's answer, not the matcher's: `canonicalHost` hands
hostname validity to `new URL` on purpose and owns no IDNA rule of its own.
ada 4.0.0, which Node 24.20.0 ships, passes the label through as a plain
host, so with `node-version: 24` the two legs of one CI run — one runner
image cached 24.19.0, the other 24.20.0 — disagreed on the same commit.
The catch branch the line was documenting stays covered by `""` and `"["`,
which every parser refuses. Verified green on Node 22.22.2, 24.19.0 and
24.20.0.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DhHZArj9LxcKUemN1EMVKt
`node-version: 24` in ten setup-node steps asked for whatever 24.x the runner image had cached, and the two legs of one CI run built on 24.19.0 and 24.20.0 and disagreed on the same commit. The version now lives in `.tool-versions` (`nodejs 24.20.0`), which setup-node reads through `node-version-file` and asdf/mise read locally; Renovate's asdf manager keeps it current. The AMO reviewer-notes case now takes the major from that file and pins every workflow's setup-node step to reading it — a step that spells its own version is the drift this replaces. Revert-verified: one workflow put back to `node-version: 24` goes red. The notes name only the major, so a patch bump does not touch them. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DhHZArj9LxcKUemN1EMVKt
ArloL
force-pushed
the
claude/configurable-containers-ci-fix-4qyqge
branch
from
September 2, 2026 19:08
9d7e579 to
099f291
Compare
|
ArloL
marked this pull request as ready for review
September 2, 2026 19:10
ArloL
enabled auto-merge (rebase)
September 2, 2026 19:10
This branch was successfully deployed
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.



What failed
CI run 33662723404 on
main:test (latest-esr)went red innpm run test:coveragewhiletest (latest)passed on the same commit.Why
The two legs got different Node builds from the runner's tool cache (
node-version: 24,check-latest: false):new URL("http://xn--/")xn--Node 24.20.0 updated ada to 4.0.0, which passes an undecodable
xn--label through as a plain host. The assertion was pinning the URL parser's answer, not the matcher's:canonicalHosthands hostname validity tonew URLdeliberately and owns no IDNA rule of its own.Changes
Pin Node to the patch.
.tool-versionscarriesnodejs 24.20.0; all tensetup-nodesteps across the five workflows read it throughnode-version-fileinstead of spellingnode-version: 24, so every job in a run builds on one version and a bump is one line. Renovate's asdf manager (on underconfig:recommended) keeps it current. asdf and mise pick the same file up locally.Pin the pin. The AMO reviewer-notes case that derived "Node 24" from the workflows now takes the major from
.tool-versionsand asserts everysetup-nodestep reads that file and none carries anode-version:of its own. Revert-verified: one workflow put back tonode-version: 24goes red. The notes name only the major, so a patch bump does not touch them.Drop the parser-dependent assertion. The
xn--line goes, with a comment saying why only inputs every parser refuses belong in that block. The catch branch it documented stays covered by""and"[". No source change: adding our own punycode check would make the matcher stricter than the browser whoseURLit mirrors. The pin alone would not have been enough here, since 24.20.0 is the version being pinned.README's build line now points at
.tool-versionsrather than "verified on 24".Verified
test/matcher/green on Node 22.22.2, 24.19.0 and 24.20.0 (24.20.0 reproduced the failure before the change)npm run typecheck,npm run lint,npm run test:coverage(72 files, 1013 tests) greenstryker run --mutate src/matcher/matcher.ts: 189/189 killed, score 100🤖 Generated with Claude Code
https://claude.ai/code/session_01DhHZArj9LxcKUemN1EMVKt