@anhth2/spec-driven-dev-plugin 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/commands/debug.md +38 -8
  2. package/commands/define-product.md +38 -8
  3. package/commands/dev-gen-test.md +39 -9
  4. package/commands/dev-gen-test.tmpl +1 -1
  5. package/commands/dev-run-test.md +43 -10
  6. package/commands/dev-run-test.tmpl +5 -2
  7. package/commands/dev-smoke-test.md +38 -8
  8. package/commands/fix-bug.md +38 -8
  9. package/commands/generate-bdd.md +42 -10
  10. package/commands/generate-bdd.tmpl +4 -2
  11. package/commands/generate-code.md +39 -9
  12. package/commands/generate-code.tmpl +1 -1
  13. package/commands/generate-design-spec.md +38 -8
  14. package/commands/generate-prd.md +38 -8
  15. package/commands/generate-spec-manifest.md +38 -8
  16. package/commands/generate-tech-docs.md +38 -8
  17. package/commands/learn.md +38 -8
  18. package/commands/propose-scenario.md +38 -8
  19. package/commands/qc-analyze.md +514 -0
  20. package/commands/qc-analyze.tmpl +71 -0
  21. package/commands/qc-design-test.md +510 -0
  22. package/commands/qc-design-test.tmpl +67 -0
  23. package/commands/qc-plan.md +492 -0
  24. package/commands/qc-plan.tmpl +49 -0
  25. package/commands/qc-report.md +491 -0
  26. package/commands/qc-report.tmpl +48 -0
  27. package/commands/qc-review.md +496 -0
  28. package/commands/qc-review.tmpl +53 -0
  29. package/commands/qc-run-test.md +538 -0
  30. package/commands/qc-run-test.tmpl +77 -0
  31. package/commands/refine-prd.md +38 -8
  32. package/commands/report-bug.md +38 -8
  33. package/commands/review-code.md +38 -8
  34. package/commands/review-context.md +38 -8
  35. package/commands/review-tech-docs.md +38 -8
  36. package/commands/setup-ai-first.md +7 -0
  37. package/commands/sync.md +7 -0
  38. package/commands/update-framework.md +7 -0
  39. package/commands/validate-traces.md +54 -12
  40. package/commands/validate-traces.tmpl +16 -4
  41. package/core/FRAMEWORK_VERSION +1 -1
  42. package/core/commands/debug.md +38 -8
  43. package/core/commands/define-product.md +38 -8
  44. package/core/commands/dev-gen-test.md +39 -9
  45. package/core/commands/dev-run-test.md +43 -10
  46. package/core/commands/dev-smoke-test.md +38 -8
  47. package/core/commands/fix-bug.md +38 -8
  48. package/core/commands/generate-bdd.md +42 -10
  49. package/core/commands/generate-code.md +39 -9
  50. package/core/commands/generate-design-spec.md +38 -8
  51. package/core/commands/generate-prd.md +38 -8
  52. package/core/commands/generate-spec-manifest.md +38 -8
  53. package/core/commands/generate-tech-docs.md +38 -8
  54. package/core/commands/learn.md +38 -8
  55. package/core/commands/propose-scenario.md +38 -8
  56. package/core/commands/qc-analyze.md +514 -0
  57. package/core/commands/qc-design-test.md +510 -0
  58. package/core/commands/qc-plan.md +492 -0
  59. package/core/commands/qc-report.md +491 -0
  60. package/core/commands/qc-review.md +496 -0
  61. package/core/commands/qc-run-test.md +538 -0
  62. package/core/commands/refine-prd.md +38 -8
  63. package/core/commands/report-bug.md +38 -8
  64. package/core/commands/review-code.md +38 -8
  65. package/core/commands/review-context.md +38 -8
  66. package/core/commands/review-tech-docs.md +38 -8
  67. package/core/commands/setup-ai-first.md +7 -0
  68. package/core/commands/sync.md +7 -0
  69. package/core/commands/update-framework.md +7 -0
  70. package/core/commands/validate-traces.md +54 -12
  71. package/core/modules/qc-playwright/stack-profile.yaml +65 -0
  72. package/core/skills/code/SKILL.md +45 -8
  73. package/core/skills/debug/SKILL.md +52 -8
  74. package/core/skills/design-spec/SKILL.md +38 -8
  75. package/core/skills/discovery/SKILL.md +38 -8
  76. package/core/skills/prd/SKILL.md +14 -0
  77. package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
  78. package/core/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
  79. package/core/skills/qc/qa-analyst/business-rules.md +55 -0
  80. package/core/skills/qc/qa-analyst/data-flow.md +60 -0
  81. package/core/skills/qc/qa-analyst/spec-breakdown.md +57 -0
  82. package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
  83. package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
  84. package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
  85. package/core/skills/qc/qa-designer/functional/api.md +45 -0
  86. package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
  87. package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
  88. package/core/skills/qc/qa-designer/integration/api.md +42 -0
  89. package/core/skills/qc/qa-designer/integration/db.md +39 -0
  90. package/core/skills/qc/qa-designer/integration/gui.md +40 -0
  91. package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
  92. package/core/skills/qc/qa-designer/non-functional.md +40 -0
  93. package/core/skills/qc/qa-planner/test-plan.md +120 -0
  94. package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
  95. package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
  96. package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
  97. package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
  98. package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
  99. package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
  100. package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
  101. package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
  102. package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
  103. package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
  104. package/core/skills/qc/qa-runner/e2e.md +49 -0
  105. package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
  106. package/core/skills/qc/qa-runner/functional/api.md +35 -0
  107. package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
  108. package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
  109. package/core/skills/qc/qa-runner/integration.md +47 -0
  110. package/core/skills/qc/qa-runner/non-functional.md +49 -0
  111. package/core/skills/qc/qa-runner/report/report.md +37 -0
  112. package/core/skills/setup-ai-first/SKILL.md +7 -0
  113. package/core/skills/spec/SKILL.md +14 -0
  114. package/core/skills/test/SKILL.md +83 -16
  115. package/core/steps/context-loader.md +31 -8
  116. package/core/steps/report-footer.md +7 -0
  117. package/core/templates/project-context.yaml +8 -0
  118. package/docs/01-getting-started/README.md +19 -0
  119. package/docs/01-getting-started/core-concepts.md +102 -0
  120. package/docs/01-getting-started/installation.md +154 -0
  121. package/docs/01-getting-started/quickstart.md +85 -0
  122. package/docs/02-guides/README.md +27 -0
  123. package/docs/02-guides/developer/README.md +46 -0
  124. package/docs/02-guides/developer/bdd-and-trace.md +123 -0
  125. package/docs/02-guides/developer/commands.md +76 -0
  126. package/docs/02-guides/developer/pr-checklist.md +15 -0
  127. package/docs/02-guides/developer/scenarios.md +448 -0
  128. package/docs/02-guides/developer/workflow.md +59 -0
  129. package/docs/02-guides/product-owner/README.md +77 -0
  130. package/docs/02-guides/product-owner/commands.md +30 -0
  131. package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
  132. package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
  133. package/docs/02-guides/product-owner/scenarios.md +357 -0
  134. package/docs/02-guides/qc-automation.md +92 -0
  135. package/docs/02-guides/tester/README.md +72 -0
  136. package/docs/02-guides/tester/bug-reporting.md +117 -0
  137. package/docs/02-guides/tester/reading-specs.md +79 -0
  138. package/docs/02-guides/tester/scenarios.md +186 -0
  139. package/docs/02-guides/tester/spec-manifest.md +124 -0
  140. package/docs/02-guides/tester/test-checklist.md +31 -0
  141. package/docs/02-guides/tester/workflow.md +79 -0
  142. package/docs/03-concepts/README.md +19 -0
  143. package/docs/03-concepts/architecture.md +243 -0
  144. package/docs/03-concepts/pipeline.md +249 -0
  145. package/docs/03-concepts/traceability.md +148 -0
  146. package/docs/04-operations/README.md +33 -0
  147. package/docs/04-operations/bug-flow.md +321 -0
  148. package/docs/04-operations/publishing.md +137 -0
  149. package/docs/04-operations/sync-and-update.md +328 -0
  150. package/docs/05-reference/README.md +29 -0
  151. package/docs/05-reference/commands.md +229 -0
  152. package/docs/05-reference/modules.md +110 -0
  153. package/docs/05-reference/trace-schema.md +146 -0
  154. package/docs/README.md +51 -0
  155. package/modules/qc-playwright/stack-profile.yaml +65 -0
  156. package/package.json +2 -2
  157. package/skills/code/SKILL.md +45 -8
  158. package/skills/debug/SKILL.md +52 -8
  159. package/skills/design-spec/SKILL.md +38 -8
  160. package/skills/discovery/SKILL.md +38 -8
  161. package/skills/prd/SKILL.md +14 -0
  162. package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
  163. package/skills/qc/qa-analyst/acceptance-criteria.md +56 -0
  164. package/skills/qc/qa-analyst/business-rules.md +55 -0
  165. package/skills/qc/qa-analyst/data-flow.md +60 -0
  166. package/skills/qc/qa-analyst/spec-breakdown.md +57 -0
  167. package/skills/qc/qa-designer/e2e/journey.md +41 -0
  168. package/skills/qc/qa-designer/exploratory/charter.md +68 -0
  169. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
  170. package/skills/qc/qa-designer/functional/api.md +45 -0
  171. package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
  172. package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
  173. package/skills/qc/qa-designer/integration/api.md +42 -0
  174. package/skills/qc/qa-designer/integration/db.md +39 -0
  175. package/skills/qc/qa-designer/integration/gui.md +40 -0
  176. package/skills/qc/qa-designer/integration/kafka.md +40 -0
  177. package/skills/qc/qa-designer/non-functional.md +40 -0
  178. package/skills/qc/qa-planner/test-plan.md +120 -0
  179. package/skills/qc/qa-reviewer/script/e2e.md +87 -0
  180. package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
  181. package/skills/qc/qa-reviewer/script/functional.md +101 -0
  182. package/skills/qc/qa-reviewer/script/integration.md +91 -0
  183. package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
  184. package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
  185. package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
  186. package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
  187. package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
  188. package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
  189. package/skills/qc/qa-runner/e2e.md +49 -0
  190. package/skills/qc/qa-runner/exploratory/session.md +36 -0
  191. package/skills/qc/qa-runner/functional/api.md +35 -0
  192. package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
  193. package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
  194. package/skills/qc/qa-runner/integration.md +47 -0
  195. package/skills/qc/qa-runner/non-functional.md +49 -0
  196. package/skills/qc/qa-runner/report/report.md +37 -0
  197. package/skills/setup-ai-first/SKILL.md +7 -0
  198. package/skills/spec/SKILL.md +14 -0
  199. package/skills/test/SKILL.md +83 -16
  200. package/steps/context-loader.md +31 -8
  201. package/steps/report-footer.md +7 -0
  202. package/templates/project-context.yaml +8 -0
  203. package/ARCHITECTURE.md +0 -258
