forgecraft-mcp 1.3.2 → 1.6.1

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 (254) hide show
  1. package/README.md +2 -2
  2. package/dist/analyzers/anchors/anchor-loader.d.ts +47 -0
  3. package/dist/analyzers/anchors/anchor-loader.d.ts.map +1 -0
  4. package/dist/analyzers/anchors/anchor-loader.js +113 -0
  5. package/dist/analyzers/anchors/anchor-loader.js.map +1 -0
  6. package/dist/analyzers/anti-pattern.d.ts.map +1 -1
  7. package/dist/analyzers/anti-pattern.js +38 -26
  8. package/dist/analyzers/anti-pattern.js.map +1 -1
  9. package/dist/analyzers/completeness-helpers.d.ts +5 -0
  10. package/dist/analyzers/completeness-helpers.d.ts.map +1 -1
  11. package/dist/analyzers/completeness-helpers.js +17 -0
  12. package/dist/analyzers/completeness-helpers.js.map +1 -1
  13. package/dist/analyzers/completeness.d.ts.map +1 -1
  14. package/dist/analyzers/completeness.js +4 -4
  15. package/dist/analyzers/completeness.js.map +1 -1
  16. package/dist/analyzers/gs-scorer.d.ts +3 -1
  17. package/dist/analyzers/gs-scorer.d.ts.map +1 -1
  18. package/dist/analyzers/gs-scorer.js +5 -2
  19. package/dist/analyzers/gs-scorer.js.map +1 -1
  20. package/dist/analyzers/scorers/composable-scorer.d.ts +4 -2
  21. package/dist/analyzers/scorers/composable-scorer.d.ts.map +1 -1
  22. package/dist/analyzers/scorers/composable-scorer.js +50 -2
  23. package/dist/analyzers/scorers/composable-scorer.js.map +1 -1
  24. package/dist/analyzers/scorers/executable-scorer.d.ts +3 -2
  25. package/dist/analyzers/scorers/executable-scorer.d.ts.map +1 -1
  26. package/dist/analyzers/scorers/executable-scorer.js +64 -4
  27. package/dist/analyzers/scorers/executable-scorer.js.map +1 -1
  28. package/dist/analyzers/scorers/scorer-utils.d.ts +5 -3
  29. package/dist/analyzers/scorers/scorer-utils.d.ts.map +1 -1
  30. package/dist/analyzers/scorers/scorer-utils.js +34 -9
  31. package/dist/analyzers/scorers/scorer-utils.js.map +1 -1
  32. package/dist/analyzers/scorers/self-describing-scorer.d.ts +7 -4
  33. package/dist/analyzers/scorers/self-describing-scorer.d.ts.map +1 -1
  34. package/dist/analyzers/scorers/self-describing-scorer.js +17 -18
  35. package/dist/analyzers/scorers/self-describing-scorer.js.map +1 -1
  36. package/dist/artifacts/commit-hooks.d.ts +1 -1
  37. package/dist/artifacts/commit-hooks.d.ts.map +1 -1
  38. package/dist/artifacts/commit-hooks.js +2 -0
  39. package/dist/artifacts/commit-hooks.js.map +1 -1
  40. package/dist/cli/commands.d.ts +35 -1
  41. package/dist/cli/commands.d.ts.map +1 -1
  42. package/dist/cli/commands.js +109 -2
  43. package/dist/cli/commands.js.map +1 -1
  44. package/dist/cli/help.d.ts.map +1 -1
  45. package/dist/cli/help.js +7 -0
  46. package/dist/cli/help.js.map +1 -1
  47. package/dist/cli.d.ts.map +1 -1
  48. package/dist/cli.js +10 -1
  49. package/dist/cli.js.map +1 -1
  50. package/dist/disciplines/catalog.d.ts +16 -0
  51. package/dist/disciplines/catalog.d.ts.map +1 -0
  52. package/dist/disciplines/catalog.js +196 -0
  53. package/dist/disciplines/catalog.js.map +1 -0
  54. package/dist/disciplines/runner.d.ts +13 -0
  55. package/dist/disciplines/runner.d.ts.map +1 -0
  56. package/dist/disciplines/runner.js +35 -0
  57. package/dist/disciplines/runner.js.map +1 -0
  58. package/dist/registry/remote-gates.js +1 -1
  59. package/dist/registry/remote-gates.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.map +1 -1
  69. package/dist/shared/cnt-health.js +12 -4
  70. package/dist/shared/cnt-health.js.map +1 -1
  71. package/dist/shared/config.d.ts +8 -0
  72. package/dist/shared/config.d.ts.map +1 -1
  73. package/dist/shared/config.js +23 -0
  74. package/dist/shared/config.js.map +1 -1
  75. package/dist/shared/project-gates-helpers.d.ts +9 -0
  76. package/dist/shared/project-gates-helpers.d.ts.map +1 -1
  77. package/dist/shared/project-gates-helpers.js +35 -0
  78. package/dist/shared/project-gates-helpers.js.map +1 -1
  79. package/dist/shared/result-utils.d.ts +27 -0
  80. package/dist/shared/result-utils.d.ts.map +1 -0
  81. package/dist/shared/result-utils.js +41 -0
  82. package/dist/shared/result-utils.js.map +1 -0
  83. package/dist/shared/types/config.d.ts +7 -1
  84. package/dist/shared/types/config.d.ts.map +1 -1
  85. package/dist/shared/types/gates.d.ts +28 -0
  86. package/dist/shared/types/gates.d.ts.map +1 -1
  87. package/dist/shared/types/project.d.ts +66 -0
  88. package/dist/shared/types/project.d.ts.map +1 -1
  89. package/dist/shared/types/project.js.map +1 -1
  90. package/dist/shared/types/verify.d.ts +51 -1
  91. package/dist/shared/types/verify.d.ts.map +1 -1
  92. package/dist/shared/types/verify.js +37 -1
  93. package/dist/shared/types/verify.js.map +1 -1
  94. package/dist/tools/advise-session-advisor.d.ts +16 -0
  95. package/dist/tools/advise-session-advisor.d.ts.map +1 -0
  96. package/dist/tools/advise-session-advisor.js +89 -0
  97. package/dist/tools/advise-session-advisor.js.map +1 -0
  98. package/dist/tools/advise-session-signals.d.ts +21 -0
  99. package/dist/tools/advise-session-signals.d.ts.map +1 -0
  100. package/dist/tools/advise-session-signals.js +113 -0
  101. package/dist/tools/advise-session-signals.js.map +1 -0
  102. package/dist/tools/advise-session.d.ts +22 -0
  103. package/dist/tools/advise-session.d.ts.map +1 -0
  104. package/dist/tools/advise-session.js +31 -0
  105. package/dist/tools/advise-session.js.map +1 -0
  106. package/dist/tools/change-request.d.ts +53 -0
  107. package/dist/tools/change-request.d.ts.map +1 -0
  108. package/dist/tools/change-request.js +375 -0
  109. package/dist/tools/change-request.js.map +1 -0
  110. package/dist/tools/check-cascade-contracts.d.ts +13 -0
  111. package/dist/tools/check-cascade-contracts.d.ts.map +1 -1
  112. package/dist/tools/check-cascade-contracts.js +73 -2
  113. package/dist/tools/check-cascade-contracts.js.map +1 -1
  114. package/dist/tools/check-cascade.d.ts +4 -3
  115. package/dist/tools/check-cascade.d.ts.map +1 -1
  116. package/dist/tools/check-cascade.js +30 -12
  117. package/dist/tools/check-cascade.js.map +1 -1
  118. package/dist/tools/check-spec-consistency.d.ts +25 -0
  119. package/dist/tools/check-spec-consistency.d.ts.map +1 -0
  120. package/dist/tools/check-spec-consistency.js +339 -0
  121. package/dist/tools/check-spec-consistency.js.map +1 -0
  122. package/dist/tools/check-t4.d.ts +54 -0
  123. package/dist/tools/check-t4.d.ts.map +1 -0
  124. package/dist/tools/check-t4.js +305 -0
  125. package/dist/tools/check-t4.js.map +1 -0
  126. package/dist/tools/close-cycle-helpers.d.ts +21 -2
  127. package/dist/tools/close-cycle-helpers.d.ts.map +1 -1
  128. package/dist/tools/close-cycle-helpers.js +66 -10
  129. package/dist/tools/close-cycle-helpers.js.map +1 -1
  130. package/dist/tools/close-cycle.d.ts +2 -2
  131. package/dist/tools/close-cycle.d.ts.map +1 -1
  132. package/dist/tools/close-cycle.js +342 -4
  133. package/dist/tools/close-cycle.js.map +1 -1
  134. package/dist/tools/consolidate-status.d.ts +112 -0
  135. package/dist/tools/consolidate-status.d.ts.map +1 -0
  136. package/dist/tools/consolidate-status.js +356 -0
  137. package/dist/tools/consolidate-status.js.map +1 -0
  138. package/dist/tools/executable-gates.d.ts +52 -0
  139. package/dist/tools/executable-gates.d.ts.map +1 -0
  140. package/dist/tools/executable-gates.js +332 -0
  141. package/dist/tools/executable-gates.js.map +1 -0
  142. package/dist/tools/forgecraft-dispatch-extended.d.ts.map +1 -1
  143. package/dist/tools/forgecraft-dispatch-extended.js +75 -0
  144. package/dist/tools/forgecraft-dispatch-extended.js.map +1 -1
  145. package/dist/tools/forgecraft-dispatch.d.ts.map +1 -1
  146. package/dist/tools/forgecraft-dispatch.js +21 -0
  147. package/dist/tools/forgecraft-dispatch.js.map +1 -1
  148. package/dist/tools/forgecraft-router.d.ts +8 -0
  149. package/dist/tools/forgecraft-router.d.ts.map +1 -1
  150. package/dist/tools/forgecraft-router.js +21 -1
  151. package/dist/tools/forgecraft-router.js.map +1 -1
  152. package/dist/tools/forgecraft-schema-params.d.ts +61 -4
  153. package/dist/tools/forgecraft-schema-params.d.ts.map +1 -1
  154. package/dist/tools/forgecraft-schema-params.js +95 -0
  155. package/dist/tools/forgecraft-schema-params.js.map +1 -1
  156. package/dist/tools/forgecraft-schema.d.ts +62 -5
  157. package/dist/tools/forgecraft-schema.d.ts.map +1 -1
  158. package/dist/tools/forgecraft-schema.js +24 -0
  159. package/dist/tools/forgecraft-schema.js.map +1 -1
  160. package/dist/tools/gate-violations.d.ts +59 -0
  161. package/dist/tools/gate-violations.d.ts.map +1 -0
  162. package/dist/tools/gate-violations.js +152 -0
  163. package/dist/tools/gate-violations.js.map +1 -0
  164. package/dist/tools/generate-adr.js +6 -6
  165. package/dist/tools/generate-adr.js.map +1 -1
  166. package/dist/tools/generate-env-probe.d.ts +49 -0
  167. package/dist/tools/generate-env-probe.d.ts.map +1 -0
  168. package/dist/tools/generate-env-probe.js +365 -0
  169. package/dist/tools/generate-env-probe.js.map +1 -0
  170. package/dist/tools/generate-harness.d.ts +52 -0
  171. package/dist/tools/generate-harness.d.ts.map +1 -0
  172. package/dist/tools/generate-harness.js +333 -0
  173. package/dist/tools/generate-harness.js.map +1 -0
  174. package/dist/tools/generate-roadmap.d.ts +1 -1
  175. package/dist/tools/generate-roadmap.d.ts.map +1 -1
  176. package/dist/tools/generate-roadmap.js +38 -4
  177. package/dist/tools/generate-roadmap.js.map +1 -1
  178. package/dist/tools/generate-session-prompt.d.ts +4 -4
  179. package/dist/tools/generate-session-prompt.d.ts.map +1 -1
  180. package/dist/tools/generate-session-prompt.js +66 -16
  181. package/dist/tools/generate-session-prompt.js.map +1 -1
  182. package/dist/tools/generate-slo-probe.d.ts +53 -0
  183. package/dist/tools/generate-slo-probe.d.ts.map +1 -0
  184. package/dist/tools/generate-slo-probe.js +366 -0
  185. package/dist/tools/generate-slo-probe.js.map +1 -0
  186. package/dist/tools/layer-status-gates.d.ts +24 -0
  187. package/dist/tools/layer-status-gates.d.ts.map +1 -0
  188. package/dist/tools/layer-status-gates.js +151 -0
  189. package/dist/tools/layer-status-gates.js.map +1 -0
  190. package/dist/tools/layer-status.d.ts +133 -0
  191. package/dist/tools/layer-status.d.ts.map +1 -0
  192. package/dist/tools/layer-status.js +593 -0
  193. package/dist/tools/layer-status.js.map +1 -0
  194. package/dist/tools/postcondition-coverage.d.ts +57 -0
  195. package/dist/tools/postcondition-coverage.d.ts.map +1 -0
  196. package/dist/tools/postcondition-coverage.js +256 -0
  197. package/dist/tools/postcondition-coverage.js.map +1 -0
  198. package/dist/tools/probe-runners.d.ts +21 -0
  199. package/dist/tools/probe-runners.d.ts.map +1 -0
  200. package/dist/tools/probe-runners.js +246 -0
  201. package/dist/tools/probe-runners.js.map +1 -0
  202. package/dist/tools/probe-templates.d.ts +27 -0
  203. package/dist/tools/probe-templates.d.ts.map +1 -0
  204. package/dist/tools/probe-templates.js +279 -0
  205. package/dist/tools/probe-templates.js.map +1 -0
  206. package/dist/tools/propose-session.d.ts +28 -0
  207. package/dist/tools/propose-session.d.ts.map +1 -0
  208. package/dist/tools/propose-session.js +333 -0
  209. package/dist/tools/propose-session.js.map +1 -0
  210. package/dist/tools/roadmap-builder.d.ts +34 -1
  211. package/dist/tools/roadmap-builder.d.ts.map +1 -1
  212. package/dist/tools/roadmap-builder.js +153 -11
  213. package/dist/tools/roadmap-builder.js.map +1 -1
  214. package/dist/tools/run-env-probe.d.ts +57 -0
  215. package/dist/tools/run-env-probe.d.ts.map +1 -0
  216. package/dist/tools/run-env-probe.js +270 -0
  217. package/dist/tools/run-env-probe.js.map +1 -0
  218. package/dist/tools/run-harness.d.ts +52 -0
  219. package/dist/tools/run-harness.d.ts.map +1 -0
  220. package/dist/tools/run-harness.js +279 -0
  221. package/dist/tools/run-harness.js.map +1 -0
  222. package/dist/tools/run-slo-probe.d.ts +50 -0
  223. package/dist/tools/run-slo-probe.d.ts.map +1 -0
  224. package/dist/tools/run-slo-probe.js +281 -0
  225. package/dist/tools/run-slo-probe.js.map +1 -0
  226. package/dist/tools/scaffold-writer.d.ts.map +1 -1
  227. package/dist/tools/scaffold-writer.js +4 -0
  228. package/dist/tools/scaffold-writer.js.map +1 -1
  229. package/dist/tools/session-prompt-builders.d.ts +20 -0
  230. package/dist/tools/session-prompt-builders.d.ts.map +1 -1
  231. package/dist/tools/session-prompt-builders.js +111 -14
  232. package/dist/tools/session-prompt-builders.js.map +1 -1
  233. package/dist/tools/session-prompt-sections.d.ts +4 -2
  234. package/dist/tools/session-prompt-sections.d.ts.map +1 -1
  235. package/dist/tools/session-prompt-sections.js +22 -10
  236. package/dist/tools/session-prompt-sections.js.map +1 -1
  237. package/dist/tools/setup-monitoring.d.ts +41 -0
  238. package/dist/tools/setup-monitoring.d.ts.map +1 -0
  239. package/dist/tools/setup-monitoring.js +364 -0
  240. package/dist/tools/setup-monitoring.js.map +1 -0
  241. package/dist/tools/verify-formatter.d.ts.map +1 -1
  242. package/dist/tools/verify-formatter.js +15 -1
  243. package/dist/tools/verify-formatter.js.map +1 -1
  244. package/dist/tools/verify.d.ts.map +1 -1
  245. package/dist/tools/verify.js +3 -0
  246. package/dist/tools/verify.js.map +1 -1
  247. package/package.json +11 -2
  248. package/templates/api/harness/uc-template.hurl +20 -0
  249. package/templates/docs-manifest.yaml +224 -0
  250. package/templates/game/harness/uc-template.sim.ts +29 -0
  251. package/templates/universal/claude-md-blocks/layer-navigation.md +20 -0
  252. package/templates/universal/claude-md-blocks/nfr-contracts.md +22 -0
  253. package/templates/universal/hooks.yaml +212 -20
  254. package/templates/web-react/harness/uc-template.spec.ts +35 -0
