forgecraft-mcp 0.5.0 → 1.0.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 (565) hide show
  1. package/README.md +189 -17
  2. package/dist/analyzers/anti-pattern.d.ts.map +1 -1
  3. package/dist/analyzers/anti-pattern.js +9 -3
  4. package/dist/analyzers/anti-pattern.js.map +1 -1
  5. package/dist/analyzers/code-probes.d.ts +19 -0
  6. package/dist/analyzers/code-probes.d.ts.map +1 -0
  7. package/dist/analyzers/code-probes.js +12 -0
  8. package/dist/analyzers/code-probes.js.map +1 -0
  9. package/dist/analyzers/completeness-helpers.d.ts +60 -0
  10. package/dist/analyzers/completeness-helpers.d.ts.map +1 -0
  11. package/dist/analyzers/completeness-helpers.js +235 -0
  12. package/dist/analyzers/completeness-helpers.js.map +1 -0
  13. package/dist/analyzers/completeness.d.ts +4 -0
  14. package/dist/analyzers/completeness.d.ts.map +1 -1
  15. package/dist/analyzers/completeness.js +28 -196
  16. package/dist/analyzers/completeness.js.map +1 -1
  17. package/dist/analyzers/folder-structure.d.ts.map +1 -1
  18. package/dist/analyzers/folder-structure.js +11 -2
  19. package/dist/analyzers/folder-structure.js.map +1 -1
  20. package/dist/analyzers/gs-scorer.d.ts +32 -0
  21. package/dist/analyzers/gs-scorer.d.ts.map +1 -0
  22. package/dist/analyzers/gs-scorer.js +92 -0
  23. package/dist/analyzers/gs-scorer.js.map +1 -0
  24. package/dist/analyzers/language-detector.d.ts +6 -2
  25. package/dist/analyzers/language-detector.d.ts.map +1 -1
  26. package/dist/analyzers/language-detector.js +66 -55
  27. package/dist/analyzers/language-detector.js.map +1 -1
  28. package/dist/analyzers/probes/complexity-probe.d.ts +15 -0
  29. package/dist/analyzers/probes/complexity-probe.d.ts.map +1 -0
  30. package/dist/analyzers/probes/complexity-probe.js +113 -0
  31. package/dist/analyzers/probes/complexity-probe.js.map +1 -0
  32. package/dist/analyzers/probes/coverage-probe.d.ts +19 -0
  33. package/dist/analyzers/probes/coverage-probe.d.ts.map +1 -0
  34. package/dist/analyzers/probes/coverage-probe.js +150 -0
  35. package/dist/analyzers/probes/coverage-probe.js.map +1 -0
  36. package/dist/analyzers/probes/dead-code-probe.d.ts +16 -0
  37. package/dist/analyzers/probes/dead-code-probe.d.ts.map +1 -0
  38. package/dist/analyzers/probes/dead-code-probe.js +100 -0
  39. package/dist/analyzers/probes/dead-code-probe.js.map +1 -0
  40. package/dist/analyzers/probes/index.d.ts +15 -0
  41. package/dist/analyzers/probes/index.d.ts.map +1 -0
  42. package/dist/analyzers/probes/index.js +8 -0
  43. package/dist/analyzers/probes/index.js.map +1 -0
  44. package/dist/analyzers/probes/layer-probe.d.ts +15 -0
  45. package/dist/analyzers/probes/layer-probe.d.ts.map +1 -0
  46. package/dist/analyzers/probes/layer-probe.js +161 -0
  47. package/dist/analyzers/probes/layer-probe.js.map +1 -0
  48. package/dist/analyzers/probes/loc-probe.d.ts +22 -0
  49. package/dist/analyzers/probes/loc-probe.d.ts.map +1 -0
  50. package/dist/analyzers/probes/loc-probe.js +84 -0
  51. package/dist/analyzers/probes/loc-probe.js.map +1 -0
  52. package/dist/analyzers/probes/mutation-probe.d.ts +17 -0
  53. package/dist/analyzers/probes/mutation-probe.d.ts.map +1 -0
  54. package/dist/analyzers/probes/mutation-probe.js +118 -0
  55. package/dist/analyzers/probes/mutation-probe.js.map +1 -0
  56. package/dist/analyzers/probes/tool-runner.d.ts +37 -0
  57. package/dist/analyzers/probes/tool-runner.d.ts.map +1 -0
  58. package/dist/analyzers/probes/tool-runner.js +108 -0
  59. package/dist/analyzers/probes/tool-runner.js.map +1 -0
  60. package/dist/analyzers/scorers/auditable-scorer.d.ts +10 -0
  61. package/dist/analyzers/scorers/auditable-scorer.d.ts.map +1 -0
  62. package/dist/analyzers/scorers/auditable-scorer.js +57 -0
  63. package/dist/analyzers/scorers/auditable-scorer.js.map +1 -0
  64. package/dist/analyzers/scorers/bounded-scorer.d.ts +10 -0
  65. package/dist/analyzers/scorers/bounded-scorer.d.ts.map +1 -0
  66. package/dist/analyzers/scorers/bounded-scorer.js +28 -0
  67. package/dist/analyzers/scorers/bounded-scorer.js.map +1 -0
  68. package/dist/analyzers/scorers/composable-scorer.d.ts +13 -0
  69. package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -0
  70. package/dist/analyzers/scorers/composable-scorer.js +51 -0
  71. package/dist/analyzers/scorers/composable-scorer.js.map +1 -0
  72. package/dist/analyzers/scorers/defended-scorer.d.ts +10 -0
  73. package/dist/analyzers/scorers/defended-scorer.d.ts.map +1 -0
  74. package/dist/analyzers/scorers/defended-scorer.js +39 -0
  75. package/dist/analyzers/scorers/defended-scorer.js.map +1 -0
  76. package/dist/analyzers/scorers/executable-scorer.d.ts +12 -0
  77. package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -0
  78. package/dist/analyzers/scorers/executable-scorer.js +51 -0
  79. package/dist/analyzers/scorers/executable-scorer.js.map +1 -0
  80. package/dist/analyzers/scorers/scorer-utils.d.ts +38 -0
  81. package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -0
  82. package/dist/analyzers/scorers/scorer-utils.js +91 -0
  83. package/dist/analyzers/scorers/scorer-utils.js.map +1 -0
  84. package/dist/analyzers/scorers/self-describing-scorer.d.ts +13 -0
  85. package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -0
  86. package/dist/analyzers/scorers/self-describing-scorer.js +51 -0
  87. package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -0
  88. package/dist/analyzers/scorers/verifiable-scorer.d.ts +10 -0
  89. package/dist/analyzers/scorers/verifiable-scorer.d.ts.map +1 -0
  90. package/dist/analyzers/scorers/verifiable-scorer.js +33 -0
  91. package/dist/analyzers/scorers/verifiable-scorer.js.map +1 -0
  92. package/dist/artifacts/adr.d.ts +52 -0
  93. package/dist/artifacts/adr.d.ts.map +1 -0
  94. package/dist/artifacts/adr.js +158 -0
  95. package/dist/artifacts/adr.js.map +1 -0
  96. package/dist/artifacts/claude-instructions.d.ts +50 -0
  97. package/dist/artifacts/claude-instructions.d.ts.map +1 -0
  98. package/dist/artifacts/claude-instructions.js +147 -0
  99. package/dist/artifacts/claude-instructions.js.map +1 -0
  100. package/dist/artifacts/commit-history.d.ts +66 -0
  101. package/dist/artifacts/commit-history.d.ts.map +1 -0
  102. package/dist/artifacts/commit-history.js +121 -0
  103. package/dist/artifacts/commit-history.js.map +1 -0
  104. package/dist/artifacts/commit-hooks.d.ts +51 -0
  105. package/dist/artifacts/commit-hooks.d.ts.map +1 -0
  106. package/dist/artifacts/commit-hooks.js +154 -0
  107. package/dist/artifacts/commit-hooks.js.map +1 -0
  108. package/dist/artifacts/index.d.ts +23 -0
  109. package/dist/artifacts/index.d.ts.map +1 -0
  110. package/dist/artifacts/index.js +23 -0
  111. package/dist/artifacts/index.js.map +1 -0
  112. package/dist/artifacts/schema.d.ts +49 -0
  113. package/dist/artifacts/schema.d.ts.map +1 -0
  114. package/dist/artifacts/schema.js +99 -0
  115. package/dist/artifacts/schema.js.map +1 -0
  116. package/dist/cli/args.d.ts +43 -0
  117. package/dist/cli/args.d.ts.map +1 -0
  118. package/dist/cli/args.js +73 -0
  119. package/dist/cli/args.js.map +1 -0
  120. package/dist/cli/commands.d.ts +54 -0
  121. package/dist/cli/commands.d.ts.map +1 -0
  122. package/dist/cli/commands.js +258 -0
  123. package/dist/cli/commands.js.map +1 -0
  124. package/dist/cli/help.d.ts +8 -0
  125. package/dist/cli/help.d.ts.map +1 -0
  126. package/dist/cli/help.js +54 -0
  127. package/dist/cli/help.js.map +1 -0
  128. package/dist/cli.d.ts.map +1 -1
  129. package/dist/cli.js +13 -272
  130. package/dist/cli.js.map +1 -1
  131. package/dist/core/index.d.ts +23 -0
  132. package/dist/core/index.d.ts.map +1 -0
  133. package/dist/core/index.js +9 -0
  134. package/dist/core/index.js.map +1 -0
  135. package/dist/core/properties.d.ts +210 -0
  136. package/dist/core/properties.d.ts.map +1 -0
  137. package/dist/core/properties.js +14 -0
  138. package/dist/core/properties.js.map +1 -0
  139. package/dist/index.d.ts +7 -0
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +16 -3
  142. package/dist/index.js.map +1 -1
  143. package/dist/registry/composer-helpers.d.ts +41 -0
  144. package/dist/registry/composer-helpers.d.ts.map +1 -0
  145. package/dist/registry/composer-helpers.js +69 -0
  146. package/dist/registry/composer-helpers.js.map +1 -0
  147. package/dist/registry/composer.d.ts +5 -1
  148. package/dist/registry/composer.d.ts.map +1 -1
  149. package/dist/registry/composer.js +15 -63
  150. package/dist/registry/composer.js.map +1 -1
  151. package/dist/registry/loader-merge.d.ts +64 -0
  152. package/dist/registry/loader-merge.d.ts.map +1 -0
  153. package/dist/registry/loader-merge.js +119 -0
  154. package/dist/registry/loader-merge.js.map +1 -0
  155. package/dist/registry/loader-tag.d.ts +38 -0
  156. package/dist/registry/loader-tag.d.ts.map +1 -0
  157. package/dist/registry/loader-tag.js +170 -0
  158. package/dist/registry/loader-tag.js.map +1 -0
  159. package/dist/registry/loader.d.ts +9 -4
  160. package/dist/registry/loader.d.ts.map +1 -1
  161. package/dist/registry/loader.js +15 -209
  162. package/dist/registry/loader.js.map +1 -1
  163. package/dist/registry/remote-gates.d.ts +43 -0
  164. package/dist/registry/remote-gates.d.ts.map +1 -0
  165. package/dist/registry/remote-gates.js +80 -0
  166. package/dist/registry/remote-gates.js.map +1 -0
  167. package/dist/registry/renderer-skeletons.d.ts +29 -0
  168. package/dist/registry/renderer-skeletons.d.ts.map +1 -0
  169. package/dist/registry/renderer-skeletons.js +126 -0
  170. package/dist/registry/renderer-skeletons.js.map +1 -0
  171. package/dist/registry/renderer-template.d.ts +17 -0
  172. package/dist/registry/renderer-template.d.ts.map +1 -0
  173. package/dist/registry/renderer-template.js +92 -0
  174. package/dist/registry/renderer-template.js.map +1 -0
  175. package/dist/registry/renderer-types.d.ts +29 -0
  176. package/dist/registry/renderer-types.d.ts.map +1 -0
  177. package/dist/registry/renderer-types.js +8 -0
  178. package/dist/registry/renderer-types.js.map +1 -0
  179. package/dist/registry/renderer.d.ts +25 -30
  180. package/dist/registry/renderer.d.ts.map +1 -1
  181. package/dist/registry/renderer.js +55 -222
  182. package/dist/registry/renderer.js.map +1 -1
  183. package/dist/registry/sentinel-domain-map.d.ts +13 -0
  184. package/dist/registry/sentinel-domain-map.d.ts.map +1 -0
  185. package/dist/registry/sentinel-domain-map.js +179 -0
  186. package/dist/registry/sentinel-domain-map.js.map +1 -0
  187. package/dist/registry/sentinel-renderer.d.ts +36 -0
  188. package/dist/registry/sentinel-renderer.d.ts.map +1 -0
  189. package/dist/registry/sentinel-renderer.js +130 -0
  190. package/dist/registry/sentinel-renderer.js.map +1 -0
  191. package/dist/shared/cnt-health.d.ts +44 -0
  192. package/dist/shared/cnt-health.d.ts.map +1 -0
  193. package/dist/shared/cnt-health.js +214 -0
  194. package/dist/shared/cnt-health.js.map +1 -0
  195. package/dist/shared/config.d.ts +15 -0
  196. package/dist/shared/config.d.ts.map +1 -0
  197. package/dist/shared/config.js +54 -0
  198. package/dist/shared/config.js.map +1 -0
  199. package/dist/shared/drift-detector.d.ts +25 -0
  200. package/dist/shared/drift-detector.d.ts.map +1 -0
  201. package/dist/shared/drift-detector.js +118 -0
  202. package/dist/shared/drift-detector.js.map +1 -0
  203. package/dist/shared/exceptions.d.ts +55 -0
  204. package/dist/shared/exceptions.d.ts.map +1 -0
  205. package/dist/shared/exceptions.js +83 -0
  206. package/dist/shared/exceptions.js.map +1 -0
  207. package/dist/shared/filesystem.d.ts +12 -5
  208. package/dist/shared/filesystem.d.ts.map +1 -1
  209. package/dist/shared/filesystem.js +53 -33
  210. package/dist/shared/filesystem.js.map +1 -1
  211. package/dist/shared/gs-score-logger.d.ts +37 -0
  212. package/dist/shared/gs-score-logger.d.ts.map +1 -0
  213. package/dist/shared/gs-score-logger.js +72 -0
  214. package/dist/shared/gs-score-logger.js.map +1 -0
  215. package/dist/shared/project-gates-folder.d.ts +76 -0
  216. package/dist/shared/project-gates-folder.d.ts.map +1 -0
  217. package/dist/shared/project-gates-folder.js +221 -0
  218. package/dist/shared/project-gates-folder.js.map +1 -0
  219. package/dist/shared/project-gates-helpers.d.ts +59 -0
  220. package/dist/shared/project-gates-helpers.d.ts.map +1 -0
  221. package/dist/shared/project-gates-helpers.js +150 -0
  222. package/dist/shared/project-gates-helpers.js.map +1 -0
  223. package/dist/shared/project-gates.d.ts +21 -0
  224. package/dist/shared/project-gates.d.ts.map +1 -0
  225. package/dist/shared/project-gates.js +42 -0
  226. package/dist/shared/project-gates.js.map +1 -0
  227. package/dist/shared/template-resolver.d.ts +43 -0
  228. package/dist/shared/template-resolver.d.ts.map +1 -0
  229. package/dist/shared/template-resolver.js +176 -0
  230. package/dist/shared/template-resolver.js.map +1 -0
  231. package/dist/shared/types/config.d.ts +107 -0
  232. package/dist/shared/types/config.d.ts.map +1 -0
  233. package/dist/shared/types/config.js +5 -0
  234. package/dist/shared/types/config.js.map +1 -0
  235. package/dist/shared/types/gates.d.ts +220 -0
  236. package/dist/shared/types/gates.d.ts.map +1 -0
  237. package/dist/shared/types/gates.js +5 -0
  238. package/dist/shared/types/gates.js.map +1 -0
  239. package/dist/shared/types/index.d.ts +13 -0
  240. package/dist/shared/types/index.d.ts.map +1 -0
  241. package/dist/shared/types/index.js +13 -0
  242. package/dist/shared/types/index.js.map +1 -0
  243. package/dist/shared/types/mcp.d.ts +57 -0
  244. package/dist/shared/types/mcp.d.ts.map +1 -0
  245. package/dist/shared/types/mcp.js +5 -0
  246. package/dist/shared/types/mcp.js.map +1 -0
  247. package/dist/shared/types/project.d.ts +169 -0
  248. package/dist/shared/types/project.d.ts.map +1 -0
  249. package/dist/shared/types/project.js +112 -0
  250. package/dist/shared/types/project.js.map +1 -0
  251. package/dist/shared/types/templates.d.ts +222 -0
  252. package/dist/shared/types/templates.d.ts.map +1 -0
  253. package/dist/shared/types/templates.js +6 -0
  254. package/dist/shared/types/templates.js.map +1 -0
  255. package/dist/shared/types/tool.d.ts +42 -0
  256. package/dist/shared/types/tool.d.ts.map +1 -0
  257. package/dist/shared/types/tool.js +5 -0
  258. package/dist/shared/types/tool.js.map +1 -0
  259. package/dist/shared/types/verification.d.ts +161 -0
  260. package/dist/shared/types/verification.d.ts.map +1 -0
  261. package/dist/shared/types/verification.js +5 -0
  262. package/dist/shared/types/verification.js.map +1 -0
  263. package/dist/shared/types/verify.d.ts +43 -0
  264. package/dist/shared/types/verify.d.ts.map +1 -0
  265. package/dist/shared/types/verify.js +5 -0
  266. package/dist/shared/types/verify.js.map +1 -0
  267. package/dist/shared/types.d.ts +3 -347
  268. package/dist/shared/types.d.ts.map +1 -1
  269. package/dist/shared/types.js +3 -104
  270. package/dist/shared/types.js.map +1 -1
  271. package/dist/tools/add-hook.d.ts +2 -2
  272. package/dist/tools/advice-registry.d.ts +27 -0
  273. package/dist/tools/advice-registry.d.ts.map +1 -0
  274. package/dist/tools/advice-registry.js +212 -0
  275. package/dist/tools/advice-registry.js.map +1 -0
  276. package/dist/tools/advice.d.ts +33 -0
  277. package/dist/tools/advice.d.ts.map +1 -0
  278. package/dist/tools/advice.js +112 -0
  279. package/dist/tools/advice.js.map +1 -0
  280. package/dist/tools/audit.d.ts.map +1 -1
  281. package/dist/tools/audit.js +68 -6
  282. package/dist/tools/audit.js.map +1 -1
  283. package/dist/tools/cascade-defaults.d.ts +25 -0
  284. package/dist/tools/cascade-defaults.d.ts.map +1 -0
  285. package/dist/tools/cascade-defaults.js +243 -0
  286. package/dist/tools/cascade-defaults.js.map +1 -0
  287. package/dist/tools/check-cascade-contracts.d.ts +35 -0
  288. package/dist/tools/check-cascade-contracts.d.ts.map +1 -0
  289. package/dist/tools/check-cascade-contracts.js +190 -0
  290. package/dist/tools/check-cascade-contracts.js.map +1 -0
  291. package/dist/tools/check-cascade-report.d.ts +25 -0
  292. package/dist/tools/check-cascade-report.d.ts.map +1 -0
  293. package/dist/tools/check-cascade-report.js +157 -0
  294. package/dist/tools/check-cascade-report.js.map +1 -0
  295. package/dist/tools/check-cascade-steps.d.ts +73 -0
  296. package/dist/tools/check-cascade-steps.d.ts.map +1 -0
  297. package/dist/tools/check-cascade-steps.js +265 -0
  298. package/dist/tools/check-cascade-steps.js.map +1 -0
  299. package/dist/tools/check-cascade.d.ts +82 -0
  300. package/dist/tools/check-cascade.d.ts.map +1 -0
  301. package/dist/tools/check-cascade.js +182 -0
  302. package/dist/tools/check-cascade.js.map +1 -0
  303. package/dist/tools/classify.d.ts +2 -2
  304. package/dist/tools/close-cycle-helpers.d.ts +78 -0
  305. package/dist/tools/close-cycle-helpers.d.ts.map +1 -0
  306. package/dist/tools/close-cycle-helpers.js +194 -0
  307. package/dist/tools/close-cycle-helpers.js.map +1 -0
  308. package/dist/tools/close-cycle-versioning.d.ts +26 -0
  309. package/dist/tools/close-cycle-versioning.d.ts.map +1 -0
  310. package/dist/tools/close-cycle-versioning.js +213 -0
  311. package/dist/tools/close-cycle-versioning.js.map +1 -0
  312. package/dist/tools/close-cycle.d.ts +33 -0
  313. package/dist/tools/close-cycle.d.ts.map +1 -0
  314. package/dist/tools/close-cycle.js +187 -0
  315. package/dist/tools/close-cycle.js.map +1 -0
  316. package/dist/tools/cnt-add-node.d.ts +40 -0
  317. package/dist/tools/cnt-add-node.d.ts.map +1 -0
  318. package/dist/tools/cnt-add-node.js +145 -0
  319. package/dist/tools/cnt-add-node.js.map +1 -0
  320. package/dist/tools/contribute-gate.d.ts +34 -0
  321. package/dist/tools/contribute-gate.d.ts.map +1 -0
  322. package/dist/tools/contribute-gate.js +217 -0
  323. package/dist/tools/contribute-gate.js.map +1 -0
  324. package/dist/tools/forgecraft-dispatch-extended.d.ts +20 -0
  325. package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -0
  326. package/dist/tools/forgecraft-dispatch-extended.js +85 -0
  327. package/dist/tools/forgecraft-dispatch-extended.js.map +1 -0
  328. package/dist/tools/forgecraft-dispatch-helpers.d.ts +44 -0
  329. package/dist/tools/forgecraft-dispatch-helpers.d.ts.map +1 -0
  330. package/dist/tools/forgecraft-dispatch-helpers.js +90 -0
  331. package/dist/tools/forgecraft-dispatch-helpers.js.map +1 -0
  332. package/dist/tools/forgecraft-dispatch.d.ts +11 -0
  333. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -0
  334. package/dist/tools/forgecraft-dispatch.js +187 -0
  335. package/dist/tools/forgecraft-dispatch.js.map +1 -0
  336. package/dist/tools/forgecraft-router.d.ts +25 -114
  337. package/dist/tools/forgecraft-router.d.ts.map +1 -1
  338. package/dist/tools/forgecraft-router.js +36 -280
  339. package/dist/tools/forgecraft-router.js.map +1 -1
  340. package/dist/tools/forgecraft-schema-params.d.ts +110 -0
  341. package/dist/tools/forgecraft-schema-params.d.ts.map +1 -0
  342. package/dist/tools/forgecraft-schema-params.js +156 -0
  343. package/dist/tools/forgecraft-schema-params.js.map +1 -0
  344. package/dist/tools/forgecraft-schema.d.ts +231 -0
  345. package/dist/tools/forgecraft-schema.d.ts.map +1 -0
  346. package/dist/tools/forgecraft-schema.js +235 -0
  347. package/dist/tools/forgecraft-schema.js.map +1 -0
  348. package/dist/tools/generate-adr.d.ts +49 -0
  349. package/dist/tools/generate-adr.d.ts.map +1 -0
  350. package/dist/tools/generate-adr.js +178 -0
  351. package/dist/tools/generate-adr.js.map +1 -0
  352. package/dist/tools/generate-claude-md.d.ts +12 -0
  353. package/dist/tools/generate-claude-md.d.ts.map +1 -1
  354. package/dist/tools/generate-claude-md.js +14 -4
  355. package/dist/tools/generate-claude-md.js.map +1 -1
  356. package/dist/tools/generate-diagram.d.ts +30 -0
  357. package/dist/tools/generate-diagram.d.ts.map +1 -0
  358. package/dist/tools/generate-diagram.js +249 -0
  359. package/dist/tools/generate-diagram.js.map +1 -0
  360. package/dist/tools/generate-roadmap.d.ts +33 -0
  361. package/dist/tools/generate-roadmap.d.ts.map +1 -0
  362. package/dist/tools/generate-roadmap.js +92 -0
  363. package/dist/tools/generate-roadmap.js.map +1 -0
  364. package/dist/tools/generate-session-prompt.d.ts +51 -0
  365. package/dist/tools/generate-session-prompt.d.ts.map +1 -0
  366. package/dist/tools/generate-session-prompt.js +174 -0
  367. package/dist/tools/generate-session-prompt.js.map +1 -0
  368. package/dist/tools/get-playbook.d.ts +27 -0
  369. package/dist/tools/get-playbook.d.ts.map +1 -0
  370. package/dist/tools/get-playbook.js +128 -0
  371. package/dist/tools/get-playbook.js.map +1 -0
  372. package/dist/tools/get-reference.d.ts +16 -0
  373. package/dist/tools/get-reference.d.ts.map +1 -1
  374. package/dist/tools/get-reference.js +51 -3
  375. package/dist/tools/get-reference.js.map +1 -1
  376. package/dist/tools/get-verification-strategy.d.ts +50 -0
  377. package/dist/tools/get-verification-strategy.d.ts.map +1 -0
  378. package/dist/tools/get-verification-strategy.js +224 -0
  379. package/dist/tools/get-verification-strategy.js.map +1 -0
  380. package/dist/tools/hardening-config.d.ts +45 -0
  381. package/dist/tools/hardening-config.d.ts.map +1 -0
  382. package/dist/tools/hardening-config.js +109 -0
  383. package/dist/tools/hardening-config.js.map +1 -0
  384. package/dist/tools/hardening-prompts.d.ts +51 -0
  385. package/dist/tools/hardening-prompts.d.ts.map +1 -0
  386. package/dist/tools/hardening-prompts.js +215 -0
  387. package/dist/tools/hardening-prompts.js.map +1 -0
  388. package/dist/tools/list.d.ts.map +1 -1
  389. package/dist/tools/list.js +12 -0
  390. package/dist/tools/list.js.map +1 -1
  391. package/dist/tools/metrics.d.ts +51 -0
  392. package/dist/tools/metrics.d.ts.map +1 -0
  393. package/dist/tools/metrics.js +184 -0
  394. package/dist/tools/metrics.js.map +1 -0
  395. package/dist/tools/refresh-analyzer.d.ts +57 -0
  396. package/dist/tools/refresh-analyzer.d.ts.map +1 -0
  397. package/dist/tools/refresh-analyzer.js +101 -0
  398. package/dist/tools/refresh-analyzer.js.map +1 -0
  399. package/dist/tools/refresh-output.d.ts +67 -0
  400. package/dist/tools/refresh-output.d.ts.map +1 -0
  401. package/dist/tools/refresh-output.js +224 -0
  402. package/dist/tools/refresh-output.js.map +1 -0
  403. package/dist/tools/refresh-project.d.ts +15 -0
  404. package/dist/tools/refresh-project.d.ts.map +1 -1
  405. package/dist/tools/refresh-project.js +65 -191
  406. package/dist/tools/refresh-project.js.map +1 -1
  407. package/dist/tools/registry-refresh.d.ts +34 -0
  408. package/dist/tools/registry-refresh.d.ts.map +1 -0
  409. package/dist/tools/registry-refresh.js +162 -0
  410. package/dist/tools/registry-refresh.js.map +1 -0
  411. package/dist/tools/roadmap-builder.d.ts +72 -0
  412. package/dist/tools/roadmap-builder.d.ts.map +1 -0
  413. package/dist/tools/roadmap-builder.js +199 -0
  414. package/dist/tools/roadmap-builder.js.map +1 -0
  415. package/dist/tools/scaffold-cascade.d.ts +34 -0
  416. package/dist/tools/scaffold-cascade.d.ts.map +1 -0
  417. package/dist/tools/scaffold-cascade.js +94 -0
  418. package/dist/tools/scaffold-cascade.js.map +1 -0
  419. package/dist/tools/scaffold-spec-stubs.d.ts +26 -0
  420. package/dist/tools/scaffold-spec-stubs.d.ts.map +1 -0
  421. package/dist/tools/scaffold-spec-stubs.js +69 -0
  422. package/dist/tools/scaffold-spec-stubs.js.map +1 -0
  423. package/dist/tools/scaffold-templates.d.ts +51 -0
  424. package/dist/tools/scaffold-templates.d.ts.map +1 -0
  425. package/dist/tools/scaffold-templates.js +195 -0
  426. package/dist/tools/scaffold-templates.js.map +1 -0
  427. package/dist/tools/scaffold-writer.d.ts +36 -0
  428. package/dist/tools/scaffold-writer.d.ts.map +1 -0
  429. package/dist/tools/scaffold-writer.js +133 -0
  430. package/dist/tools/scaffold-writer.js.map +1 -0
  431. package/dist/tools/scaffold.d.ts +27 -2
  432. package/dist/tools/scaffold.d.ts.map +1 -1
  433. package/dist/tools/scaffold.js +74 -122
  434. package/dist/tools/scaffold.js.map +1 -1
  435. package/dist/tools/sentinel.d.ts +1 -1
  436. package/dist/tools/sentinel.d.ts.map +1 -1
  437. package/dist/tools/sentinel.js +8 -8
  438. package/dist/tools/sentinel.js.map +1 -1
  439. package/dist/tools/session-prompt-builders.d.ts +85 -0
  440. package/dist/tools/session-prompt-builders.d.ts.map +1 -0
  441. package/dist/tools/session-prompt-builders.js +180 -0
  442. package/dist/tools/session-prompt-builders.js.map +1 -0
  443. package/dist/tools/session-prompt-sections.d.ts +60 -0
  444. package/dist/tools/session-prompt-sections.d.ts.map +1 -0
  445. package/dist/tools/session-prompt-sections.js +156 -0
  446. package/dist/tools/session-prompt-sections.js.map +1 -0
  447. package/dist/tools/set-cascade-requirement.d.ts +41 -0
  448. package/dist/tools/set-cascade-requirement.d.ts.map +1 -0
  449. package/dist/tools/set-cascade-requirement.js +113 -0
  450. package/dist/tools/set-cascade-requirement.js.map +1 -0
  451. package/dist/tools/setup-artifact-writers.d.ts +67 -0
  452. package/dist/tools/setup-artifact-writers.d.ts.map +1 -0
  453. package/dist/tools/setup-artifact-writers.js +188 -0
  454. package/dist/tools/setup-artifact-writers.js.map +1 -0
  455. package/dist/tools/setup-cnt-builders.d.ts +43 -0
  456. package/dist/tools/setup-cnt-builders.d.ts.map +1 -0
  457. package/dist/tools/setup-cnt-builders.js +186 -0
  458. package/dist/tools/setup-cnt-builders.js.map +1 -0
  459. package/dist/tools/setup-cnt.d.ts +37 -0
  460. package/dist/tools/setup-cnt.d.ts.map +1 -0
  461. package/dist/tools/setup-cnt.js +78 -0
  462. package/dist/tools/setup-cnt.js.map +1 -0
  463. package/dist/tools/setup-context.d.ts +62 -0
  464. package/dist/tools/setup-context.d.ts.map +1 -0
  465. package/dist/tools/setup-context.js +180 -0
  466. package/dist/tools/setup-context.js.map +1 -0
  467. package/dist/tools/setup-detector.d.ts +24 -0
  468. package/dist/tools/setup-detector.d.ts.map +1 -0
  469. package/dist/tools/setup-detector.js +203 -0
  470. package/dist/tools/setup-detector.js.map +1 -0
  471. package/dist/tools/setup-phase1.d.ts +15 -0
  472. package/dist/tools/setup-phase1.d.ts.map +1 -0
  473. package/dist/tools/setup-phase1.js +147 -0
  474. package/dist/tools/setup-phase1.js.map +1 -0
  475. package/dist/tools/setup-phase2.d.ts +50 -0
  476. package/dist/tools/setup-phase2.d.ts.map +1 -0
  477. package/dist/tools/setup-phase2.js +139 -0
  478. package/dist/tools/setup-phase2.js.map +1 -0
  479. package/dist/tools/setup-project.d.ts +66 -36
  480. package/dist/tools/setup-project.d.ts.map +1 -1
  481. package/dist/tools/setup-project.js +150 -277
  482. package/dist/tools/setup-project.js.map +1 -1
  483. package/dist/tools/spec-parser-directory.d.ts +53 -0
  484. package/dist/tools/spec-parser-directory.d.ts.map +1 -0
  485. package/dist/tools/spec-parser-directory.js +194 -0
  486. package/dist/tools/spec-parser-directory.js.map +1 -0
  487. package/dist/tools/spec-parser-inference.d.ts +31 -0
  488. package/dist/tools/spec-parser-inference.d.ts.map +1 -0
  489. package/dist/tools/spec-parser-inference.js +248 -0
  490. package/dist/tools/spec-parser-inference.js.map +1 -0
  491. package/dist/tools/spec-parser-markdown.d.ts +46 -0
  492. package/dist/tools/spec-parser-markdown.d.ts.map +1 -0
  493. package/dist/tools/spec-parser-markdown.js +161 -0
  494. package/dist/tools/spec-parser-markdown.js.map +1 -0
  495. package/dist/tools/spec-parser-tags.d.ts +60 -0
  496. package/dist/tools/spec-parser-tags.d.ts.map +1 -0
  497. package/dist/tools/spec-parser-tags.js +212 -0
  498. package/dist/tools/spec-parser-tags.js.map +1 -0
  499. package/dist/tools/spec-parser.d.ts +57 -0
  500. package/dist/tools/spec-parser.d.ts.map +1 -0
  501. package/dist/tools/spec-parser.js +144 -0
  502. package/dist/tools/spec-parser.js.map +1 -0
  503. package/dist/tools/start-hardening.d.ts +56 -0
  504. package/dist/tools/start-hardening.d.ts.map +1 -0
  505. package/dist/tools/start-hardening.js +201 -0
  506. package/dist/tools/start-hardening.js.map +1 -0
  507. package/dist/tools/verification-state-core.d.ts +88 -0
  508. package/dist/tools/verification-state-core.d.ts.map +1 -0
  509. package/dist/tools/verification-state-core.js +195 -0
  510. package/dist/tools/verification-state-core.js.map +1 -0
  511. package/dist/tools/verification-state.d.ts +39 -0
  512. package/dist/tools/verification-state.d.ts.map +1 -0
  513. package/dist/tools/verification-state.js +188 -0
  514. package/dist/tools/verification-state.js.map +1 -0
  515. package/dist/tools/verify-formatter.d.ts +13 -0
  516. package/dist/tools/verify-formatter.d.ts.map +1 -0
  517. package/dist/tools/verify-formatter.js +103 -0
  518. package/dist/tools/verify-formatter.js.map +1 -0
  519. package/dist/tools/verify.d.ts +41 -0
  520. package/dist/tools/verify.d.ts.map +1 -0
  521. package/dist/tools/verify.js +168 -0
  522. package/dist/tools/verify.js.map +1 -0
  523. package/dist/validators/composition-check.d.ts +24 -0
  524. package/dist/validators/composition-check.d.ts.map +1 -0
  525. package/dist/validators/composition-check.js +61 -0
  526. package/dist/validators/composition-check.js.map +1 -0
  527. package/dist/validators/index.d.ts +8 -0
  528. package/dist/validators/index.d.ts.map +1 -0
  529. package/dist/validators/index.js +6 -0
  530. package/dist/validators/index.js.map +1 -0
  531. package/dist/validators/spec-validator.d.ts +54 -0
  532. package/dist/validators/spec-validator.d.ts.map +1 -0
  533. package/dist/validators/spec-validator.js +94 -0
  534. package/dist/validators/spec-validator.js.map +1 -0
  535. package/package.json +10 -2
  536. package/templates/api/instructions.yaml +146 -0
  537. package/templates/api/verification.yaml +132 -0
  538. package/templates/data-pipeline/instructions.yaml +42 -0
  539. package/templates/fintech/hooks.yaml +55 -0
  540. package/templates/fintech/instructions.yaml +70 -0
  541. package/templates/fintech/playbook.yaml +210 -0
  542. package/templates/fintech/verification.yaml +239 -0
  543. package/templates/game/instructions.yaml +247 -0
  544. package/templates/game/mcp-servers.yaml +27 -0
  545. package/templates/game/nfr.yaml +64 -0
  546. package/templates/game/playbook.yaml +214 -0
  547. package/templates/game/review.yaml +97 -0
  548. package/templates/game/structure.yaml +67 -0
  549. package/templates/game/verification.yaml +174 -0
  550. package/templates/ml/instructions.yaml +43 -0
  551. package/templates/ml/verification.yaml +156 -0
  552. package/templates/mobile/verification.yaml +121 -0
  553. package/templates/tools-registry.yaml +164 -0
  554. package/templates/universal/hooks.yaml +279 -7
  555. package/templates/universal/instructions.yaml +1223 -5
  556. package/templates/universal/mcp-servers.yaml +12 -0
  557. package/templates/universal/reference.yaml +215 -0
  558. package/templates/universal/review.yaml +40 -0
  559. package/templates/universal/skills.yaml +262 -106
  560. package/templates/universal/structure.yaml +15 -0
  561. package/templates/universal/verification.yaml +416 -0
  562. package/templates/web-react/instructions.yaml +97 -0
  563. package/templates/web-react/verification.yaml +126 -0
  564. package/templates/web-static/instructions.yaml +42 -0
  565. package/templates/web3/verification.yaml +159 -0
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <p align="center">
2
2
  <h1 align="center">ForgeCraft</h1>
