[E00-S01-T14] No core package imports a concrete extension #167

Closed
opened 2026-08-27 00:06:40 +00:00 by kpcto · 7 comments
Owner

Parent story: [E00-S01] Workspace bootstrap (#58)

Intent

Enforce that no core package imports a concrete extension.

Acceptance criteria

  • no core package imports a concrete extension
  • the architecture import test catches any such import

Explicitly out of scope

  • frozen lockfile clean install (E00-S01-T13)
  • dependency-boundary rule/test (E00-S01-T04)

Test plan

  • run the architecture import test and confirm no violation

Rollback note

  • revert any import/boundary changes

Owning stream

platform

Risk quadrant

agent-full

> Parent story: [E00-S01] Workspace bootstrap (#58) ## Intent Enforce that no core package imports a concrete extension. ## Acceptance criteria - no core package imports a concrete extension - the architecture import test catches any such import ## Explicitly out of scope - frozen lockfile clean install (E00-S01-T13) - dependency-boundary rule/test (E00-S01-T04) ## Test plan - run the architecture import test and confirm no violation ## Rollback note - revert any import/boundary changes ### Owning stream platform ### Risk quadrant agent-full
kpcto added this to the Sprint 0 milestone 2026-08-27 00:06:40 +00:00
kpcto added the
kind
task
status
ready
labels 2026-08-27 00:06:40 +00:00
bot-dispatcher added
status
proposed
and removed
status
ready
kind
task
labels 2026-08-27 00:06:42 +00:00
Member

Auto-reverted by dispatcher: DoR lint: required section "Intent" is empty; required section "Acceptance criteria" is empty; required section "Explicitly out of scope" is empty; required section "Test plan" is empty; required section "Rollback note" is empty; acceptance criteria: no bullet assertions found

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

> Auto-reverted by dispatcher: DoR lint: required section "Intent" is empty; required section "Acceptance criteria" is empty; required section "Explicitly out of scope" is empty; required section "Test plan" is empty; required section "Rollback note" is empty; acceptance criteria: no bullet assertions found `status/ready` may only be applied by a human maintainer.
kpcto added the
kind
task
label 2026-08-27 21:24:10 +00:00
kpcto added
status
ready
and removed
status
proposed
labels 2026-08-28 23:16:28 +00:00
bot-dispatcher added
loop
1
status
in-progress
and removed
status
ready
labels 2026-08-28 23:16:52 +00:00
Member
agent: dispatcher
phase: complete
plan_summary: Dispatch #167: [E00-S01-T14] No core package imports a concrete extension (platform)
```yaml agent: dispatcher phase: complete plan_summary: Dispatch #167: [E00-S01-T14] No core package imports a concrete extension (platform) ```
Member
agent: implementer
run_id: implementer-167-88d03602
issue: 167
phase: started
branch: feature/167
cost: {usd: 0.0, tokens_in: 0, tokens_out: 0, model: "deepseek-v4-flash"}
notes: "T14 acceptance: (1) no core package imports a concrete extension — currently satisfied by the bootstrap graph; (2) the architecture import test catches any such import — rule/test delivered by E00-S01-T04 (out of scope to modify). Lock-in test will assert the architecture import test is part of the root suite, passes on the real graph, and fails on an injected core->extension import."
```yaml agent: implementer run_id: implementer-167-88d03602 issue: 167 phase: started branch: feature/167 cost: {usd: 0.0, tokens_in: 0, tokens_out: 0, model: "deepseek-v4-flash"} notes: "T14 acceptance: (1) no core package imports a concrete extension — currently satisfied by the bootstrap graph; (2) the architecture import test catches any such import — rule/test delivered by E00-S01-T04 (out of scope to modify). Lock-in test will assert the architecture import test is part of the root suite, passes on the real graph, and fails on an injected core->extension import." ```
Member
agent: reviewer
verdict: approve
```yaml agent: reviewer verdict: approve ```
bot-dispatcher added
status
review
and removed
status
in-progress
loop
1
kind
task
labels 2026-08-28 23:25:55 +00:00
Member
agent: implementer
run_id: implementer-167-88d03602
issue: 167
phase: complete
pr: 381
branch: feature/167
evidence:
  - "http://gitea:3000/Fabrika/PersonalBlog/actions/runs/59 — CI green on PR head 27851fc (Frozen lockfile install: checkout/Node 24/corepack enable/frozen install/workspace groups, all success)"
  - "http://gitea:3000/Fabrika/PersonalBlog/pulls/381 — PR open with criterion->test table in description"
  - "http://gitea:3000/Fabrika/PersonalBlog/src/branch/feature/167/tests/no-core-extension-imports.test.mjs — lock-in suite (4/4 pass; full root suite 51/51 on Node 24 v24.20.0)"
cost: {usd: 0.0, tokens_in: 0, tokens_out: 0, model: "deepseek-v4-flash"}
notes: "Added tests/no-core-extension-imports.test.mjs locking in both criteria: (1) real-graph probe runs the architecture import test and asserts exit 0; (2) mutation probe injects a core->extension import into a temp workspace copy and asserts the architecture import test fails with a per-file/line 'packages -> extensions' violation report, plus root-suite membership and rule-edge declaration checks. T04 rule/test (dependency-boundaries.json, tests/architecture-import.test.mjs) and T13 frozen-install scope untouched; no manifest/lockfile/CI changes."
```yaml agent: implementer run_id: implementer-167-88d03602 issue: 167 phase: complete pr: 381 branch: feature/167 evidence: - "http://gitea:3000/Fabrika/PersonalBlog/actions/runs/59 — CI green on PR head 27851fc (Frozen lockfile install: checkout/Node 24/corepack enable/frozen install/workspace groups, all success)" - "http://gitea:3000/Fabrika/PersonalBlog/pulls/381 — PR open with criterion->test table in description" - "http://gitea:3000/Fabrika/PersonalBlog/src/branch/feature/167/tests/no-core-extension-imports.test.mjs — lock-in suite (4/4 pass; full root suite 51/51 on Node 24 v24.20.0)" cost: {usd: 0.0, tokens_in: 0, tokens_out: 0, model: "deepseek-v4-flash"} notes: "Added tests/no-core-extension-imports.test.mjs locking in both criteria: (1) real-graph probe runs the architecture import test and asserts exit 0; (2) mutation probe injects a core->extension import into a temp workspace copy and asserts the architecture import test fails with a per-file/line 'packages -> extensions' violation report, plus root-suite membership and rule-edge declaration checks. T04 rule/test (dependency-boundaries.json, tests/architecture-import.test.mjs) and T13 frozen-install scope untouched; no manifest/lockfile/CI changes." ```
kpcto closed this issue 2026-08-28 23:26:51 +00:00
kpcto added
kind
task
status
done
and removed
status
review
labels 2026-08-28 23:26:51 +00:00
Member
agent: tester
issue: 167
pr: 381
phase: started
plan: |
  Independently probe PR #381 ([E00-S01-T14]) against the two acceptance criteria:
    1. no core package imports a concrete extension
    2. the architecture import test catches any such import
  Method:
    - read PR description, diff, and changed files (1 file: tests/no-core-extension-imports.test.mjs)
    - clone main (merge commit 2b293e2) and inspect packages/, dependency-boundaries.json,
      tests/architecture-import.test.mjs, root package.json scripts.test
    - run tests/architecture-import.test.mjs and tests/no-core-extension-imports.test.mjs locally
    - grep packages/* for core -> extension imports
    - independent mutation probe: inject a core -> extension import into a scratch copy
      (NOT editing the implementer's tests) and confirm the architecture test fails
constraints:
  - never edit the implementer's tests in the same PR
```yaml agent: tester issue: 167 pr: 381 phase: started plan: | Independently probe PR #381 ([E00-S01-T14]) against the two acceptance criteria: 1. no core package imports a concrete extension 2. the architecture import test catches any such import Method: - read PR description, diff, and changed files (1 file: tests/no-core-extension-imports.test.mjs) - clone main (merge commit 2b293e2) and inspect packages/, dependency-boundaries.json, tests/architecture-import.test.mjs, root package.json scripts.test - run tests/architecture-import.test.mjs and tests/no-core-extension-imports.test.mjs locally - grep packages/* for core -> extension imports - independent mutation probe: inject a core -> extension import into a scratch copy (NOT editing the implementer's tests) and confirm the architecture test fails constraints: - never edit the implementer's tests in the same PR ```
Member
agent: tester
issue: 167
pr: 381
phase: complete
verdict: pass
evidence:
  - "Criterion 1 (no core package imports a concrete extension): grep over packages/* is clean and packages/core/src/index.ts has zero import/require/from statements; node --test tests/architecture-import.test.mjs -> 10/10 pass (exit 0), including 'the architecture import test passes on the current compliant workspace graph'."
  - "Criterion 2 (the architecture import test catches any such import): independent mutation probe — in a scratch copy under /tmp (implementer's tests untouched), injected `import { register } from '@personal-blog/example-extension';` into packages/core/src/index.ts -> architecture test exits 1 and reports `packages/core/src/index.ts:1 imports @personal-blog/example-extension (@personal-blog/example-extension [extensions]) — violates packages -> extensions`."
  - "Lock-in suite added by the PR: node --test tests/no-core-extension-imports.test.mjs -> 4/4 pass (real-graph probe, mutation probe, probe sanity, and root-suite wiring/rule-edge assertions)."
  - "Root scripts.test = `node --test \"tests/**/*.test.mjs\"` covers both suites, so a violation fails `pnpm test`; dependency-boundaries.json forbids packages -> extensions."
  - "CI green: http://gitea:3000/Fabrika/PersonalBlog/actions/runs/59 (PR head 27851fc, Frozen lockfile install: all steps success) and http://gitea:3000/Fabrika/PersonalBlog/actions/runs/60 (merge to main 2b293e2, success)."
notes: |
  - Probe ran in a scratch copy; no edit to the implementer's tests or any PR files.
  - Runtime: local sandbox used Node v22.23.2 (repo pins Node 24.x for installs); the node:test suites are Node-version-agnostic and pass identically.
  - Non-blocking observation: .gitea/workflows/ci.yml runs only the frozen-lockfile install job; `pnpm test` is not a CI step yet. The boundary is enforced via the root test script, which I verified green locally. Out of T14 scope.
```yaml agent: tester issue: 167 pr: 381 phase: complete verdict: pass evidence: - "Criterion 1 (no core package imports a concrete extension): grep over packages/* is clean and packages/core/src/index.ts has zero import/require/from statements; node --test tests/architecture-import.test.mjs -> 10/10 pass (exit 0), including 'the architecture import test passes on the current compliant workspace graph'." - "Criterion 2 (the architecture import test catches any such import): independent mutation probe — in a scratch copy under /tmp (implementer's tests untouched), injected `import { register } from '@personal-blog/example-extension';` into packages/core/src/index.ts -> architecture test exits 1 and reports `packages/core/src/index.ts:1 imports @personal-blog/example-extension (@personal-blog/example-extension [extensions]) — violates packages -> extensions`." - "Lock-in suite added by the PR: node --test tests/no-core-extension-imports.test.mjs -> 4/4 pass (real-graph probe, mutation probe, probe sanity, and root-suite wiring/rule-edge assertions)." - "Root scripts.test = `node --test \"tests/**/*.test.mjs\"` covers both suites, so a violation fails `pnpm test`; dependency-boundaries.json forbids packages -> extensions." - "CI green: http://gitea:3000/Fabrika/PersonalBlog/actions/runs/59 (PR head 27851fc, Frozen lockfile install: all steps success) and http://gitea:3000/Fabrika/PersonalBlog/actions/runs/60 (merge to main 2b293e2, success)." notes: | - Probe ran in a scratch copy; no edit to the implementer's tests or any PR files. - Runtime: local sandbox used Node v22.23.2 (repo pins Node 24.x for installs); the node:test suites are Node-version-agnostic and pass identically. - Non-blocking observation: .gitea/workflows/ci.yml runs only the frozen-lockfile install job; `pnpm test` is not a CI step yet. The boundary is enforced via the root test script, which I verified green locally. Out of T14 scope. ```
Sign in to join this conversation.