@@ -16,6 +16,7 @@ import { scoreGsProperties, findDirectDbCallsInRoutes, findMissingTestFiles, } f
16
16
  import { analyzeProject } from "../analyzers/package-json.js";
17
17
  import { loadUserOverrides } from "../registry/loader.js";
18
18
  import { formatReport } from "./verify-formatter.js";
19
+ import { computeMaturityTier } from "../shared/types.js";
19
20
  // ── Schema ─────────────────────────────────────────────────────────────
20
21
  export const verifySchema = z.object({
21
22
  project_dir: z
@@ -56,6 +57,7 @@ export async function verifyHandler(args) {
56
57
  const propertyScores = scoreGsProperties(projectDir, testSuite.passed, layerViolations, missingTestFiles);
57
58
  const totalScore = propertyScores.reduce((sum, p) => sum + p.score, 0);
58
59
  const overallPass = testSuite.passed && totalScore >= args.pass_threshold;
60
+ const maturityTier = computeMaturityTier(totalScore);
59
61
  const result = {
60
62
  testSuite,
61
63
  propertyScores,
@@ -63,6 +65,7 @@ export async function verifyHandler(args) {
63
65
  layerViolations,
64
66
  missingTestFiles,
65
67
  overallPass,
68
+ maturityTier,
66
69
  };
67
70
  const report = formatReport(result, args.pass_threshold);
68
71
  const driftWarning = detectTagDrift(projectDir);
@@ -1 +1 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/tools/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,0EAA0E;AAE1E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,sEAAsE;QACpE,6BAA6B,CAChC;IACH,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,OAAO,CAAC,OAAO,CAAC;SAChB,QAAQ,CACP,4EAA4E,CAC7E;IACH,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CACP,wFAAwF,CACzF;CACJ,CAAC,CAAC;AAIH,0EAA0E;AAE1E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAiB;IAEjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAEtE,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAEzE,MAAM,eAAe,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAE1D,MAAM,cAAc,GAAG,iBAAiB,CACtC,UAAU,EACV,SAAS,CAAC,MAAM,EAChB,eAAe,EACf,gBAAgB,CACjB,CAAC;IAEF,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,IAAI,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC;IAC1E,MAAM,YAAY,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAErD,MAAM,MAAM,GAAiB;QAC3B,SAAS;QACT,cAAc;QACd,UAAU;QACV,eAAe;QACf,gBAAgB;QAChB,WAAW;QACX,YAAY;KACb,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACpE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,yEAAyE;AAEzE;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,UAAkB;IACxC,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,UAIF,CAAC;IACH,IAAI,CAAC;QACH,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,UAAU;SACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC5D,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO,CAAC,CAAC,GAAU,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjH,CAAC;IAEJ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO;QACL,KAAK;QACL,qCAAqC;QACrC,EAAE;QACF,yFAAyF;QACzF,EAAE;QACF,GAAG,OAAO;QACV,EAAE;QACF,oCAAoC,UAAU,0CAA0C;QACxF,EAAE;QACF,wFAAwF;KACzF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,0EAA0E;AAE1E;;;;;;GAMG;AACH,SAAS,kBAAkB,CACzB,UAAkB,EAClB,eAAmC;IAEnC,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAEpD,CAAC;YACF,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,UAAU;gBAAE,OAAO,UAAU,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CACnB,UAAkB,EAClB,OAAe,EACf,SAAiB;IAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAG5D,CAAC;IAEF,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE;QACrC,GAAG,EAAE,UAAU;QACf,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE;QACrD,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;KACpC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;SAC1C,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;IACV,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAEtD,OAAO;QACL,MAAM,EAAE,QAAQ,KAAK,CAAC;QACtB,QAAQ;QACR,UAAU;QACV,OAAO;QACP,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,kBAAkB,SAAS,QAAQ,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM;KACxE,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forgecraft-mcp",
3
- "version": "1.3.2",
3
+ "version": "1.6.1",
4
4
  "mcpName": "io.github.jghiringhelli/forgecraft",
5
5
  "description": "CLI + MCP sentinel for engineering standards — SOLID, testing, architecture, CI/CD — auto-tailored to your stack. Minimal MCP footprint (~200 tokens) via CLI-first design.",
6
6
  "type": "module",
@@ -19,11 +19,17 @@
19
19
  "test:mutation": "stryker run",
20
20
  "test:mutation:ci": "stryker run --reporters progress,clear-text",
21
21
  "test:mutation:sentinel": "stryker run stryker.sentinel.json",
22
+ "test:mutation:brownfield": "stryker run stryker.brownfield.json",
22
23
  "lint": "eslint src/",
24
+ "ship": "bash scripts/ship.sh",
25
+ "protect": "bash scripts/protect-branch.sh",
26
+ "audit:tests": "node scripts/audit-tests.cjs",
27
+ "post-results": "node scripts/post-results.cjs",
23
28
  "clean": "rimraf dist",
24
29
  "prepare": "node -e \"if(require('fs').existsSync('.git')&&require('fs').existsSync('scripts/setup-hooks.sh')){require('child_process').execSync('bash scripts/setup-hooks.sh',{stdio:'inherit'})}\"",
25
30
  "prepublishOnly": "npm run clean && npm run build",
26
- "export:taxonomy": "npx ts-node --esm scripts/export-taxonomy.ts"
31
+ "export:taxonomy": "npx ts-node --esm scripts/export-taxonomy.ts",
32
+ "docs:generate": "typedoc"
27
33
  },
28
34
  "keywords": [
29
35
  "mcp",
@@ -70,6 +76,8 @@
70
76
  "zod": "^3.24.2"
71
77
  },
72
78
  "devDependencies": {
79
+ "@commitlint/cli": "^19.8.1",
80
+ "@commitlint/config-conventional": "^19.8.1",
73
81
  "@stryker-mutator/core": "^9.6.0",
74
82
  "@stryker-mutator/vitest-runner": "^9.6.0",
75
83
  "@types/express": "^5.0.6",
@@ -83,6 +91,7 @@
83
91
  "express": "^5.2.1",
84
92
  "rimraf": "^6.0.1",
85
93
  "supertest": "^7.2.2",
94
+ "typedoc": "^0.28.19",
86
95
  "typescript": "^5.7.3",
87
96
  "vitest": "^3.0.5"
88
97
  }
@@ -0,0 +1,20 @@
1
+ # L2 Harness: {{uc_id}} — {{uc_title}}
2
+ # Actor: {{actor}}
3
+ # Precondition: {{precondition}}
4
+ # Postcondition: {{postcondition}}
5
+ #
6
+ # This is a behavioral harness probe. A failure is a specification violation.
7
+ # Implement the main flow steps from the use case below.
8
+
9
+ # Step 1: [precondition setup if needed]
10
+ # POST http://{{host}}/api/auth/login
11
+ # ...
12
+
13
+ # Step 2: [primary action]
14
+ # TODO: implement UC main flow as HTTP sequence
15
+ GET http://{{host}}/api/endpoint
16
+ Authorization: Bearer {{token}}
17
+
18
+ HTTP 200
19
+ [Asserts]
20
+ # jsonpath "$.field" == "expected_value"
@@ -0,0 +1,224 @@
1
+ # docs-manifest.yaml — canonical schema for the GS document taxonomy
2
+ #
3
+ # This file is the SINGLE SOURCE OF TRUTH for the document layout that all
4
+ # Pragmaworks GS-aware tools (forgecraft, chronicle, chronicle-team) honor.
5
+ # Projects do NOT copy this file. They write their own ./docs/manifest.yaml
6
+ # which references this canonical schema and overrides paths where needed.
7
+ #
8
+ # Canonical location:
9
+ # github.com/jghiringhelli/forgecraft-mcp/templates/docs-manifest.yaml
10
+ # (also reachable via the forgecraft npm package)
11
+ #
12
+ # A project's docs/manifest.yaml LOOKS LIKE:
13
+ #
14
+ # schema_source: forgecraft@1.5.0/templates/docs-manifest.yaml
15
+ # project:
16
+ # name: my-app
17
+ # type: api
18
+ # overrides:
19
+ # documents.specs.path: docs/product/ # legacy layout, mapped in
20
+ # documents.use_cases.path: docs/uc/
21
+ #
22
+ # Tools resolve paths in this order:
23
+ # 1. project's docs/manifest.yaml `overrides:` block (highest priority)
24
+ # 2. project's docs/manifest.yaml top-level fields
25
+ # 3. this canonical schema's defaults
26
+ #
27
+ # That is what "back-compat" means here: the canonical layout is the default;
28
+ # legacy projects map their existing files into the schema via overrides.
29
+
30
+ version: 1
31
+
32
+ # ── Project metadata ─────────────────────────────────────────────────────
33
+ project:
34
+ name: <required> # human-readable project name
35
+ type: <required> # library | cli | api | service | app | tool
36
+ release_phase: greenfield # greenfield | brownfield | maintenance
37
+
38
+ # ── Document types and their canonical locations ─────────────────────────
39
+ # Each entry defines:
40
+ # path — where files live (or active_path/done_path for archived types)
41
+ # pattern — glob applied for discovery
42
+ # required_on — conventional-commit types that MUST touch a file in this slot
43
+ # archive_when (optional) — when files move from active_path to done_path
44
+ documents:
45
+
46
+ # SPECS — what we are building (product/use-case-driven specs)
47
+ specs:
48
+ path: docs/specs/
49
+ pattern: "*.md"
50
+ required_on: [feat, refactor]
51
+ description: >
52
+ Product-level specs. One per feature or major capability.
53
+ Answers: what does the user do, what outcome do they want, what is in/out of scope?
54
+
55
+ # ADRs — architectural decision records (how we build, with rationale)
56
+ adrs:
57
+ active_path: docs/adrs/active/
58
+ done_path: docs/adrs/done/
59
+ pattern: "ADR-*.md"
60
+ required_on: [] # encouraged on feat/refactor when a decision is made
61
+ archive_when: superseded
62
+ description: >
63
+ Architectural Decision Records. One file per decision (e.g. ADR-0007-pick-postgres.md).
64
+ Active = currently in force. Done = superseded or rolled back, kept for history.
65
+
66
+ # USE CASES — actor + action + outcome (executable scenarios)
67
+ use_cases:
68
+ path: docs/use-cases/
69
+ pattern: "UC-*.md"
70
+ required_on: [feat]
71
+ description: >
72
+ Executable use cases. Each one: actor, preconditions, steps, expected outcome.
73
+ These bind specs to harness/tests.
74
+
75
+ # ROADMAPS — planned/active/done work items
76
+ roadmaps:
77
+ active_path: docs/roadmaps/active/
78
+ done_path: docs/roadmaps/done/
79
+ pattern: "RM-*.md"
80
+ required_on: [] # roadmap items are pulled from tickets/issues, not commits
81
+ archive_when: implemented
82
+ description: >
83
+ Roadmap items. One file per planned chunk of work (e.g. RM-0042-add-oauth.md).
84
+ Active = open. Done = shipped (kept for history and changelog generation).
85
+
86
+ # SCHEMAS — diagrams, data schemas, API schemas
87
+ schemas:
88
+ path: docs/schemas/
89
+ pattern: "*.{md,mmd,json,yaml}"
90
+ required_on: [feat]
91
+ description: >
92
+ Mermaid diagrams (.mmd or fenced .md), JSON Schema, OpenAPI specs, ER diagrams.
93
+ Required when data model or API surface changes.
94
+
95
+ # DECISIONS — lightweight bug-fix or operational decisions
96
+ decisions:
97
+ path: docs/decisions/
98
+ pattern: "*.md"
99
+ required_on: [] # optional even on fix; encouraged when behavior is intentionally redefined
100
+ description: >
101
+ One-pager rationale for non-architectural decisions: bug-fix interpretations,
102
+ operational tweaks, "we chose X over Y because Z" notes that don't warrant a full ADR.
103
+ Filename pattern: YYYY-MM-DD-slug.md.
104
+
105
+ # CONTRACTS — behavioral contracts (what the system promises)
106
+ contracts:
107
+ path: docs/contracts/
108
+ pattern: "*.{md,yaml}"
109
+ required_on: []
110
+ description: >
111
+ Behavioral contracts. NFRs, SLOs, API contracts, error semantics.
112
+ Often referenced from specs and ADRs.
113
+
114
+ # SESSION PROMPTS — bound to roadmap items (forgecraft + chronicle convention)
115
+ session_prompts:
116
+ path: docs/session-prompts/
117
+ pattern: "RM-*.md"
118
+ required_on: []
119
+ description: >
120
+ Per-roadmap-item prompts that drive AI sessions. One per RM-* item.
121
+ Generated by forgecraft propose_session, executed by chronicle.
122
+
123
+ # ── Cascade rules — which commit types require which doc updates ─────────
124
+ # These are enforced by:
125
+ # - .claude/hooks/pre-commit-doc-cascade.sh (local, advisory)
126
+ # - .github/workflows/validate-pr.yml (CI, blocking when severity=error)
127
+ #
128
+ # Severity:
129
+ # error — blocks commit/PR
130
+ # warning — emits a notice; does not block
131
+ # info — logs only
132
+ cascade:
133
+ feat:
134
+ required: [specs]
135
+ encouraged: [use_cases, schemas, adrs]
136
+ severity: warning # bump to error once a project's baseline is clean
137
+
138
+ fix:
139
+ required: [] # no doc requirement; regression test is mandatory (see human_judgment)
140
+ encouraged: [decisions]
141
+ require_regression_test: true
142
+ severity: warning
143
+
144
+ refactor:
145
+ required: []
146
+ encouraged: [adrs, decisions]
147
+ severity: info
148
+
149
+ perf:
150
+ required: []
151
+ encouraged: [decisions, schemas]
152
+ severity: info
153
+
154
+ docs:
155
+ required: []
156
+ encouraged: []
157
+ severity: info
158
+
159
+ test:
160
+ required: []
161
+ encouraged: []
162
+ severity: info
163
+
164
+ chore:
165
+ required: []
166
+ encouraged: []
167
+ severity: info
168
+
169
+ ci:
170
+ required: []
171
+ encouraged: []
172
+ severity: info
173
+
174
+ revert:
175
+ required: []
176
+ encouraged: [decisions]
177
+ severity: info
178
+
179
+ # ── Anti-drift — public API surface enforcement ─────────────────────────
180
+ # When the public surface changes (exports, public types, CLI flags, MCP tool
181
+ # schemas), a spec or ADR touch is required regardless of commit type.
182
+ api_surface:
183
+ detect:
184
+ typescript:
185
+ exports_glob: "src/**/index.ts"
186
+ public_types_glob: "src/types/**/*.ts"
187
+ cli:
188
+ flags_glob: "src/cli/**/*.ts"
189
+ mcp:
190
+ tools_glob: "src/tools/**/*.ts"
191
+ on_change_require: [specs, adrs]
192
+ severity: warning
193
+
194
+ # ── Human-judgment gate — "no untested or unreviewed code to prod" ──────
195
+ human_judgment:
196
+ protected_branches: [main, develop]
197
+ require_review: true
198
+ min_reviewers: 1 # set 0 for solo mode (still requires PR + checks)
199
+ require_tests_pass: true # CI must show tests green
200
+ require_human_ack: true # at least one human comment/approval on the PR
201
+ block_ai_only_merge: true # disallow merge when only the PR author has interacted
202
+
203
+ # ── Recording layers — three-tier memory contract ───────────────────────
204
+ # This block is informational. It documents how project / individual / team
205
+ # memory split across tools, so each tool knows its lane.
206
+ recording:
207
+ project:
208
+ owner: forgecraft
209
+ surface: docs/* + .forgecraft/* + .claude/hooks/*
210
+ scope: cascade docs, gates, hooks, harness contracts
211
+ individual:
212
+ owner: chronicle
213
+ surface: ~/.chronicle/ (per-user memory store)
214
+ scope: prompt history, decisions, findings, developer habits, work style
215
+ team:
216
+ owner: chronicle-team
217
+ surface: shared DB (Railway) + dashboard
218
+ scope: shared memory, prompt analytics, ticket integration, workload split (axon)
219
+
220
+ # ── Brownfield ingestion settings ───────────────────────────────────────
221
+ brownfield:
222
+ scanner: pragmaworks-cli # external tool, not embedded
223
+ override_file: docs/manifest.yaml # generated/edited during ingestion
224
+ report_path: reports/brownfield-audit.md
@@ -0,0 +1,29 @@
1
+ /**
2
+ * L2 Harness: {{uc_id}} — {{uc_title}}
3
+ *
4
+ * Headless simulation probe — verifies behavioral invariants without rendering.
5
+ * Runs the use case scenario through the game engine in headless mode.
6
+ * Failure = specification violation.
7
+ */
8
+
9
+ // TODO: Import your game engine / simulation module
10
+ // import { GameEngine } from '../../src/engine';
11
+
12
+ async function runProbe(): Promise<void> {
13
+ // Set up precondition: {{precondition}}
14
+ // const engine = new GameEngine({ headless: true });
15
+
16
+ // Execute main flow: {{main_flow_summary}}
17
+
18
+ // Assert postcondition: {{postcondition}}
19
+ // if (!engine.state.matches(expectedState)) {
20
+ // throw new Error(`UC postcondition violated: ${engine.state}`);
21
+ // }
22
+
23
+ throw new Error("Not implemented: add simulation scenario for {{uc_id}}");
24
+ }
25
+
26
+ runProbe().catch((err) => {
27
+ console.error(err);
28
+ process.exit(1);
29
+ });
@@ -0,0 +1,20 @@
1
+ ## Layer Navigation Protocol
2
+
3
+ ForgeCraft tracks automation depth across four active layers. Before beginning
4
+ implementation work, call `layer_status` to understand the current state.
5
+
6
+ | Layer | What it means | How to advance |
7
+ |---|---|---|
8
+ | **L1 Blueprint** | Use case documented + implementation + tests | Write formal UC, implement, add tests |
9
+ | **L2 Harness** | Use case has executable probe in `.forgecraft/harness/` | Create `uc-NNN.yaml` with probe definitions |
10
+ | **L3 Environment** | All infra state derivable from spec | Add CI, Dockerfile, env schema to spec |
11
+ | **L4 Monitoring** | Runtime drift evaluated against spec | Add health probes, drift detection config |
12
+
13
+ **Layer completion is a spec gap, not a todo list.** A missing L2 probe is not
14
+ something to schedule — it is an incomplete grammar. The gate fires until the probe exists.
15
+
16
+ **L2 probe types available**: `mcp_call`, `playwright`, `api_call`, `db_query`,
17
+ `file_system`, `headless_sim`
18
+
19
+ **To add a probe**: create `.forgecraft/harness/uc-NNN.yaml` following the format
20
+ in any existing probe file. One probe is enough to move a UC from ❌ to ✅.
@@ -0,0 +1,22 @@
1
+ ## Non-Functional Requirement Contracts
2
+
3
+ Declare SLA and throughput obligations as measurable assertions.
4
+ Aspirations ("should be fast") are not contracts. Each row is machine-checkable.
5
+
6
+ <!-- Fill in actual values before pre-release. -->
7
+
8
+ | Operation | P99 Latency | Max Latency | Throughput | Notes |
9
+ |---|---|---|---|---|
10
+ | [Primary read] | ≤ __ms | ≤ __ms | __ RPS | |
11
+ | [Primary write] | ≤ __ms | ≤ __ms | __ RPS | |
12
+ | [Background job] | — | ≤ __s | — | Async |
13
+
14
+ ## Availability
15
+ - Uptime SLA: __% (e.g., 99.9%)
16
+ - Max planned downtime per month: __ minutes
17
+
18
+ ## Correctness Constraints
19
+ - [List idempotency, determinism, or monotonicity requirements]
20
+
21
+ **Verification**: Load tests in `tests/harness/` must assert these bounds.
22
+ Gate: `nfr-contracts-required` fires until this file has measurable values.