[E00-S01-T02] Implement tsconfig.base.json #369

Merged
kpcto merged 1 commits from feature/155 into main 2026-08-28 08:08:10 +00:00
Member

What changed

Implements the strict base TypeScript configuration for [E00-S01-T02] Implement tsconfig.base.json (#155):

  • tsconfig.base.json — workspace-wide strict base config per Engineering-Standards: target ES2023, module NodeNext, moduleResolution NodeNext, strict + noUncheckedIndexedAccess, exactOptionalPropertyTypes, noImplicitOverride, useUnknownInCatchVariables, verbatimModuleSyntax, plus isolatedModules, esModuleInterop, forceConsistentCasingInFileNames, declaration, sourceMap, skipLibCheck
  • Per-package tsconfig.json — every workspace package extends the base: apps/server, packages/core, extensions/example (each extends ../../tsconfig.base.json, rootDir src, outDir dist, include src)
  • Minimal src/index.ts placeholders — one per package so each package actually compiles under the base config (empty export {} module markers, CJS-safe until ESM boundaries land in E00-S01-T03)

Explicitly out of scope per the brief: workspace/package manifests (E00-S01-T01, already merged), ESM package boundaries (E00-S01-T03 — "type": "module" etc. stay out), dependency-boundary rule/test (E00-S01-T04). No manifest/lockfile/CI changes in this PR.

Criterion → test table

Acceptance criterion Evidence / test
a strict tsconfig.base.json is committed to the workspace tsconfig.base.json at repo root with the full strict family; verified by running tsc --showConfig (resolved options include strict, noUncheckedIndexedAccess, exactOptionalPropertyTypes, noImplicitOverride, useUnknownInCatchVariables, verbatimModuleSyntax) and by a strictness probe: a scratch file with violations fails under the base config with TS7006 (implicit any), TS2532 (possibly undefined index), TS2322 (exact optional property), TS4114 (missing override), TS18046 (unknown catch variable)
every package extends the base tsconfig apps/server/tsconfig.json, packages/core/tsconfig.json, extensions/example/tsconfig.json each contain "extends": "../../tsconfig.base.json"; tsc --showConfig -p <pkg>/tsconfig.json for each shows the inherited strict options alongside the package's rootDir/outDir
every workspace package compiles with the base config tsc -p apps/server/tsconfig.json --noEmit ✓, tsc -p packages/core/tsconfig.json --noEmit ✓, tsc -p extensions/example/tsconfig.json --noEmit ✓ (TypeScript 6.0.3); full emit also verified: each package emits index.js + index.d.ts + index.js.map

Test plan executed

  • tsc --showConfig on base and each package config (extends chain resolves) ✓
  • tsc -p <pkg>/tsconfig.json --noEmit for all 3 packages with TypeScript 6.0.3 ✓
  • full emit (--outDir scratch) for all 3 packages → .js/.d.ts/.js.map ✓
  • strictness probe: violating file fails under base config (5 distinct strict errors) ✓
  • git status clean after build — no stray outputs (dist/ is gitignored) ✓

Risks / notes

  • Placeholder sources use export {} because manifests are not yet "type": "module" (that's T03); export const would hit TS1287 until then. Real exports land with later stories.
  • CI here still runs only the frozen-install job (unchanged); the full typecheck pipeline is E00-S05.

Closes #155

## What changed Implements the strict base TypeScript configuration for [E00-S01-T02] Implement tsconfig.base.json (#155): - **`tsconfig.base.json`** — workspace-wide strict base config per [Engineering-Standards](https://git.stevanovic.co.uk/Fabrika/PersonalBlog/wiki/Engineering-Standards.-): `target ES2023`, `module NodeNext`, `moduleResolution NodeNext`, `strict` + `noUncheckedIndexedAccess`, `exactOptionalPropertyTypes`, `noImplicitOverride`, `useUnknownInCatchVariables`, `verbatimModuleSyntax`, plus `isolatedModules`, `esModuleInterop`, `forceConsistentCasingInFileNames`, `declaration`, `sourceMap`, `skipLibCheck` - **Per-package `tsconfig.json`** — every workspace package extends the base: `apps/server`, `packages/core`, `extensions/example` (each `extends ../../tsconfig.base.json`, `rootDir src`, `outDir dist`, `include src`) - **Minimal `src/index.ts` placeholders** — one per package so each package actually compiles under the base config (empty `export {}` module markers, CJS-safe until ESM boundaries land in E00-S01-T03) Explicitly out of scope per the brief: workspace/package manifests (E00-S01-T01, already merged), ESM package boundaries (E00-S01-T03 — `"type": "module"` etc. stay out), dependency-boundary rule/test (E00-S01-T04). No manifest/lockfile/CI changes in this PR. ## Criterion → test table | Acceptance criterion | Evidence / test | | --- | --- | | a strict `tsconfig.base.json` is committed to the workspace | `tsconfig.base.json` at repo root with the full strict family; verified by running `tsc --showConfig` (resolved options include `strict`, `noUncheckedIndexedAccess`, `exactOptionalPropertyTypes`, `noImplicitOverride`, `useUnknownInCatchVariables`, `verbatimModuleSyntax`) and by a strictness probe: a scratch file with violations fails under the base config with TS7006 (implicit any), TS2532 (possibly undefined index), TS2322 (exact optional property), TS4114 (missing override), TS18046 (unknown catch variable) | | every package extends the base tsconfig | `apps/server/tsconfig.json`, `packages/core/tsconfig.json`, `extensions/example/tsconfig.json` each contain `"extends": "../../tsconfig.base.json"`; `tsc --showConfig -p <pkg>/tsconfig.json` for each shows the inherited strict options alongside the package's `rootDir`/`outDir` | | every workspace package compiles with the base config | `tsc -p apps/server/tsconfig.json --noEmit` ✓, `tsc -p packages/core/tsconfig.json --noEmit` ✓, `tsc -p extensions/example/tsconfig.json --noEmit` ✓ (TypeScript 6.0.3); full emit also verified: each package emits `index.js` + `index.d.ts` + `index.js.map` | ## Test plan executed - `tsc --showConfig` on base and each package config (extends chain resolves) ✓ - `tsc -p <pkg>/tsconfig.json --noEmit` for all 3 packages with TypeScript 6.0.3 ✓ - full emit (`--outDir` scratch) for all 3 packages → `.js`/`.d.ts`/`.js.map` ✓ - strictness probe: violating file fails under base config (5 distinct strict errors) ✓ - `git status` clean after build — no stray outputs (dist/ is gitignored) ✓ ## Risks / notes - Placeholder sources use `export {}` because manifests are not yet `"type": "module"` (that's T03); `export const` would hit TS1287 until then. Real exports land with later stories. - CI here still runs only the frozen-install job (unchanged); the full typecheck pipeline is E00-S05. Closes #155
bot-implementer added 1 commit 2026-08-28 00:01:03 +00:00
feat: add strict tsconfig.base.json shared by all packages (E00-S01-T02)
CI / Frozen lockfile install (pull_request) Successful in 39s
4e527f9267
Adds a strict base TypeScript config at the workspace root (ES2023 / NodeNext
/ strict family incl. noUncheckedIndexedAccess, exactOptionalPropertyTypes,
noImplicitOverride, useUnknownInCatchVariables, verbatimModuleSyntax per
Engineering-Standards) and gives every workspace package
(apps/server, packages/core, extensions/example) a tsconfig.json that extends
it. Each package gets a minimal src/index.ts placeholder so it compiles under
the base config (CJS-safe `export {}` until ESM boundaries land in T03).

Verified: every package typechecks and emits (js + d.ts + sourcemap) with the
pinned TypeScript 6.0.3; a strictness probe confirms the strict family fires.

Closes #155
kpcto merged commit 97b702cc59 into main 2026-08-28 08:08:10 +00:00
kpcto deleted branch feature/155 2026-08-28 08:08:10 +00:00
Sign in to join this conversation.