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
@@ -11,12 +11,12 @@ import { appendFileSync, existsSync, mkdirSync, writeFileSync } from "fs";
11
11
  import { join } from "path";
12
12
  // ── Constants ────────────────────────────────────────────────────────
13
13
  const GS_SCORE_FILE = "docs/gs-score.md";
14
- const GS_SCORE_HEADER = `# GS Score Log
15
-
16
- Tracks S_realized and GS property scores per loop.
17
-
18
- | date | loop | roadmap_item | s_realized | self-describing | bounded | verifiable | defended | auditable | composable | executable |
19
- |------|------|--------------|------------|-----------------|---------|-----------|----------|-----------|-----------|-----------|
14
+ const GS_SCORE_HEADER = `# GS Score Log
15
+
16
+ Tracks S_realized and GS property scores per loop.
17
+
18
+ | date | loop | roadmap_item | s_realized | self-describing | bounded | verifiable | defended | auditable | composable | executable |
19
+ |------|------|--------------|------------|-----------------|---------|-----------|----------|-----------|-----------|-----------|
20
20
  `;
21
21
  const GS_PROPERTY_ORDER = [
22
22
  "self-describing",
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Git hook installation and audit utilities.
3
+ *
4
+ * Architecture: manifest-driven dispatchers.
5
+ *
6
+ * .git/hooks/<type> — generic dispatcher, installed once, never changes.
7
+ * Reads the ordered list from .claude/hooks/<type>.list
8
+ * and runs each script in sequence.
9
+ *
10
+ * .claude/hooks/<type>.list — versioned manifest, one script filename per line.
11
+ * add_hook appends here; no re-scaffold needed.
12
+ *
13
+ * .claude/hooks/*.sh — the actual check scripts.
14
+ *
15
+ * Public API:
16
+ * auditHookInstallation — synchronous audit of installation state.
17
+ * installGitHooks — write dispatchers + default manifests.
18
+ * appendToHookManifest — append a script to a manifest (used by add_hook).
19
+ */
20
+ export interface HookInstallationResult {
21
+ readonly hasHookSource: boolean;
22
+ readonly sourceHookCount: number;
23
+ readonly installedGitHooks: string[];
24
+ readonly missingGitHooks: string[];
25
+ readonly allInstalled: boolean;
26
+ readonly issues: string[];
27
+ }
28
+ export interface HookInstallResult {
29
+ readonly installed: string[];
30
+ readonly skipped: string[];
31
+ readonly notAGitRepo: boolean;
32
+ }
33
+ export declare function auditHookInstallation(projectDir: string): HookInstallationResult;
34
+ /**
35
+ * Append a script filename to the manifest for a given hook type.
36
+ * Idempotent — skips if the script is already listed.
37
+ * Creates the manifest file if it does not exist.
38
+ *
39
+ * @param projectDir - Absolute path to project root
40
+ * @param hookType - Git hook type (e.g. "pre-commit", "commit-msg")
41
+ * @param scriptName - Filename to append (e.g. "pre-commit-i18n.sh")
42
+ * @returns true if appended, false if already present
43
+ */
44
+ export declare function appendToHookManifest(projectDir: string, hookType: string, scriptName: string): boolean;
45
+ /**
46
+ * Write .git/hooks/* manifest-driven dispatcher scripts and default
47
+ * .claude/hooks/<type>.list manifest files.
48
+ *
49
+ * Dispatchers: installed once, never need to change again.
50
+ * Manifests: versioned in .claude/hooks/, updated by add_hook.
51
+ *
52
+ * Skips existing hooks/manifests unless force=true.
53
+ *
54
+ * @param projectDir - Absolute path to project root
55
+ * @param force - Overwrite existing git hooks and manifests (default false)
56
+ */
57
+ export declare function installGitHooks(projectDir: string, force?: boolean): HookInstallResult;
58
+ //# sourceMappingURL=hook-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-installer.d.ts","sourceRoot":"","sources":["../../src/shared/hook-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAcH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAyCD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,GACjB,sBAAsB,CAmDxB;AA0CD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAyBT;AAwGD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,UAAQ,GACZ,iBAAiB,CA6CnB"}
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Git hook installation and audit utilities.
3
+ *
4
+ * Architecture: manifest-driven dispatchers.
5
+ *
6
+ * .git/hooks/<type> — generic dispatcher, installed once, never changes.
7
+ * Reads the ordered list from .claude/hooks/<type>.list
8
+ * and runs each script in sequence.
9
+ *
10
+ * .claude/hooks/<type>.list — versioned manifest, one script filename per line.
11
+ * add_hook appends here; no re-scaffold needed.
12
+ *
13
+ * .claude/hooks/*.sh — the actual check scripts.
14
+ *
15
+ * Public API:
16
+ * auditHookInstallation — synchronous audit of installation state.
17
+ * installGitHooks — write dispatchers + default manifests.
18
+ * appendToHookManifest — append a script to a manifest (used by add_hook).
19
+ */
20
+ import { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync, chmodSync, } from "node:fs";
21
+ import { join } from "node:path";
22
+ // ── Constants ─────────────────────────────────────────────────────────
23
+ const EXPECTED_GIT_HOOKS = [
24
+ "pre-commit",
25
+ "commit-msg",
26
+ "post-commit",
27
+ "prepare-commit-msg",
28
+ "pre-push",
29
+ ];
30
+ /** Default ordered scripts per hook type. Only scripts that exist are run. */
31
+ const DEFAULT_MANIFEST = {
32
+ "pre-commit": [
33
+ "pre-commit-no-temp-files.sh",
34
+ "pre-commit-secrets.sh",
35
+ "pre-commit-prod-quality.sh",
36
+ "pre-commit-branch-check.sh",
37
+ "pre-commit-format.sh",
38
+ "pre-commit-compile.sh",
39
+ "pre-commit-import-cycles.sh",
40
+ "pre-commit-tdd-check.sh",
41
+ "pre-commit-test.sh",
42
+ "pre-commit-coverage.sh",
43
+ "pre-commit-audit.sh",
44
+ "pre-commit-doc-cascade.sh",
45
+ ],
46
+ "commit-msg": ["commit-msg.sh", "commit-msg-cascade.sh"],
47
+ "post-commit": [
48
+ "post-commit-changelog.sh",
49
+ "post-commit-complexity-baseline.sh",
50
+ ],
51
+ "prepare-commit-msg": ["prepare-commit-msg-usecase.sh"],
52
+ "pre-push": [],
53
+ };
54
+ // ── Audit ─────────────────────────────────────────────────────────────
55
+ export function auditHookInstallation(projectDir) {
56
+ const hooksSourceDir = join(projectDir, ".claude", "hooks");
57
+ const gitHooksDir = join(projectDir, ".git", "hooks");
58
+ const hasHookSource = existsSync(hooksSourceDir);
59
+ let sourceHookCount = 0;
60
+ if (hasHookSource) {
61
+ try {
62
+ sourceHookCount = readdirSync(hooksSourceDir).filter((f) => f.endsWith(".sh")).length;
63
+ }
64
+ catch {
65
+ sourceHookCount = 0;
66
+ }
67
+ }
68
+ const isGitRepo = existsSync(join(projectDir, ".git"));
69
+ const installedGitHooks = [];
70
+ const missingGitHooks = [];
71
+ if (isGitRepo) {
72
+ for (const hookType of EXPECTED_GIT_HOOKS) {
73
+ if (existsSync(join(gitHooksDir, hookType))) {
74
+ installedGitHooks.push(hookType);
75
+ }
76
+ else {
77
+ missingGitHooks.push(hookType);
78
+ }
79
+ }
80
+ }
81
+ const issues = [];
82
+ if (!hasHookSource || sourceHookCount === 0) {
83
+ issues.push(".claude/hooks/ missing or empty — run forgecraft scaffold first");
84
+ }
85
+ else if (!isGitRepo) {
86
+ issues.push("Not a git repository — hook installation requires git init");
87
+ }
88
+ else if (missingGitHooks.length > 0) {
89
+ issues.push(`Git hooks not installed (${missingGitHooks.join(", ")}) — run: bash scripts/setup-hooks.sh`);
90
+ }
91
+ return {
92
+ hasHookSource,
93
+ sourceHookCount,
94
+ installedGitHooks,
95
+ missingGitHooks,
96
+ allInstalled: isGitRepo && missingGitHooks.length === 0 && hasHookSource,
97
+ issues,
98
+ };
99
+ }
100
+ // ── Manifest helpers ──────────────────────────────────────────────────
101
+ function manifestPath(projectDir, hookType) {
102
+ return join(projectDir, ".claude", "hooks", `${hookType}.list`);
103
+ }
104
+ function buildManifestContent(hookType, scripts) {
105
+ return [
106
+ `# ForgeCraft hook manifest — ${hookType}`,
107
+ `# One script filename per line. Comments (#) and blank lines are ignored.`,
108
+ `# Add hooks: forgecraft add_hook — scripts are appended here automatically.`,
109
+ `# Reorder lines to change execution sequence.`,
110
+ ``,
111
+ ...scripts,
112
+ ``,
113
+ ].join("\n");
114
+ }
115
+ /**
116
+ * Write default manifest files to .claude/hooks/<type>.list.
117
+ * Skips existing manifests unless force=true — preserves user customizations.
118
+ *
119
+ * @param projectDir - Absolute path to project root
120
+ * @param force - Overwrite existing manifest files (default false)
121
+ */
122
+ function writeHookManifests(projectDir, force = false) {
123
+ const hooksDir = join(projectDir, ".claude", "hooks");
124
+ mkdirSync(hooksDir, { recursive: true });
125
+ for (const hookType of EXPECTED_GIT_HOOKS) {
126
+ const path = manifestPath(projectDir, hookType);
127
+ if (existsSync(path) && !force)
128
+ continue;
129
+ writeFileSync(path, buildManifestContent(hookType, DEFAULT_MANIFEST[hookType]), "utf-8");
130
+ }
131
+ }
132
+ /**
133
+ * Append a script filename to the manifest for a given hook type.
134
+ * Idempotent — skips if the script is already listed.
135
+ * Creates the manifest file if it does not exist.
136
+ *
137
+ * @param projectDir - Absolute path to project root
138
+ * @param hookType - Git hook type (e.g. "pre-commit", "commit-msg")
139
+ * @param scriptName - Filename to append (e.g. "pre-commit-i18n.sh")
140
+ * @returns true if appended, false if already present
141
+ */
142
+ export function appendToHookManifest(projectDir, hookType, scriptName) {
143
+ const path = manifestPath(projectDir, hookType);
144
+ let existing = "";
145
+ if (existsSync(path)) {
146
+ existing = readFileSync(path, "utf-8");
147
+ }
148
+ else {
149
+ // Create fresh manifest for this hook type
150
+ const defaults = DEFAULT_MANIFEST[hookType] ?? [];
151
+ existing = buildManifestContent(hookType, defaults);
152
+ }
153
+ // Idempotency check — scan non-comment lines
154
+ const alreadyListed = existing
155
+ .split("\n")
156
+ .some((l) => l.trim() === scriptName);
157
+ if (alreadyListed)
158
+ return false;
159
+ // Append before trailing blank line if present, otherwise just append
160
+ const trimmed = existing.trimEnd();
161
+ const updated = `${trimmed}\n${scriptName}\n`;
162
+ mkdirSync(join(projectDir, ".claude", "hooks"), { recursive: true });
163
+ writeFileSync(path, updated, "utf-8");
164
+ return true;
165
+ }
166
+ // ── Dispatcher content builders ───────────────────────────────────────
167
+ /**
168
+ * Generic manifest-reading dispatcher for fail-fast hooks (pre-commit, commit-msg, prepare-commit-msg).
169
+ * If the script fails (non-zero exit), the hook chain aborts immediately.
170
+ *
171
+ * @param hookType - Hook type (used to locate <hookType>.list)
172
+ * @param passArgs - Extra args to forward to each script (e.g. "$1" for commit-msg)
173
+ */
174
+ function buildManifestDispatcher(hookType, passArgs = "") {
175
+ const argSuffix = passArgs ? ` ${passArgs}` : "";
176
+ return [
177
+ "#!/bin/bash",
178
+ `# Auto-generated by ForgeCraft — do not edit by hand.`,
179
+ `# To add a hook: run \`forgecraft add_hook\` or append to .claude/hooks/${hookType}.list`,
180
+ `HOOKS_DIR="$(git rev-parse --show-toplevel)/.claude/hooks"`,
181
+ `LIST="$HOOKS_DIR/${hookType}.list"`,
182
+ "",
183
+ '[ -f "$LIST" ] || exit 0',
184
+ 'while IFS= read -r hook || [ -n "$hook" ]; do',
185
+ ' [[ -z "$hook" || "$hook" == \\#* ]] && continue',
186
+ ' script="$HOOKS_DIR/$hook"',
187
+ ' [ -f "$script" ] || continue',
188
+ ` bash "$script"${argSuffix}`,
189
+ " rc=$?",
190
+ " if [ $rc -ne 0 ]; then",
191
+ ' echo "❌ Hook failed: $hook (exit $rc)"',
192
+ " exit $rc",
193
+ " fi",
194
+ 'done < "$LIST"',
195
+ "exit 0",
196
+ ].join("\n");
197
+ }
198
+ /**
199
+ * Generic manifest-reading dispatcher for fire-and-forget hooks (post-commit).
200
+ * Script failures are ignored — hook chain always continues.
201
+ */
202
+ function buildPostCommitDispatcher() {
203
+ return [
204
+ "#!/bin/bash",
205
+ "# Auto-generated by ForgeCraft — do not edit by hand.",
206
+ "# To add a hook: run `forgecraft add_hook` or append to .claude/hooks/post-commit.list",
207
+ `HOOKS_DIR="$(git rev-parse --show-toplevel)/.claude/hooks"`,
208
+ `LIST="$HOOKS_DIR/post-commit.list"`,
209
+ "",
210
+ '[ -f "$LIST" ] || exit 0',
211
+ 'while IFS= read -r hook || [ -n "$hook" ]; do',
212
+ ' [[ -z "$hook" || "$hook" == \\#* ]] && continue',
213
+ ' script="$HOOKS_DIR/$hook"',
214
+ ' [ -f "$script" ] && bash "$script"',
215
+ 'done < "$LIST"',
216
+ "exit 0",
217
+ ].join("\n");
218
+ }
219
+ /**
220
+ * Pre-push dispatcher: built-in main/master deletion guard + manifest hooks.
221
+ * stdin is captured once so it can be re-fed to each manifest hook.
222
+ */
223
+ function buildPrePushDispatcher() {
224
+ return [
225
+ "#!/bin/bash",
226
+ "# Auto-generated by ForgeCraft — do not edit by hand.",
227
+ "# To add a hook: run `forgecraft add_hook` or append to .claude/hooks/pre-push.list",
228
+ `HOOKS_DIR="$(git rev-parse --show-toplevel)/.claude/hooks"`,
229
+ `LIST="$HOOKS_DIR/pre-push.list"`,
230
+ "",
231
+ "# Capture stdin so we can re-feed it to each hook",
232
+ "stdin_content=$(cat)",
233
+ "",
234
+ "# Built-in guard: block deletion of main/master on the remote",
235
+ "while IFS= read -r line; do",
236
+ " local_sha=$(echo \"$line\" | awk '{print $2}')",
237
+ " remote_ref=$(echo \"$line\" | awk '{print $3}')",
238
+ ' if [ "$local_sha" = "0000000000000000000000000000000000000000" ]; then',
239
+ " if echo \"$remote_ref\" | grep -qE '/(main|master)$'; then",
240
+ ' echo "❌ Deleting remote main/master branch is blocked."',
241
+ " exit 1",
242
+ " fi",
243
+ " fi",
244
+ 'done <<< "$stdin_content"',
245
+ "",
246
+ "# Manifest hooks — stdin is piped in from the captured content",
247
+ '[ -f "$LIST" ] || exit 0',
248
+ 'while IFS= read -r hook || [ -n "$hook" ]; do',
249
+ ' [[ -z "$hook" || "$hook" == \\#* ]] && continue',
250
+ ' script="$HOOKS_DIR/$hook"',
251
+ ' [ -f "$script" ] || continue',
252
+ ' echo "$stdin_content" | bash "$script"',
253
+ " rc=$?",
254
+ " if [ $rc -ne 0 ]; then",
255
+ ' echo "❌ Hook failed: $hook (exit $rc)"',
256
+ " exit $rc",
257
+ " fi",
258
+ 'done < "$LIST"',
259
+ "exit 0",
260
+ ].join("\n");
261
+ }
262
+ // ── Installer ─────────────────────────────────────────────────────────
263
+ /**
264
+ * Write .git/hooks/* manifest-driven dispatcher scripts and default
265
+ * .claude/hooks/<type>.list manifest files.
266
+ *
267
+ * Dispatchers: installed once, never need to change again.
268
+ * Manifests: versioned in .claude/hooks/, updated by add_hook.
269
+ *
270
+ * Skips existing hooks/manifests unless force=true.
271
+ *
272
+ * @param projectDir - Absolute path to project root
273
+ * @param force - Overwrite existing git hooks and manifests (default false)
274
+ */
275
+ export function installGitHooks(projectDir, force = false) {
276
+ const gitDir = join(projectDir, ".git");
277
+ if (!existsSync(gitDir)) {
278
+ return { installed: [], skipped: [], notAGitRepo: true };
279
+ }
280
+ const gitHooksDir = join(gitDir, "hooks");
281
+ mkdirSync(gitHooksDir, { recursive: true });
282
+ const hooks = [
283
+ { name: "pre-commit", content: buildManifestDispatcher("pre-commit") },
284
+ {
285
+ name: "commit-msg",
286
+ content: buildManifestDispatcher("commit-msg", '"$1"'),
287
+ },
288
+ { name: "post-commit", content: buildPostCommitDispatcher() },
289
+ {
290
+ name: "prepare-commit-msg",
291
+ content: buildManifestDispatcher("prepare-commit-msg", '"$1" "$2"'),
292
+ },
293
+ { name: "pre-push", content: buildPrePushDispatcher() },
294
+ ];
295
+ const installed = [];
296
+ const skipped = [];
297
+ for (const { name, content } of hooks) {
298
+ const hookPath = join(gitHooksDir, name);
299
+ if (existsSync(hookPath) && !force) {
300
+ skipped.push(name);
301
+ continue;
302
+ }
303
+ writeFileSync(hookPath, content, "utf-8");
304
+ try {
305
+ chmodSync(hookPath, 0o755);
306
+ }
307
+ catch {
308
+ /* non-fatal on Windows */
309
+ }
310
+ installed.push(name);
311
+ }
312
+ // Write default manifests — skips existing unless force=true
313
+ writeHookManifests(projectDir, force);
314
+ return { installed, skipped, notAGitRepo: false };
315
+ }
316
+ //# sourceMappingURL=hook-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-installer.js","sourceRoot":"","sources":["../../src/shared/hook-installer.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  * Exports pure utilities and low-level I/O used by the public gate API.
4
4
  */
