Skip to content

chore(deps): apply pending renovate updates - #46

Merged
ThePrismSystem merged 2 commits into
mainfrom
chore/update-dependencies
Aug 7, 2026
Merged

chore(deps): apply pending renovate updates#46
ThePrismSystem merged 2 commits into
mainfrom
chore/update-dependencies

Conversation

@ThePrismSystem

Copy link
Copy Markdown
Owner

Summary

Applies every update on the Renovate dependency dashboard (#44) except TypeScript v7, which is blocked upstream. Alongside the version bumps, three toolchain behaviour changes needed fixing — one of them a silently dropped security override.

Changes

  • Bumps the majors: pnpm 11, zod 4, graphql 17, chokidar 5, jsdom 30, cspell 10, lint-staged 17, @vitejs/plugin-react 6, @testing-library/jest-dom 7, @types/node 24, eslint-plugin-unicorn 73
  • Bumps the non-majors: @tanstack/react-router, dompurify, marked, tsx, @hono/node-server, recharts, prettier, typescript-eslint, knip, vite, @types/react, @types/react-dom
  • Updates pnpm/action-setup to v6.0.10, SHA-pinned
  • Moves TypeScript to 6.0.3 rather than 7 — see below
  • Restores the lodash and brace-expansion overrides, which pnpm 11 stopped reading from package.json
  • Adds types: ["node"] and rootDir to the tsconfigs that TypeScript 6 now requires them in
  • Ignores *.tsbuildinfo, which TypeScript 6 writes beside the config rather than into dist/

Why not TypeScript 7

typescript-eslint@8.66.0 throws on import under TS 7:

Error: typescript-eslint does not support TS 7.0.

TS 7 is the native Go port, and its rewritten compiler no longer exposes the JS API that typescript-eslint's type-aware rules are built on. Because the whole ESLint config is typescript-eslint based, this takes the lint step offline entirely rather than merely producing new errors. The typescript@6.x line is published to bridge exactly this gap; TS >=7.1 support is tracked in typescript-eslint/typescript-eslint#10940. Worth revisiting once that lands.

Breaking changes in the toolchain

pnpm 11 no longer reads pnpm.overrides from package.json. The lodash and brace-expansion pins were being dropped without any error — the install simply stopped applying them. They now live under overrides in pnpm-workspace.yaml, and the lockfile picks them up again. allowBuilds is also declared explicitly so esbuild and unrs-resolver stay unbuilt, matching prior behaviour.

TypeScript 6 drops automatic inclusion of @types packages. This left apps/server with no Node globals at all — every node: import, plus Buffer and process, failed to resolve. Confirmed against a minimal repro outside the repo: TS 5.9 passes and TS 6 fails on identical input. TS 6 also requires an explicit rootDir when emitting (TS5011), which only surfaced in pnpm build, not in the gate's typecheck.

Contributors get pnpm 11 automatically through packageManager and corepack; no local action needed.

Test Plan

  • Full gate: pnpm format && pnpm lint && pnpm typecheck && pnpm -r test:coverage && pnpm knip && pnpm spell && pnpm codegen:check && pnpm check:pins
  • pnpm build across all workspaces
  • docker build — the pnpm 11 install path in the image
  • pnpm --filter @beans-web/web e2e — 60/60 passing
  • pnpm install --frozen-lockfile succeeds; lockfile stays at v9.0

715 unit and integration tests pass, coverage 98%+ on every workspace.

To validate the override fix specifically, confirm both pins survive a resolve:

grep -A3 '^overrides:' pnpm-lock.yaml

Review Checklist

  • Tests pass locally
  • No breaking changes (toolchain changes documented above)
  • Documentation updated if needed
  • Error handling considered
  • Security implications reviewed

Open question

pnpm 11's new release-age gate auto-generated minimumReleaseAgeExclude in pnpm-workspace.yaml, pinning six exact versions. It works as-is, but will accumulate stale entries with every future Renovate bump. Left as generated — worth deciding whether to keep the gate or disable it with minimumReleaseAge: 0.

Refs #44

Applies every update on the dependency dashboard except TypeScript v7,
covering pnpm 11, zod 4, graphql 17, chokidar 5, jsdom 30, cspell 10,
lint-staged 17, @vitejs/plugin-react 6, @testing-library/jest-dom 7,
@types/node 24, eslint-plugin-unicorn 73 and pnpm/action-setup v6.0.10.

TypeScript moves to 6.0.3 rather than 7. typescript-eslint throws on
import under TS 7 because the native compiler no longer exposes the JS
API its type-aware rules are built on, which takes the whole lint step
offline rather than merely producing new errors. The 6.x line exists to
bridge that gap; revisit once typescript-eslint ships TS 7 support.

Three toolchain changes needed fixing alongside the bumps:

pnpm 11 no longer reads `pnpm.overrides` from package.json, which
silently dropped the lodash and brace-expansion pins. They move to
`overrides` in pnpm-workspace.yaml, where the lockfile picks them up
again. `allowBuilds` is declared explicitly to keep esbuild and
unrs-resolver unbuilt, as they were before.

TypeScript 6 drops automatic inclusion of @types packages, leaving the
server without Node globals, so it now names `node` in `types`. It also
requires an explicit `rootDir` when emitting, and writes a tsbuildinfo
beside the config rather than into the ignored dist directory.
@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 3.58kB (0.22%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
beans-web-web-esm 831.39kB 3.58kB (0.43%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: beans-web-web-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/analytics-*.js 5.13kB 378.8kB 1.37%
assets/index-*.js 346 bytes 341.77kB 0.1%
assets/beanDetail-*.js -2.48kB 84.92kB -2.84%
assets/index-*.css 577 bytes 25.89kB 2.28%

@codecov

codecov Bot commented Aug 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

`--with-deps` switches to root to install system libraries, and the
runners have no passwordless sudo, so the E2E job failed before it ran a
single spec. Those libraries are already on the runners; only the browser
build has to track the pinned Playwright version, and it lands in the
runner user's cache where no elevation is needed.
@ThePrismSystem
ThePrismSystem merged commit 975ba6a into main Aug 7, 2026
12 checks passed
@ThePrismSystem
ThePrismSystem deleted the chore/update-dependencies branch August 7, 2026 03:02
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