[E00-S01] Workspace bootstrap #367
Closed
bot-implementer
wants to merge 1 commits from
feature/58 into main
pull from: feature/58
merge into: :main
:main
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#367
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
Bootstraps the EPPP pnpm workspace (E00-S01):
packageManagerpin +pnpm-workspace.yaml(apps/*,packages/*,extensions/*) with a committed frozen lockfileengines.node: "24.x")tsconfig.base.json: ES2023 / NodeNext / strict family per engineering-standards.md)apps/server,packages/core,extensions/example— each withbuild/typecheckscriptspnpm build,pnpm test,pnpm typechecktests/architecture.test.ts): nopackages/*source imports a concrete extension — extension packages are discovered from the filesystem, so new extensions are guarded automatically.gitea/workflows/ci.yml) running only the root scripts; pipeline stages beyond root scripts are E00-S05 (out of scope)Criterion → test table
packageManager: pnpm@11.23.0in rootpackage.json;pnpm-workspace.yaml;pnpm-lock.yamlcommitted (lockfileVersion 9.0); CI installs withpnpm install --frozen-lockfilepackage.jsonengines.node: "24.x"; CI installs Node 24 via setup-node"typescript": "6.0.3"(no range); lockfile resolves6.0.3tsconfig.base.jsonwithstrict: true+ noUncheckedIndexedAccess, exactOptionalPropertyTypes, noImplicitOverride, useUnknownInCatchVariables, verbatimModuleSyntax, NodeNextpnpm-workspace.yamlglobsapps/*,packages/*,extensions/*; skeleton package in each group (install reports "all 4 workspace projects")build(pnpm -r --if-present run build),test(vitest run),typecheck(tsc -p tsconfig.json && pnpm -r --if-present run typecheck)pnpm install --frozen-lockfilegit clone+pnpm install --frozen-lockfile(fresh store) succeeds; build/test/typecheck all pass in the clonetests/architecture.test.ts(FIT-001): scans everypackages/*source file and rejects imports of extension packages by name or by relative path intoextensions/; negative control verified (injecting a core→extension import makes the test fail)Test plan executed
pnpm install --frozen-lockfile✓pnpm build) ✓pnpm test→ FIT-001) ✓pnpm typecheck) ✓Risks / notes
apps/serverandextensions/exampleare placeholders; later stories replace their contents (Fastify shell, real extensions).Closes #58
Pull request closed