Skip to content

Package updates - #443

Merged
jrr merged 4 commits into
devfrom
claude/pr-442-ci-failure-gwuep0
Sep 7, 2026
Merged

jrr merged 4 commits into
devfrom
claude/pr-442-ci-failure-gwuep0

Conversation

@jrr

@jrr jrr commented Sep 6, 2026

Copy link
Copy Markdown
Owner

Replaces #442, which bundled a Yarn upgrade that breaks yarn lint on Node 22. Same package updates, Yarn held at 4.13.0.

Updates

Package From To
@eslint/eslintrc 3.3.6 3.3.7
@types/node 24.12.2 24.13.3
@typescript-eslint/eslint-plugin 8.67.0 8.69.0
@typescript-eslint/parser 8.67.0 8.69.0
eslint 10.9.0 10.9.1
typescript 6.0.2 6.0.3

Plus the regenerated yarn.lock / .pnp.cjs / cache zips and the .yarn/sdks version bumps.

Why Yarn 4.18 is held back

Yarn 4.18.0's PnP ESM loader works around a Node bug (broken fstat for zip fds) by handing Node the source of CommonJS files inside .yarn/cache zips instead of letting the CJS loader read them. Node then compiles those modules through the ESM→CJS translator, where require.cache is undefined. import-fresh reads require.cache[filePath], so it throws, and @eslint/eslintrc's FlatCompat — which eslint.config.mjs uses for compat.extends("plugin:@typescript-eslint/recommended") — can't load the config at all:

TypeError: Cannot read config file: .../@typescript-eslint/eslint-plugin/dist/configs/eslintrc/base.js
Error: Cannot read properties of undefined (reading '...base.js')
    at module.exports (.../import-fresh/index.js:16:33)

The workaround is gated on the Node version, and node-version: 22 now resolves to 22.23.2, which matches the gate. That's why only build (22) failed on #442 — 20.20.2 and 24.20.0 don't match it. Toggling that one flag with everything else fixed flips the failure in both directions, and Yarn 4.13.0 with this exact lockfile passes on 22.23.2, so none of the package updates themselves are at fault.

Reverted relative to #442: .yarnrc.yml, packageManager, .yarn/releases/, and .pnp.loader.mjs are byte-identical to dev again. The lockfile's __metadata.version goes back to 8 and the resolve builtin-compat patch reverts to dev's hash, since the Yarn version writes both. The .yarnrc.yml additions from #442 (approvedGitRepositories, npmMinimalAgeGate) went with it — 4.13 rejects them as unknown settings.

Follow-up

This leaves the Node fstat bug unpatched, so a future Node 22.x could trip on it. Whenever Yarn 4.18 is taken, rewriting eslint.config.mjs to use js.configs.recommended and typescriptEslint.configs["flat/recommended"] instead of the FlatCompat bridge removes @eslint/eslintrc and import-fresh from the picture entirely, and resolves to a byte-identical rule set. Left out here to keep this PR to the package updates.

Verification

yarn install, build, test, lint, prettier --check . and start --test midgame --quit pass locally on Node 20.20.2, 22.23.2 and 24.20.0. CI is green on all three matrix jobs including the make test-npx-node-* Docker steps.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TJz8D6RuBXQXwpDaMAtjtr


Generated by Claude Code

jrr and others added 4 commits September 3, 2026 22:56
Yarn 4.18.0's PnP ESM loader works around a Node bug (broken fstat for
zip fds) by handing Node the source of CommonJS files inside .yarn/cache
zips instead of letting the CJS loader read them. Node then compiles
those modules through the ESM->CJS translator, where require.cache is
undefined. import-fresh reads require.cache[filePath], so it throws, and
@eslint/eslintrc's FlatCompat - which eslint.config.mjs uses for
compat.extends("plugin:@typescript-eslint/recommended") - can't load the
config at all:

  TypeError: Cannot read config file: .../eslint-plugin/dist/configs/eslintrc/base.js
  Error: Cannot read properties of undefined (reading '...base.js')

The workaround is gated on the Node version, and node-version: 22 now
resolves to 22.23.2, which matches the gate. That is why only build (22)
failed; 20.20.2 and 24.20.0 do not match it.

So this reverts only the Yarn bits - .yarnrc.yml, packageManager,
.yarn/releases, and the regenerated .pnp.loader.mjs and lockfile metadata
version - and keeps every dependency update.

Verified with yarn install, build, test, lint, prettier --check and
start --test midgame --quit on Node 20.20.2, 22.23.2 and 24.20.0. The
make test-npx-node-* targets need Docker and were not run here; they
exercise the packed tarball rather than the Yarn install.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TJz8D6RuBXQXwpDaMAtjtr
@jrr jrr mentioned this pull request Sep 6, 2026
@jrr
jrr merged commit 991779a into dev Sep 7, 2026
6 checks passed
@jrr
jrr deleted the claude/pr-442-ci-failure-gwuep0 branch September 7, 2026 03:10
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.

2 participants