@anhth2/spec-driven-dev-plugin 0.10.0 → 0.11.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.
Files changed (203) hide show
  1. package/commands/debug.md +38 -8
  2. package/commands/define-product.md +38 -8
  3. package/commands/dev-gen-test.md +39 -9
  4. package/commands/dev-gen-test.tmpl +1 -1
  5. package/commands/dev-run-test.md +43 -10
  6. package/commands/dev-run-test.tmpl +5 -2
  7. package/commands/dev-smoke-test.md +38 -8
  8. package/commands/fix-bug.md +38 -8
  9. package/commands/generate-bdd.md +42 -10
  10. package/commands/generate-bdd.tmpl +4 -2
  11. package/commands/generate-code.md +39 -9
  12. package/commands/generate-code.tmpl +1 -1
  13. package/commands/generate-design-spec.md +38 -8
  14. package/commands/generate-prd.md +38 -8
  15. package/commands/generate-spec-manifest.md +38 -8
  16. package/commands/generate-tech-docs.md +38 -8
  17. package/commands/learn.md +38 -8
  18. package/commands/propose-scenario.md +38 -8
  19. package/commands/qc-analyze.md +514 -0
  20. package/commands/qc-analyze.tmpl +71 -0
  21. package/commands/qc-design-test.md +510 -0
  22. package/commands/qc-design-test.tmpl +67 -0
  23. package/commands/qc-plan.md +492 -0
  24. package/commands/qc-plan.tmpl +49 -0
  25. package/commands/qc-report.md +491 -0
  26. package/commands/qc-report.tmpl +48 -0
  27. package/commands/qc-review.md +496 -0
  28. package/commands/qc-review.tmpl +53 -0
  29. package/commands/qc-run-test.md +538 -0
  30. package/commands/qc-run-test.tmpl +77 -0
  31. package/commands/refine-prd.md +38 -8
  32. package/commands/report-bug.md +38 -8
  33. package/commands/review-code.md +38 -8
  34. package/commands/review-context.md +38 -8
  35. package/commands/review-tech-docs.md +38 -8
  36. package/commands/setup-ai-first.md +7 -0
  37. package/commands/sync.md +7 -0
  38. package/commands/update-framework.md +7 -0
  39. package/commands/validate-traces.md +54 -12
  40. package/commands/validate-traces.tmpl +16 -4
  41. package/core/FRAMEWORK_VERSION +1 -1
  42. package/core/commands/debug.md +38 -8
  43. package/core/commands/define-product.md +38 -8
  44. package/core/commands/dev-gen-test.md +39 -9
  45. package/core/commands/dev-run-test.md +43 -10
  46. package/core/commands/dev-smoke-test.md +38 -8
  47. package/core/commands/fix-bug.md +38 -8
  48. package/core/commands/generate-bdd.md +42 -10
  49. package/core/commands/generate-code.md +39 -9
  50. package/core/commands/generate-design-spec.md +38 -8
  51. package/core/commands/generate-prd.md +38 -8
  52. package/core/commands/generate-spec-manifest.md +38 -8
  53. package/core/commands/generate-tech-docs.md +38 -8
  54. package/core/commands/learn.md +38 -8
  55. package/core/commands/propose-scenario.md +38 -8
  56. package/core/commands/qc-analyze.md +514 -0
  57. package/core/commands/qc-design-test.md +510 -0
  58. package/core/commands/qc-plan.md +492 -0
  59. package/core/commands/qc-report.md +491 -0
  60. package/core/commands/qc-review.md +496 -0
  61. package/core/commands/qc-run-test.md +538 -0
  62. package/core/commands/refine-prd.md +38 -8
  63. package/core/commands/report-bug.md +38 -8
  64. package/core/commands/review-code.md +38 -8
  65. package/core/commands/review-context.md +38 -8
  66. package/core/commands/review-tech-docs.md +38 -8
  67. package/core/commands/setup-ai-first.md +7 -0
  68. package/core/commands/sync.md +7 -0
  69. package/core/commands/update-framework.md +7 -0
  70. package/core/commands/validate-traces.md +54 -12
  71. package/core/modules/qc-playwright/stack-profile.yaml +65 -0
  72. package/core/skills/code/SKILL.md +45 -8
  73. package/core/skills/debug/SKILL.md +52 -8
  74. package/core/skills/design-spec/SKILL.md +38 -8
  75. package/core/skills/discovery/SKILL.md +38 -8
  76. package/core/skills/prd/SKILL.md +14 -0
  77. package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
  78. package/core/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
  79. package/core/skills/qc/qa-analyst/business-rules.md +55 -0
  80. package/core/skills/qc/qa-analyst/data-flow.md +60 -0
  81. package/core/skills/qc/qa-analyst/spec-breakdown.md +57 -0
  82. package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
  83. package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
  84. package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
  85. package/core/skills/qc/qa-designer/functional/api.md +45 -0
  86. package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
  87. package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
  88. package/core/skills/qc/qa-designer/integration/api.md +42 -0
  89. package/core/skills/qc/qa-designer/integration/db.md +39 -0
  90. package/core/skills/qc/qa-designer/integration/gui.md +40 -0
  91. package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
  92. package/core/skills/qc/qa-designer/non-functional.md +40 -0
  93. package/core/skills/qc/qa-planner/test-plan.md +120 -0
  94. package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
  95. package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
  96. package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
  97. package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
  98. package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
  99. package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
  100. package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
  101. package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
  102. package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
  103. package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
  104. package/core/skills/qc/qa-runner/e2e.md +49 -0
  105. package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
  106. package/core/skills/qc/qa-runner/functional/api.md +35 -0
  107. package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
  108. package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
  109. package/core/skills/qc/qa-runner/integration.md +47 -0
  110. package/core/skills/qc/qa-runner/non-functional.md +49 -0
  111. package/core/skills/qc/qa-runner/report/report.md +37 -0
  112. package/core/skills/setup-ai-first/SKILL.md +7 -0
  113. package/core/skills/spec/SKILL.md +14 -0
  114. package/core/skills/test/SKILL.md +83 -16
  115. package/core/steps/context-loader.md +31 -8
  116. package/core/steps/report-footer.md +7 -0
  117. package/core/templates/project-context.yaml +8 -0
  118. package/docs/01-getting-started/README.md +19 -0
  119. package/docs/01-getting-started/core-concepts.md +102 -0
  120. package/docs/01-getting-started/installation.md +154 -0
  121. package/docs/01-getting-started/quickstart.md +85 -0
  122. package/docs/02-guides/README.md +27 -0
  123. package/docs/02-guides/developer/README.md +46 -0
  124. package/docs/02-guides/developer/bdd-and-trace.md +123 -0
  125. package/docs/02-guides/developer/commands.md +76 -0
  126. package/docs/02-guides/developer/pr-checklist.md +15 -0
  127. package/docs/02-guides/developer/scenarios.md +448 -0
  128. package/docs/02-guides/developer/workflow.md +59 -0
  129. package/docs/02-guides/product-owner/README.md +77 -0
  130. package/docs/02-guides/product-owner/commands.md +30 -0
  131. package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
  132. package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
  133. package/docs/02-guides/product-owner/scenarios.md +357 -0
  134. package/docs/02-guides/qc-automation.md +92 -0
  135. package/docs/02-guides/tester/README.md +72 -0
  136. package/docs/02-guides/tester/bug-reporting.md +117 -0
  137. package/docs/02-guides/tester/reading-specs.md +79 -0
  138. package/docs/02-guides/tester/scenarios.md +186 -0
  139. package/docs/02-guides/tester/spec-manifest.md +124 -0
  140. package/docs/02-guides/tester/test-checklist.md +31 -0
  141. package/docs/02-guides/tester/workflow.md +79 -0
  142. package/docs/03-concepts/README.md +19 -0
  143. package/docs/03-concepts/architecture.md +243 -0
  144. package/docs/03-concepts/pipeline.md +249 -0
  145. package/docs/03-concepts/traceability.md +148 -0
  146. package/docs/04-operations/README.md +33 -0
  147. package/docs/04-operations/bug-flow.md +321 -0
  148. package/docs/04-operations/publishing.md +137 -0
  149. package/docs/04-operations/sync-and-update.md +328 -0
  150. package/docs/05-reference/README.md +29 -0
  151. package/docs/05-reference/commands.md +229 -0
  152. package/docs/05-reference/modules.md +110 -0
  153. package/docs/05-reference/trace-schema.md +146 -0
  154. package/docs/README.md +51 -0
  155. package/modules/qc-playwright/stack-profile.yaml +65 -0
  156. package/package.json +2 -2
  157. package/skills/code/SKILL.md +45 -8
  158. package/skills/debug/SKILL.md +52 -8
  159. package/skills/design-spec/SKILL.md +38 -8
  160. package/skills/discovery/SKILL.md +38 -8
  161. package/skills/prd/SKILL.md +14 -0
  162. package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
  163. package/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
  164. package/skills/qc/qa-analyst/business-rules.md +55 -0
  165. package/skills/qc/qa-analyst/data-flow.md +60 -0
  166. package/skills/qc/qa-analyst/spec-breakdown.md +57 -0
  167. package/skills/qc/qa-designer/e2e/journey.md +41 -0
  168. package/skills/qc/qa-designer/exploratory/charter.md +68 -0
  169. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
  170. package/skills/qc/qa-designer/functional/api.md +45 -0
  171. package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
  172. package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
  173. package/skills/qc/qa-designer/integration/api.md +42 -0
  174. package/skills/qc/qa-designer/integration/db.md +39 -0
  175. package/skills/qc/qa-designer/integration/gui.md +40 -0
  176. package/skills/qc/qa-designer/integration/kafka.md +40 -0
  177. package/skills/qc/qa-designer/non-functional.md +40 -0
  178. package/skills/qc/qa-planner/test-plan.md +120 -0
  179. package/skills/qc/qa-reviewer/script/e2e.md +87 -0
  180. package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
  181. package/skills/qc/qa-reviewer/script/functional.md +101 -0
  182. package/skills/qc/qa-reviewer/script/integration.md +91 -0
  183. package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
  184. package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
  185. package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
  186. package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
  187. package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
  188. package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
  189. package/skills/qc/qa-runner/e2e.md +49 -0
  190. package/skills/qc/qa-runner/exploratory/session.md +36 -0
  191. package/skills/qc/qa-runner/functional/api.md +35 -0
  192. package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
  193. package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
  194. package/skills/qc/qa-runner/integration.md +47 -0
  195. package/skills/qc/qa-runner/non-functional.md +49 -0
  196. package/skills/qc/qa-runner/report/report.md +37 -0
  197. package/skills/setup-ai-first/SKILL.md +7 -0
  198. package/skills/spec/SKILL.md +14 -0
  199. package/skills/test/SKILL.md +83 -16
  200. package/steps/context-loader.md +31 -8
  201. package/steps/report-footer.md +7 -0
  202. package/templates/project-context.yaml +8 -0
  203. package/ARCHITECTURE.md +0 -258
