@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,49 @@
1
+ ---
2
+ version: 1.0
3
+ updated: 2026-06-11
4
+ ported_from: ai-automation-qc-base
5
+ ---
6
+
7
+ # Gen Script — E2E Journey
8
+
9
+ Skill **tự chứa**: convert journey `.Test.md` → Python pytest + Playwright đầu→cuối xuyên nhiều màn/module. Chỉ cần load file này.
10
+
11
+ ## Khi nào trigger
12
+ - Convert TC E2E journey (output qa-designer e2e/journey) sang script; TC đã Reviewed
13
+
14
+ ## Khi KHÔNG trigger
15
+ - Test 1 màn/field → `functional/*` · 1 điểm tích hợp → `integration.md`
16
+
17
+ ## Quy ước script (bám CLAUDE.md)
18
+ - Tiền đề: `.Test.md` đã Reviewed. KHÔNG hardcode → `Env.*`/`CONFIG`; KHÔNG `time.sleep()` → `expect()`.
19
+ - Dùng chuỗi Page Object xuyên các màn; verify points (V1…Vn) thành các `assert_*()` rõ ràng.
20
+ - **Tiền điều kiện qua fixture** (tài khoản role, dữ liệu lớp/buổi); **cleanup** sau journey; mỗi journey độc lập.
21
+ - Cần verify hệ thống ngoài (DB/CRM) → client/fixture riêng. Bọc mỗi chặng `with step("…")` (`from utils.steps import step`, **KHÔNG Allure**); assertion `expect()`; marker `@pytest.mark.e2e`.
22
+ - Naming: class `TestFeatureE2E`, method `test_E2E_<NN>_<snake>`.
23
+
24
+ ## Phase 1 — Clarify
25
+ Đọc journey `.Test.md` · các màn/PO + hệ thống verify · tài khoản role & data cần dựng · điểm cleanup.
26
+
27
+ ## Phase 2 — Generate
28
+ Mỗi journey → 1 test; bọc từng bước `with step("…")`; cuối journey verify đủ V1…Vn (tạo/mã/định tuyến/đồng bộ/danh sách).
29
+ Journey còn phụ thuộc gap → tạo test `@pytest.mark.skip(reason="GAP-xx")` hoặc xfail.
30
+
31
+ ## Phase 3 — Verify
32
+ `py_compile` + `pytest --collect-only -q` · chạy (môi trường staging + CRM) · cập nhật Status TC.
33
+ **Phân loại FAIL: script-bug vs product-gap** — journey fail vì 1 bước feature chưa wire = gap (giữ FAIL/skip + bằng chứng), không phải lỗi script; sai selector/state mới sửa script.
34
+
35
+ ## Output
36
+ Script `tests/<project>/e2e/test_<feature>.py` + Page Object/client tái dùng. Bàn giao `qa-reviewer`.
37
+
38
+ ## Phase 4 — Report (bắt buộc sau khi chạy test)
39
+ Report = **Playwright Trace viewer + pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết).
40
+
41
+ 1. Chạy test kèm pytest-html (trace đã bật sẵn ở conftest → mỗi test có `test-results/<nodeid>/trace.zip`):
42
+ ```bash
43
+ pytest tests/<project>/e2e/test_<feature>.py --html=reports/<feature>/report.html --self-contained-html
44
+ ```
45
+ 2. Gửi cho người dùng:
46
+ - HTML report: `reports/<feature>/report.html` (self-contained, mở trực tiếp).
47
+ - Trace từng test (debug step-by-step): `python3 -m playwright show-trace test-results/<nodeid>/trace.zip`.
48
+ - Tóm tắt: **TOTAL / PASS / FAIL / SKIP** + duration.
49
+ 3. TC Fail → mở trace tương ứng để xem timeline/DOM snapshot/network, phân loại script-bug vs product-gap; ghi mô tả lỗi tiếng Việt dễ hiểu vào Status/khối kết quả của `.Test.md`.
@@ -0,0 +1,36 @@
1
+ ---
2
+ version: 1.0
3
+ updated: 2026-06-11
4
+ ported_from: ai-automation-qc-base
5
+ ---
6
+
7
+ # Session Template & Convert Findings — Exploratory
8
+
9
+ Skill **tự chứa**, 2 mode:
10
+ - **Mode 1:** sinh session note template trước khi test.
11
+ - **Mode 2:** convert findings (#BUG/#IDEA) → bug report + functional TC mới.
12
+
13
+ ## Khi nào trigger
14
+ - Mode 1: "tạo template cho session" / trước exploratory session
15
+ - Mode 2: "convert findings" / "tạo bug report" / sau session
16
+
17
+ ## Khi KHÔNG trigger
18
+ - Sinh charter → `qa-designer/exploratory/charter.md` · review session note → `qa-reviewer/script/exploratory.md`
19
+
20
+ ---
21
+
22
+ ## Mode 1 — Generate Session Template
23
+ Input: charter + tour + tester + time-box. Tạo file gồm: metadata (date/tester/charter/tour/env/data) ·
24
+ `#SETUP` (bước chuẩn bị) · `#TEST` (5–8 gợi ý theo tour) · `#BUG` template (title, severity, steps,
25
+ expected/actual) · `#QUESTION`, `#IDEA` placeholder · summary cuối session.
26
+ → `{paths.qc_dir}/exploratory/sessions/<YYYY-MM-DD>_<tester>.md`
27
+
28
+ ## Mode 2 — Convert Findings
29
+ Input: session note (#BUG + #IDEA).
30
+ - **Bug report** mỗi #BUG: title, severity, priority, steps to reproduce, expected/actual, hypothesis root cause.
31
+ - **Functional TC mới:** mỗi #BUG đã fix → 1–2 TC regression; mỗi #IDEA → TC nếu đủ rõ (hoặc backlog).
32
+ Đặt đúng layer; bám format TC (Test Data list, Trace BR, 🚫 Block); trace "Origin: Exploratory session <date>".
33
+ - **Weekly summary** (nếu yêu cầu): overview, top findings, coverage gap, recommendations.
34
+
35
+ ## Output
36
+ Mode 1: file session note. Mode 2: bug reports + file TC trong `{paths.qc_dir}/{UC-ID}/test-cases/` + summary.
@@ -0,0 +1,35 @@
1
+ ---
2
+ version: 1.0
3
+ updated: 2026-06-11
4
+ ported_from: ai-automation-qc-base
5
+ ---
6
+
7
+ # Gen Script — Functional API
8
+
9
+ Skill **tự chứa**: convert `.Test.md` API → Python pytest (requests/httpx), không qua UI. Chỉ cần load file này.
10
+
11
+ ## Khi nào trigger
12
+ - Convert TC API (output qa-designer functional/api) sang script; TC đã Reviewed
13
+
14
+ ## Khi KHÔNG trigger
15
+ - Test qua UI → `functional/gui-screen.md` · tích hợp đa thành phần → `integration.md`
16
+
17
+ ## Quy ước script (bám CLAUDE.md)
18
+ - Tiền đề: `.Test.md` đã Reviewed. KHÔNG hardcode base URL/token → `Env.*`/`CONFIG`.
19
+ - Client API gói trong helper/fixture (base url, auth header); KHÔNG rải request rời rạc trong test.
20
+ - Assertion: `assert` cho status code + field response (jsonpath); `with step(...)` (`from utils.steps`) cho mỗi call.
21
+ - Marker `@pytest.mark.api` + category; fixture `function`; test độc lập (tạo→cleanup data qua API/teardown).
22
+ - Naming: class `TestFeatureAPI`, method `test_TC<NNN>_<snake>`.
23
+
24
+ ## Phase 1 — Clarify
25
+ Đọc `.Test.md` · base url/auth/role · client/fixture đã có chưa · data setup/cleanup.
26
+
27
+ ## Phase 2 — Generate
28
+ Mỗi TC → 1 test gọi endpoint với request từ Test Data; assert **status code + field body** theo Expected.
29
+ Nhóm happy/validation/auth/not-found/edge. Data từ `test_data/`.
30
+
31
+ ## Phase 3 — Verify
32
+ `py_compile` + `pytest --collect-only -q` · chạy · cập nhật Status TC · in mapping.
33
+
34
+ ## Output
35
+ Script `tests/<project>/functional/api/test_<feature>.py` + API client/fixture nếu mới. Bàn giao `qa-reviewer`.
@@ -0,0 +1,51 @@
1
+ ---
2
+ version: 1.0
3
+ updated: 2026-06-11
4
+ ported_from: ai-automation-qc-base
5
+ ---
6
+
7
+ # Gen Script — Functional GUI Feature (đa màn hình)
8
+
9
+ Skill **tự chứa**: convert `.Test.md` feature span ≥2 màn → Python pytest + Playwright. Chỉ cần load file này.
10
+
11
+ ## Khi nào trigger
12
+ - Convert TC feature đa màn (output qa-designer gui-feature) sang script; TC đã Reviewed
13
+
14
+ ## Khi KHÔNG trigger
15
+ - Gọn 1 màn → `functional/gui-screen.md` · API → `functional/api.md` · đầu-cuối + đồng bộ → `e2e.md`
16
+
17
+ ## Quy ước script (bám CLAUDE.md)
18
+ - Tiền đề: `.Test.md` đã Reviewed. KHÔNG `time.sleep()` → `expect()`/auto-wait; KHÔNG hardcode → `Env.*`/`CONFIG`.
19
+ - **Một Page Object / màn**; điều hướng giữa màn là action trả về PO màn kế (`return NextPage(self.page)`).
20
+ - PO 3 lớp (kế thừa slim `BasePage`, **KHÔNG Allure**) + bọc bước `with step("…")` (`from utils.steps import step`); assertion `expect()`; mọi interaction qua PO; selector constants `UPPER_SNAKE`.
21
+ - Marker + fixture pytest-playwright từ root `tests/conftest.py` (`page`/`logged_in_page`/`logged_in_page_gv`/`login_page`/`dashboard`); test độc lập + cleanup; naming `Test*{...}` / `test_TC<NNN>_<snake>`.
22
+
23
+ ## Phase 1 — Clarify
24
+ Đọc `.Test.md` · liệt kê các màn/PO cần · state truyền giữa màn · fixture dựng tiền điều kiện (data qua nhiều bước).
25
+ **Probe DOM thật trước khi viết selector** (SPA React/Next không `data-testid`): dump class/`aria-label`/role → BEM `feature__el`, carousel dot thường `role="tab"` + class `--active` (không `aria-selected`).
26
+
27
+ ## Phase 2 — Generate
28
+ **PHỦ HẾT 100%**: 1 test cho **MỌI** TC trong file (`grep -cE "^#{2,4} *TC_"` = số test phải sinh), KHÔNG chọn tập đại diện, KHÔNG để TC nào Draft; TC bất khả thi → `pytest.skip`/`xfail` + lý do.
29
+ Bọc mỗi chặng bằng `with step("…")`; dùng chuỗi PO theo điều hướng.
30
+ Phủ TC điều hướng forward/back/giữ-reset state. Data từ `test_data/`. Marker mới (`bva ep e2e`…) đăng ký `pytest.ini`.
31
+
32
+ ## Phase 3 — Verify
33
+ `py_compile` + `pytest --collect-only -q` (**số collect = tổng TC**; thiếu → sinh nốt) · chạy · cập nhật Status TC (verify KHÔNG còn Draft) · in mapping.
34
+ **Gom nhóm role/account** tự áp qua `utils/test_ordering.py` (root conftest); fixture auth mới → `register_auth_fixtures([...])`. ⚠️ Run dài bị **WSL suspend** có thể gây flaky login/timeout → re-run TC đó + merge report.
35
+ **Phân loại FAIL: script-bug (sửa selector/logic, chạy lại) vs product-gap** (feature chưa wire/defect → giữ FAIL + ghi bằng chứng vào khối "Kết quả thực thi" đầu `.Test.md`, không fake-pass).
36
+
37
+ ## Output
38
+ Script + nhiều Page Object (mỗi màn) trong `pages/<project>/...`. Bàn giao `qa-reviewer` (script).
39
+
40
+ ## Phase 4 — Report (bắt buộc sau khi chạy test)
41
+ Report = **Playwright Trace viewer + pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết).
42
+
43
+ 1. Chạy test kèm pytest-html (trace đã bật sẵn ở conftest → mỗi test có `test-results/<nodeid>/trace.zip`):
44
+ ```bash
45
+ pytest tests/<project>/.../test_<feature>.py --html=reports/<feature>/report.html --self-contained-html
46
+ ```
47
+ 2. Gửi cho người dùng:
48
+ - HTML report: `reports/<feature>/report.html` (self-contained, mở trực tiếp).
49
+ - Trace từng test (debug step-by-step): `python3 -m playwright show-trace test-results/<nodeid>/trace.zip`.
50
+ - Tóm tắt: **TOTAL / PASS / FAIL / SKIP** + duration.
51
+ 3. TC Fail → mở trace tương ứng để xem timeline/DOM snapshot/network, phân loại script-bug vs product-gap; ghi mô tả lỗi tiếng Việt dễ hiểu vào Status/khối kết quả của `.Test.md`.
@@ -0,0 +1,55 @@
1
+ ---
2
+ version: 1.0
3
+ updated: 2026-06-11
4
+ ported_from: ai-automation-qc-base
5
+ ---
6
+
7
+ # Gen Script — Functional GUI Screen (1 màn hình)
8
+
9
+ Skill **tự chứa**: convert `.Test.md` (1 màn) → Python pytest + Playwright. Chỉ cần load file này.
10
+
11
+ ## Khi nào trigger
12
+ - "generate script cho [Screen]" / convert TC sang Python; đã có `.Test.md` (output qa-designer gui-screen), TC đã Reviewed
13
+
14
+ ## Khi KHÔNG trigger
15
+ - Chưa có TC `.md` → chạy qa-designer trước · TC chưa review → qa-reviewer trước
16
+ - Feature cross-screen → `functional/gui-feature.md` · API → `functional/api.md`
17
+
18
+ ## Quy ước script (bám CLAUDE.md)
19
+ - Tiền đề: có `.Test.md` đã Reviewed. KHÔNG `time.sleep()` → `expect()`/auto-wait; KHÔNG hardcode → `Env.*`/`CONFIG`.
20
+ - Page Object 3 lớp (kế thừa slim `BasePage`, **KHÔNG Allure**): locators `_x()` → actions `verb_noun()`+`with step("…")`+`return self` → assertions `assert_x()`+`expect()`; mọi interaction **qua PO** (không `page.click()` trực tiếp); selector constants `UPPER_SNAKE` đầu class.
21
+ - Bọc bước bằng `with step("…")` (`from utils.steps import step`) — **KHÔNG Allure** · marker category+domain (đăng ký `pytest.ini`) · fixture pytest-playwright từ root `tests/conftest.py` (`page`/`logged_in_page`/`logged_in_page_gv`/`login_page`/`dashboard`) · test độc lập + cleanup.
22
+ - Naming: class `TestFeature{UI,Functional,Negative}`, method `test_TC<NNN>_<snake>`; docstring = TC title; comment TC_ID + link `.md`.
23
+
24
+ ## Phase 1 — Clarify
25
+ Đọc `.Test.md` (confirm Reviewed) · platform (web Playwright/mobile) · Page Object đã có chưa → tạo nếu cần · fixture setup data?
26
+ **Probe DOM thật trước khi viết selector** (SPA không `data-testid`): dump class/`aria-label`/role bằng script Playwright tạm → ghi selector đúng (BEM `feature__el`; element interactive có thể `role="tab/menuitem"` + class `--active`).
27
+
28
+ ## Phase 2 — Generate
29
+ **PHỦ HẾT 100%**: sinh 1 `test_TC<NNN>_<scenario>` cho **MỌI** TC trong file — KHÔNG chọn tập đại diện, KHÔNG bỏ TC nào. Đếm tổng TC đầu file (`grep -cE "^#{2,4} *TC_"`) = số test phải sinh.
30
+ TC không thể tự động hóa (precondition bất khả thi, cần data cố định, feature chưa wire) → vẫn viết 1 test với `pytest.skip("lý do")` / `pytest.mark.xfail` — KHÔNG để Draft.
31
+ Map nhóm GUI→`TestFeatureUI`, Functional→`TestFeatureFunctional`, Negative→`TestFeatureNegative`. Assertion qua `assert_*()` của PO; test data từ `test_data/`, không hardcode. Marker mới (`bva ep`…) đăng ký `pytest.ini`.
32
+
33
+ ## Phase 3 — Verify
34
+ `py_compile` + `pytest --collect-only -q` (**số collect = tổng TC trong file**, nếu thiếu → quay lại Phase 2 sinh nốt) · chạy test · cập nhật **Status** TC (Pass/Fail/Skip) · in mapping TC_ID→function→file.
35
+ **Gom nhóm role/account**: thứ tự chạy đã tự gom cùng (role, account) liền nhau qua `utils/test_ordering.py` (hook ở root conftest) — fixture auth mới thì `register_auth_fixtures([...])`.
36
+ ⚠️ Run dài có thể bị **WSL suspend** (máy ngủ) làm vài TC lỗi login/timeout = flaky (không phải gap SP) → re-run đúng các TC đó + merge vào report (xem `report/report.md`).
37
+ **Verify KHÔNG còn Draft**: `grep -c "Status: Draft" <file>.Test.md` = 0 trước khi bàn giao.
38
+ **Mỗi FAIL phân loại script-bug vs product-gap** (probe trực tiếp): sai selector/expectation → sửa script & chạy lại; feature không phản hồi sau timeout → giữ FAIL + ghi bằng chứng (không fake-pass).
39
+
40
+ ## Output
41
+ Script `tests/<project>/.../test_<screen>.py` + Page Object `pages/<project>/.../<Screen>Page.py` (nếu mới).
42
+ Bàn giao `qa-reviewer` (script).
43
+
44
+ ## Phase 4 — Report (bắt buộc sau khi chạy test)
45
+ Report = **Playwright Trace viewer + pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết).
46
+
47
+ 1. Chạy test kèm pytest-html (trace đã bật sẵn ở conftest → mỗi test có `test-results/<nodeid>/trace.zip`):
48
+ ```bash
49
+ pytest tests/<project>/.../test_<screen>.py --html=reports/<feature>/report.html --self-contained-html
50
+ ```
51
+ 2. Gửi cho người dùng:
52
+ - HTML report: `reports/<feature>/report.html` (self-contained, mở trực tiếp).
53
+ - Trace từng test (debug step-by-step): `python3 -m playwright show-trace test-results/<nodeid>/trace.zip`.
54
+ - Tóm tắt: **TOTAL / PASS / FAIL / SKIP** + duration.
55
+ 3. TC Fail → mở trace tương ứng để xem timeline/DOM snapshot/network, phân loại script-bug vs product-gap; ghi mô tả lỗi tiếng Việt dễ hiểu vào Status/khối kết quả của `.Test.md`.
@@ -0,0 +1,47 @@
1
+ ---
2
+ version: 1.0
3
+ updated: 2026-06-11
4
+ ported_from: ai-automation-qc-base
5
+ ---
6
+
7
+ # Gen Script — Integration
8
+
9
+ Skill **tự chứa**: convert `.Test.md` tích hợp (API↔DB↔service↔queue↔UI) → Python pytest. Chỉ cần load file này.
10
+
11
+ ## Khi nào trigger
12
+ - Convert TC integration (output qa-designer integration/*) sang script; TC đã Reviewed
13
+
14
+ ## Khi KHÔNG trigger
15
+ - Chỉ 1 endpoint/UI đơn → `functional/*` · hành trình đầu-cuối → `e2e.md`
16
+
17
+ ## Quy ước script (bám CLAUDE.md)
18
+ - Tiền đề: `.Test.md` đã Reviewed. KHÔNG hardcode endpoint/DSN/topic → `Env.*`/`CONFIG`.
19
+ - Mỗi hệ thống có client/helper riêng (API client, DB session, Kafka producer/consumer) gói trong fixture.
20
+ - Verify đúng chặng: response (assert), DB (query qua fixture), event (consume + assert payload).
21
+ - **Cleanup bắt buộc** sau khi tạo data; test độc lập; concurrency dùng thread/async khi cần.
22
+ - Bọc mỗi chặng `with step("…")` (`from utils.steps import step`, **KHÔNG Allure**); assertion `expect()`; marker `@pytest.mark.integration` + domain; naming `TestFeatureIntegration` / `test_TC<NNN>_<snake>`.
23
+
24
+ ## Phase 1 — Clarify
25
+ Đọc `.Test.md` · chuỗi tích hợp & chặng cần verify · client/fixture (API/DB/Kafka) đã có chưa · setup/teardown data.
26
+
27
+ ## Phase 2 — Generate
28
+ Mỗi TC → 1 test theo data flow: gọi action → verify từng chặng (response/DB/event). Nhóm happy/contract-negative/failure-retry/concurrency/đồng bộ.
29
+
30
+ ## Phase 3 — Verify
31
+ `py_compile` + `pytest --collect-only -q` · chạy (cần môi trường staging/CRM/Kafka) · cập nhật Status TC.
32
+
33
+ ## Output
34
+ Script `tests/<project>/integration/test_<feature>.py` + client/fixture (DB/Kafka/API) nếu mới. Bàn giao `qa-reviewer`.
35
+
36
+ ## Phase 4 — Report (bắt buộc sau khi chạy test)
37
+ Report = **Playwright Trace viewer + pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết).
38
+
39
+ 1. Chạy test kèm pytest-html (trace đã bật sẵn ở conftest → mỗi test có `test-results/<nodeid>/trace.zip`):
40
+ ```bash
41
+ pytest tests/<project>/integration/test_<feature>.py --html=reports/<feature>/report.html --self-contained-html
42
+ ```
43
+ 2. Gửi cho người dùng:
44
+ - HTML report: `reports/<feature>/report.html` (self-contained, mở trực tiếp).
45
+ - Trace từng test (debug step-by-step): `python3 -m playwright show-trace test-results/<nodeid>/trace.zip`.
46
+ - Tóm tắt: **TOTAL / PASS / FAIL / SKIP** + duration.
47
+ 3. TC Fail → mở trace tương ứng để xem timeline/DOM snapshot/network, phân loại script-bug vs product-gap; ghi mô tả lỗi tiếng Việt dễ hiểu vào Status/khối kết quả của `.Test.md`.
@@ -0,0 +1,49 @@
1
+ ---
2
+ version: 1.0
3
+ updated: 2026-06-11
4
+ ported_from: ai-automation-qc-base
5
+ ---
6
+
7
+ # Gen Script — Non-Functional
8
+
9
+ Skill **tự chứa**: convert TC non-functional (performance/security/accessibility/compatibility) → script/đo. Chỉ cần load file này.
10
+
11
+ ## Khi nào trigger
12
+ - Convert TC non-functional (output qa-designer non-functional) sang script/kịch bản đo; TC đã Reviewed
13
+
14
+ ## Khi KHÔNG trigger
15
+ - Kiểm thử chức năng → `functional/*` · tích hợp → `integration.md`
16
+
17
+ ## Quy ước script (bám CLAUDE.md)
18
+ - Tiền đề: `.Test.md` đã Reviewed, có **ngưỡng đo cụ thể**. KHÔNG hardcode → `Env.*`/`CONFIG`.
19
+ - Mỗi loại dùng công cụ phù hợp, gói trong fixture/helper:
20
+ - **Performance:** đo response time / throughput (pytest + timer, hoặc tích hợp k6/locust); assert ngưỡng.
21
+ - **Security:** test authZ (role không quyền → 403), input injection, PII không lộ, session/timeout, rate limit.
22
+ - **Accessibility:** axe-core/lighthouse qua Playwright; assert vi phạm = 0 ở mức WCAG mục tiêu.
23
+ - **Compatibility:** parametrize trình duyệt/thiết bị.
24
+ - Assert theo **ngưỡng pass** trong TC bằng `expect()`/`assert`; bọc bước `with step("…")` (`from utils.steps import step`, **KHÔNG Allure**); marker `@pytest.mark.{performance,security,accessibility}`.
25
+
26
+ ## Phase 1 — Clarify
27
+ Đọc `.Test.md` · loại + ngưỡng + công cụ · môi trường/tải mẫu · data đặc biệt.
28
+
29
+ ## Phase 2 — Generate
30
+ Mỗi TC → 1 test đo + assert ngưỡng; đánh dấu test cần môi trường/tải riêng (`@pytest.mark.slow`).
31
+
32
+ ## Phase 3 — Verify
33
+ `py_compile` + collect · chạy (môi trường phù hợp) · cập nhật Status TC + số đo thực tế.
34
+
35
+ ## Output
36
+ Script `tests/<project>/non_functional/test_<feature>.py` + helper đo/scan. Bàn giao `qa-reviewer`.
37
+
38
+ ## Phase 4 — Report (bắt buộc sau khi chạy test)
39
+ Report = **Playwright Trace viewer + pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết).
40
+
41
+ 1. Chạy test kèm pytest-html (trace đã bật sẵn ở conftest → mỗi test có `test-results/<nodeid>/trace.zip`):
42
+ ```bash
43
+ pytest tests/<project>/non_functional/test_<feature>.py --html=reports/<feature>/report.html --self-contained-html
44
+ ```
45
+ 2. Gửi cho người dùng:
46
+ - HTML report: `reports/<feature>/report.html` (self-contained, mở trực tiếp) + số đo thực tế.
47
+ - Trace từng test (debug step-by-step): `python3 -m playwright show-trace test-results/<nodeid>/trace.zip`.
48
+ - Tóm tắt: **TOTAL / PASS / FAIL / SKIP** + duration.
49
+ 3. TC Fail → mở trace tương ứng để xem timeline/DOM snapshot/network, phân loại script-bug vs product-gap; ghi mô tả lỗi tiếng Việt dễ hiểu + số đo vào Status/khối kết quả của `.Test.md`.
@@ -0,0 +1,37 @@
1
+ ---
2
+ version: 1.1
3
+ updated: 2026-06-11
4
+ ported_from: ai-automation-qc-base
5
+ ---
6
+
7
+ # Report — Playwright Trace + pytest-html (stack chuẩn)
8
+
9
+ Skill **tự chứa**: sinh report sau khi chạy test. Stack chuẩn dự án dùng **Playwright
10
+ Trace viewer** + **pytest-html** (KHÔNG Allure, KHÔNG dashboard tự viết). Chỉ cần load file này.
11
+
12
+ ## Khi nào trigger
13
+ - Sau khi chạy test cần xuất report / xem lại bằng chứng (trace, screenshot).
14
+
15
+ ## Cơ chế (đã dựng sẵn ở tests/conftest.py)
16
+ - **Trace viewer**: fixture `context` (root conftest) gọi `context.tracing.start(screenshots=True, snapshots=True, sources=True)`; teardown lưu `test-results/<nodeid>/trace.zip`.
17
+ - Xem: `python3 -m playwright show-trace test-results/<...>/trace.zip` → timeline + DOM snapshot + network + console (UI giống Playwright report bản JS).
18
+ - **pytest-html**: 1 file HTML self-contained. Hook `pytest_runtest_makereport` (root conftest) đính screenshot full-page khi FAIL/SKIP.
19
+ - Mặc định `reports/report.html` (pytest.ini). Theo feature: `--html=reports/<feature>/report.html --self-contained-html`.
20
+
21
+ ## Quy trình
22
+ 1. Chạy test với report theo feature:
23
+ ```
24
+ python3 -m pytest tests/<project>/<file>.py \
25
+ --html=reports/<feature>/report.html --self-contained-html
26
+ ```
27
+ (Trace tự bật trong conftest → test-results/<nodeid>/trace.zip cho mọi test.)
28
+ 2. Báo path:
29
+ - HTML: `reports/<feature>/report.html` (on WSL, the Windows-accessible path is `\\wsl.localhost\<distro>\<repo-path>\reports\<feature>\report.html`).
30
+ - Trace TC fail: `test-results/<nodeid>/trace.zip` + lệnh `playwright show-trace`.
31
+ - Tóm tắt TOTAL / PASS / FAIL / SKIP + duration.
32
+
33
+ ## Nguyên tắc
34
+ - KHÔNG dùng Allure, KHÔNG sinh dashboard HTML tự viết (đã bỏ utils/html_report.py & cộng sự).
35
+ - Evidence trung thực: trace + screenshot phản ánh đúng lần run; FAIL/gap giữ nguyên.
36
+ - `reports/` và `test-results/` đã gitignore (artifact nặng) — không commit.
37
+ - Interpreter `python3`; browser = the system/installed Chromium configured via `browser_type_launch_args` in the root conftest (see the qc-playwright module) — do not hard-code a binary path.
@@ -0,0 +1,216 @@
1
+ ---
2
+ description: Sets up the Spec-Driven Development framework in any backend project from scratch. Trigger when: "/setup-ai-first", "setup spec-driven workflow", "initialize ai-first framework", "cài đặt framework", "khởi tạo spec-driven", "set up this workflow", "how do I start using this framework".
3
+ ---
4
+
5
+ # /setup-ai-first — Initialize Spec-Driven Docs in a Project
6
+
7
+ Walk the user through a one-time setup that creates all required directories, installs CLAUDE.md, and verifies the environment.
8
+
9
+ ## Precondition Check
10
+
11
+ First, ask: "Bạn đang ở project nào? Cho tôi đường dẫn root của project."
12
+
13
+ Check if already set up:
14
+ - If `.claude/commands/` exists with `.md` files → report "Already set up. Run `/validate-traces` to check status."
15
+ - If `specs/` exists → offer to re-initialize or skip
16
+
17
+ ## Step 1 — Create Directory Structure
18
+
19
+ Create the following directories (skip if already exist):
20
+
21
+ ```
22
+ {project-root}/
23
+ ├── specs/
24
+ │ ├── product-definition/ # Output of /define-product
25
+ │ └── domain-knowledge/ # Business dictionary + core entities
26
+ ├── .trace/ # Traceability state (.trace/{domain}/{prd-slug}/{UC-ID}.tsv)
27
+ └── .agent/
28
+ └── review/ # Output of /refine-prd ({prd-slug}-findings.yaml)
29
+ ```
30
+
31
+ **Feature-package layout** — per-feature artifacts are NOT pre-created here; each command
32
+ creates its own folder on demand under `specs/{domain}/{prd-slug}/`:
33
+
34
+ ```
35
+ specs/{domain}/{prd-slug}/
36
+ ├── prd.md # /generate-prd
37
+ ├── bdd/ # /generate-bdd (.feature files)
38
+ ├── tech-docs/ # /generate-tech-docs
39
+ └── design-spec/ # /generate-design-spec (FE/App only)
40
+ ```
41
+
42
+ Report each directory created or already existing.
43
+
44
+ ## Step 2 — Copy Slash Commands
45
+
46
+ Tell the user:
47
+
48
+ > "Framework này đã cài slash commands vào Claude tự động qua skill system.
49
+ > Nếu bạn muốn dùng commands trực tiếp trong Claude Code project (`.claude/commands/`), chạy lệnh sau:"
50
+
51
+ ```bash
52
+ # Copy all commands from plugin to project
53
+ mkdir -p {project-root}/.claude/commands
54
+ cp {plugin-dir}/commands/*.md {project-root}/.claude/commands/
55
+ ```
56
+
57
+ Note: The `.claude/commands/` copies are optional. Skills in this framework work without them.
58
+
59
+ ## Step 3 — Create CLAUDE.md
60
+
61
+ Check if `{project-root}/CLAUDE.md` exists:
62
+ - If yes: ask "CLAUDE.md đã tồn tại. Merge template vào hay bỏ qua?"
63
+ - If no: create from template in `templates/architecture.template.md`
64
+
65
+ After creating, instruct:
66
+ > "Mở CLAUDE.md và điền vào các placeholder `{{...}}` với thông tin dự án của bạn.
67
+ > Đặc biệt quan trọng: §1 (project overview) và §3 (coding standards)."
68
+
69
+ ## Step 4 — Create project-context.yaml
70
+
71
+ Create `{project-root}/.agent/project-context.yaml`:
72
+
73
+ ```yaml
74
+ # Project context for AI-First workflow
75
+ # Fill in all fields before starting
76
+
77
+ project:
78
+ name: "{{PROJECT_NAME}}"
79
+ description: "{{ONE_LINE_DESCRIPTION}}"
80
+
81
+ tech_stack:
82
+ language: "{{LANGUAGE}}" # e.g. Java 21, Python 3.12, Node.js 20
83
+ framework: "{{FRAMEWORK}}" # e.g. Spring Boot 3.x, FastAPI, NestJS
84
+ build_tool: "{{BUILD_TOOL}}" # e.g. Gradle, Maven, npm
85
+ test_framework: "{{TEST_FW}}" # e.g. JUnit 5, pytest, Jest
86
+ orm: "{{ORM}}" # e.g. Hibernate/JPA, SQLAlchemy, Prisma
87
+ database: "{{DATABASE}}" # e.g. PostgreSQL, MySQL, MongoDB
88
+
89
+ conventions:
90
+ build_command: "{{BUILD_COMMAND}}" # e.g. ./gradlew build -x test
91
+ test_command: "{{TEST_COMMAND}}" # e.g. ./gradlew test
92
+ service_run: "{{RUN_COMMAND}}" # e.g. ./gradlew bootRun
93
+ ticket_prefix: "{{TICKET_PREFIX}}" # e.g. PROJ, FEAT, PD
94
+
95
+ domains: [] # List your business domains, e.g. [rental, payment, user]
96
+ ```
97
+
98
+ ## Step 5 — Verify Setup
99
+
100
+ Run a quick check:
101
+ - [ ] `specs/` directory exists
102
+ - [ ] `.trace/` directory exists
103
+ - [ ] `.agent/project-context.yaml` exists
104
+ - [ ] `CLAUDE.md` exists
105
+
106
+ Report:
107
+ ```
108
+ /setup-ai-first Complete ✅
109
+
110
+ Directories created: {N}
111
+ Files created:
112
+ ✅ CLAUDE.md (needs customization)
113
+ ✅ .agent/project-context.yaml (needs customization)
114
+ ```
115
+
116
+ # Report Footer — Standard Command Output Format
117
+
118
+ Every command report must end with this standard footer section.
119
+
120
+ ## Status Badge
121
+
122
+ Choose one based on outcome:
123
+ - `✅ Complete` — all steps succeeded, no issues found
124
+ - `❌ Failed` — command could not complete due to a blocking error
125
+ - `⚠️ Warnings` — completed with non-blocking issues that should be reviewed
126
+
127
+ ## Output Artifacts
128
+
129
+ List every file created or modified by this command:
130
+ ```
131
+ Output Artifacts:
132
+ {created|updated} {file-path} ({brief description})
133
+ {created|updated} {file-path} ({brief description})
134
+ ```
135
+
136
+ If no files were written (e.g., review or analysis commands) → write `Output Artifacts: none (read-only)`.
137
+
138
+ ## Pipeline Position
139
+
140
+ Print a one-line map of the pipeline with the CURRENT command's phase marked `◀ bạn ở đây`,
141
+ so the user always sees where this command sits in the end-to-end flow:
142
+
143
+ ```
144
+ Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
145
+ ```
146
+
147
+ Find the current command in this phase legend and mark **its** phase in the map above:
148
+
149
+ | Phase | Commands |
150
+ |-------|----------|
151
+ | Discovery | `/define-product` |
152
+ | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
153
+ | Design Spec | `/generate-design-spec` |
154
+ | BDD | `/generate-bdd` · `/review-context` (BDD) |
155
+ | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
156
+ | Code | `/generate-code` · `/review-code` |
157
+ | Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
158
+ | QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
159
+ | Trace Audit | `/validate-traces` |
160
+
161
+ For a **review command**, also append the 3-step review loop with the current step marked, e.g.:
162
+ `Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
163
+
164
+ **Cross-cutting commands** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
165
+ `/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) sit outside the linear pipeline —
166
+ **omit the Pipeline line entirely** for these (do not force-fit them onto the map).
167
+
168
+ ## Next Command Suggestion
169
+
170
+ Suggest the logical next command based on workflow phase:
171
+
172
+ | Current command | Suggest next |
173
+ |-------------------------|-----------------------------------------------|
174
+ | /setup-ai-first | `/define-product` to start your first feature |
175
+ | /define-product | `/generate-prd {product-definition-file}` |
176
+ | /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
177
+ | /refine-prd | Open Review Board → update PRD → `/review-context {prd-file}` |
178
+ | /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (then BDD after sign-off); BE: `/generate-bdd {prd-file}` directly; fix PRD if NEEDS_FIX |
179
+ | /generate-design-spec | Designer review → Figma links confirmed → PO + Designer sign-off → `/generate-bdd {prd-file}` |
180
+ | /generate-bdd | `/review-context {feature-file}` to verify coverage |
181
+ | /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
182
+ | /qc-analyze | `/qc-plan {UC-ID}` (resolve 🔴 blocker gaps first) |
183
+ | /qc-plan | `/qc-design-test {UC-ID}` |
184
+ | /qc-design-test | `/qc-review {UC-ID}` (test-case review) |
185
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` if APPROVED; fix TCs if NEEDS_FIX |
186
+ | /qc-run-test | `/qc-report {UC-ID}` then `/qc-review {UC-ID}` (script review) |
187
+ | /qc-review (script) | `/qc-report {UC-ID}` then create PR if APPROVED |
188
+ | /qc-report | `/validate-traces {UC-ID}` to refresh Living Docs (qc_status) |
189
+ | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
190
+ | /review-tech-docs | `/generate-code {feature-file}` if APPROVED; fix doc if NEEDS_FIX |
191
+ | /generate-code | First gen → `/review-code {UC-ID}`; re-gen → `/dev-gen-test {UC-ID}` |
192
+ | /dev-gen-test | `/dev-run-test {UC-ID}` |
193
+ | /dev-run-test (passing) | `/review-code {UC-ID}` |
194
+ | /dev-run-test (failing) | `/fix-bug {ticket-id}` or `/debug {error}` |
195
+ | /review-code | `/dev-smoke-test {UC-ID}` or create PR |
196
+ | /dev-smoke-test | Create PR and link to ticket |
197
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; all OK → create PR |
198
+ | /fix-bug | Create PR and link to ticket |
199
+ | /debug | `/fix-bug {ticket-id}` if fix needed |
200
+ | /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap → `/propose-scenario {UC-ID}` |
201
+ | /propose-scenario | Notify PO/Dev to review the proposal in `feedback/bdd-proposals/` |
202
+ | /learn | Continue working — lesson applies on next command |
203
+ | /sync | `/validate-traces` for full coverage; act on any `📥 tester feedback` surfaced |
204
+ | /update-framework | Review `git diff .agent/`, commit; `/sync` for project content |
205
+
206
+ Format the footer as:
207
+ ```
208
+ ---
209
+ Status : {badge}
210
+ {Output Artifacts block}
211
+ Pipeline : Discovery → PRD → [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
212
+ (review cmd) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
213
+ Next : {suggested command with example arguments}
214
+ ```
215
+ *(Omit the `Pipeline` line for cross-cutting commands listed above.)*
216
+