@educa-corp/sdd-framework 0.1.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 (382) hide show
  1. package/bin/build.js +230 -0
  2. package/bin/index.js +609 -0
  3. package/commands/debug.md +835 -0
  4. package/commands/debug.tmpl +257 -0
  5. package/commands/define-product.md +746 -0
  6. package/commands/define-product.tmpl +191 -0
  7. package/commands/dev-gen-test.md +1015 -0
  8. package/commands/dev-gen-test.tmpl +490 -0
  9. package/commands/dev-run-test.md +749 -0
  10. package/commands/dev-run-test.tmpl +224 -0
  11. package/commands/dev-smoke-test.md +716 -0
  12. package/commands/dev-smoke-test.tmpl +217 -0
  13. package/commands/fix-bug.md +749 -0
  14. package/commands/fix-bug.tmpl +171 -0
  15. package/commands/generate-bdd.md +1144 -0
  16. package/commands/generate-bdd.tmpl +499 -0
  17. package/commands/generate-code.md +1038 -0
  18. package/commands/generate-code.tmpl +513 -0
  19. package/commands/generate-design-spec.md +1079 -0
  20. package/commands/generate-design-spec.tmpl +524 -0
  21. package/commands/generate-prd.md +945 -0
  22. package/commands/generate-prd.tmpl +166 -0
  23. package/commands/generate-spec-manifest.md +663 -0
  24. package/commands/generate-spec-manifest.tmpl +164 -0
  25. package/commands/generate-tech-docs.md +1249 -0
  26. package/commands/generate-tech-docs.tmpl +252 -0
  27. package/commands/learn.md +641 -0
  28. package/commands/learn.tmpl +63 -0
  29. package/commands/map-testids.md +580 -0
  30. package/commands/map-testids.tmpl +81 -0
  31. package/commands/propose-scenario.md +632 -0
  32. package/commands/propose-scenario.tmpl +133 -0
  33. package/commands/qc-analyze.md +611 -0
  34. package/commands/qc-analyze.tmpl +112 -0
  35. package/commands/qc-design-test.md +567 -0
  36. package/commands/qc-design-test.tmpl +68 -0
  37. package/commands/qc-plan.md +548 -0
  38. package/commands/qc-plan.tmpl +49 -0
  39. package/commands/qc-report.md +559 -0
  40. package/commands/qc-report.tmpl +60 -0
  41. package/commands/qc-review.md +552 -0
  42. package/commands/qc-review.tmpl +53 -0
  43. package/commands/qc-run-test.md +609 -0
  44. package/commands/qc-run-test.tmpl +84 -0
  45. package/commands/refine-prd.md +992 -0
  46. package/commands/refine-prd.tmpl +278 -0
  47. package/commands/report-bug.md +647 -0
  48. package/commands/report-bug.tmpl +148 -0
  49. package/commands/review-code.md +682 -0
  50. package/commands/review-code.tmpl +104 -0
  51. package/commands/review-context.md +1202 -0
  52. package/commands/review-context.tmpl +488 -0
  53. package/commands/review-tech-docs.md +871 -0
  54. package/commands/review-tech-docs.tmpl +372 -0
  55. package/commands/setup-ai-first.md +546 -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 +928 -0
  62. package/commands/validate-traces.tmpl +429 -0
  63. package/core/FRAMEWORK_VERSION +1 -0
  64. package/core/commands/debug.md +835 -0
  65. package/core/commands/define-product.md +746 -0
  66. package/core/commands/dev-gen-test.md +1015 -0
  67. package/core/commands/dev-run-test.md +749 -0
  68. package/core/commands/dev-smoke-test.md +716 -0
  69. package/core/commands/fix-bug.md +749 -0
  70. package/core/commands/generate-bdd.md +1144 -0
  71. package/core/commands/generate-code.md +1038 -0
  72. package/core/commands/generate-design-spec.md +1079 -0
  73. package/core/commands/generate-prd.md +945 -0
  74. package/core/commands/generate-spec-manifest.md +663 -0
  75. package/core/commands/generate-tech-docs.md +1249 -0
  76. package/core/commands/learn.md +641 -0
  77. package/core/commands/map-testids.md +580 -0
  78. package/core/commands/propose-scenario.md +632 -0
  79. package/core/commands/qc-analyze.md +611 -0
  80. package/core/commands/qc-design-test.md +567 -0
  81. package/core/commands/qc-plan.md +548 -0
  82. package/core/commands/qc-report.md +559 -0
  83. package/core/commands/qc-review.md +552 -0
  84. package/core/commands/qc-run-test.md +609 -0
  85. package/core/commands/refine-prd.md +992 -0
  86. package/core/commands/report-bug.md +647 -0
  87. package/core/commands/review-code.md +682 -0
  88. package/core/commands/review-context.md +1202 -0
  89. package/core/commands/review-tech-docs.md +871 -0
  90. package/core/commands/setup-ai-first.md +546 -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 +928 -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 +19 -0
  136. package/core/skills/debug/SKILL.md +19 -0
  137. package/core/skills/design-spec/SKILL.md +11 -0
  138. package/core/skills/discovery/SKILL.md +14 -0
  139. package/core/skills/prd/SKILL.md +19 -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 +11 -0
  176. package/core/skills/spec/SKILL.md +19 -0
  177. package/core/skills/test/SKILL.md +18 -0
  178. package/core/steps/business-language.md +56 -0
  179. package/core/steps/capture-lesson.md +79 -0
  180. package/core/steps/context-loader.md +311 -0
  181. package/core/steps/gate.md +88 -0
  182. package/core/steps/report-footer.md +100 -0
  183. package/core/steps/review-fanout.md +159 -0
  184. package/core/steps/spawn-agent.md +129 -0
  185. package/core/steps/trace-mirror.md +26 -0
  186. package/core/templates/architecture.template.md +113 -0
  187. package/core/templates/design-spec.template.md +217 -0
  188. package/core/templates/feature.template +120 -0
  189. package/core/templates/platform-guide.template.md +145 -0
  190. package/core/templates/prd.template.md +224 -0
  191. package/core/templates/product-definition.template.md +188 -0
  192. package/core/templates/project-context.yaml +161 -0
  193. package/core/templates/tech-design.template.md +498 -0
  194. package/docs/01-getting-started/README.md +19 -0
  195. package/docs/01-getting-started/core-concepts.md +102 -0
  196. package/docs/01-getting-started/installation.md +156 -0
  197. package/docs/01-getting-started/quickstart.md +86 -0
  198. package/docs/02-guides/README.md +26 -0
  199. package/docs/02-guides/bdd-input-checklist.md +68 -0
  200. package/docs/02-guides/developer/README.md +49 -0
  201. package/docs/02-guides/developer/bdd-and-trace.md +126 -0
  202. package/docs/02-guides/developer/commands.md +76 -0
  203. package/docs/02-guides/developer/pr-checklist.md +16 -0
  204. package/docs/02-guides/developer/scenarios.md +460 -0
  205. package/docs/02-guides/developer/workflow.md +121 -0
  206. package/docs/02-guides/prd-input-checklist.md +94 -0
  207. package/docs/02-guides/product-owner/README.md +81 -0
  208. package/docs/02-guides/product-owner/commands.md +30 -0
  209. package/docs/02-guides/product-owner/handoff-checklist.md +42 -0
  210. package/docs/02-guides/product-owner/prd-writing-rules.md +45 -0
  211. package/docs/02-guides/product-owner/scenarios.md +438 -0
  212. package/docs/02-guides/tech-docs-input-checklist.md +109 -0
  213. package/docs/02-guides/tester/README.md +75 -0
  214. package/docs/02-guides/tester/bug-reporting.md +117 -0
  215. package/docs/02-guides/tester/qc-automation.md +165 -0
  216. package/docs/02-guides/tester/reading-specs.md +79 -0
  217. package/docs/02-guides/tester/scenarios.md +186 -0
  218. package/docs/02-guides/tester/spec-manifest.md +130 -0
  219. package/docs/02-guides/tester/test-checklist.md +31 -0
  220. package/docs/02-guides/tester/workflow.md +77 -0
  221. package/docs/03-concepts/README.md +20 -0
  222. package/docs/03-concepts/architecture.md +248 -0
  223. package/docs/03-concepts/mechanisms-explained.md +124 -0
  224. package/docs/03-concepts/pipeline.md +278 -0
  225. package/docs/03-concepts/traceability.md +152 -0
  226. package/docs/04-operations/README.md +33 -0
  227. package/docs/04-operations/bug-flow.md +364 -0
  228. package/docs/04-operations/publishing.md +154 -0
  229. package/docs/04-operations/sync-and-update.md +522 -0
  230. package/docs/05-reference/README.md +34 -0
  231. package/docs/05-reference/command-cheatsheet.md +147 -0
  232. package/docs/05-reference/commands.md +234 -0
  233. package/docs/05-reference/model-selection.md +74 -0
  234. package/docs/05-reference/modules.md +110 -0
  235. package/docs/05-reference/trace-schema.md +154 -0
  236. package/docs/06-commands/README.md +75 -0
  237. package/docs/06-commands/explain-debug.md +32 -0
  238. package/docs/06-commands/explain-define-product.md +43 -0
  239. package/docs/06-commands/explain-dev-gen-test.md +28 -0
  240. package/docs/06-commands/explain-dev-run-test.md +24 -0
  241. package/docs/06-commands/explain-dev-smoke-test.md +25 -0
  242. package/docs/06-commands/explain-fix-bug.md +28 -0
  243. package/docs/06-commands/explain-generate-bdd.md +45 -0
  244. package/docs/06-commands/explain-generate-code.md +53 -0
  245. package/docs/06-commands/explain-generate-design-spec.md +54 -0
  246. package/docs/06-commands/explain-generate-prd.md +45 -0
  247. package/docs/06-commands/explain-generate-spec-manifest.md +20 -0
  248. package/docs/06-commands/explain-generate-tech-docs.md +56 -0
  249. package/docs/06-commands/explain-learn.md +21 -0
  250. package/docs/06-commands/explain-map-testids.md +28 -0
  251. package/docs/06-commands/explain-propose-scenario.md +24 -0
  252. package/docs/06-commands/explain-qc-analyze.md +22 -0
  253. package/docs/06-commands/explain-qc-design-test.md +20 -0
  254. package/docs/06-commands/explain-qc-plan.md +21 -0
  255. package/docs/06-commands/explain-qc-report.md +23 -0
  256. package/docs/06-commands/explain-qc-review.md +24 -0
  257. package/docs/06-commands/explain-qc-run-test.md +27 -0
  258. package/docs/06-commands/explain-refine-prd.md +51 -0
  259. package/docs/06-commands/explain-report-bug.md +24 -0
  260. package/docs/06-commands/explain-review-code.md +45 -0
  261. package/docs/06-commands/explain-review-context.md +68 -0
  262. package/docs/06-commands/explain-review-tech-docs.md +45 -0
  263. package/docs/06-commands/explain-setup-ai-first.md +25 -0
  264. package/docs/06-commands/explain-sync.md +24 -0
  265. package/docs/06-commands/explain-update-framework.md +22 -0
  266. package/docs/06-commands/explain-validate-traces.md +25 -0
  267. package/docs/README.md +53 -0
  268. package/docs/t-sample.md +826 -0
  269. package/hooks/data-guard.js +141 -0
  270. package/hooks/settings.json +18 -0
  271. package/modules/android-compose/module.yaml +13 -0
  272. package/modules/android-compose/stack-profile.yaml +57 -0
  273. package/modules/angular/architecture-snippets/component-patterns.md +187 -0
  274. package/modules/angular/module.yaml +6 -0
  275. package/modules/angular/stack-profile.yaml +38 -0
  276. package/modules/context-engineering/architecture-snippets/context-design.md +119 -0
  277. package/modules/context-engineering/module.yaml +9 -0
  278. package/modules/context-engineering/stack-profile.yaml +61 -0
  279. package/modules/dotnet/architecture-snippets/clean-arch.md +160 -0
  280. package/modules/dotnet/module.yaml +6 -0
  281. package/modules/dotnet/stack-profile.yaml +50 -0
  282. package/modules/flutter/module.yaml +14 -0
  283. package/modules/flutter/stack-profile.yaml +59 -0
  284. package/modules/golang/architecture-snippets/domain-layout.md +283 -0
  285. package/modules/golang/module.yaml +6 -0
  286. package/modules/golang/stack-profile.yaml +40 -0
  287. package/modules/ios-swiftui/module.yaml +13 -0
  288. package/modules/ios-swiftui/stack-profile.yaml +55 -0
  289. package/modules/java-spring/architecture-snippets/layered-arch.md +201 -0
  290. package/modules/java-spring/module.yaml +15 -0
  291. package/modules/java-spring/stack-profile.yaml +28 -0
  292. package/modules/nextjs/architecture-snippets/app-router-patterns.md +269 -0
  293. package/modules/nextjs/module.yaml +14 -0
  294. package/modules/nextjs/stack-profile.yaml +74 -0
  295. package/modules/nuxt/module.yaml +14 -0
  296. package/modules/nuxt/stack-profile.yaml +58 -0
  297. package/modules/php-laravel/architecture-snippets/service-repository.md +302 -0
  298. package/modules/php-laravel/module.yaml +15 -0
  299. package/modules/php-laravel/stack-profile.yaml +56 -0
  300. package/modules/qc-playwright/stack-profile.yaml +66 -0
  301. package/modules/react/architecture-snippets/hooks-query-patterns.md +254 -0
  302. package/modules/react/module.yaml +14 -0
  303. package/modules/react/stack-profile.yaml +63 -0
  304. package/modules/react-native/module.yaml +14 -0
  305. package/modules/react-native/stack-profile.yaml +56 -0
  306. package/modules/vue/module.yaml +14 -0
  307. package/modules/vue/stack-profile.yaml +65 -0
  308. package/package.json +49 -0
  309. package/readme.txt +1 -0
  310. package/rules/data-protection.md +80 -0
  311. package/rules/workflow.md +44 -0
  312. package/scripts/init.sh +49 -0
  313. package/scripts/migrate-specs.js +258 -0
  314. package/scripts/rename-prd-files.js +174 -0
  315. package/scripts/upgrade.sh +94 -0
  316. package/skills/code/SKILL.md +19 -0
  317. package/skills/code/SKILL.tmpl +19 -0
  318. package/skills/debug/SKILL.md +19 -0
  319. package/skills/debug/SKILL.tmpl +19 -0
  320. package/skills/design-spec/SKILL.md +11 -0
  321. package/skills/design-spec/SKILL.tmpl +11 -0
  322. package/skills/discovery/SKILL.md +14 -0
  323. package/skills/discovery/SKILL.tmpl +14 -0
  324. package/skills/prd/SKILL.md +19 -0
  325. package/skills/prd/SKILL.tmpl +19 -0
  326. package/skills/qc/qa-analyst/DOC_GAPS.template.md +63 -0
  327. package/skills/qc/qa-analyst/acceptance-criteria.md +60 -0
  328. package/skills/qc/qa-analyst/business-rules.md +59 -0
  329. package/skills/qc/qa-analyst/data-flow.md +64 -0
  330. package/skills/qc/qa-analyst/spec-breakdown.md +61 -0
  331. package/skills/qc/qa-designer/e2e/journey.md +41 -0
  332. package/skills/qc/qa-designer/exploratory/charter.md +68 -0
  333. package/skills/qc/qa-designer/exploratory/explore-to-functional.md +43 -0
  334. package/skills/qc/qa-designer/functional/api.md +45 -0
  335. package/skills/qc/qa-designer/functional/gui-feature.md +46 -0
  336. package/skills/qc/qa-designer/functional/gui-screen.md +52 -0
  337. package/skills/qc/qa-designer/integration/api.md +42 -0
  338. package/skills/qc/qa-designer/integration/db.md +39 -0
  339. package/skills/qc/qa-designer/integration/gui.md +40 -0
  340. package/skills/qc/qa-designer/integration/kafka.md +40 -0
  341. package/skills/qc/qa-designer/non-functional.md +40 -0
  342. package/skills/qc/qa-planner/test-plan.md +120 -0
  343. package/skills/qc/qa-reviewer/script/e2e.md +87 -0
  344. package/skills/qc/qa-reviewer/script/exploratory.md +45 -0
  345. package/skills/qc/qa-reviewer/script/functional.md +101 -0
  346. package/skills/qc/qa-reviewer/script/integration.md +91 -0
  347. package/skills/qc/qa-reviewer/script/non-functional.md +126 -0
  348. package/skills/qc/qa-reviewer/test-case/e2e.md +73 -0
  349. package/skills/qc/qa-reviewer/test-case/exploratory.md +43 -0
  350. package/skills/qc/qa-reviewer/test-case/functional.md +76 -0
  351. package/skills/qc/qa-reviewer/test-case/integration.md +69 -0
  352. package/skills/qc/qa-reviewer/test-case/non-functional.md +73 -0
  353. package/skills/qc/qa-runner/e2e.md +49 -0
  354. package/skills/qc/qa-runner/exploratory/session.md +36 -0
  355. package/skills/qc/qa-runner/functional/api.md +35 -0
  356. package/skills/qc/qa-runner/functional/gui-feature.md +51 -0
  357. package/skills/qc/qa-runner/functional/gui-screen.md +55 -0
  358. package/skills/qc/qa-runner/integration.md +47 -0
  359. package/skills/qc/qa-runner/non-functional.md +49 -0
  360. package/skills/qc/qa-runner/report/report.md +37 -0
  361. package/skills/setup-ai-first/SKILL.md +11 -0
  362. package/skills/setup-ai-first/SKILL.tmpl +11 -0
  363. package/skills/spec/SKILL.md +19 -0
  364. package/skills/spec/SKILL.tmpl +19 -0
  365. package/skills/test/SKILL.md +18 -0
  366. package/skills/test/SKILL.tmpl +18 -0
  367. package/steps/business-language.md +56 -0
  368. package/steps/capture-lesson.md +79 -0
  369. package/steps/context-loader.md +311 -0
  370. package/steps/gate.md +88 -0
  371. package/steps/report-footer.md +100 -0
  372. package/steps/review-fanout.md +159 -0
  373. package/steps/spawn-agent.md +129 -0
  374. package/steps/trace-mirror.md +26 -0
  375. package/templates/architecture.template.md +113 -0
  376. package/templates/design-spec.template.md +217 -0
  377. package/templates/feature.template +120 -0
  378. package/templates/platform-guide.template.md +145 -0
  379. package/templates/prd.template.md +224 -0
  380. package/templates/product-definition.template.md +188 -0
  381. package/templates/project-context.yaml +161 -0
  382. package/templates/tech-design.template.md +498 -0
