forgecraft-mcp 1.4.0 → 1.7.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 (418) hide show
  1. package/LICENSE +67 -0
  2. package/README.md +527 -525
  3. package/dist/analyzers/anchors/anchor-loader.d.ts +47 -0
  4. package/dist/analyzers/anchors/anchor-loader.d.ts.map +1 -0
  5. package/dist/analyzers/anchors/anchor-loader.js +113 -0
  6. package/dist/analyzers/anchors/anchor-loader.js.map +1 -0
  7. package/dist/analyzers/anti-pattern.d.ts.map +1 -1
  8. package/dist/analyzers/anti-pattern.js +38 -26
  9. package/dist/analyzers/anti-pattern.js.map +1 -1
  10. package/dist/analyzers/completeness-helpers.d.ts +5 -0
  11. package/dist/analyzers/completeness-helpers.d.ts.map +1 -1
  12. package/dist/analyzers/completeness-helpers.js +17 -0
  13. package/dist/analyzers/completeness-helpers.js.map +1 -1
  14. package/dist/analyzers/completeness.d.ts.map +1 -1
  15. package/dist/analyzers/completeness.js +4 -4
  16. package/dist/analyzers/completeness.js.map +1 -1
  17. package/dist/analyzers/gs-scorer.d.ts +3 -1
  18. package/dist/analyzers/gs-scorer.d.ts.map +1 -1
  19. package/dist/analyzers/gs-scorer.js +5 -2
  20. package/dist/analyzers/gs-scorer.js.map +1 -1
  21. package/dist/analyzers/package-json.d.ts.map +1 -1
  22. package/dist/analyzers/package-json.js +194 -34
  23. package/dist/analyzers/package-json.js.map +1 -1
  24. package/dist/analyzers/scorers/composable-scorer.d.ts +4 -2
  25. package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -1
  26. package/dist/analyzers/scorers/composable-scorer.js +50 -2
  27. package/dist/analyzers/scorers/composable-scorer.js.map +1 -1
  28. package/dist/analyzers/scorers/executable-scorer.d.ts +3 -2
  29. package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -1
  30. package/dist/analyzers/scorers/executable-scorer.js +64 -4
  31. package/dist/analyzers/scorers/executable-scorer.js.map +1 -1
  32. package/dist/analyzers/scorers/scorer-utils.d.ts +5 -3
  33. package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -1
  34. package/dist/analyzers/scorers/scorer-utils.js +34 -9
  35. package/dist/analyzers/scorers/scorer-utils.js.map +1 -1
  36. package/dist/analyzers/scorers/self-describing-scorer.d.ts +7 -4
  37. package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -1
  38. package/dist/analyzers/scorers/self-describing-scorer.js +17 -18
  39. package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -1
  40. package/dist/cli/help.js +51 -51
  41. package/dist/disciplines/catalog.d.ts +16 -0
  42. package/dist/disciplines/catalog.d.ts.map +1 -0
  43. package/dist/disciplines/catalog.js +196 -0
  44. package/dist/disciplines/catalog.js.map +1 -0
  45. package/dist/disciplines/runner.d.ts +13 -0
  46. package/dist/disciplines/runner.d.ts.map +1 -0
  47. package/dist/disciplines/runner.js +35 -0
  48. package/dist/disciplines/runner.js.map +1 -0
  49. package/dist/registry/composer.d.ts.map +1 -1
  50. package/dist/registry/composer.js +9 -4
  51. package/dist/registry/composer.js.map +1 -1
  52. package/dist/registry/loader-tag.d.ts.map +1 -1
  53. package/dist/registry/loader-tag.js +1 -0
  54. package/dist/registry/loader-tag.js.map +1 -1
  55. package/dist/registry/remote-gates.js +1 -1
  56. package/dist/registry/remote-gates.js.map +1 -1
  57. package/dist/registry/renderer-skeletons.js +92 -92
  58. package/dist/registry/sentinel-renderer.js +299 -20
  59. package/dist/registry/sentinel-renderer.js.map +1 -1
  60. package/dist/sentinel/detect.d.ts +41 -0
  61. package/dist/sentinel/detect.d.ts.map +1 -0
  62. package/dist/sentinel/detect.js +122 -0
  63. package/dist/sentinel/detect.js.map +1 -0
  64. package/dist/sentinel/write.d.ts +54 -0
  65. package/dist/sentinel/write.d.ts.map +1 -0
  66. package/dist/sentinel/write.js +75 -0
  67. package/dist/sentinel/write.js.map +1 -0
  68. package/dist/shared/cnt-health.d.ts +16 -0
  69. package/dist/shared/cnt-health.d.ts.map +1 -1
  70. package/dist/shared/cnt-health.js +55 -8
  71. package/dist/shared/cnt-health.js.map +1 -1
  72. package/dist/shared/config.d.ts +14 -0
  73. package/dist/shared/config.d.ts.map +1 -1
  74. package/dist/shared/config.js +45 -0
  75. package/dist/shared/config.js.map +1 -1
  76. package/dist/shared/gs-score-logger.js +6 -6
  77. package/dist/shared/hook-installer.d.ts +58 -0
  78. package/dist/shared/hook-installer.d.ts.map +1 -0
  79. package/dist/shared/hook-installer.js +316 -0
  80. package/dist/shared/hook-installer.js.map +1 -0
  81. package/dist/shared/project-gates-helpers.d.ts +9 -0
  82. package/dist/shared/project-gates-helpers.d.ts.map +1 -1
  83. package/dist/shared/project-gates-helpers.js +35 -0
  84. package/dist/shared/project-gates-helpers.js.map +1 -1
  85. package/dist/shared/types/config.d.ts +7 -1
  86. package/dist/shared/types/config.d.ts.map +1 -1
  87. package/dist/shared/types/gates.d.ts +34 -0
  88. package/dist/shared/types/gates.d.ts.map +1 -1
  89. package/dist/shared/types/project.d.ts +68 -2
  90. package/dist/shared/types/project.d.ts.map +1 -1
  91. package/dist/shared/types/project.js +1 -0
  92. package/dist/shared/types/project.js.map +1 -1
  93. package/dist/shared/types/templates.d.ts +8 -1
  94. package/dist/shared/types/templates.d.ts.map +1 -1
  95. package/dist/shared/types/verify.d.ts +51 -1
  96. package/dist/shared/types/verify.d.ts.map +1 -1
  97. package/dist/shared/types/verify.js +37 -1
  98. package/dist/shared/types/verify.js.map +1 -1
  99. package/dist/tools/add-hook.d.ts.map +1 -1
  100. package/dist/tools/add-hook.js +8 -1
  101. package/dist/tools/add-hook.js.map +1 -1
  102. package/dist/tools/add-module.js +123 -123
  103. package/dist/tools/advice-registry.d.ts.map +1 -1
  104. package/dist/tools/advice-registry.js +108 -18
  105. package/dist/tools/advice-registry.js.map +1 -1
  106. package/dist/tools/advise-session-advisor.d.ts +16 -0
  107. package/dist/tools/advise-session-advisor.d.ts.map +1 -0
  108. package/dist/tools/advise-session-advisor.js +89 -0
  109. package/dist/tools/advise-session-advisor.js.map +1 -0
  110. package/dist/tools/advise-session-signals.d.ts +21 -0
  111. package/dist/tools/advise-session-signals.d.ts.map +1 -0
  112. package/dist/tools/advise-session-signals.js +113 -0
  113. package/dist/tools/advise-session-signals.js.map +1 -0
  114. package/dist/tools/advise-session.d.ts +22 -0
  115. package/dist/tools/advise-session.d.ts.map +1 -0
  116. package/dist/tools/advise-session.js +31 -0
  117. package/dist/tools/advise-session.js.map +1 -0
  118. package/dist/tools/analyze-harness.d.ts +18 -0
  119. package/dist/tools/analyze-harness.d.ts.map +1 -0
  120. package/dist/tools/analyze-harness.js +298 -0
  121. package/dist/tools/analyze-harness.js.map +1 -0
  122. package/dist/tools/audit.d.ts.map +1 -1
  123. package/dist/tools/audit.js +19 -0
  124. package/dist/tools/audit.js.map +1 -1
  125. package/dist/tools/change-request.d.ts +53 -0
  126. package/dist/tools/change-request.d.ts.map +1 -0
  127. package/dist/tools/change-request.js +395 -0
  128. package/dist/tools/change-request.js.map +1 -0
  129. package/dist/tools/check-cascade-contracts.d.ts +13 -0
  130. package/dist/tools/check-cascade-contracts.d.ts.map +1 -1
  131. package/dist/tools/check-cascade-contracts.js +73 -2
  132. package/dist/tools/check-cascade-contracts.js.map +1 -1
  133. package/dist/tools/check-cascade-report.js +64 -64
  134. package/dist/tools/check-cascade-steps.d.ts +3 -0
  135. package/dist/tools/check-cascade-steps.d.ts.map +1 -1
  136. package/dist/tools/check-cascade-steps.js +104 -15
  137. package/dist/tools/check-cascade-steps.js.map +1 -1
  138. package/dist/tools/check-cascade.d.ts +4 -3
  139. package/dist/tools/check-cascade.d.ts.map +1 -1
  140. package/dist/tools/check-cascade.js +30 -12
  141. package/dist/tools/check-cascade.js.map +1 -1
  142. package/dist/tools/check-derivation-chain.d.ts +37 -0
  143. package/dist/tools/check-derivation-chain.d.ts.map +1 -0
  144. package/dist/tools/check-derivation-chain.js +418 -0
  145. package/dist/tools/check-derivation-chain.js.map +1 -0
  146. package/dist/tools/check-spec-consistency.d.ts +25 -0
  147. package/dist/tools/check-spec-consistency.d.ts.map +1 -0
  148. package/dist/tools/check-spec-consistency.js +339 -0
  149. package/dist/tools/check-spec-consistency.js.map +1 -0
  150. package/dist/tools/check-t4.d.ts +54 -0
  151. package/dist/tools/check-t4.d.ts.map +1 -0
  152. package/dist/tools/check-t4.js +305 -0
  153. package/dist/tools/check-t4.js.map +1 -0
  154. package/dist/tools/close-cycle.d.ts +11 -0
  155. package/dist/tools/close-cycle.d.ts.map +1 -1
  156. package/dist/tools/close-cycle.js +364 -4
  157. package/dist/tools/close-cycle.js.map +1 -1
  158. package/dist/tools/cnt-add-routing.d.ts +31 -0
  159. package/dist/tools/cnt-add-routing.d.ts.map +1 -0
  160. package/dist/tools/cnt-add-routing.js +99 -0
  161. package/dist/tools/cnt-add-routing.js.map +1 -0
  162. package/dist/tools/configure-mcp.d.ts.map +1 -1
  163. package/dist/tools/configure-mcp.js +52 -2
  164. package/dist/tools/configure-mcp.js.map +1 -1
  165. package/dist/tools/consolidate-status.d.ts +31 -0
  166. package/dist/tools/consolidate-status.d.ts.map +1 -1
  167. package/dist/tools/consolidate-status.js +105 -0
  168. package/dist/tools/consolidate-status.js.map +1 -1
  169. package/dist/tools/executable-gates.d.ts +52 -0
  170. package/dist/tools/executable-gates.d.ts.map +1 -0
  171. package/dist/tools/executable-gates.js +333 -0
  172. package/dist/tools/executable-gates.js.map +1 -0
  173. package/dist/tools/extract-adrs-from-spec.d.ts +33 -0
  174. package/dist/tools/extract-adrs-from-spec.d.ts.map +1 -0
  175. package/dist/tools/extract-adrs-from-spec.js +410 -0
  176. package/dist/tools/extract-adrs-from-spec.js.map +1 -0
  177. package/dist/tools/extract-adrs-history.d.ts +47 -0
  178. package/dist/tools/extract-adrs-history.d.ts.map +1 -0
  179. package/dist/tools/extract-adrs-history.js +265 -0
  180. package/dist/tools/extract-adrs-history.js.map +1 -0
  181. package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -1
  182. package/dist/tools/forgecraft-dispatch-extended.js +137 -0
  183. package/dist/tools/forgecraft-dispatch-extended.js.map +1 -1
  184. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
  185. package/dist/tools/forgecraft-dispatch.js +16 -0
  186. package/dist/tools/forgecraft-dispatch.js.map +1 -1
  187. package/dist/tools/forgecraft-schema-params.d.ts +174 -2
  188. package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
  189. package/dist/tools/forgecraft-schema-params.js +197 -0
  190. package/dist/tools/forgecraft-schema-params.js.map +1 -1
  191. package/dist/tools/forgecraft-schema.d.ts +179 -7
  192. package/dist/tools/forgecraft-schema.d.ts.map +1 -1
  193. package/dist/tools/forgecraft-schema.js +37 -0
  194. package/dist/tools/forgecraft-schema.js.map +1 -1
  195. package/dist/tools/generate-adr.js +6 -6
  196. package/dist/tools/generate-adr.js.map +1 -1
  197. package/dist/tools/generate-decision.d.ts +77 -0
  198. package/dist/tools/generate-decision.d.ts.map +1 -0
  199. package/dist/tools/generate-decision.js +162 -0
  200. package/dist/tools/generate-decision.js.map +1 -0
  201. package/dist/tools/generate-env-probe.d.ts +49 -0
  202. package/dist/tools/generate-env-probe.d.ts.map +1 -0
  203. package/dist/tools/generate-env-probe.js +365 -0
  204. package/dist/tools/generate-env-probe.js.map +1 -0
  205. package/dist/tools/generate-harness.d.ts +53 -0
  206. package/dist/tools/generate-harness.d.ts.map +1 -0
  207. package/dist/tools/generate-harness.js +395 -0
  208. package/dist/tools/generate-harness.js.map +1 -0
  209. package/dist/tools/generate-roadmap.d.ts +1 -1
  210. package/dist/tools/generate-roadmap.d.ts.map +1 -1
  211. package/dist/tools/generate-roadmap.js +38 -4
  212. package/dist/tools/generate-roadmap.js.map +1 -1
  213. package/dist/tools/generate-session-prompt.d.ts +3 -3
  214. package/dist/tools/generate-session-prompt.d.ts.map +1 -1
  215. package/dist/tools/generate-session-prompt.js +9 -1
  216. package/dist/tools/generate-session-prompt.js.map +1 -1
  217. package/dist/tools/generate-slo-probe.d.ts +53 -0
  218. package/dist/tools/generate-slo-probe.d.ts.map +1 -0
  219. package/dist/tools/generate-slo-probe.js +366 -0
  220. package/dist/tools/generate-slo-probe.js.map +1 -0
  221. package/dist/tools/layer-status-gates.d.ts +24 -0
  222. package/dist/tools/layer-status-gates.d.ts.map +1 -0
  223. package/dist/tools/layer-status-gates.js +151 -0
  224. package/dist/tools/layer-status-gates.js.map +1 -0
  225. package/dist/tools/layer-status.d.ts +126 -0
  226. package/dist/tools/layer-status.d.ts.map +1 -0
  227. package/dist/tools/layer-status.js +647 -0
  228. package/dist/tools/layer-status.js.map +1 -0
  229. package/dist/tools/list.d.ts.map +1 -1
  230. package/dist/tools/list.js +9 -5
  231. package/dist/tools/list.js.map +1 -1
  232. package/dist/tools/postcondition-coverage.d.ts +57 -0
  233. package/dist/tools/postcondition-coverage.d.ts.map +1 -0
  234. package/dist/tools/postcondition-coverage.js +256 -0
  235. package/dist/tools/postcondition-coverage.js.map +1 -0
  236. package/dist/tools/probe-runners.d.ts +21 -0
  237. package/dist/tools/probe-runners.d.ts.map +1 -0
  238. package/dist/tools/probe-runners.js +246 -0
  239. package/dist/tools/probe-runners.js.map +1 -0
  240. package/dist/tools/probe-templates.d.ts +27 -0
  241. package/dist/tools/probe-templates.d.ts.map +1 -0
  242. package/dist/tools/probe-templates.js +279 -0
  243. package/dist/tools/probe-templates.js.map +1 -0
  244. package/dist/tools/propose-session.d.ts +28 -0
  245. package/dist/tools/propose-session.d.ts.map +1 -0
  246. package/dist/tools/propose-session.js +333 -0
  247. package/dist/tools/propose-session.js.map +1 -0
  248. package/dist/tools/refresh-output.js +14 -14
  249. package/dist/tools/review-stubs.d.ts +29 -0
  250. package/dist/tools/review-stubs.d.ts.map +1 -0
  251. package/dist/tools/review-stubs.js +173 -0
  252. package/dist/tools/review-stubs.js.map +1 -0
  253. package/dist/tools/roadmap-builder.d.ts +49 -1
  254. package/dist/tools/roadmap-builder.d.ts.map +1 -1
  255. package/dist/tools/roadmap-builder.js +210 -5
  256. package/dist/tools/roadmap-builder.js.map +1 -1
  257. package/dist/tools/run-env-probe.d.ts +57 -0
  258. package/dist/tools/run-env-probe.d.ts.map +1 -0
  259. package/dist/tools/run-env-probe.js +270 -0
  260. package/dist/tools/run-env-probe.js.map +1 -0
  261. package/dist/tools/run-harness.d.ts +52 -0
  262. package/dist/tools/run-harness.d.ts.map +1 -0
  263. package/dist/tools/run-harness.js +279 -0
  264. package/dist/tools/run-harness.js.map +1 -0
  265. package/dist/tools/run-slo-probe.d.ts +50 -0
  266. package/dist/tools/run-slo-probe.d.ts.map +1 -0
  267. package/dist/tools/run-slo-probe.js +281 -0
  268. package/dist/tools/run-slo-probe.js.map +1 -0
  269. package/dist/tools/scaffold-spec-stubs.js +115 -115
  270. package/dist/tools/scaffold-templates.js +62 -62
  271. package/dist/tools/scaffold-writer.d.ts.map +1 -1
  272. package/dist/tools/scaffold-writer.js +9 -0
  273. package/dist/tools/scaffold-writer.js.map +1 -1
  274. package/dist/tools/score-rubric.d.ts +19 -0
  275. package/dist/tools/score-rubric.d.ts.map +1 -0
  276. package/dist/tools/score-rubric.js +411 -0
  277. package/dist/tools/score-rubric.js.map +1 -0
  278. package/dist/tools/session-prompt-builders.d.ts +20 -0
  279. package/dist/tools/session-prompt-builders.d.ts.map +1 -1
  280. package/dist/tools/session-prompt-builders.js +78 -5
  281. package/dist/tools/session-prompt-builders.js.map +1 -1
  282. package/dist/tools/session-prompt-sections.d.ts +4 -2
  283. package/dist/tools/session-prompt-sections.d.ts.map +1 -1
  284. package/dist/tools/session-prompt-sections.js +22 -10
  285. package/dist/tools/session-prompt-sections.js.map +1 -1
  286. package/dist/tools/setup-artifact-writers.d.ts +69 -4
  287. package/dist/tools/setup-artifact-writers.d.ts.map +1 -1
  288. package/dist/tools/setup-artifact-writers.js +681 -5
  289. package/dist/tools/setup-artifact-writers.js.map +1 -1
  290. package/dist/tools/setup-cnt-builders.d.ts.map +1 -1
  291. package/dist/tools/setup-cnt-builders.js +162 -34
  292. package/dist/tools/setup-cnt-builders.js.map +1 -1
  293. package/dist/tools/setup-monitoring.d.ts +41 -0
  294. package/dist/tools/setup-monitoring.d.ts.map +1 -0
  295. package/dist/tools/setup-monitoring.js +364 -0
  296. package/dist/tools/setup-monitoring.js.map +1 -0
  297. package/dist/tools/setup-phase1.d.ts.map +1 -1
  298. package/dist/tools/setup-phase1.js +14 -1
  299. package/dist/tools/setup-phase1.js.map +1 -1
  300. package/dist/tools/setup-phase2.d.ts +14 -0
  301. package/dist/tools/setup-phase2.d.ts.map +1 -1
  302. package/dist/tools/setup-phase2.js +130 -3
  303. package/dist/tools/setup-phase2.js.map +1 -1
  304. package/dist/tools/setup-project.d.ts +8 -0
  305. package/dist/tools/setup-project.d.ts.map +1 -1
  306. package/dist/tools/setup-project.js +52 -2
  307. package/dist/tools/setup-project.js.map +1 -1
  308. package/dist/tools/spec-parser-tags.d.ts.map +1 -1
  309. package/dist/tools/spec-parser-tags.js +1 -0
  310. package/dist/tools/spec-parser-tags.js.map +1 -1
  311. package/dist/tools/verify-formatter.d.ts.map +1 -1
  312. package/dist/tools/verify-formatter.js +15 -1
  313. package/dist/tools/verify-formatter.js.map +1 -1
  314. package/dist/tools/verify.d.ts.map +1 -1
  315. package/dist/tools/verify.js +3 -0
  316. package/dist/tools/verify.js.map +1 -1
  317. package/package.json +98 -89
  318. package/templates/analytics/instructions.yaml +37 -37
  319. package/templates/analytics/mcp-servers.yaml +11 -11
  320. package/templates/analytics/structure.yaml +25 -25
  321. package/templates/api/harness/uc-template.hurl +20 -0
  322. package/templates/api/instructions.yaml +231 -231
  323. package/templates/api/mcp-servers.yaml +22 -22
  324. package/templates/api/nfr.yaml +23 -23
  325. package/templates/api/review.yaml +103 -103
  326. package/templates/api/structure.yaml +34 -34
  327. package/templates/api/verification.yaml +132 -132
  328. package/templates/cli/instructions.yaml +31 -31
  329. package/templates/cli/mcp-servers.yaml +11 -11
  330. package/templates/cli/review.yaml +53 -53
  331. package/templates/cli/structure.yaml +16 -16
  332. package/templates/data-lineage/instructions.yaml +28 -28
  333. package/templates/data-lineage/mcp-servers.yaml +22 -22
  334. package/templates/data-pipeline/instructions.yaml +84 -84
  335. package/templates/data-pipeline/mcp-servers.yaml +13 -13
  336. package/templates/data-pipeline/nfr.yaml +39 -39
  337. package/templates/data-pipeline/structure.yaml +23 -23
  338. package/templates/docs-manifest.yaml +227 -0
  339. package/templates/fintech/hooks.yaml +55 -55
  340. package/templates/fintech/instructions.yaml +112 -112
  341. package/templates/fintech/mcp-servers.yaml +13 -13
  342. package/templates/fintech/nfr.yaml +46 -46
  343. package/templates/fintech/playbook.yaml +210 -210
  344. package/templates/fintech/verification.yaml +239 -239
  345. package/templates/game/harness/uc-template.sim.ts +29 -0
  346. package/templates/game/instructions.yaml +289 -289
  347. package/templates/game/mcp-servers.yaml +38 -38
  348. package/templates/game/nfr.yaml +64 -64
  349. package/templates/game/playbook.yaml +214 -214
  350. package/templates/game/review.yaml +97 -97
  351. package/templates/game/structure.yaml +67 -67
  352. package/templates/game/verification.yaml +174 -174
  353. package/templates/healthcare/instructions.yaml +42 -42
  354. package/templates/healthcare/mcp-servers.yaml +13 -13
  355. package/templates/healthcare/nfr.yaml +47 -47
  356. package/templates/hipaa/instructions.yaml +41 -41
  357. package/templates/hipaa/mcp-servers.yaml +13 -13
  358. package/templates/infra/instructions.yaml +104 -104
  359. package/templates/infra/mcp-servers.yaml +20 -20
  360. package/templates/infra/nfr.yaml +46 -46
  361. package/templates/infra/review.yaml +65 -65
  362. package/templates/infra/structure.yaml +25 -25
  363. package/templates/library/instructions.yaml +36 -36
  364. package/templates/library/mcp-servers.yaml +20 -20
  365. package/templates/library/review.yaml +56 -56
  366. package/templates/library/structure.yaml +19 -19
  367. package/templates/medallion-architecture/instructions.yaml +41 -41
  368. package/templates/medallion-architecture/mcp-servers.yaml +22 -22
  369. package/templates/ml/instructions.yaml +85 -85
  370. package/templates/ml/mcp-servers.yaml +11 -11
  371. package/templates/ml/nfr.yaml +39 -39
  372. package/templates/ml/structure.yaml +25 -25
  373. package/templates/ml/verification.yaml +156 -156
  374. package/templates/mobile/instructions.yaml +44 -44
  375. package/templates/mobile/mcp-servers.yaml +11 -11
  376. package/templates/mobile/nfr.yaml +49 -49
  377. package/templates/mobile/structure.yaml +27 -27
  378. package/templates/mobile/verification.yaml +121 -121
  379. package/templates/observability-xray/instructions.yaml +40 -40
  380. package/templates/observability-xray/mcp-servers.yaml +15 -15
  381. package/templates/realtime/instructions.yaml +42 -42
  382. package/templates/realtime/mcp-servers.yaml +13 -13
  383. package/templates/soc2/instructions.yaml +41 -41
  384. package/templates/soc2/mcp-servers.yaml +24 -24
  385. package/templates/social/instructions.yaml +43 -43
  386. package/templates/social/mcp-servers.yaml +24 -24
  387. package/templates/state-machine/instructions.yaml +42 -42
  388. package/templates/state-machine/mcp-servers.yaml +11 -11
  389. package/templates/tools-registry.yaml +164 -164
  390. package/templates/universal/claude-md-blocks/layer-navigation.md +20 -0
  391. package/templates/universal/claude-md-blocks/nfr-contracts.md +22 -0
  392. package/templates/universal/hooks.yaml +879 -723
  393. package/templates/universal/instructions.yaml +1692 -1692
  394. package/templates/universal/mcp-servers.yaml +50 -50
  395. package/templates/universal/nfr.yaml +197 -197
  396. package/templates/universal/reference.yaml +326 -326
  397. package/templates/universal/review.yaml +204 -204
  398. package/templates/universal/skills.yaml +262 -262
  399. package/templates/universal/structure.yaml +67 -67
  400. package/templates/universal/verification.yaml +416 -416
  401. package/templates/web-next/hooks.yaml +114 -0
  402. package/templates/web-next/instructions.yaml +106 -0
  403. package/templates/web-react/harness/uc-template.spec.ts +35 -0
  404. package/templates/web-react/hooks.yaml +156 -44
  405. package/templates/web-react/instructions.yaml +296 -207
  406. package/templates/web-react/mcp-servers.yaml +20 -20
  407. package/templates/web-react/nfr.yaml +27 -27
  408. package/templates/web-react/review.yaml +94 -94
  409. package/templates/web-react/structure.yaml +46 -46
  410. package/templates/web-react/verification.yaml +126 -126
  411. package/templates/web-static/hooks.yaml +85 -0
  412. package/templates/web-static/instructions.yaml +204 -115
  413. package/templates/web-static/mcp-servers.yaml +20 -20
  414. package/templates/web3/instructions.yaml +44 -44
  415. package/templates/web3/mcp-servers.yaml +11 -11
  416. package/templates/web3/verification.yaml +159 -159
  417. package/templates/zero-trust/instructions.yaml +41 -41
  418. package/templates/zero-trust/mcp-servers.yaml +15 -15