3
3
  <p align="center">
4
- <strong>Production engineering standards for any AI coding assistant.</strong>
4
+ <strong>The quality contract your AI coding assistant works within.</strong>
5
5
  </p>
6
6
  <p align="center">
7
7
  <a href="https://www.npmjs.com/package/forgecraft-mcp"><img src="https://img.shields.io/npm/v/forgecraft-mcp.svg" alt="npm version"></a>
@@ -12,31 +12,156 @@
12
12
 
13
13
  ---
14
14
 
15
- AI coding assistants work better with clear engineering standards. Most start with a generic instruction file ForgeCraft replaces that with production-grade standards: SOLID principles, testing pyramids, architecture patterns, CI/CD pipelines, domain-specific rules, and quality-gate hooks all composed from 112 curated template blocks matched to your actual stack.
15
+ > You hired an AI engineer. It's brilliant. It also installed the same 14 VS Code extensions twice today, spun up 6 Docker containers it will never clean up, and your disk went from 12 GB free to 0 KB in one session.
16
+ >
17
+ > A full disk doesn't fail gracefully. It kills VS Code, the terminal, Docker, and the database simultaneously.
16
18
 
17
- **Supports:** Claude (CLAUDE.md) · Cursor (.cursor/rules/) · GitHub Copilot (.github/copilot-instructions.md) · Windsurf (.windsurfrules) · Cline (.clinerules) · Aider (CONVENTIONS.md)
19
+ ForgeCraft is the quality contract your AI coding assistant works within so it builds fast **and** doesn't burn down the house.
18
20
 
