@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,349 @@
1
+ # /generate-code — Generate Implementation Code
2
+
3
+ ## Gate
4
+ {{include:steps/gate.md}}
5
+
6
+ *Note: For this command, the target in Step 1 is a `.feature` file or UC-ID. If `$ARGUMENTS` is a UC-ID, find the matching feature file by globbing `{paths.specs_dir}/{domain}/*/bdd/**/{UC-ID}*.feature` (wildcard `*` for the unknown prd-slug, recursive `**` to cover the `web/`·`app/`·`system/` platform subfolders); take `domain` + `prd_slug` from the matched path. Also check `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv` for drift (new vs drifted vs synced).*
7
+
8
+ ## Context
9
+ {{include:steps/context-loader.md}}
10
+
11
+ ---
12
+
13
+ ## Scope Lock
14
+
15
+ This command is strictly scoped to the **single feature file** passed as `$ARGUMENTS`:
16
+
17
+ - Feature file: `{exact path from $ARGUMENTS}`
18
+ - UC: `{UC-ID}` (read from `@trace.id` in that file's header)
19
+
20
+ **Do NOT read or implement scenarios from any other `.feature` file** in the same domain folder, even if they share the same entity, domain concept, or service name.
21
+
22
+ ---
23
+
24
+ ## Context Load (additional)
25
+
26
+ Read:
27
+ 1. The scoped `.feature` file only
28
+ 2. Tech-doc at `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design.md` (if exists)
29
+ 3. CLAUDE.md §architecture + §coding_standards
30
+ 4. **(FE/App only)** Design Spec at `{paths.specs_dir}/{domain}/{prd-slug}/design-spec/{TICKET-ID}-design-spec-*{slug}.md` (if exists) — source of screens, component inventory, and the per-screen Figma frame links.
31
+
32
+ ---
33
+
34
+ ## Phase Detection
35
+
36
+ Parse `$ARGUMENTS` for a `--phase` flag:
37
+
38
+ | Flag | Meaning |
39
+ |---|---|
40
+ | `--phase=ui` | FE Phase 1 — generate UI + mock API layer from System BDD contract |
41
+ | `--phase=integration` | FE Phase 2 — replace mock adapter with real API calls from tech docs |
42
+ | *(none)* | Default — full implementation (BE or full-stack without mock split) |
43
+
44
+ **If `--phase` is set — confirm platform:**
45
+ Read `@trace.platform` from the feature file header.
46
+ - If `system` → warn: "`--phase` flag is not applicable for system BDD (BE-facing). Proceeding with default mode." Treat as no flag.
47
+ - If `web` or `app` → continue with phase logic below.
48
+
49
+ **If `--phase=ui`:**
50
+ Resolve the **mock shape source** (hybrid — prefer the real contract, fall back to System BDD):
51
+ - **BE contract** `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design.md` — if it exists, the mock adapter's port/DTO **shape** (request/response fields, types, error codes) comes from here → `mock_source = contract`. Most accurate; no shape rework at integration.
52
+ - **System BDD** `{paths.specs_dir}/{domain}/{prd-slug}/bdd/system/{TICKET-ID}*.feature` — always load `Then` clauses for **behavior + fixture values**. If no BE contract, the shape is inferred from these too → `mock_source = system-bdd`, and WARN:
53
+ ```
54
+ ⚠ BE contract not found — mock shape inferred from System BDD only.
55
+ System BDD describes behavior, not full request/response shape — the mock
56
+ may differ from the real API; expect adjustment at --phase=integration.
57
+ (Recommended: have BE publish {prd-slug}/tech-docs/{UC-ID}-tech-design.md first for an accurate mock.)
58
+ ```
59
+ - If System BDD is also missing → warn "System BDD not found — mock layer will use placeholder fixtures." Continue.
60
+
61
+ Store `mock_source` (`contract` | `system-bdd`) for the mock tags below.
62
+
63
+ **Then run the Figma Dev Mode MCP Check below** before generating any UI — the Design
64
+ Spec's frame links are the visual contract, and the local MCP reads them with far more
65
+ fidelity than a plain web link.
66
+
67
+ ---
68
+
69
+ ## Figma Dev Mode MCP Check *(FE/App UI generation only)*
70
+
71
+ *Run this only when `platform` is `web`/`app` AND generating UI (`--phase=ui`, or default
72
+ mode for an FE/App feature). Skip entirely for BE / `system` platform.*
73
+
74
+ The PO authored the Design Spec from **Figma web links** (read-only, limited). For
75
+ codegen, the **local Figma Dev Mode MCP server** (built into the Figma **desktop app**)
76
+ gives far more: exact layout, design **variables/tokens**, **Code Connect** component
77
+ mappings, selection context, and code snippets — things a web URL alone cannot return.
78
+
79
+ **Step 1 — Detect the local MCP.** Check whether a Figma Dev Mode MCP server is connected
80
+ (a `get_design_context` / `get_code` style Figma tool is available via MCP).
81
+
82
+ **Step 2 — If NOT connected → suggest the dev enable it, then wait:**
83
+
84
+ ```
85
+ 🎨 Figma Dev Mode MCP not detected.
86
+ For accurate FE code (real tokens, components, Code Connect), use the LOCAL server:
87
+
88
+ 1. Open the Figma DESKTOP app (not the browser)
89
+ 2. Open the file/frame for this feature
90
+ 3. Enable the Dev Mode MCP server:
91
+ Figma menu → Preferences → "Enable Dev Mode MCP Server"
92
+ (requires Dev or Full seat; server runs at http://127.0.0.1:3845)
93
+ 4. Make sure this MCP server is added in your Claude Code MCP config
94
+ 5. Select the frame for the screen you're implementing, then continue
95
+
96
+ Type C to continue once enabled, or S to skip (fall back to web links + text spec).
97
+ ```
98
+
99
+ - `C` → re-detect; if now connected → proceed using the local MCP.
100
+ - `S` → proceed in **fallback mode**: use the Design Spec's web frame links + textual spec
101
+ only; add a ⚠️ note in the final report that UI was generated without local Figma fidelity.
102
+
103
+ **Step 3 — When the local MCP IS connected:** for each screen being implemented, pull the
104
+ selected frame via the Figma MCP and ground the UI on the returned layout, variables, and
105
+ Code Connect mappings. Prefer Code-Connect-mapped components over inventing markup; use the
106
+ real token names, not hardcoded values.
107
+
108
+ **If `--phase=integration`:**
109
+ Resolve the design that drives the adapter (two layers):
110
+ - **FE tech-design** (preferred — the port→endpoint→DTO mapping): `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design-{platform}.md` §4, produced by `/generate-tech-docs` (FE path).
111
+ - **BE API contract** (endpoint/shape source): `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design.md`.
112
+
113
+ Read `@trace.status` of whichever drives the adapter (the FE doc if present, else the BE contract).
114
+ If `draft` or `in-review` → warn:
115
+ ```
116
+ ⚠ Tech design for {UC-ID} ({platform}) is {status}.
117
+ Contract / adapter mapping may still change.
118
+ Proceeding — ensure BE endpoint is deployed or confirm the mapping manually.
119
+ ```
120
+ If the FE tech-design is **missing** → warn: "No FE tech-design found — falling back to the BE contract directly (adapter mapping inferred). Recommended: run `/generate-tech-docs {web|app .feature}` first."
121
+ Locate existing mock adapter from `--phase=ui` run (search for `{UC-ID}MockApiAdapter` in `{paths.src_dir}/{domain}/`).
122
+ If not found → warn: "Mock adapter not found — generating real API adapter from scratch using tech-doc contract."
123
+
124
+ ---
125
+
126
+ ## Read Trace State
127
+
128
+ Read `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv` if it exists. For each scenario row, note its current `status`:
129
+
130
+ | Status | Meaning | Action in this run |
131
+ |--------|---------|-------------------|
132
+ | `UNTRACKED` | `implemented_by == —` | Generate — scenario has no code yet |
133
+ | `DRIFT` | `spec_ver != gen_ver` | Regenerate — scenario updated since last codegen |
134
+ | `OK` | implemented + tested | Skip unless explicitly re-generating |
135
+ | `GAP` | implemented, no tests | Skip codegen — already coded; run `/dev-gen-test` instead |
136
+
137
+ Use these statuses to populate the **Scenarios** count in the CHECKPOINT plan (`{X} new, {Y} drifted, {Z} synced-skip`).
138
+ If `.tsv` does not exist → treat all scenarios as `UNTRACKED`.
139
+
140
+ ---
141
+
142
+ ## File Scan
143
+
144
+ Before generating, determine which files will be needed for this UC's scenarios. Check whether each file already exists on disk.
145
+
146
+ Classify each file:
147
+
148
+ | Status | Meaning | Action |
149
+ |--------|---------|--------|
150
+ | `CREATE` | File does not exist | Generate full new file |
151
+ | `EXTEND` | File exists, new methods needed | Add new methods only — do NOT rewrite existing code |
152
+ | `SKIP` | File exists and already covers all UC scenarios | Leave untouched |
153
+
154
+ > **EXTEND rule:** Read the existing file fully. Locate the correct class/interface. Add only the methods required by `{UC-ID}` scenarios. Preserve all existing methods, fields, and annotations exactly as-is. Attach `@trace.implements={UC-ID}-SC{N}` on each new method.
155
+
156
+ ---
157
+
158
+ ## CHECKPOINT — Code Generation Plan
159
+
160
+ Before generating any code, show:
161
+
162
+ ```
163
+ Code Generation Plan — {UC-ID}
164
+ ──────────────────────────────────────────────────────
165
+ Feature : {name}
166
+ Ticket : {TICKET_ID if known}
167
+ Domain : {domain}
168
+ UC : {UC-ID} only ← other feature files in this folder are NOT read
169
+ Tech : {language} / {framework}
170
+ Phase : {UI — mock layer | Integration — real API | Default — full} ← omit if no --phase flag
171
+ Scenarios: {N} total ({X} new, {Y} drifted, {Z} synced-skip)
172
+ Layer : {from CLAUDE.md §2}
173
+
174
+ Files:
175
+ CREATE {N} new files
176
+ + {path/FileName.ext}
177
+ EXTEND {M} existing files (add methods only)
178
+ ~ {path/FileName.ext} — adding: {methodA}, {methodB}
179
+ SKIP {K} files (no change needed)
180
+ = {path/FileName.ext}
181
+ ──────────────────────────────────────────────────────
182
+ Proceed? (Y/N)
183
+ ```
184
+
185
+ Wait for explicit "Y" before generating.
186
+
187
+ ## Branch
188
+ ```bash
189
+ git checkout -b feature/{TICKET_ID}-{slug}
190
+ ```
191
+
192
+ ## Generate (layer order from CLAUDE.md §2)
193
+
194
+ Default order (override from CLAUDE.md if different):
195
+ DTOs → Entity/Model → Repository → Service interface → Service impl → Facade (if applicable) → Controller
196
+
197
+ **For `CREATE` files:** generate the full file.
198
+
199
+ **For `EXTEND` files:** open the existing file → add only the new methods for `{UC-ID}` → do not touch anything else.
200
+
201
+ **Traceability tags on controller/handler (adapt to your language's comment syntax):**
202
+ ```
203
+ @trace.implements={UC-ID}-SC{N}
204
+ @trace.prd_version={read @trace.prd_version from the .feature file header}
205
+ @trace.bdd_version={read @trace.bdd_version from the .feature file header}
206
+ @trace.tech_doc_revision={read @trace.revision from tech-doc header, or omit if no tech-doc}
207
+ @trace.source={paths.specs_dir}/{domain}/{prd-slug}/bdd/{UC-ID}-{slug}.feature
208
+ ```
209
+
210
+ `@trace.prd_version` records which PRD version this code was written against.
211
+ `@trace.bdd_version` records which BDD version this code was generated from.
212
+ `@trace.tech_doc_revision` records which tech-design revision this code follows.
213
+ `/validate-traces` will flag drift if any upstream artifact is updated to a newer version.
214
+
215
+ > **Entry-point rule:** `@trace.implements` must appear on the **entry-point layer** as defined in `CLAUDE.md §2`. For REST APIs → Controller. For event-driven modules → event handler / consumer class. For context-engineering → the prompt orchestration function. Never put it only on an inner layer.
216
+
217
+ ### Test Selectors — emit stable element IDs *(FE/App UI only)*
218
+
219
+ *Applies when `platform` is `web`/`app` and generating UI (`--phase=ui`, or default FE/App mode). Skip for BE.*
220
+
221
+ Every **actionable** element (button, input, link, select, toggle, form-submit) MUST carry a **stable test-id** so QC locates it directly (no runtime scan):
222
+
223
+ 1. **Source the id.** If the FE tech-design `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design-{platform}.md` exists, take ids **verbatim** from its §2b Test Selectors table (the contract). If it does not exist yet (e.g. `--phase=ui` before the FE tech-design), **generate ids by the convention** `{uc-lower}-{screen}-{element}-{type}` (e.g. `ft001-login-submit-btn`) so QC still has stable handles — they will be reconciled to the tech-design's §2b at integration.
224
+ 2. **Emit via the platform attribute** (from `@trace.testid_attr`, or by module):
225
+ - web (`react`/`nextjs`/`vue`/`angular`) → `data-testid="..."`
226
+ - React Native → `testID="..."`
227
+ - Flutter → `Key('...')` (+ `Semantics(identifier: '...')` where the action needs it)
228
+ - native iOS → `accessibilityIdentifier = "..."`
229
+ 3. Only actionable elements; do not spam ids on static text. Keep ids identical to the tech-design map so QC Page Objects match on the first try.
230
+ 4. **Reused catalog component?** Pass the id via its **forwarding prop** (see the catalog `## Test-ID Forwarding` section — e.g. `<Button testId="ft001-login-submit-btn">`), not a raw attribute. If the component does not forward a test-id, or you are backfilling **existing/brownfield** screens (not freshly generated here), that is `/map-testids {UC-ID}`'s job — run it instead of editing shared components inline.
231
+
232
+ ## Mock API Layer (`--phase=ui` only)
233
+
234
+ *Skip this section entirely if `--phase` is not `ui`.*
235
+
236
+ Build the mock from the `mock_source` resolved in Phase Detection — **shape** from the BE contract when present, **fixture values + behavior** always from System BDD `Then` clauses:
237
+
238
+ 1. **Define the port shape** `{UC-ID}ApiPort` (request/response DTOs + error codes):
239
+ - `mock_source = contract` → field names / types / error codes taken **verbatim from the BE contract** §2 (API Endpoints) / §3 (Data Model) — the real shape.
240
+ - `mock_source = system-bdd` → shape **inferred** from System BDD `Then` clauses (provisional — see warning above).
241
+ 2. **Extract fixture data** per scenario from System BDD `Then` clauses — success + error responses (BDD is the source of truth for *values / behavior*, regardless of shape source).
242
+ 3. **Generate mock adapter** at `{paths.src_dir}/{domain}/{UC-ID}MockApiAdapter.{ext}`:
243
+ - Implements interface `{UC-ID}ApiPort` (same interface the real adapter will implement)
244
+ - Each method returns fixture data matching the BDD `Then` clause, in the port shape
245
+ - Include both success and error states (map to error scenarios in BDD)
246
+ - Traceability tags:
247
+ ```
248
+ @trace.mock_for={UC-ID}
249
+ @trace.mock_source={contract | system-bdd}
250
+ @trace.system_bdd={paths.specs_dir}/{domain}/{prd-slug}/bdd/system/{UC-ID}*.feature
251
+ {@trace.be_contract={UC-ID}-tech-design.md # only when mock_source=contract}
252
+ ```
253
+ 4. **Wire into service/hook layer** via environment flag or DI:
254
+ ```
255
+ const adapter = IS_MOCK ? new {UC-ID}MockApiAdapter() : new {UC-ID}ApiAdapter()
256
+ ```
257
+ - `IS_MOCK` defaults to `true` in development/test env until real adapter is generated.
258
+
259
+ > Tester uses the mock adapter to test all FE scenarios without waiting for BE to **deploy**.
260
+ > Shape comes from the BE contract when available (accurate, no integration rework); else from System BDD (provisional — adjust at `--phase=integration`). Fixture *values* always come from System BDD — BDD is the source of truth for behavior.
261
+
262
+ ---
263
+
264
+ ## Integration Phase (`--phase=integration` only)
265
+
266
+ *Skip this section entirely if `--phase` is not `integration`.*
267
+
268
+ 1. **Read the integration design.** Prefer the FE tech-design §4 (port→endpoint→DTO→error mapping) at `{paths.tech_docs_dir}/{domain}/{prd-slug}/tech-docs/{UC-ID}-tech-design-{platform}.md`, using the BE API contract `{UC-ID}-tech-design.md` as the endpoint / request-response / error-code source. If no FE tech-design exists, extract endpoints + shapes + error codes directly from the BE contract.
269
+ 2. **Read existing mock adapter** interface (`{UC-ID}ApiPort`) from the `--phase=ui` output.
270
+ 3. **Generate real API adapter** at `{paths.src_dir}/{domain}/{UC-ID}ApiAdapter.{ext}`:
271
+ - Implements the same `{UC-ID}ApiPort` interface as mock adapter
272
+ - Makes real HTTP calls to endpoints from tech-doc contract
273
+ - Maps response fields to the same shapes the mock adapter returned
274
+ - Traceability tags:
275
+ ```
276
+ @trace.implements={UC-ID}-SC{N}
277
+ @trace.tech_doc_revision={read from tech-doc header}
278
+ ```
279
+ 4. **Flip wire-up**: switch DI binding / env flag so service/hook uses `{UC-ID}ApiAdapter` (real) instead of mock.
280
+ 5. **Do NOT delete mock adapter** — keep it for unit testing.
281
+
282
+ ---
283
+
284
+ ## Self-Review (3 rounds)
285
+ - [ ] Every scenario has a corresponding endpoint
286
+ - [ ] @trace.implements on every endpoint
287
+ - [ ] Architecture layer rules respected (CLAUDE.md §2)
288
+ - [ ] Error handling matches CLAUDE.md §5
289
+ - [ ] No magic numbers, no debug logging
290
+
291
+ ## Build Verify
292
+ ```bash
293
+ {conventions.build_command} # from project-context.yaml, max 3 retries
294
+ ```
295
+
296
+ ## Write Trace State
297
+
298
+ Update `{paths.trace_dir}/{domain}/{prd-slug}/{UC-ID}.tsv` — for each implemented scenario, find the existing row by `sc_id` and update only these columns. *(Umbrella + `spec_source`: `trace_dir` resolves to `{spec_source}/.trace` — this command runs from `service_root` but writes the trace row into the **spec repo** (cross-repo); commit/push the spec submodule for the trace update, alongside the 2-tier code push.)*
299
+
300
+ | Column | Value |
301
+ |--------|-------|
302
+ | `gen_ver` | copy `spec_ver` from the current `.tsv` row (= scenario version at time of codegen) |
303
+ | `implemented_by` | `{ControllerClass}.{methodName}` |
304
+ | `bdd_version` | `@trace.bdd_version` from `.feature` header |
305
+ | `tech_doc_revision` | `@trace.revision` from the **BE** contract `{UC-ID}-tech-design.md`, or `—` if none |
306
+ | `fe_tech_doc_revision` | `@trace.revision` from the **FE** tech-design `{UC-ID}-tech-design-{platform}.md` when generating FE with `--phase=integration` (the doc whose §4 drove this adapter); `—` for BE, or for FE `--phase=ui` / no FE tech-design |
307
+ | `fe_phase` | `ui` if `--phase=ui` \| `integrated` if `--phase=integration` \| `—` if no phase flag |
308
+ | `last_updated` | today `YYYY-MM-DD` |
309
+
310
+ Leave all other columns (`sc_title`, `spec_ver`, `prd_version`, `prd_status`, `uc_status`, `test_count`, `test_classes`, `dev_selftest`, `dev_selftest_at`, `qc_status`, `qc_run_at`, `qc_owner`, `qc_blocked_by`) unchanged.
311
+ `status` is computed by `/validate-traces` — do not set here.
312
+
313
+ ## Refresh Panel Mirror
314
+ {{include:steps/trace-mirror.md}}
315
+
316
+ ## Commit
317
+ ```bash
318
+ git add {files}
319
+ git commit -m "{commit_format}: {description}"
320
+ ```
321
+
322
+ ## Output
323
+
324
+ {{include:steps/report-footer.md}}
325
+
326
+ ```
327
+ /generate-code Complete — {UC-ID}
328
+ Files: created={N}, extended={M}, skipped={K} | Build: SUCCESS
329
+ Branch: feature/{TICKET_ID}-{slug}
330
+ Phase : {UI (mock layer) | Integration (real API) | Default (full)}
331
+ fe_phase : {ui | integrated | —}
332
+ Figma : {local Dev Mode MCP (grounded) | ⚠️ web links + text spec only (no local MCP) | n/a for BE} ← FE/App UI only
333
+
334
+ Next:
335
+ --phase=ui done:
336
+ → Notify tester: FE is testable via mock adapter
337
+ → Collect BE sign-offs → /review-tech-docs {tech-design-file}
338
+ → When BE ready → /generate-code {feature-file} --phase=integration
339
+
340
+ --phase=integration done:
341
+ → /review-code {UC-ID} ← code review required
342
+ → /dev-gen-test {UC-ID} ← integration test suite
343
+
344
+ Default (no phase flag):
345
+ → /review-code {UC-ID} ← code review required before tests
346
+ → /dev-gen-test {UC-ID}
347
+
348
+ 📊 Living Docs: run /validate-traces (or /sync) to push this trace to the spec-module dashboard.
349
+ ```