@@ -0,0 +1,364 @@
1
+ /**
2
+ * setup_monitoring tool handler.
3
+ *
4
+ * Generates docs/monitoring-spec.md from the project's NFR contracts and
5
+ * behavioral contracts. This is the production contract that forgecraft-eye
6
+ * evaluates runtime signals against at T4.
7
+ *
8
+ * The generated spec contains:
9
+ * - Exception classes that signal specification drift
10
+ * - Alert thresholds with exact numeric criteria
11
+ * - SLO definitions for each service
12
+ * - Correlation ID and PII redaction policy
13
+ * - Property violation mapping (exception → GS property → spec location)
14
+ */
15
+ import { z } from "zod";
16
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
17
+ import { join, resolve } from "node:path";
18
+ // ── Schema ───────────────────────────────────────────────────────────
19
+ export const setupMonitoringSchema = z.object({
20
+ project_dir: z.string().describe("Absolute path to the project root."),
21
+ project_name: z
22
+ .string()
23
+ .optional()
24
+ .describe("Project name for the spec header. Inferred from directory name if omitted."),
25
+ force: z
26
+ .boolean()
27
+ .optional()
28
+ .describe("Overwrite existing monitoring-spec.md. Default: false."),
29
+ });
30
+ // ── Source doc paths ─────────────────────────────────────────────────
31
+ const SOURCE_DOCS = [
32
+ "docs/nfr-contracts.md",
33
+ "docs/behavioral-contracts.md",
34
+ "docs/use-cases.md",
35
+ "docs/PRD.md",
36
+ ];
37
+ // ── Template ─────────────────────────────────────────────────────────
38
+ function buildMonitoringSpec(projectName, nfrContent, behavioralContent) {
39
+ const date = new Date().toISOString().slice(0, 10);
40
+ const nfrSection = nfrContent ? extractNfrExceptionClasses(nfrContent) : null;
41
+ return `# Monitoring Specification — ${projectName}
42
+ <!-- Generated by forgecraft setup_monitoring on ${date} -->
43
+ <!-- This document is the T4 production contract. -->
44
+ <!-- forgecraft-eye evaluates runtime signals against these definitions. -->
45
+ <!-- DO NOT state thresholds as "when errors are high" — use exact numeric criteria. -->
46
+
47
+ ---
48
+
49
+ ## 1. Exception Classes
50
+
51
+ Exception classes that signal specification drift. Only exceptions listed here
52
+ trigger T4 diagnostic evaluation — not all exceptions, not error volume.
53
+
54
+ | Exception Class | Severity | GS Property Violated | Spec Location | Chronicle Tag |
55
+ |---|---|---|---|---|
56
+ ${nfrSection?.exceptionRows ?? "| TODO_ExceptionClass | critical | Verifiable | docs/behavioral-contracts.md#TODO | t4-signal |"}
57
+
58
+ **Instructions:** For each exception class:
59
+ 1. State the fully-qualified class name (e.g., \`PaymentRetryExhaustedException\`)
60
+ 2. Assign severity: \`critical\` (T4 immediate), \`warning\` (T4 batched), \`info\` (T4 aggregate)
61
+ 3. Map to the GS property it violates: Verifiable, Auditable, Defended, Composable, etc.
62
+ 4. Reference the exact use case postcondition or invariant in the spec
63
+
64
+ ---
65
+
66
+ ## 2. Alert Thresholds
67
+
68
+ SLO alert definitions with exact numeric criteria. Thresholds stated as
69
+ "when errors are high" are invalid — the diagnostic agent cannot act on them.
70
+
71
+ | Alert Name | Metric | Condition | Duration | Severity | NFR Source |
72
+ |---|---|---|---|---|---|
73
+ ${nfrSection?.alertRows ?? "| error_rate_high | http_request_errors_total / http_requests_total | > 0.005 | 5m | page | NFR-TODO |"}
74
+
75
+ **Instructions:** Every threshold must be:
76
+ - Numeric (exact value, not "high" or "low")
77
+ - Time-bounded (window: 1m, 5m, 15m, 1h)
78
+ - Tied to an NFR contract identifier (NFR-01, NFR-02, etc.)
79
+
80
+ ---
81
+
82
+ ## 3. SLO Definitions
83
+
84
+ PromQL (or equivalent) queries for each service-level objective.
85
+
86
+ \`\`\`yaml
87
+ # Service: TODO_service_name
88
+ # NFR source: docs/nfr-contracts.md#TODO
89
+ slos:
90
+ - id: availability
91
+ query: "sum(rate(http_requests_total{job=\"TODO\",code!~\"5..\"}[5m])) / sum(rate(http_requests_total{job=\"TODO\"}[5m]))"
92
+ threshold: 0.999
93
+ operator: ">="
94
+ window: "30d"
95
+ alert_name: TODO_AvailabilityBreach
96
+
97
+ - id: p95_latency
98
+ query: "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job=\"TODO\"}[5m])) by (le))"
99
+ threshold: 0.5
100
+ operator: "<="
101
+ window: "1h"
102
+ alert_name: TODO_LatencyBreach
103
+ \`\`\`
104
+
105
+ ---
106
+
107
+ ## 4. Correlation ID Schema
108
+
109
+ How requests are traced end-to-end through the system. Required for T4 diagnosis
110
+ to correlate an exception with its originating request context.
111
+
112
+ \`\`\`
113
+ Header: X-Correlation-ID
114
+ Format: UUID v4
115
+ Propagation: all outbound service calls, all log entries, all exception payloads
116
+ Example: X-Correlation-ID: 550e8400-e29b-41d4-a716-446655440000
117
+ \`\`\`
118
+
119
+ **Log format requirement:**
120
+ \`\`\`json
121
+ {
122
+ "timestamp": "ISO-8601",
123
+ "level": "ERROR|WARN|INFO",
124
+ "correlation_id": "UUID",
125
+ "service": "service-name",
126
+ "exception_class": "FullyQualifiedExceptionClass",
127
+ "message": "human-readable description",
128
+ "spec_ref": "docs/behavioral-contracts.md#use-case-id"
129
+ }
130
+ \`\`\`
131
+
132
+ ---
133
+
134
+ ## 5. PII Redaction Policy
135
+
136
+ What must never appear in logs or exception payloads.
137
+
138
+ | Field Category | Examples | Action |
139
+ |---|---|---|
140
+ | Identity | email, full_name, national_id | Redact — replace with \`[REDACTED]\` |
141
+ | Authentication | password, token, API key | Never log |
142
+ | Financial | card number, account number | Mask — last 4 digits only |
143
+ | Medical | diagnosis, prescription | Redact |
144
+ | Location | GPS coordinates, IP address | Anonymize — country-level only |
145
+
146
+ **Implementation:** Redaction must happen at the logging layer, not downstream.
147
+ If a field appears unredacted in a log entry, it is a Defended property violation.
148
+
149
+ ---
150
+
151
+ ## 6. Property Violation Mapping
152
+
153
+ Maps production signals to the GS properties they violate. Used by forgecraft-eye
154
+ to classify diagnoses before writing to Chronicle.
155
+
156
+ | Exception Pattern | GS Property | Diagnosis Template |
157
+ |---|---|---|
158
+ | \`*RetryExhausted*\` | Verifiable | "Retry contract does not cover [exception context]. Update use case postcondition." |
159
+ | \`*AuthorizationFailed*\` | Defended | "Authorization invariant violated at [endpoint]. Verify boundary guard in spec." |
160
+ | \`*ValidationException*\` | Verifiable | "Input contract incomplete — [field] not covered by precondition." |
161
+ | \`*TimeoutException*\` | Verifiable | "Timeout contract missing for [service call]. Add NFR SLO threshold." |
162
+ | \`*NullPointer*\` \| \`*undefined*\` | Verifiable | "Null postcondition not stated — [component] assumes non-null without contract." |
163
+ | \`*SchemaValidation*\` | Self-describing | "Schema contract outdated — regenerate from current spec." |
164
+
165
+ ---
166
+
167
+ ## 7. T4 Signal Queue
168
+
169
+ forgecraft-eye writes signals to \`.forgecraft/t4-signals.json\`.
170
+ Run \`forgecraft check_t4\` at session start to surface pending spec updates.
171
+
172
+ \`\`\`json
173
+ {
174
+ "signals": [
175
+ {
176
+ "id": "sig-YYYYMMDD-HHMMSS-001",
177
+ "timestamp": "ISO-8601",
178
+ "exception_class": "FullyQualifiedExceptionClass",
179
+ "severity": "critical|warning|info",
180
+ "gs_property": "Verifiable|Auditable|Defended|Composable|Executable|Self-describing|Bounded",
181
+ "spec_ref": "docs/behavioral-contracts.md#use-case-id",
182
+ "diagnosis": "Human-readable diagnosis text",
183
+ "suggested_update": "Specific spec change recommendation",
184
+ "status": "pending|acknowledged|resolved",
185
+ "correlation_id": "UUID of originating request"
186
+ }
187
+ ]
188
+ }
189
+ \`\`\`
190
+
191
+ ${behavioralContent ? "## 8. Source NFR Contracts\n\nExtracted from docs/nfr-contracts.md. Review for completeness.\n\n" + formatNfrSummary(behavioralContent) : ""}
192
+ ---
193
+
194
+ *Generated by ForgeCraft T4 setup. Reviewed and extended by practitioner.*
195
+ *forgecraft-eye config: see \`.forgecraft/eye-config.yaml\`*
196
+ `;
197
+ }
198
+ // ── NFR extraction helpers ────────────────────────────────────────────
199
+ function extractNfrExceptionClasses(nfrContent) {
200
+ const lines = nfrContent.split("\n");
201
+ // Look for existing exception class mentions
202
+ const exceptionLines = lines.filter((l) => l.toLowerCase().includes("exception") ||
203
+ l.toLowerCase().includes("error class") ||
204
+ l.toLowerCase().includes("failure mode"));
205
+ // Look for threshold mentions
206
+ const thresholdLines = lines.filter((l) => l.toLowerCase().includes("threshold") ||
207
+ l.toLowerCase().includes("slo") ||
208
+ l.toLowerCase().includes("availability") ||
209
+ l.toLowerCase().includes("latency") ||
210
+ (l.toLowerCase().includes("error") && l.match(/\d+%|\d+ms/)));
211
+ const exceptionRows = exceptionLines.length > 0
212
+ ? exceptionLines
213
+ .slice(0, 5)
214
+ .map((l) => `| \`${l.trim().replace(/[|]/g, "\\|")}\` | critical | Verifiable | docs/behavioral-contracts.md#TODO | t4-signal |`)
215
+ .join("\n")
216
+ : "| TODO_ExceptionClass | critical | Verifiable | docs/behavioral-contracts.md#TODO | t4-signal |";
217
+ const alertRows = thresholdLines.length > 0
218
+ ? thresholdLines
219
+ .slice(0, 3)
220
+ .map((l) => `| TODO_Alert | ${l.trim().replace(/[|]/g, "\\|")} | TODO_duration | warning | NFR-TODO |`)
221
+ .join("\n")
222
+ : "| error_rate_high | http_request_errors_total / http_requests_total | > 0.005 | 5m | page | NFR-TODO |";
223
+ return { exceptionRows, alertRows };
224
+ }
225
+ function formatNfrSummary(content) {
226
+ const lines = content.split("\n");
227
+ const relevant = lines
228
+ .filter((l) => l.startsWith("#") ||
229
+ l.toLowerCase().includes("nfr") ||
230
+ l.toLowerCase().includes("slo") ||
231
+ l.toLowerCase().includes("threshold"))
232
+ .slice(0, 20);
233
+ return (relevant.join("\n") + "\n\n*[See full file for complete NFR contracts]*\n");
234
+ }
235
+ // ── Eye config scaffold ──────────────────────────────────────────────
236
+ /**
237
+ * Write `.forgecraft/eye-config.yaml` with sensible defaults if absent.
238
+ * Mirrors the shape of `EyeConfig` in forgecraft-eye without importing it.
239
+ *
240
+ * @param projectDir - Absolute path to the project root.
241
+ * @param projectName - Display name used for the CloudWatch log group slug.
242
+ * @returns `true` if the file was created, `false` if it already existed or errored.
243
+ */
244
+ export function scaffoldEyeConfig(projectDir, projectName) {
245
+ const configPath = join(projectDir, ".forgecraft", "eye-config.yaml");
246
+ if (existsSync(configPath))
247
+ return false;
248
+ const slug = projectName.toLowerCase().replace(/\s+/g, "-");
249
+ const yaml = [
250
+ `# forgecraft-eye configuration — generated by forgecraft setup_monitoring`,
251
+ `# See: https://github.com/jghiringhelli/forgecraft-eye`,
252
+ ``,
253
+ `project_name: "${projectName}"`,
254
+ `project_dir: "${projectDir}"`,
255
+ `monitoring_spec_path: docs/monitoring-spec.md`,
256
+ `signal_queue_path: .forgecraft/t4-signals.json`,
257
+ `environment: production`,
258
+ `log_adapter: stdin # options: stdin | cloudwatch`,
259
+ ``,
260
+ `# CloudWatch adapter — uncomment and set log_adapter: cloudwatch`,
261
+ `# cloudwatch:`,
262
+ `# log_group_name: /aws/lambda/${slug}`,
263
+ `# region: us-east-1`,
264
+ `# filter_pattern: "?ERROR ?WARN ?Exception"`,
265
+ ].join("\n");
266
+ try {
267
+ mkdirSync(join(projectDir, ".forgecraft"), { recursive: true });
268
+ writeFileSync(configPath, yaml, "utf-8");
269
+ return true;
270
+ }
271
+ catch {
272
+ return false;
273
+ }
274
+ }
275
+ // ── Handler ───────────────────────────────────────────────────────────
276
+ export async function setupMonitoringHandler(args) {
277
+ const projectDir = resolve(args.project_dir);
278
+ const force = args.force ?? false;
279
+ const projectName = args.project_name ?? projectDir.split(/[\\/]/).pop() ?? "Project";
280
+ const outputPath = join(projectDir, "docs", "monitoring-spec.md");
281
+ if (existsSync(outputPath) && !force) {
282
+ return {
283
+ content: [
284
+ {
285
+ type: "text",
286
+ text: [
287
+ "## Monitoring Spec Already Exists",
288
+ "",
289
+ `\`docs/monitoring-spec.md\` already exists at ${outputPath}.`,
290
+ "Pass \`force: true\` to regenerate.",
291
+ "",
292
+ "Run \`forgecraft check_t4\` to surface pending T4 signals.",
293
+ ].join("\n"),
294
+ },
295
+ ],
296
+ };
297
+ }
298
+ // Read available source docs
299
+ let nfrContent = null;
300
+ let behavioralContent = null;
301
+ const sourcesRead = [];
302
+ for (const docPath of SOURCE_DOCS) {
303
+ const fullPath = join(projectDir, docPath);
304
+ if (existsSync(fullPath)) {
305
+ try {
306
+ const content = readFileSync(fullPath, "utf-8");
307
+ if (docPath.includes("nfr")) {
308
+ nfrContent = content;
309
+ sourcesRead.push(docPath);
310
+ }
311
+ else if (docPath.includes("behavioral")) {
312
+ behavioralContent = content;
313
+ sourcesRead.push(docPath);
314
+ }
315
+ }
316
+ catch {
317
+ /* non-fatal — continue with template */
318
+ }
319
+ }
320
+ }
321
+ // Ensure docs/ exists
322
+ try {
323
+ mkdirSync(join(projectDir, "docs"), { recursive: true });
324
+ }
325
+ catch {
326
+ /* already exists */
327
+ }
328
+ const spec = buildMonitoringSpec(projectName, nfrContent, behavioralContent);
329
+ try {
330
+ writeFileSync(outputPath, spec, "utf-8");
331
+ }
332
+ catch (err) {
333
+ return {
334
+ content: [
335
+ {
336
+ type: "text",
337
+ text: `Error writing monitoring-spec.md: ${String(err)}`,
338
+ },
339
+ ],
340
+ };
341
+ }
342
+ const eyeConfigCreated = scaffoldEyeConfig(projectDir, projectName);
343
+ const lines = [
344
+ "## Monitoring Spec Generated",
345
+ "",
346
+ `Generated: \`docs/monitoring-spec.md\``,
347
+ ...(eyeConfigCreated
348
+ ? [
349
+ "Generated: `.forgecraft/eye-config.yaml` (forgecraft-eye adapter config)",
350
+ ]
351
+ : []),
352
+ "",
353
+ ];
354
+ if (sourcesRead.length > 0) {
355
+ lines.push(`Sources read: ${sourcesRead.map((s) => `\`${s}\``).join(", ")}`);
356
+ lines.push("");
357
+ }
358
+ else {
359
+ lines.push("⚠️ No NFR contracts found — spec generated from template.", "Add `docs/nfr-contracts.md` and re-run for project-specific thresholds.", "");
360
+ }
361
+ lines.push("## Required Next Steps", "", "The generated spec contains TODO placeholders. Before T4 is operational:", "", "1. **Fill exception classes** (Section 1) — list the specific exception classes", " that indicate specification drift in your system. Map each to the GS property", " it violates and the spec location that governs it.", "", "2. **State exact thresholds** (Section 2) — replace all TODO_threshold values", " with numeric criteria. 'When errors are high' is not a valid threshold.", "", "3. **Add SLO queries** (Section 3) — replace TODO PromQL queries with actual", " metric names from your observability stack.", "", "4. **Install forgecraft-eye** — the T4 diagnostic agent that evaluates production logs", " against your monitoring spec and writes signals to the queue.", " ```bash", " npm install forgecraft-eye", " # Pipe logs in production:", " my-service 2>&1 | npx forgecraft-eye", " # Or invoke programmatically:", " # import { runEyeFromConfig } from 'forgecraft-eye';", " # await runEyeFromConfig(projectDir);", " ```", " npm: https://www.npmjs.com/package/forgecraft-eye", " Source: https://github.com/jghiringhelli/forgecraft-eye", "", "5. **Run `forgecraft check_t4`** at the start of each session to surface", " pending T4 signals from the production queue.", "", "## T4 Architecture Summary", "", "```", "Production exception fires", " → forgecraft-eye evaluates against monitoring-spec.md", " → writes to .forgecraft/t4-signals.json", " → next session: forgecraft check_t4 surfaces pending signals", " → practitioner approves spec update", " → AI derives fix from updated specification", " → T2 verifies, T3 deploys", "```");
362
+ return { content: [{ type: "text", text: lines.join("\n") }] };
363
+ }
364
+ //# sourceMappingURL=setup-monitoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-monitoring.js","sourceRoot":"","sources":["../../src/tools/setup-monitoring.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup-phase1.d.ts","sourceRoot":"","sources":["../../src/tools/setup-phase1.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,kBAAkB,EAEnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CA2BvE;AAwKD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"setup-phase1.d.ts","sourceRoot":"","sources":["../../src/tools/setup-phase1.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,kBAAkB,EAEnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CA2BvE;AAqLD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -54,6 +54,11 @@ function buildSpecDisambiguationBlock(candidates) {
54
54
  block += `- \`problem_statement\`: 1–3 sentence summary of the core problem the app solves\n`;