19
21
  ```bash
20
22
  npx forgecraft-mcp setup .
21
23
  ```
22
24
 
23
- That's it. ForgeCraft scans your project, auto-detects your stack, and generates tailored instruction files in seconds.
25
+ **Supports:** Claude (CLAUDE.md) · Cursor (.cursor/rules/) · GitHub Copilot (.github/copilot-instructions.md) · Windsurf (.windsurfrules) · Cline (.clinerules) · Aider (CONVENTIONS.md)
26
+
27
+ ---
28
+
29
+ ## The only formal quality framework built for AI-generated code
30
+
31
+ Every session, every project, every AI assistant — measured against the same 7-property **Generative Specification** model. Not vibes. Not a linter score. A score out of 14 that tells you exactly where the gap is and why.
32
+
33
+ ```
34
+ $ npx forgecraft-mcp verify .
35
+
36
+ | Property | Score | Evidence |
37
+ |-----------------|-------|-------------------------------------------------|
38
+ | Self-Describing | ✅ 2/2 | CLAUDE.md — 352 non-empty lines |
39
+ | Bounded | ✅ 2/2 | No direct DB calls in route files |
40
+ | Verifiable | ✅ 2/2 | 64 test files — 87% coverage |
41
+ | Defended | ✅ 2/2 | Pre-commit hook + lint config present |
42
+ | Auditable | ✅ 2/2 | 11 ADRs in docs/adrs/ + Status.md |
43
+ | Composable | ✅ 2/2 | Service layer + repository layer detected |
44
+ | Executable | ✅ 2/2 | Tests passed + CI pipeline configured |
45
+
46
+ Total: 14/14 ✅ PASS · Threshold 11/14
47
+ ```
48
+
49
+ | Property | What it checks |
50
+ |---|---|
51
+ | **Self-Describing** | Does the codebase explain itself without you? |
52
+ | **Bounded** | Is business logic leaking into your routes? |
53
+ | **Verifiable** | Are there tests, and did they pass in a real runtime? |
54
+ | **Defended** | Are hooks blocking bad commits before they land? |
55
+ | **Auditable** | Is every architectural decision recorded and findable? |
56
+ | **Composable** | Can you swap the database without touching the domain? |
57
+ | **Executable** | Is there CI evidence this thing actually ran? |
58
+
59
+ ---
60
+
61
+ ## Dev environment hygiene — enforced by convention
62
+
63
+ ForgeCraft injects enforceable rules into every project's AI instructions that make environment pollution a convention violation, not an incident.
64
+
65
+ **VS Code extensions**
66
+ Before installing: `code --list-extensions | grep -i <name>`. Only install if no version in the required major range is already present. The same extension doesn't get downloaded twice in the same day.
67
+
68
+ **Docker containers**
69
+ Check before creating: `docker ps -a --filter name=<service>`. If it exists, start it — don't create it. Prefer `docker compose up` (reuse) over bare `docker run` (always creates new). Logs capped at 500 MB. `docker system prune -f` is documented as a periodic maintenance step, not an emergency.
70
+
71
+ **Python virtual environments**
72
+ One `.venv` per project root. Reuse if the Python major.minor version matches. Never create a venv in a subdirectory unless it's a standalone installable package. Unused dependencies flagged by `pip list --not-required`.
73
+
74
+ **Synthetic and time-series data**
75
+ Before writing more than 100 MB of generated data, the AI asks: retain raw, condense statistically, or delete after the run? Synthetic datasets older than 7 days with no code reference: ask to delete.
76
+
77
+ **General**
78
+ If the workspace grows beyond 2 GB outside of known build artifacts (`node_modules/`, `.venv/`, `dist/`), surface a warning and stop. Never silently grow the workspace.
79
+
80
+ ---
81
+
82
+ ## Project setup in one sentence
83
+
84
+ ```
85
+ Read the spec in docs/specs/, set up this project with ForgeCraft,
86
+ scaffold it with the right tags, recommend the tech stack, start building.
87
+ ```
88
+
89
+ That's the entire onboarding prompt. ForgeCraft reads the spec, picks the tags, writes the `CLAUDE.md`, emits `Status.md`, `docs/adrs/`, `docs/PRD.md`, `docs/TechSpec.md`, hooks, and skills. The AI has full context. You start building.
90
+
91
+ ForgeCraft scans your project, auto-detects your stack, and generates tailored instruction files from 116 curated blocks — SOLID, hexagonal architecture, testing pyramids, CI/CD, and 24 domain-specific rule sets — in seconds.
92
+
93
+ ---
94
+
95
+ ## Quality gates that match your release phase
96
+
97
+ Not a fixed checklist. Seven phases, each with gates that make sense for where you actually are.
98
+
99
+ | Phase | Gates |
100
+ |---|---|
101
+ | **development** | Unit tests pass · lint clean · no layer violations · no hardcoded secrets |
102
+ | **pre-release hardening** | Mutation testing ≥80% · DAST scan · 2× peak load · chaos (Toxiproxy) |
103
+ | **release candidate** | OWASP Top 10 pentest · full mutation audit · compatibility matrix · accessibility |
104
+ | **deployment gates** | Canary config verified · smoke tests pass · observability confirmed |
105
+ | **post-deployment** | Synthetic probes live · 30-min error window monitored · incident runbook reviewed |
106
+
107
+ Every hardening step is tagged `requires_human_review: true`. Some gates require a human. ForgeCraft knows which ones.
108
+
109
+ ---
110
+
111
+ ## ADRs, automatically sequenced
112
+
113
+ Every non-obvious architectural decision gets recorded. ForgeCraft auto-sequences `docs/adrs/NNNN-slug.md` in MADR format — context, decision, alternatives, consequences. Your AI assistant reasons about past choices. Your team stops re-litigating them.
114
+
115
+ ```bash
116
+ npx forgecraft-mcp generate_adr . --title "Use event sourcing for order history" \
117
+ --status Accepted \
118
+ --context "Order mutations need full audit trail for compliance" \
119
+ --decision "Append-only event log, project current state on read"
120
+ # → docs/adrs/0004-use-event-sourcing-for-order-history.md
121
+ ```
122
+
123
+ ---
24
124
 
