@anhth2/spec-driven-dev-plugin 0.9.2 → 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 (223) hide show
  1. package/commands/debug.md +50 -20
  2. package/commands/define-product.md +49 -19
  3. package/commands/{generate-tests.md → dev-gen-test.md} +85 -23
  4. package/commands/{generate-tests.tmpl → dev-gen-test.tmpl} +18 -4
  5. package/{core/commands/run-tests.md → commands/dev-run-test.md} +102 -21
  6. package/commands/{run-tests.tmpl → dev-run-test.tmpl} +35 -2
  7. package/commands/{smoke-test.md → dev-smoke-test.md} +54 -24
  8. package/commands/{smoke-test.tmpl → dev-smoke-test.tmpl} +5 -5
  9. package/commands/fix-bug.md +50 -20
  10. package/commands/generate-bdd.md +78 -21
  11. package/commands/generate-bdd.tmpl +11 -2
  12. package/commands/generate-code.md +123 -23
  13. package/commands/generate-code.tmpl +56 -4
  14. package/commands/generate-design-spec.md +142 -47
  15. package/commands/generate-design-spec.tmpl +93 -28
  16. package/commands/generate-prd.md +49 -19
  17. package/commands/generate-spec-manifest.md +49 -19
  18. package/commands/generate-tech-docs.md +50 -20
  19. package/commands/generate-tech-docs.tmpl +1 -1
  20. package/commands/learn.md +50 -20
  21. package/commands/propose-scenario.md +50 -20
  22. package/commands/propose-scenario.tmpl +1 -1
  23. package/commands/qc-analyze.md +514 -0
  24. package/commands/qc-analyze.tmpl +71 -0
  25. package/commands/qc-design-test.md +510 -0
  26. package/commands/qc-design-test.tmpl +67 -0
  27. package/commands/qc-plan.md +492 -0
  28. package/commands/qc-plan.tmpl +49 -0
  29. package/commands/qc-report.md +491 -0
  30. package/commands/qc-report.tmpl +48 -0
  31. package/commands/qc-review.md +496 -0
  32. package/commands/qc-review.tmpl +53 -0
  33. package/commands/qc-run-test.md +538 -0
  34. package/commands/qc-run-test.tmpl +77 -0
  35. package/commands/refine-prd.md +203 -24
  36. package/commands/refine-prd.tmpl +16 -5
  37. package/commands/report-bug.md +49 -19
  38. package/commands/review-code.md +51 -21
  39. package/commands/review-code.tmpl +1 -1
  40. package/commands/review-context.md +198 -20
  41. package/commands/review-context.tmpl +11 -1
  42. package/commands/review-tech-docs.md +49 -19
  43. package/commands/setup-ai-first.md +14 -7
  44. package/commands/sync.md +30 -20
  45. package/commands/sync.tmpl +16 -13
  46. package/commands/update-framework.md +14 -7
  47. package/commands/validate-traces.md +106 -45
  48. package/commands/validate-traces.tmpl +57 -26
  49. package/core/FRAMEWORK_VERSION +1 -1
  50. package/core/commands/debug.md +50 -20
  51. package/core/commands/define-product.md +49 -19
  52. package/core/commands/{generate-tests.md → dev-gen-test.md} +85 -23
  53. package/{commands/run-tests.md → core/commands/dev-run-test.md} +102 -21
  54. package/core/commands/{smoke-test.md → dev-smoke-test.md} +54 -24
  55. package/core/commands/fix-bug.md +50 -20
  56. package/core/commands/generate-bdd.md +78 -21
  57. package/core/commands/generate-code.md +123 -23
  58. package/core/commands/generate-design-spec.md +142 -47
  59. package/core/commands/generate-prd.md +49 -19
  60. package/core/commands/generate-spec-manifest.md +49 -19
  61. package/core/commands/generate-tech-docs.md +50 -20
  62. package/core/commands/learn.md +50 -20
  63. package/core/commands/propose-scenario.md +50 -20
  64. package/core/commands/qc-analyze.md +514 -0
  65. package/core/commands/qc-design-test.md +510 -0
  66. package/core/commands/qc-plan.md +492 -0
  67. package/core/commands/qc-report.md +491 -0
  68. package/core/commands/qc-review.md +496 -0
  69. package/core/commands/qc-run-test.md +538 -0
  70. package/core/commands/refine-prd.md +203 -24
  71. package/core/commands/report-bug.md +49 -19
  72. package/core/commands/review-code.md +51 -21
  73. package/core/commands/review-context.md +198 -20
  74. package/core/commands/review-tech-docs.md +49 -19
  75. package/core/commands/setup-ai-first.md +14 -7
  76. package/core/commands/sync.md +30 -20
  77. package/core/commands/update-framework.md +14 -7
  78. package/core/commands/validate-traces.md +106 -45
  79. package/core/modules/qc-playwright/stack-profile.yaml +65 -0
  80. package/core/skills/code/SKILL.md +63 -26
  81. package/core/skills/debug/SKILL.md +78 -34
  82. package/core/skills/design-spec/SKILL.md +49 -19
  83. package/core/skills/discovery/SKILL.md +49 -19
  84. package/core/skills/prd/SKILL.md +28 -14
  85. package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
  86. package/core/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
  87. package/core/skills/qc/qa-analyst/business-rules.md +55 -0
  88. package/core/skills/qc/qa-analyst/data-flow.md +60 -0
  89. package/core/skills/qc/qa-analyst/spec-breakdown.md +57 -0
  90. package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
  91. package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
  92. package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
  93. package/core/skills/qc/qa-designer/functional/api.md +45 -0
  94. package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
  95. package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
  96. package/core/skills/qc/qa-designer/integration/api.md +42 -0
  97. package/core/skills/qc/qa-designer/integration/db.md +39 -0
  98. package/core/skills/qc/qa-designer/integration/gui.md +40 -0
  99. package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
  100. package/core/skills/qc/qa-designer/non-functional.md +40 -0
  101. package/core/skills/qc/qa-planner/test-plan.md +120 -0
  102. package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
  103. package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
  104. package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
  105. package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
  106. package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
  107. package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
  108. package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
  109. package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
  110. package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
  111. package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
  112. package/core/skills/qc/qa-runner/e2e.md +49 -0
  113. package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
  114. package/core/skills/qc/qa-runner/functional/api.md +35 -0
  115. package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
  116. package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
  117. package/core/skills/qc/qa-runner/integration.md +47 -0
  118. package/core/skills/qc/qa-runner/non-functional.md +49 -0
  119. package/core/skills/qc/qa-runner/report/report.md +37 -0
  120. package/core/skills/setup-ai-first/SKILL.md +14 -7
  121. package/core/skills/spec/SKILL.md +28 -14
  122. package/core/skills/test/SKILL.md +121 -54
  123. package/core/steps/capture-lesson.md +1 -1
  124. package/core/steps/context-loader.md +35 -12
  125. package/core/steps/report-footer.md +14 -7
  126. package/core/steps/review-fanout.md +138 -0
  127. package/core/steps/spawn-agent.md +1 -1
  128. package/core/steps/trace-mirror.md +18 -0
  129. package/core/templates/design-spec.template.md +16 -8
  130. package/core/templates/project-context.yaml +8 -0
  131. package/docs/01-getting-started/README.md +19 -0
  132. package/docs/01-getting-started/core-concepts.md +102 -0
  133. package/docs/01-getting-started/installation.md +154 -0
  134. package/docs/01-getting-started/quickstart.md +85 -0
  135. package/docs/02-guides/README.md +27 -0
  136. package/docs/02-guides/developer/README.md +46 -0
  137. package/docs/02-guides/developer/bdd-and-trace.md +123 -0
  138. package/docs/02-guides/developer/commands.md +76 -0
  139. package/docs/02-guides/developer/pr-checklist.md +15 -0
  140. package/docs/02-guides/developer/scenarios.md +448 -0
  141. package/docs/02-guides/developer/workflow.md +59 -0
  142. package/docs/02-guides/product-owner/README.md +77 -0
  143. package/docs/02-guides/product-owner/commands.md +30 -0
  144. package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
  145. package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
  146. package/docs/02-guides/product-owner/scenarios.md +357 -0
  147. package/docs/02-guides/qc-automation.md +92 -0
  148. package/docs/02-guides/tester/README.md +72 -0
  149. package/docs/02-guides/tester/bug-reporting.md +117 -0
  150. package/docs/02-guides/tester/reading-specs.md +79 -0
  151. package/docs/02-guides/tester/scenarios.md +186 -0
  152. package/docs/02-guides/tester/spec-manifest.md +124 -0
  153. package/docs/02-guides/tester/test-checklist.md +31 -0
  154. package/docs/02-guides/tester/workflow.md +79 -0
  155. package/docs/03-concepts/README.md +19 -0
  156. package/docs/03-concepts/architecture.md +243 -0
  157. package/docs/03-concepts/pipeline.md +249 -0
  158. package/docs/03-concepts/traceability.md +148 -0
  159. package/docs/04-operations/README.md +33 -0
  160. package/docs/04-operations/bug-flow.md +321 -0
  161. package/docs/04-operations/publishing.md +137 -0
  162. package/docs/04-operations/sync-and-update.md +328 -0
  163. package/docs/05-reference/README.md +29 -0
  164. package/docs/05-reference/commands.md +229 -0
  165. package/docs/05-reference/modules.md +110 -0
  166. package/docs/05-reference/trace-schema.md +146 -0
  167. package/docs/README.md +51 -0
  168. package/modules/qc-playwright/stack-profile.yaml +65 -0
  169. package/package.json +2 -2
  170. package/skills/code/SKILL.md +63 -26
  171. package/skills/debug/SKILL.md +78 -34
  172. package/skills/debug/SKILL.tmpl +1 -1
  173. package/skills/design-spec/SKILL.md +49 -19
  174. package/skills/discovery/SKILL.md +49 -19
  175. package/skills/prd/SKILL.md +28 -14
  176. package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
  177. package/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
  178. package/skills/qc/qa-analyst/business-rules.md +55 -0
  179. package/skills/qc/qa-analyst/data-flow.md +60 -0
  180. package/skills/qc/qa-analyst/spec-breakdown.md +57 -0
  181. package/skills/qc/qa-designer/e2e/journey.md +41 -0
  182. package/skills/qc/qa-designer/exploratory/charter.md +68 -0
  183. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
  184. package/skills/qc/qa-designer/functional/api.md +45 -0
  185. package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
  186. package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
  187. package/skills/qc/qa-designer/integration/api.md +42 -0
  188. package/skills/qc/qa-designer/integration/db.md +39 -0
  189. package/skills/qc/qa-designer/integration/gui.md +40 -0
  190. package/skills/qc/qa-designer/integration/kafka.md +40 -0
  191. package/skills/qc/qa-designer/non-functional.md +40 -0
  192. package/skills/qc/qa-planner/test-plan.md +120 -0
  193. package/skills/qc/qa-reviewer/script/e2e.md +87 -0
  194. package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
  195. package/skills/qc/qa-reviewer/script/functional.md +101 -0
  196. package/skills/qc/qa-reviewer/script/integration.md +91 -0
  197. package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
  198. package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
  199. package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
  200. package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
  201. package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
  202. package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
  203. package/skills/qc/qa-runner/e2e.md +49 -0
  204. package/skills/qc/qa-runner/exploratory/session.md +36 -0
  205. package/skills/qc/qa-runner/functional/api.md +35 -0
  206. package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
  207. package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
  208. package/skills/qc/qa-runner/integration.md +47 -0
  209. package/skills/qc/qa-runner/non-functional.md +49 -0
  210. package/skills/qc/qa-runner/report/report.md +37 -0
  211. package/skills/setup-ai-first/SKILL.md +14 -7
  212. package/skills/spec/SKILL.md +28 -14
  213. package/skills/test/SKILL.md +121 -54
  214. package/skills/test/SKILL.tmpl +9 -9
  215. package/steps/capture-lesson.md +1 -1
  216. package/steps/context-loader.md +35 -12
  217. package/steps/report-footer.md +14 -7
  218. package/steps/review-fanout.md +138 -0
  219. package/steps/spawn-agent.md +1 -1
  220. package/steps/trace-mirror.md +18 -0
  221. package/templates/design-spec.template.md +16 -8
  222. package/templates/project-context.yaml +8 -0
  223. package/ARCHITECTURE.md +0 -247