@@ -221,19 +221,41 @@ If the file does not exist → skip silently.
221
221
 
222
222
  ---
223
223
 
224
- ## Step 3 — [CRITICAL] Load CLAUDE.md
224
+ ## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
225
225
 
226
226
  *This is the highest-priority context — it defines HOW to write code and documents for this project.*
227
227
 
228
- Read `CLAUDE.md`. Extract and store:
228
+ CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
229
+ architecture/coding standards compose correctly. The agent always sits at the umbrella
230
+ root, but the implementation code lives in a service submodule with its OWN stack,
231
+ architecture, and conventions — so the service's CLAUDE.md must win for code generation.
232
+
233
+ **Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
234
+ Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
235
+ whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
236
+ single-service mode) the project's only architecture + coding standards.
237
+
238
+ **Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
239
+ *Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
240
+ Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
241
+ the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
242
+ Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
243
+ coding standards, and error handling. Layer-1 values that the service does not redefine
244
+ (e.g. git conventions, banned patterns shared org-wide) remain in effect.
245
+
246
+ From the **merged** result, extract and store:
229
247
 
230
248
  - **§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
249
+ - **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
250
+ - **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
251
+ - **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
252
+ - **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
235
253
 
236
- If `CLAUDE.md` does not exist → note it as missing and continue with project-context.yaml data only.
254
+ **Resolution rules:**
255
+ - If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
256
+ - If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
257
+ - 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).
258
+ - If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
237
259
 