5
5
  import type { ProjectGate, ProjectGatesFile, ToolRequirement } from "./types.js";
6
+ import type { DeploymentEnvironmentConfig } from "./types/project.js";
6
7
  export declare const FLAT_FILE = ".forgecraft/project-gates.yaml";
7
8
  export declare const GATES_BASE = ".forgecraft/gates";
8
9
  export declare const PROJECT_ACTIVE = ".forgecraft/gates/project/active";
@@ -56,4 +57,12 @@ export declare function validateGate(gate: Partial<ProjectGate>): string[];
56
57
  * @returns Array of ToolRequirements to use for this gate in this project
57
58
  */
58
59
  export declare function resolveToolsForLanguage(gate: ProjectGate, language: string): readonly ToolRequirement[];
60
+ /**
61
+ * Returns gate IDs that should be activated based on environment class properties.
62
+ * Called by audit and generate_session_prompt to inject environment-driven gates.
63
+ *
64
+ * @param environments - Record of environment name → config from forgecraft.yaml
65
+ * @returns Array of gate IDs that apply given the declared environment properties
66
+ */
67
+ export declare function getEnvironmentActivatedGateIds(environments: Record<string, DeploymentEnvironmentConfig>): readonly string[];
59
68
  //# sourceMappingURL=project-gates-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-gates-helpers.d.ts","sourceRoot":"","sources":["../../src/shared/project-gates-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,SAAS,mCAAmC,CAAC;AAC1D,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAC9C,eAAO,MAAM,cAAc,qCAAiC,CAAC;AAC7D,eAAO,MAAM,gBAAgB,uCAAmC,CAAC;AACjE,eAAO,MAAM,eAAe,sCAAkC,CAAC;AAC/D,eAAO,MAAM,aAAa,+BAA2B,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,gBAG9B,CAAC;AAIF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAavE;AAID;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAUjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAM/D;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,CAa5E;AAID;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,EAAE,CAejE;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,GACf,SAAS,eAAe,EAAE,CAc5B"}