package/commands/debug.md CHANGED
@@ -166,7 +166,7 @@ If `services` section is present:
166
166
 
167
167
  **2. Route to service** — if active domain matches a key in `services`:
168
168
  - Override `paths.specs_dir` → `services.{domain}.specs_dir`
169
- - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir`
169
+ - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, the tech-design (API contract) is a cross-team artifact and must live in the shared spec repo (handled in step 4), so leave `tech_docs_dir` for step 4 to route — do NOT pin it per-service here.
170
170
  - Store `active_service` = `services.{domain}.path`
171
171
  - Store `active_service_module` = `services.{domain}.module`
172
172
  - If service has its own `module` → use it as `active_module` (overrides `tech_stack.module`)
@@ -178,7 +178,7 @@ If `services` section is present:
178
178
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
179
179
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
180
180
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
181
- - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **only if step 2 did not already route it to a service** (multi-service umbrellas keep per-service tech-docs). This publishes the BE-authored API contract into the shared spec repo so FE/App can read it via the spec submodule at `/generate-code --phase=integration`.
181
+ - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **always when `spec_source` is set** (step 2 no longer pins tech-docs per-service in this case). The tech-design IS the cross-team API contract: BE authors it here, and FE/App read it from the same spec submodule at `/generate-code --phase=integration`. *(Per-service tech-docs only happen when there is no `spec_source` — a pure multi-service BE repo with no shared spec module.)*
182
182
  - Override `paths.domain_knowledge_dir` → `{spec_source}/specs/domain-knowledge`
183
183
  - Override `paths.business_dictionary` → `{spec_source}/specs/domain-knowledge/business-dictionary.md`
184
184
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
@@ -209,7 +209,7 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
209
209
  | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
210
210
 
211
211
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
212
- - Shell commands (`/run-tests`, `/generate-tests`) run **from within** `service_root`
212
+ - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
213
213
  - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
214
214
 
215
215
  **4. If service config not found** — keep umbrella defaults, still set `service_root = {active_service}` (path anchor is always needed even without a config override).
@@ -224,19 +224,41 @@ If the file does not exist → skip silently.
224
224
 
225
225
  ---
226
226
 
227
- ## Step 3 — [CRITICAL] Load CLAUDE.md
227
+ ## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
228
228
 
229
229
  *This is the highest-priority context — it defines HOW to write code and documents for this project.*
230
230
 
231
- Read `CLAUDE.md`. Extract and store:
231
+ CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
232
+ architecture/coding standards compose correctly. The agent always sits at the umbrella
233
+ root, but the implementation code lives in a service submodule with its OWN stack,
234
+ architecture, and conventions — so the service's CLAUDE.md must win for code generation.
235
+
236
+ **Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
237
+ Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
238
+ whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
239
+ single-service mode) the project's only architecture + coding standards.
240
+
241
+ **Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
242
+ *Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
243
+ Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
244
+ the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
245
+ Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
246
+ coding standards, and error handling. Layer-1 values that the service does not redefine
247
+ (e.g. git conventions, banned patterns shared org-wide) remain in effect.
248
+
249
+ From the **merged** result, extract and store:
232
250
 
233
251
  - **§1 Project Overview** → project name, language, framework, build/test commands, domains
234
- - **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules
235
- - **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns
236
- - **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name
237
- - **§7 Git Conventions** → branch naming pattern, commit message format
252
+ - **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
253
+ - **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
254
+ - **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
255
+ - **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
238
256
 
239
- If `CLAUDE.md` does not exist → note it as missing and continue with project-context.yaml data only.
257
+ **Resolution rules:**
258
+ - If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
259
+ - If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
260
+ - 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).
261
+ - If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
240
262
 
241
263
  ---
242
264
 
@@ -302,7 +324,7 @@ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
302
324
 
303
325
  If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
304
326
 
305
- These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (generate-tests, debug, fix-bug, smoke-test).
327
+ These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (dev-gen-test, debug, fix-bug, dev-smoke-test).
306
328
 
307
329
  ---
308
330
 
@@ -336,7 +358,8 @@ Output exactly this block:
336
358
  [CTX LOADED]
337
359
  Stack : {language} / {framework} / {database}
338
360
  Platform : {active_module} ({platform_type})
339
- Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
361
+ Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
362
+ CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
340
363
  Ticket : {ticket_prefix}-
341
364
  Dict : {loaded — N canonical terms, M banned terms | missing}
342
365
  Entities : {loaded — EntityA, EntityB, EntityC | missing}
@@ -604,15 +627,22 @@ Suggest the logical next command based on workflow phase:
604
627
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
605
628
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
606
629
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
630
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
631
+ | /qc-plan | `/qc-design-test {UC-ID}` |
632
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
633
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
634
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
635
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
636
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
607
637
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
608
638
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
609
- | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
610
- | /generate-tests | `/run-tests {UC-ID}` |
611
- | /run-tests (passing) | `/review-code {UC-ID}` |
612
- | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
613
- | /review-code | `/smoke-test {UC-ID}` or create PR |
614
- | /smoke-test | Create PR and link to ticket |
615
- | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
639
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
640
+ | /dev-gen-test | `/dev-run-test {UC-ID}` |
641
+ | /dev-run-test (passing) | `/review-code {UC-ID}` |
642
+ | /dev-run-test (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
643
+ | /review-code | `/dev-smoke-test {UC-ID}` or create PR |
644
+ | /dev-smoke-test | Create PR and link to ticket |
645
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; all OK → create PR |
616
646
  | /fix-bug | Create PR and link to ticket |
617
647
  | /debug | `/fix-bug {ticket-id}` if fix needed |
618
648
  | /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap → `/propose-scenario {UC-ID}` |
@@ -723,7 +753,7 @@ If `lessons_path` does not exist, create it with this header first:
723
753
  | code-gen | /generate-code output |
724
754
  | bdd | /generate-bdd output |
725
755
  | tech-docs | /generate-tech-docs output |
726
- | tests | /generate-tests output |
756
+ | tests | /dev-gen-test output |
727
757
  | prd | /generate-prd, /refine-prd output |
728
758
  | general | every command |
729
759
 
@@ -163,7 +163,7 @@ If `services` section is present:
163
163
 
164
164
  **2. Route to service** — if active domain matches a key in `services`:
165
165
  - Override `paths.specs_dir` → `services.{domain}.specs_dir`
166
- - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir`
166
+ - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, the tech-design (API contract) is a cross-team artifact and must live in the shared spec repo (handled in step 4), so leave `tech_docs_dir` for step 4 to route — do NOT pin it per-service here.
167
167
  - Store `active_service` = `services.{domain}.path`
168
168
  - Store `active_service_module` = `services.{domain}.module`
169
169
  - If service has its own `module` → use it as `active_module` (overrides `tech_stack.module`)
@@ -175,7 +175,7 @@ If `services` section is present:
175
175
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
176
176
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
177
177
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
178
- - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **only if step 2 did not already route it to a service** (multi-service umbrellas keep per-service tech-docs). This publishes the BE-authored API contract into the shared spec repo so FE/App can read it via the spec submodule at `/generate-code --phase=integration`.
178
+ - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **always when `spec_source` is set** (step 2 no longer pins tech-docs per-service in this case). The tech-design IS the cross-team API contract: BE authors it here, and FE/App read it from the same spec submodule at `/generate-code --phase=integration`. *(Per-service tech-docs only happen when there is no `spec_source` — a pure multi-service BE repo with no shared spec module.)*
179
179
  - Override `paths.domain_knowledge_dir` → `{spec_source}/specs/domain-knowledge`
180
180
  - Override `paths.business_dictionary` → `{spec_source}/specs/domain-knowledge/business-dictionary.md`
181
181
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
@@ -206,7 +206,7 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
206
206
  | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
207
207
 
208
208
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
209
- - Shell commands (`/run-tests`, `/generate-tests`) run **from within** `service_root`
209
+ - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
210
210
  - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
211
211
 
212
212
  **4. If service config not found** — keep umbrella defaults, still set `service_root = {active_service}` (path anchor is always needed even without a config override).
@@ -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
 
@@ -299,7 +321,7 @@ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
299
321
 
300
322
  If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
301
323
 
302
- These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (generate-tests, debug, fix-bug, smoke-test).
324
+ These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (dev-gen-test, debug, fix-bug, dev-smoke-test).
303
325
 
304
326
  ---
305
327
 
@@ -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}
@@ -538,15 +561,22 @@ Suggest the logical next command based on workflow phase:
538
561
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
539
562
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
540
563
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
564
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
565
+ | /qc-plan | `/qc-design-test {UC-ID}` |
566
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
567
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
568
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
569
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
570
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
541
571
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
542
572
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
543
- | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
544
- | /generate-tests | `/run-tests {UC-ID}` |
545
- | /run-tests (passing) | `/review-code {UC-ID}` |
546
- | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
547
- | /review-code | `/smoke-test {UC-ID}` or create PR |
548
- | /smoke-test | Create PR and link to ticket |
549
- | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
573
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
574
+ | /dev-gen-test | `/dev-run-test {UC-ID}` |
575
+ | /dev-run-test (passing) | `/review-code {UC-ID}` |
576
+ | /dev-run-test (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
577
+ | /review-code | `/dev-smoke-test {UC-ID}` or create PR |
578
+ | /dev-smoke-test | Create PR and link to ticket |
579
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; all OK → create PR |
550
580
  | /fix-bug | Create PR and link to ticket |
551
581
  | /debug | `/fix-bug {ticket-id}` if fix needed |
552
582
  | /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap → `/propose-scenario {UC-ID}` |
@@ -1,4 +1,10 @@
1
- # /generate-tests — Generate Unit & Integration Tests
1
+ # /dev-gen-test — Generate Dev Self-Check Tests
2
+
3
+ > **Scope — dev self-check (smoke), not the official test suite.** These tests let the
4
+ > developer quickly verify their own generated code against the BDD scenarios. They are a
5
+ > developer self-check, **not** the QC/dev-team's authoritative test suite (that has its
6
+ > own separate flow, implemented elsewhere). Results surface to the Living Docs dashboard
7
+ > as a **dev self-test** signal so QC can see the dev already ran their own checks.
2
8
 
3
9
  ## Gate
4
10
  # Gate — Universal Entry Procedure
@@ -163,7 +169,7 @@ If `services` section is present:
163
169
 
164
170
  **2. Route to service** — if active domain matches a key in `services`:
165
171
  - Override `paths.specs_dir` → `services.{domain}.specs_dir`
166
- - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir`
172
+ - Override `paths.tech_docs_dir` → `services.{domain}.tech_docs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, the tech-design (API contract) is a cross-team artifact and must live in the shared spec repo (handled in step 4), so leave `tech_docs_dir` for step 4 to route — do NOT pin it per-service here.
167
173
  - Store `active_service` = `services.{domain}.path`
168
174
  - Store `active_service_module` = `services.{domain}.module`
169
175
  - If service has its own `module` → use it as `active_module` (overrides `tech_stack.module`)
@@ -175,7 +181,7 @@ If `services` section is present:
175
181
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
176
182
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
177
183
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
178
- - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **only if step 2 did not already route it to a service** (multi-service umbrellas keep per-service tech-docs). This publishes the BE-authored API contract into the shared spec repo so FE/App can read it via the spec submodule at `/generate-code --phase=integration`.
184
+ - Override `paths.tech_docs_dir` → `{spec_source}/specs/tech-docs` — **always when `spec_source` is set** (step 2 no longer pins tech-docs per-service in this case). The tech-design IS the cross-team API contract: BE authors it here, and FE/App read it from the same spec submodule at `/generate-code --phase=integration`. *(Per-service tech-docs only happen when there is no `spec_source` — a pure multi-service BE repo with no shared spec module.)*
179
185
  - Override `paths.domain_knowledge_dir` → `{spec_source}/specs/domain-knowledge`
180
186
  - Override `paths.business_dictionary` → `{spec_source}/specs/domain-knowledge/business-dictionary.md`
181
187
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
@@ -206,7 +212,7 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
206
212
  | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
207
213
 
208
214
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
209
- - Shell commands (`/run-tests`, `/generate-tests`) run **from within** `service_root`
215
+ - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
210
216
  - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
211
217
 
212
218
  **4. If service config not found** — keep umbrella defaults, still set `service_root = {active_service}` (path anchor is always needed even without a config override).
@@ -221,19 +227,41 @@ If the file does not exist → skip silently.
221
227
 
222
228
  ---
223
229
 
224
- ## Step 3 — [CRITICAL] Load CLAUDE.md
230
+ ## Step 3 — [CRITICAL] Load CLAUDE.md (layered: root + service overlay)
225
231
 
226
232
  *This is the highest-priority context — it defines HOW to write code and documents for this project.*
227
233
 
228
- Read `CLAUDE.md`. Extract and store:
234
+ CLAUDE.md is loaded in **two layers** so umbrella-wide rules and service-specific
235
+ architecture/coding standards compose correctly. The agent always sits at the umbrella
236
+ root, but the implementation code lives in a service submodule with its OWN stack,
237
+ architecture, and conventions — so the service's CLAUDE.md must win for code generation.
238
+
239
+ **Layer 1 — [BASE] Root CLAUDE.md (umbrella-wide).**
240
+ Read `CLAUDE.md` at the repo root. Treat its contents as the **shared baseline** for the
241
+ whole umbrella — git conventions, data-protection posture, cross-cutting rules, and (in
242
+ single-service mode) the project's only architecture + coding standards.
243
+
244
+ **Layer 2 — [OVERLAY] Service CLAUDE.md (umbrella mode only).**
245
+ *Run only if `service_root` was set in Step 1.6 (i.e. a real service was routed to).*
246
+ Read `{service_root}/CLAUDE.md`. This file defines the architecture + coding standards of
247
+ the **actual stack being implemented** (e.g. `user-service` = java-spring, `web` = nextjs).
248
+ Overlay it on top of Layer 1: **on any conflict, the service value WINS** for architecture,
249
+ coding standards, and error handling. Layer-1 values that the service does not redefine
250
+ (e.g. git conventions, banned patterns shared org-wide) remain in effect.
251
+
252
+ From the **merged** result, extract and store:
229
253
 
230
254
  - **§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
255
+ - **§2 Architecture** → layer order (e.g., Controller → Facade → Service → Repository), architectural rules — *service overlay wins*
256
+ - **§3 Coding Standards** → naming conventions (classes, methods), response wrapper type, forbidden patterns — *service overlay wins*
257
+ - **§5 Error Handling** → exception types, HTTP status code mapping, not-found exception class name — *service overlay wins*
258
+ - **§7 Git Conventions** → branch naming pattern, commit message format — *root baseline unless service redefines*
235
259
 
236
- If `CLAUDE.md` does not exist → note it as missing and continue with project-context.yaml data only.
260
+ **Resolution rules:**
261
+ - If both layers exist → merge as above; record `claude_md_source = root + {service_root}`.
262
+ - If only the service overlay exists (no root CLAUDE.md) → use the service file alone; `claude_md_source = {service_root}`.
263
+ - 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).
264
+ - If neither exists → note CLAUDE.md as missing and continue with project-context.yaml data only.
237
265
 
238
266
  ---
239
267
 
@@ -299,7 +327,7 @@ active_module = tech_stack.module (e.g. "java-spring", "react", "flutter")
299
327
 
300
328
  If `tech_stack.module` is blank or not recognized → set `platform_type = "unknown"` and flag as ⚠️ in the Step 7 recap.
301
329
 
302
- These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (generate-tests, debug, fix-bug, smoke-test).
330
+ These two variables (`active_module`, `platform_type`) are the canonical source for all branching logic in commands that need platform-specific behavior (dev-gen-test, debug, fix-bug, dev-smoke-test).
303
331
 
304
332
  ---
305
333
 
@@ -333,7 +361,8 @@ Output exactly this block:
333
361
  [CTX LOADED]
334
362
  Stack : {language} / {framework} / {database}
335
363
  Platform : {active_module} ({platform_type})