238
260
  ---
239
261
 
@@ -333,7 +355,8 @@ Output exactly this block:
333
355
  [CTX LOADED]
334
356
  Stack : {language} / {framework} / {database}
335
357
  Platform : {active_module} ({platform_type})
336
- Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
358
+ Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
359
+ CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
337
360
  Ticket : {ticket_prefix}-
338
361
  Dict : {loaded — N canonical terms, M banned terms | missing}
339
362
  Entities : {loaded — EntityA, EntityB, EntityC | missing}
@@ -625,7 +648,7 @@ Update `{paths.trace_dir}/{UC-ID}.tsv` — for each implemented scenario, find t
625
648
  | `fe_phase` | `ui` if `--phase=ui` \| `integrated` if `--phase=integration` \| `—` if no phase flag |
626
649
  | `last_updated` | today `YYYY-MM-DD` |
627
650
 
628
- Leave all other columns (`sc_title`, `spec_ver`, `prd_version`, `prd_status`, `uc_status`, `test_count`, `test_classes`, `dev_selftest`, `dev_selftest_at`) unchanged.
651
+ Leave all other columns (`sc_title`, `spec_ver`, `prd_version`, `prd_status`, `uc_status`, `test_count`, `test_classes`, `dev_selftest`, `dev_selftest_at`, `qc_status`, `qc_run_at`) unchanged.
629
652
  `status` is computed by `/validate-traces` — do not set here.
