Skip to content

chore(deps): migrate to TypeScript 6, Next 16, Zod 4, inngest 4, Vitest 4, ESLint 10#9

Merged
asmuelle merged 2 commits into
mainfrom
chore/major-deps-migration
Jun 20, 2026
Merged

chore(deps): migrate to TypeScript 6, Next 16, Zod 4, inngest 4, Vitest 4, ESLint 10#9
asmuelle merged 2 commits into
mainfrom
chore/major-deps-migration

Conversation

@asmuelle

Copy link
Copy Markdown
Owner

Why

Dependabot grouped and auto-merged several major bumps onto main un-migrated, which broke CI (node: imports under TS6, createFunction under inngest 4, etc.). I reverted those two group PRs on main to keep it green and land the M3 delivery feature; this PR does the migration deliberately so the bumps land green.

What broke and how it's fixed

Bump Break Fix
TypeScript 6 + @types/node 26 TS6 dropped automatic @types/node inclusion → node:*, process, import.meta.url unresolved "types": ["node"] in core/pipeline/db tsconfigs (web gets node types via the Next plugin)
inngest 4 createFunction is now 2-arg; trigger moved into options as triggers updated all 3 cron functions
Next 16 eslint key removed from NextConfig; cloud-mode default on /api/inngest removed the key (we lint at root); documented INNGEST_DEV=1 / INNGEST_SIGNING_KEY in .env.example
ESLint 10 new preserve-caught-error rule attached cause to a rethrown error
Zod 4 no source changes needed (schemas compatible)

Also bumps react/react-dom 19.2, @anthropic-ai/sdk, typescript-eslint.

Verification

  • pnpm -r typecheck (TS 6)
  • pnpm lint (ESLint 10)
  • ✅ 289 unit tests @ coverage gate (Vitest 4)
  • ✅ 53 integration tests — Postgres+pgvector, migrations + trigger guards (Vitest 4)
  • next build (Next 16) — 8 routes
  • ✅ runtime smoke: auth flow + delivery log + /api/inngest (under INNGEST_DEV)

Note for the maintainer

The two dependabot group PRs this supersedes are still closeable (#7 production-deps, #8 dev-deps). Consider configuring dependabot to not auto-merge grouped major bumps so future majors come through a migration PR like this one rather than landing on main un-migrated.

🤖 Generated with Claude Code

asmuelle added 2 commits June 20, 2026 21:19
…st 4, ESLint 10

Adopts the major dependency bumps dependabot proposed (and that I reverted on
main because the grouped auto-merge landed them un-migrated and broke CI). Each
breaking change fixed:

- TypeScript 6 + @types/node 26: TS6 no longer auto-includes @types/node, so
  `node:*`, `process`, and `import.meta.url` stopped resolving. Added
  `"types": ["node"]` to the core/pipeline/db tsconfigs (web gets node types via
  the Next plugin, so it is untouched).
- inngest 4: createFunction is now 2-arg — the trigger moved into the options
  object as `triggers`. Updated all three cron functions.
- Next 16: removed the `eslint` NextConfig key (the built-in build-time ESLint
  integration was dropped; we already lint at the workspace root). Note: inngest
  4 defaults to cloud mode, so /api/inngest now needs INNGEST_SIGNING_KEY (prod)
  or INNGEST_DEV=1 (local) — documented in .env.example.
- ESLint 10: satisfied the new preserve-caught-error rule (attach `cause` to a
  rethrown fixture-read error).
- Zod 4: no source changes needed — the existing schemas (incl. the M3
  AlertChannelConfigSchema superRefine) are zod-4 compatible.

Also bumps react/react-dom 19.2, @anthropic-ai/sdk, typescript-eslint.

Verified on the new toolchain: typecheck, lint, 289 unit @ coverage gate,
53 integration tests (Postgres+pgvector), next 16 build, and a runtime smoke
(auth flow + delivery log + the /api/inngest route under INNGEST_DEV).
Bumps the CI runner from Node 22 to Node 24 and the package `engines.node` floor
to `>=24`, aligning the runtime with the bumped @types/node (Node-26 line) so the
types no longer describe APIs ahead of the runtime. engine-strict is unset, so
the floor stays advisory for local dev.
@asmuelle asmuelle merged commit d720c2c into main Jun 20, 2026
3 checks passed
@asmuelle asmuelle deleted the chore/major-deps-migration branch June 20, 2026 20:05
asmuelle added a commit that referenced this pull request Jun 20, 2026
The grouped npm update PRs batched every dependency-type together regardless of
semver, so major bumps (Next 16, Zod 4, inngest 4, TS 6) landed un-migrated on
main and broke CI. Restrict both npm groups to `minor` + `patch`; majors now
arrive as individual PRs to be migrated on a branch (see PR #9). github-actions
bumps stay grouped (low-risk, still gated by CI).
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