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,333 @@
1
+ /**
2
+ * Tag-driven executable gate matrix for the Executable Sprint phase.
3
+ *
4
+ * Each project tag maps to one or more verification tools. When `generate_roadmap`
5
+ * runs, it reads the project's tags from forgecraft.yaml and selects the appropriate
6
+ * gates. Gate files (hurl specs, Playwright tests, SQL scripts, WebSocket clients)
7
+ * are written alongside the session prompt stubs so the AI has a runnable starting
8
+ * point rather than prose instructions alone.
9
+ */
10
+ // ── Gate implementations ─────────────────────────────────────────────
11
+ const hurlGate = {
12
+ tool: "hurl",
13
+ label: "HTTP contract verification (hurl)",
14
+ gatePathTemplate: "tests/hurl/{ucId}.hurl",
15
+ docsUrl: "https://hurl.dev",
16
+ runCommand: "hurl --test tests/hurl/*.hurl",
17
+ buildStub: (ucId, ucTitle) => [
18
+ `# Hurl gate — ${ucId}: ${ucTitle}`,
19
+ `# Run: hurl --test tests/hurl/${ucId.toLowerCase()}.hurl`,
20
+ `# Docs: https://hurl.dev`,
21
+ ``,
22
+ `# TODO: replace placeholders with actual endpoint, headers, and assertions`,
23
+ ``,
24
+ `POST http://localhost:3000/api/v1/TODO`,
25
+ `Content-Type: application/json`,
26
+ `{`,
27
+ ` "TODO": "replace with request body"`,
28
+ `}`,
29
+ ``,
30
+ `HTTP 201`,
31
+ `[Asserts]`,
32
+ `jsonpath "$.id" exists`,
33
+ `jsonpath "$.TODO" isString`,
34
+ ``,
35
+ ].join("\n"),
36
+ };
37
+ const playwrightGate = {
38
+ tool: "playwright",
39
+ label: "UI end-to-end verification (Playwright)",
40
+ gatePathTemplate: "tests/e2e/{ucId}.spec.ts",
41
+ docsUrl: "https://playwright.dev",
42
+ runCommand: "npx playwright test tests/e2e/",
43
+ buildStub: (ucId, ucTitle) => [
44
+ `import { test, expect } from '@playwright/test';`,
45
+ ``,
46
+ `// Playwright gate — ${ucId}: ${ucTitle}`,
47
+ `// Run: npx playwright test tests/e2e/${ucId.toLowerCase()}.spec.ts`,
48
+ `// Docs: https://playwright.dev`,
49
+ ``,
50
+ `test('${ucId}: ${ucTitle}', async ({ page }) => {`,
51
+ ` // 1. Navigate to the relevant page`,
52
+ ` await page.goto('http://localhost:3000/TODO');`,
53
+ ``,
54
+ ` // 2. Interact: fill inputs, click buttons`,
55
+ ` await page.fill('[data-testid="TODO"]', 'test value');`,
56
+ ` await page.click('[data-testid="submit-TODO"]');`,
57
+ ``,
58
+ ` // 3. Assert UI response`,
59
+ ` await expect(page.locator('[data-testid="success-TODO"]')).toBeVisible();`,
60
+ ``,
61
+ ` // 4. Confirm DB persistence (via API read-back or direct query)`,
62
+ ` // TODO: add DB assertion or API read-back call here`,
63
+ `});`,
64
+ ``,
65
+ ].join("\n"),
66
+ };
67
+ const sqlGate = {
68
+ tool: "sql-client",
69
+ label: "Database persistence verification (SQL)",
70
+ gatePathTemplate: "tests/sql/{ucId}.sql",
71
+ docsUrl: "https://www.postgresql.org/docs/current/app-psql.html",
72
+ runCommand: "psql $DATABASE_URL -f tests/sql/*.sql",
73
+ buildStub: (ucId, ucTitle) => [
74
+ `-- SQL gate — ${ucId}: ${ucTitle}`,
75
+ `-- Run: psql $DATABASE_URL -f tests/sql/${ucId.toLowerCase()}.sql`,
76
+ `-- Purpose: confirm expected state change persisted after the use-case operation`,
77
+ ``,
78
+ `-- TODO: replace with the actual table and conditions for this use case`,
79
+ ``,
80
+ `SELECT COUNT(*) AS row_count`,
81
+ `FROM TODO_table`,
82
+ `WHERE TODO_condition = 'expected_value';`,
83
+ ``,
84
+ `-- Expected: row_count >= 1`,
85
+ `-- If 0, the operation did not persist correctly`,
86
+ ``,
87
+ ].join("\n"),
88
+ };
89
+ const websocketGate = {
90
+ tool: "ws-client",
91
+ label: "Real-time event delivery verification (WebSocket)",
92
+ gatePathTemplate: "tests/realtime/{ucId}.ts",
93
+ docsUrl: "https://github.com/websockets/ws",
94
+ runCommand: "npx tsx tests/realtime/*.ts",
95
+ buildStub: (ucId, ucTitle) => [
96
+ `import WebSocket from 'ws';`,
97
+ ``,
98
+ `// WebSocket gate — ${ucId}: ${ucTitle}`,
99
+ `// Run: npx tsx tests/realtime/${ucId.toLowerCase()}.ts`,
100
+ `// Docs: https://github.com/websockets/ws`,
101
+ ``,
102
+ `const ws = new WebSocket('ws://localhost:3000/TODO');`,
103
+ ``,
104
+ `ws.on('open', () => {`,
105
+ ` // Trigger the event that should produce a real-time message`,
106
+ ` ws.send(JSON.stringify({ type: 'TODO', payload: {} }));`,
107
+ `});`,
108
+ ``,
109
+ `ws.on('message', (data) => {`,
110
+ ` const msg = JSON.parse(data.toString());`,
111
+ ` // TODO: assert expected message shape`,
112
+ ` console.assert(msg.type === 'TODO', 'Expected event type TODO');`,
113
+ ` ws.close();`,
114
+ ` process.exit(0);`,
115
+ `});`,
116
+ ``,
117
+ `setTimeout(() => { console.error('TIMEOUT: no message received'); process.exit(1); }, 5000);`,
118
+ ``,
119
+ ].join("\n"),
120
+ };
121
+ // ── Tag → gate matrix ─────────────────────────────────────────────────
122
+ // Game gates — three complementary verification types
123
+ const gameSimulationGate = {
124
+ tool: "game-simulation",
125
+ label: "Headless balance simulation (win rate, reachability, termination)",
126
+ gatePathTemplate: "tests/simulation/{ucId}.sim.ts",
127
+ docsUrl: "https://en.wikipedia.org/wiki/Monte_Carlo_method",
128
+ runCommand: "npx tsx tests/simulation/*.sim.ts",
129
+ buildStub: (ucId, ucTitle) => [
130
+ `// Headless simulation gate — ${ucId}: ${ucTitle}`,
131
+ `// Run: npx tsx tests/simulation/${ucId.toLowerCase()}.sim.ts`,
132
+ `//`,
133
+ `// ARCHITECTURAL PREREQUISITE: this gate only works if game logic is`,
134
+ `// separated from the rendering layer. If your engine cannot be imported`,
135
+ `// and run without a renderer, the architecture is not yet correct.`,
136
+ `// ForgeCraft's GAME template enforces this separation — your GameEngine`,
137
+ `// must be a pure logic class with zero rendering dependencies.`,
138
+ `// The ability to run this file IS the architecture proof.`,
139
+ `//`,
140
+ `// Three invariants every game must satisfy:`,
141
+ `// 1. Termination — a game always ends in bounded steps`,
142
+ `// 2. Reachability — win state is reachable (win rate > floor)`,
143
+ `// 3. Balance — game is not trivially easy (win rate < ceiling)`,
144
+ ``,
145
+ `// TODO: import your engine and a headless player strategy`,
146
+ `// import { GameEngine } from '../../src/engine/GameEngine';`,
147
+ `// import { RandomPlayer } from '../../src/simulation/RandomPlayer';`,
148
+ ``,
149
+ `const RUNS = 1000;`,
150
+ `const MAX_STEPS = 10_000; // game must terminate within this many steps`,
151
+ `const WIN_RATE_MIN = 0.05; // at least 5% of games should be winnable`,
152
+ `const WIN_RATE_MAX = 0.95; // shouldn't be trivially easy`,
153
+ ``,
154
+ `let wins = 0;`,
155
+ `let completions = 0;`,
156
+ ``,
157
+ `for (let i = 0; i < RUNS; i++) {`,
158
+ ` // TODO: replace with your actual engine + player`,
159
+ ` // const game = GameEngine.create();`,
160
+ ` // const player = new RandomPlayer();`,
161
+ ` // let steps = 0;`,
162
+ ` //`,
163
+ ` // while (!game.isOver() && steps < MAX_STEPS) {`,
164
+ ` // game.applyAction(player.chooseAction(game.getState()));`,
165
+ ` // steps++;`,
166
+ ` // }`,
167
+ ` // if (game.isOver()) completions++;`,
168
+ ` // if (game.isWon()) wins++;`,
169
+ `}`,
170
+ ``,
171
+ `const winRate = wins / RUNS;`,
172
+ `const completionRate = completions / RUNS;`,
173
+ ``,
174
+ `console.assert(completionRate >= 0.99,`,
175
+ ` \`FAIL: game did not terminate in \${MAX_STEPS} steps for \${((1 - completionRate) * 100).toFixed(1)}% of runs\`);`,
176
+ `console.assert(winRate >= WIN_RATE_MIN,`,
177
+ ` \`FAIL: win rate too low (\${(winRate * 100).toFixed(1)}%) — game may be unwinnable\`);`,
178
+ `console.assert(winRate <= WIN_RATE_MAX,`,
179
+ ` \`FAIL: win rate too high (\${(winRate * 100).toFixed(1)}%) — game is trivially easy\`);`,
180
+ ``,
181
+ `console.log(\`PASS: \${RUNS} runs — win rate \${(winRate * 100).toFixed(1)}%, completion \${(completionRate * 100).toFixed(1)}%\`);`,
182
+ ``,
183
+ ].join("\n"),
184
+ };
185
+ const gameStateIntegrityGate = {
186
+ tool: "game-state",
187
+ label: "Game state integrity (serialize / deserialize / invariants)",
188
+ gatePathTemplate: "tests/state/{ucId}.state.ts",
189
+ docsUrl: "https://en.wikipedia.org/wiki/State_(computer_science)",
190
+ runCommand: "npx tsx tests/state/*.state.ts",
191
+ buildStub: (ucId, ucTitle) => [
192
+ `// State integrity gate — ${ucId}: ${ucTitle}`,
193
+ `// Run: npx tsx tests/state/${ucId.toLowerCase()}.state.ts`,
194
+ `//`,
195
+ `// Verifies:`,
196
+ `// 1. Save/load round-trip produces identical state`,
197
+ `// 2. State invariants hold after every transition`,
198
+ `// 3. No illegal state is reachable from a valid initial state`,
199
+ ``,
200
+ `// TODO: import your state types and engine`,
201
+ `// import { GameEngine, GameState } from '../../src/engine/GameEngine';`,
202
+ ``,
203
+ `// 1. Round-trip: serialize then deserialize = same state`,
204
+ `// const initial = GameEngine.create().getState();`,
205
+ `// const serialized = JSON.stringify(initial);`,
206
+ `// const restored = GameEngine.fromState(JSON.parse(serialized)).getState();`,
207
+ `// console.assert(JSON.stringify(restored) === serialized, 'FAIL: save/load round-trip mismatch');`,
208
+ ``,
209
+ `// 2. Invariant check: define what must always be true`,
210
+ `// function assertInvariants(state: GameState): void {`,
211
+ `// // TODO: replace with actual invariants for ${ucId}`,
212
+ `// console.assert(state.score >= 0, 'score must be non-negative');`,
213
+ `// console.assert(state.lives >= 0, 'lives must be non-negative');`,
214
+ `// console.assert(Array.isArray(state.entities), 'entities must be an array');`,
215
+ `// }`,
216
+ ``,
217
+ `// 3. Apply N random transitions, assert invariants hold throughout`,
218
+ `// const engine = GameEngine.create();`,
219
+ `// for (let step = 0; step < 1000 && !engine.isOver(); step++) {`,
220
+ `// engine.applyAction(engine.getValidActions()[0]);`,
221
+ `// assertInvariants(engine.getState());`,
222
+ `// }`,
223
+ ``,
224
+ `console.log('PASS: ${ucId} state integrity verified');`,
225
+ ``,
226
+ ].join("\n"),
227
+ };
228
+ const gameInterfaceGate = {
229
+ tool: "game-interface",
230
+ label: "Game interface contracts (input handling, scoring, events)",
231
+ gatePathTemplate: "tests/interfaces/{ucId}.iface.ts",
232
+ docsUrl: "https://en.wikipedia.org/wiki/Software_interface",
233
+ runCommand: "npx tsx tests/interfaces/*.iface.ts",
234
+ buildStub: (ucId, ucTitle) => [
235
+ `// Interface contract gate — ${ucId}: ${ucTitle}`,
236
+ `// Run: npx tsx tests/interfaces/${ucId.toLowerCase()}.iface.ts`,
237
+ `//`,
238
+ `// Verifies the interface contracts for this use case without rendering:`,
239
+ `// - Input handler accepts valid actions and rejects invalid ones`,
240
+ `// - Scoring function produces correct output for known inputs`,
241
+ `// - Event system fires the expected events for known transitions`,
242
+ ``,
243
+ `// TODO: import your interfaces`,
244
+ `// import { InputHandler } from '../../src/input/InputHandler';`,
245
+ `// import { ScoreEngine } from '../../src/scoring/ScoreEngine';`,
246
+ `// import { EventBus } from '../../src/events/EventBus';`,
247
+ ``,
248
+ `// 1. Input contract: valid action accepted, invalid action rejected`,
249
+ `// const handler = new InputHandler();`,
250
+ `// console.assert(handler.isValid({ type: 'TODO_VALID_ACTION' }), 'FAIL: valid action rejected');`,
251
+ `// console.assert(!handler.isValid({ type: 'INVALID' }), 'FAIL: invalid action accepted');`,
252
+ ``,
253
+ `// 2. Scoring contract: known input → known output`,
254
+ `// const scorer = new ScoreEngine();`,
255
+ `// console.assert(scorer.calculate({ TODO: 'known_input' }) === 0, 'FAIL: unexpected score');`,
256
+ ``,
257
+ `// 3. Event contract: transition fires expected event`,
258
+ `// const bus = new EventBus();`,
259
+ `// const fired: string[] = [];`,
260
+ `// bus.on('TODO_EVENT', () => fired.push('TODO_EVENT'));`,
261
+ `// // trigger the transition for ${ucId}`,
262
+ `// console.assert(fired.includes('TODO_EVENT'), 'FAIL: expected event not fired');`,
263
+ ``,
264
+ `console.log('PASS: ${ucId} interface contracts verified');`,
265
+ ``,
266
+ ].join("\n"),
267
+ };
268
+ const TAG_GATE_MAP = {
269
+ API: [hurlGate],
270
+ "WEB-REACT": [playwrightGate],
271
+ "WEB-STATIC": [playwrightGate],
272
+ "WEB-NEXT": [playwrightGate, hurlGate],
273
+ DATABASE: [sqlGate],
274
+ REALTIME: [websocketGate],
275
+ GAME: [gameSimulationGate, gameStateIntegrityGate, gameInterfaceGate],
276
+ SOCIAL: [hurlGate],
277
+ ANALYTICS: [hurlGate, sqlGate],
278
+ AUTH: [hurlGate],
279
+ FINTECH: [hurlGate, sqlGate],
280
+ HEALTHCARE: [hurlGate, sqlGate],
281
+ };
282
+ /** Tags that always get the hurl gate as a fallback if no specific gate matched */
283
+ const HURL_FALLBACK_TAGS = new Set(["CLI", "LIBRARY", "INFRA", "MOBILE"]);
284
+ // ── Public API ────────────────────────────────────────────────────────
285
+ /**
286
+ * Resolve the applicable executable gates for a project's tags.
287
+ * Deduplicates by tool so a project tagged API+AUTH doesn't get two hurl gates.
288
+ *
289
+ * @param tags - Project classification tags from forgecraft.yaml
290
+ * @returns Ordered, deduplicated list of applicable gates
291
+ */
292
+ export function resolveExecutableGates(tags) {
293
+ const seen = new Set();
294
+ const gates = [];
295
+ for (const tag of tags) {
296
+ for (const gate of TAG_GATE_MAP[tag] ?? []) {
297
+ if (!seen.has(gate.tool)) {
298
+ seen.add(gate.tool);
299
+ gates.push(gate);
300
+ }
301
+ }
302
+ }
303
+ // Fallback: if no gates resolved but tag is in fallback set, use hurl
304
+ if (gates.length === 0 && tags.some((t) => HURL_FALLBACK_TAGS.has(t))) {
305
+ gates.push(hurlGate);
306
+ }
307
+ // Universal fallback: always include hurl if nothing else matched
308
+ if (gates.length === 0) {
309
+ gates.push(hurlGate);
310
+ }
311
+ return gates;
312
+ }
313
+ /**
314
+ * Format the gate file path for a specific use case.
315
+ *
316
+ * @param gate - The gate definition
317
+ * @param ucId - Use-case ID (e.g. UC-001)
318
+ * @returns Relative file path
319
+ */
320
+ export function gateFilePath(gate, ucId) {
321
+ return gate.gatePathTemplate.replace("{ucId}", ucId.toLowerCase());
322
+ }
323
+ /**
324
+ * Build a one-line summary of all active gates for inclusion in the roadmap
325
+ * phase description header.
326
+ *
327
+ * @param gates - Resolved gates
328
+ * @returns Comma-separated tool list string
329
+ */
330
+ export function gateToolSummary(gates) {
331
+ return gates.map((g) => g.tool).join(", ");
332
+ }
333
+ //# sourceMappingURL=executable-gates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executable-gates.js","sourceRoot":"","sources":["../../src/tools/executable-gates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * extract_adrs_from_spec tool handler.
3
+ *
4
+ * Reads a project specification file and derives ADR stubs from technology
5
+ * decisions described within it. Unlike extract_adrs_from_history (which walks
6
+ * git log for brownfield projects), this tool is for greenfield projects where
7
+ * all architectural decisions are encoded in the spec before implementation begins.
8
+ *
9
+ * Each generated ADR includes the actual spec excerpt as context — making the
10
+ * artifact genuinely derived from the spec, not a generic placeholder.
11
+ */
12
+ import { z } from "zod";
13
+ export declare const extractAdrsFromSpecSchema: z.ZodObject<{
14
+ project_dir: z.ZodString;
15
+ spec_path: z.ZodOptional<z.ZodString>;
16
+ max_adrs: z.ZodOptional<z.ZodNumber>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ project_dir: string;
19
+ spec_path?: string | undefined;
20
+ max_adrs?: number | undefined;
21
+ }, {
22
+ project_dir: string;
23
+ spec_path?: string | undefined;
24
+ max_adrs?: number | undefined;
25
+ }>;
26
+ export type ExtractAdrsFromSpecInput = z.infer<typeof extractAdrsFromSpecSchema>;
27
+ export declare function extractAdrsFromSpecHandler(args: ExtractAdrsFromSpecInput): Promise<{
28
+ content: Array<{
29
+ type: "text";
30
+ text: string;
31
+ }>;
32
+ }>;
33
+ //# sourceMappingURL=extract-adrs-from-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-adrs-from-spec.d.ts","sourceRoot":"","sources":["../../src/tools/extract-adrs-from-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAkBpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAC5C,OAAO,yBAAyB,CACjC,CAAC;AAiXF,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6G7D"}