630
653
 
631
654
  ## Refresh Panel Mirror
@@ -693,6 +716,13 @@ Suggest the logical next command based on workflow phase:
693
716
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
694
717
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
695
718
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
719
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
720
+ | /qc-plan | `/qc-design-test {UC-ID}` |
721
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
722
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
723
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
724
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
725
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
696
726
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
697
727
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
698
728
  | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
@@ -272,7 +272,7 @@ Update `{paths.trace_dir}/{UC-ID}.tsv` — for each implemented scenario, find t
272
272
  | `fe_phase` | `ui` if `--phase=ui` \| `integrated` if `--phase=integration` \| `—` if no phase flag |
273
273
  | `last_updated` | today `YYYY-MM-DD` |
274
274
 
275
- Leave all other columns (`sc_title`, `spec_ver`, `prd_version`, `prd_status`, `uc_status`, `test_count`, `test_classes`, `dev_selftest`, `dev_selftest_at`) unchanged.
275
+ Leave all other columns (`sc_title`, `spec_ver`, `prd_version`, `prd_status`, `uc_status`, `test_count`, `test_classes`, `dev_selftest`, `dev_selftest_at`, `qc_status`, `qc_run_at`) unchanged.
276
276
  `status` is computed by `/validate-traces` — do not set here.
277
277
 
278
278
  ## Refresh Panel Mirror
@@ -221,19 +221,41 @@ If the file does not exist → skip silently.
221
221
 
222
222
  ---
223
223
 
224
- ## Step 3 — [CRITICAL] Load CLAUDE.md
224
+ ## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
225
225
 
226
226
  *This is the highest-priority context — it defines HOW to write code and documents for this project.*
227
227
 
228
- Read `CLAUDE.md`. Extract and store:
228
+ CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
229
+ architecture/coding standards compose correctly. The agent always sits at the umbrella
230
+ root, but the implementation code lives in a service submodule with its OWN stack,
231
+ architecture, and conventions — so the service's CLAUDE.md must win for code generation.
232
+
233
+ **Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
234
+ Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
235
+ whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
236
+ single-service mode) the project's only architecture + coding standards.
237
+
238
+ **Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
239
+ *Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
240
+ Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
241
+ the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
242
+ Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
243
+ coding standards, and error handling. Layer-1 values that the service does not redefine
244
+ (e.g. git conventions, banned patterns shared org-wide) remain in effect.
245
+
246
+ From the **merged** result, extract and store:
229
247
 
230
248
  - **§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
249
+ - **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
250
+ - **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
251
+ - **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
252
+ - **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
235
253
 
236
- If `CLAUDE.md` does not exist → note it as missing and continue with project-context.yaml data only.
254
+ **Resolution rules:**
255
+ - If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
256
+ - If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
257
+ - 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).
258
+ - If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
237
259
 
238
260
  ---
239
261
 
@@ -333,7 +355,8 @@ Output exactly this block:
333
355
  [CTX LOADED]
334
356
  Stack : {language} / {framework} / {database}
335
357
  Platform : {active_module} ({platform_type})
336
- Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
358
+ Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
359
+ CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
337
360
  Ticket : {ticket_prefix}-
338
361
  Dict : {loaded — N canonical terms, M banned terms | missing}
339
362
  Entities : {loaded — EntityA, EntityB, EntityC | missing}
@@ -827,6 +850,13 @@ Suggest the logical next command based on workflow phase:
827
850
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
828
851
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
829
852
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
853
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
854
+ | /qc-plan | `/qc-design-test {UC-ID}` |
855
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
856
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
857
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
858
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
859
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
830
860
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
831
861
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
832
862
  | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
@@ -221,19 +221,41 @@ If the file does not exist → skip silently.
221
221
 
222
222
  ---
223
223
 
