@anhth2/spec-driven-dev-plugin 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commands/debug.md +43 -8
- package/commands/define-product.md +43 -8
- package/commands/dev-gen-test.md +44 -9
- package/commands/dev-gen-test.tmpl +1 -1
- package/commands/dev-run-test.md +48 -10
- package/commands/dev-run-test.tmpl +5 -2
- package/commands/dev-smoke-test.md +43 -8
- package/commands/fix-bug.md +79 -14
- package/commands/fix-bug.tmpl +36 -6
- package/commands/generate-bdd.md +49 -10
- package/commands/generate-bdd.tmpl +6 -2
- package/commands/generate-code.md +44 -9
- package/commands/generate-code.tmpl +1 -1
- package/commands/generate-design-spec.md +43 -8
- package/commands/generate-prd.md +43 -8
- package/commands/generate-spec-manifest.md +43 -8
- package/commands/generate-tech-docs.md +43 -8
- package/commands/learn.md +43 -8
- package/commands/propose-scenario.md +74 -19
- package/commands/propose-scenario.tmpl +31 -11
- package/commands/qc-analyze.md +534 -0
- package/commands/qc-analyze.tmpl +86 -0
- package/commands/qc-design-test.md +515 -0
- package/commands/qc-design-test.tmpl +67 -0
- package/commands/qc-plan.md +497 -0
- package/commands/qc-plan.tmpl +49 -0
- package/commands/qc-report.md +508 -0
- package/commands/qc-report.tmpl +60 -0
- package/commands/qc-review.md +501 -0
- package/commands/qc-review.tmpl +53 -0
- package/commands/qc-run-test.md +549 -0
- package/commands/qc-run-test.tmpl +83 -0
- package/commands/refine-prd.md +43 -8
- package/commands/report-bug.md +59 -10
- package/commands/report-bug.tmpl +16 -2
- package/commands/review-code.md +43 -8
- package/commands/review-context.md +43 -8
- package/commands/review-tech-docs.md +43 -8
- package/commands/setup-ai-first.md +7 -0
- package/commands/sync.md +19 -9
- package/commands/sync.tmpl +12 -9
- package/commands/update-framework.md +7 -0
- package/commands/validate-traces.md +67 -12
- package/commands/validate-traces.tmpl +24 -4
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +43 -8
- package/core/commands/define-product.md +43 -8
- package/core/commands/dev-gen-test.md +44 -9
- package/core/commands/dev-run-test.md +48 -10
- package/core/commands/dev-smoke-test.md +43 -8
- package/core/commands/fix-bug.md +79 -14
- package/core/commands/generate-bdd.md +49 -10
- package/core/commands/generate-code.md +44 -9
- package/core/commands/generate-design-spec.md +43 -8
- package/core/commands/generate-prd.md +43 -8
- package/core/commands/generate-spec-manifest.md +43 -8
- package/core/commands/generate-tech-docs.md +43 -8
- package/core/commands/learn.md +43 -8
- package/core/commands/propose-scenario.md +74 -19
- package/core/commands/qc-analyze.md +534 -0
- package/core/commands/qc-design-test.md +515 -0
- package/core/commands/qc-plan.md +497 -0
- package/core/commands/qc-report.md +508 -0
- package/core/commands/qc-review.md +501 -0
- package/core/commands/qc-run-test.md +549 -0
- package/core/commands/refine-prd.md +43 -8
- package/core/commands/report-bug.md +59 -10
- package/core/commands/review-code.md +43 -8
- package/core/commands/review-context.md +43 -8
- package/core/commands/review-tech-docs.md +43 -8
- package/core/commands/setup-ai-first.md +7 -0
- package/core/commands/sync.md +19 -9
- package/core/commands/update-framework.md +7 -0
- package/core/commands/validate-traces.md +67 -12
- package/core/modules/qc-playwright/stack-profile.yaml +65 -0
- package/core/skills/code/SKILL.md +50 -8
- package/core/skills/debug/SKILL.md +57 -8
- package/core/skills/design-spec/SKILL.md +43 -8
- package/core/skills/discovery/SKILL.md +43 -8
- package/core/skills/prd/SKILL.md +14 -0
- package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/core/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
- package/core/skills/qc/qa-analyst/business-rules.md +59 -0
- package/core/skills/qc/qa-analyst/data-flow.md +64 -0
- package/core/skills/qc/qa-analyst/spec-breakdown.md +61 -0
- package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/core/skills/qc/qa-designer/functional/api.md +45 -0
- package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/core/skills/qc/qa-designer/integration/api.md +42 -0
- package/core/skills/qc/qa-designer/integration/db.md +39 -0
- package/core/skills/qc/qa-designer/integration/gui.md +40 -0
- package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/core/skills/qc/qa-designer/non-functional.md +40 -0
- package/core/skills/qc/qa-planner/test-plan.md +120 -0
- package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/core/skills/qc/qa-runner/e2e.md +49 -0
- package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/core/skills/qc/qa-runner/functional/api.md +35 -0
- package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/core/skills/qc/qa-runner/integration.md +47 -0
- package/core/skills/qc/qa-runner/non-functional.md +49 -0
- package/core/skills/qc/qa-runner/report/report.md +37 -0
- package/core/skills/setup-ai-first/SKILL.md +7 -0
- package/core/skills/spec/SKILL.md +14 -0
- package/core/skills/test/SKILL.md +93 -16
- package/core/steps/context-loader.md +36 -8
- package/core/steps/report-footer.md +7 -0
- package/core/templates/project-context.yaml +27 -1
- package/docs/01-getting-started/README.md +19 -0
- package/docs/01-getting-started/core-concepts.md +102 -0
- package/docs/01-getting-started/installation.md +156 -0
- package/docs/01-getting-started/quickstart.md +85 -0
- package/docs/02-guides/README.md +27 -0
- package/docs/02-guides/developer/README.md +46 -0
- package/docs/02-guides/developer/bdd-and-trace.md +123 -0
- package/docs/02-guides/developer/commands.md +76 -0
- package/docs/02-guides/developer/pr-checklist.md +15 -0
- package/docs/02-guides/developer/scenarios.md +448 -0
- package/docs/02-guides/developer/workflow.md +61 -0
- package/docs/02-guides/product-owner/README.md +77 -0
- package/docs/02-guides/product-owner/commands.md +30 -0
- package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
- package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
- package/docs/02-guides/product-owner/scenarios.md +357 -0
- package/docs/02-guides/qc-automation.md +157 -0
- package/docs/02-guides/tester/README.md +74 -0
- package/docs/02-guides/tester/bug-reporting.md +117 -0
- package/docs/02-guides/tester/reading-specs.md +79 -0
- package/docs/02-guides/tester/scenarios.md +186 -0
- package/docs/02-guides/tester/spec-manifest.md +124 -0
- package/docs/02-guides/tester/test-checklist.md +31 -0
- package/docs/02-guides/tester/workflow.md +80 -0
- package/docs/03-concepts/README.md +19 -0
- package/docs/03-concepts/architecture.md +245 -0
- package/docs/03-concepts/pipeline.md +262 -0
- package/docs/03-concepts/traceability.md +149 -0
- package/docs/04-operations/README.md +33 -0
- package/docs/04-operations/bug-flow.md +362 -0
- package/docs/04-operations/publishing.md +137 -0
- package/docs/04-operations/sync-and-update.md +365 -0
- package/docs/05-reference/README.md +29 -0
- package/docs/05-reference/commands.md +229 -0
- package/docs/05-reference/modules.md +110 -0
- package/docs/05-reference/trace-schema.md +152 -0
- package/docs/README.md +51 -0
- package/modules/qc-playwright/stack-profile.yaml +65 -0
- package/package.json +2 -2
- package/skills/code/SKILL.md +50 -8
- package/skills/debug/SKILL.md +57 -8
- package/skills/design-spec/SKILL.md +43 -8
- package/skills/discovery/SKILL.md +43 -8
- package/skills/prd/SKILL.md +14 -0
- package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
- package/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
- package/skills/qc/qa-analyst/business-rules.md +59 -0
- package/skills/qc/qa-analyst/data-flow.md +64 -0
- package/skills/qc/qa-analyst/spec-breakdown.md +61 -0
- package/skills/qc/qa-designer/e2e/journey.md +41 -0
- package/skills/qc/qa-designer/exploratory/charter.md +68 -0
- package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
- package/skills/qc/qa-designer/functional/api.md +45 -0
- package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
- package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
- package/skills/qc/qa-designer/integration/api.md +42 -0
- package/skills/qc/qa-designer/integration/db.md +39 -0
- package/skills/qc/qa-designer/integration/gui.md +40 -0
- package/skills/qc/qa-designer/integration/kafka.md +40 -0
- package/skills/qc/qa-designer/non-functional.md +40 -0
- package/skills/qc/qa-planner/test-plan.md +120 -0
- package/skills/qc/qa-reviewer/script/e2e.md +87 -0
- package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
- package/skills/qc/qa-reviewer/script/functional.md +101 -0
- package/skills/qc/qa-reviewer/script/integration.md +91 -0
- package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
- package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
- package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
- package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
- package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
- package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
- package/skills/qc/qa-runner/e2e.md +49 -0
- package/skills/qc/qa-runner/exploratory/session.md +36 -0
- package/skills/qc/qa-runner/functional/api.md +35 -0
- package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
- package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
- package/skills/qc/qa-runner/integration.md +47 -0
- package/skills/qc/qa-runner/non-functional.md +49 -0
- package/skills/qc/qa-runner/report/report.md +37 -0
- package/skills/setup-ai-first/SKILL.md +7 -0
- package/skills/spec/SKILL.md +14 -0
- package/skills/test/SKILL.md +93 -16
- package/steps/context-loader.md +36 -8
- package/steps/report-footer.md +7 -0
- package/templates/project-context.yaml +27 -1
- package/ARCHITECTURE.md +0 -258
package/commands/debug.md
CHANGED
|
@@ -128,6 +128,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
128
128
|
- `paths.specs_dir` → BDD specs root
|
|
129
129
|
- `paths.prd_dir` → PRD documents root
|
|
130
130
|
- `paths.refinement_dir` → findings/review output dir
|
|
131
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
132
|
+
- `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
|
|
131
133
|
- `paths.product_definitions_dir` → product definitions root
|
|
132
134
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
133
135
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -140,6 +142,8 @@ If `paths` section is absent, use these defaults:
|
|
|
140
142
|
- `specs_dir` = `specs/bdd`
|
|
141
143
|
- `prd_dir` = `specs/prd`
|
|
142
144
|
- `refinement_dir` = `.agent/review`
|
|
145
|
+
- `qc_dir` = `docs`
|
|
146
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
143
147
|
- `product_definitions_dir` = `specs/product-definition`
|
|
144
148
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
145
149
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -184,6 +188,7 @@ If `services` section is present:
|
|
|
184
188
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
185
189
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
186
190
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
191
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
187
192
|
|
|
188
193
|
> **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
|
|
189
194
|
|
|
@@ -224,19 +229,41 @@ If the file does not exist → skip silently.
|
|
|
224
229
|
|
|
225
230
|
---
|
|
226
231
|
|
|
227
|
-
## Step 3 — [CRITICAL] Load CLAUDE.md
|
|
232
|
+
## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
|
|
228
233
|
|
|
229
234
|
*This is the highest-priority context — it defines HOW to write code and documents for this project.*
|
|
230
235
|
|
|
231
|
-
|
|
236
|
+
CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
|
|
237
|
+
architecture/coding standards compose correctly. The agent always sits at the umbrella
|
|
238
|
+
root, but the implementation code lives in a service submodule with its OWN stack,
|
|
239
|
+
architecture, and conventions — so the service's CLAUDE.md must win for code generation.
|
|
240
|
+
|
|
241
|
+
**Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
|
|
242
|
+
Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
|
|
243
|
+
whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
|
|
244
|
+
single-service mode) the project's only architecture + coding standards.
|
|
245
|
+
|
|
246
|
+
**Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
|
|
247
|
+
*Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
|
|
248
|
+
Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
|
|
249
|
+
the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
|
|
250
|
+
Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
|
|
251
|
+
coding standards, and error handling. Layer-1 values that the service does not redefine
|
|
252
|
+
(e.g. git conventions, banned patterns shared org-wide) remain in effect.
|
|
253
|
+
|
|
254
|
+
From the **merged** result, extract and store:
|
|
232
255
|
|
|
233
256
|
- **§1 Project Overview** → project name, language, framework, build/test commands, domains
|
|
234
|
-
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
|
|
235
|
-
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
|
|
236
|
-
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
|
|
237
|
-
- **§7 Git Conventions** → branch naming pattern, commit message format
|
|
257
|
+
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
|
|
258
|
+
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
|
|
259
|
+
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
|
|
260
|
+
- **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
|
|
238
261
|
|
|
239
|
-
|
|
262
|
+
**Resolution rules:**
|
|
263
|
+
- If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
|
|
264
|
+
- If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
|
|
265
|
+
- If `service_root` is set but `{service_root}/CLAUDE.md` is **missing** → fall back to root CLAUDE.md and flag ⚠️ in the Step 7 recap (the service has no architecture/coding-standards definition — code generation will use umbrella defaults, which may be the wrong stack).
|
|
266
|
+
- If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
|
|
240
267
|
|
|
241
268
|
---
|
|
242
269
|
|
|
@@ -336,7 +363,8 @@ Output exactly this block:
|
|
|
336
363
|
[CTX LOADED]
|
|
337
364
|
Stack : {language} / {framework} / {database}
|
|
338
365
|
Platform : {active_module} ({platform_type})
|
|
339
|
-
Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
366
|
+
Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
367
|
+
CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
|
|
340
368
|
Ticket : {ticket_prefix}-
|
|
341
369
|
Dict : {loaded — N canonical terms, M banned terms | missing}
|
|
342
370
|
Entities : {loaded — EntityA, EntityB, EntityC | missing}
|
|
@@ -604,6 +632,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
604
632
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
605
633
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
606
634
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
635
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
636
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
637
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
638
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
639
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
640
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
641
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
607
642
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
608
643
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
609
644
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
|
@@ -125,6 +125,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
125
125
|
- `paths.specs_dir` → BDD specs root
|
|
126
126
|
- `paths.prd_dir` → PRD documents root
|
|
127
127
|
- `paths.refinement_dir` → findings/review output dir
|
|
128
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
129
|
+
- `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
|
|
128
130
|
- `paths.product_definitions_dir` → product definitions root
|
|
129
131
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
130
132
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -137,6 +139,8 @@ If `paths` section is absent, use these defaults:
|
|
|
137
139
|
- `specs_dir` = `specs/bdd`
|
|
138
140
|
- `prd_dir` = `specs/prd`
|
|
139
141
|
- `refinement_dir` = `.agent/review`
|
|
142
|
+
- `qc_dir` = `docs`
|
|
143
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
140
144
|
- `product_definitions_dir` = `specs/product-definition`
|
|
141
145
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
142
146
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -181,6 +185,7 @@ If `services` section is present:
|
|
|
181
185
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
182
186
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
183
187
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
188
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
184
189
|
|
|
185
190
|
> **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
|
|
186
191
|
|
|
@@ -221,19 +226,41 @@ If the file does not exist → skip silently.
|
|
|
221
226
|
|
|
222
227
|
---
|
|
223
228
|
|
|
224
|
-
## Step 3 — [CRITICAL] Load CLAUDE.md
|
|
229
|
+
## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
|
|
225
230
|
|
|
226
231
|
*This is the highest-priority context — it defines HOW to write code and documents for this project.*
|
|
227
232
|
|
|
228
|
-
|
|
233
|
+
CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
|
|
234
|
+
architecture/coding standards compose correctly. The agent always sits at the umbrella
|
|
235
|
+
root, but the implementation code lives in a service submodule with its OWN stack,
|
|
236
|
+
architecture, and conventions — so the service's CLAUDE.md must win for code generation.
|
|
237
|
+
|
|
238
|
+
**Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
|
|
239
|
+
Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
|
|
240
|
+
whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
|
|
241
|
+
single-service mode) the project's only architecture + coding standards.
|
|
242
|
+
|
|
243
|
+
**Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
|
|
244
|
+
*Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
|
|
245
|
+
Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
|
|
246
|
+
the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
|
|
247
|
+
Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
|
|
248
|
+
coding standards, and error handling. Layer-1 values that the service does not redefine
|
|
249
|
+
(e.g. git conventions, banned patterns shared org-wide) remain in effect.
|
|
250
|
+
|
|
251
|
+
From the **merged** result, extract and store:
|
|
229
252
|
|
|
230
253
|
- **§1 Project Overview** → project name, language, framework, build/test commands, domains
|
|
231
|
-
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
|
|
232
|
-
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
|
|
233
|
-
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
|
|
234
|
-
- **§7 Git Conventions** → branch naming pattern, commit message format
|
|
254
|
+
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
|
|
255
|
+
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
|
|
256
|
+
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
|
|
257
|
+
- **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
|
|
235
258
|
|
|
236
|
-
|
|
259
|
+
**Resolution rules:**
|
|
260
|
+
- If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
|
|
261
|
+
- If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
|
|
262
|
+
- If `service_root` is set but `{service_root}/CLAUDE.md` is **missing** → fall back to root CLAUDE.md and flag ⚠️ in the Step 7 recap (the service has no architecture/coding-standards definition — code generation will use umbrella defaults, which may be the wrong stack).
|
|
263
|
+
- If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
|
|
237
264
|
|
|
238
265
|
---
|
|
239
266
|
|
|
@@ -333,7 +360,8 @@ Output exactly this block:
|
|
|
333
360
|
[CTX LOADED]
|
|
334
361
|
Stack : {language} / {framework} / {database}
|
|
335
362
|
Platform : {active_module} ({platform_type})
|
|
336
|
-
Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
363
|
+
Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
364
|
+
CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
|
|
337
365
|
Ticket : {ticket_prefix}-
|
|
338
366
|
Dict : {loaded — N canonical terms, M banned terms | missing}
|
|
339
367
|
Entities : {loaded — EntityA, EntityB, EntityC | missing}
|
|
@@ -538,6 +566,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
538
566
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
539
567
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
540
568
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
569
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
570
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
571
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
572
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
573
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
574
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
575
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
541
576
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
542
577
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
543
578
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
package/commands/dev-gen-test.md
CHANGED
|
@@ -131,6 +131,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
131
131
|
- `paths.specs_dir` → BDD specs root
|
|
132
132
|
- `paths.prd_dir` → PRD documents root
|
|
133
133
|
- `paths.refinement_dir` → findings/review output dir
|
|
134
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
135
|
+
- `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
|
|
134
136
|
- `paths.product_definitions_dir` → product definitions root
|
|
135
137
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
136
138
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -143,6 +145,8 @@ If `paths` section is absent, use these defaults:
|
|
|
143
145
|
- `specs_dir` = `specs/bdd`
|
|
144
146
|
- `prd_dir` = `specs/prd`
|
|
145
147
|
- `refinement_dir` = `.agent/review`
|
|
148
|
+
- `qc_dir` = `docs`
|
|
149
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
146
150
|
- `product_definitions_dir` = `specs/product-definition`
|
|
147
151
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
148
152
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -187,6 +191,7 @@ If `services` section is present:
|
|
|
187
191
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
188
192
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
189
193
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
194
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
190
195
|
|
|
191
196
|
> **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
|
|
192
197
|
|
|
@@ -227,19 +232,41 @@ If the file does not exist → skip silently.
|
|
|
227
232
|
|
|
228
233
|
---
|
|
229
234
|
|
|
230
|
-
## Step 3 — [CRITICAL] Load CLAUDE.md
|
|
235
|
+
## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
|
|
231
236
|
|
|
232
237
|
*This is the highest-priority context — it defines HOW to write code and documents for this project.*
|
|
233
238
|
|
|
234
|
-
|
|
239
|
+
CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
|
|
240
|
+
architecture/coding standards compose correctly. The agent always sits at the umbrella
|
|
241
|
+
root, but the implementation code lives in a service submodule with its OWN stack,
|
|
242
|
+
architecture, and conventions — so the service's CLAUDE.md must win for code generation.
|
|
243
|
+
|
|
244
|
+
**Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
|
|
245
|
+
Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
|
|
246
|
+
whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
|
|
247
|
+
single-service mode) the project's only architecture + coding standards.
|
|
248
|
+
|
|
249
|
+
**Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
|
|
250
|
+
*Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
|
|
251
|
+
Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
|
|
252
|
+
the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
|
|
253
|
+
Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
|
|
254
|
+
coding standards, and error handling. Layer-1 values that the service does not redefine
|
|
255
|
+
(e.g. git conventions, banned patterns shared org-wide) remain in effect.
|
|
256
|
+
|
|
257
|
+
From the **merged** result, extract and store:
|
|
235
258
|
|
|
236
259
|
- **§1 Project Overview** → project name, language, framework, build/test commands, domains
|
|
237
|
-
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
|
|
238
|
-
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
|
|
239
|
-
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
|
|
240
|
-
- **§7 Git Conventions** → branch naming pattern, commit message format
|
|
260
|
+
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
|
|
261
|
+
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
|
|
262
|
+
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
|
|
263
|
+
- **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
|
|
241
264
|
|
|
242
|
-
|
|
265
|
+
**Resolution rules:**
|
|
266
|
+
- If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
|
|
267
|
+
- If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
|
|
268
|
+
- If `service_root` is set but `{service_root}/CLAUDE.md` is **missing** → fall back to root CLAUDE.md and flag ⚠️ in the Step 7 recap (the service has no architecture/coding-standards definition — code generation will use umbrella defaults, which may be the wrong stack).
|
|
269
|
+
- If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
|
|
243
270
|
|
|
244
271
|
---
|
|
245
272
|
|
|
@@ -339,7 +366,8 @@ Output exactly this block:
|
|
|
339
366
|
[CTX LOADED]
|
|
340
367
|
Stack : {language} / {framework} / {database}
|
|
341
368
|
Platform : {active_module} ({platform_type})
|
|
342
|
-
Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
369
|
+
Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
370
|
+
CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
|
|
343
371
|
Ticket : {ticket_prefix}-
|
|
344
372
|
Dict : {loaded — N canonical terms, M banned terms | missing}
|
|
345
373
|
Entities : {loaded — EntityA, EntityB, EntityC | missing}
|
|
@@ -819,7 +847,7 @@ After generating all test files, update `{paths.trace_dir}/{UC-ID}.tsv` — for
|
|
|
819
847
|
| `dev_selftest` | `not_run` (tests now exist but have not been executed — `/dev-run-test` sets pass/fail) |
|
|
820
848
|
| `last_updated` | today `YYYY-MM-DD` |
|
|
821
849
|
|
|
822
|
-
Leave all other columns unchanged (including `dev_selftest_at`, which `/dev-run-test` owns).
|
|
850
|
+
Leave all other columns unchanged (including `dev_selftest_at`, which `/dev-run-test` owns, and `qc_status`/`qc_run_at`, which `/qc-run-test` owns).
|
|
823
851
|
|
|
824
852
|
---
|
|
825
853
|
|
|
@@ -884,6 +912,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
884
912
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
885
913
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
886
914
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
915
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
916
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
917
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
918
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
919
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
920
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
921
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
887
922
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
888
923
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
889
924
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
|
@@ -466,7 +466,7 @@ After generating all test files, update `{paths.trace_dir}/{UC-ID}.tsv` — for
|
|
|
466
466
|
| `dev_selftest` | `not_run` (tests now exist but have not been executed — `/dev-run-test` sets pass/fail) |
|
|
467
467
|
| `last_updated` | today `YYYY-MM-DD` |
|
|
468
468
|
|
|
469
|
-
Leave all other columns unchanged (including `dev_selftest_at`, which `/dev-run-test` owns).
|
|
469
|
+
Leave all other columns unchanged (including `dev_selftest_at`, which `/dev-run-test` owns, and `qc_status`/`qc_run_at`, which `/qc-run-test` owns).
|
|
470
470
|
|
|
471
471
|
---
|
|
472
472
|
|
package/commands/dev-run-test.md
CHANGED
|
@@ -131,6 +131,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
131
131
|
- `paths.specs_dir` → BDD specs root
|
|
132
132
|
- `paths.prd_dir` → PRD documents root
|
|
133
133
|
- `paths.refinement_dir` → findings/review output dir
|
|
134
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
135
|
+
- `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
|
|
134
136
|
- `paths.product_definitions_dir` → product definitions root
|
|
135
137
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
136
138
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -143,6 +145,8 @@ If `paths` section is absent, use these defaults:
|
|
|
143
145
|
- `specs_dir` = `specs/bdd`
|
|
144
146
|
- `prd_dir` = `specs/prd`
|
|
145
147
|
- `refinement_dir` = `.agent/review`
|
|
148
|
+
- `qc_dir` = `docs`
|
|
149
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
146
150
|
- `product_definitions_dir` = `specs/product-definition`
|
|
147
151
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
148
152
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -187,6 +191,7 @@ If `services` section is present:
|
|
|
187
191
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
188
192
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
189
193
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
194
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
190
195
|
|
|
191
196
|
> **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
|
|
192
197
|
|
|
@@ -227,19 +232,41 @@ If the file does not exist → skip silently.
|
|
|
227
232
|
|
|
228
233
|
---
|
|
229
234
|
|
|
230
|
-
## Step 3 — [CRITICAL] Load CLAUDE.md
|
|
235
|
+
## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
|
|
231
236
|
|
|
232
237
|
*This is the highest-priority context — it defines HOW to write code and documents for this project.*
|
|
233
238
|
|
|
234
|
-
|
|
239
|
+
CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
|
|
240
|
+
architecture/coding standards compose correctly. The agent always sits at the umbrella
|
|
241
|
+
root, but the implementation code lives in a service submodule with its OWN stack,
|
|
242
|
+
architecture, and conventions — so the service's CLAUDE.md must win for code generation.
|
|
243
|
+
|
|
244
|
+
**Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
|
|
245
|
+
Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
|
|
246
|
+
whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
|
|
247
|
+
single-service mode) the project's only architecture + coding standards.
|
|
248
|
+
|
|
249
|
+
**Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
|
|
250
|
+
*Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
|
|
251
|
+
Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
|
|
252
|
+
the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
|
|
253
|
+
Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
|
|
254
|
+
coding standards, and error handling. Layer-1 values that the service does not redefine
|
|
255
|
+
(e.g. git conventions, banned patterns shared org-wide) remain in effect.
|
|
256
|
+
|
|
257
|
+
From the **merged** result, extract and store:
|
|
235
258
|
|
|
236
259
|
- **§1 Project Overview** → project name, language, framework, build/test commands, domains
|
|
237
|
-
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
|
|
238
|
-
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
|
|
239
|
-
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
|
|
240
|
-
- **§7 Git Conventions** → branch naming pattern, commit message format
|
|
260
|
+
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
|
|
261
|
+
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
|
|
262
|
+
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
|
|
263
|
+
- **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
|
|
241
264
|
|
|
242
|
-
|
|
265
|
+
**Resolution rules:**
|
|
266
|
+
- If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
|
|
267
|
+
- If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
|
|
268
|
+
- If `service_root` is set but `{service_root}/CLAUDE.md` is **missing** → fall back to root CLAUDE.md and flag ⚠️ in the Step 7 recap (the service has no architecture/coding-standards definition — code generation will use umbrella defaults, which may be the wrong stack).
|
|
269
|
+
- If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
|
|
243
270
|
|
|
244
271
|
---
|
|
245
272
|
|
|
@@ -339,7 +366,8 @@ Output exactly this block:
|
|
|
339
366
|
[CTX LOADED]
|
|
340
367
|
Stack : {language} / {framework} / {database}
|
|
341
368
|
Platform : {active_module} ({platform_type})
|
|
342
|
-
Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
369
|
+
Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
370
|
+
CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
|
|
343
371
|
Ticket : {ticket_prefix}-
|
|
344
372
|
Dict : {loaded — N canonical terms, M banned terms | missing}
|
|
345
373
|
Entities : {loaded — EntityA, EntityB, EntityC | missing}
|
|
@@ -543,8 +571,11 @@ test's `@trace.verifies={UC-ID}-SC{N}` tag):
|
|
|
543
571
|
| `dev_selftest` | `pass` if all tests for this SC passed · `fail` if any failed · `not_run` if its tests were skipped/absent |
|
|
544
572
|
| `dev_selftest_at` | today `YYYY-MM-DD` |
|
|
545
573
|
|
|
546
|
-
Leave all other columns unchanged
|
|
547
|
-
(
|
|
574
|
+
Leave all other columns unchanged — in particular **never** touch `qc_status`/`qc_run_at`
|
|
575
|
+
(the official QC automation result, owned by `/qc-run-test`). `dev_selftest` (dev smoke)
|
|
576
|
+
and `qc_status` (official QC) are separate
|
|
577
|
+
signals. `dev_selftest`/`dev_selftest_at` are also orthogonal to `status`
|
|
578
|
+
(OK/GAP/DRIFT/UNTRACKED): `status` tracks *coverage*, `dev_selftest` tracks the dev's latest *run result*.
|
|
548
579
|
|
|
549
580
|
## Refresh Panel Mirror
|
|
550
581
|
# Refresh Living Docs panel mirror *(local, umbrella mode)*
|
|
@@ -605,6 +636,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
605
636
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
606
637
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
607
638
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
639
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
640
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
641
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
642
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
643
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
644
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
645
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
608
646
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
609
647
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
610
648
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
|
@@ -190,8 +190,11 @@ test's `@trace.verifies={UC-ID}-SC{N}` tag):
|
|
|
190
190
|
| `dev_selftest` | `pass` if all tests for this SC passed · `fail` if any failed · `not_run` if its tests were skipped/absent |
|
|
191
191
|
| `dev_selftest_at` | today `YYYY-MM-DD` |
|
|
192
192
|
|
|
193
|
-
Leave all other columns unchanged
|
|
194
|
-
(
|
|
193
|
+
Leave all other columns unchanged — in particular **never** touch `qc_status`/`qc_run_at`
|
|
194
|
+
(the official QC automation result, owned by `/qc-run-test`). `dev_selftest` (dev smoke)
|
|
195
|
+
and `qc_status` (official QC) are separate
|
|
196
|
+
signals. `dev_selftest`/`dev_selftest_at` are also orthogonal to `status`
|
|
197
|
+
(OK/GAP/DRIFT/UNTRACKED): `status` tracks *coverage*, `dev_selftest` tracks the dev's latest *run result*.
|
|
195
198
|
|
|
196
199
|
## Refresh Panel Mirror
|
|
197
200
|
{{include:steps/trace-mirror.md}}
|
|
@@ -127,6 +127,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
127
127
|
- `paths.specs_dir` → BDD specs root
|
|
128
128
|
- `paths.prd_dir` → PRD documents root
|
|
129
129
|
- `paths.refinement_dir` → findings/review output dir
|
|
130
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
131
|
+
- `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
|
|
130
132
|
- `paths.product_definitions_dir` → product definitions root
|
|
131
133
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
132
134
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -139,6 +141,8 @@ If `paths` section is absent, use these defaults:
|
|
|
139
141
|
- `specs_dir` = `specs/bdd`
|
|
140
142
|
- `prd_dir` = `specs/prd`
|
|
141
143
|
- `refinement_dir` = `.agent/review`
|
|
144
|
+
- `qc_dir` = `docs`
|
|
145
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
142
146
|
- `product_definitions_dir` = `specs/product-definition`
|
|
143
147
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
144
148
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -183,6 +187,7 @@ If `services` section is present:
|
|
|
183
187
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
184
188
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
185
189
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
190
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
186
191
|
|
|
187
192
|
> **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
|
|
188
193
|
|
|
@@ -223,19 +228,41 @@ If the file does not exist → skip silently.
|
|
|
223
228
|
|
|
224
229
|
---
|
|
225
230
|
|
|
226
|
-
## Step 3 — [CRITICAL] Load CLAUDE.md
|
|
231
|
+
## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
|
|
227
232
|
|
|
228
233
|
*This is the highest-priority context — it defines HOW to write code and documents for this project.*
|
|
229
234
|
|
|
230
|
-
|
|
235
|
+
CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
|
|
236
|
+
architecture/coding standards compose correctly. The agent always sits at the umbrella
|
|
237
|
+
root, but the implementation code lives in a service submodule with its OWN stack,
|
|
238
|
+
architecture, and conventions — so the service's CLAUDE.md must win for code generation.
|
|
239
|
+
|
|
240
|
+
**Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
|
|
241
|
+
Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
|
|
242
|
+
whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
|
|
243
|
+
single-service mode) the project's only architecture + coding standards.
|
|
244
|
+
|
|
245
|
+
**Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
|
|
246
|
+
*Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
|
|
247
|
+
Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
|
|
248
|
+
the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
|
|
249
|
+
Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
|
|
250
|
+
coding standards, and error handling. Layer-1 values that the service does not redefine
|
|
251
|
+
(e.g. git conventions, banned patterns shared org-wide) remain in effect.
|
|
252
|
+
|
|
253
|
+
From the **merged** result, extract and store:
|
|
231
254
|
|
|
232
255
|
- **§1 Project Overview** → project name, language, framework, build/test commands, domains
|
|
233
|
-
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
|
|
234
|
-
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
|
|
235
|
-
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
|
|
236
|
-
- **§7 Git Conventions** → branch naming pattern, commit message format
|
|
256
|
+
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
|
|
257
|
+
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
|
|
258
|
+
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
|
|
259
|
+
- **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
|
|
237
260
|
|
|
238
|
-
|
|
261
|
+
**Resolution rules:**
|
|
262
|
+
- If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
|
|
263
|
+
- If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
|
|
264
|
+
- If `service_root` is set but `{service_root}/CLAUDE.md` is **missing** → fall back to root CLAUDE.md and flag ⚠️ in the Step 7 recap (the service has no architecture/coding-standards definition — code generation will use umbrella defaults, which may be the wrong stack).
|
|
265
|
+
- If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
|
|
239
266
|
|
|
240
267
|
---
|
|
241
268
|
|
|
@@ -335,7 +362,8 @@ Output exactly this block:
|
|
|
335
362
|
[CTX LOADED]
|
|
336
363
|
Stack : {language} / {framework} / {database}
|
|
337
364
|
Platform : {active_module} ({platform_type})
|
|
338
|
-
Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
365
|
+
Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
366
|
+
CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
|
|
339
367
|
Ticket : {ticket_prefix}-
|
|
340
368
|
Dict : {loaded — N canonical terms, M banned terms | missing}
|
|
341
369
|
Entities : {loaded — EntityA, EntityB, EntityC | missing}
|
|
@@ -590,6 +618,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
590
618
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
591
619
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
592
620
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
621
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
622
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
623
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
624
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
625
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
626
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
627
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
593
628
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
594
629
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
595
630
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|