@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,317 @@
1
+ # /review-tech-docs — Review Technical Design Document
2
+
3
+ **READ-ONLY analysis mode — writes a findings file, does NOT modify the target.**
4
+ **Use `--resume` to apply accepted findings.**
5
+
6
+ ## Gate
7
+ {{include:steps/gate.md}}
8
+
9
+ *Note: For this command, the target in Step 1 is a tech-design `.md` file in `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/`.
10
+ If `$ARGUMENTS` contains `--resume` → skip to Resume Mode below.*
11
+
12
+ ## Context
13
+ {{include:steps/context-loader.md}}
14
+
15
+ ---
16
+
17
+ ## Load Review Materials
18
+
19
+ After loading base context, read the following in order:
20
+
21
+ 1. **Target tech-doc** — read fully. Extract from header:
22
+ - `@trace.id` → UC-ID
23
+ - `@trace.domain` → domain
24
+ - `@trace.prd` → source PRD ticket ID
25
+ - `@trace.status` → current status (draft / in-review / approved)
26
+
27
+ 2. **Source feature file** — load `{paths.specs_dir}/{domain}/{prd-slug}/bdd/{UC-ID}*.feature` if exists.
28
+
29
+ 3. **Other tech-docs in same domain** — list and load all `.md` files in
30
+ `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/` excluding the target. Used for conflict checking (T4).
31
+
32
+ 4. **Architecture reference** — re-confirm CLAUDE.md §2: layer order, architectural rules.
33
+
34
+ 5. **Core entities** — already loaded in context (Step 6 of context-loader).
35
+
36
+ Derive findings filename:
37
+ `{paths.refinement_dir}/{uc-id}-tech-review-findings.yaml`
38
+
39
+ ---
40
+
41
+ ## Review Dimensions
42
+
43
+ ### T1 — Architecture Alignment *(always CRITICAL if violated)*
44
+
45
+ Cross-reference the proposed design against CLAUDE.md §2 rules:
46
+
47
+ | Violation type | Severity |
48
+ |----------------|----------|
49
+ | Controller calls Repository directly (layer skip) | Critical |
50
+ | Business logic in Controller or DTO | Critical |
51
+ | Forbidden pattern from §3 | Critical |
52
+ | Dependency going upstream (Service → Controller DTO) | Critical |
53
+ | Transaction annotation on wrong layer | Major |
54
+ | Missing separation (no Facade when arch requires it) | Major |
55
+
56
+ For each finding:
57
+ ```
58
+ Component: {class or method name}
59
+ Violates: "{rule text}" (CLAUDE.md §2)
60
+ Fix: {which layer/component should own this instead}
61
+ ```
62
+ → **Not auto-fixable.** Human must decide structural fix. Note required in Review Board.
63
+
64
+ ### T2 — Entity Consistency
65
+
66
+ Using the loaded core-entities catalog:
67
+
68
+ | Issue | Severity | Auto-fixable? |
69
+ |-------|----------|---------------|
70
+ | Entity mentioned not in core-entities.md | Major | No — human confirms if DTO or domain entity |
71
+ | Field name differs from core-entities.md | Major | Yes — rename to canonical |
72
+ | Relationship described differently | Major | No — human decides |
73
+ | New entity introduced but not in core-entities.md | Minor | No — add to core-entities first |
74
+
75
+ ### T3 — BDD Traceability
76
+
77
+ Cross-reference against the source `.feature` file:
78
+
79
+ | Issue | Severity | Auto-fixable? |
80
+ |-------|----------|---------------|
81
+ | Tech-doc proposes behavior not in any BDD scenario | Major | No — create scenario first |
82
+ | Tech-doc contradicts a BDD scenario | Critical | No — resolve conflict first |
83
+ | UC scenario has no corresponding design decision | Minor | Yes — add missing design note |
84
+
85
+ ### T4 — Domain Conflict Check
86
+
87
+ Compare against other tech-docs in `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/`:
88
+
89
+ | Issue | Severity | Auto-fixable? |
90
+ |-------|----------|---------------|
91
+ | Same endpoint defined with different request/response | Critical | No — human resolves |
92
+ | Same service method with different behavior | Critical | No — human resolves |
93
+ | Entity status transitions differ between docs | Critical | No — human resolves |
94
+ | Overlapping responsibility (both docs claim ownership of same logic) | Major | No — human resolves |
95
+
96
+ ### T5 — Internal Consistency
97
+
98
+ Within the tech-doc itself:
99
+
100
+ | Check | Severity | Auto-fixable? |
101
+ |-------|----------|---------------|
102
+ | Sequence diagram shows different flow than written description | Major | No |
103
+ | API spec return type differs from code sketch | Major | Yes — align one to the other |
104
+ | Section references a component/concept never defined later | Minor | Yes — add definition |
105
+ | Assumption stated but no design addresses it | Minor | Yes — add note or remove assumption |
106
+
107
+ ### T6 — Structural Completeness
108
+
109
+ Check all standard sections are present and non-empty:
110
+
111
+ | Section | Missing severity |
112
+ |---------|-----------------|
113
+ | Header (`@trace.id`, `@trace.prd`, `@trace.domain`, `@trace.status`) | Major |
114
+ | Overview / Context | Major |
115
+ | Architecture Decision with rationale | Major |
116
+ | Component Diagram or Layer Description | Major |
117
+ | Sequence Diagram or Flow Steps | Major |
118
+ | API Contract (if HTTP-facing) | Major |
119
+ | Data Model Changes (if entity changes) | Major |
120
+ | Error Handling Strategy | Major |
121
+ | Open Questions / Assumptions | Minor |
122
+
123
+ → All T6 missing-section findings are **auto-fixable**: AI adds skeleton section with prompts.
124
+
125
+ ### T7 — Cross-Team API Contract Review
126
+
127
+ *Only applies when ALL of the following are true:*
128
+ *1. Source BDD has `@trace.platform: system`.*
129
+ *2. Tech-doc header does NOT have `@trace.api_source: existing`.*
130
+
131
+ *If `@trace.api_source: existing` → **skip T7 entirely**. Contract đã được PO xác định trong PRD — không có API design mới để đồng thuận.*
132
+
133
+ This dimension ensures FE, App, and BE teams all agree on the API contract before implementation starts.
134
+
135
+ **Step 1 — Check sign-off status in tech-doc header:**
136
+
137
+ Read the `@trace.sign_off` block in the tech doc header. If absent → add it as a finding (auto-fixable: add skeleton).
138
+
139
+ ```yaml
140
+ # @trace.sign_off:
141
+ # be_team: pending # author — set to "done" when BE satisfied with design
142
+ # fe_team: pending # FE/Web — must confirm contract matches web BDD expectations
143
+ # app_team: pending # App — must confirm contract matches app BDD expectations (if applicable)
144
+ # sa: pending # SA/Tech Lead — final approval
145
+ ```
146
+
147
+ **Step 2 — Contract vs BDD cross-check:**
148
+
149
+ Load the web and app BDDs for this TICKET-ID (from `{paths.specs_dir}/{domain}/{prd-slug}/bdd/web/` and `{paths.specs_dir}/{domain}/{prd-slug}/bdd/app/` in the spec submodule or spec repo).
150
+
151
+ For each platform BDD, verify the tech doc's API contract satisfies the BDD's `Then` clauses:
152
+
153
+ | Check | Severity |
154
+ |---|---|
155
+ | Response fields in API contract don't cover what web BDD `Then` expects | Critical |
156
+ | Response fields in API contract don't cover what app BDD `Then` expects | Critical |
157
+ | Error response shape doesn't match what platform BDDs expect | Major |
158
+ | System BDD `@system.resolution` annotation contradicts the API contract design | Critical |
159
+
160
+ **Step 3 — Pending sign-off report:**
161
+
162
+ After the review, list which sign-offs are still `pending`:
163
+
164
+ ```
165
+ ⏳ Pending sign-offs before tech docs can be approved:
166
+ fe_team — FE/Web team must confirm API contract matches web BDD expectations
167
+ app_team — App team must confirm API contract matches app BDD expectations
168
+ sa — SA/Tech Lead final approval
169
+
170
+ Once sign-offs are collected → update @trace.sign_off in tech doc header, then re-run /review-tech-docs.
171
+ Tech docs cannot be set to "approved" while any required sign-off is pending.
172
+ ```
173
+
174
+ **Approval gate:**
175
+ - If `be_team: done` AND `fe_team: done` AND `app_team: done` (or N/A) AND `sa: done` → tech docs may be set to `approved`
176
+ - Otherwise → `@trace.status` stays `in-review` — `generate-code` is blocked
177
+
178
+ ---
179
+
180
+ ## Write Findings File
181
+
182
+ After running all checks, write findings to `{paths.refinement_dir}/{uc-id}-tech-review-findings.yaml`:
183
+
184
+ ```yaml
185
+ source_file: "{absolute path to tech-doc}"
186
+ uc_id: "{UC-ID}"
187
+ domain: "{domain}"
188
+ generated_at: "{ISO datetime}"
189
+ review_type: "tech-design"
190
+ status: "pending_review"
191
+ is_system_bdd: {true | false} # true if source BDD has @trace.platform: system
192
+
193
+ sign_off: # only present when is_system_bdd: true
194
+ be_team: pending # read from @trace.sign_off in tech-doc header
195
+ fe_team: pending
196
+ app_team: pending # "n/a" if project has no app platform
197
+ sa: pending
198
+ sign_off_gate: blocked # blocked | ready — "ready" only when all required are "done"
199
+
200
+ findings:
201
+ - id: "F001"
202
+ check_id: "T1" # T1–T7
203
+ severity: "critical" # critical | major | minor
204
+ section: "{section heading or component name where issue was found}"
205
+ uc_id: "{UC-ID}" # same as top-level uc_id (the UC this tech-doc designs)
206
+ quote: "{verbatim snippet copied EXACTLY from the tech-doc at the issue location, ≤120 chars}"
207
+ finding: "{clear description of the violation or gap}"
208
+ suggestion: "{specific fix — AI applies this in --resume if accepted}"
209
+ auto_fixable: false # true = AI can apply; false = human must write decision in note
210
+ status: "pending" # pending | accepted | modified | rejected | deferred
211
+
212
+ summary:
213
+ total_findings: {N}
214
+ by_severity: { critical: {N}, major: {N}, minor: {N} }
215
+ auto_fixable: {N}
216
+ requires_human_decision: {N}
217
+ recommendation: "APPROVED | NEEDS_REVISION | BLOCKED"
218
+ sign_off_gate: "{blocked — pending: fe_team, app_team, sa | ready}"
219
+ ```
220
+
221
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
222
+ > For every finding, copy a short **verbatim** `quote` straight from the tech-doc at the exact spot
223
+ > the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
224
+ > These let a reviewer click a finding in the Review Board and jump to the precise source location.
225
+
226
+ ## Report
227
+
228
+ {{include:steps/report-footer.md}}
229
+
230
+ ```
231
+ /review-tech-docs Complete — {target file}
232
+ UC: {UC-ID} | Domain: {domain}
233
+ Findings: {total} | 🔴 Critical: {N} | 🟡 Major: {N} | 🟢 Minor: {N}
234
+ Auto-fixable: {N} | Needs human decision: {N}
235
+
236
+ Sign-off gate (system BDD only):
237
+ be_team : {done | pending}
238
+ fe_team : {done | pending} ← {name / "needs sign-off" }
239
+ app_team : {done | pending | n/a}
240
+ sa : {done | pending}
241
+ Gate : {🔒 BLOCKED — pending: fe_team, sa | ✅ READY}
242
+
243
+ Findings file: {paths.refinement_dir}/{uc-id}-tech-review-findings.yaml
244
+ Next: Open in Review Board → Accept/Modify/Reject each finding
245
+ Then run: /review-tech-docs --resume {tech-design-file}
246
+ After all sign-offs collected → update @trace.sign_off in tech doc, re-run review
247
+ ```
248
+
249
+ ---
250
+
251
+ ## Resume Mode — Apply Accepted Findings
252
+
253
+ *Triggered when `$ARGUMENTS` contains `--resume`.*
254
+ *Example: `/review-tech-docs --resume {paths.tech_docs_dir}/payment/{prd-slug}/tech-docs/PAY-UC1-tech-design.md`*
255
+
256
+ ### Phase 1 — Read accepted findings
257
+
258
+ 1. Derive findings file from target: `{paths.refinement_dir}/{uc-id}-tech-review-findings.yaml`
259
+ 2. Read the file. Collect findings where `status: "accepted"` or `status: "modified"`.
260
+ 3. If none → report "No accepted findings. File unchanged." and stop.
261
+
262
+ ### Phase 2 — Apply fixes
263
+
264
+ Apply in order: critical → major → minor.
265
+
266
+ | check_id | What to do |
267
+ |----------|-----------|
268
+ | T1 (Architecture) | Apply the structural fix from finding note — move logic to correct layer, update component description |
269
+ | T2 (Field name) | Rename field to canonical name from core-entities.md throughout the document |
270
+ | T3 (Missing design note) | Add design decision note for the uncovered scenario |
271
+ | T5 (Internal inconsistency) | Align the conflicting sections to the decision stated in the note |
272
+ | T6 (Missing section) | Add skeleton section with placeholder prompts for the tech lead to fill |
273
+
274
+ **T1, T2, T4 findings with `auto_fixable: false`:** require a human-written resolution in the
275
+ Review Board "Modify" note. Apply exactly what the note says. Do not invent the fix.
276
+
277
+ ### Phase 3 — Update header + TSV + Report
278
+
279
+ Edit the tech-doc file directly:
280
+ 1. Find `@trace.revision:` in the header — increment its integer value by 1.
281
+ 2. Find `@trace.status:` in the header:
282
+ - If sign_off_gate = `ready` (all sign-offs done) → set to `approved`
283
+ - Otherwise → set to `in-review` (blocks `/generate-code`)
284
+ 3. If `@trace.sign_off` block is absent and this is a system BDD tech doc → add it with all values `pending`.
285
+
286
+ Write both changes to the file.
287
+
288
+ Then update `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv` — pick the column by which tech-doc was reviewed (read the filename):
289
+ - **BE contract** (`{UC-ID}-tech-design.md`) → set `tech_doc_revision` to the new `@trace.revision` integer for all rows of this UC.
290
+ - **FE tech-design** (`{UC-ID}-tech-design-{platform}.md`) → set `fe_tech_doc_revision` instead, for the rows of this UC on that platform (leave `tech_doc_revision` untouched).
291
+ - Set `last_updated` to today's date (`YYYY-MM-DD`) for all rows of this UC.
292
+
293
+ Print the report after all file writes are complete.
294
+
295
+ ```
296
+ /review-tech-docs --resume Applied — {target file}
297
+ UC: {UC-ID}
298
+
299
+ Applied : {N} findings ({critical} critical, {major} major, {minor} minor)
300
+ Skipped : {N} rejected/deferred
301
+
302
+ Changes:
303
+ - {change 1}
304
+ - {change 2}
305
+
306
+ Revision : {old} → {new}
307
+ Status : {approved | in-review}
308
+
309
+ Sign-off : {✅ All done — status set to approved
310
+ | 🔒 Pending: fe_team, sa — status set to in-review
311
+ Update @trace.sign_off in tech doc when each team confirms, then re-run /review-tech-docs}
312
+
313
+ Re-run /review-tech-docs {file} to confirm 0 remaining critical findings.
314
+ Next: {/generate-code {feature-file} ← only if status = approved
315
+ | Collect pending sign-offs → update @trace.sign_off → re-run /review-tech-docs}
316
+ → if the tech-doc lives in the shared spec repo: commit + push it to the spec submodule so FE/App `/sync` the updated contract
317
+ ```