[E00-S01-T02] Implement tsconfig.base.json #369
No Reviewers
Labels
Clear labels
agent/analyst-drafted
agent/analyst-drafted
needs/human-decision
needs/human-decision
needs/security-review
needs/security-review
tier/t0
tier/t1
tier/t2
tier/t3
kind
bug
kind
bug
kind
epic
kind
epic
kind
initiative
EPPP programme initiative
kind
story
kind
story
kind
task
EPPP engineering card/task decomposed from a story
kind
toil
kind
toil
loop
1
loop
1
loop
2
loop
2
loop
3
loop
3
risk
agent-full
risk
agent-full
risk
human-gated
risk
human-gated
risk
human-only
risk
human-only
size
l
size
l
size
m
size
m
size
s
size
s
status
blocked
status
blocked
status
done
Workflow: Done
status
in-progress
status
in-progress
status
proposed
status
proposed
status
ready
status
ready
status
review
status
review
stream
checkout
stream
checkout
stream
onboarding
stream
onboarding
stream
platform
stream
platform
trivial — implementer only, auto-merge
standard — implementer + reviewer + tester
complex — security if triggered, human merge
critical — full chain + security, human merge
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Fabrika/PersonalBlog#369
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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, plusisolatedModules,esModuleInterop,forceConsistentCasingInFileNames,declaration,sourceMap,skipLibChecktsconfig.json— every workspace package extends the base:apps/server,packages/core,extensions/example(eachextends ../../tsconfig.base.json,rootDir src,outDir dist,include src)src/index.tsplaceholders — one per package so each package actually compiles under the base config (emptyexport {}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
tsconfig.base.jsonis committed to the workspacetsconfig.base.jsonat repo root with the full strict family; verified by runningtsc --showConfig(resolved options includestrict,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)apps/server/tsconfig.json,packages/core/tsconfig.json,extensions/example/tsconfig.jsoneach contain"extends": "../../tsconfig.base.json";tsc --showConfig -p <pkg>/tsconfig.jsonfor each shows the inherited strict options alongside the package'srootDir/outDirtsc -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 emitsindex.js+index.d.ts+index.js.mapTest plan executed
tsc --showConfigon base and each package config (extends chain resolves) ✓tsc -p <pkg>/tsconfig.json --noEmitfor all 3 packages with TypeScript 6.0.3 ✓--outDirscratch) for all 3 packages →.js/.d.ts/.js.map✓git statusclean after build — no stray outputs (dist/ is gitignored) ✓Risks / notes
export {}because manifests are not yet"type": "module"(that's T03);export constwould hit TS1287 until then. Real exports land with later stories.Closes #155
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