@@ -0,0 +1,546 @@
1
+ # /setup-ai-first — Khởi tạo SDD Framework trong một dự án
2
+
3
+ Dẫn người dùng qua một setup một-lần tạo mọi thư mục cần thiết, cài CLAUDE.md, và verify môi trường.
4
+
5
+ ## Gate
6
+ # Gate — Quy trình vào chuẩn cho mọi lệnh
7
+
8
+ Mọi lệnh PHẢI chạy gate này trước khi thực thi phần logic riêng của nó.
9
+
10
+ ## Bước 0 — Kiểm tra chế độ Sub-Agent
11
+
12
+ Trước tiên, kiểm tra xem `$ARGUMENTS` có phải là payload JSON từ một orchestrator hay không:
13
+
14
+ 1. Thử parse `$ARGUMENTS` dưới dạng JSON.
15
+ 2. Nếu parse thành công **và** chứa `"_agent_mode": true`:
16
+ - **Bỏ qua hoàn toàn Bước 1, 2 và 3 của Gate này.**
17
+ - Đặt target file = `payload.target_file`
18
+ - Đặt loaded context = `payload.context` (KHÔNG chạy context-loader.md)
19
+ - Đặt phạm vi UC = `payload.uc_id` (chỉ xử lý UC này)
20
+ - Đặt line range = `payload.uc_section` (chỉ đọc đúng section đó của PRD)
21
+ - Đặt dimension = `payload.dimension` nếu có (lệnh review per-UC: chỉ review đúng lăng kính này)
22
+ - Đi thẳng tới phần logic riêng của lệnh.
23
+ 3. Nếu `$ARGUMENTS` không phải JSON hoặc không có `_agent_mode` → tiếp tục sang Bước 1 (chế độ thường).
24
+
25
+ ## Bước 0-B — Kiểm tra Model
26
+
27
+ *Bỏ qua bước này nếu `_agent_mode: true` (sub-agent — orchestrator đã kiểm tra rồi).*
28
+
29
+ Các lệnh sinh nội dung và review phức tạp đòi hỏi khả năng suy luận mạnh.
30
+ Dùng model nhỏ hơn sẽ rủi ro: bỏ sót edge case, phân tích spec thiếu sót, vi phạm kiến trúc.
31
+
32
+ Hiển thị và chờ phản hồi:
33
+
34
+ ```
35
+ ⚙️ MODEL CHECK
36
+ ──────────────────────────────────────────────────────────────────
37
+ Recommended : claude-opus-4 (hoặc model Opus mới nhất)
38
+ Why needed : Phân tích spec, review kiến trúc, sinh code đòi hỏi
39
+ suy luận sâu. Model nhỏ hơn dễ bỏ sót edge case.
40
+
41
+ Cách đổi trong Claude Code:
42
+ • Settings → Model → chọn "claude-opus"
43
+ • hoặc: /model → chọn claude-opus
44
+
45
+ Đang chạy claude-opus?
46
+ Y — đúng, đang dùng claude-opus → tiếp tục
47
+ S — bỏ qua kiểm tra (tôi chấp nhận rủi ro chất lượng thấp hơn với model hiện tại)
48
+ ──────────────────────────────────────────────────────────────────
49
+ ```
50
+
51
+ - "Y" → tiếp tục sang Bước 1.
52
+ - "S" → tiếp tục sang Bước 1 (người dùng chấp nhận rủi ro, thêm ⚠️ vào report cuối).
53
+ - "N" hoặc bất kỳ giá trị nào khác → **DỪNG.** Xuất: "Vui lòng chuyển sang claude-opus rồi chạy lại lệnh này."
54
+
55
+ ## Bước 1 — Xác định Target File
56
+
57
+ 1. Nếu `$ARGUMENTS` được cung cấp và trỏ tới một file tồn tại → dùng trực tiếp làm target.
58
+ 2. Nếu `$ARGUMENTS` là một **UC-ID / ticket ID / tên rút gọn** (không có path) → phân giải thành file bằng cách glob theo bố cục feature-package. `{prd-slug}` lúc này **chưa biết**, nên dùng wildcard `*` cho segment đó, và `**` đệ quy dưới `bdd/` để phủ hết các thư mục con theo platform (`bdd/web/`, `bdd/app/`, `bdd/system/`):
59
+ - **Lệnh BDD** (target là `.feature`): `{specs_dir}/{domain}/*/bdd/**/{UC-ID}*.feature` — hoặc `{specs_dir}/*/*/bdd/**/{UC-ID}*.feature` nếu domain cũng chưa biết. Nếu lệnh ngụ ý một platform/scope cụ thể (vd: system tech-doc cần BDD `system/`), ưu tiên kết quả trong thư mục con platform đó.
60
+ - **Lệnh PRD** (target là file PRD `{TICKET-ID}-{prd-slug}.md` — file `.md` duy nhất ở gốc feature folder, cạnh `bdd/`): `{specs_dir}/{domain}/*/{TICKET-ID}*.md` nếu biết TICKET-ID; nếu không, `{specs_dir}/{domain}/*/*.md` (khớp feature folder có id tương ứng), hoặc `{specs_dir}/*/*/*.md` nếu domain cũng chưa biết. *(Glob `*/*.md` ở cấp gốc folder chỉ khớp PRD — tech-docs/design-spec `.md` nằm sâu hơn trong thư mục con.)*
61
+ - **Lệnh tech-docs**: `{specs_dir}/{domain}/*/tech-docs/{UC-ID}*-tech-design*.md`.
62
+ - **Lệnh design-spec**: `{specs_dir}/{domain}/*/design-spec/{TICKET-ID}*.md`.
63
+
64
+ Khi một file khớp: đặt nó làm target **và** ghi lại `domain` + `prd_slug` từ path của nó (theo quy tắc trích xuất trong `context-loader.md` Bước 1 — `prd_slug` = segment đầu tiên sau `{specs_dir}/{domain}/`). Mọi path mà lệnh đọc/ghi về sau (BDD/tech-docs/design-spec/trace cùng cấp) đều dùng **`prd_slug` đã phân giải đó**, nên tất cả artifact nằm chung một feature package. Nếu nhiều file khớp (vd: nhiều platform), chọn theo platform/scope của lệnh hoặc liệt kê ra và hỏi.
65
+ 3. Nếu `$ARGUMENTS` rỗng hoặc không tìm thấy file khớp:
66
+ - Liệt kê các file trong thư mục liên quan của lệnh này (vd: `specs/*/*/*.md` — file PRD ở gốc mỗi feature folder — cho lệnh PRD, `specs/*/*/bdd/**/*.feature` cho lệnh BDD).
67
+ - Hiển thị danh sách cho người dùng và hỏi: "Bạn muốn làm việc với file nào? (Nhập số thứ tự hoặc tên file)"
68
+ - Chờ người dùng chọn rồi mới tiếp tục.
69
+
70
+ ## Bước 2 — Chạy Context Loader
71
+
72
+ Nạp toàn bộ context của dự án bằng cách làm theo quy trình trong `steps/context-loader.md`.
73
+ Lưu toàn bộ context đã nạp vào bộ nhớ để dùng xuyên suốt phiên làm việc của lệnh.
74
+
75
+ ## Bước 3 — CHECKPOINT
76
+
77
+ Sau khi hoàn thành Bước 1 và 2, hiển thị bản tóm tắt và chờ xác nhận:
78
+
79
+ ```
80
+ CHECKPOINT
81
+ -----------
82
+ Target : {resolved file path}
83
+ Project : {project.name từ project-context.yaml}
84
+ Tech stack : {language} / {framework}
85
+ Module : {module nếu có, else "not configured"}
86
+ Domains : {danh sách domain, ngăn cách bởi dấu phẩy}
87
+
88
+ Tiếp tục? (Y/N)
89
+ ```
90
+
91
+ Chờ người dùng trả lời rõ ràng "Y" hoặc "N" rồi mới tiếp tục.
92
+ - "Y" → tiếp tục sang các bước riêng của lệnh bên dưới.
93
+ - "N" → dừng lại và hỏi người dùng muốn thay đổi gì.
94
+
95
+
96
+ *Lưu ý: Với lệnh này — **bỏ qua Gate Step 1, 2, và 3** (chưa có file input và chưa có project context). Chỉ chạy Step 0-B (model check). Project root là **thư mục làm việc hiện tại**. Đi thẳng tới Precondition Check bên dưới.*
97
+
98
+ ---
99
+
100
+ ## Precondition Check
101
+
102
+ Kiểm tra đã setup chưa:
103
+ - Nếu cả `CLAUDE.md` **và** `.agent/project-context.yaml` đều tồn tại → hỏi: "Dự án này đã được khởi tạo. Chạy lại setup để regenerate file config? (Y/N)"
104
+ - N → dừng
105
+ - Y → tiếp tục (file có sẵn được giữ — mỗi bước sẽ đề nghị merge/skip)
106
+ - Nếu chỉ có `specs/` hoặc phát hiện setup một phần → tiếp tục bình thường (an toàn chạy lại)
107
+
108
+ ## Step 0.5 — Loại dự án
109
+
110
+ Hỏi người dùng:
111
+
112
+ ```
113
+ Dự án này thuộc loại nào?
114
+ 1. Single-service — một codebase, một platform (setup chuẩn)
115
+ 2. Umbrella repo — repo này chứa nhiều service submodule (microservices / multi-app)
116
+ 3. PO Spec repo — chỉ docs, không có code chạy được (chỉ PRD + design-spec)
117
+ ```
118
+
119
+ Lưu câu trả lời thành `project_type`. Mặc định `1` nếu user không trả lời.
120
+
121
+ Dựa trên câu trả lời:
122
+
123
+ **project_type = 1 (Single-service):** Tiếp tục setup chuẩn bên dưới.
124
+
125
+ **project_type = 2 (Umbrella):** Hỏi hai câu follow-up:
126
+ - "Path tới spec submodule (vd `free-trial-specs`)? Nhấn Enter để skip."
127
+ - "Liệt kê các service dạng cặp `domain:module`, ngăn cách bởi dấu phẩy
128
+ (vd `user:java-spring,order:java-spring`). Nhấn Enter để skip."
129
+
130
+ Rồi:
131
+ - Skip tạo bất kỳ artifact `specs/` nào (mọi spec — PRD, BDD, tech-docs, design-spec — sống trong spec submodule theo bố cục feature-package `specs/{domain}/{prd-slug}/`)
132
+ - Chỉ tạo: `.trace/`, `.agent/review/` ở cấp umbrella
133
+ *(Trừ khi user yêu cầu rõ tạo cấu trúc đầy đủ)*
134
+ - Sinh `.agent/project-context.yaml` ở umbrella mode với services và spec_source đã cung cấp
135
+ - Skip tạo `CLAUDE.md` (umbrella không có một tech stack đơn)
136
+ - Sau setup, nhắc: "Mở từng service submodule riêng trong Claude Code để cài framework ở đó nếu cần."
137
+
138
+ **project_type = 3 (PO Spec repo):**
139
+ - Tạo base dir: `specs/product-definition/`, `specs/domain-knowledge/`, `feedback/`, `.agent/review/`
140
+ - Artifact theo từng feature (`specs/{domain}/{prd-slug}/{ {TICKET-ID}-{prd-slug}.md, bdd/, tech-docs/, design-spec/}`) được tạo on demand bởi các lệnh generate — ĐỪNG tạo trước
141
+ - Skip: `.trace/` (theo service, sống cạnh code trong mỗi service submodule)
142
+ - Sinh `CLAUDE.md` tối thiểu chỉ với §1 (project overview) và §7 (git conventions)
143
+ - Hỏi người dùng: **"Liệt kê các business domain của bạn (vd auth, payment, loyalty):"** — lưu thành domain list cho `project-context.yaml` và nhắc PO các tên này phải được dùng nhất quán ở row `| **Domain** |` của bảng Metadata trong mọi PRD
144
+ - Thông báo:
145
+ - Lệnh cho PO repo: `/define-product`, `/generate-prd`, `/review-context`, `/generate-design-spec`
146
+ - **Quan trọng cho handoff team dev:** Mọi PRD phải có row `| **Domain** | {domain} |` trong **bảng Metadata**. Team dev dùng nó để route BDD/code sinh ra tới đúng service submodule. Tên domain không nhất quán sẽ phá routing.
147
+ - Bảng Metadata PRD (do `/generate-prd` điền sẵn theo template):
148
+ ```
149
+ | **Domain** | {domain} | ← phải khớp một key trong services config của team dev
150
+ | **Ticket** | {TICKET-ID} |
151
+ | **Status** | draft | approved |
152
+ ```
153
+
154
+ ## Step 1 — Tạo cấu trúc thư mục
155
+
156
+ Tạo các thư mục này (skip nếu đã tồn tại):
157
+
158
+ ```
159
+ {project-root}/
160
+ ├── specs/
161
+ │ ├── product-definition/ ← Output của /define-product
162
+ │ └── domain-knowledge/ ← business dictionary & domain context
163
+ ├── .trace/ ← .trace/{domain}/{prd-slug}/{UC-ID}-{platform}.tsv
164
+ └── .agent/
165
+ └── review/
166
+ ```
167
+
168
+ **Bố cục feature-package** — artifact spec theo từng feature KHÔNG được tạo trước. Mỗi lệnh generate
169
+ tự tạo folder của nó on demand dưới `specs/{domain}/{prd-slug}/`:
170
+
171
+ ```
172
+ specs/{domain}/{prd-slug}/
173
+ ├── {TICKET-ID}-{prd-slug}.md ← /generate-prd (vd SEG01-segment-scoring-service.md)
174
+ ├── bdd/ ← /generate-bdd (file .feature)
175
+ ├── tech-docs/ ← /generate-tech-docs
176
+ └── design-spec/ ← /generate-design-spec (chỉ platform FE/App)
177
+ ```
178
+
179
+ *Tạo base dir nào tuỳ theo `project_type` set ở Step 0.5:*
180
+
181
+ | project_type | Tạo | Skip |
182
+ |---|---|---|
183
+ | **1 — Single-service** | Cấu trúc base ở trên (`specs/product-definition/`, `specs/domain-knowledge/`, `.trace/`, `.agent/review/`) | folder theo feature (tạo on demand) |
184
+ | **2 — Umbrella** | Chỉ `.trace/` + `.agent/review/` (ở umbrella root) | Mọi thứ khác — **toàn bộ spec sống trong spec submodule (`spec_source`)** dưới `specs/{domain}/{prd-slug}/`; service submodule chỉ chứa **code + `.trace/`** |
185
+ | **3 — PO Spec repo** | `specs/product-definition/`, `specs/domain-knowledge/`, **`feedback/`**, `.agent/review/` (folder `specs/{domain}/{prd-slug}/` theo feature tạo on demand) | `.trace/` (theo service, sống cạnh code trong mỗi service submodule) |
186
+
187
+ ## Step 2 — Tạo CLAUDE.md
188
+
189
+ *Bỏ qua hoàn toàn step này nếu `project_type = 2` (Umbrella) — umbrella không có một tech stack đơn.*
190
+ *Với `project_type = 3` (PO Spec repo) — tạo CLAUDE.md tối thiểu chỉ với §1 (project overview) và §7 (git conventions). Skip §2–§6.*
191
+
192
+ Kiểm tra `CLAUDE.md` tồn tại chưa:
193
+ - Có → hỏi "Merge template hay skip?"
194
+ - Không → tạo từ template bên dưới
195
+
196
+ Sau khi tạo, hướng dẫn: "Mở CLAUDE.md và điền các giá trị `{{PLACEHOLDER}}` bằng thông tin dự án của bạn."
197
+
198
+ ### CLAUDE.md Template
199
+
200
+ ```
201
+ # §1. Project Overview
202
+ Project: {{PROJECT_NAME}}
203
+ Language: {{LANGUAGE}}
204
+ Framework: {{FRAMEWORK}}
205
+ Build: {{BUILD_COMMAND}}
206
+ Test: {{TEST_COMMAND}}
207
+ Domains: {{COMMA_SEPARATED_DOMAINS}}
208
+
209
+ # §2. Architecture
210
+ layers: "{{LAYER_STACK}}"
211
+ # Example: Controller → Facade → Service → Repository
212
+ rules:
213
+ - "Controllers must not contain business logic"
214
+ - "Services own transaction boundaries"
215
+
216
+ # §3. Coding Standards
217
+ naming:
218
+ classes: "{{NAMING_CONVENTION}}"
219
+ methods: "{{METHOD_CONVENTION}}"
220
+ response_wrapper: "{{WRAPPER}}"
221
+ forbidden:
222
+ - "Magic numbers"
223
+ - "Debug print statements"
224
+
225
+ # §4. Traceability
226
+ # Every controller method must be tagged:
227
+ # @trace.implements={UC-ID}-{SC-ID}
228
+ # @trace.source=specs/{domain}/{prd-slug}/bdd/{UC-ID}.feature ← adjust if specs_dir differs in .agent/project-context.yaml
229
+ # Tests must be tagged:
230
+ # @trace.verifies={UC-ID}
231
+
232
+ # §5. Error Handling
233
+ not_found: "{{NOT_FOUND_EXCEPTION}}"
234
+ http_codes: { get: 200, create: 201, not_found: 404, validation: 400 }
235
+
236
+ # §6. Build & Test
237
+ build_command: "{{BUILD_COMMAND}}"
238
+ test_command: "{{TEST_COMMAND}}"
239
+ run_command: "{{RUN_COMMAND}}"
240
+
241
+ # §7. Git Conventions
242
+ branch_feature: "feature/{{TICKET_PREFIX}}-{N}-{slug}"
243
+ commit_feature: "feat({{TICKET_PREFIX}}-{N}): {description}"
244
+ ```
245
+
246
+ ## Step 3 — Tạo project-context.yaml
247
+
248
+ *Với `project_type = 2` (Umbrella):*
249
+ - *Nếu `.agent/project-context.yaml` đã được sinh bởi `--init --umbrella` → mở nó và verify/sửa section `services` (domain key, path, module). Skip copy template bên dưới.*
250
+ - *Nếu chưa sinh → hỏi: "Path spec submodule?" và "Services (cặp domain:module)?" rồi sinh config umbrella (xem Step 0.5 cho format).*
251
+
252
+ Tạo `.agent/project-context.yaml` dùng `.agent/templates/project-context.yaml` làm template nguồn.
253
+
254
+ Copy template và hướng dẫn: "Mở `.agent/project-context.yaml` và điền mọi giá trị `{{PLACEHOLDER}}`. Section `paths` đã được cấu hình sẵn với default hợp lý — chỉnh nếu dự án dùng tên thư mục khác."
255
+
256
+ ## Step 4 — Tạo business-dictionary.md
257
+
258
+ *Skip Step 4 và 5 nếu `project_type = 2` (Umbrella) — business dictionary và core entities sống trong spec submodule và do team PO quản lý. Team dev đọc chúng từ `{spec_source}/specs/domain-knowledge/`.*
259
+
260
+
261
+ Tạo `specs/domain-knowledge/business-dictionary.md` nếu chưa tồn tại:
262
+
263
+ ```markdown
264
+ # Business Dictionary — {{PROJECT_NAME}}
265
+
266
+ > Thuật ngữ chuẩn cho dự án này. Mọi PRD, BDD spec, và code phải theo các thuật ngữ này.
267
+ > Managed by: PO / SA team.
268
+
269
+ ## Canonical Terms
270
+
271
+ | Canonical Term | Description / Context |
272
+ |----------------|----------------------|
273
+ | {Term} | {Short description, usage scope} |
274
+
275
+ ## Banned Terms
276
+
277
+ | ❌ Do NOT use | ✅ Use instead | Reason |
278
+ |---------------|-------------------|--------|
279
+ | {banned} | {canonical} | {why} |
280
+
281
+ ## Status / Enum Registry
282
+
283
+ | Entity | Field | Allowed Values |
284
+ |--------|---------|--------------------|
285
+ | {Entity} | status | {value1, value2} |
286
+ ```
287
+
288
+ Hướng dẫn: "Mở `specs/domain-knowledge/business-dictionary.md` và thêm thuật ngữ dự án của bạn. File này sẽ được mọi lệnh đọc để enforce naming nhất quán."
289
+
290
+ ## Step 5 — Tạo core-entities.md
291
+
292
+ Tạo `specs/domain-knowledge/core-entities.md` nếu chưa tồn tại:
293
+
294
+ ```markdown
295
+ # Core Entities — {{PROJECT_NAME}}
296
+
297
+ > Glossary entity máy-đọc-được cho phát triển có AI hỗ trợ.
298
+ > Được mọi lệnh nạp để AI biết domain model của bạn mà không cần đọc source code.
299
+ > Managed by: Tech Lead / Architect.
300
+ >
301
+ > HOW TO USE:
302
+ > - Add one `## Entity: {Name}` section per domain entity (aggregate root, value object, etc.)
303
+ > - Keep field descriptions concise — this is a REFERENCE, not API docs
304
+ > - Update this file whenever you add/rename fields or change business invariants
305
+
306
+ ---
307
+
308
+ ## Entity: {EntityName}
309
+
310
+ **Purpose**: {1-2 sentences — what this entity represents and why it exists in the domain}
311
+ **Domain**: {domain}
312
+ **Storage**: {e.g., `orders` table in PostgreSQL | `orders` collection in MongoDB}
313
+ **Owner service**: {service/module that owns this entity}
314
+
315
+ | Field | Type | Nullable | Description |
316
+ |--------------|---------|----------|-------------------------------------|
317
+ | id | UUID | No | Primary key |
318
+ | {field_name} | {type} | Yes/No | {short description} |
319
+ | status | Enum | No | See Status Registry in business-dictionary.md |
320
+
321
+ **Business invariants:**
322
+ - {Rule 1: e.g., "status can only transition: PENDING → ACTIVE → CLOSED"}
323
+ - {Rule 2: e.g., "total must equal sum of line items"}
324
+
325
+ **Relationships:**
326
+ - `{EntityA}` 1:N `{EntityB}` — {one sentence description}
327
+ - `{EntityA}` N:N `{EntityC}` via `{junction_table}` — {description}
328
+
329
+ ---
330
+
331
+ ## Entity: {AnotherEntity}
332
+
333
+ *(Add more entities following the same pattern above)*
334
+ ```
335
+
336
+ Hướng dẫn: "Mở `specs/domain-knowledge/core-entities.md` và định nghĩa các domain entity chính. Bắt đầu với aggregate root. File này được mọi lệnh AI nạp — định nghĩa tốt ở đây tiết kiệm đáng kể qua-lại khi sinh code."
337
+
338
+ ## Step 6 — Cài VS Code Extension (Khuyến nghị)
339
+
340
+ Khuyến nghị user cài extension VS Code **Spec Driven Docs Tools** — nó cung cấp panel Review Board + Living Documentation tích hợp với workflow này.
341
+
342
+ ```bash
343
+ code --install-extension SpecDrivenDocsTools.spec-driven-docs-tool
344
+ ```
345
+
346
+ Hoặc: VS Code → `Ctrl+Shift+P` → **"Extensions: Install from Marketplace"** → tìm **Spec Driven Docs Tools**.
347
+
348
+ **Nó làm gì:**
349
+ - 📋 **Review Board** — UI trực quan để review findings từ `/refine-prd`, `/review-context`, `/review-tech-docs`
350
+ - 📊 **Living Documentation** — dashboard traceability dựa trên `.trace/*.tsv`
351
+
352
+ ## Step 7 — Verify
353
+
354
+ Checklist tuỳ theo `project_type`:
355
+
356
+ **project_type = 1 (Single-service):**
357
+ - [ ] `specs/` tồn tại
358
+ - [ ] `specs/product-definition/` tồn tại
359
+ - [ ] `specs/domain-knowledge/` tồn tại
360
+ - [ ] `.trace/` tồn tại
361
+ *(folder `specs/{domain}/{prd-slug}/` theo feature tạo on demand — không check ở đây)*
362
+ - [ ] `.agent/project-context.yaml` tồn tại
363
+ - [ ] `CLAUDE.md` tồn tại
364
+ - [ ] `specs/domain-knowledge/business-dictionary.md` tồn tại
365
+ - [ ] `specs/domain-knowledge/core-entities.md` tồn tại
366
+
367
+ **project_type = 2 (Umbrella):**
368
+ - [ ] `.agent/project-context.yaml` tồn tại với `setup.mode: umbrella`
369
+ - [ ] Section `services` có ít nhất một entry với đúng domain key
370
+ - [ ] Path `spec_source` tồn tại (vd thư mục `my-project-specs/` có mặt)
371
+ - [ ] `.agent/review/` tồn tại
372
+ - [ ] Spec submodule đã init: `git submodule status` không hiện prefix `-`
373
+
374
+ **project_type = 3 (PO Spec repo):**
375
+ - [ ] `specs/product-definition/` tồn tại
376
+ - [ ] `specs/domain-knowledge/` tồn tại
377
+ - [ ] `feedback/` tồn tại
378
+ *(folder `specs/{domain}/{prd-slug}/` theo feature tạo on demand — không check ở đây)*
379
+ - [ ] `.agent/review/` tồn tại
380
+ - [ ] `.agent/project-context.yaml` tồn tại
381
+ - [ ] `CLAUDE.md` tồn tại (tối thiểu)
382
+ - [ ] `specs/domain-knowledge/business-dictionary.md` tồn tại
383
+ - [ ] `specs/domain-knowledge/core-entities.md` tồn tại
384
+
385
+ ## Output
386
+
387
+ # Report Footer — Định dạng output chuẩn cho mọi lệnh
388
+
389
+ Mọi report của lệnh phải kết thúc bằng section footer chuẩn này.
390
+
391
+ ## Status Badge
392
+
393
+ Chọn một theo kết quả:
394
+ - `✅ Complete` — mọi bước thành công, không có vấn đề
395
+ - `❌ Failed` — lệnh không hoàn thành được do lỗi chặn
396
+ - `⚠️ Warnings` — hoàn thành nhưng có vấn đề không chặn, nên review lại
397
+
398
+ ## Output Artifacts
399
+
400
+ Liệt kê mọi file được tạo hoặc sửa bởi lệnh này:
401
+ ```
402
+ Output Artifacts:
403
+ {created|updated} {file-path} ({mô tả ngắn})
404
+ {created|updated} {file-path} ({mô tả ngắn})
405
+ ```
406
+
407
+ Nếu không ghi file nào (vd: lệnh review hoặc phân tích) → ghi `Output Artifacts: none (read-only)`.
408
+
409
+ ## Pipeline Position
410
+
411
+ In một sơ đồ pipeline một dòng, đánh dấu phase của lệnh HIỆN TẠI bằng `◀ bạn ở đây`,
412
+ để người dùng luôn thấy lệnh này nằm ở đâu trong luồng end-to-end:
413
+
414
+ ```
415
+ Discovery → PRD → [Design Spec] → BDD → Tech Design → Code → Dev Self-Check → QC → Trace Audit
416
+ ```
417
+
418
+ Tìm lệnh hiện tại trong bảng phase dưới đây và đánh dấu **phase của nó** trong sơ đồ trên:
419
+
420
+ | Phase | Commands |
421
+ |-------|----------|
422
+ | Discovery | `/define-product` |
423
+ | PRD | `/generate-prd` · `/refine-prd` · `/review-context` (PRD) |
424
+ | Design Spec | `/generate-design-spec` |
425
+ | BDD | `/generate-bdd` · `/review-context` (BDD) |
426
+ | Tech Design | `/generate-tech-docs` · `/map-testids` · `/review-tech-docs` |
427
+ | Code | `/generate-code` · `/review-code` |
428
+ | Dev Self-Check | `/dev-gen-test` · `/dev-run-test` · `/dev-smoke-test` |
429
+ | QC | `/qc-analyze` · `/qc-plan` · `/qc-design-test` · `/qc-review` · `/qc-run-test` · `/qc-report` |
430
+ | Trace Audit | `/validate-traces` |
431
+
432
+ Với **lệnh review**, thêm vòng review 3 bước và đánh dấu bước hiện tại, vd:
433
+ `Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume`.
434
+
435
+ **Lệnh xuyên suốt** (`/sync`, `/update-framework`, `/fix-bug`, `/debug`, `/learn`,
436
+ `/report-bug`, `/propose-scenario`, `/generate-spec-manifest`) nằm ngoài pipeline tuyến tính —
437
+ **bỏ hẳn dòng Pipeline** cho các lệnh này (đừng cố nhét chúng vào sơ đồ).
438
+
439
+ ## Gợi ý lệnh tiếp theo
440
+
441
+ Gợi ý lệnh kế tiếp hợp lý theo phase của workflow:
442
+
443
+ | Lệnh hiện tại | Gợi ý lệnh tiếp theo |
444
+ |-------------------------|-----------------------------------------------|
445
+ | /setup-ai-first | `/define-product` để bắt đầu feature đầu tiên |
446
+ | /define-product | `/generate-prd {product-definition-file}` |
447
+ | /generate-prd | `/refine-prd {prd-file}` rồi `/review-context {prd-file}` |
448
+ | /refine-prd | Mở Review Board → cập nhật PRD → `/review-context {prd-file}` |
449
+ | /review-context (PRD) | Khi 0 critical → PO đặt `Status: approved`, rồi FE/App: `/generate-design-spec {prd-file}` (→ design sign-off → BDD); BE: `/generate-bdd {prd-file}`. Còn critical/NEEDS_FIX → sửa PRD (giữ draft) |
450
+ | /generate-design-spec | Designer review → xác nhận link Figma → PO + Designer sign-off → `/generate-bdd {prd-file}` |
451
+ | /generate-bdd | `/review-context {feature-file}` để kiểm tra độ phủ |
452
+ | /review-context (BDD) | `/generate-tech-docs {UC-ID}` nếu APPROVED; sinh lại nếu NEEDS_FIX |
453
+ | /qc-analyze | `/qc-plan {UC-ID}` (xử lý các gap blocker 🔴 trước) |
454
+ | /qc-plan | `/qc-design-test {UC-ID}` |
455
+ | /qc-design-test | `/qc-review {UC-ID}` (review test-case) |
456
+ | /qc-review (test-case) | `/qc-run-test {UC-ID}` nếu APPROVED; sửa TC nếu NEEDS_FIX |
457
+ | /qc-run-test | `/qc-report {UC-ID}` rồi `/qc-review {UC-ID}` (review script) |
458
+ | /qc-review (script) | `/qc-report {UC-ID}` rồi tạo PR nếu APPROVED |
459
+ | /qc-report | `/validate-traces {UC-ID}` để làm mới Living Docs (qc_status) |
460
+ | /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
461
+ | /review-tech-docs | `/generate-code {feature-file}` nếu APPROVED; sửa doc nếu NEEDS_FIX |
462
+ | /generate-code | Lần gen đầu → `/review-code {UC-ID}`; gen lại → `/dev-gen-test {UC-ID}` |
463
+ | /dev-gen-test | `/dev-run-test {UC-ID}` |
464
+ | /dev-run-test (passing) | `/review-code {UC-ID}` |
465
+ | /dev-run-test (failing) | `/fix-bug {ticket-id}` hoặc `/debug {error}` |
466
+ | /review-code | `/dev-smoke-test {UC-ID}` hoặc tạo PR |
467
+ | /dev-smoke-test | Tạo PR và link tới ticket |
468
+ | /validate-traces | DRIFT/UNTRACKED → `/generate-code {UC-ID}`; GAP → `/dev-gen-test {UC-ID}`; tất cả OK → tạo PR |
469
+ | /fix-bug | Tạo PR và link tới ticket |
470
+ | /debug | `/fix-bug {ticket-id}` nếu cần sửa |
471
+ | /report-bug | Gửi cho dev (`/fix-bug {BUG-ID}`); nếu thiếu coverage → `/propose-scenario {UC-ID}` |
472
+ | /propose-scenario | Báo PO/Dev review proposal trong `feedback/bdd-proposals/` |
473
+ | /learn | Tiếp tục làm việc — lesson áp dụng ở lệnh kế tiếp |
474
+ | /sync | `/validate-traces` để xem độ phủ đầy đủ; xử lý mọi `📥 tester feedback` được nêu |
475
+ | /update-framework | Review `git diff .agent/`, commit; `/sync` để đồng bộ nội dung dự án |
476
+
477
+ Định dạng footer như sau:
478
+ ```
479
+ ---
480
+ Status : {badge}
481
+ {khối Output Artifacts}
482
+ Pipeline : Discovery → PRD → [BDD ◀ bạn ở đây] → Tech Design → Code → Dev Self-Check → QC → Trace Audit
483
+ (lệnh review) Vòng review: [① phân tích ◀] → ② Review Board → ③ --resume
484
+ Next : {lệnh gợi ý kèm ví dụ tham số}
485
+ ```
486
+ *(Bỏ dòng `Pipeline` cho các lệnh xuyên suốt liệt kê ở trên.)*
487
+
488
+
489
+ ```
490
+ /setup-ai-first Hoàn tất ✅
491
+ ```
492
+
493
+ Output tuỳ theo `project_type`:
494
+
495
+ **Single-service:**
496
+ ```
497
+ Next:
498
+ 1. Điền CLAUDE.md (thay các giá trị {{PLACEHOLDER}})
499
+ 2. Điền .agent/project-context.yaml
500
+ 3. Điền specs/domain-knowledge/business-dictionary.md
501
+ 4. Điền specs/domain-knowledge/core-entities.md
502
+ 5. git add và commit 4 file đó
503
+ 6. Cài VS Code extension:
504
+ code --install-extension SpecDrivenDocsTools.spec-driven-docs-tool
505
+ 7. /define-product để bắt đầu feature đầu tiên
506
+ ```
507
+
508
+ **Umbrella:**
509
+ ```
510
+ Next:
511
+ 1. Review .agent/project-context.yaml:
512
+ - Cập nhật services[].path khớp tên thư mục submodule thực tế
513
+ - Cập nhật domain key của services khớp row `Domain` (bảng Metadata) trong các file PRD
514
+ - Xác nhận path spec_source đúng
515
+
516
+ 2. Chạy /sync — một lệnh lo mọi thứ còn lại:
517
+ /sync
518
+ → git pull + submodule init + spec submodule update
519
+ → Tự tạo .agent/project-context.yaml cho mỗi service submodule
520
+ (phát hiện module từ pom.xml / go.mod / package.json / pubspec.yaml v.v.)
521
+ → Sync Living Docs panel
522
+ → Refresh spec-manifest.yaml
523
+
524
+ 3. Bắt đầu sinh:
525
+ /generate-bdd {spec_source}/specs/{domain}/{prd-slug}/{TICKET-ID}-{prd-slug}.md
526
+ ```
527
+
528
+ **PO Spec repo:**
529
+ ```
530
+ Next:
531
+ 1. Điền .agent/project-context.yaml:
532
+ - domains: [liệt kê mọi business domain — chúng thành row `Domain` (bảng Metadata) trong PRD]
533
+ - project.name, project.description
534
+ 2. Điền specs/domain-knowledge/business-dictionary.md ← canonical terms
535
+ 3. Điền specs/domain-knowledge/core-entities.md ← entity glossary
536
+ 4. git add và commit các file đó
537
+ 5. Cài VS Code extension:
538
+ code --install-extension SpecDrivenDocsTools.spec-driven-docs-tool
539
+ 6. /define-product để bắt đầu feature đầu tiên
540
+
541
+ ⚠️ Nhắc handoff team dev:
542
+ - Mỗi PRD phải có row `Domain` (bảng Metadata) khớp một trong domains list của bạn
543
+ - Khi team dev setup umbrella repo của họ, họ map các tên domain này
544
+ tới path service submodule trong section services của project-context.yaml
545
+ - Chia sẻ tên domain với team dev trước khi họ cấu hình umbrella
546
+ ```