[E00-S01-T10] Strict base tsconfig committed #377
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#377
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
Makes both acceptance criteria for [E00-S01-T10] Strict base tsconfig committed (#163) enforceable rather than incidental. The strict
tsconfig.base.json(ES2023 / NodeNext / strict family) and the per-packageextendswere introduced in E00-S01-T02; this change locks that state in with a regression suite:tests/strict-tsconfig.test.mjs(new) — anode:testsuite (zero dependencies,pnpm-lock.yamluntouched) that fails if the committed base config or any package's compilation under it ever drifts:tsconfig.base.jsonis committed and carries the strict family (strict,noUncheckedIndexedAccess,exactOptionalPropertyTypes,noImplicitOverride,useUnknownInCatchVariables,verbatimModuleSyntax) plus NodeNext module/moduleResolution and ES2023 target;apps/server,packages/core,extensions/example) commits atsconfig.jsonthat extends the root base config (../../tsconfig.base.json);tsc -p <pkg>/tsconfig.json --noEmitwith the workspace-resolved TypeScript (exact 6.0.3, E00-S01-T09) exits 0 for all three packages;Explicitly out of scope per the brief (not touched): TypeScript exact dependency (E00-S01-T09), apps/packages/extensions separation (E00-S01-T11), root build/test/typecheck commands (E00-S01-T12). No CI workflow changes — test-suite wiring in CI is E00-S05 by design (same as T05–T09); the existing CI job (frozen install +
pnpm -r liston Node 24) stays green.Criterion → test table
tests/strict-tsconfig.test.mjs: "tsconfig.base.json is committed with the strict family enabled" — assertscompilerOptions.strict === trueplusnoUncheckedIndexedAccess,exactOptionalPropertyTypes,noImplicitOverride,useUnknownInCatchVariables,verbatimModuleSyntax,module/moduleResolution: NodeNext,target: ES2023. Mutation-probed: removingstrict/a strict-family flag fails this testtests/strict-tsconfig.test.mjs: "every workspace package tsconfig.json extends the committed base config" — assertsapps/server,packages/core,extensions/exampleeach extend../../tsconfig.base.json. Mutation-probed: a package extending its own config instead fails this testtests/strict-tsconfig.test.mjs: "every workspace package compiles under the strict base config (tsc --noEmit)" — runstsc -p <pkg>/tsconfig.json --noEmit(workspace-resolved TS 6.0.3) in each package and asserts exit 0tests/strict-tsconfig.test.mjs: "the committed base config enforces the strict family (non-vacuous probe)" — a scratch file violating the strict family must fail under the committed base config with TS7006 / TS2532 / TS2375 / TS4114 / TS18046Test plan executed
node_modules), Node 24 (v24.20.0):pnpm install --frozen-lockfile→ success,using pnpm v11.23.0, lockfile unchanged ✓pnpm -r list --depth -1(second CI step), Node 24 → lists all four workspace projects, exit 0 ✓pnpm typecheck→ all three packages passtsc -p tsconfig.json --noEmitunder the pinned 6.0.3 ✓pnpm -r run build→ all three packages emit under the strict base config ✓node --test tests/strict-tsconfig.test.mjs→ 4/4 pass ✓node --test "tests/**/*.test.mjs"on Node 24 (v24.20.0) → 28/28 pass (10 architecture-import + 6 workspace-config + 5 node-engine + 3 typescript-pin + 4 strict-tsconfig), exit 0 ✓Risks / notes
extendspath; a deliberate tsconfig change must update the base config and this suite in the same change.node node_modules/typescript/bin/tsc, so they are deterministic regardless of cwd and need no network.Refs #163