1
+ {"version":3,"file":"project-gates-helpers.d.ts","sourceRoot":"","sources":["../../src/shared/project-gates-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAItE,eAAO,MAAM,SAAS,mCAAmC,CAAC;AAC1D,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAC9C,eAAO,MAAM,cAAc,qCAAiC,CAAC;AAC7D,eAAO,MAAM,gBAAgB,uCAAmC,CAAC;AACjE,eAAO,MAAM,eAAe,sCAAkC,CAAC;AAC/D,eAAO,MAAM,aAAa,+BAA2B,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,gBAG9B,CAAC;AAIF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAavE;AAID;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAUjE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAM/D;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,CAa5E;AAID;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,EAAE,CAejE;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,GACf,SAAS,eAAe,EAAE,CAc5B;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,GACxD,SAAS,MAAM,EAAE,CA6BnB"}
@@ -147,4 +147,39 @@ export function resolveToolsForLanguage(gate, language) {
147
147
  }
148
148
  return gate.tools ?? [];
149
149
  }
150
+ /**
151
+ * Returns gate IDs that should be activated based on environment class properties.
152
+ * Called by audit and generate_session_prompt to inject environment-driven gates.
153
+ *
154
+ * @param environments - Record of environment name → config from forgecraft.yaml
155
+ * @returns Array of gate IDs that apply given the declared environment properties
156
+ */
157
+ export function getEnvironmentActivatedGateIds(environments) {
158
+ const activated = new Set();
159
+ for (const env of Object.values(environments)) {
160
+ if (env.class === "lte" || env.ephemeral === true) {
161
+ activated.add("lte-ephemeral-infra");
162
+ activated.add("lte-anonymized-data");
163
+ }
164
+ if (env.class === "cae" || env.class === "prd") {
165
+ activated.add("no-cross-tier-urls");
166
+ }
167
+ if (env.class === "cae") {
168
+ activated.add("cae-version-parity");
169
+ }
170
+ if (env.underChangeControl === true || env.class === "prd") {
171
+ activated.add("prd-change-control");
172
+ }
173
+ if (env.containsPii === true) {
174
+ activated.add("no-cross-tier-urls");
175
+ }
176
+ if (env.smtpRelay === "prod" &&
177
+ env.class !== "cae" &&
178
+ env.class !== "prd") {
179
+ // prod relay used in a non-prod environment — flag it
180
+ activated.add("no-prod-relay-in-nonprod");
181
+ }
182
+ }
183
+ return Array.from(activated);
184
+ }
150
185
  //# sourceMappingURL=project-gates-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-gates-helpers.js","sourceRoot":"","sources":["../../src/shared/project-gates-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO3C,6EAA6E;AAE7E,MAAM,CAAC,MAAM,SAAS,GAAG,gCAAgC,CAAC;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,UAAU,iBAAiB,CAAC;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,UAAU,mBAAmB,CAAC;AACjE,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,UAAU,kBAAkB,CAAC;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,UAAU,WAAW,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAChD,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,6EAA6E;AAE7E;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAA4B;IACxD,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAA6B,CAAC;IACnD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC9B,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,gBAAgB,CAAC;IACzC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3D,OAAO,IAA8B,CAAC;AACxC,CAAC;AAED,6EAA6E;AAE7E;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAA4B,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE,EAAE;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,OAAO,WAAW,CAAC,OAAO,CAAC;SACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;SAC1C,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,6EAA6E;AAE7E;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAqB,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,aAAa,CAAC,CAAuC,CAAC,CACvD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,6EAA6E;AAE7E;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAA0B;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC1E,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACpE,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CACT,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAE7E;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAiB,EACjB,QAAgB;IAEhB,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAElD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,IACE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,kBAAkB,CAAC,EACrE,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"project-gates-helpers.js","sourceRoot":"","sources":["../../src/shared/project-gates-helpers.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,12 @@ export interface ForgeCraftConfig {
