[E00-S01] Workspace bootstrap #58

Open
opened 2026-08-26 23:59:55 +00:00 by kpcto · 7 comments
Owner

Parent epic: [E00] Repository and runtime foundation (#28)

Intent

As an engineer, I need a predictable workspace so apps, core packages and extensions cannot collapse into an accidental dependency graph.

Acceptance criteria

  • pnpm 11.23.0 workspace committed with a frozen lockfile
  • Node engine restricted to the 24.x line
  • TypeScript 6.0.3 pinned as an exact dependency
  • strict base tsconfig committed to the repository
  • apps, packages and extensions kept as separate workspaces
  • root commands exist for build, test and typecheck
  • a clean clone installs with pnpm install --frozen-lockfile
  • no core package imports a concrete extension

Explicitly out of scope

  • Docker Compose baseline and container smoke tests (that is E00-S02)
  • PostgreSQL adapter and migration runner (that is E00-S03)
  • CI pipeline stages beyond the root scripts (that is E00-S05)

Test plan

  • run a clean pnpm install --frozen-lockfile on a fresh clone
  • compile every workspace package
  • run the architecture import test that rejects core-to-extension imports

Rollback note

  • Single commit; revert to remove. No database or migration changes.

Owning stream

platform

Risk quadrant

agent-full

> Parent epic: [E00] Repository and runtime foundation (#28) ## Intent As an engineer, I need a predictable workspace so apps, core packages and extensions cannot collapse into an accidental dependency graph. ## Acceptance criteria - pnpm 11.23.0 workspace committed with a frozen lockfile - Node engine restricted to the 24.x line - TypeScript 6.0.3 pinned as an exact dependency - strict base tsconfig committed to the repository - apps, packages and extensions kept as separate workspaces - root commands exist for build, test and typecheck - a clean clone installs with `pnpm install --frozen-lockfile` - no core package imports a concrete extension ## Explicitly out of scope - Docker Compose baseline and container smoke tests (that is E00-S02) - PostgreSQL adapter and migration runner (that is E00-S03) - CI pipeline stages beyond the root scripts (that is E00-S05) ## Test plan - run a clean `pnpm install --frozen-lockfile` on a fresh clone - compile every workspace package - run the architecture import test that rejects core-to-extension imports ## Rollback note - Single commit; revert to remove. No database or migration changes. ### Owning stream platform ### Risk quadrant agent-full
kpcto added this to the Sprint 0 milestone 2026-08-26 23:59:55 +00:00
kpcto added the
kind
story
status
ready
labels 2026-08-26 23:59:55 +00:00
bot-dispatcher added
status
proposed
and removed
status
ready
kind
story
labels 2026-08-26 23:59:58 +00:00
Member

Auto-reverted by dispatcher: DoR lint: required section "Intent" is empty; required section "Explicitly out of scope" is empty; required section "Test plan" is empty; required section "Rollback note" is empty

status/ready may only be applied by a human maintainer.

> Auto-reverted by dispatcher: DoR lint: required section "Intent" is empty; required section "Explicitly out of scope" is empty; required section "Test plan" is empty; required section "Rollback note" is empty `status/ready` may only be applied by a human maintainer.
kpcto added the
kind
story
label 2026-08-27 21:14:48 +00:00
kpcto added
status
ready
and removed
status
proposed
labels 2026-08-27 22:52:34 +00:00
bot-dispatcher added
loop
1
status
in-progress
and removed
status
ready
labels 2026-08-27 22:52:35 +00:00
Member
agent: dispatcher
phase: complete
plan_summary: Dispatch #58: [E00-S01] Workspace bootstrap (platform, security-gated)
```yaml agent: dispatcher phase: complete plan_summary: Dispatch #58: [E00-S01] Workspace bootstrap (platform, security-gated) ```
bot-dispatcher added the needs/security-reviewneeds/security-review labels 2026-08-27 22:52:36 +00:00
Member
agent: implementer
phase: start
issue: "58"
objective: "[E00-S01] Workspace bootstrap"
branch: feature/58
plan:
  - scaffold pnpm 11.23.0 workspace (packageManager pin, pnpm-workspace.yaml, frozen lockfile)
  - restrict engines.node to 24.x and pin typescript 6.0.3 exactly
  - commit strict tsconfig.base.json (ES2023 / NodeNext / strict family per engineering standards)
  - keep apps/, packages/, extensions/ as separate workspaces with skeleton packages
  - add root build/test/typecheck scripts (tsc + vitest 4.1.10)
  - add FIT-001 architecture test: no packages/* source imports a concrete extension
  - add minimal CI running only root scripts (S05 stages out of scope)
out_of_scope: [E00-S02 compose/container smoke, E00-S03 postgres adapter + migration runner, E00-S05 CI stages beyond root scripts]

Starting implementation. Key inputs: EPPP docs from PR #366 branch (technology-stack.md: pnpm 11.23.0, Node 24.x, TS 6.0.3, Vitest 4.1.10; engineering-standards.md: TS baseline + FIT-001; architecture.md §9: apps/packages/extensions layout and dependency rules).

```yaml agent: implementer phase: start issue: "58" objective: "[E00-S01] Workspace bootstrap" branch: feature/58 plan: - scaffold pnpm 11.23.0 workspace (packageManager pin, pnpm-workspace.yaml, frozen lockfile) - restrict engines.node to 24.x and pin typescript 6.0.3 exactly - commit strict tsconfig.base.json (ES2023 / NodeNext / strict family per engineering standards) - keep apps/, packages/, extensions/ as separate workspaces with skeleton packages - add root build/test/typecheck scripts (tsc + vitest 4.1.10) - add FIT-001 architecture test: no packages/* source imports a concrete extension - add minimal CI running only root scripts (S05 stages out of scope) out_of_scope: [E00-S02 compose/container smoke, E00-S03 postgres adapter + migration runner, E00-S05 CI stages beyond root scripts] ``` Starting implementation. Key inputs: EPPP docs from PR #366 branch (technology-stack.md: pnpm 11.23.0, Node 24.x, TS 6.0.3, Vitest 4.1.10; engineering-standards.md: TS baseline + FIT-001; architecture.md §9: apps/packages/extensions layout and dependency rules).
kpcto added
status
proposed
and removed
status
in-progress
needs/security-review
loop
1
needs/security-review
labels 2026-08-27 22:59:30 +00:00
Member
agent: reviewer
verdict: approve
```yaml agent: reviewer verdict: approve ```
bot-dispatcher added
status
review
and removed
status
proposed
kind
story
labels 2026-08-27 23:04:48 +00:00
Member
agent: implementer
phase: complete
issue: "58"
objective: "[E00-S01] Workspace bootstrap"
branch: feature/58
pr: "367"
commit: 1d64964
ci: "green — run 32 (Workspace bootstrap checks): install --frozen-lockfile, build, test, typecheck all passed"
criteria_met:
  - "pnpm 11.23.0 workspace committed with frozen lockfile: packageManager pin + pnpm-workspace.yaml + pnpm-lock.yaml (lockfileVersion 9.0)"
  - "Node engine restricted to 24.x line: engines.node '24.x'; CI installs Node 24 via setup-node"
  - "TypeScript 6.0.3 pinned as exact dependency (root devDependencies, no range)"
  - "strict base tsconfig committed: tsconfig.base.json (ES2023 / NodeNext / strict family per engineering standards)"
  - "apps, packages and extensions kept as separate workspaces: globs apps/*, packages/*, extensions/* with skeleton packages (server, core, example-extension)"
  - "root commands exist: build (pnpm -r build), test (vitest run), typecheck (tsc + pnpm -r typecheck)"
  - "clean clone verified: fresh clone + pnpm install --frozen-lockfile (fresh store) succeeds; build/test/typecheck pass"
  - "no core package imports a concrete extension: tests/architecture.test.ts (FIT-001) scans packages/* sources; negative control verified (injected core→extension import fails the test)"
out_of_scope_respected: [E00-S02 compose/container smoke, E00-S03 postgres adapter + migration runner, E00-S05 CI stages beyond root scripts]

Done — PR #367 open against main, CI green, criterion→test table in the PR description.

```yaml agent: implementer phase: complete issue: "58" objective: "[E00-S01] Workspace bootstrap" branch: feature/58 pr: "367" commit: 1d64964 ci: "green — run 32 (Workspace bootstrap checks): install --frozen-lockfile, build, test, typecheck all passed" criteria_met: - "pnpm 11.23.0 workspace committed with frozen lockfile: packageManager pin + pnpm-workspace.yaml + pnpm-lock.yaml (lockfileVersion 9.0)" - "Node engine restricted to 24.x line: engines.node '24.x'; CI installs Node 24 via setup-node" - "TypeScript 6.0.3 pinned as exact dependency (root devDependencies, no range)" - "strict base tsconfig committed: tsconfig.base.json (ES2023 / NodeNext / strict family per engineering standards)" - "apps, packages and extensions kept as separate workspaces: globs apps/*, packages/*, extensions/* with skeleton packages (server, core, example-extension)" - "root commands exist: build (pnpm -r build), test (vitest run), typecheck (tsc + pnpm -r typecheck)" - "clean clone verified: fresh clone + pnpm install --frozen-lockfile (fresh store) succeeds; build/test/typecheck pass" - "no core package imports a concrete extension: tests/architecture.test.ts (FIT-001) scans packages/* sources; negative control verified (injected core→extension import fails the test)" out_of_scope_respected: [E00-S02 compose/container smoke, E00-S03 postgres adapter + migration runner, E00-S05 CI stages beyond root scripts] ``` Done — PR #367 open against main, CI green, criterion→test table in the PR description.
Member
agent: tester
phase: start
issue: "58"
pr: "367"
objective: "[E00-S01] Workspace bootstrap — independent probe"
method:
  - fresh clone of feature/58
  - pnpm install --frozen-lockfile on a clean store
  - pnpm build / pnpm test / pnpm typecheck
  - verify each acceptance criterion against the working tree (not the PR narrative)
  - negative control on the architecture import guard (core → extension)
  - review CI run links
constraints:
  - never edit the implementer's tests in the same PR
```yaml agent: tester phase: start issue: "58" pr: "367" objective: "[E00-S01] Workspace bootstrap — independent probe" method: - fresh clone of feature/58 - pnpm install --frozen-lockfile on a clean store - pnpm build / pnpm test / pnpm typecheck - verify each acceptance criterion against the working tree (not the PR narrative) - negative control on the architecture import guard (core → extension) - review CI run links constraints: - never edit the implementer's tests in the same PR ```
Member
agent: tester
phase: complete
issue: "58"
pr: "367"
commit: 1d64964
verdict: pass

independence:
  - "clean remote clone: git clone --branch feature/58 --depth 1 -> HEAD 1d64964"
  - "toolchain: Node v24.20.0 (self-fetched), pnpm v11.23.0 (corepack via packageManager pin)"

evidence:
  frozen_install:
    cmd: pnpm install --frozen-lockfile
    result: "Scope: all 4 workspace projects; 'Lockfile is up to date, resolution step is skipped'; Done in 9.6s using pnpm v11.23.0"
    exit: 0
  build: {cmd: pnpm build, result: "3 of 4 workspace projects compiled (apps/server, packages/core, extensions/example)", exit: 0}
  test: {cmd: pnpm test, result: "3 passed (FIT-001 architecture guard)", exit: 0}
  typecheck: {cmd: pnpm typecheck, result: "root tests (tsc) + all workspace packages typechecked", exit: 0}
  negative_control:
    - "core -> extension import by package name  => test FAILS (violation reported)"
    - "core -> extension import by relative path => test FAILS (violation reported)"
    - "probes removed                          => test GREEN (3/3), working tree clean"

criteria:
  - "pnpm 11.23.0 workspace + frozen lockfile: pass (packageManager pnpm@11.23.0; pnpm-workspace.yaml; pnpm-lock.yaml committed, lockfileVersion 9.0)"
  - "Node engine restricted to 24.x line: pass (engines.node '24.x'; install verified on Node 24.20.0)"
  - "TypeScript 6.0.3 exact dependency: pass (root devDependencies 'typescript': '6.0.3', no range; lockfile resolves 6.0.3)"
  - "strict base tsconfig committed: pass (tsconfig.base.json strict:true + noUncheckedIndexedAccess/exactOptionalPropertyTypes/noImplicitOverride/useUnknownInCatchVariables/verbatimModuleSyntax, ES2023/NodeNext)"
  - "apps/packages/extensions separate workspaces: pass (globs apps/*, packages/*, extensions/*; skeleton in each group)"
  - "root build/test/typecheck commands: pass (scripts.build/test/typecheck all run successfully)"
  - "clean clone installs with --frozen-lockfile: pass (independent clean clone, exit 0)"
  - "no core package imports concrete extension: pass (FIT-001 guard green; negative control proves it rejects core->extension imports)"

ci:
  run: http://gitea:3000/Fabrika/PersonalBlog/actions/runs/32
  job: http://gitea:3000/Fabrika/PersonalBlog/actions/runs/32/jobs/44
  status: success (7/7 steps: checkout, Node 24, corepack, frozen install, build, test, typecheck)

constraints_respected:
  - "never edited the implementer's tests; negative control used temporary source probes, removed before finish"
```yaml agent: tester phase: complete issue: "58" pr: "367" commit: 1d64964 verdict: pass independence: - "clean remote clone: git clone --branch feature/58 --depth 1 -> HEAD 1d64964" - "toolchain: Node v24.20.0 (self-fetched), pnpm v11.23.0 (corepack via packageManager pin)" evidence: frozen_install: cmd: pnpm install --frozen-lockfile result: "Scope: all 4 workspace projects; 'Lockfile is up to date, resolution step is skipped'; Done in 9.6s using pnpm v11.23.0" exit: 0 build: {cmd: pnpm build, result: "3 of 4 workspace projects compiled (apps/server, packages/core, extensions/example)", exit: 0} test: {cmd: pnpm test, result: "3 passed (FIT-001 architecture guard)", exit: 0} typecheck: {cmd: pnpm typecheck, result: "root tests (tsc) + all workspace packages typechecked", exit: 0} negative_control: - "core -> extension import by package name => test FAILS (violation reported)" - "core -> extension import by relative path => test FAILS (violation reported)" - "probes removed => test GREEN (3/3), working tree clean" criteria: - "pnpm 11.23.0 workspace + frozen lockfile: pass (packageManager pnpm@11.23.0; pnpm-workspace.yaml; pnpm-lock.yaml committed, lockfileVersion 9.0)" - "Node engine restricted to 24.x line: pass (engines.node '24.x'; install verified on Node 24.20.0)" - "TypeScript 6.0.3 exact dependency: pass (root devDependencies 'typescript': '6.0.3', no range; lockfile resolves 6.0.3)" - "strict base tsconfig committed: pass (tsconfig.base.json strict:true + noUncheckedIndexedAccess/exactOptionalPropertyTypes/noImplicitOverride/useUnknownInCatchVariables/verbatimModuleSyntax, ES2023/NodeNext)" - "apps/packages/extensions separate workspaces: pass (globs apps/*, packages/*, extensions/*; skeleton in each group)" - "root build/test/typecheck commands: pass (scripts.build/test/typecheck all run successfully)" - "clean clone installs with --frozen-lockfile: pass (independent clean clone, exit 0)" - "no core package imports concrete extension: pass (FIT-001 guard green; negative control proves it rejects core->extension imports)" ci: run: http://gitea:3000/Fabrika/PersonalBlog/actions/runs/32 job: http://gitea:3000/Fabrika/PersonalBlog/actions/runs/32/jobs/44 status: success (7/7 steps: checkout, Node 24, corepack, frozen install, build, test, typecheck) constraints_respected: - "never edited the implementer's tests; negative control used temporary source probes, removed before finish" ```
kpcto added
status
proposed
kind
story
and removed
status
review
labels 2026-08-27 23:54:58 +00:00
Sign in to join this conversation.