chore(deps): take TypeScript 7 for the typecheck gate - #6
Merged
Conversation
Raise the typescript devDependency from ^5.6.0 to ^7.0.2, the native (Go) port released 2026-07-08, discharging D-021's third deferred obligation. The typecheck script, tsconfig.json and CI step are unchanged; only the compiler behind `tsc --noEmit` moves. Recorded as D-022. Measured, not taken from the speed claim: - The full gate set exits 0 under 7.0.2: check-docs, lint, typecheck, demo-app:build, bun test (432 pass, 0 fail). - The gate is live, not silently narrowed. A planted error in each tsconfig include root exits 1 while the clean tree exits 0: a type mismatch in src/, a strictNullChecks violation in src/, a mismatch in test/, and a bad JSX element in demo-app/. This is the check that matters, since a fast pass and a skipped pass look identical from the exit code alone. - Both compilers agree on this tree: 5.9.3 and 7.0.2 each exit 0 on the unmodified working tree, so the bump is not bought with lost coverage. - Wall clock over 3 runs each: 5.9.3 = 1167/1138/1163 ms, 7.0.2 = 110/107/132 ms. - No cross-platform hazard: the 20 @typescript/typescript-<platform> packages are optionalDependencies carrying os/cpu constraints, and all 20 are recorded in bun.lock, so a darwin or win32 contributor resolves theirs from the same lockfile. TypeScript 7 ships tsc and nothing else: its lib/ has no tsserver.js and no programmatic typescript module API. Verified the repo is unaffected - nothing under src/, test/, scripts/, demo-app/ or bin/ imports typescript as a module, stryker.conf.json configures no checkers, and no editor tsdk is pinned in-repo. The consequence that does land is on editors set to "use workspace TypeScript version", which will fall back to their own bundled TypeScript; that is a per-developer setting, so AGENTS.md records it rather than working around it.
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.
Re-lands the TypeScript 7 bump on
main. Supersedes #5, which was correct in content but merged intochore/dep-bumpsa minute after #4 had already merged tomain, so it never retargeted and the change did not reachmain. This is the same commit cherry-picked onto currentmain; the diff below is exactly the TypeScript 7 change, with nothing from #4 re-applied.Unlike #5, this one is based on
main, so thegatesjob runs normally here.Raises the
typescriptdevDependency from^5.6.0to^7.0.2— the native (Go) port, released 2026-07-08. This discharges D-021's third deferred obligation and is recorded as D-022.One line of
package.jsonplus the lockfile. No source changes, notsconfig.jsonchanges, no CI changes: only the compiler behindtsc --noEmitmoves. The lockfile diff is exactlytypescriptplus its 20 platform binaries, nothing else moved.Measured, not taken from the speed claim
check-docs,lint,typecheck,demo-app:build,bun test(432 pass, 0 fail).tsconfigincluderoot exits 1 while the clean tree exits 0: a type mismatch insrc/, astrictNullChecksviolation insrc/, a mismatch intest/, and a bad JSX element indemo-app/. This is the check that actually matters here, because a fast pass and a skipped pass look identical from the exit code alone.@typescript/typescript-<platform>packages areoptionalDependenciescarryingos/cpuconstraints, so each host installs only its own, and all 20 are recorded inbun.lock. A darwin or win32 contributor resolves theirs from the same lockfile.One consequence worth knowing about
TypeScript 7 ships
tscand nothing else. Itslib/containstsc.js,getExePathandversion— there is notsserver.jsand no programmatictypescriptmodule API.Verified that the repo is unaffected: nothing under
src/,test/,scripts/,demo-app/orbin/importstypescriptas a module;stryker.conf.jsonconfigures nocheckers, so mutation runs never load it either; and no.vscode/.zedsetting pins a workspacetsdk.The consequence that does land is on editors. Anyone whose editor is set to "use the workspace TypeScript version" will not find a language server under
node_modules/typescript/liband will fall back to the editor's own bundled TypeScript, which means the editor and the gate can be running different compilers. That is a per-developer setting rather than a repo one, so AGENTS.md records it (withbun run typecheckas the authority when they disagree) instead of working around it.Still open from D-021
Obligation (1)
aedes1.x, behind R-006/R-007, and obligation (2)@biomejs/biome2.x, with thebiome migratelandmine documented in #4. Both unaffected by this change.