55
55
  block += `- \`primary_users\`: comma-separated list of the primary user roles or actors\n`;
56
56
  block += `- \`success_criteria\`: comma-separated list of measurable success outcomes\n\n`;
57
+ block += `After calling \`setup_project\`, also populate the stub docs created by setup:\n`;
58
+ block += `- \`docs/architecture.md\` — extract layers, components, data flow from spec\n`;
59
+ block += `- \`docs/data-model.md\` — extract entities and relationships from spec\n`;
60
+ block += `- \`docs/domain-glossary.md\` — extract domain terms from spec\n`;
61
+ block += `Populate these before running \`check_cascade\`.\n\n`;
57
62
  return block;
58
63
  }
59
64
  /**
@@ -64,7 +69,15 @@ function buildSpecExtractionRequest(specPath) {
64
69
  block += `Read this spec now. In your next call to \`setup_project\` (Phase 2), also provide:\n`;
65
70
  block += `- \`problem_statement\`: 1–3 sentence summary of the core problem the app solves\n`;
66
71
  block += `- \`primary_users\`: comma-separated list of the primary user roles or actors\n`;
67
- block += `- \`success_criteria\`: comma-separated list of measurable success outcomes\n\n`;
72
+ block += `- \`success_criteria\`: comma-separated list of measurable success outcomes\n`;
73
+ block += `- \`use_cases\`: JSON array of the 5–12 most important use cases from the spec. Each item:\n`;
74
+ block += ` \`{"id":"UC-001","title":"...","actor":"...","precondition":"...","steps":["step 1","step 2"],"postcondition":"...","errorCases":[{"name":"...","description":"..."}]}\`\n`;
75
+ block += `\n> **Critical:** Real use cases from the spec power \`generate_harness\` (L2 probes). Generic stubs produce meaningless test scaffolding.\n\n`;
76
+ block += `After calling \`setup_project\` with the above parameters, also:\n`;
77
+ block += `4. Fill in \`docs/architecture.md\` from the spec — document layers, components, and data flow.\n`;
78
+ block += `5. Fill in \`docs/data-model.md\` from the spec — document all entities and relationships.\n`;
79
+ block += `6. Fill in \`docs/domain-glossary.md\` from the spec — define key domain terms.\n`;
80
+ block += `These are created as stubs by \`setup_project\`. Populate them before running \`check_cascade\`.\n\n`;
68
81
  return block;
69
82
  }
70
83
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"setup-phase1.js","sourceRoot":"","sources":["../../src/tools/setup-phase1.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACL,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,wEAAwE;AAExE;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAuB;IACzD,IAAI,IAAI,GAAG,+BAA+B,CAAC;IAC3C,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,IAAI,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,4BAA4B,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,IAAI,0BAA0B,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,yBAAyB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,IAAI,wBAAwB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,oBAAoB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,UAAU,EAAE,EAAE,EAAE,CAAC;QACnB,IAAI,IAAI,yBAAyB,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,4DAA4D,CAAC;IACjI,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B,CACnC,UAA4D;IAE5D,IAAI,KAAK,GAAG,8CAA8C,CAAC;IAC3D,KAAK,IAAI,oGAAoG,CAAC;IAC9G,KAAK,IAAI,oFAAoF,CAAC;IAC9F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACtD,KAAK,IAAI,WAAW,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,CAAC;IAChF,CAAC;IACD,KAAK,IAAI,oDAAoD,CAAC;IAC9D,KAAK,IAAI,qEAAqE,CAAC;IAC/E,KAAK,IAAI,oFAAoF,CAAC;IAC9F,KAAK,IAAI,iFAAiF,CAAC;IAC3F,KAAK,IAAI,iFAAiF,CAAC;IAC3F,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,QAAgB;IAClD,IAAI,KAAK,GAAG,4BAA4B,QAAQ,QAAQ,CAAC;IACzD,KAAK,IAAI,uFAAuF,CAAC;IACjG,KAAK,IAAI,oFAAoF,CAAC;IAC9F,KAAK,IAAI,iFAAiF,CAAC;IAC3F,KAAK,IAAI,iFAAiF,CAAC;IAC3F,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,WAA4B;IACzD,IAAI,OAAO,GAAG,2BAA2B,CAAC;IAC1C,OAAO,IAAI,6EAA6E,CAAC;IACzF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,IAAI,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC;QACjC,OAAO,IAAI,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD,OAAO,IAAI,uBAAuB,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,OAAO,IAAI,MAAM,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC;YACzD,OAAO,IAAI,OAAO,MAAM,CAAC,WAAW,IAAI,CAAC;QAC3C,CAAC;QACD,OAAO,IAAI,+FAA+F,CAAC;IAC7G,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,OAAuB;IAChD,MAAM,EACJ,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,cAAc,EACd,YAAY,GACb,GAAG,OAAO,CAAC;IACZ,MAAM,SAAS,GAAG,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IACxE,MAAM,WAAW,GACf,SAAS,IAAI,SAAS,KAAK,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;IACxE,IAAI,OAAO,GAAG,qBAAqB,CAAC;IACpC,OAAO,IAAI,kBAAkB,WAAW,IAAI,CAAC;IAC7C,OAAO,IAAI,eAAe,iBAAiB,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC;IAC5G,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,qBAAqB,cAAc,CAAC,MAAM,2DAA2D,CAAC;IACnH,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,OAAO,IAAI,eAAe,eAAe,IAAI,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,oDAAoD,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,wBAAwB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACnF,OAAO,IAAI,IAAI,CAAC;IAChB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,SAAS,oBAAoB,CAAC,IAAuB;IACnD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACxD,MAAM,eAAe,GAAG,eAAe;QACrC,CAAC,CAAC;;;wFAGkF;QACpF,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,eAAe;QAC5B,CAAC,CAAC,kFAAkF;QACpF,CAAC,CAAC,gEAAgE,CAAC;IAErE,OAAO,gCAAgC,aAAa;;;;;;;;;;;;;;;;;;EAkBpD,eAAe;oCACmB,MAAM,cAAc,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,IAAuB;IACvD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,eAAe,GAAG,eAAe;QACrC,CAAC,CAAC;;;4FAGsF;QACxF,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,eAAe;QAC5B,CAAC,CAAC,kFAAkF;QACpF,CAAC,CAAC,gEAAgE,CAAC;IAErE,OAAO;;;;;;;;;;;;;;;;EAgBP,eAAe;oCACmB,MAAM,cAAc,CAAC;AACzD,CAAC;AAED,uDAAuD;AACvD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"setup-phase1.js","sourceRoot":"","sources":["../../src/tools/setup-phase1.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,20 @@ export interface Phase2ResponseParams {
34
34
  readonly gatesIndexWritten: boolean;
35
35
  readonly gitInitStatus?: string;
36
36
  readonly isBrownfield?: boolean;
37
+ readonly adrsExtracted?: number;
38
+ readonly ucCount?: number;
39
+ readonly specPath?: string;
40
+ readonly operationClassificationWritten?: boolean;
41
+ readonly subDocStubsWritten?: string[];
42
+ readonly agentsWritten?: string[];
43
+ readonly manifestWritten?: boolean;
44
+ readonly statusWritten?: boolean;
45
+ /** FC QG remote gates relevant to active tags — used to generate tailoring checklist. */
46
+ readonly remoteGates?: readonly {
47
+ id: string;
48
+ title: string;
49
+ gsProperty: string;
50
+ }[];
37
51
  }