224
- ## Step 3 — [CRITICAL] Load CLAUDE.md
224
+ ## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
225
225
 
226
226
  *This is the highest-priority context — it defines HOW to write code and documents for this project.*
227
227
 
228
- Read `CLAUDE.md`. Extract and store:
228
+ CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
229
+ architecture/coding standards compose correctly. The agent always sits at the umbrella
230
+ root, but the implementation code lives in a service submodule with its OWN stack,
231
+ architecture, and conventions — so the service's CLAUDE.md must win for code generation.
232
+
233
+ **Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
234
+ Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
235
+ whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
236
+ single-service mode) the project's only architecture + coding standards.
237
+
238
+ **Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
239
+ *Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
240
+ Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
241
+ the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
242
+ Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
243
+ coding standards, and error handling. Layer-1 values that the service does not redefine
244
+ (e.g. git conventions, banned patterns shared org-wide) remain in effect.
245
+
246
+ From the **merged** result, extract and store:
229
247
 
230
248
  - **§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
249
+ - **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
250
+ - **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
251
+ - **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
252
+ - **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
235
253
 
236
- If `CLAUDE.md` does not exist → note it as missing and continue with project-context.yaml data only.
254
+ **Resolution rules:**
255
+ - If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
256
+ - If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
257
+ - 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).
258
+ - If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
237
259
 
238
260
  ---
239
261
 
@@ -333,7 +355,8 @@ Output exactly this block:
333
355
  [CTX LOADED]
334
356
  Stack : {language} / {framework} / {database}
335
357
  Platform : {active_module} ({platform_type})
336
- Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
358
+ Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
359
+ CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
337
360
  Ticket : {ticket_prefix}-
338
361
  Dict : {loaded — N canonical terms, M banned terms | missing}
339
362
  Entities : {loaded — EntityA, EntityB, EntityC | missing}
@@ -630,6 +653,13 @@ Suggest the logical next command based on workflow phase:
630
653
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
631
654
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
632
655
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
656
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
657
+ | /qc-plan | `/qc-design-test {UC-ID}` |
658
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
659
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
660
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
661
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
662
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
633
663
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
634
664
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
635
665
  | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
@@ -226,19 +226,41 @@ If the file does not exist → skip silently.
226
226
 
227
227
  ---
228
228
 
229
- ## Step 3 — [CRITICAL] Load CLAUDE.md
229
+ ## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
230
230
 
231
231
  *This is the highest-priority context — it defines HOW to write code and documents for this project.*
232
232
 
233
- Read `CLAUDE.md`. Extract and store:
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:
234
252
 
235
253
  - **§1 Project Overview** → project name, language, framework, build/test commands, domains
236
- - **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
237
- - **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
238
- - **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
239
- - **§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*
240
258
 
241
- If `CLAUDE.md` does not exist → note it as missing and continue with project-context.yaml data only.
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.
242
264
 
243
265
  ---
244
266
 
@@ -338,7 +360,8 @@ Output exactly this block:
338
360
  [CTX LOADED]
339
361
  Stack : {language} / {framework} / {database}
340
362
  Platform : {active_module} ({platform_type})
341
- 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}
342
365
  Ticket : {ticket_prefix}-
343
366
  Dict : {loaded — N canonical terms, M banned terms | missing}
344
367
  Entities : {loaded — EntityA, EntityB, EntityC | missing}
@@ -527,6 +550,13 @@ Suggest the logical next command based on workflow phase:
527
550
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
528
551
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
529
552
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
553
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
554
+ | /qc-plan | `/qc-design-test {UC-ID}` |
555
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
556
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
557
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
558
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
559
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
530
560
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
531
561
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
532
562
  | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
@@ -242,19 +242,41 @@ If the file does not exist → skip silently.
242
242
 
243
243
  ---
244
244
 
245
- ## Step 3 — [CRITICAL] Load CLAUDE.md
245
+ ## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
246
246
 
247
247
  *This is the highest-priority context — it defines HOW to write code and documents for this project.*
248
248
 
249
- Read `CLAUDE.md`. Extract and store:
249
+ CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
250
+ architecture/coding standards compose correctly. The agent always sits at the umbrella
251
+ root, but the implementation code lives in a service submodule with its OWN stack,
252
+ architecture, and conventions — so the service's CLAUDE.md must win for code generation.
253
+
254
+ **Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
255
+ Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
256
+ whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
257
+ single-service mode) the project's only architecture + coding standards.
258
+
259
+ **Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
260
+ *Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
261
+ Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
262
+ the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
263
+ Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
264
+ coding standards, and error handling. Layer-1 values that the service does not redefine
265
+ (e.g. git conventions, banned patterns shared org-wide) remain in effect.
266
+
267
+ From the **merged** result, extract and store:
250
268
 
