@anhth2/spec-driven-dev-plugin 0.12.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 (130) hide show
  1. package/commands/debug.md +42 -7
  2. package/commands/define-product.md +42 -7
  3. package/commands/dev-gen-test.md +60 -17
  4. package/commands/dev-run-test.md +61 -18
  5. package/commands/dev-run-test.tmpl +1 -1
  6. package/commands/dev-smoke-test.md +42 -7
  7. package/commands/fix-bug.md +42 -7
  8. package/commands/generate-bdd.md +67 -21
  9. package/commands/generate-bdd.tmpl +7 -4
  10. package/commands/generate-code.md +113 -35
  11. package/commands/generate-code.tmpl +53 -18
  12. package/commands/generate-design-spec.md +42 -7
  13. package/commands/generate-prd.md +42 -7
  14. package/commands/generate-spec-manifest.md +42 -7
  15. package/commands/generate-tech-docs.md +229 -20
  16. package/commands/generate-tech-docs.tmpl +187 -13
  17. package/commands/learn.md +42 -7
  18. package/commands/map-testids.md +564 -0
  19. package/commands/map-testids.tmpl +81 -0
  20. package/commands/propose-scenario.md +42 -7
  21. package/commands/qc-analyze.md +42 -7
  22. package/commands/qc-design-test.md +44 -8
  23. package/commands/qc-design-test.tmpl +2 -1
  24. package/commands/qc-plan.md +42 -7
  25. package/commands/qc-report.md +42 -7
  26. package/commands/qc-review.md +42 -7
  27. package/commands/qc-run-test.md +62 -18
  28. package/commands/qc-run-test.tmpl +2 -1
  29. package/commands/refine-prd.md +42 -7
  30. package/commands/report-bug.md +42 -7
  31. package/commands/review-code.md +42 -7
  32. package/commands/review-context.md +42 -7
  33. package/commands/review-tech-docs.md +45 -9
  34. package/commands/review-tech-docs.tmpl +3 -2
  35. package/commands/setup-ai-first.md +37 -4
  36. package/commands/setup-ai-first.tmpl +2 -2
  37. package/commands/sync.md +35 -2
  38. package/commands/update-framework.md +35 -2
  39. package/commands/validate-traces.md +85 -40
  40. package/commands/validate-traces.tmpl +43 -33
  41. package/core/FRAMEWORK_VERSION +1 -1
  42. package/core/commands/debug.md +42 -7
  43. package/core/commands/define-product.md +42 -7
  44. package/core/commands/dev-gen-test.md +60 -17
  45. package/core/commands/dev-run-test.md +61 -18
  46. package/core/commands/dev-smoke-test.md +42 -7
  47. package/core/commands/fix-bug.md +42 -7
  48. package/core/commands/generate-bdd.md +67 -21
  49. package/core/commands/generate-code.md +113 -35
  50. package/core/commands/generate-design-spec.md +42 -7
  51. package/core/commands/generate-prd.md +42 -7
  52. package/core/commands/generate-spec-manifest.md +42 -7
  53. package/core/commands/generate-tech-docs.md +229 -20
  54. package/core/commands/learn.md +42 -7
  55. package/core/commands/map-testids.md +564 -0
  56. package/core/commands/propose-scenario.md +42 -7
  57. package/core/commands/qc-analyze.md +42 -7
  58. package/core/commands/qc-design-test.md +44 -8
  59. package/core/commands/qc-plan.md +42 -7
  60. package/core/commands/qc-report.md +42 -7
  61. package/core/commands/qc-review.md +42 -7
  62. package/core/commands/qc-run-test.md +62 -18
  63. package/core/commands/refine-prd.md +42 -7
  64. package/core/commands/report-bug.md +42 -7
  65. package/core/commands/review-code.md +42 -7
  66. package/core/commands/review-context.md +42 -7
  67. package/core/commands/review-tech-docs.md +45 -9
  68. package/core/commands/setup-ai-first.md +37 -4
  69. package/core/commands/sync.md +35 -2
  70. package/core/commands/update-framework.md +35 -2
  71. package/core/commands/validate-traces.md +85 -40
  72. package/core/modules/qc-playwright/stack-profile.yaml +1 -0
  73. package/core/skills/code/SKILL.md +77 -9
  74. package/core/skills/debug/SKILL.md +112 -11
  75. package/core/skills/design-spec/SKILL.md +42 -7
  76. package/core/skills/discovery/SKILL.md +42 -7
  77. package/core/skills/prd/SKILL.md +70 -4
  78. package/core/skills/setup-ai-first/SKILL.md +35 -2
  79. package/core/skills/spec/SKILL.md +70 -4
  80. package/core/skills/test/SKILL.md +119 -16
  81. package/core/steps/context-loader.md +7 -5
  82. package/core/steps/report-footer.md +35 -2
  83. package/core/steps/trace-mirror.md +18 -10
  84. package/core/templates/project-context.yaml +8 -5
  85. package/docs/01-getting-started/core-concepts.md +7 -7
  86. package/docs/01-getting-started/installation.md +2 -2
  87. package/docs/01-getting-started/quickstart.md +1 -1
  88. package/docs/02-guides/README.md +1 -2
  89. package/docs/02-guides/developer/README.md +1 -1
  90. package/docs/02-guides/developer/bdd-and-trace.md +10 -8
  91. package/docs/02-guides/developer/commands.md +3 -3
  92. package/docs/02-guides/developer/scenarios.md +26 -14
  93. package/docs/02-guides/developer/workflow.md +80 -20
  94. package/docs/02-guides/product-owner/README.md +6 -4
  95. package/docs/02-guides/product-owner/commands.md +1 -1
  96. package/docs/02-guides/product-owner/scenarios.md +80 -1
  97. package/docs/02-guides/tester/README.md +12 -11
  98. package/docs/02-guides/tester/bug-reporting.md +1 -1
  99. package/docs/02-guides/{qc-automation.md → tester/qc-automation.md} +14 -6
  100. package/docs/02-guides/tester/reading-specs.md +4 -4
  101. package/docs/02-guides/tester/scenarios.md +5 -5
  102. package/docs/02-guides/tester/spec-manifest.md +17 -12
  103. package/docs/02-guides/tester/test-checklist.md +3 -3
  104. package/docs/02-guides/tester/workflow.md +8 -11
  105. package/docs/03-concepts/architecture.md +5 -4
  106. package/docs/03-concepts/pipeline.md +18 -6
  107. package/docs/03-concepts/traceability.md +17 -17
  108. package/docs/04-operations/README.md +1 -1
  109. package/docs/04-operations/bug-flow.md +4 -4
  110. package/docs/04-operations/sync-and-update.md +163 -38
  111. package/docs/05-reference/README.md +3 -0
  112. package/docs/05-reference/command-cheatsheet.md +147 -0
  113. package/docs/05-reference/commands.md +72 -69
  114. package/docs/05-reference/modules.md +2 -2
  115. package/docs/05-reference/trace-schema.md +15 -14
  116. package/docs/README.md +3 -5
  117. package/modules/qc-playwright/stack-profile.yaml +1 -0
  118. package/package.json +1 -1
  119. package/skills/code/SKILL.md +77 -9
  120. package/skills/debug/SKILL.md +112 -11
  121. package/skills/design-spec/SKILL.md +42 -7
  122. package/skills/discovery/SKILL.md +42 -7
  123. package/skills/prd/SKILL.md +70 -4
  124. package/skills/setup-ai-first/SKILL.md +35 -2
  125. package/skills/spec/SKILL.md +70 -4
  126. package/skills/test/SKILL.md +119 -16
  127. package/steps/context-loader.md +7 -5
  128. package/steps/report-footer.md +35 -2
  129. package/steps/trace-mirror.md +18 -10
  130. package/templates/project-context.yaml +8 -5