48
48
  readonly disabledHooks?: string[];
49
49
  /** Additional tags beyond auto-detected ones. */
50
50
  readonly additionalTags?: Tag[];
51
+ /**
52
+ * Practitioner experience level. Controls verbosity of generated session prompts.
53
+ * - `novice` (default): full methodology explanations, step-by-step instructions
54
+ * - `experienced`: compact output — just commit sequence and test command; no methodology teaching
55
+ */
56
+ readonly practitioner_level?: "novice" | "experienced";
51
57
  /**
52
58
  * When true, apply compact post-processing to all generated instruction files:
53
59
  * strips explanatory tail clauses from bullet points and deduplicates identical lines.
@@ -66,7 +72,7 @@ export interface ForgeCraftConfig {
66
72
  readonly deployment?: ProjectDeploymentConfig;
67
73
  /** If true, gates marked generalizable: true are queued for community contribution. */
68
74
  readonly contribute_gates?: boolean;
69
- /** URL for the remote quality-gates registry. Defaults to the public genspec-dev registry. */
75
+ /** URL for the remote quality-gates registry. Defaults to the public quality-gates registry. */
70
76
  readonly gates_registry_url?: string;
71
77
  /** URL for the forgecraft-server API. Used by contribute-gate tool. */
72
78
  readonly server_url?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/shared/types/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/shared/types/config.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,26 @@ export interface ToolRequirement {
69
69
  /** If false, gate can run without this tool at reduced coverage */
70
70
  readonly required: boolean;
71
71
  }
