@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,415 @@
1
+ # /review-context — Review PRD or BDD for Quality & Consistency
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 either a `.md` PRD file or a `.feature` BDD file.
10
+ If the path is a `prd.md` under `{paths.specs_dir}/{domain}/{prd-slug}/` → PRD Review Mode.
11
+ If the path ends with `.feature` → BDD Review Mode.
12
+ If `$ARGUMENTS` contains `--resume` → skip to Resume Mode below.
13
+ If `$ARGUMENTS` contains `--fix` → skip to Fix Mode below (apply all auto-fixable findings immediately).*
14
+
15
+ ## Context
16
+ {{include:steps/context-loader.md}}
17
+
18
+ ---
19
+
20
+ ## Detect Review Mode
21
+
22
+ After resolving the target file:
23
+ - `.feature` file → **BDD Review Mode** (jump to BDD section)
24
+ - `prd.md` under `{paths.specs_dir}/*/*/` → **PRD Review Mode** (continue below)
25
+ - Unknown → ask: "Is this a PRD file or a BDD feature file? (prd/bdd)"
26
+
27
+ Also check flags:
28
+ - `--fix` present → after running all checks, apply `auto_fixable: true` findings immediately (skip Review Board)
29
+ - `--resume` present → skip analysis entirely, go to Resume Mode
30
+
31
+ Derive the output findings filename:
32
+ - PRD: `{paths.refinement_dir}/{prd-slug}-review-context-findings.yaml`
33
+ - BDD: `{paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml`
34
+
35
+ ---
36
+
37
+ ## Review Procedure
38
+ {{include:steps/review-fanout.md}}
39
+
40
+ **How the checks below map onto the procedure:**
41
+ - **DIMENSIONS** = the check groups for the detected mode — PRD: `P1, P2, P4, P5`; BDD: `B1, B2, B3, B4, B5, B6`. Fan out one sub-agent per check group, each scanning the full target file for just that group.
42
+ - **Orchestrator-run checks (not fanned out):** `P0` (umbrella routing) and `P3` (cross-PRD conflict) need config / other-PRD context — the orchestrator runs these itself **before** the fan-out and adds their results to `ALL_FINDINGS`.
43
+ - The completeness-critic loop (Phase 2) guarantees the findings file is complete in one run — re-running `/review-context` should surface **0 new** findings. Map each dimension into the `check_id` field of the schema below.
44
+
45
+ ---
46
+
47
+ ## PRD Review Mode
48
+
49
+ ### P0 — Umbrella Routing Check (umbrella mode only)
50
+
51
+ *Skip this check entirely if `setup.mode` is not `"umbrella"` (i.e., `services` section absent from project-context.yaml).*
52
+
53
+ When `setup.mode = umbrella`, the PRD must have correct routing metadata so context-loader Step 1.5 can direct generated output to the right service submodule. Run these checks **before P1–P5**:
54
+
55
+ **P0.1 — `@trace.domain` presence**
56
+ - Read the PRD frontmatter block (lines starting with `@trace.` at top of file)
57
+ - If `@trace.domain` is **absent** → **critical** finding:
58
+ - `finding`: "`@trace.domain` is missing. Dev team's umbrella routing depends on this field to route BDD and code output to the correct service submodule."
59
+ - `suggestion`: "Add `@trace.domain: {domain}` to the PRD frontmatter. Use one of the domain keys defined in the umbrella's `project-context.yaml` services section."
60
+ - `auto_fixable: false` — PO must confirm the correct domain name
61
+
62
+ **P0.2 — `@trace.domain` matches a service key**
63
+ - If `@trace.domain` is present, check if its value matches any key in the `services` section of project-context.yaml
64
+ - If **no match found** → **critical** finding:
65
+ - `finding`: "`@trace.domain: {value}` does not match any key in the umbrella's `services` config. Routing will fall back to default paths and BDD may be generated to the wrong location."
66
+ - `suggestion`: "Either update `@trace.domain` to match an existing service key ({list known keys}), or add a new entry to `services` in project-context.yaml for domain `{value}`."
67
+ - `auto_fixable: false`
68
+ - If `services` section is not yet configured (empty/placeholder) → **major** finding:
69
+ - `finding`: "Umbrella `services` section is not yet configured. Cannot verify domain routing."
70
+ - `suggestion`: "Update `.agent/project-context.yaml` services section with domain-to-submodule mapping before generating BDD."
71
+ - `auto_fixable: false`
72
+
73
+ **P0.3 — `@trace.status` check**
74
+ - If `@trace.status` is absent → **minor**, `auto_fixable: true` (add `@trace.status: draft`)
75
+ - If `@trace.status: draft` → **major**, `auto_fixable: false`:
76
+ - `finding`: "PRD status is `draft`. Dev team should not generate BDD from an unapproved PRD."
77
+ - `suggestion`: "PO/SA should review and update status to `approved` before dev team proceeds."
78
+
79
+ > **P0 is a gate check:** If P0.1 or P0.2 yields a critical finding, display a warning before proceeding:
80
+ > ```
81
+ > ⚠️ ROUTING WARNING: @trace.domain issue detected.
82
+ > BDD/code generated from this PRD may land in the wrong service submodule.
83
+ > Resolve P0 findings before running /generate-bdd.
84
+ > ```
85
+ > Then continue with P1–P5 (do not abort — PO may be reviewing early-stage PRDs).
86
+
87
+ ### P1 — Terminology Check (Business Dictionary)
88
+
89
+ Load `{paths.business_dictionary}`.
90
+ Scan the entire PRD for terminology issues:
91
+
92
+ 1. **Banned terms** — every occurrence of a term in §Banned Terms:
93
+ → Severity: **critical**. AI can auto-fix in `--resume`.
94
+
95
+ 2. **Inconsistent usage** — same concept named differently across sections:
96
+ → Severity: **major**. Flag both occurrences. Human decides canonical form in Review Board note.
97
+
98
+ 3. **Unlisted business terms** — important terms absent from the dictionary:
99
+ → Severity: **minor**. Suggest adding to `business-dictionary.md`.
100
+
101
+ ### P2 — Ambiguity Check
102
+
103
+ Scan each AC and BR for:
104
+
105
+ | Signal | Example | Severity |
106
+ |--------|---------|----------|
107
+ | Vague quantifier | "fast", "large", "reasonable", "quickly" | Critical |
108
+ | Missing actor | "the system should" with no trigger specified | Major |
109
+ | Undefined reference | "{SomeThing}" used but never defined in this PRD | Major |
110
+ | Missing negative path | AC only describes happy path but BR has error conditions | Minor |
111
+ | Passive voice hiding actor | "Invoice is created" — who creates it? | Minor |
112
+
113
+ → AI cannot auto-fix P2 findings. Human must write the fix in Review Board "Modify" note.
114
+
115
+ ### P3 — Domain Conflict Check
116
+
117
+ List all other PRDs in `{paths.specs_dir}/{domain}/*/prd.md`.
118
+ For each one, check if this PRD contradicts a defined BR (same trigger, different outcome)
119
+ or redefines an entity field/status transition differently.
120
+
121
+ → Severity: **critical**. Human decides which PRD is correct. Note required.
122
+
123
+ ### P4 — Structural Completeness
124
+
125
+ - [ ] Metadata block: Version, Author, Date, Status
126
+ - [ ] At least 1 UC with `#### {TICKET-ID}-UC{N}:` heading
127
+ - [ ] Each UC has: Description, Actors, Preconditions, Acceptance Criteria, Business Rules
128
+ - [ ] `## Changelog` section exists
129
+ - [ ] No `{{PLACEHOLDER}}` values unfilled
130
+
131
+ → Missing sections: **major**. AI can add skeleton in `--resume` if accepted.
132
+
133
+ ### P5 — Custom Criteria (optional)
134
+
135
+ If `$ARGUMENTS` contains additional criteria after the file path, evaluate them and create
136
+ findings with `check_id: "P5"` and severity as appropriate.
137
+
138
+ ---
139
+
140
+ ## BDD Review Mode
141
+
142
+ ### B1 — PRD Coverage Check
143
+
144
+ Load the PRD referenced by `# @trace.prd:` in the feature file header.
145
+ Map every AC and every BR (including sub-bullets) to scenarios:
146
+
147
+ ```
148
+ AC1 ({short text}) → SC1, SC2 ✅
149
+ AC2 ({short text}) → MISSING ❌
150
+ BR1 ({short text}) → SC1 ✅
151
+ BR2 ({short text}) → MISSING ❌
152
+ ```
153
+
154
+ → Each missing AC/BR coverage: **critical** finding.
155
+ If accepted in Review Board, `--resume` generates the missing scenario(s).
156
+
157
+ ### B2 — Terminology & Entity Check
158
+
159
+ Using `{paths.business_dictionary}` and `{paths.core_entities}`:
160
+
161
+ 1. **Banned terms in steps** → **critical**, auto-fixable in `--resume`
162
+ 2. **Non-canonical entity names** → **major**, auto-fixable
163
+ 3. **Non-canonical field names in data tables** → **major**, auto-fixable
164
+ 4. **Technically-looking sample data** (UUIDs, `item_123`) → **minor**, auto-fixable
165
+
166
+ ### B3 — Gherkin Rules Check (R1–R10)
167
+
168
+ | Rule | Check | Auto-fixable? |
169
+ |------|-------|---------------|
170
+ | R1 | Every scenario has Given + When + Then | No — needs scenario redesign |
171
+ | R2 | No chained `When … Then … When` | No — needs redesign |
172
+ | R3 | No UI selectors / API paths / tech terms in steps | Yes — replace with business phrasing |
173
+ | R4 | Scenario name is a business outcome | No — needs human rename |
174
+ | R5 | Declarative WHAT, not imperative HOW | No — needs rewrite |
175
+ | R6 | `Then` asserts observable business outcome | No — needs redesign |
176
+ | R7 | Concrete values, not "valid data" | Yes — substitute realistic values |
177
+ | R8 | Each scenario is independently runnable | No — needs redesign |
178
+ | R9 | Data tables have enough columns for Then | Yes — add missing columns |
179
+ | R10 | Cross-UC reference uses navigation phrasing + Note | Yes — add Note comment |
180
+
181
+ → R3, R7, R9, R10 violations: auto-fixable. Others require human guidance via Review Board note.
182
+
183
+ ### B4 — Compliance Checks (C.1–C.5)
184
+
185
+ - [ ] C.1 Wireframe Coverage: every screen component/action has ≥1 SC → finding per missing item
186
+ - [ ] C.2 PRD Traceability: covered fully by B1 — do NOT create new findings here; deduplicate against B1 findings
187
+ - [ ] C.3 Business Dictionary terms used → same as B2
188
+ - [ ] C.4 Banned Terms: 0 banned terms → **critical**, auto-fixable
189
+ - [ ] C.5 NHÓM Grouping: if ≥3 SCs, grouped by business theme → **major**, auto-fixable
190
+
191
+ ### B5 — Metadata & Structural Check
192
+
193
+ - [ ] File header has all required `@trace.*` fields — check each explicitly: `@trace.id`, `@trace.title`, `@trace.revision`, `@trace.domain`, `@trace.service`, `@trace.module`, `@trace.status`, `@trace.author`, `@trace.created_at`, `@trace.prd`, `@trace.prd_version`, `@trace.bdd_version`, `@trace.business_rules`, `@trace.dataset` → **minor** per missing field, auto-fixable
194
+ - Note: `@trace.revision` is always `1` (static field — see generate-bdd.tmpl). Only check for presence; do NOT flag value as stale.
195
+ - [ ] Every scenario has `# @trace.scenario`, `# @trace.sc_version`, `# @trace.business_rules`, `# Side-effects:` → **minor**, auto-fixable
196
+ - [ ] Coverage Matrix at end of file → **major**, auto-fixable (AI regenerates)
197
+ - [ ] Pre-merge Checklist at end of file → **minor**, auto-fixable
198
+
199
+ ### B6 — Side-effect Completeness
200
+
201
+ For each `@happy` scenario:
202
+ - `# Side-effects:` comment lists all observable side effects
203
+ - `Then` block has `And <side-effect>` for each listed side effect
204
+
205
+ → Missing side-effect assertion: **major**, auto-fixable.
206
+
207
+ ---
208
+
209
+ ## Write Findings File
210
+
211
+ After running all checks, write `{paths.refinement_dir}/{slug}-review-*-findings.yaml`:
212
+
213
+ ```yaml
214
+ source_file: "{absolute path to reviewed file}"
215
+ generated_at: "{ISO datetime}"
216
+ review_type: "{prd | bdd}"
217
+ status: "pending_review"
218
+
219
+ findings:
220
+ - id: "F001"
221
+ check_id: "P1" # P1-P5 for PRD; B1-B6 for BDD
222
+ severity: "critical" # critical | major | minor
223
+ section: "{section or scenario ID where issue was found}"
224
+ uc_id: "{UC-ID this finding belongs to — PRD: the UC heading; BDD: @trace.id; \"\" if global}"
225
+ quote: "{verbatim snippet copied EXACTLY from the reviewed file at the issue location, ≤120 chars}"
226
+ finding: "{clear description of the issue}"
227
+ suggestion: "{specific actionable fix — AI will apply this in --resume if accepted}"
228
+ auto_fixable: true # true = AI can apply; false = human must write note in Review Board
229
+ status: "pending" # pending | accepted | modified | rejected | deferred
230
+
231
+ summary:
232
+ total_findings: {N}
233
+ by_severity: { critical: {N}, major: {N}, minor: {N} }
234
+ auto_fixable: {N}
235
+ requires_human_decision: {N}
236
+ recommendation: "APPROVED | NEEDS_REVISION | BLOCKED"
237
+ ```
238
+
239
+ > **Locator fields (`quote` + `uc_id`) — required for Review Board source-jump.**
240
+ > For every finding, copy a short **verbatim** `quote` straight from the reviewed file at the exact
241
+ > spot the issue occurs — do NOT paraphrase; it is matched against the document to locate the line.
242
+ > Set `uc_id` to the owning Use Case (`@trace.id` for BDD, the UC heading for PRD; `""` if global).
243
+ > These let a reviewer click a finding in the Review Board and jump to the precise source location.
244
+
245
+ ## Post-Analysis Routing
246
+
247
+ After running all checks and writing the findings file:
248
+
249
+ **If `--fix` flag present** → jump to Fix Mode (apply `auto_fixable: true` findings immediately).
250
+
251
+ **If no flag** → print Report below and stop.
252
+
253
+ ## Report
254
+
255
+ {{include:steps/report-footer.md}}
256
+
257
+ ```
258
+ /review-context Complete — {target file}
259
+ Mode: {PRD | BDD}
260
+ Findings: {total} | 🔴 Critical: {N} | 🟡 Major: {N} | 🟢 Minor: {N}
261
+ Auto-fixable: {N} | Needs human decision: {N}
262
+
263
+ Findings file:
264
+ {If PRD}: {paths.refinement_dir}/{prd-slug}-review-context-findings.yaml
265
+ {If BDD}: {paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml
266
+
267
+ Next options:
268
+ A) Quick fix : /review-context --fix {target-file}
269
+ → applies all auto-fixable findings immediately
270
+ B) Review Board: open findings file → accept/modify/reject
271
+ → /review-context --resume {target-file}
272
+ ```
273
+
274
+ ---
275
+
276
+ ## Fix Mode — Apply Auto-Fixable Findings Immediately
277
+
278
+ *Triggered when `$ARGUMENTS` contains `--fix`.*
279
+ *Example: `/review-context --fix specs/payment/process-payment/bdd/PAY-001.feature`*
280
+
281
+ This mode runs the full analysis (same as default), then immediately applies every
282
+ `auto_fixable: true` finding without going through the Review Board.
283
+
284
+ Use for: BDD cleanup, terminology fixes, metadata gaps — anything the AI can safely
285
+ correct without a human judgment call. Findings requiring human decisions are written
286
+ to the findings file as usual and left `status: pending`.
287
+
288
+ ### Phase 1 — Run analysis
289
+
290
+ Run all checks via the **Review Procedure** (fan-out + completeness loop) exactly as in the default mode.
291
+ Write the findings file with all `status: "pending"` as usual.
292
+
293
+ ### Phase 2 — Apply auto-fixable findings
294
+
295
+ For each finding where `auto_fixable: true`, in order (critical → major → minor):
296
+
297
+ **For PRD files:**
298
+
299
+ | check_id | What to apply |
300
+ |----------|--------------|
301
+ | P0.3 (Missing status) | Add `@trace.status: draft` to frontmatter |
302
+ | P1 (Banned term) | Replace every banned term occurrence with canonical term |
303
+ | P4 (Structure) | Add missing section/metadata skeleton |
304
+
305
+ **For BDD files:**
306
+
307
+ | check_id | What to apply |
308
+ |----------|--------------|
309
+ | B2 (Terminology) | Replace banned terms, fix entity/field names, fix technical sample data |
310
+ | B3 R3 | Replace tech terms/UI selectors with business phrasing |
311
+ | B3 R7 | Substitute concrete realistic values |
312
+ | B3 R9 | Add missing data table columns |
313
+ | B3 R10 | Add cross-UC navigation Note comment |
314
+ | B4 C4 | Fix banned terms in tags |
315
+ | B4 C5 | Add NHÓM grouping if ≥3 SCs |
316
+ | B5 | Add missing @trace headers, regenerate Coverage Matrix / Pre-merge Checklist |
317
+ | B6 | Add missing `And <side-effect>` to Then blocks |
318
+
319
+ After applying each finding, mark it `status: "applied_automatically"` in the findings file.
320
+
321
+ ### Phase 3 — Version bump
322
+
323
+ - **PRD**: if ≥1 finding applied → bump **minor** version (auto-fix only applies P1 banned-term replacements and P4 skeleton additions — never alters UC structure or BR content, so minor bump is always correct), add Changelog entry:
324
+ `Auto-fix: applied {N} auto-fixable review-context findings`
325
+ - **BDD**: if ≥1 finding applied → increment `@trace.bdd_version` by 0.1
326
+
327
+ ### Phase 4 — Report
328
+
329
+ ```
330
+ /review-context --fix Applied — {target file}
331
+ Mode: {PRD | BDD}
332
+
333
+ Auto-fixed : {N} findings ({critical} critical, {major} major, {minor} minor)
334
+ - {change 1 summary}
335
+ - {change 2 summary}
336
+
337
+ Still pending (needs human decision): {N}
338
+ - F00X [{severity}] {finding summary} ← open findings file in Review Board
339
+
340
+ {If PRD}: Version bumped: {old} → {new}
341
+ {If BDD}: bdd_version: {old} → {new}
342
+
343
+ Findings file:
344
+ {If PRD}: {paths.refinement_dir}/{prd-slug}-review-context-findings.yaml
345
+ {If BDD}: {paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml
346
+ Re-run /review-context {file} to confirm 0 remaining critical findings.
347
+ ```
348
+
349
+ If 0 findings were auto-fixable → print:
350
+ ```
351
+ Nothing to auto-fix. All {N} findings require human decision.
352
+ Open findings file in Review Board → then run: /review-context --resume {file}
353
+ ```
354
+
355
+ ---
356
+
357
+ ## Resume Mode — Apply Accepted Findings
358
+
359
+ *Triggered when `$ARGUMENTS` contains `--resume`.*
360
+ *Example: `/review-context --resume specs/payment/process-payment/prd.md`*
361
+
362
+ ### Phase 1 — Read accepted findings
363
+
364
+ 1. Derive findings filename from target file using the same rule as Detect Review Mode:
365
+ - PRD: `{paths.refinement_dir}/{prd-slug}-review-context-findings.yaml`
366
+ - BDD: `{paths.refinement_dir}/{uc-id}-review-bdd-findings.yaml`
367
+ 2. Read the findings file.
368
+ 3. Collect findings where `status: "accepted"` or `status: "modified"`.
369
+ 4. If none → report "No accepted findings. File unchanged." and stop.
370
+
371
+ ### Phase 2 — Apply fixes
372
+
373
+ Apply in order: critical → major → minor.
374
+
375
+ **For PRD findings:**
376
+ | check_id | What to do |
377
+ |----------|-----------|
378
+ | P0.3 (Missing status) | Add `@trace.status: draft` to frontmatter |
379
+ | P1 (Banned term) | Replace every occurrence of banned term with canonical term |
380
+ | P2 (Ambiguity) | Apply the fix stated in `suggestion` or `modified` note |
381
+ | P3 (Conflict) | Apply the resolution stated in the modified note |
382
+ | P4 (Structure) | Add the missing section/metadata field |
383
+ | P5 (Custom) | Apply as stated in suggestion/note |
384
+
385
+ → After applying, bump PRD version (minor) and add Changelog entry.
386
+
387
+ **For BDD findings:**
388
+ | check_id | What to do |
389
+ |----------|-----------|
390
+ | B1 (Coverage gap) | Generate new scenario(s) for the uncovered AC/BR and insert into correct NHÓM |
391
+ | B2 (Terminology) | Replace banned terms, fix entity/field names |
392
+ | B3 (Gherkin rule) | Apply rule-specific fix (replace tech terms, add concrete values, etc.) |
393
+ | B4 (Compliance) | Add NHÓM grouping, fix @trace tags |
394
+ | B5 (Metadata) | Add missing @trace headers, regenerate Coverage Matrix / Pre-merge Checklist |
395
+ | B6 (Side effects) | Add missing `And <side-effect>` to Then block |
396
+
397
+ → After applying, increment `@trace.bdd_version` in file header by 0.1.
398
+ → Also update `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv`: set `bdd_version` column to the new `@trace.bdd_version` value for all rows, and set `last_updated` to today's date.
399
+
400
+ ### Phase 3 — Report
401
+
402
+ ```
403
+ /review-context --resume Applied — {target file}
404
+ Applied : {N} findings ({critical} critical, {major} major, {minor} minor)
405
+ Skipped : {N} rejected/deferred
406
+
407
+ Changes:
408
+ - {change 1 summary}
409
+ - {change 2 summary}
410
+
411
+ {If PRD}: Version bumped: {old} → {new}
412
+ {If BDD}: bdd_version: {old} → {new}
413
+
414
+ Re-run /review-context {file} to confirm 0 remaining critical findings.
415
+ ```