Repository navigation
Closed
Labels
area: toolingReusable workflows, Gradle, templates, Renovate, and API tooling.Reusable workflows, Gradle, templates, Renovate, and API tooling.component: buildGradle, npm, packaging, or local build tooling.Gradle, npm, packaging, or local build tooling.component: testsUnit, integration, system, or contract test concern.Unit, integration, system, or contract test concern.type: choreMaintenance work without intended behavior change.Maintenance work without intended behavior change.
Description
Parent
What to build
Every existing suite runs on Vitest instead of node:test, and every script and test is TypeScript that Node runs directly. After this lands, a contributor on a fresh clone runs nvm use, npm ci and npm run verify, and gets the same strict, typed and measured gate that CI runs.
- Vitest 4 with V8 coverage replaces
node:testand c8. A shared setup makes any network call fail the test that made it, and gives each test its own temporary directory. - Lint rejects a committed
.onlyor.skip, a fixed sleep in a test, and a test that asserts nothing. - Coverage thresholds are set from what the suite reaches after the migration, over an explicit include list so an untested file counts as zero, and are only ever raised. A count of coverage-ignore comments is held at zero.
- Scripts and tests are TypeScript, run by Node's type stripping, and included in the typecheck.
- TypeScript is pinned to an exact 6.0.x, and ESLint 10 runs
strictTypeCheckedwith type information. The tsconfig gainserasableSyntaxOnly,noUnusedLocals,noUnusedParameters,noFallthroughCasesInSwitchandisolatedModules. Prettier stays. .nvmrcpins an exact Node 24.x, and CI reads it.- The npm package ships
docs/adrandspeconly, because Node does not strip types insidenode_modules. - Two ADRs in
docs/adr/architecture/: tests run on Vitest and tooling is TypeScript under Node's type stripping; coverage is a ratchet.
Acceptance criteria
-
npm run verifypasses locally on the pinned Node and in CI. - No JavaScript source remains among the scripts and tests, and every suite runs on Vitest.
- A test that calls the network fails with a message naming the test.
- Lint fails on a committed
.only, on a fixed sleep in a test, and on a test with no assertion. - The coverage thresholds equal the measured values, and the config records the measurement beside them.
-
npm pack --dry-runlistsdocs/adrandspec, and no TypeScript script. - Both ADRs pass
npm run lint:adrsand have rows in the register.
Blocked by
None (can start immediately).
Metadata
Metadata
Assignees
Labels
area: toolingReusable workflows, Gradle, templates, Renovate, and API tooling.Reusable workflows, Gradle, templates, Renovate, and API tooling.component: buildGradle, npm, packaging, or local build tooling.Gradle, npm, packaging, or local build tooling.component: testsUnit, integration, system, or contract test concern.Unit, integration, system, or contract test concern.type: choreMaintenance work without intended behavior change.Maintenance work without intended behavior change.
Activity