72
+ /**
73
+ * How a quality gate applies at a specific GS abstraction layer.
74
+ * Mirrors the MCP tool description model: tells the AI when to activate this
75
+ * gate and what it contributes to that layer's completeness.
76
+ */
77
+ export interface GateLayerApplication {
78
+ /** GS abstraction layer. L1=Blueprint, L2=Harness, L3=Environment, L4=Monitoring */
79
+ readonly layer: "L1" | "L2" | "L3" | "L4";
80
+ /**
81
+ * How this gate applies at this layer — the enforcement mechanism.
82
+ * What it contributes to the layer's completeness when it passes.
83
+ * What it reveals as a gap when it fires.
84
+ */
85
+ readonly description: string;
86
+ /**
87
+ * Trigger condition at this layer — when the gate becomes relevant.
88
+ * What must be true for this gate to fire or be meaningful here.
89
+ */
90
+ readonly when: string;
91
+ }
72
92
  /**
73
93
  * A quality gate -- a named, evidence-backed check that defends a GS property.
74
94
  * Gates live in .forgecraft/gates/project/active|promoted|retired/ or .forgecraft/gates/registry/{tag}/.
@@ -88,6 +108,14 @@ export interface ProjectGate {
88
108
  * "environment-hygiene", "state-machine", "concurrency"
89
109
  */