25
125
  ## `claude init` vs ForgeCraft
26
126
 
127
+ `claude init` gets you started. ForgeCraft gets you to production standards — across every AI assistant, every session, every engineer on the team.
128
+
27
129
  | | `claude init` | ForgeCraft |
28
130
  |---|---|---|
29
- | **Instruction file** | Generic, one-size-fits-all | 112 curated blocks matched to your stack |
131
+ | **Instruction file** | Generic, one-size-fits-all | 116 curated blocks matched to your stack |
30
132
  | **AI assistants** | Claude only | Claude, Cursor, Copilot, Windsurf, Cline, Aider |
31
133
  | **Architecture** | None | SOLID, hexagonal, clean code, DDD |
32
- | **Testing** | Basic mention | Testing pyramid with coverage targets (80%+) |
33
- | **Domain rules** | None | 18 domains (fintech, healthcare, gaming…) |
34
- | **Commit standards** | None | Conventional commits, atomic changes |
35
- | **Quality gates** | None | Pre-commit hooks that enforce standards |
36
- | **CI/CD** | None | Pipeline stages, environments, deploy guidance |
134
+ | **Testing** | Basic mention | Testing pyramid, coverage targets, mutation gates |
135
+ | **Domain rules** | None | 24 domains (fintech, healthcare, gaming…) |
136
+ | **Quality score** | None | GS score out of 14 — know exactly where the gap is |
137
+ | **Release phases** | None | 7 phases from development through post-deployment |
138
+ | **Dev hygiene** | None | VS Code, Docker, Python venv, disk guard |
139
+ | **ADRs** | None | Auto-sequenced, MADR format |
37
140
  | **Session continuity** | None | `Status.md` + `forgecraft.yaml` persist context |