@@ -17,7 +17,7 @@
17
17
  7. [Project Lessons — không để AI lặp lỗi](#7-project-lessons--không-để-ai-lặp-lỗi)
18
18
  8. [Câu hỏi thường gặp](#8-câu-hỏi-thường-gặp)
19
19
 
20
- > Pipeline QC native (`/qc-*`) có trang riêng — xem [Guide · QC Automation](../02-guides/qc-automation.md). Ở đây chỉ điểm qua chỗ `/sync` chạm vào QC.
20
+ > Pipeline QC native (`/qc-*`) có trang riêng — xem [chương QC Automation](../02-guides/tester/qc-automation.md). Ở đây chỉ điểm qua chỗ `/sync` chạm vào QC.
21
21
 
22
22
  ---
23
23
 
@@ -79,7 +79,7 @@ Service submodules không bị ảnh hưởng — luôn checkout đúng SHA mà
79
79
  > **Umbrella mode:** `/update-framework` chỉ cần chạy ở **umbrella root**. Service submodule chỉ chứa `.agent/project-context.yaml` (config), không có command files → không cần nâng cấp riêng.
80
80
 
81
81
  > ⚠️ **`--init` ghi đè TOÀN BỘ `.agent/`** (gồm cả `.agent/skills/qc/`) — KHÔNG đụng `.agent/project-context.yaml` (config của bạn) và mọi thứ **ngoài** `.agent/`.
82
- > **Hệ quả với skill QC:** nếu QC sửa skill **trực tiếp trong `.agent/skills/qc/`** thì sẽ **mất sau upgrade**. Để skill QC tồn tại độc lập, trỏ `paths.qc_skills_dir` (trong `.agent/project-context.yaml`) tới **repo QC riêng / submodule** (vd `qc-base/.claude/skills`) — `qc_skills_dir` nằm ngoài `.agent/` nên upgrade không bao giờ chạm. Chi tiết: [Guide · QC Automation](../02-guides/qc-automation.md#skill-sourcing--upgrade-safety).
82
+ > **Hệ quả với skill QC:** nếu QC sửa skill **trực tiếp trong `.agent/skills/qc/`** thì sẽ **mất sau upgrade**. Để skill QC tồn tại độc lập, trỏ `paths.qc_skills_dir` (trong `.agent/project-context.yaml`) tới **repo QC riêng / submodule** (vd `qc-base/.claude/skills`) — `qc_skills_dir` nằm ngoài `.agent/` nên upgrade không bao giờ chạm. Chi tiết: [chương QC Automation](../02-guides/tester/qc-automation.md#skill-sourcing--upgrade-safety).
83
83
 
84
84
  ---
85
85
 
@@ -96,30 +96,35 @@ Claude Code luôn mở ở **umbrella repo** (không mở trong service submodul
96
96
  │ giữ pointer (SHA) tới từng submodule
97
97
  ┌─────────────┴──────────────┐
98
98
  ▼ ▼
99
- SPEC SUBMODULE SERVICE SUBMODULE(s)
100
- (PO sở hữu · origin riêng) (Dev sở hữu · origin riêng)
101
- specs/prd · specs/bdd src/
102
- specs/design-spec .trace/*.tsv (qc_status + dev_selftest)
103
- specs/tech-docs (API contract)
104
- feedback/ (bug · proposal · prd-change-request)
99
+ SPEC SUBMODULE SERVICE SUBMODULE(s)
100
+ (PO sở hữu · origin riêng) (Dev sở hữu · origin riêng)
101
+ specs/prd · specs/bdd (web/app/system) src/ (chỉ code + tooling)
102
+ specs/design-spec · specs/tech-docs
103
+ feedback/ (bug · proposal · prd-change)
104
+ .trace/*.tsv (qc_status + dev_selftest write area của dev/QC)
105
105
  ```
106
106
 
107
+ > **Tất cả spec + `.trace/` ở SPEC repo; service submodule chỉ chứa code.** PRD/BDD/design-spec/tech-docs read-only với dev/QC; `feedback/` và `.trace/` là vùng dev/QC được ghi.
108
+
107
109
  | Role | Tạo gì | Repo đích | Push mấy tầng |
108
110
  |------|--------|-----------|---------------|
109
- | **PO** | PRD · BDD · design-spec · sửa PRD theo change-request | SPEC repo | **1 tầng** (spec repo) |
110
- | **Dev (FE/BE)** | tech-docs · code · dev test (`dev_selftest`) | tech-docs → SPEC repo · code + `.trace/` → SERVICE | code: **2 tầng** (service → umbrella pointer) · tech-docs: thêm 1 tầng ở spec repo |
111
- | **QC** | analysis/test-cases · `qc_status` · bug/gap | artifacts → `{qc_dir}/{UC-ID}/` (umbrella root `docs/`) · `qc_status` → SERVICE `.trace/` · bug/gap → SPEC `feedback/` | trace: **2 tầng** · feedback: 1 tầng (spec repo) |
112
- | **Tester** | bug report · scenario proposal · prd-change-request | SPEC repo `feedback/` | **1 tầng** (spec repo) — read-only trên specs/code |
111
+ | **PO** | PRD · BDD (web/app/system) · design-spec · sửa PRD theo change-request | SPEC repo | **1 tầng** (spec repo) |
112
+ | **Dev (FE/BE)** | tech-docs · code · dev test (`dev_selftest`) | tech-docs → SPEC repo · `dev_selftest` SPEC `.trace/` · code → SERVICE | code: **2 tầng** (service → umbrella pointer) · tech-docs + trace: 1 tầng ở spec repo (cross-repo write) |
113
+ | **QC / Tester (QA)** | QC pipeline (analysis/test-cases · `qc_status`) · bug report · scenario proposal · prd-change-request | artifacts → `{qc_dir}/{UC-ID}/` (umbrella `docs/`) · `qc_status` → SPEC `.trace/` · bug/proposal/change-request → SPEC `feedback/` | artifacts: 1 tầng (umbrella) · trace + feedback: **1 tầng** (spec repo) — read-only trên specs/code |
114
+
115
+ > **QC = Tester (một vai trò QA):** cùng một người chạy pipeline `/qc-*` (sinh `qc_status` chính thức) **và** `/report-bug` · `/propose-scenario`. Phân biệt thật sự là **Dev self-test (`dev_selftest`) vs QC/Tester authoritative (`qc_status`)** — không phải QC vs Tester.
113
116
 
114
117
  Thứ tự bàn giao (mỗi mũi tên = `git push` rồi role kế tiếp `/sync`):
115
118
 
116
119
  ```
117
- PO ─push spec─▶ Dev /sync ─code 2 tầng─▶ QC /sync ─qc_status 2 tầng + bug/gap 1 tầng─▶ PO/Dev /sync
118
- BDD approved tech-docs + src test + report fix code / sửa PRD → /generate-bdd lại
119
- (vòng feedback: xem Bug Flow §9)
120
+ PO ─push spec─▶ Dev /sync ─code 2 tầng─▶ QC/Tester /sync ─qc_status + bug 1 tầng (spec)─▶ PO/Dev /sync
121
+ BDD approved tech-docs + src test + report fix code / sửa PRD → /generate-bdd lại
122
+ (vòng feedback: xem Bug Flow §9)
120
123
  ```
121
124
 
122
- > **`qc_status` ở service nhưng analysis docs ở umbrella:** `qc_dir` (mặc định `docs/`) **không** auto-route theo service như `trace_dir`. Muốn artifacts QC nằm cùng service submodule (push chung 2 tầng với trace) → set `paths.qc_dir` trong `{service}/.agent/project-context.yaml`, hoặc trỏ ra repo QC riêng.
125
+ > **`qc_status` ở spec repo nhưng QC analysis docs ở umbrella root:** `qc_status` ghi vào `.trace/` (đã dồn về `{spec_source}/.trace`), còn `qc_dir` (analysis/test-cases, mặc định `docs/`) **không** auto-route nằm umbrella root. Muốn artifacts QC nằm chỗ khác → set `paths.qc_dir` trong `.agent/project-context.yaml`, hoặc trỏ ra repo QC riêng.
126
+
127
+ > **Git flow `git` cụ thể cho từng role** (ví dụ end-to-end một feature, kèm `cd`/`add`/`commit`/`push` thực tế): [§4.7](#47--git-flow-cụ-thể-theo-role-ví-dụ-feature-ft-042-checkout-domain-payment).
123
128
 
124
129
  ### 4.1 — Clone lần đầu
125
130
 
@@ -163,10 +168,10 @@ git push
163
168
  ### 4.4 — Commit 2 tầng (thay đổi trong service submodule)
164
169
 
165
170
  ```bash
166
- # Tầng 1: commit trong service submodule
171
+ # Tầng 1: commit trong service submodule (CHỈ code — BDD, tech-docs, .trace đều ở spec repo)
167
172
  cd user-service
168
- git add specs/bdd/ src/
169
- git commit -m "feat(FEAT-01): add BDD and implementation"
173
+ git add src/
174
+ git commit -m "feat(FEAT-01): implementation"
170
175
  git push origin main
171
176
  cd ..
172
177
 
@@ -179,10 +184,12 @@ git push
179
184
  > ⚠️ **PHẢI push cả 2 tầng.** Push umbrella mà quên push submodule → người khác pull về bị lỗi "commit không tồn tại".
180
185
  >
181
186
  > **Tech-docs (API contract):** khi `setup.spec_source` được set, tech-design **luôn** nằm ở `{spec_source}/specs/tech-docs` (spec repo chung) — commit + push riêng trong spec submodule, FE/App đọc qua `/sync`. Per-service tech-docs chỉ dùng khi **không** có `spec_source`.
187
+ >
188
+ > **`.trace/` cũng ở spec repo:** khi `spec_source` set, `/generate-code` · `/dev-run-test` · `/qc-run-test` chạy trong service nhưng ghi trace vào `{spec_source}/.trace` → commit + push **trong spec submodule** (1 tầng, cross-repo, giống `feedback/`). Service submodule **không** còn `.trace/`.
182
189
 
183
- ### 4.5 — Lỡ tay sửa file trong spec submodule (read-only)
190
+ ### 4.5 — Lỡ tay sửa **spec** trong spec submodule (PRD/BDD/design-spec/tech-docs read-only)
184
191
 
185
- Spec submodule là **read-only** cho dev/tester. Nếu lỡ sửa → bỏ thay đổi:
192
+ PRD/BDD/design-spec/tech-docs trong spec submodule là **read-only** cho dev/tester (chỉ PO sửa). `feedback/` và `.trace/` thì dev/QC được ghi. Nếu lỡ sửa spec → bỏ thay đổi:
186
193
 
187
194
  ```bash
188
195
  cd my-project-specs
@@ -201,6 +208,123 @@ Muốn cập nhật PRD → báo PO sửa trong spec repo của họ rồi push.
201
208
  | Submodule ở `detached HEAD` | Bình thường khi dùng submodule | Không cần lo nếu không sửa file trong đó |
202
209
  | Conflict trong submodule pointer | 2 người cùng update submodule | `git checkout --theirs <sub> && git add <sub>` |
203
210
 
211
+ ### 4.7 — Git flow cụ thể theo role (ví dụ feature **FT-042 Checkout**, domain `payment`)
212
+
213
+ Topology giả định cho mọi ví dụ dưới đây:
214
+
215
+ | Repo | Vai trò | Ai sở hữu |
216
+ |------|---------|-----------|
217
+ | `my-project/` | **umbrella** — Claude Code mở ở đây, giữ pointer | team |
218
+ | `my-project-specs/` | **spec** submodule — PRD/BDD/design-spec/tech-docs + `.trace/` + `feedback/` | PO |
219
+ | `payment-be/` | **service** submodule — chỉ code BE | BE dev |
220
+ | `my-project-web/` | **service** submodule — chỉ code FE | FE dev |
221
+
222
+ > **Quy tắc 1 dòng:** chỉ **code** mới push **2 tầng** (service → umbrella pointer). Mọi thứ khác — PRD/BDD/tech-docs/`.trace/`/`feedback/` ở spec repo, và QC artifacts ở umbrella — đều **1 tầng**.
223
+
224
+ **① PO — 1 tầng (spec repo)**
225
+ ```bash
226
+ cd my-project-specs && git pull
227
+ # /generate-prd · /generate-design-spec · /generate-bdd (web/app/system) · set @trace.status: approved
228
+ git add specs/prd/payment/FT-042-checkout.md \
229
+ specs/design-spec/payment/FT-042-checkout-design.md \
230
+ specs/bdd/payment/system/FT-042-UC1-checkout-system.feature \
231
+ specs/bdd/payment/web/FT-042-UC1-checkout-web.feature \
232
+ specs/bdd/payment/app/FT-042-UC1-checkout-app.feature
233
+ git commit -m "feat(payment): FT-042 checkout — PRD + design-spec + BDD (web/app/system)"
234
+ git push origin main # → báo Dev team chạy /sync
235
+ ```
236
+
237
+ **② BE Dev — code 2 tầng · tech-docs + trace 1 tầng (cross-repo)**
238
+ ```bash
239
+ cd my-project && /sync # umbrella root: pull spec + services + Living Docs
240
+
241
+ # (a) tech-docs (API contract) → SPEC repo [1 tầng]
242
+ # /generate-tech-docs payment/system/FT-042-UC1 ghi vào my-project-specs/specs/tech-docs/payment/
243
+ cd my-project-specs
244
+ git add specs/tech-docs/payment/FT-042-UC1-tech-design.md
245
+ git commit -m "docs(payment): FT-042 UC1 BE API contract"
246
+ git push origin main
247
+ cd ..
248
+
249
+ # (b) code → SERVICE repo [Tầng 1]
250
+ # /generate-code payment/system/FT-042-UC1 ghi vào payment-be/src/
251
+ cd payment-be
252
+ git checkout -b feat/FT-042-checkout
253
+ git add src/
254
+ git commit -m "feat(payment): FT-042 UC1 checkout endpoint + service"
255
+ git push origin feat/FT-042-checkout # → mở MR trong payment-be
256
+ cd ..
257
+
258
+ # (c) dev_selftest → SPEC repo .trace [1 tầng, cross-repo]
259
+ # /dev-run-test ghi my-project-specs/.trace/FT-042.tsv
260
+ cd my-project-specs
261
+ git add .trace/FT-042.tsv
262
+ git commit -m "chore(trace): FT-042 dev_selftest=pass"
263
+ git push origin main
264
+ cd ..
265
+
266
+ # (d) sau khi MR payment-be merge → bump umbrella pointer [Tầng 2]
267
+ cd payment-be && git checkout main && git pull && cd ..
268
+ git add payment-be
269
+ git commit -m "chore: bump payment-be → FT-042 checkout"
270
+ git push origin main
271
+ ```
272
+
273
+ **③ FE/Web Dev — 2 phase; push giống BE (code 2 tầng · tech-docs + trace 1 tầng)**
274
+ ```bash
275
+ cd my-project && /sync
276
+
277
+ # Phase 1 — UI + mock (chưa cần BE deploy)
278
+ # /generate-code payment/web/FT-042-UC1 --phase=ui → code trong my-project-web
279
+ cd my-project-web
280
+ git checkout -b feat/FT-042-checkout-ui
281
+ git add src/
282
+ git commit -m "feat(payment): FT-042 checkout UI + mock adapter"
283
+ git push origin feat/FT-042-checkout-ui
284
+ cd ..
285
+
286
+ # Phase 2 — khi BE System BDD + contract approved:
287
+ # (a) FE tech-design (§2b test-ids + §4 API map) → SPEC repo [1 tầng]
288
+ cd my-project-specs
289
+ git add specs/tech-docs/payment/FT-042-UC1-tech-design-web.md
290
+ git commit -m "docs(payment): FT-042 UC1 FE web tech-design (§2b test-ids + §4 API)"
291
+ git push origin main
292
+ cd ..
293
+ # (b) /generate-code payment/web/FT-042-UC1 --phase=integration → wire API thật [Tầng 1]
294
+ cd my-project-web
295
+ git add src/
296
+ git commit -m "feat(payment): FT-042 wire real checkout API"
297
+ git push origin feat/FT-042-checkout-ui
298
+ cd ..
299
+ # (c) dev_selftest → spec .trace + (d) bump umbrella pointer sau merge — giống BE bước (c)(d)
300
+ ```
301
+
302
+ **④ QC / Tester (một vai trò QA) — artifacts 1 tầng (umbrella) · qc_status + bug/proposal 1 tầng (spec repo)**
303
+
304
+ > QC và Tester là **cùng một người**: vừa chạy pipeline `/qc-*` (sinh `qc_status` chính thức) vừa `/report-bug` · `/propose-scenario`. Read-only trên specs + code.
305
+
306
+ ```bash
307
+ cd my-project && /sync # đọc specs read-only
308
+ # /qc-analyze · /qc-plan · /qc-design-test · /qc-review · /qc-run-test · /qc-report
309
+
310
+ # (a) artifacts phân tích/test-case → {qc_dir}/{UC-ID}/ (qc_dir mặc định = docs/) → commit UMBRELLA [1 tầng]
311
+ git add docs/FT-042/ # REQUIREMENT_ANALYSIS.md · TEST_PLAN.md · test-cases/*.Test.md
312
+ git commit -m "qc(payment): FT-042 analysis + test design"
313
+ git push origin main
314
+
315
+ # (b) qc_status → SPEC .trace + bug/proposal/change-request → SPEC feedback/ [1 tầng, cross-repo]
316
+ cd my-project-specs
317
+ git add .trace/FT-042.tsv
318
+ git add feedback/bugs/FT-042-UC1-SC3-bug.md # /report-bug khi qc_status=fail
319
+ # hoặc: feedback/bdd-proposals/FT-042-new-scenario.md # /propose-scenario (edge case ngoài BDD)
320
+ # hoặc: feedback/prd-change-requests/FT-042-change.md # đề xuất sửa PRD
321
+ git commit -m "qc(payment): FT-042 qc_status=fail (SC3) + bug report"
322
+ git push origin main # → PO/Dev /sync thấy '📥 New tester feedback' → /fix-bug · promote
323
+ cd ..
324
+ ```
325
+
326
+ > **Tóm tắt số tầng push:** chỉ **code = 2 tầng** (service → umbrella pointer); PRD/BDD/tech-docs/`.trace`/`feedback` (spec repo) = **1 tầng**; QC artifacts `qc_dir` (umbrella) = **1 tầng**. Lỡ tay sửa spec read-only → §4.5.
327
+
204
328
  ---
205
329
 
206
330
  ## 5. Living Docs sync
@@ -211,12 +335,12 @@ Living Docs panel hiển thị trạng thái trace của toàn bộ feature. Ref
211
335
  /validate-traces
212
336
  ```
213
337
 
214
- - Đọc TSVs từ **tất cả** service submodule (`.trace/*.tsv` authoritative — commit mỗi service).
338
+ - Đọc TSVs từ **một nơi duy nhất** `{spec_source}/.trace/*.tsv` (authoritative — commit trong spec repo; mỗi scenario mang `@trace.service` để biết service nào). KHÔNG còn quét/merge từng service.
215
339
  - Cập nhật cột `dev_selftest` (pass/fail/not_run) + `dev_selftest_at`.
216
- - Ghi canonical `trace-report.json` + bản TSV mirror → `{spec_source}/.living-docs/` (gitignored).
340
+ - Ghi `trace-report.json` → `{spec_source}/.living-docs/` (generated, gitignored).
217
341
  - Mirror thêm về `./.trace` của workspace hiện tại → panel không rỗng kể cả khi đứng trong 1 service submodule đơn lẻ.
218
342
 
219
- > **Report nằm ở đâu:** canonical `trace-report.json` + TSV mirror ở **spec module** tại `{spec_source}/.living-docs/` (gitignored, regenerate bởi `/sync` hoặc `/validate-traces`). Authoritative per-service `.trace/*.tsv` vẫn commit trong mỗi service.
343
+ > **Report nằm ở đâu:** authoritative `.trace/*.tsv` ở **spec module** `{spec_source}/.trace/` (committed — một chỗ cho PM). Report `trace-report.json` ở `{spec_source}/.living-docs/` + panel mirror `./.trace` đều **generated, gitignored** — regenerate bởi `/sync` hoặc `/validate-traces`.
220
344
  >
221
345
  > **.gitignore:** thêm `.trace/` trong repo hiện tại **và** `.living-docs/` trong spec module — đều là mirror read-only, không commit.
222
346
 
@@ -246,7 +370,7 @@ git pull
246
370
  /review-context --fix {prd-file} # auto-fix vấn đề nhỏ
247
371
  # → update @trace.status: approved khi PRD sẵn sàng
248
372
  /generate-design-spec {prd-file} # FE/App
249
- /generate-bdd {prd-file} # web / app / system (lần lượt)
373
+ /generate-bdd {prd-file} # outside-in: web app system (System BDD tổng hợp từ web+app)
250
374
 
251
375
  git add specs/
252
376
  git commit -m "feat({domain}): add {TICKET-ID} PRD, design spec, and BDD"
@@ -265,16 +389,17 @@ git add my-project-specs && git commit -m "chore: sync specs" && git push
265
389
  # Đọc Web BDD do PO generate (KHÔNG tự generate BDD):
266
390
  # my-project-specs/specs/bdd/{domain}/web/{TICKET-ID}-UC*.feature
267
391
 
268
- /generate-tech-docs {domain}/{TICKET-ID}-UC1
269
- /review-tech-docs {domain}/{TICKET-ID}-UC1
270
-
271
- # ── BE chưa sẵn sàng ──
272
- /generate-code {domain}/{TICKET-ID}-UC1 --phase=ui # UI + mock adapter (tester test ngay)
392
+ # ── BE chưa deploy API → làm UI trước ──
393
+ /generate-code {domain}/web/{TICKET-ID}-UC1 --phase=ui # UI + mock (shape: BE contract nếu có, else System BDD + warn)
273
394
  /dev-gen-test {domain}/{TICKET-ID}-UC1
274
395
  /review-code {files-changed}
275
- /dev-run-test # dev self-check (dev_selftest)
396
+ /dev-run-test # dev self-check (dev_selftest)
397
+
398
+ # ── Khi BE đã có System BDD + tech-docs (API contract) approved ──
399
+ /generate-tech-docs {domain}/web/{TICKET-ID}-UC1 # FE client design — GATED: cần System BDD + BE contract
400
+ /review-tech-docs {domain}/{TICKET-ID}-UC1-web # SA/Lead review (bump revision)
276
401
  # → sau khi sign-off gate approved:
277
- /generate-code {domain}/{TICKET-ID}-UC1 --phase=integration # wire API thật
402
+ /generate-code {domain}/web/{TICKET-ID}-UC1 --phase=integration # wire API thật theo §4 FE tech-design
278
403
 
279
404
  # ── API đã có sẵn ──
280
405
  /generate-code {domain}/{TICKET-ID}-UC1 # không cần --phase
@@ -282,7 +407,7 @@ git add my-project-specs && git commit -m "chore: sync specs" && git push
282
407
  /review-code {files-changed}
283
408
  /dev-run-test
284
409
 
285
- # Commit 2 tầng (xem §4.4)
410
+ # Commit 2 tầng (code) + 1 tầng (tech-docs/trace) — git flow cụ thể: §4.7 ②③
286
411
  ```
287
412
 
288
413
  ### BE Dev — Nhận task mới
@@ -302,12 +427,12 @@ cd my-project-be
302
427
  /review-code {files-changed} # AI lặp lỗi → accept "Record as lesson?"
303
428
  /dev-run-test
304
429
 
305
- # Commit 2 tầng vào đúng service submodule theo domain (xem §4.4)
430
+ # Commit 2 tầng vào service submodule theo domain + tech-docs/trace 1 tầng — git flow cụ thể: §4.7 ②
306
431
  ```
307
432
 
308
- ### QC — Chạy native QC pipeline (tóm tắt)
433
+ ### QC / Tester — Chạy native QC pipeline (tóm tắt)
309
434
 
310
- Điều kiện: BDD đã `approved`. Module `qc-playwright` (Python + pytest-playwright + Page Object).
435
+ QC và Tester là **một vai trò QA** (xem [Tester guide](../02-guides/tester/README.md)) — cùng người chạy pipeline `/qc-*` **và** `/report-bug` · `/propose-scenario`. Điều kiện: BDD đã `approved`. Module `qc-playwright` (Python + pytest-playwright + Page Object).
311
436
 
312
437
  ```bash
313
438
  cd my-project-web
@@ -316,7 +441,7 @@ cd my-project-web
316
441
  /validate-traces # refresh dashboard → qc_status hiện trên Living Docs
317
442
  ```
318
443
 
319
- > `/qc-run-test` ghi `qc_status` + `qc_run_at` vào trace TSV. Chi tiết từng layer: [Guide · QC Automation](../02-guides/qc-automation.md).
444
+ > `/qc-run-test` ghi `qc_status` + `qc_run_at` vào trace TSV. Chi tiết từng layer: [chương QC Automation](../02-guides/tester/qc-automation.md). Git flow cụ thể (artifacts umbrella + qc_status/bug/proposal → spec): §4.7 ④ (QC/Tester là một role).
320
445
 
321
446
  ---
322
447
 
@@ -346,7 +471,7 @@ A: Không. Chỉ cài ở umbrella repo. Service submodule là git repo thườn
346
471
  A: Luôn ở **umbrella repo** — có config và thấy được cả spec submodule lẫn service submodule.
347
472
 
348
473
  **Q: Generate BDD ra file ở đâu?**
349
- A: Phụ thuộc `@trace.domain` trong PRD. Context-loader tra `services.{domain}.specs_dir`. Vd `@trace.domain: user` `user-service/specs/bdd/user/`.
474
+ A: Khi `spec_source` (umbrella) **spec repo**: `{spec_source}/specs/bdd/{domain}/…` (tất cả BDD web/app/system đều ở đây, cross-team). Trace `.tsv` **cũng** ở spec repo (`{spec_source}/.trace`) — một chỗ cho PM. Service submodule chỉ chứa code. Chỉ khi KHÔNG có `spec_source` thì BDD + trace mới per-service.
350
475
 
351
476
  **Q: Quên push service submodule, chỉ push umbrella, người khác báo lỗi?**
352
477
  A: `cd <service> && git push origin main` — xong, người khác pull lại hết lỗi.
@@ -12,6 +12,7 @@ Dùng mục này khi bạn đã biết mình muốn làm gì và chỉ cần tra
12
12
 
13
13
  | Trang | Nội dung |
14
14
  |-------|----------|
15
+ | [Command Cheat-Sheet](command-cheatsheet.md) | **Bắt đầu ở đây nếu bối rối:** bản đồ 1 trang — luồng end-to-end (ai chạy gì), chọn lệnh review nào, vòng review→Board→resume, giải mã flag `--fix`/`--resume`. |
15
16
  | [Command Reference](commands.md) | Bảng đầy đủ MỌI slash command — gom theo phase, kèm input/output/when. Cộng phần Command Internals (step architecture). |
16
17
  | [Trace TSV Schema](trace-schema.md) | Header chuẩn của `.trace/{UC-ID}.tsv`, ý nghĩa từng cột (gồm `dev_selftest`, `qc_status`…), các `@trace.*` tag, và JSON report. |
17
18
  | [Stack Modules](modules.md) | 15 module dưới `modules/`, cách gom theo `platform_type` (backend / web-frontend / mobile), và module QC `qc-playwright`. |
@@ -20,6 +21,8 @@ Dùng mục này khi bạn đã biết mình muốn làm gì và chỉ cần tra
20
21
 
21
22
  ## Điều hướng nhanh
22
23
 
24
+ - **"Tôi nên chạy lệnh nào / theo thứ tự nào?"** → [Command Cheat-Sheet](command-cheatsheet.md)
25
+ - **"Review PRD/BDD/tech/code dùng lệnh nào? `--fix` vs `--resume`?"** → [Command Cheat-Sheet](command-cheatsheet.md)
23
26
  - **"Lệnh này nhận gì, sinh ra gì?"** → [Command Reference](commands.md)
24
27
  - **"Cột `qc_status` vs `dev_selftest` khác nhau thế nào?"** → [Trace TSV Schema](trace-schema.md)
25
28
  - **"Stack của tôi map sang module nào?"** → [Stack Modules](modules.md)
@@ -0,0 +1,147 @@
1
+ [📚 Docs](../README.md) › [Reference](README.md) › Command Cheat-Sheet
2
+
3
+ # Command Cheat-Sheet — luồng & chọn lệnh
4
+
5
+ > Bối rối không biết **chạy lệnh nào, theo thứ tự nào, ai chạy**? Trang này là bản đồ 1 trang. Chi tiết Input/Output từng lệnh: [Command Reference](commands.md).
6
+
7
+ - [Luồng end-to-end (ai chạy gì)](#luồng-end-to-end-ai-chạy-gì)
8
+ - [Tôi muốn REVIEW thứ này → dùng lệnh nào?](#tôi-muốn-review-thứ-này--dùng-lệnh-nào)
9
+ - [Vòng review chuẩn: 3 bước (review → Board → resume)](#vòng-review-chuẩn-3-bước-review--board--resume)
10
+ - [Giải mã flag: mặc định vs --fix vs --resume](#giải-mã-flag-mặc-định-vs---fix-vs---resume)
11
+ - [QC pipeline — 6 bước tuần tự](#qc-pipeline--6-bước-tuần-tự)
12
+ - [dev-* vs qc-* — đừng nhầm](#dev--vs-qc---đừng-nhầm)
13
+
14
+ ---
15
+
16
+ ## Luồng end-to-end (ai chạy gì)
17
+
18
+ Mỗi mũi tên = "xong cái trước mới sang cái sau". Nhãn dưới mỗi lệnh là **vai trò** chạy nó.
19
+
20
+ ```mermaid
21
+ flowchart LR
22
+ A["/define-product<br/><b>PO</b>"] --> B["/generate-prd<br/><b>PO</b>"]
23
+ B --> C["/refine-prd<br/><b>PO</b> + Board"]
24
+ C --> D["/review-context (PRD)<br/><b>PO</b> · cổng chất lượng"]
25
+ D --> E["/generate-design-spec<br/><b>PO</b> (chỉ FE/App)"]
26
+ E --> F["/generate-bdd<br/><b>PO</b> · web→app→system"]
27
+ F --> G["/review-context (BDD)<br/><b>SA/Dev</b>"]
28
+ G --> H["/generate-tech-docs<br/><b>Dev</b> · BE trước, FE sau"]
29
+ H --> I["/review-tech-docs<br/><b>Dev</b> + Board"]
30
+ I --> J["/generate-code<br/><b>Dev</b>"]
31
+ J --> K["/review-code<br/><b>Dev</b> · 4 lens"]
32
+ K --> L["/dev-gen-test → /dev-run-test<br/><b>Dev</b> · self-check"]
33
+ L --> M["/qc-* (6 bước)<br/><b>QC/Tester</b>"]
34
+ M --> N["/validate-traces<br/><b>Tech Lead</b>"]
35
+ ```
36
+
37
+ > **BE bỏ qua Design Spec** (bước E) — đọc PRD trực tiếp rồi `/generate-bdd`. **Full-stack/không tách mock** → `/generate-code` một lần (bỏ qua FE 2-phase). Cross-cutting (`/sync`, `/fix-bug`, `/debug`, `/learn`, `/report-bug`, `/propose-scenario`) chạy bất cứ lúc nào, không nằm trong chuỗi này.
38
+
39
+ <details>
40
+ <summary>Bản text (ASCII fallback)</summary>
41
+
42
+ ```
43
+ PO ───────────────────────────────────────────────────────────────────────────
44
+ /define-product → /generate-prd → /refine-prd → /review-context(PRD)
45
+ → /generate-design-spec (FE/App)
46
+ → /generate-bdd (web→app→system)
47
+ SA/Dev ────────────────────────────────────────────────────────────────────────
48
+ /review-context(BDD) → /generate-tech-docs → /review-tech-docs
49
+ → /generate-code → /review-code → /dev-gen-test → /dev-run-test
50
+ QC/Tester ──────────────────────────────────────────────────────────────────────
51
+ /qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report
52
+ Tech Lead ──────────────────────────────────────────────────────────────────────
53
+ /validate-traces
54
+ ```
55
+ </details>
56
+
57
+ ---
58
+
59
+ ## Tôi muốn REVIEW thứ này → dùng lệnh nào?
60
+
61
+ Có **4 lệnh review** cho **4 loại artifact khác nhau**. Đây là điểm hay nhầm nhất:
62
+
63
+ | Tôi muốn review… | Cách dùng (ví dụ) | Nó kiểm cái gì | Ai chạy |
64
+ |---|---|---|---|
65
+ | **PRD — nội dung & độ đầy đủ** | `/refine-prd specs/prd/auth/FEAT-01-login.md` | 4 lens QA·DEV·SA·PO: AC có test được? edge case? scope rõ? | PO |
66
+ | **PRD — chất lượng trước khi approve** | `/review-context specs/prd/auth/FEAT-01-login.md` | P-checks: banned term, mơ hồ, mâu thuẫn PRD khác, thiếu section, routing `@trace.domain` | PO |
67
+ | **BDD `.feature`** | `/review-context specs/bdd/auth/system/FEAT-01-UC1-login.feature` | B-checks: mỗi AC/BR → có ≥1 scenario? Gherkin R1–R10, compliance C1–C5 | SA/Dev |
68
+ | **Tech design** | `/review-tech-docs tech-docs/auth/FEAT-01-UC1-tech-design.md` | T-checks: đúng layer/architecture, entity, trace BDD, cross-team API sign-off | Dev/SA |
69
+ | **Code** | `/review-code FEAT-01-UC1` | 4 lens: Security · Performance · Architecture · Test coverage | Dev |
70
+
71
+ > **Vì sao PRD có 2 lệnh review?** `/refine-prd` làm **trước** (cải thiện nội dung, fan-out 4 lens). `/review-context` làm **sau** như **cổng chất lượng cuối** trước khi approve + sang BDD. Thứ tự: `generate-prd → refine-prd → review-context → approve`.
72
+ >
73
+ > **Vì sao `/review-context` dùng cho cả PRD lẫn BDD?** Nó tự nhận loại theo file: `.md` trong `prd/` → PRD mode (P-checks); `.feature` → BDD mode (B-checks). Cùng một "cổng chất lượng", hai bộ tiêu chí.
74
+
75
+ ---
76
+
77
+ ## Vòng review chuẩn: 3 bước (review → Board → resume)
78
+
79
+ Mọi lệnh review (`/refine-prd`, `/review-context`, `/review-tech-docs`) đều chạy **cùng một vòng 3 bước**. Lệnh review **không sửa file** — nó chỉ ghi ra findings; bạn duyệt ở Review Board; rồi `--resume` mới áp dụng.
80
+
81
+ ```
82
+ ① /refine-prd {file} ② Mở Review Board (extension) ③ /… --resume {file}
83
+ ─────────────────────────── ────────────────────────────── ──────────────────────────
84
+ PHÂN TÍCH (read-only) → DUYỆT từng finding: → ÁP DỤNG cái đã accept
85
+ ghi .agent/review/ ✓Accept ✎Modify ⏸Defer ✗Reject + bump version + changelog
86
+ {slug}-findings.yaml 💬 Giải thích (nếu khó hiểu)
87
+ ```
88
+
89
+ - **① không đụng vào file gốc.** An toàn chạy bất cứ lúc nào.
90
+ - **② Review Board** = panel của extension *Spec Driven Dev*. Right-click file `*-findings.yaml` → Open Review Board, hoặc bấm thông báo khi findings vừa tạo. Finding khó hiểu → bấm **💬 Giải thích** (no-tech + đề xuất phương án, chờ confirm).
91
+ - **③ `--resume`** đọc các finding `accepted`/`modified` và áp vào file gốc, rồi bump version. Nút **⚡ Apply** trên Board tự chạy đúng lệnh `--resume` này cho bạn.
92
+
93
+ ---
94
+
95
+ ## Giải mã flag: mặc định vs --fix vs --resume
96
+
97
+ Cùng một lệnh `/review-context` (và họ review nói chung) có **3 chế độ**. Đây là khác biệt:
98
+
99
+ | Chế độ | Lệnh | Làm gì | Khi nào |
100
+ |---|---|---|---|
101
+ | **Phân tích** (mặc định, không flag) | `/review-context {file}` | Chỉ phân tích → ghi findings. **Không sửa file.** | Bước ① mọi vòng review |
102
+ | **`--fix`** | `/review-context --fix {file}` | Phân tích **rồi tự áp ngay** các finding `auto_fixable` (banned term, metadata, coverage matrix…). Bỏ qua Board. | Dev muốn dọn nhanh lỗi máy-sửa-được, không cần người quyết |
103
+ | **`--resume`** | `/review-context --resume {file}` | **Không phân tích lại.** Đọc findings file, áp các finding **người đã accept** ở Board. | Bước ③ sau khi duyệt ở Board |
104
+
105
+ > **Nhớ nhanh:** `--fix` = "máy tự sửa cái an toàn **ngay**" · `--resume` = "áp cái **tôi đã duyệt**". Không flag = "chỉ xem, đừng động vào file".
106
+
107
+ ---
108
+
109
+ ## QC pipeline — 6 bước tuần tự
110
+
111
+ QC là **chuỗi 6 lệnh chạy theo thứ tự** sau khi BDD đã approved. Output bước trước là input bước sau:
112
+
113
+ ```
114
+ /qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report
115
+ scope test test-case duyệt chạy + report
116
+ + gaps plan chi tiết TC/script qc_status HTML
117
+ ```
118
+
119
+ | # | Lệnh | Ra cái gì |
120
+ |---|---|---|
121
+ | 1 | `/qc-analyze` | `REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md` |
122
+ | 2 | `/qc-plan` | `TEST_PLAN.md` (scope, layer, ưu tiên) |
123
+ | 3 | `/qc-design-test` | `test-cases/*.Test.md` |
124
+ | 4 | `/qc-review` | Verdict APPROVED / NEEDS_FIX (inline) |
125
+ | 5 | `/qc-run-test` | Script Python + ghi `qc_status` vào trace TSV |
126
+ | 6 | `/qc-report` | `report.html` (Playwright trace + pytest-html) |
127
+
128
+ > Chi tiết: [chương QC Automation](../02-guides/tester/qc-automation.md). Stack `qc-playwright`, độc lập với module code của dev.
129
+
130
+ ---
131
+
132
+ ## dev-* vs qc-* — đừng nhầm
133
+
134
+ Hai luồng test **tách biệt**, ghi **hai cột khác nhau** trong trace TSV:
135
+
136
+ | | `/dev-*` (dev self-check) | `/qc-*` (QC chính thức) |
137
+ |---|---|---|
138
+ | Ai chạy | **Dev** — tự kiểm code mình | **QC/Tester** |
139
+ | Lệnh | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` | `/qc-analyze` … `/qc-report` (6 bước) |
140
+ | Ghi signal | `dev_selftest` (pass/fail/not_run) | `qc_status` (pass/fail/skip/not_run) |
141
+ | Là coverage chính thức? | **KHÔNG** — chỉ tín hiệu "dev đã smoke" | **CÓ** — coverage authoritative |
142
+
143
+ > Cả hai hiển thị **cạnh nhau** trong Living Docs. `dev_selftest: pass` **không** thay thế QC. Xem [Traceability](../03-concepts/traceability.md#hai-tín-hiệu-test-dev_selftest-vs-qc_status).
144
+
145
+ ---
146
+
147
+ *Xem thêm:* [Command Reference (chi tiết)](commands.md) · [Concepts › Pipeline](../03-concepts/pipeline.md) · [Developer › Workflow](../02-guides/developer/workflow.md)