@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/refine-prd.md
CHANGED
|
@@ -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}
|
|
@@ -598,6 +626,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
598
626
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
599
627
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
600
628
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
629
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
630
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
631
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
632
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
633
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
634
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
635
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
601
636
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
602
637
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
603
638
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
package/commands/report-bug.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
# /report-bug — File a Spec-Traced Bug (Tester-Facing)
|
|
1
|
+
# /report-bug — File a Spec-Traced Bug (Tester & QC-Facing)
|
|
2
2
|
|
|
3
|
-
For **testers
|
|
3
|
+
For **testers and QC** — including **product-gaps** surfaced by the `/qc-*` pipeline
|
|
4
|
+
(`/qc-run-test` FAIL classified product-gap, or a `DOC_GAPS` spec-defect blocker from
|
|
5
|
+
`/qc-analyze`). Produces a structured bug report with full spec context, classifies the likely
|
|
4
6
|
layer, and saves it for handoff to the dev team.
|
|
5
7
|
|
|
6
8
|
**READ-ONLY on specs and code.** This command never edits PRD, BDD, tech-docs, or source.
|
|
@@ -134,6 +136,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
134
136
|
- `paths.specs_dir` → BDD specs root
|
|
135
137
|
- `paths.prd_dir` → PRD documents root
|
|
136
138
|
- `paths.refinement_dir` → findings/review output dir
|
|
139
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
140
|
+
- `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)
|
|
137
141
|
- `paths.product_definitions_dir` → product definitions root
|
|
138
142
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
139
143
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -146,6 +150,8 @@ If `paths` section is absent, use these defaults:
|
|
|
146
150
|
- `specs_dir` = `specs/bdd`
|
|
147
151
|
- `prd_dir` = `specs/prd`
|
|
148
152
|
- `refinement_dir` = `.agent/review`
|
|
153
|
+
- `qc_dir` = `docs`
|
|
154
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
149
155
|
- `product_definitions_dir` = `specs/product-definition`
|
|
150
156
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
151
157
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -190,6 +196,7 @@ If `services` section is present:
|
|
|
190
196
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
191
197
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
192
198
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
199
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
193
200
|
|
|
194
201
|
> **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.
|
|
195
202
|
|
|
@@ -230,19 +237,41 @@ If the file does not exist → skip silently.
|
|
|
230
237
|
|
|
231
238
|
---
|
|
232
239
|
|
|
233
|
-
## Step 3 — [CRITICAL] Load CLAUDE.md
|
|
240
|
+
## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
|
|
234
241
|
|
|
235
242
|
*This is the highest-priority context — it defines HOW to write code and documents for this project.*
|
|
236
243
|
|
|
237
|
-
|
|
244
|
+
CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
|
|
245
|
+
architecture/coding standards compose correctly. The agent always sits at the umbrella
|
|
246
|
+
root, but the implementation code lives in a service submodule with its OWN stack,
|
|
247
|
+
architecture, and conventions — so the service's CLAUDE.md must win for code generation.
|
|
248
|
+
|
|
249
|
+
**Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
|
|
250
|
+
Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
|
|
251
|
+
whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
|
|
252
|
+
single-service mode) the project's only architecture + coding standards.
|
|
253
|
+
|
|
254
|
+
**Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
|
|
255
|
+
*Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
|
|
256
|
+
Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
|
|
257
|
+
the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
|
|
258
|
+
Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
|
|
259
|
+
coding standards, and error handling. Layer-1 values that the service does not redefine
|
|
260
|
+
(e.g. git conventions, banned patterns shared org-wide) remain in effect.
|
|
261
|
+
|
|
262
|
+
From the **merged** result, extract and store:
|
|
238
263
|
|
|
239
264
|
- **§1 Project Overview** → project name, language, framework, build/test commands, domains
|
|
240
|
-
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
|
|
241
|
-
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
|
|
242
|
-
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
|
|
243
|
-
- **§7 Git Conventions** → branch naming pattern, commit message format
|
|
265
|
+
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
|
|
266
|
+
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
|
|
267
|
+
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
|
|
268
|
+
- **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
|
|
244
269
|
|
|
245
|
-
|
|
270
|
+
**Resolution rules:**
|
|
271
|
+
- If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
|
|
272
|
+
- If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
|
|
273
|
+
- 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).
|
|
274
|
+
- If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
|
|
246
275
|
|
|
247
276
|
---
|
|
248
277
|
|
|
@@ -342,7 +371,8 @@ Output exactly this block:
|
|
|
342
371
|
[CTX LOADED]
|
|
343
372
|
Stack : {language} / {framework} / {database}
|
|
344
373
|
Platform : {active_module} ({platform_type})
|
|
345
|
-
Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
374
|
+
Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
375
|
+
CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
|
|
346
376
|
Ticket : {ticket_prefix}-
|
|
347
377
|
Dict : {loaded — N canonical terms, M banned terms | missing}
|
|
348
378
|
Entities : {loaded — EntityA, EntityB, EntityC | missing}
|
|
@@ -423,6 +453,17 @@ State the classification as a suggestion (dev confirms during `/fix-bug`).
|
|
|
423
453
|
Assign `BUG-{today YYYYMMDD}-{NN}` (NN = next sequence among existing reports).
|
|
424
454
|
Write to `{paths.bug_reports_dir}/{BUG-ID}.md` (resolved to `{spec_source}/feedback/bug-reports/` in umbrella mode; create dir if needed) using the structure in the Output block, and also print it for pasting into Jira/Slack.
|
|
425
455
|
|
|
456
|
+
## Step 5.5 — Backfill the trace (pending-view link)
|
|
457
|
+
|
|
458
|
+
If Step 1 matched a specific failing scenario `{UC-ID}-SC{N}` **and** a trace row exists in
|
|
459
|
+
`{paths.trace_dir}/{UC-ID}.tsv`, update **only** that row so the PO/PM "waiting-on" view points
|
|
460
|
+
to this bug — leave every other column (incl. `qc_status`) unchanged:
|
|
461
|
+
- `qc_blocked_by` = `{BUG-ID}`
|
|
462
|
+
- `qc_owner` = `dev` if likely layer ∈ {Code, BDD, Design Spec, Env} · `po` if likely layer = PRD ambiguity
|
|
463
|
+
|
|
464
|
+
Skip silently if no SC matched or no trace file/row exists (a bug can still be filed). This is
|
|
465
|
+
the only write this command makes to operational state — it still **never** edits PRD/BDD/code.
|
|
466
|
+
|
|
426
467
|
## Step 6 — Handoff (so PO/Dev actually see it)
|
|
427
468
|
|
|
428
469
|
The report only reaches PO/Dev if it is **committed and pushed to the shared spec repo**. A local file is a dead drop.
|
|
@@ -485,6 +526,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
485
526
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
486
527
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
487
528
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
529
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
530
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
531
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
532
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
533
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
534
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
535
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
488
536
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
489
537
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
490
538
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
|
@@ -515,6 +563,7 @@ Next : {suggested command with example arguments}
|
|
|
515
563
|
🐞 {BUG-ID} → {paths.bug_reports_dir}/{BUG-ID}.md (in shared spec repo)
|
|
516
564
|
|
|
517
565
|
Feature : {UC-ID} — {feature name} | Service: {service} | Severity: {Critical|Major|Minor}
|
|
566
|
+
State : 🟢 Open (lifecycle: Open → Fixed → Closed — set `Fixed` by /fix-bug, `Closed` after /qc-run-test re-verify pass)
|
|
518
567
|
|
|
519
568
|
Spec context
|
|
520
569
|
PRD : {prd_path} (v{prd_version})
|
package/commands/report-bug.tmpl
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
# /report-bug — File a Spec-Traced Bug (Tester-Facing)
|
|
1
|
+
# /report-bug — File a Spec-Traced Bug (Tester & QC-Facing)
|
|
2
2
|
|
|
3
|
-
For **testers
|
|
3
|
+
For **testers and QC** — including **product-gaps** surfaced by the `/qc-*` pipeline
|
|
4
|
+
(`/qc-run-test` FAIL classified product-gap, or a `DOC_GAPS` spec-defect blocker from
|
|
5
|
+
`/qc-analyze`). Produces a structured bug report with full spec context, classifies the likely
|
|
4
6
|
layer, and saves it for handoff to the dev team.
|
|
5
7
|
|
|
6
8
|
**READ-ONLY on specs and code.** This command never edits PRD, BDD, tech-docs, or source.
|
|
@@ -70,6 +72,17 @@ State the classification as a suggestion (dev confirms during `/fix-bug`).
|
|
|
70
72
|
Assign `BUG-{today YYYYMMDD}-{NN}` (NN = next sequence among existing reports).
|
|
71
73
|
Write to `{paths.bug_reports_dir}/{BUG-ID}.md` (resolved to `{spec_source}/feedback/bug-reports/` in umbrella mode; create dir if needed) using the structure in the Output block, and also print it for pasting into Jira/Slack.
|
|
72
74
|
|
|
75
|
+
## Step 5.5 — Backfill the trace (pending-view link)
|
|
76
|
+
|
|
77
|
+
If Step 1 matched a specific failing scenario `{UC-ID}-SC{N}` **and** a trace row exists in
|
|
78
|
+
`{paths.trace_dir}/{UC-ID}.tsv`, update **only** that row so the PO/PM "waiting-on" view points
|
|
79
|
+
to this bug — leave every other column (incl. `qc_status`) unchanged:
|
|
80
|
+
- `qc_blocked_by` = `{BUG-ID}`
|
|
81
|
+
- `qc_owner` = `dev` if likely layer ∈ {Code, BDD, Design Spec, Env} · `po` if likely layer = PRD ambiguity
|
|
82
|
+
|
|
83
|
+
Skip silently if no SC matched or no trace file/row exists (a bug can still be filed). This is
|
|
84
|
+
the only write this command makes to operational state — it still **never** edits PRD/BDD/code.
|
|
85
|
+
|
|
73
86
|
## Step 6 — Handoff (so PO/Dev actually see it)
|
|
74
87
|
|
|
75
88
|
The report only reaches PO/Dev if it is **committed and pushed to the shared spec repo**. A local file is a dead drop.
|
|
@@ -102,6 +115,7 @@ git push # → PO/Dev see it on their next /sync
|
|
|
102
115
|
🐞 {BUG-ID} → {paths.bug_reports_dir}/{BUG-ID}.md (in shared spec repo)
|
|
103
116
|
|
|
104
117
|
Feature : {UC-ID} — {feature name} | Service: {service} | Severity: {Critical|Major|Minor}
|
|
118
|
+
State : 🟢 Open (lifecycle: Open → Fixed → Closed — set `Fixed` by /fix-bug, `Closed` after /qc-run-test re-verify pass)
|
|
105
119
|
|
|
106
120
|
Spec context
|
|
107
121
|
PRD : {prd_path} (v{prd_version})
|
package/commands/review-code.md
CHANGED
|
@@ -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}
|
|
@@ -447,6 +475,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
447
475
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
448
476
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
449
477
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
478
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
479
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
480
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
481
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
482
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
483
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
484
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
450
485
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
451
486
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
452
487
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
|
@@ -132,6 +132,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
132
132
|
- `paths.specs_dir` → BDD specs root
|
|
133
133
|
- `paths.prd_dir` → PRD documents root
|
|
134
134
|
- `paths.refinement_dir` → findings/review output dir
|
|
135
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
136
|
+
- `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)
|
|
135
137
|
- `paths.product_definitions_dir` → product definitions root
|
|
136
138
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
137
139
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -144,6 +146,8 @@ If `paths` section is absent, use these defaults:
|
|
|
144
146
|
- `specs_dir` = `specs/bdd`
|
|
145
147
|
- `prd_dir` = `specs/prd`
|
|
146
148
|
- `refinement_dir` = `.agent/review`
|
|
149
|
+
- `qc_dir` = `docs`
|
|
150
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
147
151
|
- `product_definitions_dir` = `specs/product-definition`
|
|
148
152
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
149
153
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -188,6 +192,7 @@ If `services` section is present:
|
|
|
188
192
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
189
193
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
190
194
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
195
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
191
196
|
|
|
192
197
|
> **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.
|
|
193
198
|
|
|
@@ -228,19 +233,41 @@ If the file does not exist → skip silently.
|
|
|
228
233
|
|
|
229
234
|
---
|
|
230
235
|
|
|
231
|
-
## Step 3 — [CRITICAL] Load CLAUDE.md
|
|
236
|
+
## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
|
|
232
237
|
|
|
233
238
|
*This is the highest-priority context — it defines HOW to write code and documents for this project.*
|
|
234
239
|
|
|
235
|
-
|
|
240
|
+
CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
|
|
241
|
+
architecture/coding standards compose correctly. The agent always sits at the umbrella
|
|
242
|
+
root, but the implementation code lives in a service submodule with its OWN stack,
|
|
243
|
+
architecture, and conventions — so the service's CLAUDE.md must win for code generation.
|
|
244
|
+
|
|
245
|
+
**Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
|
|
246
|
+
Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
|
|
247
|
+
whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
|
|
248
|
+
single-service mode) the project's only architecture + coding standards.
|
|
249
|
+
|
|
250
|
+
**Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
|
|
251
|
+
*Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
|
|
252
|
+
Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
|
|
253
|
+
the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
|
|
254
|
+
Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
|
|
255
|
+
coding standards, and error handling. Layer-1 values that the service does not redefine
|
|
256
|
+
(e.g. git conventions, banned patterns shared org-wide) remain in effect.
|
|
257
|
+
|
|
258
|
+
From the **merged** result, extract and store:
|
|
236
259
|
|
|
237
260
|
- **§1 Project Overview** → project name, language, framework, build/test commands, domains
|
|
238
|
-
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
|
|
239
|
-
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
|
|
240
|
-
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
|
|
241
|
-
- **§7 Git Conventions** → branch naming pattern, commit message format
|
|
261
|
+
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
|
|
262
|
+
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
|
|
263
|
+
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
|
|
264
|
+
- **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
|
|
242
265
|
|
|
243
|
-
|
|
266
|
+
**Resolution rules:**
|
|
267
|
+
- If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
|
|
268
|
+
- If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
|
|
269
|
+
- 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).
|
|
270
|
+
- If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
|
|
244
271
|
|
|
245
272
|
---
|
|
246
273
|
|
|
@@ -340,7 +367,8 @@ Output exactly this block:
|
|
|
340
367
|
[CTX LOADED]
|
|
341
368
|
Stack : {language} / {framework} / {database}
|
|
342
369
|
Platform : {active_module} ({platform_type})
|
|
343
|
-
Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
370
|
+
Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
371
|
+
CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
|
|
344
372
|
Ticket : {ticket_prefix}-
|
|
345
373
|
Dict : {loaded — N canonical terms, M banned terms | missing}
|
|
346
374
|
Entities : {loaded — EntityA, EntityB, EntityC | missing}
|
|
@@ -779,6 +807,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
779
807
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
780
808
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
781
809
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
810
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
811
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
812
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
813
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
814
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
815
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
816
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
782
817
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
783
818
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
784
819
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
|
@@ -129,6 +129,8 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
129
129
|
- `paths.specs_dir` → BDD specs root
|
|
130
130
|
- `paths.prd_dir` → PRD documents root
|
|
131
131
|
- `paths.refinement_dir` → findings/review output dir
|
|
132
|
+
- `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
|
|
133
|
+
- `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)
|
|
132
134
|
- `paths.product_definitions_dir` → product definitions root
|
|
133
135
|
- `paths.domain_knowledge_dir` → domain knowledge root
|
|
134
136
|
- `paths.business_dictionary` → path to business-dictionary.md
|
|
@@ -141,6 +143,8 @@ If `paths` section is absent, use these defaults:
|
|
|
141
143
|
- `specs_dir` = `specs/bdd`
|
|
142
144
|
- `prd_dir` = `specs/prd`
|
|
143
145
|
- `refinement_dir` = `.agent/review`
|
|
146
|
+
- `qc_dir` = `docs`
|
|
147
|
+
- `qc_skills_dir` = `.agent/skills/qc`
|
|
144
148
|
- `product_definitions_dir` = `specs/product-definition`
|
|
145
149
|
- `domain_knowledge_dir` = `specs/domain-knowledge`
|
|
146
150
|
- `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
|
|
@@ -185,6 +189,7 @@ If `services` section is present:
|
|
|
185
189
|
- Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
186
190
|
- Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
|
|
187
191
|
- Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
|
|
192
|
+
- Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
|
|
188
193
|
|
|
189
194
|
> **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.
|
|
190
195
|
|
|
@@ -225,19 +230,41 @@ If the file does not exist → skip silently.
|
|
|
225
230
|
|
|
226
231
|
---
|
|
227
232
|
|
|
228
|
-
## Step 3 — [CRITICAL] Load CLAUDE.md
|
|
233
|
+
## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
|
|
229
234
|
|
|
230
235
|
*This is the highest-priority context — it defines HOW to write code and documents for this project.*
|
|
231
236
|
|
|
232
|
-
|
|
237
|
+
CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
|
|
238
|
+
architecture/coding standards compose correctly. The agent always sits at the umbrella
|
|
239
|
+
root, but the implementation code lives in a service submodule with its OWN stack,
|
|
240
|
+
architecture, and conventions — so the service's CLAUDE.md must win for code generation.
|
|
241
|
+
|
|
242
|
+
**Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
|
|
243
|
+
Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
|
|
244
|
+
whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
|
|
245
|
+
single-service mode) the project's only architecture + coding standards.
|
|
246
|
+
|
|
247
|
+
**Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
|
|
248
|
+
*Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
|
|
249
|
+
Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
|
|
250
|
+
the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
|
|
251
|
+
Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
|
|
252
|
+
coding standards, and error handling. Layer-1 values that the service does not redefine
|
|
253
|
+
(e.g. git conventions, banned patterns shared org-wide) remain in effect.
|
|
254
|
+
|
|
255
|
+
From the **merged** result, extract and store:
|
|
233
256
|
|
|
234
257
|
- **§1 Project Overview** → project name, language, framework, build/test commands, domains
|
|
235
|
-
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
|
|
236
|
-
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
|
|
237
|
-
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
|
|
238
|
-
- **§7 Git Conventions** → branch naming pattern, commit message format
|
|
258
|
+
- **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
|
|
259
|
+
- **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
|
|
260
|
+
- **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
|
|
261
|
+
- **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
|
|
239
262
|
|
|
240
|
-
|
|
263
|
+
**Resolution rules:**
|
|
264
|
+
- If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
|
|
265
|
+
- If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
|
|
266
|
+
- 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).
|
|
267
|
+
- If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
|
|
241
268
|
|
|
242
269
|
---
|
|
243
270
|
|
|
@@ -337,7 +364,8 @@ Output exactly this block:
|
|
|
337
364
|
[CTX LOADED]
|
|
338
365
|
Stack : {language} / {framework} / {database}
|
|
339
366
|
Platform : {active_module} ({platform_type})
|
|
340
|
-
Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
367
|
+
Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
|
|
368
|
+
CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
|
|
341
369
|
Ticket : {ticket_prefix}-
|
|
342
370
|
Dict : {loaded — N canonical terms, M banned terms | missing}
|
|
343
371
|
Entities : {loaded — EntityA, EntityB, EntityC | missing}
|
|
@@ -614,6 +642,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
614
642
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
615
643
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
616
644
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
645
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
646
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
647
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
648
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
649
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
650
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
651
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
617
652
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
618
653
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
619
654
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|
|
@@ -406,6 +406,13 @@ Suggest the logical next command based on workflow phase:
|
|
|
406
406
|
| /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
|
|
407
407
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
408
408
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
409
|
+
| /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
|
|
410
|
+
| /qc-plan | `/qc-design-test {UC-ID}` |
|
|
411
|
+
| /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
|
|
412
|
+
| /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
|
|
413
|
+
| /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
|
|
414
|
+
| /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
|
|
415
|
+
| /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
|
|
409
416
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
410
417
|
| /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
|
|
411
418
|
| /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
|