251
269
  - **§1 Project Overview** → project name, language, framework, build/test commands, domains
252
- - **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
253
- - **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
254
- - **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
255
- - **§7 Git Conventions** → branch naming pattern, commit message format
270
+ - **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
271
+ - **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
272
+ - **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
273
+ - **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
256
274
 
257
- If `CLAUDE.md` does not exist → note it as missing and continue with project-context.yaml data only.
275
+ **Resolution rules:**
276
+ - If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
277
+ - If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
278
+ - 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).
279
+ - If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
258
280
 
259
281
  ---
260
282
 
@@ -354,7 +376,8 @@ Output exactly this block:
354
376
  [CTX LOADED]
355
377
  Stack : {language} / {framework} / {database}
356
378
  Platform : {active_module} ({platform_type})
357
- Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
379
+ Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
380
+ CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
358
381
  Ticket : {ticket_prefix}-
359
382
  Dict : {loaded — N canonical terms, M banned terms | missing}
360
383
  Entities : {loaded — EntityA, EntityB, EntityC | missing}
@@ -558,6 +581,13 @@ Suggest the logical next command based on workflow phase:
558
581
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
559
582
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
560
583
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
584
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
585
+ | /qc-plan | `/qc-design-test {UC-ID}` |
586
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
587
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
588
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
589
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
590
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
561
591
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
562
592
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
563
593
  | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
package/commands/learn.md CHANGED
@@ -230,19 +230,41 @@ If the file does not exist → skip silently.
230
230
 
231
231
  ---
232
232
 
233
- ## Step 3 — [CRITICAL] Load CLAUDE.md
233
+ ## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
234
234
 
235
235
  *This is the highest-priority context — it defines HOW to write code and documents for this project.*
236
236
 
237
- Read `CLAUDE.md`. Extract and store:
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:
238
256
 
239
257
  - **§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
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*
244
262
 
245
- If `CLAUDE.md` does not exist → note it as missing and continue with project-context.yaml data only.
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.
246
268
 
247
269
  ---
248
270
 
@@ -342,7 +364,8 @@ Output exactly this block:
342
364
  [CTX LOADED]
343
365
  Stack : {language} / {framework} / {database}
344
366
  Platform : {active_module} ({platform_type})
345
- 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}
346
369
  Ticket : {ticket_prefix}-
347
370
  Dict : {loaded — N canonical terms, M banned terms | missing}
348
371
  Entities : {loaded — EntityA, EntityB, EntityC | missing}
@@ -511,6 +534,13 @@ Suggest the logical next command based on workflow phase:
511
534
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
512
535
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
513
536
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
537
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
538
+ | /qc-plan | `/qc-design-test {UC-ID}` |
539
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
540
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
541
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
542
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
543
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
514
544
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
515
545
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
516
546
  | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
@@ -230,19 +230,41 @@ If the file does not exist → skip silently.
230
230
 
231
231
  ---
232
232
 
233
- ## Step 3 — [CRITICAL] Load CLAUDE.md
233
+ ## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
234
234
 
235
235
  *This is the highest-priority context — it defines HOW to write code and documents for this project.*
236
236
 
237
- Read `CLAUDE.md`. Extract and store:
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:
238
256
 
239
257
  - **§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
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*
244
262
 
245
- If `CLAUDE.md` does not exist → note it as missing and continue with project-context.yaml data only.
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.
246
268
 
247
269
  ---
248
270
 
@@ -342,7 +364,8 @@ Output exactly this block:
342
364
  [CTX LOADED]
343
365
  Stack : {language} / {framework} / {database}
344
366
  Platform : {active_module} ({platform_type})
345
- 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}
346
369
  Ticket : {ticket_prefix}-
347
370
  Dict : {loaded — N canonical terms, M banned terms | missing}
348
371
  Entities : {loaded — EntityA, EntityB, EntityC | missing}
@@ -468,6 +491,13 @@ Suggest the logical next command based on workflow phase:
468
491
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
469
492
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
470
493
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
494
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
495
+ | /qc-plan | `/qc-design-test {UC-ID}` |
496
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
497
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
498
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
499
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
500
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
471
501
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
472
502
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
473
503
  | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |