@anhth2/spec-driven-dev-plugin 0.11.0 → 0.14.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 (173) hide show
  1. package/commands/debug.md +47 -7
  2. package/commands/define-product.md +47 -7
  3. package/commands/dev-gen-test.md +65 -17
  4. package/commands/dev-run-test.md +66 -18
  5. package/commands/dev-run-test.tmpl +1 -1
  6. package/commands/dev-smoke-test.md +47 -7
  7. package/commands/fix-bug.md +83 -13
  8. package/commands/fix-bug.tmpl +36 -6
  9. package/commands/generate-bdd.md +74 -21
  10. package/commands/generate-bdd.tmpl +9 -4
  11. package/commands/generate-code.md +118 -35
  12. package/commands/generate-code.tmpl +53 -18
  13. package/commands/generate-design-spec.md +47 -7
  14. package/commands/generate-prd.md +47 -7
  15. package/commands/generate-spec-manifest.md +47 -7
  16. package/commands/generate-tech-docs.md +234 -20
  17. package/commands/generate-tech-docs.tmpl +187 -13
  18. package/commands/learn.md +47 -7
  19. package/commands/map-testids.md +564 -0
  20. package/commands/map-testids.tmpl +81 -0
  21. package/commands/propose-scenario.md +78 -18
  22. package/commands/propose-scenario.tmpl +31 -11
  23. package/commands/qc-analyze.md +67 -12
  24. package/commands/qc-analyze.tmpl +20 -5
  25. package/commands/qc-design-test.md +51 -10
  26. package/commands/qc-design-test.tmpl +4 -3
  27. package/commands/qc-plan.md +50 -10
  28. package/commands/qc-plan.tmpl +3 -3
  29. package/commands/qc-report.md +60 -8
  30. package/commands/qc-report.tmpl +13 -1
  31. package/commands/qc-review.md +49 -9
  32. package/commands/qc-review.tmpl +2 -2
  33. package/commands/qc-run-test.md +75 -20
  34. package/commands/qc-run-test.tmpl +10 -3
  35. package/commands/refine-prd.md +47 -7
  36. package/commands/report-bug.md +63 -9
  37. package/commands/report-bug.tmpl +16 -2
  38. package/commands/review-code.md +47 -7
  39. package/commands/review-context.md +47 -7
  40. package/commands/review-tech-docs.md +50 -9
  41. package/commands/review-tech-docs.tmpl +3 -2
  42. package/commands/setup-ai-first.md +37 -4
  43. package/commands/setup-ai-first.tmpl +2 -2
  44. package/commands/sync.md +47 -11
  45. package/commands/sync.tmpl +12 -9
  46. package/commands/update-framework.md +35 -2
  47. package/commands/validate-traces.md +98 -40
  48. package/commands/validate-traces.tmpl +51 -33
  49. package/core/FRAMEWORK_VERSION +1 -1
  50. package/core/commands/debug.md +47 -7
  51. package/core/commands/define-product.md +47 -7
  52. package/core/commands/dev-gen-test.md +65 -17
  53. package/core/commands/dev-run-test.md +66 -18
  54. package/core/commands/dev-smoke-test.md +47 -7
  55. package/core/commands/fix-bug.md +83 -13
  56. package/core/commands/generate-bdd.md +74 -21
  57. package/core/commands/generate-code.md +118 -35
  58. package/core/commands/generate-design-spec.md +47 -7
  59. package/core/commands/generate-prd.md +47 -7
  60. package/core/commands/generate-spec-manifest.md +47 -7
  61. package/core/commands/generate-tech-docs.md +234 -20
  62. package/core/commands/learn.md +47 -7
  63. package/core/commands/map-testids.md +564 -0
  64. package/core/commands/propose-scenario.md +78 -18
  65. package/core/commands/qc-analyze.md +67 -12
  66. package/core/commands/qc-design-test.md +51 -10
  67. package/core/commands/qc-plan.md +50 -10
  68. package/core/commands/qc-report.md +60 -8
  69. package/core/commands/qc-review.md +49 -9
  70. package/core/commands/qc-run-test.md +75 -20
  71. package/core/commands/refine-prd.md +47 -7
  72. package/core/commands/report-bug.md +63 -9
  73. package/core/commands/review-code.md +47 -7
  74. package/core/commands/review-context.md +47 -7
  75. package/core/commands/review-tech-docs.md +50 -9
  76. package/core/commands/setup-ai-first.md +37 -4
  77. package/core/commands/sync.md +47 -11
  78. package/core/commands/update-framework.md +35 -2
  79. package/core/commands/validate-traces.md +98 -40
  80. package/core/modules/qc-playwright/stack-profile.yaml +4 -3
  81. package/core/skills/code/SKILL.md +82 -9
  82. package/core/skills/debug/SKILL.md +117 -11
  83. package/core/skills/design-spec/SKILL.md +47 -7
  84. package/core/skills/discovery/SKILL.md +47 -7
  85. package/core/skills/prd/SKILL.md +70 -4
  86. package/core/skills/qc/qa-analyst/acceptance-criteria.md +5 -1
  87. package/core/skills/qc/qa-analyst/business-rules.md +6 -2
  88. package/core/skills/qc/qa-analyst/data-flow.md +6 -2
  89. package/core/skills/qc/qa-analyst/spec-breakdown.md +7 -3
  90. package/core/skills/qc/qa-designer/e2e/journey.md +1 -1
  91. package/core/skills/qc/qa-designer/exploratory/charter.md +2 -2
  92. package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +1 -1
  93. package/core/skills/qc/qa-designer/functional/api.md +1 -1
  94. package/core/skills/qc/qa-designer/functional/gui-feature.md +1 -1
  95. package/core/skills/qc/qa-designer/functional/gui-screen.md +1 -1
  96. package/core/skills/qc/qa-designer/integration/api.md +1 -1
  97. package/core/skills/qc/qa-designer/integration/db.md +1 -1
  98. package/core/skills/qc/qa-designer/integration/gui.md +1 -1
  99. package/core/skills/qc/qa-designer/integration/kafka.md +1 -1
  100. package/core/skills/qc/qa-designer/non-functional.md +1 -1
  101. package/core/skills/qc/qa-planner/test-plan.md +4 -4
  102. package/core/skills/qc/qa-runner/exploratory/session.md +2 -2
  103. package/core/skills/setup-ai-first/SKILL.md +35 -2
  104. package/core/skills/spec/SKILL.md +70 -4
  105. package/core/skills/test/SKILL.md +129 -16
  106. package/core/steps/context-loader.md +12 -5
  107. package/core/steps/report-footer.md +35 -2
  108. package/core/steps/trace-mirror.md +18 -10
  109. package/core/templates/project-context.yaml +27 -6
  110. package/docs/01-getting-started/core-concepts.md +7 -7
  111. package/docs/01-getting-started/installation.md +4 -2
  112. package/docs/01-getting-started/quickstart.md +1 -1
  113. package/docs/02-guides/README.md +1 -2
  114. package/docs/02-guides/developer/README.md +1 -1
  115. package/docs/02-guides/developer/bdd-and-trace.md +10 -8
  116. package/docs/02-guides/developer/commands.md +4 -4
  117. package/docs/02-guides/developer/scenarios.md +26 -14
  118. package/docs/02-guides/developer/workflow.md +81 -19
  119. package/docs/02-guides/product-owner/README.md +6 -4
  120. package/docs/02-guides/product-owner/commands.md +1 -1
  121. package/docs/02-guides/product-owner/scenarios.md +80 -1
  122. package/docs/02-guides/tester/README.md +13 -10
  123. package/docs/02-guides/tester/bug-reporting.md +2 -2
  124. package/docs/02-guides/tester/qc-automation.md +165 -0
  125. package/docs/02-guides/tester/reading-specs.md +4 -4
  126. package/docs/02-guides/tester/scenarios.md +5 -5
  127. package/docs/02-guides/tester/spec-manifest.md +17 -12
  128. package/docs/02-guides/tester/test-checklist.md +3 -3
  129. package/docs/02-guides/tester/workflow.md +12 -14
  130. package/docs/03-concepts/architecture.md +7 -4
  131. package/docs/03-concepts/pipeline.md +37 -12
  132. package/docs/03-concepts/traceability.md +19 -18
  133. package/docs/04-operations/README.md +1 -1
  134. package/docs/04-operations/bug-flow.md +46 -5
  135. package/docs/04-operations/sync-and-update.md +186 -24
  136. package/docs/05-reference/README.md +3 -0
  137. package/docs/05-reference/command-cheatsheet.md +147 -0
  138. package/docs/05-reference/commands.md +73 -70
  139. package/docs/05-reference/modules.md +4 -4
  140. package/docs/05-reference/trace-schema.md +23 -16
  141. package/docs/README.md +3 -5
  142. package/modules/qc-playwright/stack-profile.yaml +4 -3
  143. package/package.json +1 -1
  144. package/skills/code/SKILL.md +82 -9
  145. package/skills/debug/SKILL.md +117 -11
  146. package/skills/design-spec/SKILL.md +47 -7
  147. package/skills/discovery/SKILL.md +47 -7
  148. package/skills/prd/SKILL.md +70 -4
  149. package/skills/qc/qa-analyst/acceptance-criteria.md +5 -1
  150. package/skills/qc/qa-analyst/business-rules.md +6 -2
  151. package/skills/qc/qa-analyst/data-flow.md +6 -2
  152. package/skills/qc/qa-analyst/spec-breakdown.md +7 -3
  153. package/skills/qc/qa-designer/e2e/journey.md +1 -1
  154. package/skills/qc/qa-designer/exploratory/charter.md +2 -2
  155. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +1 -1
  156. package/skills/qc/qa-designer/functional/api.md +1 -1
  157. package/skills/qc/qa-designer/functional/gui-feature.md +1 -1
  158. package/skills/qc/qa-designer/functional/gui-screen.md +1 -1
  159. package/skills/qc/qa-designer/integration/api.md +1 -1
  160. package/skills/qc/qa-designer/integration/db.md +1 -1
  161. package/skills/qc/qa-designer/integration/gui.md +1 -1
  162. package/skills/qc/qa-designer/integration/kafka.md +1 -1
  163. package/skills/qc/qa-designer/non-functional.md +1 -1
  164. package/skills/qc/qa-planner/test-plan.md +4 -4
  165. package/skills/qc/qa-runner/exploratory/session.md +2 -2
  166. package/skills/setup-ai-first/SKILL.md +35 -2
  167. package/skills/spec/SKILL.md +70 -4
  168. package/skills/test/SKILL.md +129 -16
  169. package/steps/context-loader.md +12 -5
  170. package/steps/report-footer.md +35 -2
  171. package/steps/trace-mirror.md +18 -10
  172. package/templates/project-context.yaml +27 -6
  173. package/docs/02-guides/qc-automation.md +0 -92
@@ -125,6 +125,8 @@ Read `.agent/project-context.yaml`. Extract and store:
125
125
  - `paths.specs_dir` → BDD specs root
126
126
  - `paths.prd_dir` → PRD documents root
127
127
  - `paths.refinement_dir` → findings/review output dir
128
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
129
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
128
130
  - `paths.product_definitions_dir` → product definitions root
129
131
  - `paths.domain_knowledge_dir` → domain knowledge root
130
132
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -137,6 +139,8 @@ If `paths` section is absent, use these defaults:
137
139
  - `specs_dir` = `specs/bdd`
138
140
  - `prd_dir` = `specs/prd`
139
141
  - `refinement_dir` = `.agent/review`
142
+ - `qc_dir` = `docs`
143
+ - `qc_skills_dir` = `.agent/skills/qc`
140
144
  - `product_definitions_dir` = `specs/product-definition`
141
145
  - `domain_knowledge_dir` = `specs/domain-knowledge`
142
146
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -162,7 +166,7 @@ If `services` section is present:
162
166
  - If `$ARGUMENTS` contains a path, extract the segment after `prd_dir`
163
167
 
164
168
  **2. Route to service** — if active domain matches a key in `services`:
165
- - Override `paths.specs_dir` → `services.{domain}.specs_dir`
169
+ - Override `paths.specs_dir` → `services.{domain}.specs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, ALL BDD (web/app/**system**) is a shared cross-team artifact → leave `specs_dir` for step 4 to route to the spec repo; do NOT pin it per-service here.
166
170
  - 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
171
  - Store `active_service` = `services.{domain}.path`
168
172
  - Store `active_service_module` = `services.{domain}.module`
@@ -173,6 +177,7 @@ If `services` section is present:
173
177
  - Set `active_service = unresolved`
174
178
 
175
179
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
180
+ - Override `paths.specs_dir` → `{spec_source}/specs/bdd` — **always when `spec_source` is set.** All BDD (web/app/**system**) lives in the shared spec repo so every umbrella (FE/App/BE) reads the same scenarios; the FE tech-design gate + `/generate-code --phase=ui`/`--phase=integration` resolve the `system/` BDD here. *(Per-service `specs/bdd` only when there is no `spec_source`.)*
176
181
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
177
182
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
178
183
  - 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.)*
@@ -181,8 +186,10 @@ If `services` section is present:
181
186
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
182
187
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
183
188
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
189
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
190
+ - Override `paths.trace_dir` → `{spec_source}/.trace` — **always when `spec_source` is set.** Trace TSVs are consolidated in the spec repo (single authoritative location, no per-service split) so the PM/PO has one place to manage status. Code-side commands (`/generate-code`, `/dev-run-test`, `/qc-run-test`) run from `service_root` but **write their trace row into `{spec_source}/.trace`** — like they already push `feedback/` there. *(Per-service `.trace` only when there is no `spec_source`.)*
184
191
 
185
- > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
192
+ > **Why under `spec_source`:** PRD, design-spec, domain knowledge, **all BDD (web/app/system)**, the **API contract (tech-docs)**, tester feedback, **and the `.trace/` coverage state** are all **cross-team artifacts** — they live in the **shared spec repo** so every umbrella (FE/App/BE) and the PM read one source via `/sync`. The service submodule holds only **code** (+ build/test tooling). `.trace/` and `feedback/` are the dev/QC **write areas** in the spec repo (the PRD/BDD/design-spec/tech-docs there stay read-only for dev/QC only PO edits those). In single-service mode (no `spec_source`), everything defaults under the repo root — still one repo.
186
193
 
187
194
  ---
188
195
 
@@ -202,12 +209,12 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
202
209
  |----------|--------|
203
210
  | `conventions.test_command` | service's `conventions.test_command` |
204
211
  | `conventions.build_command` | service's `conventions.build_command` |
205
- | `paths.trace_dir` | `{active_service}/{service paths.trace_dir}` default: `{active_service}/.trace` |
206
- | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
212
+ | `paths.trace_dir` | **If `spec_source` is set → keep the Step 4 spec-repo route (`{spec_source}/.trace`); ignore any service-level `trace_dir`.** Only when there is no `spec_source`: `{active_service}/{service paths.trace_dir}` (default `{active_service}/.trace`). |
213
+ | `paths.specs_dir` | **If `spec_source` is set → keep the Step 4 spec-repo route (`{spec_source}/specs/bdd`); ignore any service-level `specs_dir`** (BDD is cross-team, never per-service in this mode). Only when there is no `spec_source`: `{active_service}/{service paths.specs_dir}` if set, else the Step 1.5 override. |
207
214
 
208
215
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
209
216
  - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
210
- - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
217
+ - **Source/test files** are written relative to `service_root`; **trace TSVs** are written to `{paths.trace_dir}` (the spec repo when `spec_source` is set — a cross-repo write, committed/pushed to the spec submodule like `feedback/`).
211
218
 
212
219
  **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).
213
220
 
@@ -547,6 +554,36 @@ Output Artifacts:
547
554
 
548
555
  If no files were written (e.g., review or analysis commands) → write `Output Artifacts: none (read-only)`.
549
556
 
557
+ ## Pipeline Position
558
+
559
+ Print a one-line map of the pipeline with the CURRENT command's phase marked `◀ bạn ở đây`,
560
+ so the user always sees where this command sits in the end-to-end flow:
561
+
562
+ ```
563
+ Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
564
+ ```
565
+
566
+ Find the current command in this phase legend and mark **its** phase in the map above:
567
+
568
+ | Phase | Commands |
569
+ |-------|----------|
570
+ | Discovery | `/define-product` |
571
+ | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
572
+ | Design Spec | `/generate-design-spec` |
573
+ | BDD | `/generate-bdd` · `/review-context` (BDD) |
574
+ | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
575
+ | Code | `/generate-code` · `/review-code` |
576
+ | Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
577
+ | QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
578
+ | Trace Audit | `/validate-traces` |
579
+
580
+ For a **review command**, also append the 3-step review loop with the current step marked, e.g.:
581
+ `Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
582
+
583
+ **Cross-cutting commands** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
584
+ `/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) sit outside the linear pipeline —
585
+ **omit the Pipeline line entirely** for these (do not force-fit them onto the map).
586
+
550
587
  ## Next Command Suggestion
551
588
 
552
589
  Suggest the logical next command based on workflow phase:
@@ -588,10 +625,13 @@ Suggest the logical next command based on workflow phase:
588
625
  Format the footer as:
589
626
  ```
