Build with TypeScript 7, and record today's work in the changelog - #30
Merged
Merged
Conversation
…elog Two pieces of cleanup left over from the four PRs that just landed. **Stop relitigating TypeScript 7 weekly.** #19 was closed with its TypeScript half deliberately unmerged: typescript-eslint does not support TS 7, and taking it would mean dropping the type-aware linting that found two real bugs the week it was added. Without an ignore rule dependabot reopens the same PR every Monday, and a standing red PR nobody intends to merge is indistinguishable from one nobody has got to yet. The rule points at #29, which records the decision and how to check whether it is time to revisit. Verified still true before writing it down: typescript-eslint 8.70.0 is current and typescript-eslint/typescript-eslint#10940 is open. **Record the work.** The changelog had no Unreleased section, so ten fixed formatter bugs, the Spec Kit and tooling additions, and four major dependency upgrades were nowhere a user of this package could see them. It also owed a credit: @adidev001 was told on #5 that the harvest would be recorded in the changelog, and it was not yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This was referenced Sep 14, 2026
Adam asked why TypeScript is not being bumped. The earlier answer -- "held,
typescript-eslint does not support 7" -- treated it as a choice between 5.9 and
7, which it is not. Two things were missed.
**TypeScript 6 was never considered.** typescript-eslint declares
`typescript: ">=4.8.4 <6.1.0"`, so 6.0.3 is supported. Sitting on 5.9 was
pointless.
**TypeScript 7 does not actually require giving up linting.** The TypeScript
team documents running it side by side with 6, which is what the error message
typescript-eslint prints links to. So:
- the build, typecheck and watch run TypeScript 7, installed as the alias
`typescript-7`
- the package named `typescript` is 6.0.3, which is the copy typescript-eslint
loads
Builds go from ~2.6s to ~0.38s. TypeScript 7's typecheck agrees with 6 across
src and tests.
Two things found while doing it, both worth the change on their own:
- TypeScript 6 no longer auto-includes every `@types/*` package, so the build
config has to name what it needs. `tsconfig.json` now sets
`"types": ["node"]`; the lint config already did. Without it the build fails
on `Buffer` and `process` while the typecheck passes, because only one of
the two configs declared them.
- **`node_modules/.bin/tsc` is not deterministic.** Both packages ship a `tsc`
binary, and on the same tree it resolved to 7.0.2 after an incremental
install and 6.0.3 after a clean `npm ci`. A bare `tsc` in a script would
silently compile with a different compiler depending on how the tree was
installed. Every script now names the compiler by path.
`npm run check` and CI typecheck with **both** compilers, so a disagreement
between them fails a check rather than showing up as lint and build quietly
diverging.
Verified: clean `npm ci`, full check green, 64 tests, and the live sweep runs
all 53 tools against the TypeScript 7 build with no suspicious output.
Issue #29 and the dependabot ignore now say what is actually held -- moving the
`typescript` package to 7, which would disable linting while changing nothing
about the build.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Adam asked why TypeScript is not being bumped. The earlier answer — "held, typescript-eslint does not support 7" — treated it as a choice between 5.9 and 7. It is not, and I missed two things.
TypeScript 6 was never considered
typescript-eslint declares
typescript: ">=4.8.4 <6.1.0". 6.0.3 is supported. Sitting on 5.9 was pointless — I only ever tested the version dependabot proposed.TypeScript 7 does not require giving up linting
The TypeScript team documents running 7 side by side with 6 — which is what the error typescript-eslint prints links to. I read the error and stopped at the first sentence.
So:
typescript-7(alias)typescriptBuilds go from ~2.6s to ~0.38s (3 runs each, clean
dist). TypeScript 7's typecheck agrees with 6 acrosssrc/andtests/.Two things found while doing it
TypeScript 6 no longer auto-includes every
@types/*package. The build config has to name what it needs, sotsconfig.jsonnow sets"types": ["node"]— the lint config already did. Without it the build fails onBufferandprocesswhile the typecheck passes, because only one of the two configs declared them.node_modules/.bin/tscis not deterministic. Both packages ship atscbinary. On the same tree:A bare
tscin a script would silently compile with a different compiler depending on how the tree was installed. Every script now names the compiler by path. This is the part I'd want a second pair of eyes on.Guard against the two diverging
npm run checkand CI typecheck with both compilers (typecheckon 7,typecheck:lint-compileron 6), so a disagreement fails a check rather than showing up as lint and build quietly diverging.What is actually held now
Not TypeScript 7 — the build already uses it. What is held is moving the
typescriptpackage to 7, which would disable linting while changing nothing about the build. #29 and the dependabot ignore rule now say that, rather than the earlier, wronger framing. When typescript-eslint ships TS 7 support, the alias goes away andtypescriptmoves to 7.Also in this PR
The changelog had no
Unreleasedsection, so ten fixed formatter bugs and four major dependency upgrades were nowhere a user of this package could see them. It also owed a credit — @adidev001 was told on #5 that the harvest would be recorded there.Verification
npm ci, thennpm run check(lint → format → typecheck ×2 → build → test): 64 tests, greennpm run sweepagainst the TypeScript 7 build: all 53 tools called, 16 content expectations checked, no suspicious outputnpm audit: 0 vulnerabilities🤖 Generated with Claude Code