@edupia-tutor/spec-driven-docs 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 (339) hide show
  1. package/bin/build.js +230 -0
  2. package/bin/index.js +598 -0
  3. package/commands/debug.md +830 -0
  4. package/commands/debug.tmpl +257 -0
  5. package/commands/define-product.md +652 -0
  6. package/commands/define-product.tmpl +158 -0
  7. package/commands/dev-gen-test.md +1010 -0
  8. package/commands/dev-gen-test.tmpl +490 -0
  9. package/commands/dev-run-test.md +744 -0
  10. package/commands/dev-run-test.tmpl +224 -0
  11. package/commands/dev-smoke-test.md +711 -0
  12. package/commands/dev-smoke-test.tmpl +217 -0
  13. package/commands/fix-bug.md +744 -0
  14. package/commands/fix-bug.tmpl +171 -0
  15. package/commands/generate-bdd.md +1054 -0
  16. package/commands/generate-bdd.tmpl +534 -0
  17. package/commands/generate-code.md +869 -0
  18. package/commands/generate-code.tmpl +349 -0
  19. package/commands/generate-design-spec.md +958 -0
  20. package/commands/generate-design-spec.tmpl +464 -0
  21. package/commands/generate-prd.md +748 -0
  22. package/commands/generate-prd.tmpl +254 -0
  23. package/commands/generate-spec-manifest.md +658 -0
  24. package/commands/generate-spec-manifest.tmpl +164 -0
  25. package/commands/generate-tech-docs.md +849 -0
  26. package/commands/generate-tech-docs.tmpl +355 -0
  27. package/commands/learn.md +636 -0
  28. package/commands/learn.tmpl +63 -0
  29. package/commands/map-testids.md +575 -0
  30. package/commands/map-testids.tmpl +81 -0
  31. package/commands/propose-scenario.md +623 -0
  32. package/commands/propose-scenario.tmpl +129 -0
  33. package/commands/qc-analyze.md +580 -0
  34. package/commands/qc-analyze.tmpl +86 -0
  35. package/commands/qc-design-test.md +562 -0
  36. package/commands/qc-design-test.tmpl +68 -0
  37. package/commands/qc-plan.md +543 -0
  38. package/commands/qc-plan.tmpl +49 -0
  39. package/commands/qc-report.md +554 -0
  40. package/commands/qc-report.tmpl +60 -0
  41. package/commands/qc-review.md +547 -0
  42. package/commands/qc-review.tmpl +53 -0
  43. package/commands/qc-run-test.md +604 -0
  44. package/commands/qc-run-test.tmpl +84 -0
  45. package/commands/refine-prd.md +772 -0
  46. package/commands/refine-prd.tmpl +140 -0
  47. package/commands/report-bug.md +639 -0
  48. package/commands/report-bug.tmpl +145 -0
  49. package/commands/review-code.md +677 -0
  50. package/commands/review-code.tmpl +104 -0
  51. package/commands/review-context.md +1047 -0
  52. package/commands/review-context.tmpl +415 -0
  53. package/commands/review-tech-docs.md +811 -0
  54. package/commands/review-tech-docs.tmpl +317 -0
  55. package/commands/setup-ai-first.md +545 -0
  56. package/commands/setup-ai-first.tmpl +358 -0
  57. package/commands/sync.md +451 -0
  58. package/commands/sync.tmpl +351 -0
  59. package/commands/update-framework.md +251 -0
  60. package/commands/update-framework.tmpl +151 -0
  61. package/commands/validate-traces.md +842 -0
  62. package/commands/validate-traces.tmpl +348 -0
  63. package/core/FRAMEWORK_VERSION +1 -0
  64. package/core/commands/debug.md +830 -0
  65. package/core/commands/define-product.md +652 -0
  66. package/core/commands/dev-gen-test.md +1010 -0
  67. package/core/commands/dev-run-test.md +744 -0
  68. package/core/commands/dev-smoke-test.md +711 -0
  69. package/core/commands/fix-bug.md +744 -0
  70. package/core/commands/generate-bdd.md +1054 -0
  71. package/core/commands/generate-code.md +869 -0
  72. package/core/commands/generate-design-spec.md +958 -0
  73. package/core/commands/generate-prd.md +748 -0
  74. package/core/commands/generate-spec-manifest.md +658 -0
  75. package/core/commands/generate-tech-docs.md +849 -0
  76. package/core/commands/learn.md +636 -0
  77. package/core/commands/map-testids.md +575 -0
  78. package/core/commands/propose-scenario.md +623 -0
  79. package/core/commands/qc-analyze.md +580 -0
  80. package/core/commands/qc-design-test.md +562 -0
  81. package/core/commands/qc-plan.md +543 -0
  82. package/core/commands/qc-report.md +554 -0
  83. package/core/commands/qc-review.md +547 -0
  84. package/core/commands/qc-run-test.md +604 -0
  85. package/core/commands/refine-prd.md +772 -0
  86. package/core/commands/report-bug.md +639 -0
  87. package/core/commands/review-code.md +677 -0
  88. package/core/commands/review-context.md +1047 -0
  89. package/core/commands/review-tech-docs.md +811 -0
  90. package/core/commands/setup-ai-first.md +545 -0
  91. package/core/commands/sync.md +451 -0
  92. package/core/commands/update-framework.md +251 -0
  93. package/core/commands/validate-traces.md +842 -0
  94. package/core/hooks/data-guard.js +141 -0
  95. package/core/hooks/settings.json +18 -0
  96. package/core/modules/android-compose/module.yaml +13 -0
  97. package/core/modules/android-compose/stack-profile.yaml +57 -0
  98. package/core/modules/angular/architecture-snippets/component-patterns.md +187 -0
  99. package/core/modules/angular/module.yaml +6 -0
  100. package/core/modules/angular/stack-profile.yaml +38 -0
  101. package/core/modules/context-engineering/architecture-snippets/context-design.md +119 -0
  102. package/core/modules/context-engineering/module.yaml +9 -0
  103. package/core/modules/context-engineering/stack-profile.yaml +61 -0
  104. package/core/modules/dotnet/architecture-snippets/clean-arch.md +160 -0
  105. package/core/modules/dotnet/module.yaml +6 -0
  106. package/core/modules/dotnet/stack-profile.yaml +50 -0
  107. package/core/modules/flutter/module.yaml +14 -0
  108. package/core/modules/flutter/stack-profile.yaml +59 -0
  109. package/core/modules/golang/architecture-snippets/domain-layout.md +283 -0
  110. package/core/modules/golang/module.yaml +6 -0
  111. package/core/modules/golang/stack-profile.yaml +40 -0
  112. package/core/modules/ios-swiftui/module.yaml +13 -0
  113. package/core/modules/ios-swiftui/stack-profile.yaml +55 -0
  114. package/core/modules/java-spring/architecture-snippets/layered-arch.md +201 -0
  115. package/core/modules/java-spring/module.yaml +15 -0
  116. package/core/modules/java-spring/stack-profile.yaml +28 -0
  117. package/core/modules/nextjs/architecture-snippets/app-router-patterns.md +269 -0
  118. package/core/modules/nextjs/module.yaml +14 -0
  119. package/core/modules/nextjs/stack-profile.yaml +74 -0
  120. package/core/modules/nuxt/module.yaml +14 -0
  121. package/core/modules/nuxt/stack-profile.yaml +58 -0
  122. package/core/modules/php-laravel/architecture-snippets/service-repository.md +302 -0
  123. package/core/modules/php-laravel/module.yaml +15 -0
  124. package/core/modules/php-laravel/stack-profile.yaml +56 -0
  125. package/core/modules/qc-playwright/stack-profile.yaml +66 -0
  126. package/core/modules/react/architecture-snippets/hooks-query-patterns.md +254 -0
  127. package/core/modules/react/module.yaml +14 -0
  128. package/core/modules/react/stack-profile.yaml +63 -0
  129. package/core/modules/react-native/module.yaml +14 -0
  130. package/core/modules/react-native/stack-profile.yaml +56 -0
  131. package/core/modules/vue/module.yaml +14 -0
  132. package/core/modules/vue/stack-profile.yaml +65 -0
  133. package/core/rules/data-protection.md +80 -0
  134. package/core/rules/workflow.md +44 -0
  135. package/core/skills/code/SKILL.md +770 -0
  136. package/core/skills/debug/SKILL.md +869 -0
  137. package/core/skills/design-spec/SKILL.md +589 -0
  138. package/core/skills/discovery/SKILL.md +554 -0
  139. package/core/skills/prd/SKILL.md +562 -0
  140. package/core/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
  141. package/core/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
  142. package/core/skills/qc/qa-analyst/business-rules.md +59 -0
  143. package/core/skills/qc/qa-analyst/data-flow.md +64 -0
  144. package/core/skills/qc/qa-analyst/spec-breakdown.md +61 -0
  145. package/core/skills/qc/qa-designer/e2e/journey.md +41 -0
  146. package/core/skills/qc/qa-designer/exploratory/charter.md +68 -0
  147. package/core/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
  148. package/core/skills/qc/qa-designer/functional/api.md +45 -0
  149. package/core/skills/qc/qa-designer/functional/gui-feature.md +46 -0
  150. package/core/skills/qc/qa-designer/functional/gui-screen.md +52 -0
  151. package/core/skills/qc/qa-designer/integration/api.md +42 -0
  152. package/core/skills/qc/qa-designer/integration/db.md +39 -0
  153. package/core/skills/qc/qa-designer/integration/gui.md +40 -0
  154. package/core/skills/qc/qa-designer/integration/kafka.md +40 -0
  155. package/core/skills/qc/qa-designer/non-functional.md +40 -0
  156. package/core/skills/qc/qa-planner/test-plan.md +120 -0
  157. package/core/skills/qc/qa-reviewer/script/e2e.md +87 -0
  158. package/core/skills/qc/qa-reviewer/script/exploratory.md +45 -0
  159. package/core/skills/qc/qa-reviewer/script/functional.md +101 -0
  160. package/core/skills/qc/qa-reviewer/script/integration.md +91 -0
  161. package/core/skills/qc/qa-reviewer/script/non-functional.md +126 -0
  162. package/core/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
  163. package/core/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
  164. package/core/skills/qc/qa-reviewer/test-case/functional.md +76 -0
  165. package/core/skills/qc/qa-reviewer/test-case/integration.md +69 -0
  166. package/core/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
  167. package/core/skills/qc/qa-runner/e2e.md +49 -0
  168. package/core/skills/qc/qa-runner/exploratory/session.md +36 -0
  169. package/core/skills/qc/qa-runner/functional/api.md +35 -0
  170. package/core/skills/qc/qa-runner/functional/gui-feature.md +51 -0
  171. package/core/skills/qc/qa-runner/functional/gui-screen.md +55 -0
  172. package/core/skills/qc/qa-runner/integration.md +47 -0
  173. package/core/skills/qc/qa-runner/non-functional.md +49 -0
  174. package/core/skills/qc/qa-runner/report/report.md +37 -0
  175. package/core/skills/setup-ai-first/SKILL.md +216 -0
  176. package/core/skills/spec/SKILL.md +461 -0
  177. package/core/skills/test/SKILL.md +1297 -0
  178. package/core/steps/capture-lesson.md +79 -0
  179. package/core/steps/context-loader.md +307 -0
  180. package/core/steps/gate.md +87 -0
  181. package/core/steps/report-footer.md +100 -0
  182. package/core/steps/review-fanout.md +138 -0
  183. package/core/steps/spawn-agent.md +124 -0
  184. package/core/steps/trace-mirror.md +26 -0
  185. package/core/templates/architecture.template.md +113 -0
  186. package/core/templates/design-spec.template.md +217 -0
  187. package/core/templates/feature.template +259 -0
  188. package/core/templates/platform-guide.template.md +145 -0
  189. package/core/templates/prd.template.md +327 -0
  190. package/core/templates/product-definition.template.md +168 -0
  191. package/core/templates/project-context.yaml +161 -0
  192. package/docs/01-getting-started/README.md +19 -0
  193. package/docs/01-getting-started/core-concepts.md +102 -0
  194. package/docs/01-getting-started/installation.md +156 -0
  195. package/docs/01-getting-started/quickstart.md +85 -0
  196. package/docs/02-guides/README.md +26 -0
  197. package/docs/02-guides/developer/README.md +46 -0
  198. package/docs/02-guides/developer/bdd-and-trace.md +125 -0
  199. package/docs/02-guides/developer/commands.md +76 -0
  200. package/docs/02-guides/developer/pr-checklist.md +15 -0
  201. package/docs/02-guides/developer/scenarios.md +460 -0
  202. package/docs/02-guides/developer/workflow.md +121 -0
  203. package/docs/02-guides/product-owner/README.md +79 -0
  204. package/docs/02-guides/product-owner/commands.md +30 -0
  205. package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
  206. package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
  207. package/docs/02-guides/product-owner/scenarios.md +436 -0
  208. package/docs/02-guides/tester/README.md +75 -0
  209. package/docs/02-guides/tester/bug-reporting.md +117 -0
  210. package/docs/02-guides/tester/qc-automation.md +165 -0
  211. package/docs/02-guides/tester/reading-specs.md +79 -0
  212. package/docs/02-guides/tester/scenarios.md +186 -0
  213. package/docs/02-guides/tester/spec-manifest.md +130 -0
  214. package/docs/02-guides/tester/test-checklist.md +31 -0
  215. package/docs/02-guides/tester/workflow.md +77 -0
  216. package/docs/03-concepts/README.md +19 -0
  217. package/docs/03-concepts/architecture.md +248 -0
  218. package/docs/03-concepts/pipeline.md +274 -0
  219. package/docs/03-concepts/traceability.md +149 -0
  220. package/docs/04-operations/README.md +33 -0
  221. package/docs/04-operations/bug-flow.md +362 -0
  222. package/docs/04-operations/publishing.md +137 -0
  223. package/docs/04-operations/sync-and-update.md +522 -0
  224. package/docs/05-reference/README.md +32 -0
  225. package/docs/05-reference/command-cheatsheet.md +147 -0
  226. package/docs/05-reference/commands.md +232 -0
  227. package/docs/05-reference/modules.md +110 -0
  228. package/docs/05-reference/trace-schema.md +153 -0
  229. package/docs/README.md +49 -0
  230. package/hooks/data-guard.js +141 -0
  231. package/hooks/settings.json +18 -0
  232. package/modules/android-compose/module.yaml +13 -0
  233. package/modules/android-compose/stack-profile.yaml +57 -0
  234. package/modules/angular/architecture-snippets/component-patterns.md +187 -0
  235. package/modules/angular/module.yaml +6 -0
  236. package/modules/angular/stack-profile.yaml +38 -0
  237. package/modules/context-engineering/architecture-snippets/context-design.md +119 -0
  238. package/modules/context-engineering/module.yaml +9 -0
  239. package/modules/context-engineering/stack-profile.yaml +61 -0
  240. package/modules/dotnet/architecture-snippets/clean-arch.md +160 -0
  241. package/modules/dotnet/module.yaml +6 -0
  242. package/modules/dotnet/stack-profile.yaml +50 -0
  243. package/modules/flutter/module.yaml +14 -0
  244. package/modules/flutter/stack-profile.yaml +59 -0
  245. package/modules/golang/architecture-snippets/domain-layout.md +283 -0
  246. package/modules/golang/module.yaml +6 -0
  247. package/modules/golang/stack-profile.yaml +40 -0
  248. package/modules/ios-swiftui/module.yaml +13 -0
  249. package/modules/ios-swiftui/stack-profile.yaml +55 -0
  250. package/modules/java-spring/architecture-snippets/layered-arch.md +201 -0
  251. package/modules/java-spring/module.yaml +15 -0
  252. package/modules/java-spring/stack-profile.yaml +28 -0
  253. package/modules/nextjs/architecture-snippets/app-router-patterns.md +269 -0
  254. package/modules/nextjs/module.yaml +14 -0
  255. package/modules/nextjs/stack-profile.yaml +74 -0
  256. package/modules/nuxt/module.yaml +14 -0
  257. package/modules/nuxt/stack-profile.yaml +58 -0
  258. package/modules/php-laravel/architecture-snippets/service-repository.md +302 -0
  259. package/modules/php-laravel/module.yaml +15 -0
  260. package/modules/php-laravel/stack-profile.yaml +56 -0
  261. package/modules/qc-playwright/stack-profile.yaml +66 -0
  262. package/modules/react/architecture-snippets/hooks-query-patterns.md +254 -0
  263. package/modules/react/module.yaml +14 -0
  264. package/modules/react/stack-profile.yaml +63 -0
  265. package/modules/react-native/module.yaml +14 -0
  266. package/modules/react-native/stack-profile.yaml +56 -0
  267. package/modules/vue/module.yaml +14 -0
  268. package/modules/vue/stack-profile.yaml +65 -0
  269. package/package.json +49 -0
  270. package/rules/data-protection.md +80 -0
  271. package/rules/workflow.md +44 -0
  272. package/scripts/init.sh +49 -0
  273. package/scripts/migrate-specs.js +256 -0
  274. package/scripts/upgrade.sh +94 -0
  275. package/skills/code/SKILL.md +770 -0
  276. package/skills/code/SKILL.tmpl +176 -0
  277. package/skills/debug/SKILL.md +869 -0
  278. package/skills/debug/SKILL.tmpl +262 -0
  279. package/skills/design-spec/SKILL.md +589 -0
  280. package/skills/design-spec/SKILL.tmpl +95 -0
  281. package/skills/discovery/SKILL.md +554 -0
  282. package/skills/discovery/SKILL.tmpl +147 -0
  283. package/skills/prd/SKILL.md +562 -0
  284. package/skills/prd/SKILL.tmpl +188 -0
  285. package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
  286. package/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
  287. package/skills/qc/qa-analyst/business-rules.md +59 -0
  288. package/skills/qc/qa-analyst/data-flow.md +64 -0
  289. package/skills/qc/qa-analyst/spec-breakdown.md +61 -0
  290. package/skills/qc/qa-designer/e2e/journey.md +41 -0
  291. package/skills/qc/qa-designer/exploratory/charter.md +68 -0
  292. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
  293. package/skills/qc/qa-designer/functional/api.md +45 -0
  294. package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
  295. package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
  296. package/skills/qc/qa-designer/integration/api.md +42 -0
  297. package/skills/qc/qa-designer/integration/db.md +39 -0
  298. package/skills/qc/qa-designer/integration/gui.md +40 -0
  299. package/skills/qc/qa-designer/integration/kafka.md +40 -0
  300. package/skills/qc/qa-designer/non-functional.md +40 -0
  301. package/skills/qc/qa-planner/test-plan.md +120 -0
  302. package/skills/qc/qa-reviewer/script/e2e.md +87 -0
  303. package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
  304. package/skills/qc/qa-reviewer/script/functional.md +101 -0
  305. package/skills/qc/qa-reviewer/script/integration.md +91 -0
  306. package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
  307. package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
  308. package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
  309. package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
  310. package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
  311. package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
  312. package/skills/qc/qa-runner/e2e.md +49 -0
  313. package/skills/qc/qa-runner/exploratory/session.md +36 -0
  314. package/skills/qc/qa-runner/functional/api.md +35 -0
  315. package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
  316. package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
  317. package/skills/qc/qa-runner/integration.md +47 -0
  318. package/skills/qc/qa-runner/non-functional.md +49 -0
  319. package/skills/qc/qa-runner/report/report.md +37 -0
  320. package/skills/setup-ai-first/SKILL.md +216 -0
  321. package/skills/setup-ai-first/SKILL.tmpl +116 -0
  322. package/skills/spec/SKILL.md +461 -0
  323. package/skills/spec/SKILL.tmpl +174 -0
  324. package/skills/test/SKILL.md +1297 -0
  325. package/skills/test/SKILL.tmpl +296 -0
  326. package/steps/capture-lesson.md +79 -0
  327. package/steps/context-loader.md +307 -0
  328. package/steps/gate.md +87 -0
  329. package/steps/report-footer.md +100 -0
  330. package/steps/review-fanout.md +138 -0
  331. package/steps/spawn-agent.md +124 -0
  332. package/steps/trace-mirror.md +26 -0
  333. package/templates/architecture.template.md +113 -0
  334. package/templates/design-spec.template.md +217 -0
  335. package/templates/feature.template +259 -0
  336. package/templates/platform-guide.template.md +145 -0
  337. package/templates/prd.template.md +327 -0
  338. package/templates/product-definition.template.md +168 -0
  339. package/templates/project-context.yaml +161 -0