38
141
  | **Drift detection** | None | `refresh` detects scope changes |
39
- | **Compliance scoring** | None | `audit` scores 0-100 |
142
+
143
+ ## Workflow Playbook
144
+
145
+ After setup, your AI has the context. These prompts direct the work. Copy, paste, run.
146
+
147
+ | Situation | Prompt |
148
+ |---|---|
149
+ | New project — scaffold structure | [Greenfield Setup](WORKFLOWS.md#greenfield-setup) |
150
+ | Existing project — integrate ForgeCraft | [Brownfield Integration](WORKFLOWS.md#brownfield-integration) |
151
+ | Audit shows `file_length` failures | [Decompose by responsibility](WORKFLOWS.md#file_length--file-too-large) |
152
+ | Audit shows `hardcoded_url` failures | [Extract to env vars](WORKFLOWS.md#hardcoded_url--urls-or-hosts-in-source) |
153
+ | Audit shows `hardcoded_credential` failures | [Remove secrets — do this first](WORKFLOWS.md#hardcoded_credential--secrets-in-source) |
154
+ | Audit shows `layer_violation` failures | [Fix route → DB direct calls](WORKFLOWS.md#layer_violation--direct-db-call-in-route-handler) |
155
+ | Audit shows `mock_in_source` failures | [Move mocks out of production](WORKFLOWS.md#mock_in_source--mock-data-in-production-code) |
156
+ | Audit shows `missing_prd` failures | [Reverse-engineer spec docs](WORKFLOWS.md#missing_prd--missing_techspec--no-spec-docs) |
157
+ | Audit shows `stale_status` failures | [Update Status.md](WORKFLOWS.md#stale_status--statusmd-not-updated) |
158
+ | Score ≥ 80 and preparing to ship | [Pre-release hardening](WORKFLOWS.md#pre-release-hardening) |
159
+ | Just deployed to production | [Post-deployment checklist](WORKFLOWS.md#post-deployment) |
160
+ | Project scope changed | [Drift detection](WORKFLOWS.md#drift-detection) |
161
+
162
+ → [Full Workflow Playbook](WORKFLOWS.md) · [Online version](https://forgecraft.tools/docs/workflows)
163
+
164
+ ---
40
165
 
41
166
  ## How It Works
42
167
 
@@ -53,13 +178,13 @@ npx forgecraft-mcp setup .
53
178
 
54
179
  ForgeCraft is a **setup-time CLI tool**. Run it once to configure your project, then remove it — it has no runtime footprint.
55
180
 
56
- optional: add the MCP sentinel to let your AI assistant diagnose and recommend commands:
181
+ Optionally add the MCP sentinel to let your AI assistant diagnose and recommend commands:
57
182
 
58
183
  ```bash
59
184
  claude mcp add forgecraft -- npx -y forgecraft-mcp
60
185
  ```
61
186
 
62
- The sentinel is a single lightweight tool (~200 tokens) that checks your project state and tells your AI what CLI command to run next. [Remove it](#mcp-sentinel) after initial setup to save tokens.
187
+ The sentinel is a single tool (~200 tokens). It reads three artifacts `forgecraft.yaml`, `CLAUDE.md`, `.claude/hooks` derives the correct next CLI command, and returns it. Nothing more. This is the methodology's core principle expressed as tool design: a stateless reader, a finite artifact set, a derived action. [Remove it](#mcp-sentinel) after initial setup to reclaim token budget.
63
188
 
64
189
  ## What You Get
65
190
 
@@ -112,7 +237,7 @@ Tags are domain classifiers. ForgeCraft auto-detects them from your code, or you
112
237
  | `HEALTHCARE` | HIPAA, PHI handling, audit logs, encryption |
113
238
  | `MOBILE` | React Native/Flutter, offline-first, native APIs |
114
239
  | `REALTIME` | WebSockets, presence, conflict resolution |
115
- | `GAME` | Game loop, ECS, physics, rendering pipeline |
240
+ | `GAME` | Game loop, ECS, Phaser 3, PixiJS, Three.js/WebGL, performance budgets |
116
241
  | `SOCIAL` | Feeds, connections, messaging, moderation |
117
242
  | `ANALYTICS` | Event tracking, dashboards, data warehousing |
118
243
  | `STATE-MACHINE` | Transitions, guards, event-driven workflows |
@@ -171,6 +296,7 @@ npx forgecraft-mcp <command> [dir] [flags]
171
296
  --tier core|recommended Content depth (default: recommended)
172
297
  --targets claude cursor AI assistant targets (default: claude)
173
298
  --dry-run Preview without writing files
299
+ --compact Strip explanatory bullet tails and deduplicate lines (~20-40% smaller output)
174
300
  --apply Apply changes (for refresh)
175
301
  --language typescript typescript | python (default: typescript)
176
302
  --scope focused comprehensive | focused (for review)
@@ -184,11 +310,15 @@ Optionally add the ForgeCraft MCP sentinel to let your AI assistant diagnose you
184
310
  claude mcp add forgecraft -- npx -y forgecraft-mcp
185
311
  ```
186
312
 
187
- The sentinel is a **single minimal tool** (~200 tokens per request, vs ~1,500 for a full MCP tool suite). It checks whether `forgecraft.yaml`, `CLAUDE.md`, and `.claude/hooks` exist, then returns targeted CLI commands to run.
313
+ The sentinel is a **single minimal tool** (~200 tokens per request, vs ~1,500 for a full tool suite). It checks whether `forgecraft.yaml`, `CLAUDE.md`, and `.claude/hooks` exist, then returns the targeted CLI command for the project's current state.
314
+
315
+ **The design is intentional.** The full ForgeCraft command surface — 21 actions — lives in the CLI, not the MCP server. The MCP server exposes exactly one tool that reads three artifacts and returns one recommendation. This is the Generative Specification principle in the tool's own architecture: a stateless reader, a bounded artifact set, a derived action. The tool practices what it writes into your `CLAUDE.md`.
316
+
317
+ A side effect: every declared MCP tool is read by the model on every turn whether invoked or not. One tool costs 200 tokens. Twenty-one tools costs 1,500. The sentinel keeps the methodology's recommended MCP budget (≤3 active servers) by design.
188
318
 
189
319
  **Recommended workflow:**
190
320
  1. Add the sentinel temporarily
191
- 2. Let Claude run `npx forgecraft-mcp setup .`
321
+ 2. Let your AI assistant run `npx forgecraft-mcp setup .`
192
322
  3. Remove the sentinel: `claude mcp remove forgecraft`
193
323
  4. Re-add it when you need to refresh or audit
194
324
 
@@ -210,6 +340,47 @@ Add to `.claude/settings.json`:
210
340
 
211
341
  > **Already ran `claude init`?** Use `npx forgecraft-mcp generate . --merge` to merge with your existing CLAUDE.md, keeping your custom sections while adding production standards.
212
342
 
343
+ ---
344
+
345
+ ## Pricing
346
+
347
+ | | **Free** | **Pro** | **Teams** |
348
+ |---|---|---|---|
349
+ | Projects / month | 2 | Unlimited | Unlimited |
350
+ | GS scoring (`verify`) | ✓ | ✓ | ✓ |
351
+ | Dev hygiene gates | ✓ | ✓ | ✓ |
352
+ | All 24 tags | ✓ | ✓ | ✓ |
353
+ | ADR generation | ✓ | ✓ | ✓ |
354
+ | Quality gate flywheel | Read-only | **Contribute** | Priority |
355
+ | Custom tags & templates | — | ✓ | ✓ |
356
+ | Org-wide standards | — | — | ✓ |
357
+ | Audit dashboard | — | — | ✓ |
358
+ | Priority support | — | — | ✓ |
359
+
360
+ _Free is for individual devs who want to experience the model. Pro is for engineers who want to contribute gates and grow the library. Teams is where organizations pay for the quality guarantee._
361
+
362
+ ### Earn Pro by contributing
363
+
364
+ Propose a quality gate that gets accepted into the library → earn Pro months.
365
+
366
+ - **Founding period** (first 6 months): 3 months Pro per accepted gate
367
+ - **After founding period**: 1 month Pro per accepted gate
368
+ - **3+ accepted gates ever**: Lifetime Pro
369
+
370
+ [Open a gate proposal →](.github/ISSUE_TEMPLATE/quality-gate-proposal.md) · [See contributors →](CONTRIBUTORS.md)
371
+
372
+ ---
373
+
374
+ ## Theoretical foundation
375
+
376
+ ForgeCraft implements the **Generative Specification** model — a formal 7-property framework for evaluating AI-generated code quality. The model, the S_realized convergence formula, and the release phase framework are documented in the white paper.
377
+
378
+ > [Generative Specification White Paper](https://github.com/jghiringhelli/argos) — the academic foundation behind the `verify` score
379
+
380
+ The white paper is the theory. ForgeCraft is the toolchain. Quality gates proposed for the library that generalize into theoretical insights may be incorporated into future white paper revisions.
381
+
382
+ ---
383
+
213
384
  ## Configuration
214
385
 
215
386
  ### Fine-tune what your AI assistant sees
@@ -220,6 +391,7 @@ projectName: my-api
220
391
  tags: [UNIVERSAL, API, FINTECH]
221
392
  tier: recommended
222
393
  outputTargets: [claude, cursor, copilot] # Generate for multiple assistants
394
+ compact: true # Slim output (~20-40% fewer tokens)
223
395
 
224
396
  exclude:
225
397
  - cqrs-event-patterns # Don't need this yet
@@ -299,7 +471,7 @@ git clone https://github.com/jghiringhelli/forgecraft-mcp.git
299
471
  cd forgecraft-mcp
300
472
  npm install
301
473
  npm run build
302
- npm test # 229 tests, 16 suites
474
+ npm test # 610 tests, 42 suites
303
475
  ```
304
476
 
305
477
  ## License
@@ -1 +1 @@
1
- {"version":3,"file":"anti-pattern.d.ts","sourceRoot":"","sources":["../../src/analyzers/anti-pattern.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,uCAAuC;AACvC,UAAU,UAAU;IAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B;IAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,CA+FtD"}
1
+ {"version":3,"file":"anti-pattern.d.ts","sourceRoot":"","sources":["../../src/analyzers/anti-pattern.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,uCAAuC;AACvC,UAAU,UAAU;IAClB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B;IAAE,UAAU,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;CAAE,CAoGtD"}
@@ -43,7 +43,11 @@ export function scanAntiPatterns(projectDir, config = {}) {
43
43
  }
44
44
  // Check for hardcoded URLs (skip config files)
45
45
  if (!isConfigFile(relPath)) {
46
- const urlMatches = findPattern(lines, /(localhost|127\.0\.0\.1|0\.0\.0\.0)/, /\/\/|\/\*|\*|#|test|spec|mock/i);
46
+ const urlMatches = findPattern(lines, /(localhost|127\.0\.0\.1|0\.0\.0\.0)/,
47
+ // Exclude: comments, test/spec/mock paths, regex literals,
48
+ // JS/TS env-var fallback defaults (process.env.X ?? 'localhost'),
49
+ // and Python env-var fallback defaults (os.environ.get("X", "localhost"))
50
+ /^\s*(\/\/|\/\*|\*|#)|test|spec|mock|\/\(.*localhost|\?\?.*['"`]|os\.environ|os\.getenv|environ\.get/i);
47
51
  if (urlMatches.length > 0) {
48
52
  violations.push({
49
53
  check: "hardcoded_url",
@@ -53,7 +57,9 @@ export function scanAntiPatterns(projectDir, config = {}) {
53
57
  }
54
58
  }
55
59
  // Check for mock/stub data in production code
56
- const mockMatches = findPattern(lines, /\b(mock_data|fake_data|dummy_data|stub_response|FIXME.*return|TODO.*hardcod)/i);
60
+ const mockMatches = findPattern(lines, /\b(mock_data|fake_data|dummy_data|stub_response|FIXME.*return|TODO.*hardcod)/i,
61
+ // Exclude: lines that are regex literal patterns or new RegExp constructs
62
+ /\/\\b\(|\/\(|new RegExp/i);
57
63
  if (mockMatches.length > 0) {
58
64
  violations.push({
59
65
  check: "mock_in_source",
@@ -103,7 +109,7 @@ function isSourceFile(filePath) {
103
109
  * Check if a file is a test file.
104
110
  */
105
111
  function isTestFile(filePath) {
106
- return /(\btest[_.]|\.test\.|\.spec\.|__tests__|tests\/|test\/|fixtures\/|mock|conftest|\.d\.ts)/.test(filePath);
112
+ return /(\btest[_.]|\.test\.|\.spec\.|__tests__|tests[/\\]|test[/\\]|fixtures[/\\]|mock|conftest|\.d\.ts)/.test(filePath);
107
113
  }
108
114
  /**
109
115
  * Check if a file is a config file.
@@ -1 +1 @@
1
- {"version":3,"file":"anti-pattern.js","sourceRoot":"","sources":["../../src/analyzers/anti-pattern.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anti-pattern.js","sourceRoot":"","sources":["../../src/analyzers/anti-pattern.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * External code quality probes — language-agnostic design.
3
+ *
4
+ * Re-exports all probes from domain-scoped modules under probes/.
5
+ */
6
+ export type { ProbeResult } from "./probes/tool-runner.js";
7
+ export type { LocData } from "./probes/loc-probe.js";
8
+ export type { CoverageData } from "./probes/coverage-probe.js";
9
+ export type { LayerData } from "./probes/layer-probe.js";
10
+ export type { DeadCodeData } from "./probes/dead-code-probe.js";
11
+ export type { ComplexityData } from "./probes/complexity-probe.js";
12
+ export type { MutationData } from "./probes/mutation-probe.js";
13
+ export { probeLoc } from "./probes/loc-probe.js";
14
+ export { probeCoverage } from "./probes/coverage-probe.js";
15
+ export { probeLayerViolations } from "./probes/layer-probe.js";
16
+ export { probeDeadCode } from "./probes/dead-code-probe.js";
17
+ export { probeComplexity } from "./probes/complexity-probe.js";
18
+ export { probeMutation } from "./probes/mutation-probe.js";
19
+ //# sourceMappingURL=code-probes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-probes.d.ts","sourceRoot":"","sources":["../../src/analyzers/code-probes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * External code quality probes — language-agnostic design.
3
+ *
4
+ * Re-exports all probes from domain-scoped modules under probes/.
5
+ */
6
+ export { probeLoc } from "./probes/loc-probe.js";
7
+ export { probeCoverage } from "./probes/coverage-probe.js";
8
+ export { probeLayerViolations } from "./probes/layer-probe.js";
9
+ export { probeDeadCode } from "./probes/dead-code-probe.js";
10
+ export { probeComplexity } from "./probes/complexity-probe.js";
11
+ export { probeMutation } from "./probes/mutation-probe.js";
12
+ //# sourceMappingURL=code-probes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-probes.js","sourceRoot":"","sources":["../../src/analyzers/code-probes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Shared constants and pure helper functions for completeness checks.
3
+ */
4
+ import type { AuditCheck } from "../shared/types.js";
5
+ import { readExceptions } from "../shared/exceptions.js";
6
+ /** Known AI assistant instruction file paths to check. */
7
+ export declare const KNOWN_INSTRUCTION_PATHS: string[];
8
+ /**
9
+ * Check if any AI assistant instruction file exists.
10
+ *
11
+ * @param projectDir - Absolute path to project root
12
+ * @param passing - Accumulator for passing checks
13
+ * @param failing - Accumulator for failing checks
14
+ */
15
+ export declare function checkInstructionFileExists(projectDir: string, passing: AuditCheck[], failing: AuditCheck[]): void;
16
+ /**
17
+ * Check if a file or directory exists.
18
+ *
19
+ * @param projectDir - Absolute path to project root
20
+ * @param relativePath - Path relative to project root
21
+ * @param checkId - Unique check identifier
22
+ * @param description - Human-readable description for failure message
23
+ * @param passing - Accumulator for passing checks
24
+ * @param failing - Accumulator for failing checks
25
+ */
26
+ export declare function checkFileExists(projectDir: string, relativePath: string, checkId: string, description: string, passing: AuditCheck[], failing: AuditCheck[]): void;
27
+ /**
28
+ * Check if Status.md was updated recently (within 7 days).
29
+ *
30
+ * @param projectDir - Absolute path to project root
31
+ * @param passing - Accumulator for passing checks
32
+ * @param failing - Accumulator for failing checks
33
+ */
34
+ export declare function checkStatusMdFreshness(projectDir: string, passing: AuditCheck[], failing: AuditCheck[]): void;
35
+ /**
36
+ * Check if hook scripts are installed.
37
+ *
38
+ * @param projectDir - Absolute path to project root
39
+ * @param passing - Accumulator for passing checks
40
+ * @param failing - Accumulator for failing checks
41
+ */
42
+ export declare function checkHooksInstalled(projectDir: string, passing: AuditCheck[], failing: AuditCheck[]): void;
43
+ /**
44
+ * Check for shared modules (config, errors, logging).
45
+ *
46
+ * @param projectDir - Absolute path to project root
47
+ * @param passing - Accumulator for passing checks
48
+ * @param failing - Accumulator for failing checks
49
+ */
50
+ export declare function checkSharedModules(projectDir: string, passing: AuditCheck[], failing: AuditCheck[]): void;
51
+ /**
52
+ * Check package.json for required fields.
53
+ *
54
+ * @param projectDir - Absolute path to project root
55
+ * @param passing - Accumulator for passing checks
56
+ * @param failing - Accumulator for failing checks
57
+ * @param exceptions - Registered project exceptions (skips checks that match)
58
+ */
59
+ export declare function checkPackageJson(projectDir: string, passing: AuditCheck[], failing: AuditCheck[], exceptions?: ReturnType<typeof readExceptions>): void;
60
+ //# sourceMappingURL=completeness-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completeness-helpers.d.ts","sourceRoot":"","sources":["../../src/analyzers/completeness-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAyB,MAAM,yBAAyB,CAAC;AAEhF,0DAA0D;AAC1D,eAAO,MAAM,uBAAuB,UAOnC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAkBN;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAWN;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAwBN;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAqCN;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CA4BN;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE,UAAU,EAAE,EACrB,UAAU,GAAE,UAAU,CAAC,OAAO,cAAc,CAAM,GACjD,IAAI,CA0DN"}