590
627
  ---
591
- Status : {badge}
628
+ Status : {badge}
592
629
  {Output Artifacts block}
593
- Next : {suggested command with example arguments}
630
+ Pipeline : Discovery PRD [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
631
+ (review cmd) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
632
+ Next : {suggested command with example arguments}
594
633
  ```
634
+ *(Omit the `Pipeline` line for cross-cutting commands listed above.)*
595
635
 
596
636
 
597
637
  ```
@@ -131,6 +131,8 @@ Read `.agent/project-context.yaml`. Extract and store:
131
131
  - `paths.specs_dir` → BDD specs root
132
132
  - `paths.prd_dir` → PRD documents root
133
133
  - `paths.refinement_dir` → findings/review output dir
134
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
135
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
134
136
  - `paths.product_definitions_dir` → product definitions root
135
137
  - `paths.domain_knowledge_dir` → domain knowledge root
136
138
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -143,6 +145,8 @@ If `paths` section is absent, use these defaults:
143
145
  - `specs_dir` = `specs/bdd`
144
146
  - `prd_dir` = `specs/prd`
145
147
  - `refinement_dir` = `.agent/review`
148
+ - `qc_dir` = `docs`
149
+ - `qc_skills_dir` = `.agent/skills/qc`
146
150
  - `product_definitions_dir` = `specs/product-definition`
147
151
  - `domain_knowledge_dir` = `specs/domain-knowledge`
148
152
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -168,7 +172,7 @@ If `services` section is present:
168
172
  - If `$ARGUMENTS` contains a path, extract the segment after `prd_dir`
169
173
 
170
174
  **2. Route to service** — if active domain matches a key in `services`:
171
- - Override `paths.specs_dir` → `services.{domain}.specs_dir`
175
+ - Override `paths.specs_dir` → `services.{domain}.specs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, ALL BDD (web/app/**system**) is a shared cross-team artifact → leave `specs_dir` for step 4 to route to the spec repo; do NOT pin it per-service here.
172
176
  - 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.
173
177
  - Store `active_service` = `services.{domain}.path`
174
178
  - Store `active_service_module` = `services.{domain}.module`
@@ -179,6 +183,7 @@ If `services` section is present:
179
183
  - Set `active_service = unresolved`
180
184
 
181
185
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
186
+ - Override `paths.specs_dir` → `{spec_source}/specs/bdd` — **always when `spec_source` is set.** All BDD (web/app/**system**) lives in the shared spec repo so every umbrella (FE/App/BE) reads the same scenarios; the FE tech-design gate + `/generate-code --phase=ui`/`--phase=integration` resolve the `system/` BDD here. *(Per-service `specs/bdd` only when there is no `spec_source`.)*
182
187
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
183
188
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
184
189
  - 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.)*
@@ -187,8 +192,10 @@ If `services` section is present:
187
192
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
188
193
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
189
194
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
195
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
196
+ - Override `paths.trace_dir` → `{spec_source}/.trace` — **always when `spec_source` is set.** Trace TSVs are consolidated in the spec repo (single authoritative location, no per-service split) so the PM/PO has one place to manage status. Code-side commands (`/generate-code`, `/dev-run-test`, `/qc-run-test`) run from `service_root` but **write their trace row into `{spec_source}/.trace`** — like they already push `feedback/` there. *(Per-service `.trace` only when there is no `spec_source`.)*
190
197
 
191
- > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
198
+ > **Why under `spec_source`:** PRD, design-spec, domain knowledge, **all BDD (web/app/system)**, the **API contract (tech-docs)**, tester feedback, **and the `.trace/` coverage state** are all **cross-team artifacts** — they live in the **shared spec repo** so every umbrella (FE/App/BE) and the PM read one source via `/sync`. The service submodule holds only **code** (+ build/test tooling). `.trace/` and `feedback/` are the dev/QC **write areas** in the spec repo (the PRD/BDD/design-spec/tech-docs there stay read-only for dev/QC only PO edits those). In single-service mode (no `spec_source`), everything defaults under the repo root — still one repo.
192
199
 
193
200
  ---
194
201
 
@@ -208,12 +215,12 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
208
215
  |----------|--------|
209
216
  | `conventions.test_command` | service's `conventions.test_command` |
210
217
  | `conventions.build_command` | service's `conventions.build_command` |
211
- | `paths.trace_dir` | `{active_service}/{service paths.trace_dir}` default: `{active_service}/.trace` |
212
- | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
218
+ | `paths.trace_dir` | **If `spec_source` is set → keep the Step 4 spec-repo route (`{spec_source}/.trace`); ignore any service-level `trace_dir`.** Only when there is no `spec_source`: `{active_service}/{service paths.trace_dir}` (default `{active_service}/.trace`). |
219
+ | `paths.specs_dir` | **If `spec_source` is set → keep the Step 4 spec-repo route (`{spec_source}/specs/bdd`); ignore any service-level `specs_dir`** (BDD is cross-team, never per-service in this mode). Only when there is no `spec_source`: `{active_service}/{service paths.specs_dir}` if set, else the Step 1.5 override. |
213
220
 
214
221
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
215
222
  - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
216
- - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
223
+ - **Source/test files** are written relative to `service_root`; **trace TSVs** are written to `{paths.trace_dir}` (the spec repo when `spec_source` is set — a cross-repo write, committed/pushed to the spec submodule like `feedback/`).
217
224
 
218
225
  **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).
219
226
 
@@ -850,21 +857,29 @@ Leave all other columns unchanged (including `dev_selftest_at`, which `/dev-run-
850
857
  # Refresh Living Docs panel mirror *(local, umbrella mode)*
851
858
 
852
859
  *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.*
860
+ the repo's own `.trace/` IS the panel location, so nothing to mirror.*
854
861
 
855
- After updating the authoritative service TSV(s) at `{paths.trace_dir}`:
862
+ After updating the authoritative TSV(s) at `{paths.trace_dir}`:
856
863
 
857
- 1. Resolve `panel_mirror = ./.trace` at the **current workspace root** (where this command runs).
864
+ **When `setup.spec_source` is set (consolidated trace the common case):**
865
+ `{paths.trace_dir}` resolves to `{spec_source}/.trace` — the single authoritative location.
866
+ This command runs from `service_root`, so the write is **cross-repo into the spec submodule**;
867
+ commit/push the spec submodule for the trace update (same as `feedback/`).
868
+ 1. Resolve `panel_mirror = ./.trace` at the **current workspace root**.
858
869
  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}`.
870
+ just-updated `{UC-ID}.tsv` → `{panel_mirror}/{UC-ID}.tsv` (create the dir; overwrite).
871
+ No per-service namespacing — there is one trace set; the owning service is carried in each
872
+ row's `@trace.service`.
873
+
874
+ **Legacy (no `spec_source` — per-service trace):**
875
+ Copy each just-updated `{UC-ID}.tsv` → `{panel_mirror}/{service-name}/{UC-ID}.tsv`
876
+ (namespaced by `active_service`).
861
877
 
862
878
  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.
879
+ **local convenience mirror only**. The merged `trace-report.json` (canonical, in
880
+ `{spec_source}/.living-docs/`) is rebuilt by `/sync` or `/validate-traces`. For orchestrated
881
+ commands, do this once in the orchestrator after all sub-agents return — not inside each
882
+ sub-agent.
868
883
 
869
884
 
870
885
  ---
@@ -893,6 +908,36 @@ Output Artifacts:
893
908
 
894
909
  If no files were written (e.g., review or analysis commands) → write `Output Artifacts: none (read-only)`.
895
910
 
911
+ ## Pipeline Position
912
+
913
+ Print a one-line map of the pipeline with the CURRENT command's phase marked `◀ bạn ở đây`,
914
+ so the user always sees where this command sits in the end-to-end flow:
915
+
916
+ ```
917
+ Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
918
+ ```
919
+
920
+ Find the current command in this phase legend and mark **its** phase in the map above:
921
+
922
+ | Phase | Commands |
923
+ |-------|----------|
924
+ | Discovery | `/define-product` |
925
+ | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
926
+ | Design Spec | `/generate-design-spec` |
927
+ | BDD | `/generate-bdd` · `/review-context` (BDD) |
928
+ | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
929
+ | Code | `/generate-code` · `/review-code` |
930
+ | Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
931
+ | QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
932
+ | Trace Audit | `/validate-traces` |
933
+
934
+ For a **review command**, also append the 3-step review loop with the current step marked, e.g.:
935
+ `Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
936
+
937
+ **Cross-cutting commands** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
938
+ `/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) sit outside the linear pipeline —
939
+ **omit the Pipeline line entirely** for these (do not force-fit them onto the map).
940
+
896
941
  ## Next Command Suggestion
897
942
 
898
943
  Suggest the logical next command based on workflow phase:
@@ -934,10 +979,13 @@ Suggest the logical next command based on workflow phase:
934
979
  Format the footer as:
935
980
  ```