@@ -0,0 +1,30 @@
1
+ [📚 Docs](../../README.md) › [Guides](../README.md) › [Product Owner](README.md) › Commands
2
+
3
+ # Commands Dành Cho PO/BA
4
+
5
+ | Command | Mục đích | Khi nào dùng |
6
+ |---|---|---|
7
+ | `/setup-ai-first` | Khởi tạo spec repo | 1 lần duy nhất khi bắt đầu project |
8
+ | `/define-product` | Tạo product definition | Trước khi viết PRD — capture ý tưởng tính năng |
9
+ | `/generate-prd` | Tạo PRD từ product definition | Sau khi product definition đủ rõ |
10
+ | `/refine-prd` | Review PRD qua 4 lens (QA/DEV/SA/PO) — fan-out song song + critic loop → findings đầy đủ trong 1 lần chạy | Trước khi share với dev team |
11
+ | `/review-context` | Review chất lượng + consistency của PRD (P-B check groups fan-out song song) | Sau refine, trước khi approve |
12
+ | `/review-context --fix` | Auto-fix các lỗi nhỏ trong PRD | Khi có nhiều lỗi minor tự sửa được |
13
+ | `/review-context --resume` | Apply các fix sau Review Board | Sau khi review findings |
14
+ | `/generate-design-spec` | Tạo Design Spec cho FE/App (cần Figma link node-level `?node-id=` cho từng screen) | Sau khi PRD approved, trước khi generate BDD |
15
+ | `/generate-bdd` | Tạo BDD theo thứ tự **outside-in: web → app → system** (System BDD tổng hợp từ web+app; chỉ-BE → system gen thẳng từ PRD) | Sau khi PRD + Design Spec approved |
16
+ | `/learn {text}` | Ghi lại lỗi AI hay lặp khi gen PRD/BDD thành guardrail | Khi AI lặp lại cùng kiểu sai trong PRD/BDD |
17
+
18
+ > Danh mục đầy đủ mọi command: [Reference › Commands](../../05-reference/commands.md).
19
+
20
+ > **Brownfield shortcut:** Nếu API đã tồn tại trên hệ thống cũ, thêm `API Source: existing` vào PRD Metadata + điền section "Existing API Contract". BDD generation sẽ dùng contract đó trực tiếp, T7 sign-off gate tự động được bỏ qua. Chi tiết: [Tình huống 11](scenarios.md#tình-huống-11--brownfield-api-đã-tồn-tại-trên-hệ-thống-cũ).
21
+
22
+ > **Project Lessons:** Nếu AI cứ lặp lại một kiểu sai khi gen PRD/BDD (vd: quên negative path, dùng sai thuật ngữ), chạy `/learn "AI hay X, đúng phải Y"` (category `prd`/`bdd`). Lesson được nạp vào đầu mọi lệnh → AI không lặp lại. Commit file lessons để cả team dùng chung.
23
+
24
+ > **Xử lý feedback từ tester:** Tester `/report-bug` và `/propose-scenario` commit vào `{spec_source}/feedback/` của spec repo. PO/Dev **thấy chúng khi chạy `/sync`** (dòng `📥 New tester feedback` liệt kê bug + proposal mới kéo về). PO review proposal:
25
+ > - **Map vào AC sẵn có** → coverage gap thật → để Dev thêm scenario vào `.feature` (hoặc regen).
26
+ > - Là **PRD change request** (behavior chưa có trong PRD) → PO thêm/sửa AC → bump version → `/generate-bdd` lại.
27
+
28
+ ---
29
+
30
+ ← [Product Owner Guide](README.md) · Tiếp theo: [Tình huống thực tế](scenarios.md)
@@ -0,0 +1,42 @@
1
+ [📚 Docs](../../README.md) › [Guides](../README.md) › [Product Owner](README.md) › Checklist Handoff
2
+
3
+ # Checklist Handoff Cho Dev Team
4
+
5
+ Trước khi thông báo dev team bắt đầu, kiểm tra:
6
+
7
+ **Metadata:**
8
+ - [ ] `@trace.id` có và đúng format (vd: FEAT-01)
9
+ - [ ] `@trace.domain` có và khớp với domain names đã thống nhất với dev team
10
+ - [ ] `@trace.status: approved` (không phải draft/in-review)
11
+ - [ ] `@trace.version` có (vd: 1.0)
12
+
13
+ **Nội dung PRD:**
14
+ - [ ] Tất cả `{{PLACEHOLDER}}` đã được điền
15
+ - [ ] Ít nhất 1 UC với format `{TICKET-ID}-UC1`
16
+ - [ ] Mỗi UC có: Description, Actors, Preconditions, AC, BR
17
+ - [ ] Có cả happy path và error cases trong AC
18
+ - [ ] Không có UI details (button colors, API paths) trong PRD
19
+ - [ ] Changelog section có ít nhất 1 entry
20
+
21
+ **Framework check:**
22
+ - [ ] `/review-context` cho kết quả `APPROVED` (0 critical findings)
23
+ - [ ] Không có P3 conflict với PRD khác trong cùng domain
24
+
25
+ **Cho FE/App thêm:**
26
+ - [ ] Design Spec đã tạo và `@trace.status: approved` (không còn `draft`)
27
+ - [ ] Mỗi screen có Figma link node-level (`?node-id=`) — không screen nào bị flag ❌ Missing
28
+ - [ ] Designer đã sign-off (gate này bị BLOCKED nếu còn screen thiếu node-id link)
29
+
30
+ **BDD (bắt buộc trước khi handoff):**
31
+ - [ ] BDD web đã gen: `specs/{domain}/{prd-slug}/bdd/web/{TICKET-ID}-UC*.feature`
32
+ - [ ] BDD app đã gen: `specs/{domain}/{prd-slug}/bdd/app/{TICKET-ID}-UC*.feature` (nếu project có app)
33
+ - [ ] System BDD đã gen: `specs/{domain}/{prd-slug}/bdd/system/{TICKET-ID}-UC*.feature`
34
+ - [ ] Tất cả BDD files đã được review và không có `MISSING` trong Coverage Matrix
35
+
36
+ **Git:**
37
+ - [ ] Đã commit và push toàn bộ feature-package (`specs/{domain}/{prd-slug}/` — gồm `prd.md`, `design-spec/`, `bdd/`) lên spec repo
38
+ - [ ] Thông báo dev team domain name và BDD path để họ cập nhật `git submodule update --remote`
39
+
40
+ ---
41
+
42
+ ← [Quy tắc viết PRD](prd-writing-rules.md)
@@ -0,0 +1,45 @@
1
+ [📚 Docs](../../README.md) › [Guides](../README.md) › [Product Owner](README.md) › Quy tắc viết PRD
2
+
3
+ # Quy Tắc Viết PRD Hiệu Quả
4
+
5
+ ## PRD là platform-agnostic
6
+
7
+ | ✅ Viết trong PRD | ❌ Không viết trong PRD |
8
+ |---|---|
9
+ | "Đăng nhập thành công → truy cập tính năng" | "Click button Login → hiển thị spinner" |
10
+ | "Sai password 5 lần → khoá 30 phút" | "API POST /auth/login trả về JWT" |
11
+ | "Session hết hạn → yêu cầu xác thực lại" | "Toast message màu đỏ ở góc phải" |
12
+ | "User có thể reset password qua email" | "Gọi sendgrid API để gửi email" |
13
+
14
+ UI details và API specs thuộc về:
15
+ - **Design Spec** → UI/UX cho FE/App
16
+ - **Tech Docs** → API contract, technical design (dev team tự generate). BE tech-design (API contract) nằm trong shared spec module khi `spec_source` được set.
17
+
18
+ ## UC và AC phải testable
19
+
20
+ Mỗi AC phải trả lời được câu hỏi: **"Làm sao biết tính năng này hoạt động đúng?"**
21
+
22
+ ❌ Không testable: `AC: "Hệ thống xử lý nhanh"` · `AC: "UI thân thiện với người dùng"`
23
+
24
+ ✅ Testable: `AC: "Trang login load trong vòng 3 giây"` · `AC: "Error message hiển thị trong vòng 1 giây sau khi submit"`
25
+
26
+ ## BR phải có ID liên tục
27
+
28
+ ```
29
+ UC1 → BR1, BR2, BR3
30
+ UC2 → BR4, BR5 ← tiếp tục từ BR3, không reset về BR1
31
+ UC3 → BR6
32
+ ```
33
+
34
+ ## Luôn có negative path
35
+
36
+ Với mỗi AC happy path, cần có ít nhất 1 AC cho error case:
37
+ ```
38
+ AC1 (happy): Đăng nhập thành công với email + password hợp lệ
39
+ AC2 (error): Đăng nhập thất bại khi password sai → hiển thị lỗi
40
+ AC3 (error): Tài khoản bị khoá → hiển thị thông báo + thời gian còn lại
41
+ ```
42
+
43
+ ---
44
+
45
+ ← [Tình huống thực tế](scenarios.md) · Tiếp theo: [Checklist handoff](handoff-checklist.md)
@@ -0,0 +1,436 @@
1
+ [📚 Docs](../../README.md) › [Guides](../README.md) › [Product Owner](README.md) › Tình huống thực tế
2
+
3
+ # Tình Huống Thực Tế
4
+
5
+ ## Tình huống 1 — Bắt đầu tính năng mới từ đầu
6
+
7
+ **Bối cảnh:** PO nhận yêu cầu tính năng mới, cần viết tài liệu để dev team implement.
8
+
9
+ **Bước 1 — Capture ý tưởng:**
10
+ ```
11
+ /define-product
12
+ ```
13
+ Agent sẽ hỏi: Tên tính năng, domain · Mô tả ngắn · Vấn đề cần giải quyết · Actors liên quan · Kết quả mong muốn.
14
+
15
+ Output: `specs/product-definition/FEAT-01-login.md`
16
+
17
+ **Bước 2 — Generate PRD:**
18
+ ```
19
+ /generate-prd specs/product-definition/FEAT-01-login.md
20
+ ```
21
+ Agent tự động: đọc product definition · expand thành PRD đầy đủ với UC, AC, BR · nhắc nếu bạn viết UI details · kiểm tra terminology với business-dictionary.
22
+
23
+ Output: `specs/auth/FEAT-01-login/prd.md`
24
+
25
+ **Bước 3 — Review nội dung:**
26
+ ```
27
+ /refine-prd specs/auth/FEAT-01-login/prd.md
28
+ ```
29
+ Agent fan-out 4 lens (QA/DEV/SA/PO) chạy song song, rồi chạy completeness-critic loop cho đến khi một vòng không tìm ra finding mới, cuối cùng dedup + resolve conflict. Findings đầy đủ trong 1 lần chạy.
30
+
31
+ Mở findings file, xem xét từng finding: `accepted` → apply · `modified` → viết note · `rejected` → bỏ qua.
32
+
33
+ > **Finding khó hiểu? Bấm 💬 Giải thích.** Nếu một finding mô tả nặng tính kỹ thuật, dùng nút **💬 Giải thích** trên Review Board (extension Spec Driven Docs Tools). Claude sẽ giải thích lại bằng ngôn ngữ no-tech + đề xuất phương án cụ thể (cover cả edge case) ngay trong terminal, và **chờ bạn confirm trước khi apply** vào PRD — tránh refine nhiều vòng. Prompt sửa được qua setting `reviewBoard.clarifyPrompt` (không cần cài lại extension).
34
+
35
+ ```
36
+ /review-context --resume specs/auth/FEAT-01-login/prd.md
37
+ ```
38
+
39
+ **Bước 4 — Final check:**
40
+ ```
41
+ /review-context specs/auth/FEAT-01-login/prd.md
42
+ ```
43
+ Kiểm tra: `@trace.status`, `@trace.domain`, completeness.
44
+
45
+ **Bước 5 — Approve PRD:**
46
+ ```yaml
47
+ # Trong file PRD, cập nhật:
48
+ @trace.status: approved
49
+ @trace.version: 1.0
50
+ ```
51
+
52
+ **Bước 6 — Tạo Design Spec (FE/App):**
53
+ ```
54
+ /generate-design-spec specs/auth/FEAT-01-login/prd.md
55
+ ```
56
+ Agent hỏi platform (web / app). PO phải cung cấp **Figma link node-level** (URL chứa `?node-id=`, lấy bằng right-click vào frame → "Copy link to selection") cho **mỗi screen**. Screen nào thiếu link → bị flag ❌ Missing, Status giữ `draft`, `/generate-bdd` bị BLOCKED cho đến khi đủ link.
57
+
58
+ Sau khi Designer review + confirm đủ Figma node-id links → `@trace.status: approved`.
59
+
60
+ **Bước 7 — Generate BDD:**
61
+ ```
62
+ /generate-bdd specs/auth/FEAT-01-login/prd.md
63
+ ```
64
+ Agent hỏi: **"Platform? (1) web (2) app (3) system"**
65
+ - Chọn `web` → `specs/auth/FEAT-01-login/bdd/web/FEAT-01-UC1-login-web.feature`
66
+ - Chạy lại, chọn `app` → `specs/auth/FEAT-01-login/bdd/app/FEAT-01-UC1-login-app.feature`
67
+ - Chạy lại, chọn `system` → Agent tổng hợp từ web+app BDDs → `specs/auth/FEAT-01-login/bdd/system/FEAT-01-UC1-login-system.feature`
68
+
69
+ > Nếu project chỉ có web → chỉ cần gen `web` rồi `system`. Nếu web & app kỳ vọng response khác nhau → agent dừng tại CHECKPOINT để PO chốt resolution (xem [Tình huống 12](#tình-huống-12--system-bdd-synthesis-outside-in--xử-lý-cross-platform-conflict)).
70
+
71
+ **Bước 8 — Push và thông báo:**
72
+ ```bash
73
+ git add specs/auth/FEAT-01-login/
74
+ git commit -m "feat(auth): add FEAT-01 PRD, design spec, and BDD"
75
+ git push
76
+ ```
77
+ **Thông báo dev team:** "FEAT-01 PRD + BDD đã sẵn sàng, domain: `auth`. BDD tại `specs/auth/FEAT-01-login/bdd/`"
78
+
79
+ ---
80
+
81
+ ## Tình huống 2 — Viết PRD khi dev team chưa setup
82
+
83
+ **Bối cảnh:** PO bắt đầu viết tài liệu, dev team chưa có umbrella repo. **Không cần đợi dev team.**
84
+
85
+ ```
86
+ /define-product → product definition
87
+ /generate-prd → PRD với @trace.domain: auth
88
+ /review-context --fix → auto-fix
89
+ /generate-design-spec → design spec cho FE (nếu có designer)
90
+ /generate-bdd → web → specs/auth/FEAT-01-login/bdd/web/
91
+ /generate-bdd → system → specs/auth/FEAT-01-login/bdd/system/ (tổng hợp từ web)
92
+ ```
93
+
94
+ **Điều duy nhất cần làm:** thống nhất domain names với dev team trước.
95
+ ```bash
96
+ # Khi /setup-ai-first hỏi "List your business domains":
97
+ # → nhập: auth, payment, loyalty
98
+
99
+ # Communicate với dev team:
100
+ # "Domain names của project: auth, payment, loyalty
101
+ # Khi setup umbrella, dùng đúng tên này làm services keys"
102
+ ```
103
+
104
+ ---
105
+
106
+ ## Tình huống 3 — Tạo Design Spec và BDD sau khi PRD approved
107
+
108
+ **Bối cảnh:** PRD đã được approve. Cần tạo Design Spec + BDD trước khi handoff.
109
+
110
+ **Điều kiện:** Có Figma link **node-level** (URL chứa `?node-id=`, right-click frame → "Copy link to selection") cho từng screen.
111
+
112
+ **Bước 1 — Design Spec:**
113
+ ```
114
+ /generate-design-spec specs/auth/FEAT-01-login/prd.md
115
+ ```
116
+ Output: `specs/auth/FEAT-01-login/design-spec/FEAT-01-design-spec-web.md`
117
+
118
+ Mỗi screen cần Figma link node-id. Screen thiếu → flag ❌ Missing, BLOCKED. Sau khi Designer review → `@trace.status: approved`.
119
+
120
+ **Bước 2 — Generate BDD:**
121
+ ```
122
+ /generate-bdd specs/auth/FEAT-01-login/prd.md
123
+ ```
124
+
125
+ | Lần | Platform | Output |
126
+ |---|---|---|
127
+ | 1 | `web` | `specs/auth/FEAT-01-login/bdd/web/FEAT-01-UC1-login-web.feature` |
128
+ | 2 | `app` | `specs/auth/FEAT-01-login/bdd/app/FEAT-01-UC1-login-app.feature` |
129
+ | 3 | `system` | `specs/auth/FEAT-01-login/bdd/system/FEAT-01-UC1-login-system.feature` |
130
+
131
+ ```bash
132
+ git add specs/auth/FEAT-01-login/
133
+ git commit -m "feat(auth): add FEAT-01 design spec and BDD (web+app+system)"
134
+ git push
135
+ ```
136
+
137
+ ---
138
+
139
+ ## Tình huống 4 — PRD bị review trả lại (NEEDS_REVISION)
140
+
141
+ **Bước 1 — Đọc findings:**
142
+ ```bash
143
+ cat .agent/review/FEAT-01-login-prd-review-context-findings.yaml
144
+ ```
145
+
146
+ **Bước 2 — Xử lý từng finding:** set status `accepted` · `modified: "note của bạn"` · `rejected`.
147
+
148
+ **Bước 3 — Apply:**
149
+ ```
150
+ /review-context --resume specs/auth/FEAT-01-login/prd.md
151
+ ```
152
+
153
+ **Bước 4 — Re-review:**
154
+ ```
155
+ /review-context specs/auth/FEAT-01-login/prd.md
156
+ ```
157
+ Lặp lại cho đến khi `recommendation: APPROVED`.
158
+
159
+ ---
160
+
161
+ ## Tình huống 5 — Requirements thay đổi sau khi PRD đã approved
162
+
163
+ **Bước 1 — Đổi status về draft:**
164
+ ```yaml
165
+ @trace.status: draft
166
+ ```
167
+
168
+ **Bước 2 — Sửa nội dung:**
169
+ ```
170
+ /refine-prd specs/auth/FEAT-01-login/prd.md "Thêm yêu cầu: hỗ trợ đăng nhập bằng OTP"
171
+ ```
172
+
173
+ **Bước 3 — Review lại:**
174
+ ```
175
+ /review-context specs/auth/FEAT-01-login/prd.md
176
+ /review-context --resume (nếu cần fix)
177
+ ```
178
+
179
+ **Bước 4 — Approve và thông báo:**
180
+ ```yaml
181
+ @trace.status: approved
182
+ @trace.version: 1.1 # minor bump vì chỉ thêm AC
183
+ # major bump (2.0) nếu thay đổi cơ bản
184
+ ```
185
+ ```bash
186
+ git add specs/auth/FEAT-01-login/prd.md
187
+ git commit -m "feat(auth): update FEAT-01 PRD v1.1 — add OTP login AC"
188
+ git push
189
+ ```
190
+
191
+ **Bước 5 — Re-generate BDD cho các platform bị ảnh hưởng:**
192
+ ```
193
+ /generate-bdd → web (nếu thay đổi ảnh hưởng FE behavior)
194
+ /generate-bdd → app (nếu project có app)
195
+ /generate-bdd → system
196
+ → BDD mới phản ánh AC đã thay đổi
197
+ ```
198
+ ```bash
199
+ git add specs/auth/FEAT-01-login/bdd/
200
+ git commit -m "feat(auth): update BDD for FEAT-01 v1.1 — OTP login scenarios"
201
+ git push
202
+ ```
203
+ > **Lưu ý:** Dev **KHÔNG tự generate BDD** — đây là trách nhiệm của PO. Nếu bỏ qua bước này, dev sẽ code theo BDD cũ và traces sẽ broken.
204
+
205
+ **Thông báo dev team:** "FEAT-01 PRD + BDD updated v1.0 → v1.1, domain: `auth`. Pull spec submodule và bắt đầu với BDD mới."
206
+
207
+ ---
208
+
209
+ ## Tình huống 6 — Thêm domain mới vào project
210
+
211
+ **Bước 1 — Cập nhật project-context.yaml:**
212
+ ```yaml
213
+ domains:
214
+ - auth
215
+ - payment
216
+ - loyalty # ← thêm vào đây
217
+ ```
218
+
219
+ **Bước 2 — Thông báo dev team cập nhật umbrella config:**
220
+ ```yaml
221
+ services:
222
+ loyalty:
223
+ path: "loyalty-service"
224
+ module: "java-spring"
225
+ specs_dir: "loyalty-service/specs/bdd"
226
+ ```
227
+
228
+ **Bước 3 — Viết PRD bình thường với `@trace.domain: loyalty`.**
229
+
230
+ > **Lưu ý:** Nếu dev team chưa cập nhật services config → `/review-context` P0 check sẽ cảnh báo domain không match.
231
+
232
+ ---
233
+
234
+ ## Tình huống 7 — Conflict giữa 2 PRDs (P3 check)
235
+
236
+ **Bối cảnh:** FEAT-01 quy định "session hết hạn sau 30 phút", FEAT-05 quy định "session hết hạn sau 2 giờ".
237
+
238
+ 1. Đọc findings file — P3 liệt kê cả 2 PRD và điểm mâu thuẫn.
239
+ 2. Quyết định PRD nào đúng.
240
+ 3. Sửa file:
241
+ ```
242
+ /review-context --resume specs/auth/FEAT-01-login/prd.md
243
+ # với finding P3: modified: "session timeout cập nhật thành 2 giờ theo FEAT-05"
244
+ ```
245
+ 4. Cả 2 PRD phải nhất quán trước khi dev team generate BDD.
246
+
247
+ ---
248
+
249
+ ## Tình huống 8 — Cập nhật Business Dictionary
250
+
251
+ **Cách 1 — Thủ công:** Mở `specs/domain-knowledge/business-dictionary.md` → thêm vào Canonical Terms hoặc Banned Terms.
252
+
253
+ **Cách 2 — Để agent phát hiện:** Khi chạy `/generate-prd` hoặc `/review-context`, agent sẽ hỏi nếu phát hiện term mới chưa có trong dictionary.
254
+
255
+ **Sau khi cập nhật:**
256
+ ```bash
257
+ git add specs/domain-knowledge/business-dictionary.md
258
+ git commit -m "docs: add/update business dictionary — {term}"
259
+ git push
260
+ ```
261
+
262
+ > ⚠️ Sau khi ban một term mới, chạy `/review-context --fix` trên các PRDs hiện tại để replace banned terms tự động.
263
+
264
+ ---
265
+
266
+ ## Tình huống 9 — Quản lý nhiều PRD song song
267
+
268
+ ```
269
+ specs/
270
+ ├── auth/
271
+ │ ├── FEAT-01-login/prd.md (approved)
272
+ │ └── FEAT-08-sso/prd.md (draft)
273
+ ├── payment/
274
+ │ ├── FEAT-03-checkout/prd.md (approved)
275
+ │ └── FEAT-11-refund/prd.md (draft)
276
+ └── loyalty/
277
+ └── FEAT-06-points/prd.md (in-review)
278
+ ```
279
+
280
+ **Gợi ý:** Hoàn thiện 1 PRD đến `approved` trước khi bắt đầu PRD tiếp theo. Chỉ PRD `approved` mới được dev team sử dụng.
281
+
282
+ ```bash
283
+ # Xem nhanh tất cả PRDs và status:
284
+ grep -r "@trace.status" specs/ --include="prd.md"
285
+ ```
286
+
287
+ ---
288
+
289
+ ## Tình huống 10 — Handoff PRD cho dev team
290
+
291
+ **Checklist trước khi thông báo:**
292
+ ```yaml
293
+ @trace.id: FEAT-01 ✅ có
294
+ @trace.domain: auth ✅ khớp với services keys của dev team
295
+ @trace.status: approved ✅ đã approved
296
+ @trace.version: 1.0 ✅ có version number
297
+ ```
298
+
299
+ ```
300
+ /review-context specs/auth/FEAT-01-login/prd.md
301
+ → Phải thấy recommendation: APPROVED và 0 critical findings
302
+ ```
303
+
304
+ **Template thông báo cho dev team:**
305
+ ```
306
+ [FEAT-01] PRD Login đã approved — sẵn sàng implement
307
+
308
+ Domain: auth
309
+ File: my-project-specs/specs/auth/FEAT-01-login/prd.md
310
+ Version: 1.0
311
+ Design Spec (Web): my-project-specs/specs/auth/FEAT-01-login/design-spec/FEAT-01-design-spec-web.md
312
+
313
+ Lệnh để bắt đầu:
314
+ git submodule update --remote my-project-specs
315
+ /review-context my-project-specs/specs/auth/FEAT-01-login/prd.md
316
+ ```
317
+
318
+ ---
319
+
320
+ ## Tình huống 11 — Brownfield: API đã tồn tại trên hệ thống cũ
321
+
322
+ **Bước 1 — Thêm `API Source: existing` vào PRD Metadata:**
323
+ ```markdown
324
+ | **API Source** | existing |
325
+ ```
326
+
327
+ **Bước 2 — Điền section "Existing API Contract" trong Appendix:**
328
+ ```markdown
329
+ ## Existing API Contract
330
+
331
+ | Method | Path | Auth | Request | Response |
332
+ |--------|------|------|---------|----------|
333
+ | POST | /api/v1/orders | Bearer | `{ product_id, quantity }` | `{ id, status, total }` |
334
+ | GET | /api/v1/orders/:id | Bearer | — | `{ id, items[], status, created_at }` |
335
+
336
+ **Error responses:**
337
+
338
+ | HTTP Status | Error Code | Khi nào xảy ra |
339
+ |-------------|------------|----------------|
340
+ | 404 | ORDER_NOT_FOUND | Order ID không tồn tại |
341
+ | 422 | INSUFFICIENT_STOCK | Số lượng vượt tồn kho |
342
+ ```
343
+
344
+ **Bước 3 — Generate BDD như bình thường:**
345
+ ```
346
+ /generate-bdd → system
347
+ ```
348
+ Framework tự nhận ra `API Source: existing`, dùng contract trong PRD trực tiếp.
349
+
350
+ **Bước 4 — Generate Tech Docs:**
351
+ ```
352
+ /generate-tech-docs
353
+ ```
354
+ Chạy ở mode **Reverse-document**: mô tả lại API đã tồn tại, ghi chú gaps.
355
+
356
+ **Không cần:** Sign-off gate T7 (tự động skip) · `--phase=ui` (API đã live).
357
+
358
+ ---
359
+
360
+ ## Tình huống 12 — System BDD synthesis: outside-in & xử lý cross-platform conflict
361
+
362
+ **Bối cảnh:** Đã có Web BDD + App BDD cho FEAT-01. Khi gen System BDD, `/generate-bdd → system` **không viết mới từ PRD** mà **tổng hợp ngược** từ Web + App BDD (outside-in) — vì BE/system tồn tại để phục vụ các flow client.
363
+
364
+ **4 mode tự nhận diện** (theo BDD client đang có):
365
+
366
+ | Có sẵn | Mode | System BDD lấy từ |
367
+ |---|---|---|
368
+ | web + app | **Multi-platform** | tổng hợp cả hai (+ conflict check) |
369
+ | chỉ web | **Web-only** | chỉ web |
370
+ | chỉ app | **App-only** | chỉ app |
371
+ | không có web/app | **Backend-only** | gen thẳng từ PRD (business-event language) |
372
+ | PRD có `API Source: existing` | **Brownfield** | dùng contract có sẵn trong PRD (xem [Tình huống 11](#tình-huống-11--brownfield-api-đã-tồn-tại-trên-hệ-thống-cũ)) |
373
+
374
+ ### Ví dụ multi-platform CÓ conflict
375
+
376
+ Web và App kỳ vọng response **khác nhau**:
377
+ ```gherkin
378
+ # web/FEAT-01-UC1-login-web.feature
379
+ Then user sees dashboard # → cần { token, redirect_url }
380
+
381
+ # app/FEAT-01-UC1-login-app.feature
382
+ Then app navigates to HomeScreen # → cần { token, user_profile }
383
+ ```
384
+
385
+ Chạy `/generate-bdd → system` → agent phát hiện **response shape mismatch** → dừng tại CHECKPOINT (bắt buộc, không skip được):
386
+
387
+ ```
388
+ ⚠️ CROSS-PLATFORM CONTRACT CONFLICT
389
+ Conflict 1: Response shape mismatch
390
+ Web (Then sees dashboard) → { token, redirect_url }
391
+ App (Then navigates HomeScreen) → { token, user_profile }
392
+
393
+ Resolution:
394
+ A — Union: BE trả { token, redirect_url, user_profile }; client bỏ field không dùng (đơn giản, hơi thừa)
395
+ B — Platform hint: client gửi header X-Platform: web|app, BE tailor response (gọn, BE phức tạp hơn)
396
+ C — Separate endpoints: POST /auth/login/web · /auth/login/app (linh hoạt nhất, nhiều endpoint)
397
+ D — Custom: tự mô tả
398
+ ```
399
+
400
+ **4 loại conflict agent bắt:**
401
+
402
+ | Loại | Ví dụ |
403
+ |---|---|
404
+ | Response shape mismatch | web `{ token, redirect_url }` vs app `{ token, user_profile }` |
405
+ | Error semantics mismatch | web HTTP 423 vs app error code `ACC_LOCKED` |
406
+ | Business rule contradiction | web "khoá sau 5 lần" vs app "khoá sau 3 lần" |
407
+ | Data field conflict | web `expires_in: seconds` vs app `expires_at: ISO timestamp` |
408
+
409
+ ### PO chọn resolution → ghi vào System BDD
410
+
411
+ Chọn **A (Union)** → System BDD được gen kèm annotation:
412
+ ```gherkin
413
+ # system/FEAT-01-UC1-login-system.feature
414
+ # @trace.platform: system
415
+ # @system.resolution: union — clients receive all fields
416
+ Scenario: Successful login returns token, redirect and profile
417
+ When the system receives a login request
418
+ Then the system returns { token, redirect_url, user_profile }
419
+ And the session is valid for 3600 seconds
420
+ ```
421
+ - **B (platform-hint)** → `Scenario Outline` + Examples cho web/app variant; annotation `platform-hint`.
422
+ - **C (separate endpoints)** → Scenario riêng mỗi endpoint; annotation ghi rõ split.
423
+
424
+ Mỗi quyết định được lưu thành `# @system.resolution:` trong file system BDD — để BE dev build contract đúng kiểu đã chốt.
425
+
426
+ ### Bàn giao xuống BE & xử lý thay đổi
427
+
428
+ - BE dev đọc `@system.resolution:` → build API contract theo đúng kiểu (union / platform-hint / separate-endpoints) trong `/generate-tech-docs`. **Không tự đổi** — nếu thấy bất hợp lý → phản hồi PO (đây là quyết định contract, không phải implementation).
429
+ - **Web/App BDD đổi về sau** → re-gen System BDD (`/generate-bdd → system`) để tổng hợp lại; phát sinh conflict mới → CHECKPOINT lại.
430
+ - **FE cần field mà BE contract chưa có** → là **contract gap**: QC/Dev `/report-bug` hoặc `/propose-scenario` → PO bổ sung vào Web/App BDD → re-synthesize System BDD → BE cập nhật contract. Vòng feedback: [Bug Flow](../../04-operations/bug-flow.md).
431
+
432
+ > **Tóm tắt outside-in:** Web/App BDD (client trước) → System BDD (tổng hợp, chốt conflict) → BE tech-docs (contract) → FE/App tech-docs (GATED: cần System BDD + BE contract). Chuỗi đầy đủ: [Developer › Workflow](../developer/workflow.md) · [Concepts › Pipeline](../../03-concepts/pipeline.md).
433
+
434
+ ---
435
+
436
+ ← [Commands](commands.md) · Tiếp theo: [Quy tắc viết PRD](prd-writing-rules.md)
@@ -0,0 +1,75 @@
1
+ [📚 Docs](../../README.md) › [Guides](../README.md) › Tester / QA
2
+
3
+ # Hướng Dẫn Tester — Spec-Driven Docs
4
+
5
+ Tài liệu dành cho **QA / Tester** — cách kết nối với spec framework, workflow kiểm thử, và các tình huống thực tế.
6
+
7
+ ## Mục Lục
8
+
9
+ | Trang | Nội dung |
10
+ |---|---|
11
+ | [Spec Manifest & Setup](spec-manifest.md) | Spec manifest là gì · setup tester agent · Living Docs panel |
12
+ | [Workflow](workflow.md) | Luồng làm việc cơ bản từ nhận task đến pass/fail |
13
+ | [Đọc Spec Chain](reading-specs.md) | Thứ tự đọc PRD → BDD → Tech Docs · ví dụ thực tế |
14
+ | [Tình huống thực tế](scenarios.md) | 6 scenario: feature mới, PRD thay đổi, multi-service, regression, ... |
15
+ | [Báo cáo bug](bug-reporting.md) | `/report-bug` · `/propose-scenario` · template báo cáo |
16
+ | [Checklist test pass](test-checklist.md) | Checklist trước khi báo "test pass" |
17
+ | [QC Automation](qc-automation.md) | Deep-dive pipeline `/qc-*` 6 bước · stack `qc-playwright` · `qc_status` → Living Docs |
18
+
19
+ ## Vai Trò Tester Trong Framework
20
+
21
+ ```
22
+ PO/BA Dev Tester / QA
23
+ ───────────────── ─────────────────── ──────────────────────────
24
+ PRD (đọc BDD — KHÔNG gen) /sync + /generate-spec-manifest
25
+ BDD web→app→system Tech Docs Đọc PRD + BDD + Tech Docs
26
+ Design Spec Code Viết test cases · chạy /qc-*
27
+ ▲ ▲ /report-bug · /propose-scenario
28
+ │ │ (bug / edge case → spec repo)
29
+ └─────────────────────┴──── feedback/ trong spec repo ◄────┘
30
+ PO/Dev thấy qua /sync (📥) → fix / promote / update PRD
31
+ ```
32
+
33
+ **Tester chịu trách nhiệm:**
34
+ - Đọc PRD để hiểu business requirement trước khi test
35
+ - Đọc BDD để biết chính xác scenarios cần cover
36
+ - Đọc Tech Docs để hiểu API contracts và data flow
37
+ - Viết test cases dựa trên BDD scenarios
38
+ - Khi bug xảy ra: `/report-bug` → tạo bug report có spec-context đầy đủ, phân loại layer
39
+ - Khi phát hiện edge case chưa có trong BDD: `/propose-scenario` → đề xuất cho PO/Dev duyệt
40
+
41
+ **Tester KHÔNG làm:**
42
+ - Sửa PRD / BDD / Tech Docs trực tiếp — đó là việc của PO và Dev
43
+ - Approve PRD — chỉ PO
44
+ - Generate code — chỉ Dev
45
+
46
+ > **Lưu ý về `/propose-scenario`:** lệnh này **không** sửa BDD. Nó chỉ ghi một bản *đề xuất* (draft Gherkin) vào vùng `feedback/bdd-proposals/` của spec repo dùng chung. PO/Dev review và đưa vào `.feature` chính thức.
47
+
48
+ ## Commands Dành Cho Tester
49
+
50
+ | Command | Mục đích | Khi nào dùng |
51
+ |---|---|---|
52
+ | `/generate-spec-manifest` | Tạo index TICKET-ID → PRD/BDD/tech-doc | Trước mỗi sprint, sau khi pull specs mới |
53
+ | `/report-bug {UC-ID} {mô tả}` | Tạo bug report có spec-context + phân loại layer (read-only) | Khi test fail / phát hiện bug |
54
+ | `/propose-scenario {UC-ID} {mô tả}` | Đề xuất scenario BDD mới cho edge case chưa cover | Khi tìm thấy case ngoài BDD hiện có |
55
+
56
+ **QC Automation Pipeline (chính thức) — 6 lệnh `/qc-*`:**
57
+
58
+ | Command | Mục đích | Khi nào dùng |
59
+ |---|---|---|
60
+ | `/qc-analyze` | Phân tích spec chain (PRD + BDD + Tech Docs), xác định scope test | Bước 1, sau khi BDD đã approved |
61
+ | `/qc-plan` | Lập test plan: liệt kê scenarios, layer, ưu tiên | Bước 2 |
62
+ | `/qc-design-test` | Thiết kế test case chi tiết (Page Object, data, assertions) | Bước 3 |
63
+ | `/qc-review` | Review test design trước khi code automation | Bước 4 |
64
+ | `/qc-run-test` | Chạy automation test → ghi `qc_status` per scenario vào trace TSV | Bước 5 |
65
+ | `/qc-report` | Tổng hợp kết quả thành QC report | Bước 6 |
66
+
67
+ Đây là **bộ test chính thức (authoritative) của QC**, chạy ngay trong framework. Pipeline dùng stack module `qc-playwright` (Python + pytest-playwright + Page Object). Xem chi tiết flow tại **chương [QC Automation](qc-automation.md)** (một phần của guide Tester / QA này).
68
+
69
+ > **Artifact ra đâu:** `/qc-analyze` ghi **2 file** (`REQUIREMENT_ANALYSIS.md` + `DOC_GAPS.md`), `/qc-plan` → `TEST_PLAN.md`, `/qc-design-test` → `test-cases/*.Test.md` — tất cả trong `{qc_dir}/{UC-ID}/` (mặc định `docs/`, **visible**, không phải `.agent/` ẩn). Skill QC nạp từ `paths.qc_skills_dir` — trỏ được tới repo QC để skill **không bị `/update-framework` ghi đè**. Chi tiết: [QC Automation guide](qc-automation.md#skill-sourcing--upgrade-safety).
70
+
71
+ > **Phân biệt với test commands của Dev:** `/dev-gen-test`, `/dev-run-test`, `/dev-smoke-test` là **dev tự kiểm tra code của mình** — phát tín hiệu `dev_selftest`, KHÔNG phải bộ test chính thức. Bộ test authoritative của QC là pipeline `/qc-*` (sinh ra `qc_status`). Hai luồng tách biệt.
72
+
73
+ ---
74
+
75
+ *Xem thêm:* [Developer Guide](../developer/README.md) · [Chương QC Automation](qc-automation.md) · [Operations › Bug Flow](../../04-operations/bug-flow.md) · [Reference › Commands](../../05-reference/commands.md)