38
52
  /**
39
53
  * Build the phase 2 completion response.
@@ -1 +1 @@
1
- {"version":3,"file":"setup-phase2.d.ts","sourceRoot":"","sources":["../../src/tools/setup-phase2.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAc1D;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,OAAO,GACpB,eAAe,EAAE,CA8BnB;AAID,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,iBAAiB,GAAG,WAAW,GAAG,cAAc,CAAC;IAC5E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CA+ExE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EACzB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,OAAO,GACpB,MAAM,CAYR;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,SAAS,eAAe,EAAE,GACpC,MAAM,CAeR"}
1
+ {"version":3,"file":"setup-phase2.d.ts","sourceRoot":"","sources":["../../src/tools/setup-phase2.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAc1D;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,OAAO,GACpB,eAAe,EAAE,CA8BnB;AAID,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,eAAe,CAAC,EAAE,iBAAiB,GAAG,WAAW,GAAG,cAAc,CAAC;IAC5E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,8BAA8B,CAAC,EAAE,OAAO,CAAC;IAClD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,yFAAyF;IACzF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS;QAC9B,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,EAAE,CAAC;CACL;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,CA2IxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EACzB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,OAAO,GACpB,MAAM,CAYR;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,SAAS,eAAe,EAAE,GACpC,MAAM,CAeR"}
@@ -92,8 +92,25 @@ export function buildPhase2Response(params) {
92
92
  const scaffoldFiles = extractScaffoldFiles(params.scaffoldText);
93
93
  for (const f of scaffoldFiles)
94
94
  text += ` ${f}\n`;
95
+ if (params.operationClassificationWritten)
96
+ text += ` docs/operation-classification.md (Tier 0–3 gate reference)\n`;
97
+ if (params.subDocStubsWritten && params.subDocStubsWritten.length > 0) {
98
+ for (const f of params.subDocStubsWritten)
99
+ text += ` ${f} (stub — populate from spec)\n`;
100
+ }
101
+ if (params.agentsWritten && params.agentsWritten.length > 0) {
102
+ for (const f of params.agentsWritten)
103
+ text += ` .claude/agents/${f} (sub-agent)\n`;
104
+ }
105
+ if (params.manifestWritten)
106
+ text += ` docs/manifest.yaml (GS document taxonomy contract)\n`;
107
+ if (params.statusWritten)
108
+ text += ` docs/status.md (project state — update after each session)\n`;
95
109
  if (!prdWritten && !yamlWritten && scaffoldFiles.length === 0)
96
110
  text += ` (all artifacts already existed — nothing overwritten)\n`;
111
+ if (params.adrsExtracted && params.adrsExtracted > 0) {
112
+ text += ` docs/adrs/active/ (${params.adrsExtracted} ADRs extracted from spec)\n`;
113
+ }
97
114
  if (params.mcpServerNames.length > 0) {
98
115
  text += `\n### MCP Tools Configured\n`;
99
116
  for (const name of params.mcpServerNames)
@@ -108,13 +125,56 @@ export function buildPhase2Response(params) {
108
125
  text += ` Fill in that file, then use it as the first acceptance test:\n`;
109
126
  text += ` the tool is done when it can produce that specific outcome.\n`;
110
127
  }
111
- text += `\n### Next step call this now:\n`;
112
- text += `\`\`\`\naction: "check_cascade"\nproject_dir: "${params.projectDir ?? ""}"\n\`\`\`\n`;
128
+ // FC QG remote gates available for this tag set
129
+ if (params.remoteGates && params.remoteGates.length > 0) {
130
+ text += `\n### Quality Gates Available (FC QG — ${params.remoteGates.length} gates for active tags)\n`;
131
+ const byProperty = {};
132
+ for (const g of params.remoteGates) {
133
+ (byProperty[g.gsProperty] ??= []).push(`${g.id}: ${g.title}`);
134
+ }
135
+ for (const [prop, ids] of Object.entries(byProperty)) {
136
+ text += ` [${prop}] ${ids.join(", ")}\n`;
137
+ }
138
+ text += ` Run \`analyze_harness\` after setup to compare installed vs available.\n`;
139
+ }
113
140
  if (params.isBrownfield) {
141
+ text += `\n### Next step — call this now:\n`;
142
+ text += `\`\`\`\naction: "check_cascade"\nproject_dir: "${params.projectDir ?? ""}"\n\`\`\`\n`;
114
143
  text += `Do not ask the user — run check_cascade immediately. When it passes, run audit_project to surface any existing violations in this brownfield codebase before writing new code.`;
115
144
  }
116
145
  else {
117
- text += `Do not ask the user — run check_cascade immediately. If it passes, run generate_session_prompt for the first roadmap item.`;
146
+ text += `\n### Greenfield artifact sequence — run in order:\n\n`;
147
+ if (params.ucCount && params.ucCount > 0) {
148
+ text += `**L1 artifacts (just created):**\n`;
149
+ }
150
+ else {
151
+ text += `**L1 artifacts (created — populate docs/ files from spec):**\n`;
152
+ }
153
+ text += ` ✅ forgecraft.yaml + CLAUDE.md + .claude/ + hooks\n`;
154
+ text += ` ✅ docs/PRD.md\n`;
155
+ if (params.ucCount && params.ucCount > 0) {
156
+ text += ` ✅ docs/use-cases.md (${params.ucCount} spec-derived use cases)\n`;
157
+ }
158
+ else {
159
+ text += ` ⚠ docs/use-cases.md (generic stubs — fill in real UCs from spec)\n`;
160
+ }
161
+ if (params.adrsExtracted && params.adrsExtracted > 0) {
162
+ text += ` ✅ docs/adrs/active/ (${params.adrsExtracted} ADRs from spec)\n`;
163
+ }
164
+ else if (params.specPath) {
165
+ text += ` ○ docs/adrs/active/ — run extract_adrs_from_spec to populate\n`;
166
+ }
167
+ text += `\n**Run now:**\n`;
168
+ text += `1. \`check_cascade\` → verifies all 5 L1 steps\n`;
169
+ text += `2. \`generate_roadmap\` → docs/roadmaps/active/roadmap.md (gated on cascade)\n`;
170
+ text += `3. \`generate_harness\` → scaffolds tests/harness/ from use cases (L2 probes)\n`;
171
+ text += `\n**After cascade passes:**\n`;
172
+ text += `4. \`generate_session_prompt\` for the first roadmap item\n`;
173
+ text += `5. \`analyze_harness\` → gap report vs FC QG + auto-post missing gates as issues\n`;
174
+ text += `\n`;
175
+ text += `\`\`\`\naction: "check_cascade"\nproject_dir: "${params.projectDir ?? ""}"\n\`\`\`\n`;
176
+ text += `Do not ask the user — run check_cascade immediately.\n\n`;
177
+ text += buildAiTailoringChecklist(params);
118
178
  }
119
179
  return text;
120
180
  }
@@ -151,6 +211,73 @@ export function renderCascadeDecisionsSection(decisions) {
151
211
  text += `artifacts are gated before implementation can begin.\n`;
152
212
  return text;
153
213
  }
214
+ /**
215
+ * Build the AI Tailoring Checklist — the list of sentinel and harness elements
216
+ * that ForgeCraft cannot generate deterministically but the AI can produce
217
+ * immediately using its spec knowledge.
218
+ *
219
+ * These are the items that most frequently cause session degradation when absent.
220
+ * The AI should generate all of them NOW, before the first implementation session.
221
+ */
222
+ function buildAiTailoringChecklist(params) {
223
+ const tags = params.tags ?? [];
224
+ const hasFrontend = tags.some((t) => ["WEB-REACT", "WEB-NEXT", "WEB-STATIC"].includes(t));
225
+ const hasApi = tags.some((t) => ["API"].includes(t));
226
+ let out = `### AI Tailoring Checklist — generate these NOW using spec knowledge\n\n`;
227
+ out += `ForgeCraft writes the structural scaffold. These items require reading your spec.\n`;
228
+ out += `Generate each one before the first implementation session — skipping them causes session drift.\n\n`;
229
+ out += `**1. Tool Sequencing Table (add to CLAUDE.md)**\n`;
230
+ out += ` Map every major task type to the exact tool sequence. Example:\n`;
231
+ out += ` | Task | Sequence |\n`;
232
+ out += ` |------|----------|\n`;
233
+ out += ` | New feature | read sentinel → check_cascade → generate_session_prompt → implement → run_harness |\n`;
234
+ out += ` | Bug fix | read sentinel → check_derivation_chain → fix → run_harness → change_request(bug-postmortem) |\n`;
235
+ out += ` Derive the actual sequences from your spec's workflow and domain.\n\n`;
236
+ out += `**2. Corrections Log (add to CLAUDE.md)**\n`;
237
+ out += ` Add a "## Corrections Log" section with format:\n`;
238
+ out += ` \`YYYY-MM-DD | [category] short description of AI behavioral deviation and fix\`\n`;
239
+ out += ` Leave it empty now — it fills up during sessions. Its presence is what matters.\n\n`;
240
+ out += `**3. Bound Prompts (enrich docs/use-cases.md)**\n`;
241
+ out += ` For each use case, add a \`### Bound Prompt\` sub-section with:\n`;
242
+ out += ` - **Spec refs**: which spec sections apply\n`;
243
+ out += ` - **Precondition**: system state required before this UC runs\n`;
244
+ out += ` - **Scope — what NOT to touch**: explicit exclusion list\n`;
245
+ out += ` - **Acceptance criteria**: measurable postconditions\n`;
246
+ out += ` - **Architecture constraints**: patterns/files that must be respected\n`;
247
+ out += ` - **Commit message format**: expected conventional commit for this UC\n\n`;
248
+ out += `**4. C4 Context Diagram (docs/architecture/c4-context.md)**\n`;
249
+ out += ` Draw the system boundary: actors, external systems, data flows.\n`;
250
+ out += ` Use PlantUML or Mermaid. ForgeCraft gates on architecture step — populate it.\n\n`;
251
+ if (hasFrontend) {
252
+ out += `**5. Framework Conventions (add to CLAUDE.md)**\n`;
253
+ const isNext = tags.includes("WEB-NEXT");
254
+ if (isNext) {
255
+ out += ` Next.js App Router specifics your sentinel must declare:\n`;
256
+ out += ` - RSC boundary: which components are Server vs Client (\`"use client"\` rule)\n`;
257
+ out += ` - Server Actions: allowed patterns, validation approach\n`;
258
+ out += ` - Data fetching: where async/await lives vs where it cannot\n`;
259
+ out += ` - Route groups, layouts, and loading.tsx ownership rules\n`;
260
+ }
261
+ else {
262
+ out += ` Document your frontend framework's architectural invariants.\n`;
263
+ out += ` Include: component ownership rules, state management boundaries, routing conventions.\n`;
264
+ }
265
+ out += `\n`;
266
+ }
267
+ if (hasApi) {
268
+ out += `**${hasFrontend ? 6 : 5}. API Contract Stubs (docs/api/)**\n`;
269
+ out += ` Even as OpenAPI stubs, declare endpoints, auth scheme, error shape.\n`;
270
+ out += ` These become the behavioral contracts that prevent breaking changes.\n\n`;
271
+ }
272
+ const nextNum = hasFrontend ? (hasApi ? 7 : 6) : hasApi ? 6 : 5;
273
+ out += `**${nextNum}. docs/status.md (session narrative)**\n`;
274
+ out += ` Already created with stubs. Fill in: current state, what's in progress, and "Next:" from your roadmap.\n`;
275
+ out += ` Update it at the end of every session. It is the project's temporal memory.\n\n`;
276
+ out += `**${nextNum + 1}. analyze_harness (post-scaffold gap check)**\n`;
277
+ out += ` Run after completing steps 1–${nextNum} to compare what exists vs what FC QG requires.\n`;
278
+ out += ` Missing gates are submitted as improvement proposals to the FC QG project automatically.\n`;
279
+ return out;
280
+ }
154
281
  /**
155
282
  * Extract file paths listed in a scaffold response text.
156
283
  */