936
981
  ---
937
- Status : {badge}
982
+ Status : {badge}
938
983
  {Output Artifacts block}
939
- Next : {suggested command with example arguments}
984
+ Pipeline : Discovery PRD [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
985
+ (review cmd) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
986
+ Next : {suggested command with example arguments}
940
987
  ```
988
+ *(Omit the `Pipeline` line for cross-cutting commands listed above.)*
941
989
 
942
990
 
943
991
  ```
@@ -131,6 +131,8 @@ Read `.agent/project-context.yaml`. Extract and store:
131
131
  - `paths.specs_dir` → BDD specs root
132
132
  - `paths.prd_dir` → PRD documents root
133
133
  - `paths.refinement_dir` → findings/review output dir
134
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
135
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
134
136
  - `paths.product_definitions_dir` → product definitions root
135
137
  - `paths.domain_knowledge_dir` → domain knowledge root
136
138
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -143,6 +145,8 @@ If `paths` section is absent, use these defaults:
143
145
  - `specs_dir` = `specs/bdd`
144
146
  - `prd_dir` = `specs/prd`
145
147
  - `refinement_dir` = `.agent/review`
148
+ - `qc_dir` = `docs`
149
+ - `qc_skills_dir` = `.agent/skills/qc`
146
150
  - `product_definitions_dir` = `specs/product-definition`
147
151
  - `domain_knowledge_dir` = `specs/domain-knowledge`
148
152
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -168,7 +172,7 @@ If `services` section is present:
168
172
  - If `$ARGUMENTS` contains a path, extract the segment after `prd_dir`
169
173
 
170
174
  **2. Route to service** — if active domain matches a key in `services`:
171
- - Override `paths.specs_dir` → `services.{domain}.specs_dir`
175
+ - Override `paths.specs_dir` → `services.{domain}.specs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, ALL BDD (web/app/**system**) is a shared cross-team artifact → leave `specs_dir` for step 4 to route to the spec repo; do NOT pin it per-service here.
172
176
  - 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.
173
177
  - Store `active_service` = `services.{domain}.path`
174
178
  - Store `active_service_module` = `services.{domain}.module`
@@ -179,6 +183,7 @@ If `services` section is present:
179
183
  - Set `active_service = unresolved`
180
184
 
181
185
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
186
+ - Override `paths.specs_dir` → `{spec_source}/specs/bdd` — **always when `spec_source` is set.** All BDD (web/app/**system**) lives in the shared spec repo so every umbrella (FE/App/BE) reads the same scenarios; the FE tech-design gate + `/generate-code --phase=ui`/`--phase=integration` resolve the `system/` BDD here. *(Per-service `specs/bdd` only when there is no `spec_source`.)*
182
187
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
183
188
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
184
189
  - 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.)*
@@ -187,8 +192,10 @@ If `services` section is present:
187
192
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
188
193
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
189
194
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
195
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
196
+ - Override `paths.trace_dir` → `{spec_source}/.trace` — **always when `spec_source` is set.** Trace TSVs are consolidated in the spec repo (single authoritative location, no per-service split) so the PM/PO has one place to manage status. Code-side commands (`/generate-code`, `/dev-run-test`, `/qc-run-test`) run from `service_root` but **write their trace row into `{spec_source}/.trace`** — like they already push `feedback/` there. *(Per-service `.trace` only when there is no `spec_source`.)*
190
197
 
191
- > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
198
+ > **Why under `spec_source`:** PRD, design-spec, domain knowledge, **all BDD (web/app/system)**, the **API contract (tech-docs)**, tester feedback, **and the `.trace/` coverage state** are all **cross-team artifacts** — they live in the **shared spec repo** so every umbrella (FE/App/BE) and the PM read one source via `/sync`. The service submodule holds only **code** (+ build/test tooling). `.trace/` and `feedback/` are the dev/QC **write areas** in the spec repo (the PRD/BDD/design-spec/tech-docs there stay read-only for dev/QC only PO edits those). In single-service mode (no `spec_source`), everything defaults under the repo root — still one repo.
192
199
 
193
200
  ---
194
201
 
@@ -208,12 +215,12 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
208
215
  |----------|--------|
209
216
  | `conventions.test_command` | service's `conventions.test_command` |
210
217
  | `conventions.build_command` | service's `conventions.build_command` |
211
- | `paths.trace_dir` | `{active_service}/{service paths.trace_dir}` default: `{active_service}/.trace` |
212
- | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
218
+ | `paths.trace_dir` | **If `spec_source` is set → keep the Step 4 spec-repo route (`{spec_source}/.trace`); ignore any service-level `trace_dir`.** Only when there is no `spec_source`: `{active_service}/{service paths.trace_dir}` (default `{active_service}/.trace`). |
219
+ | `paths.specs_dir` | **If `spec_source` is set → keep the Step 4 spec-repo route (`{spec_source}/specs/bdd`); ignore any service-level `specs_dir`** (BDD is cross-team, never per-service in this mode). Only when there is no `spec_source`: `{active_service}/{service paths.specs_dir}` if set, else the Step 1.5 override. |
213
220
 
214
221
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
215
222
  - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
216
- - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
223
+ - **Source/test files** are written relative to `service_root`; **trace TSVs** are written to `{paths.trace_dir}` (the spec repo when `spec_source` is set — a cross-repo write, committed/pushed to the spec submodule like `feedback/`).
217
224
 
218
225
  **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).
219
226
 
@@ -559,7 +566,7 @@ the Living Docs report at the spec module (via `/sync` + `/validate-traces`). Th
559
566
  files themselves stay in the service — only the run *status* is reported.
560
567
 
561
568
  Update `{paths.trace_dir}/{UC-ID}.tsv` — for each scenario row (matched by `sc_id` via its
562
- test's `@trace.verifies={UC-ID}-SC{N}` tag):
569
+ test's `@trace.verifies={UC-ID}-SC{N}` tag). *(Umbrella + `spec_source`: `trace_dir` is `{spec_source}/.trace` — tests run from `service_root` but the `dev_selftest` update writes into the **spec repo**; commit/push the spec submodule for it.)*
563
570
 
564
571
  | Column | Value |
565
572
  |--------|-------|
@@ -576,21 +583,29 @@ signals. `dev_selftest`/`dev_selftest_at` are also orthogonal to `status`
576
583
  # Refresh Living Docs panel mirror *(local, umbrella mode)*
577
584
 
578
585
  *Skip entirely in single-service mode (no `services` and no `setup.spec_source`) — there
579
- the service `.trace/` IS the panel location, so nothing to mirror.*
586
+ the repo's own `.trace/` IS the panel location, so nothing to mirror.*
580
587
 
581
- After updating the authoritative service TSV(s) at `{paths.trace_dir}`:
588
+ After updating the authoritative TSV(s) at `{paths.trace_dir}`:
582
589
 
583
- 1. Resolve `panel_mirror = ./.trace` at the **current workspace root** (where this command runs).
590
+ **When `setup.spec_source` is set (consolidated trace the common case):**
591
+ `{paths.trace_dir}` resolves to `{spec_source}/.trace` — the single authoritative location.
592
+ This command runs from `service_root`, so the write is **cross-repo into the spec submodule**;
593
+ commit/push the spec submodule for the trace update (same as `feedback/`).
594
+ 1. Resolve `panel_mirror = ./.trace` at the **current workspace root**.
584
595
  2. If `panel_mirror` resolves to a different path than `{paths.trace_dir}`, copy each
585
- just-updated `{UC-ID}.tsv` → `{panel_mirror}/{service-name}/{UC-ID}.tsv`
586
- (create the dir; overwrite). Use `active_service` for `{service-name}`.
596
+ just-updated `{UC-ID}.tsv` → `{panel_mirror}/{UC-ID}.tsv` (create the dir; overwrite).
597
+ No per-service namespacing — there is one trace set; the owning service is carried in each
598
+ row's `@trace.service`.
599
+
600
+ **Legacy (no `spec_source` — per-service trace):**
601
+ Copy each just-updated `{UC-ID}.tsv` → `{panel_mirror}/{service-name}/{UC-ID}.tsv`
602
+ (namespaced by `active_service`).
587
603
 
588
604
  This keeps the open workspace's Living Docs panel current **between syncs** — it is a
589
- **local convenience mirror only**. The *canonical* report in the spec module
590
- (`{spec_source}/.living-docs/`) and the merged `trace-report.json` are rebuilt by
591
- `/sync` or `/validate-traces` (those need every service's data, so a single per-UC
592
- command cannot produce them). For orchestrated commands, do this once in the orchestrator
593
- after all sub-agents return — not inside each sub-agent.
605
+ **local convenience mirror only**. The merged `trace-report.json` (canonical, in
606
+ `{spec_source}/.living-docs/`) is rebuilt by `/sync` or `/validate-traces`. For orchestrated
607
+ commands, do this once in the orchestrator after all sub-agents return — not inside each
608
+ sub-agent.
594
609
 
595
610
 
596
611
  ## Output
@@ -617,6 +632,36 @@ Output Artifacts:
617
632
 
618
633
  If no files were written (e.g., review or analysis commands) → write `Output Artifacts: none (read-only)`.
619
634
 
635
+ ## Pipeline Position
636
+
637
+ Print a one-line map of the pipeline with the CURRENT command's phase marked `◀ bạn ở đây`,
638
+ so the user always sees where this command sits in the end-to-end flow:
639
+
640
+ ```
641
+ Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
642
+ ```
643
+
644
+ Find the current command in this phase legend and mark **its** phase in the map above:
645
+
646
+ | Phase | Commands |
647
+ |-------|----------|
648
+ | Discovery | `/define-product` |
649
+ | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
650
+ | Design Spec | `/generate-design-spec` |
651
+ | BDD | `/generate-bdd` · `/review-context` (BDD) |
652
+ | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
653
+ | Code | `/generate-code` · `/review-code` |
654
+ | Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
655
+ | QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
656
+ | Trace Audit | `/validate-traces` |
657
+
658
+ For a **review command**, also append the 3-step review loop with the current step marked, e.g.:
659
+ `Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
660
+
661
+ **Cross-cutting commands** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
662
+ `/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) sit outside the linear pipeline —
663
+ **omit the Pipeline line entirely** for these (do not force-fit them onto the map).
664
+
620
665
  ## Next Command Suggestion
621
666
 
622
667
  Suggest the logical next command based on workflow phase:
@@ -658,10 +703,13 @@ Suggest the logical next command based on workflow phase:
658
703
  Format the footer as:
659
704
  ```
660
705
  ---
661
- Status : {badge}
706
+ Status : {badge}
662
707
  {Output Artifacts block}
663
- Next : {suggested command with example arguments}
708
+ Pipeline : Discovery PRD [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
709
+ (review cmd) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
710
+ Next : {suggested command with example arguments}
664
711
  ```
712
+ *(Omit the `Pipeline` line for cross-cutting commands listed above.)*
665
713
 
666
714
 
667
715
  ```
@@ -127,6 +127,8 @@ Read `.agent/project-context.yaml`. Extract and store:
127
127
  - `paths.specs_dir` → BDD specs root
128
128
  - `paths.prd_dir` → PRD documents root
129
129
  - `paths.refinement_dir` → findings/review output dir
130
+ - `paths.qc_dir` → QC automation artifacts root (visible top-level, one subfolder per UC: `{qc_dir}/{UC-ID}/`)
131
+ - `paths.qc_skills_dir` → where qc-* commands load QC skills from (default bundled `.agent/skills/qc`; override to the QC team's own repo/submodule so framework upgrade won't overwrite them)
130
132
  - `paths.product_definitions_dir` → product definitions root
131
133
  - `paths.domain_knowledge_dir` → domain knowledge root
132
134
  - `paths.business_dictionary` → path to business-dictionary.md
@@ -139,6 +141,8 @@ If `paths` section is absent, use these defaults:
139
141
  - `specs_dir` = `specs/bdd`
140
142
  - `prd_dir` = `specs/prd`
141
143
  - `refinement_dir` = `.agent/review`
144
+ - `qc_dir` = `docs`
145
+ - `qc_skills_dir` = `.agent/skills/qc`
142
146
  - `product_definitions_dir` = `specs/product-definition`
143
147
  - `domain_knowledge_dir` = `specs/domain-knowledge`
144
148
  - `business_dictionary` = `specs/domain-knowledge/business-dictionary.md`
@@ -164,7 +168,7 @@ If `services` section is present:
164
168
  - If `$ARGUMENTS` contains a path, extract the segment after `prd_dir`
165
169
 
166
170
  **2. Route to service** — if active domain matches a key in `services`:
167
- - Override `paths.specs_dir` → `services.{domain}.specs_dir`
171
+ - Override `paths.specs_dir` → `services.{domain}.specs_dir` — **only if `setup.spec_source` is NOT set.** When `spec_source` IS set, ALL BDD (web/app/**system**) is a shared cross-team artifact → leave `specs_dir` for step 4 to route to the spec repo; do NOT pin it per-service here.
168
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.
169
173
  - Store `active_service` = `services.{domain}.path`
170
174
  - Store `active_service_module` = `services.{domain}.module`
@@ -175,6 +179,7 @@ If `services` section is present:
175
179
  - Set `active_service = unresolved`
176
180
 
177
181
  **4. Spec source auto-override** — if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
182
+ - Override `paths.specs_dir` → `{spec_source}/specs/bdd` — **always when `spec_source` is set.** All BDD (web/app/**system**) lives in the shared spec repo so every umbrella (FE/App/BE) reads the same scenarios; the FE tech-design gate + `/generate-code --phase=ui`/`--phase=integration` resolve the `system/` BDD here. *(Per-service `specs/bdd` only when there is no `spec_source`.)*
178
183
  - Override `paths.prd_dir` → `{spec_source}/specs/prd`
179
184
  - Override `paths.design_spec_dir` → `{spec_source}/specs/design-spec`
180
185
  - 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.)*
@@ -183,8 +188,10 @@ If `services` section is present:
183
188
  - Override `paths.core_entities` → `{spec_source}/specs/domain-knowledge/core-entities.md`
184
189
  - Override `paths.bug_reports_dir` → `{spec_source}/feedback/bug-reports`
185
190
  - Override `paths.bdd_proposals_dir` → `{spec_source}/feedback/bdd-proposals`
191
+ - Override `paths.prd_change_requests_dir` → `{spec_source}/feedback/prd-change-requests`
192
+ - Override `paths.trace_dir` → `{spec_source}/.trace` — **always when `spec_source` is set.** Trace TSVs are consolidated in the spec repo (single authoritative location, no per-service split) so the PM/PO has one place to manage status. Code-side commands (`/generate-code`, `/dev-run-test`, `/qc-run-test`) run from `service_root` but **write their trace row into `{spec_source}/.trace`** — like they already push `feedback/` there. *(Per-service `.trace` only when there is no `spec_source`.)*
186
193
 
187
- > **Why under `spec_source`:** PRD, design-spec, domain knowledge, the **API contract (tech-docs)**, and tester feedback are all **cross-team artifacts** — they must live in the **shared spec repo** so every umbrella (FE/App/BE) reads the same source via `/sync`. Tech-docs specifically: BE authors the tech-design (API contract), commits + pushes it into the spec submodule (2-layer commit), and FE/App pull it on their next `/sync` to wire the real API in `/generate-code --phase=integration`. In single-service mode (no `spec_source`), these default under the repo root — still shared, same repo.
194
+ > **Why under `spec_source`:** PRD, design-spec, domain knowledge, **all BDD (web/app/system)**, the **API contract (tech-docs)**, tester feedback, **and the `.trace/` coverage state** are all **cross-team artifacts** — they live in the **shared spec repo** so every umbrella (FE/App/BE) and the PM read one source via `/sync`. The service submodule holds only **code** (+ build/test tooling). `.trace/` and `feedback/` are the dev/QC **write areas** in the spec repo (the PRD/BDD/design-spec/tech-docs there stay read-only for dev/QC only PO edits those). In single-service mode (no `spec_source`), everything defaults under the repo root — still one repo.
188
195
 
189
196
  ---
190
197
 
@@ -204,12 +211,12 @@ When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-
204
211
  |----------|--------|
205
212
  | `conventions.test_command` | service's `conventions.test_command` |
206
213
  | `conventions.build_command` | service's `conventions.build_command` |
207
- | `paths.trace_dir` | `{active_service}/{service paths.trace_dir}` default: `{active_service}/.trace` |
208
- | `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
214
+ | `paths.trace_dir` | **If `spec_source` is set → keep the Step 4 spec-repo route (`{spec_source}/.trace`); ignore any service-level `trace_dir`.** Only when there is no `spec_source`: `{active_service}/{service paths.trace_dir}` (default `{active_service}/.trace`). |
215
+ | `paths.specs_dir` | **If `spec_source` is set → keep the Step 4 spec-repo route (`{spec_source}/specs/bdd`); ignore any service-level `specs_dir`** (BDD is cross-team, never per-service in this mode). Only when there is no `spec_source`: `{active_service}/{service paths.specs_dir}` if set, else the Step 1.5 override. |
209
216
 
210
217
  **3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
211
218
  - Shell commands (`/dev-run-test`, `/dev-gen-test`) run **from within** `service_root`
212
- - File write operations (test files, trace TSVs) use paths **relative to** `service_root`
219
+ - **Source/test files** are written relative to `service_root`; **trace TSVs** are written to `{paths.trace_dir}` (the spec repo when `spec_source` is set — a cross-repo write, committed/pushed to the spec submodule like `feedback/`).
213
220
 
214
221
  **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).
215
222
 
@@ -599,6 +606,36 @@ Output Artifacts:
599
606
 
600
607
  If no files were written (e.g., review or analysis commands) → write `Output Artifacts: none (read-only)`.
601
608
 
609
+ ## Pipeline Position
610
+
611
+ Print a one-line map of the pipeline with the CURRENT command's phase marked `◀ bạn ở đây`,
612
+ so the user always sees where this command sits in the end-to-end flow:
613
+
614
+ ```
615
+ Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
616
+ ```
617
+
618
+ Find the current command in this phase legend and mark **its** phase in the map above:
619
+
620
+ | Phase | Commands |
621
+ |-------|----------|
622
+ | Discovery | `/define-product` |
623
+ | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
624
+ | Design Spec | `/generate-design-spec` |
625
+ | BDD | `/generate-bdd` · `/review-context` (BDD) |
626
+ | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
627
+ | Code | `/generate-code` · `/review-code` |
628
+ | Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
629
+ | QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
630
+ | Trace Audit | `/validate-traces` |
631
+
632
+ For a **review command**, also append the 3-step review loop with the current step marked, e.g.:
633
+ `Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
634
+
635
+ **Cross-cutting commands** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
636
+ `/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) sit outside the linear pipeline —
637
+ **omit the Pipeline line entirely** for these (do not force-fit them onto the map).
638
+
602
639
  ## Next Command Suggestion
603
640
 
604
641
  Suggest the logical next command based on workflow phase:
@@ -640,10 +677,13 @@ Suggest the logical next command based on workflow phase:
640
677
  Format the footer as:
641
678
  ```
642
679
  ---
643
- Status : {badge}
680
+ Status : {badge}
644
681
  {Output Artifacts block}
645
- Next : {suggested command with example arguments}
682
+ Pipeline : Discovery PRD [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
683
+ (review cmd) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
684
+ Next : {suggested command with example arguments}
646
685
  ```
686
+ *(Omit the `Pipeline` line for cross-cutting commands listed above.)*
647
687
 
648
688
 
649
689
  ```