@@ -0,0 +1,243 @@
1
+ [📚 Docs](../README.md) › [Concepts](README.md) › Architecture
2
+
3
+ # Architecture
4
+
5
+ > **Nguyên tắc**: Đọc file này để hiểu toàn bộ framework trước khi đọc bất kỳ file chi tiết nào.
6
+
7
+ Cách framework được xây dựng: 6 lớp runtime, build pipeline `*.tmpl → *.md → core/`, module plug-in system, hook data-protection, và sub-agent orchestration.
8
+
9
+ ## Mục lục
10
+
11
+ - [Layer diagram (L0 → L5)](#layer-diagram-l0--l5)
12
+ - [Data flow — một command chạy như thế nào](#data-flow--một-command-chạy-như-thế-nào)
13
+ - [Build system](#build-system)
14
+ - [Module plug-in system](#module-plug-in-system)
15
+ - [Hook system — data protection](#hook-system--data-protection)
16
+ - [Sub-agent orchestration](#sub-agent-orchestration)
17
+ - [Directory map](#directory-map)
18
+ - [Maintenance guide](#maintenance-guide)
19
+
20
+ ---
21
+
22
+ ## Layer diagram (L0 → L5)
23
+
24
+ Mỗi command chạy qua 6 lớp, từ bảo vệ dữ liệu đến sinh artifact:
25
+
26
+ ```
27
+ LAYER 0 — PROTECTION (luôn chạy trước)
28
+ hooks/data-guard.js → PreToolUse hook: chặn đọc file nhạy cảm
29
+ rules/data-protection.md → quy tắc declarative cho AI agent
30
+ │ safe ↓ blocked → ✋ STOP
31
+ LAYER 1 — ENTRY POINT (user trigger)
32
+ commands/*.tmpl (slash commands: /generate-bdd, /generate-code, …)
33
+ skills/*/SKILL.tmpl (auto-trigger theo description match)
34
+ │ cả hai build bởi bin/build.js
35
+ LAYER 2 — SHARED STEPS (DRY, injected)
36
+ steps/gate.md → resolve target file + CHECKPOINT
37
+ steps/context-loader.md → load project config + rules
38
+ steps/report-footer.md → standard output format
39
+ Injected ở build time qua {{include:steps/X.md}} (*.tmpl → *.md, gitignored)
40
+ │ context loaded
41
+ LAYER 3 — PROJECT CONTEXT (đọc từ consumer project)
42
+ .agent/project-context.yaml → paths, tech_stack, domains
43
+ CLAUDE.md (root) → umbrella-wide shared rules (base layer)
44
+ {service_root}/CLAUDE.md → service architecture + coding standards (overlay, wins)
45
+ rules/data-protection.md → AI không được đọc gì
46
+ .agent/modules/{stack}/ → stack rules (plug-in, optional)
47
+ │ context-aware
48
+ LAYER 4 — EXECUTION (command logic)
49
+ Discovery /define-product
50
+ PRD / BDD /generate-prd · /refine-prd · /generate-bdd · /generate-tech-docs
51
+ Code /generate-code · /review-code
52
+ Dev check /dev-gen-test · /dev-run-test · /dev-smoke-test → set dev_selftest
53
+ QC suite /qc-analyze → /qc-plan → /qc-design-test → /qc-review →
54
+ /qc-run-test → /qc-report → set qc_status
55
+ Trace/Debug /validate-traces · /fix-bug · /debug
56
+
57
+ LAYER 5 — OUTPUT (artifacts in consumer proj)
58
+ Spec module (cross-team, via {spec_source}):
59
+ specs/product-definition/ · specs/prd/ · specs/bdd/
60
+ specs/tech-docs/ (API contract) · .living-docs/ (gitignored)
61
+ Service submodule (per-service):
62
+ src/ · .trace/*.tsv (authoritative, committed) · .agent/review/
63
+ QC automation outputs:
64
+ QC test cases / scripts (Python pytest-playwright, Page Object)
65
+ → guides per-layer ở skills/qc/<stage>/ · qc_status trong .trace/*.tsv
66
+ ```
67
+
68
+ > **Dev self-check vs QC chính thức:** `/dev-*` set `dev_selftest` (smoke, dev tự kiểm code của mình); 6 lệnh `/qc-*` là QC automation pipeline CHÍNH THỨC (port từ agent của team QC; QC repo nay chỉ còn reference) → set `qc_status`. Hai tín hiệu **orthogonal**, cả hai surface trong Living Docs. Chi tiết: [traceability.md](traceability.md).
69
+
70
+ ---
71
+
72
+ ## Data flow — một command chạy như thế nào
73
+
74
+ Ví dụ `/generate-bdd specs/prd/payment/PAY-01.md`:
75
+
76
+ ```
77
+ User types: /generate-bdd specs/prd/payment/PAY-01.md
78
+
79
+ [L0] data-guard.js check tool calls real-time → đọc .env/*.key → BLOCK + warn
80
+
81
+ [L1] commands/generate-bdd.md (assembled từ .tmpl + injected steps) được Claude đọc
82
+
83
+ [L2] gate.md → resolve file path từ $ARGUMENTS
84
+ context-loader.md → đọc project-context.yaml, CLAUDE.md,
85
+ rules/data-protection.md, modules/{stack}/stack-profile.yaml
86
+
87
+ [L3] Claude biết: tech_stack, domains, architecture rules, sensitive files, stack patterns
88
+
89
+ [L4] generate-bdd logic: đọc PRD → extract UC/BR/AC → apply BDD rules R1–R10
90
+
91
+ [L5] Output: specs/bdd/payment/PAY-01-UC1.feature
92
+ ```
93
+
94
+ Chi tiết về step-architecture (gate / context-loader / report-footer) và sub-agent model: xem [pipeline.md](pipeline.md#command-internals--step-architecture).
95
+
96
+ ---
97
+
98
+ ## Build system
99
+
100
+ `*.tmpl` (committed) được assemble thành `*.md` (gitignored) bởi `bin/build.js`:
101
+
102
+ ```
103
+ Source (committed) Build output (gitignored)
104
+ commands/*.tmpl ──┐
105
+ skills/**/SKILL.tmpl ──┤ node bin/build.js → commands/*.md · skills/**/SKILL.md
106
+ steps/*.md (shared) ──┘
107
+
108
+ Trigger:
109
+ npm run build ← manual
110
+ prepublishOnly hook ← auto trước npm publish
111
+ bin/index.js install ← auto khi user chạy npx
112
+ ```
113
+
114
+ > Build output cũng bao gồm `core/` — bản distributable được copy vào `.agent/` của consumer khi `--init`.
115
+
116
+ ---
117
+
118
+ ## Module plug-in system
119
+
120
+ Stack module là plug-in tùy chọn: cài qua `--module`, đọc ở runtime bởi `context-loader.md`.
121
+
122
+ ```
123
+ Available modules (modules/):
124
+ java-spring, angular, react, nextjs, vue, nuxt, dotnet, golang,
125
+ php-laravel, flutter, react-native, ios-swiftui, android-compose,
126
+ context-engineering, qc-playwright
127
+
128
+ Usage:
129
+ npx @anhth2/spec-driven-dev-plugin --module java-spring
130
+ └─ copies modules/java-spring/ → consumer/.agent/modules/java-spring/
131
+
132
+ Runtime, context-loader.md đọc:
133
+ .agent/modules/{tech_stack.module}/stack-profile.yaml
134
+ .agent/modules/{tech_stack.module}/architecture-snippets/
135
+ ```
136
+
137
+ > **`qc-playwright`** là stack module cho native QC pipeline (`/qc-run-test`, `/qc-report`) — Python + pytest-playwright + Page Object — **ĐỘC LẬP** với dev implementation module (java-spring / react / flutter / …). Per-layer guides ở `skills/qc/<stage>/`. Danh sách module đầy đủ: [../05-reference/modules.md](../05-reference/modules.md).
138
+
139
+ ---
140
+
141
+ ## Hook system — data protection
142
+
143
+ ```
144
+ Consumer project setup:
145
+ .claude/settings.json ← registers hook (template)
146
+ hooks/data-guard.js ← copied khi install
147
+
148
+ Runtime — mỗi tool use (Read, Write, Edit, Bash):
149
+ data-guard.js checks:
150
+ .env* · *.key · *.pem · *secret* · *password* · *credential*
151
+ application-prod.* · appsettings.Production.*
152
+
153
+ safe → allow blocked → exit(2) + warn user
154
+ ```
155
+
156
+ ---
157
+
158
+ ## Sub-agent orchestration
159
+
160
+ Khi một command quá nặng cho single context window, orchestrator spawn các sub-agent độc lập (mỗi agent có context window riêng):
161
+
162
+ ```
163
+ Main session (orchestrator — lightweight, chỉ coordinate)
164
+ ├─ spawn spec-agent ──→ /refine-prd analysis → returns findings.yaml
165
+ ├─ spawn codegen-agent ──→ /generate-code UC1 → returns src/ changes
166
+ └─ spawn test-agent ──→ /dev-gen-test UC1 → returns self-check test files
167
+ ```
168
+
169
+ **Lợi ích:** main session không bị bloat bởi large file reads · mỗi agent focus 1 task, ít hallucination · parallel cho nhiều UC.
170
+
171
+ Pattern này được hiện thực hóa qua `steps/spawn-agent.md` và tự kích hoạt cho `/generate-bdd`, `/generate-code`, `/dev-gen-test` khi PRD vượt ngưỡng phức tạp (> 3 UC hoặc > 300 dòng). Chi tiết flow + tiết kiệm context: [pipeline.md](pipeline.md#spawn-agentmd--sub-agent-orchestration).
172
+
173
+ ---
174
+
175
+ ## Directory map
176
+
177
+ ```
178
+ spec-driven-dev/
179
+ ├── docs/ ← Toàn bộ tài liệu (bắt đầu ở docs/README.md) ◀◀◀
180
+ │ ├── 01-getting-started/
181
+ │ ├── 02-guides/
182
+ │ ├── 03-concepts/ ← file này (architecture.md)
183
+ │ ├── 04-operations/
184
+ │ └── 05-reference/
185
+ ├── bin/
186
+ │ ├── build.js ← assembles *.tmpl → *.md
187
+ │ └── index.js ← npm installer + hook installer
188
+ ├── commands/
189
+ │ └── *.tmpl ← slash commands
190
+ ├── hooks/
191
+ │ ├── data-guard.js ← PreToolUse sensitive file protection
192
+ │ └── settings.json ← hook registration template
193
+ ├── modules/
194
+ │ └── {stack}/ ← java-spring, react, …, qc-playwright
195
+ │ ├── module.yaml
196
+ │ ├── stack-profile.yaml
197
+ │ └── architecture-snippets/
198
+ ├── rules/
199
+ │ ├── data-protection.md ← what AI must NEVER read/write
200
+ │ └── workflow.md ← general AI behavior rules
201
+ ├── skills/
202
+ │ ├── {name}/SKILL.tmpl ← Claude plugin skills
203
+ │ └── qc/<stage>/ ← per-layer QC automation guides
204
+ ├── steps/
205
+ │ ├── gate.md ← shared: file resolve + checkpoint
206
+ │ ├── context-loader.md ← shared: load all project context
207
+ │ ├── spawn-agent.md ← shared: sub-agent orchestration
208
+ │ ├── capture-lesson.md ← shared: record a guardrail (/learn etc.)
209
+ │ └── report-footer.md ← shared: standard output format
210
+ └── templates/
211
+ ├── project-context.yaml ← consumer project config template
212
+ ├── architecture.template.md
213
+ └── platform-guide.template.md
214
+ ```
215
+
216
+ > **Build output (gitignored):** `commands/*.md`, `skills/**/SKILL.md`, và `core/`. Consumer-side tester artifacts nằm trong shared spec repo tại `feedback/bug-reports/` và `feedback/bdd-proposals/`.
217
+
218
+ > **Umbrella mode — API contract (tech-docs) là cross-team artifact:** khi `setup.spec_source` được set, tech-docs LUÔN route về `{spec_source}/specs/tech-docs/` (giống PRD / design-spec / domain-knowledge), KHÔNG per-service — để FE/App đọc contract qua spec submodule ở `/generate-code --phase=integration`. Chỉ khi không có `spec_source` thì tech-docs mới nằm per-service.
219
+
220
+ > **Living Docs / trace data location:** `.trace/*.tsv` của mỗi service là **authoritative** và commit trong chính service submodule. Canonical report (`trace-report.json` + TSV mirror namespaced) sinh vào spec module tại `{spec_source}/.living-docs/` (gitignored), cộng một panel mirror cục bộ tại `./.trace`. Chi tiết: [traceability.md](traceability.md#living-docs--canonical-trong-spec-module--panel-mirror).
221
+
222
+ ---
223
+
224
+ ## Maintenance guide
225
+
226
+ | Muốn thay đổi gì | Sửa file nào |
227
+ |------------------|-------------|
228
+ | Logic của 1 command cụ thể | `commands/{name}.tmpl` |
229
+ | Logic của 1 skill cụ thể | `skills/{name}/SKILL.tmpl` |
230
+ | Gate / checkpoint pattern | `steps/gate.md` |
231
+ | Context loading | `steps/context-loader.md` |
232
+ | Report format | `steps/report-footer.md` |
233
+ | Sensitive file patterns | `hooks/data-guard.js` + `rules/data-protection.md` |
234
+ | Stack-specific rules | `modules/{stack}/stack-profile.yaml` |
235
+ | QC automation rules (per-layer) | `skills/qc/<stage>/` + `modules/qc-playwright/` |
236
+ | Project setup template | `templates/project-context.yaml` |
237
+ | Build system | `bin/build.js` |
238
+ | Installer | `bin/index.js` |
239
+
240
+ Sau khi sửa bất kỳ `.tmpl` hoặc `steps/*.md`:
241
+ ```bash
242
+ npm run build # regenerate tất cả *.md
243
+ ```
@@ -0,0 +1,249 @@
1
+ [📚 Docs](../README.md) › [Concepts](README.md) › Pipeline
2
+
3
+ # Pipeline
4
+
5
+ Vòng đời feature đi qua các phase, mỗi transition có một **AI review gate**:
6
+ **Discovery → PRD → Design-Spec → BDD → Tech-Docs → Code → Dev self-check → QC automation → Tester feedback.** Phần sau mô tả từng phase và **step-architecture model** đằng sau mỗi command.
7
+
8
+ ## Mục lục
9
+
10
+ - [Phase overview](#phase-overview)
11
+ - [Workflow chi tiết](#workflow-chi-tiết)
12
+ - [QC automation pipeline (Phase 5b)](#qc-automation-pipeline-phase-5b)
13
+ - [Command internals — step architecture](#command-internals--step-architecture)
14
+ - [gate.md — universal entry](#gatemd--universal-entry)
15
+ - [context-loader.md — context loading sequence](#context-loadermd--context-loading-sequence)
16
+ - [spawn-agent.md — sub-agent orchestration](#spawn-agentmd--sub-agent-orchestration)
17
+ - [report-footer.md — standard output format](#report-footermd--standard-output-format)
18
+
19
+ ---
20
+
21
+ ## Phase overview
22
+
23
+ | Phase | Who | Commands | Output |
24
+ |-------|-----|----------|--------|
25
+ | **0. Setup** *(one-time)* | Tech Lead | `/setup-ai-first`, `/sync`, `/sync-figma-*` | Config files, submodules, component catalog |
26
+ | **1. Discovery** | PO + AI | `/define-product` | `specs/product-definition/{TICKET-ID}-{slug}.md` |
27
+ | **2. PRD** | AI → SA/PO review | `/generate-prd`, `/refine-prd`, `/review-context` | `specs/prd/{domain}/{TICKET-ID}-{slug}.md` |
28
+ | **2b. Design Spec** *(FE/App only)* | AI → Designer/PO sign-off | `/generate-design-spec` | `specs/design-spec/{domain}/{TICKET-ID}-design-spec-{platform}.md` |
29
+ | **3. BDD Spec** | AI → SA/Dev review | `/generate-bdd`, `/review-context` | `specs/bdd/{domain}/{UC-ID}.feature` |
30
+ | **4. Tech Design** | AI → SA/Lead review | `/generate-tech-docs`, `/review-tech-docs` | `tech-docs/{domain}/{UC-ID}-tech-design.md` |
31
+ | **5. Code** | AI → Dev review | `/generate-code` *(FE: `--phase=ui`/`--phase=integration`)*, `/review-code` | `src/...` |
32
+ | **6. Dev Self-Check** | Dev (own code) | `/dev-gen-test`, `/dev-run-test`, `/dev-smoke-test` | `src/test/...` — dev smoke (`dev_selftest`), tách khỏi QC suite |
33
+ | **6b. QC Automation** *(official QC suite)* | QC | `/qc-analyze` → `/qc-plan` → `/qc-design-test` → `/qc-review` → `/qc-run-test` → `/qc-report` | QC test designs + run results — set `qc_status` (`qc-playwright` module) |
34
+ | **7. Trace** | Tech Lead | `/validate-traces` | Coverage matrix + drift report |
35
+ | **8. Tester Feedback** | QA → PO/Dev | `/report-bug`, `/propose-scenario` → `/sync` surfaces | `{spec}/feedback/...` → bug fix / new scenario / PRD update |
36
+ | **Cross-cutting** | Any role | `/sync`, `/learn`, `/update-framework` | Synced repo · project guardrails · upgraded tooling |
37
+
38
+ > **PRD là platform-agnostic (Option C):** Một PRD phục vụ mọi platform — chỉ mô tả business outcome, không UI/API. FE/App: PRD → Design Spec (2b) → BDD. BE: PRD → BDD (skip 2b). Thêm platform sau không cần đổi PRD.
39
+
40
+ ---
41
+
42
+ ## Workflow chi tiết
43
+
44
+ ```
45
+ Phase 1: Discovery
46
+ /define-product ──────────→ specs/product-definition/{slug}.md
47
+ (7 phase Q&A: knowledge sync → feature def → user flow → clarify →
48
+ business rules → business logic → AC → validation matrix)
49
+
50
+ Phase 2: PRD
51
+ /generate-prd ────────────→ specs/prd/{domain}/{slug}.md
52
+ /refine-prd ──────────────→ .agent/review/{prd-slug}-findings.yaml
53
+ [Review Board: Accept/Modify/Reject]
54
+ /refine-prd --resume → apply + bump version
55
+ /review-context {prd} ────→ .agent/review/{prd-slug}-review-context-findings.yaml
56
+ --fix (auto-fixable) | Review Board → --resume (apply + bump)
57
+ Checks: banned terms (P1) · ambiguity AC/BR (P2) · conflicts (P3) · completeness (P4)
58
+ ✅ APPROVED → Phase 3 · ❌ NEEDS_FIX → fix + re-run
59
+
60
+ Phase 2b/3: Design Spec & BDD
61
+ /generate-design-spec ────→ specs/design-spec/{domain}/{TICKET-ID}-design-spec-{platform}.md
62
+ (FE/App only — PO supplies node-level Figma link ?node-id= per screen;
63
+ AI fetches each frame via Figma MCP. Screen with no readable link → ❌ Missing;
64
+ sign-off + /generate-bdd blocked tới khi mọi screen có link)
65
+ [Designer review + PO sign-off]
66
+ /generate-bdd ────────────→ specs/bdd/{domain}/{UC-ID}.feature
67
+ (apply platform vocabulary: web "clicks" / mobile "taps" / backend "submits a request")
68
+ /review-context {feature} → .agent/review/{uc-id}-review-bdd-findings.yaml
69
+ Checks: PRD coverage (mỗi AC + BR bullet → ≥1 scenario) · Gherkin R1–R10 · compliance C1–C5
70
+ ✅ APPROVED → Phase 4
71
+
72
+ Phase 4: Tech Design
73
+ /generate-tech-docs ──────→ tech-docs/{domain}/{UC-ID}-tech-design.md
74
+ (đọc @trace.module → chọn template theo platform; brownfield: reverse-document mode)
75
+ /review-tech-docs ────────→ .agent/review/{uc-id}-tech-review-findings.yaml
76
+ [Review Board] → --resume (apply + bump revision)
77
+ ✅ APPROVED → Phase 5
78
+
79
+ Phase 5: Code
80
+ /generate-code ───────────→ src/... (@trace.implements tags)
81
+ FE: --phase=ui (UI + mock adapter, tester-ready) → --phase=integration (real API after sign-off)
82
+ (component enforcement: ✅ existing / ⚠️ TODO blocked / ❌ NEW confirm)
83
+ /review-code ─────────────→ Report: Critical / Major / Minor → fix CRITICAL/MAJOR
84
+
85
+ Phase 5 (cont): Dev Self-Check (dev verifies their OWN code — NOT the official QC suite)
86
+ /dev-gen-test ────────────→ src/test/... (@trace.verifies tags)
87
+ /dev-run-test ────────────→ records dev_selftest (pass/fail/not_run) + dev_selftest_at in trace
88
+ /dev-smoke-test ──────────→ live endpoint check (optional)
89
+ /validate-traces {domain} → coverage matrix + drift detection
90
+
91
+ Phase 5b: QC Automation (the OFFICIAL QC suite — see below)
92
+
93
+ Phase 6: Tester Feedback (QA → PO/Dev, closes the loop)
94
+ /report-bug {UC-ID} ──────→ {spec}/feedback/bug-reports/{BUG-ID}.md → commit+push
95
+ /propose-scenario {UC-ID} → {spec}/feedback/bdd-proposals/{...}.md → commit+push
96
+ PO/Dev: /sync → "📥 New tester feedback" → /fix-bug · add to BDD · update PRD
97
+
98
+ Cross-cutting (any role, anytime)
99
+ /sync ────────────────────→ git pull + submodules + Living Docs + surface feedback
100
+ /learn "AI does X, should Y" → project guardrail (loaded vào mọi command)
101
+ /update-framework ────────→ upgrade framework tooling từ npm
102
+ ```
103
+
104
+ > **Large PRD (> 3 UC hoặc > 300 dòng):** `/generate-bdd`, `/generate-code`, `/dev-gen-test` tự chuyển sang **orchestration mode** — spawn 1 sub-agent/UC (xem [spawn-agent.md](#spawn-agentmd--sub-agent-orchestration)).
105
+
106
+ > **Phase 7 — `/validate-traces` statuses:** ✅ OK (code version khớp spec) · ⚠️ DRIFT (code gen từ PRD/BDD cũ → re-generate) · 🔴 GAP (scenario có trong spec nhưng không có code) · — UNTRACKED (scenario ghi nhận nhưng chưa code-gen). Chi tiết: [traceability.md](traceability.md).
107
+
108
+ ---
109
+
110
+ ## QC automation pipeline (Phase 5b)
111
+
112
+ Bộ test QC **chính thức** — native pipeline, chạy như một **branch sau khi BDD được approve** (`/review-context` (BDD) APPROVED), song song / sau khi dev `/generate-code`. 6 stage tuần tự, port từ agent của team QC (QC repo nay chỉ còn reference):
113
+
114
+ ```
115
+ BDD approved (specs/bdd/*.feature)
116
+
117
+ /qc-analyze → /qc-plan → /qc-design-test → /qc-review → /qc-run-test → /qc-report
118
+ (đọc UC/SC, phân tích) chạy test → set qc_status
119
+ ▼ ▼
120
+ QC test cases / scripts .trace/*.tsv: qc_status
121
+ (skills/qc/<stage>/ guides) (pass/fail/skip/not_run)
122
+
123
+ Mapping: mỗi QC test → scenario qua @trace.verifies={UC-ID}-SC{N}
124
+ ```
125
+
126
+ - **Implementation module:** `qc-playwright` (Python + pytest-playwright + Page Object; Playwright Trace + pytest-html, KHÔNG dùng Allure). ĐỘC LẬP với dev implementation module — dùng bởi `/qc-run-test` & `/qc-report`.
127
+ - **Khác biệt với dev self-check:** dev self-check (`/dev-*`) → `dev_selftest` (smoke, dev tự kiểm); QC automation (`/qc-*`) → `qc_status` (coverage QC chính thức). Hai tín hiệu **orthogonal**, cả hai surface trong Living Docs → xem [traceability.md](traceability.md).
128
+
129
+ ---
130
+
131
+ ## Command internals — step architecture
132
+
133
+ Mỗi command trong `.agent/commands/` được compose từ các **step file** dùng chung trong `.agent/steps/`. Đây là nền tảng — mọi command gọi chúng theo thứ tự trước khi chạy logic riêng.
134
+
135
+ | File | Role | Called by |
136
+ |------|------|-----------|
137
+ | `gate.md` | Universal entry — model check, file resolution, context load, user checkpoint | Mọi command |
138
+ | `context-loader.md` | Multi-step context loading (stack → service routing → conventions → arch → safety → domain → UI → recap) | `gate.md` Step 2 |
139
+ | `spawn-agent.md` | Sub-agent orchestration cho PRD lớn | `generate-bdd`, `generate-code`, `dev-gen-test` |
140
+ | `capture-lesson.md` | Append/refine guardrail trong project lessons file | `learn`, `review-code`, `fix-bug`, `debug` |
141
+ | `report-footer.md` | Standard output format (status badge, artifact list, next command) | Mọi command |
142
+
143
+ ### gate.md — universal entry
144
+
145
+ Mọi command bắt đầu ở đây, theo thứ tự:
146
+
147
+ | Step | What it does |
148
+ |------|-------------|
149
+ | **Step 0** | Sub-agent mode check — nếu `$ARGUMENTS` là JSON payload với `_agent_mode: true`, skip Step 1–3, dùng slim context trực tiếp |
150
+ | **Step 0-B** | Model check — prompt switch sang `claude-opus` cho generation phức tạp; `S` để skip |
151
+ | **Step 1** | Resolve target file từ `$ARGUMENTS`; nếu thiếu, liệt kê candidate và hỏi user chọn |
152
+ | **Step 2** | Execute `context-loader.md` — load toàn bộ project context vào working memory |
153
+ | **Step 3** | CHECKPOINT — hiển thị summary (target file, stack, module, domains), chờ `Y` |
154
+
155
+ ```
156
+ CHECKPOINT
157
+ -----------
158
+ Target : specs/prd/auth/FEAT-042-login.md
159
+ Project : My App
160
+ Tech stack : TypeScript / React 18
161
+ Module : react
162
+ Domains : auth, profile
163
+
164
+ Proceed? (Y/N)
165
+ ```
166
+
167
+ ### context-loader.md — context loading sequence
168
+
169
+ Load toàn bộ project context vào working memory theo thứ tự ưu tiên nghiêm ngặt:
170
+
171
+ | Step | Priority | What loads |
172
+ |------|----------|-----------|
173
+ | 1 | PROJECT-CONFIG | `project-context.yaml` → stack, conventions, domains, services, paths |
174
+ | 1.5 | SERVICE ROUTING | *(umbrella only)* detect active domain, route `specs_dir`/`tech_docs_dir` tới service submodule, store `service_root` |
175
+ | 1.6 | SERVICE CONVENTIONS | *(umbrella only)* load `{service_root}/.agent/project-context.yaml` → override `test_command`, `build_command`, `paths.trace_dir` |
176
+ | 2 | PROJECT-CONFIG | `.agent/modules/{module}/stack-profile.yaml` → layer patterns |
177
+ | 3 | **CRITICAL** | `CLAUDE.md` → architecture layers, coding standards, naming |
178
+ | 4 | SAFETY | `.agent/rules/data-protection.md` → sensitive file patterns |
179
+ | 5 | DOMAIN | `business-dictionary.md` → canonical + banned terms |
180
+ | 6 | DOMAIN | `core-entities.md` → entity catalog |
181
+ | 6.7 | **GUARDRAILS** | `lessons_file` → mistakes tích lũy (via `/learn`) loaded như hard constraints |
182
+ | 6-B | UI COMPONENTS | `figma-components/{module}.md` → Figma name → code component + import path |
183
+ | 6-C | UI TOKENS | `figma-tokens.md` → design tokens |
184
+ | 7 | **RECAP** | `[CTX LOADED]` block — lock critical facts vào working memory |
185
+
186
+ **Anti-lost-in-middle:** critical facts (Step 3) load đầu tiên; RECAP (Step 7) restate ở cuối để fresh khi generation bắt đầu (recency effect).
187
+
188
+ ```
189
+ [CTX LOADED]
190
+ Stack : TypeScript / React 18 / PostgreSQL
191
+ Layers : Controller → Facade → Service → Repository
192
+ Services : 2 services: web-admin(react), api-backend(java-spring)
193
+ Svc Root : api-backend — conventions + trace_dir loaded from service config
194
+ Dict : loaded — 42 canonical terms, 8 banned terms
195
+ Entities : loaded — User, Order, Product
196
+ Lessons : loaded — 6 guardrails
197
+ Components : loaded — web-admin (react) — 23 components mapped
198
+ Tokens : loaded — colors: 18, spacing: 12, typography: 6
199
+ Status : FULL
200
+ ```
201
+
202
+ Status values: `FULL` · `PARTIAL — missing: {list}` · `MINIMAL` (chỉ project-context.yaml).
203
+
204
+ ### spawn-agent.md — sub-agent orchestration
205
+
206
+ Khi PRD vượt ngưỡng phức tạp, `generate-bdd`, `generate-code`, `dev-gen-test` tự chuyển từ single-session sang orchestration mode.
207
+
208
+ **Complexity thresholds:**
209
+
210
+ | Signal | Threshold | Action |
211
+ |--------|-----------|--------|
212
+ | UC count trong PRD | > 3 UC | Spawn 1 sub-agent / UC |
213
+ | PRD length | > 300 dòng | Spawn agents bất kể UC count |
214
+
215
+ **Orchestration flow:**
216
+
217
+ ```
218
+ Main session (orchestrator)
219
+ ├─ Step A: Build slim context JSON (stack + active_service + active_module + paths + arch summary + banned_terms)
220
+ ├─ Step B: Scan PRD → extract UC list [{uc_id, line_start, line_end}]
221
+ ├─ Step C: Announce plan → "Spawning N sub-agents..."
222
+ ├─ Step D: Spawn 1 sub-agent / UC (parallel)
223
+ │ mỗi agent nhận: { _agent_mode: true, uc_id, target_file, uc_section, context }
224
+ │ mỗi agent đọc CHỈ UC section của mình (không phải full PRD)
225
+ └─ Step E: Collect results → merge → { uc_id, files_created, status, errors }
226
+ ```
227
+
228
+ **Tiết kiệm context window:**
229
+
230
+ | Mode | What loads per agent |
231
+ |------|---------------------|
232
+ | Single session (≤ 3 UC) | Full context + full PRD + all UCs |
233
+ | Orchestrator | Slim context + UC heading list only |
234
+ | Each sub-agent | Slim context + **1 UC section only** |
235
+
236
+ ### report-footer.md — standard output format
237
+
238
+ Mọi command kết thúc với footer này:
239
+
240
+ ```
241
+ ---
242
+ Status : ✅ Complete
243
+ Output Artifacts:
244
+ created specs/bdd/auth/FEAT-042-UC1-login.feature (3 scenarios)
245
+ updated .trace/FEAT-042.tsv
246
+ Next : /review-context specs/bdd/auth/FEAT-042-UC1-login.feature
247
+ ```
248
+
249
+ **Status badges:** `✅ Complete` · `⚠️ Warnings` · `❌ Failed`. Field **Next** luôn gợi ý command tiếp theo hợp lý — không phải tra cứu.
@@ -0,0 +1,148 @@
1
+ [📚 Docs](../README.md) › [Concepts](README.md) › Traceability
2
+
3
+ # Traceability & Living Docs
4
+
5
+ Mỗi artifact link tới mọi artifact khác qua `@trace.*` tags, và trạng thái coverage/drift được tổng hợp vào **trace TSV** rồi surface trong **Living Docs**. Đây là cách framework đảm bảo *mọi dòng code trace về một scenario*, và phân biệt hai tín hiệu test độc lập: **`dev_selftest`** (dev tự kiểm) vs **`qc_status`** (QC chính thức).
6
+
7
+ ## Mục lục
8
+
9
+ - [Artifact chain & @trace tags](#artifact-chain--trace-tags)
10
+ - [Trace TSV — coverage & drift](#trace-tsv--coverage--drift)
11
+ - [Hai tín hiệu test: dev_selftest vs qc_status](#hai-tín-hiệu-test-dev_selftest-vs-qc_status)
12
+ - [Living Docs — canonical trong spec-module + panel mirror](#living-docs--canonical-trong-spec-module--panel-mirror)
13
+ - [/validate-traces](#validate-traces)
14
+
15
+ > Schema TSV đầy đủ (mọi cột) và full danh sách trace tag: xem [../05-reference/trace-schema.md](../05-reference/trace-schema.md). Trang này tập trung vào **khái niệm** và cách hai tín hiệu hoạt động.
16
+
17
+ ---
18
+
19
+ ## Artifact chain & @trace tags
20
+
21
+ Mỗi artifact mang `@trace.*` metadata liên kết về artifact trước nó:
22
+
23
+ ```
24
+ product-definition.md
25
+ └─► PRD.md (Service, Module trong metadata; @trace.domain, @trace.status)
26
+ └─► {UC-ID}.feature (@trace.service, @trace.module, @trace.prd_version)
27
+ └─► tech-design.md (@trace.bdd_version)
28
+ └─► src/ code (@trace.implements, @trace.prd_version, @trace.bdd_version)
29
+ └─► src/test/ (@trace.verifies, @trace.service)
30
+ └─► .trace/{UC-ID}.tsv (drift tracking)
31
+ ```
32
+
33
+ **Các trace field quan trọng:**
34
+
35
+ | Field | Vị trí | Ý nghĩa |
36
+ |-------|--------|---------|
37
+ | `@trace.domain` | PRD frontmatter | Domain của feature (auth, payment, …) — route vào đúng service submodule |
38
+ | `@trace.status` | PRD frontmatter | `draft` / `approved` — dev team chỉ code khi `approved` |
39
+ | `@trace.service` / `@trace.module` | BDD / Tech Doc header | Service + module sẽ implement |
40
+ | `@trace.prd_version` / `@trace.bdd_version` | BDD / code / test | Version của spec mà artifact được sinh từ — base cho drift detection |
41
+ | `@trace.implements` | Code comment | Scenario mà code này implement: `={UC-ID}-SC{N}` |
42
+ | `@trace.verifies` | Test / QC test | Scenario mà test này verify: `={UC-ID}` hoặc `={UC-ID}-SC{N}` |
43
+ | `@trace.api_source: existing` | BDD header | Brownfield — API đã tồn tại, contract lấy từ PRD |
44
+
45
+ Ví dụ tags trong `.feature`, code, và test:
46
+
47
+ ```gherkin
48
+ # @trace.id: FEAT-001-UC1
49
+ # @trace.service: web-admin
50
+ # @trace.module: react
51
+ # @trace.prd_version: 1.2
52
+ # @trace.bdd_version: 3
53
+ ```
54
+ ```java
55
+ // @trace.implements=FEAT-001-UC1-SC2 // @trace.verifies=FEAT-001-UC1
56
+ // @trace.prd_version=1.2 // @trace.service=api-backend
57
+ // @trace.bdd_version=3 // @trace.test_type=integration
58
+ // @trace.tech_doc_revision=2
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Trace TSV — coverage & drift
64
+
65
+ `.trace/{UC-ID}.tsv` là nguồn sự thật per-scenario về trạng thái implement/test. Được **ghi** bởi `/generate-bdd`, `/generate-code`, `/dev-gen-test`, `/qc-run-test`, và **update** bởi `/validate-traces`. File `.trace/*.tsv` authoritative **được commit** trong chính service submodule (không phải mirror).
66
+
67
+ Status coverage per scenario:
68
+
69
+ | Status | Meaning |
70
+ |--------|---------|
71
+ | ✅ OK | Code version khớp spec version |
72
+ | ⚠️ DRIFT | Code gen từ PRD/BDD cũ hơn — re-generate |
73
+ | 🔴 GAP | Scenario có trong spec nhưng không tìm thấy code implement |
74
+ | — UNTRACKED | Scenario ghi nhận nhưng chưa code-gen |
75
+
76
+ ---
77
+
78
+ ## Hai tín hiệu test: dev_selftest vs qc_status
79
+
80
+ Trace TSV mang **hai cột độc lập**, cả hai **orthogonal** với cột `status` (coverage) ở trên:
81
+
82
+ | Cột | Set bởi | Giá trị | Ý nghĩa |
83
+ |-----|---------|---------|---------|
84
+ | `dev_selftest` (+ `dev_selftest_at`) | `/dev-run-test` | `pass` / `fail` / `not_run` | **Dev self-check** — dev tự chạy bộ self-check test của mình trên scenario đó. **KHÔNG** phải coverage QC chính thức. |
85
+ | `qc_status` (+ `qc_run_at`) | `/qc-run-test` | `pass` / `fail` / `skip` / `not_run` | **QC chính thức** — kết quả native QC pipeline (do QC chạy, không phải dev), keyed theo `@trace.verifies={UC-ID}-SC{N}`. |
86
+
87
+ - **`dev_selftest`** là tín hiệu để QC **thấy** rằng developer đã smoke/self-check qua scenario đó. `dev_selftest: pass` chỉ nghĩa "dev đã tự kiểm" — không phải tuyên bố coverage.
88
+ - **`qc_status`** là coverage QC chính thức từ pipeline `/qc-analyze → … → /qc-run-test → /qc-report` (xem [pipeline.md](pipeline.md#qc-automation-pipeline-phase-5b)). `/qc-run-test` dùng stack module `qc-playwright`, độc lập với dev implementation module.
89
+ - Hai tín hiệu **sit side by side** trong Living Docs để dễ phân biệt hai luồng. Tester vẫn nên verify độc lập theo BDD + PRD ở phần chưa được automation cover.
90
+
91
+ > Phân biệt rõ: `/dev-*` (dev self-check, `dev_selftest`) ≠ `/qc-*` (official QC suite, `qc_status`). Đừng coi output của `/dev-*` là coverage chính thức.
92
+
93
+ ---
94
+
95
+ ## Living Docs — canonical trong spec-module + panel mirror
96
+
97
+ Living Docs (VS Code panel) đọc trace TSV và hiển thị traceability health toàn dự án:
98
+
99
+ ```
100
+ ┌──────────────────────────────────────────────────────────────────┐
101
+ │ PRDs Use Cases Scenarios Code Cov. Test Cov. Drift Gap │
102
+ │ 19 86 1077 93% 89% 212 93 │
103
+ └──────────────────────────────────────────────────────────────────┘
104
+ ```
105
+
106
+ - Drill down: PRD → UC → per-scenario table (Spec ver, Gen ver, Code, Tests, **Dev Self-Check**, **QC Status**, Status)
107
+ - Status badges: ✅ OK · ⚠️ DRIFT · 🔴 GAP · — UNTRACKED · filter theo domain/PRD status/doc status · search theo UC/SC ID.
108
+
109
+ **Ba nơi chứa trace data — phân biệt authoritative vs mirror:**
110
+
111
+ | Vị trí | Vai trò | Commit? |
112
+ |--------|---------|---------|
113
+ | `{service}/.trace/*.tsv` | **Authoritative** — nguồn sự thật per-service | ✅ Committed trong service submodule |
114
+ | `{spec_source}/.living-docs/` (`trace-report.json` + TSV mirror namespaced) | **Canonical report** — tổng hợp cross-team, regenerate bởi `/sync` hoặc `/validate-traces` | ❌ Gitignored |
115
+ | `./.trace` của workspace hiện tại | **Panel mirror** — giữ Living Docs panel không trống kể cả khi mở Claude Code/VS Code bên trong một service submodule đơn lẻ | ❌ Gitignored |
116
+
117
+ **Vì sao canonical nằm ở spec module?** Spec module được mount vào mọi umbrella/service workspace, nên nó là nơi chung luôn resolve được cho cross-team dashboard. Vấn đề trước đây: panel mở ở umbrella root (hoặc một service submodule đơn lẻ) sẽ TRỐNG nếu không có mirror — vì TSV authoritative nằm rải rác trong từng service submodule. Panel mirror `./.trace` giải quyết case mở single service.
118
+
119
+ Thêm vào `.gitignore` (cả hai là mirror read-only, không commit):
120
+ ```
121
+ # spec module
122
+ .living-docs/
123
+ # workspace / umbrella root (mirror)
124
+ .trace/
125
+ ```
126
+
127
+ > **Prerequisite cho data chính xác:** mỗi service submodule cần `.agent/project-context.yaml` với `paths.trace_dir` configure đúng. Thiếu → framework không biết ghi trace TSV về đâu → panel thiếu data.
128
+
129
+ ---
130
+
131
+ ## /validate-traces
132
+
133
+ Chạy `/validate-traces {domain}` bất cứ lúc nào (đặc biệt **sau mỗi codegen session trong umbrella mode**) để:
134
+
135
+ ```
136
+ /validate-traces {domain}
137
+ → Reads .trace/*.tsv authoritative (committed) trong từng service:
138
+ user-service/.trace/, order-service/.trace/, ...
139
+ → Writes canonical trace-report.json + TSV mirror → {spec_source}/.living-docs/ (gitignored)
140
+ → Writes panel mirror → ./.trace của workspace hiện tại (non-empty khi mở single service)
141
+ → Living Docs panel cập nhật ngay
142
+ ```
143
+
144
+ Báo cáo: scenario nào chưa có code (GAP) · code nào gen từ PRD/BDD cũ (DRIFT) · broken links / orphan BDD (không có PRD) / dead code traces · coverage % per domain.
145
+
146
+ **Khi nào chạy:** sau refactor đổi tên file/function · sau khi PO cập nhật PRD (version mới) · trước PR lớn · khi CI báo trace validation fail · sau mỗi codegen session (umbrella).
147
+
148
+ > **Nguyên tắc:** không merge code khi traces broken — fix traces trước. `/sync` cũng regenerate Living Docs như một bước phụ; `/validate-traces` là lệnh chuyên trách kiểm tra trace chain.