90
110
  readonly domain: string;
111
+ /**
112
+ * GS abstraction layers this gate applies to, with per-layer context.
113
+ * Absent means the gate is layer-agnostic.
114
+ * Like MCP tool descriptions: tells the AI when and how to use this gate
115
+ * at each layer of the automation ladder (L1 Blueprint → L2 Harness →
116
+ * L3 Environment → L4 Monitoring).
117
+ */
118
+ readonly layers?: readonly GateLayerApplication[];
91
119
  /**
92
120
  * How this gate is implemented:
93
121
  * - logic: pure invariant check, no external tools
@@ -160,6 +188,12 @@ export interface ProjectGate {
160
188
  * P0: blocking (fail = no deploy), P1: warning (fail = PR comment), P2: advisory
161
189
  */
162
190
  readonly priority?: "P0" | "P1" | "P2";
191
+ /**
192
+ * Project-level severity override. Controls how audit surfaces this gate.
193
+ * error: blocks; warning: advisory; info: informational only.
194
+ * When absent, severity is derived from priority (P0→error, P1→warning, P2→info).
195
+ */
196
+ readonly severity?: "error" | "warning" | "info";
163
197
  /** Minimum tool/framework versions this gate requires. e.g. { "react": "18.0.0" } */
164
198
  readonly minVersion?: Readonly<Record<string, string>>;
165
199
  /** Maximum tool/framework versions this gate applies to (gate obsolete after this) */
@@ -1 +1 @@
1
- {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../src/shared/types/gates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../src/shared/types/gates.ts"],"names":[],"mappings":"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"}