336
- Layers : {layer order from CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
364
+ Layers : {layer order from merged CLAUDE.md §2, e.g., Controller → Facade → Service → Repository}
365
+ CLAUDE.md : {root + {service_root} | {service_root} only | root only | ⚠️ service overlay MISSING — using root | missing}
337
366
  Ticket : {ticket_prefix}-
338
367
  Dict : {loaded — N canonical terms, M banned terms | missing}
339
368
  Entities : {loaded — EntityA, EntityB, EntityC | missing}
@@ -810,9 +839,33 @@ After generating all test files, update `{paths.trace_dir}/{UC-ID}.tsv` — for
810
839
  |--------|-------|
811
840
  | `test_count` | number of test methods covering this SC |
812
841
  | `test_classes` | comma-separated test class / describe-block names |
842
+ | `dev_selftest` | `not_run` (tests now exist but have not been executed — `/dev-run-test` sets pass/fail) |
813
843
  | `last_updated` | today `YYYY-MM-DD` |
814
844
 
815
- Leave all other columns unchanged.
845
+ Leave all other columns unchanged (including `dev_selftest_at`, which `/dev-run-test` owns, and `qc_status`/`qc_run_at`, which `/qc-run-test` owns).
846
+
847
+ ---
848
+
849
+ ## Refresh Panel Mirror
850
+ # Refresh Living Docs panel mirror *(local, umbrella mode)*
851
+
852
+ *Skip entirely in single-service mode (no `services` and no `setup.spec_source`) — there
853
+ the service `.trace/` IS the panel location, so nothing to mirror.*
854
+
855
+ After updating the authoritative service TSV(s) at `{paths.trace_dir}`:
856
+
857
+ 1. Resolve `panel_mirror = ./.trace` at the **current workspace root** (where this command runs).
858
+ 2. If `panel_mirror` resolves to a different path than `{paths.trace_dir}`, copy each
859
+ just-updated `{UC-ID}.tsv` → `{panel_mirror}/{service-name}/{UC-ID}.tsv`
860
+ (create the dir; overwrite). Use `active_service` for `{service-name}`.
861
+
862
+ This keeps the open workspace's Living Docs panel current **between syncs** — it is a
863
+ **local convenience mirror only**. The *canonical* report in the spec module
864
+ (`{spec_source}/.living-docs/`) and the merged `trace-report.json` are rebuilt by
865
+ `/sync` or `/validate-traces` (those need every service's data, so a single per-UC
866
+ command cannot produce them). For orchestrated commands, do this once in the orchestrator
867
+ after all sub-agents return — not inside each sub-agent.
868
+
816
869
 
817
870
  ---
818
871
 
@@ -854,15 +907,22 @@ Suggest the logical next command based on workflow phase:
854
907
  | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
855
908
  | /generate-bdd | `/review-context {feature-file}` to verify coverage |
856
909
  | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
910
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
911
+ | /qc-plan | `/qc-design-test {UC-ID}` |
912
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
913
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
914
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
915
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
916
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
857
917
  | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
858
918
  | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
859
- | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/generate-tests {UC-ID}` |
860
- | /generate-tests | `/run-tests {UC-ID}` |
861
- | /run-tests (passing) | `/review-code {UC-ID}` |
862
- | /run-tests (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
863
- | /review-code | `/smoke-test {UC-ID}` or create PR |
864
- | /smoke-test | Create PR and link to ticket |
865
- | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/generate-tests {UC-ID}`; all OK → create PR |
919
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
920
+ | /dev-gen-test | `/dev-run-test {UC-ID}` |
921
+ | /dev-run-test (passing) | `/review-code {UC-ID}` |
922
+ | /dev-run-test (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
923
+ | /review-code | `/dev-smoke-test {UC-ID}` or create PR |
924
+ | /dev-smoke-test | Create PR and link to ticket |
925
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; all OK → create PR |
866
926
  | /fix-bug | Create PR and link to ticket |
867
927
  | /debug | `/fix-bug {ticket-id}` if fix needed |
868
928
  | /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap → `/propose-scenario {UC-ID}` |
@@ -881,9 +941,11 @@ Next : {suggested command with example arguments}
881
941
 
882
942
 
883
943
  ```
884
- /generate-tests Complete — {UC-ID} ({active_module})
944
+ /dev-gen-test Complete — {UC-ID} ({active_module})
885
945
  ✅ {TestClass1} ({N} tests)
886
946
  ✅ {TestClass2} ({N} tests)
887
947
  Trace: {paths.trace_dir}/{UC-ID}.tsv updated
888
- Next: /run-tests {UC-ID}
948
+ Next: /dev-run-test {UC-ID}
949
+
950
+ 📊 Living Docs: run /validate-traces (or /sync) to push this trace to the spec-module dashboard.
889
951
  ```
@@ -1,4 +1,10 @@
1
- # /generate-tests — Generate Unit & Integration Tests
1
+ # /dev-gen-test — Generate Dev Self-Check Tests
2
+
3
+ > **Scope — dev self-check (smoke), not the official test suite.** These tests let the
4
+ > developer quickly verify their own generated code against the BDD scenarios. They are a
5
+ > developer self-check, **not** the QC/dev-team's authoritative test suite (that has its
6
+ > own separate flow, implemented elsewhere). Results surface to the Living Docs dashboard
7
+ > as a **dev self-test** signal so QC can see the dev already ran their own checks.
2
8
 
3
9
  ## Gate
4
10
  {{include:steps/gate.md}}
@@ -457,9 +463,15 @@ After generating all test files, update `{paths.trace_dir}/{UC-ID}.tsv` — for
457
463
  |--------|-------|
458
464
  | `test_count` | number of test methods covering this SC |
459
465
  | `test_classes` | comma-separated test class / describe-block names |
466
+ | `dev_selftest` | `not_run` (tests now exist but have not been executed — `/dev-run-test` sets pass/fail) |
460
467
  | `last_updated` | today `YYYY-MM-DD` |
461
468
 
462
- Leave all other columns unchanged.
469
+ Leave all other columns unchanged (including `dev_selftest_at`, which `/dev-run-test` owns, and `qc_status`/`qc_run_at`, which `/qc-run-test` owns).
470
+
471
+ ---
472
+
473
+ ## Refresh Panel Mirror
474
+ {{include:steps/trace-mirror.md}}
463
475
 
464
476
  ---
465
477
 
@@ -468,9 +480,11 @@ Leave all other columns unchanged.
468
480
  {{include:steps/report-footer.md}}
469
481
 
470
482
  ```
471
- /generate-tests Complete — {UC-ID} ({active_module})
483
+ /dev-gen-test Complete — {UC-ID} ({active_module})
472
484
  ✅ {TestClass1} ({N} tests)
473
485
  ✅ {TestClass2} ({N} tests)
474
486
  Trace: {paths.trace_dir}/{UC-ID}.tsv updated
475
- Next: /run-tests {UC-ID}
487
+ Next: /dev-run-test {UC-ID}
488
+
489
+ 📊 Living Docs: run /validate-traces (or /sync) to push this trace to the spec-module dashboard.
476
490
  ```