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
@@ -1 +1 @@
1
- {"version":3,"file":"composable-scorer.js","sourceRoot":"","sources":["../../../src/analyzers/scorers/composable-scorer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,QAAkB;IACpE,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QAC3C,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QAC/C,UAAU,EAAE,SAAS;KACtB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,MAAM,aAAa,GAAG;QACpB,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QACpD,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QAC9C,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9C,cAAc,EAAE,YAAY;KAC7B,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CACJ,kDAAkD,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9E,gBAAgB,CAAC,CAAC,CAAC,CACtB,CAAC;IAEF,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;YACzB,wBAAwB,UAAU,GAAG;YACrC,2BAA2B,aAAa,GAAG;YAC3C,aAAa;gBACX,CAAC,CAAC,mCAAmC;gBACrC,CAAC,CAAC,+CAA+C;SACpD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;YACzB,wBAAwB,UAAU,GAAG;YACrC,4EAA4E;SAC7E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;QACzB,wEAAwE;QACxE,2BAA2B;KAC5B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"composable-scorer.js","sourceRoot":"","sources":["../../../src/analyzers/scorers/composable-scorer.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,9 @@
4
4
  import type { GsPropertyScore } from "../../shared/types.js";
5
5
  /**
6
6
  * Score the Executable GS property.
7
- * 2 = tests passed + CI configured OR verification-state.json with passed steps.
8
- * 1 = tests passed locally but no CI or verification state.
7
+ * 2 = tests passed + CI configured OR verification-state.json with passed steps
8
+ * OR tests passed + harness-run.json with ≥1 PASS result AND L2 coverage ≥ 50%.
9
+ * 1 = tests passed locally but no CI, no verification state, or harness exists but 0% passing.
9
10
  * 0 = tests failed OR no test infrastructure.
10
11
  */
11
12
  export declare function scoreExecutable(projectDir: string, testsPassed: boolean): GsPropertyScore;
@@ -1 +1 @@
1
- {"version":3,"file":"executable-scorer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/scorers/executable-scorer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,eAAe,CA2CzF"}
1
+ {"version":3,"file":"executable-scorer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/scorers/executable-scorer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA8C7D;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,OAAO,GACnB,eAAe,CA8EjB"}
@@ -4,10 +4,44 @@
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  import { join } from "node:path";
6
6
  import { gs } from "./scorer-utils.js";
7
+ /**
8
+ * Read harness-run.json from .forgecraft/harness-run.json.
9
+ * Returns null when file is missing or unparseable.
10
+ */
11
+ function readHarnessRun(projectDir) {
12
+ const runJsonPath = join(projectDir, ".forgecraft", "harness-run.json");
13
+ if (!existsSync(runJsonPath))
14
+ return null;
15
+ try {
16
+ const raw = readFileSync(runJsonPath, "utf-8");
17
+ return JSON.parse(raw);
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ /**
24
+ * Count total use cases in docs/use-cases.md.
25
+ * Returns 0 when file is missing or unparseable.
26
+ */
27
+ function countUseCases(projectDir) {
28
+ const useCasesPath = join(projectDir, "docs", "use-cases.md");
29
+ if (!existsSync(useCasesPath))
30
+ return 0;
31
+ try {
32
+ const content = readFileSync(useCasesPath, "utf-8");
33
+ const matches = content.match(/^##\s+UC-\d{3}:/gm);
34
+ return matches?.length ?? 0;
35
+ }
36
+ catch {
37
+ return 0;
38
+ }
39
+ }
7
40
  /**
8
41
  * Score the Executable GS property.
9
- * 2 = tests passed + CI configured OR verification-state.json with passed steps.
10
- * 1 = tests passed locally but no CI or verification state.
42
+ * 2 = tests passed + CI configured OR verification-state.json with passed steps
43
+ * OR tests passed + harness-run.json with ≥1 PASS result AND L2 coverage ≥ 50%.
44
+ * 1 = tests passed locally but no CI, no verification state, or harness exists but 0% passing.
11
45
  * 0 = tests failed OR no test infrastructure.
12
46
  */
13
47
  export function scoreExecutable(projectDir, testsPassed) {
@@ -34,8 +68,12 @@ export function scoreExecutable(projectDir, testsPassed) {
34
68
  }
35
69
  }
36
70
  const ciPaths = [
37
- ".github/workflows", ".gitlab-ci.yml", ".circleci/config.yml",
38
- "Jenkinsfile", ".travis.yml", "azure-pipelines.yml",
71
+ ".github/workflows",
72
+ ".gitlab-ci.yml",
73
+ ".circleci/config.yml",
74
+ "Jenkinsfile",
75
+ ".travis.yml",
76
+ "azure-pipelines.yml",
39
77
  ];
40
78
  const hasCi = ciPaths.some((p) => existsSync(join(projectDir, p)));
41
79
  if (hasCi) {
@@ -43,9 +81,31 @@ export function scoreExecutable(projectDir, testsPassed) {
43
81
  "Tests passed + CI pipeline configured (automated runtime execution evidence)",
44
82
  ]);
45
83
  }
84
+ // Harness evidence path
85
+ const harnessRun = readHarnessRun(projectDir);
86
+ if (harnessRun) {
87
+ const totalUcs = countUseCases(projectDir);
88
+ const l2Coverage = totalUcs > 0 ? harnessRun.passed / totalUcs : 0;
89
+ const pct = Math.round(l2Coverage * 100);
90
+ const evidenceLine = pct >= 100
91
+ ? `Harness run: ${harnessRun.passed}/${totalUcs} UCs passing (100% L2 coverage) — behavioral contracts verified`
92
+ : `Harness run: ${harnessRun.passed}/${totalUcs} UCs passing (${pct}% L2 coverage) — run more probes for full coverage`;
93
+ if (harnessRun.passed >= 1 && l2Coverage >= 0.5) {
94
+ return gs("executable", 2, [
95
+ "Tests passed + harness execution evidence recorded",
96
+ evidenceLine,
97
+ ]);
98
+ }
99
+ // Harness exists but insufficient coverage
100
+ return gs("executable", 1, [
101
+ "Tests passed locally but harness coverage below 50% or 0 probes passing",
102
+ evidenceLine,
103
+ ]);
104
+ }
46
105
  return gs("executable", 1, [
47
106
  "Tests passed locally but no CI configured and no verification-state.json",
48
107
  "Local pass is necessary but not sufficient for pre-release — add CI or record_verification steps",
108
+ "No harness-run.json found — run run_harness to generate behavioral execution evidence",
49
109
  ]);
50
110
  }
51
111
  //# sourceMappingURL=executable-scorer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executable-scorer.js","sourceRoot":"","sources":["../../../src/analyzers/scorers/executable-scorer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,WAAoB;IACtE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;YACzB,0FAA0F;SAC3F,CAAC,CAAC;IACL,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,yBAAyB,CAAC,CAAC;IACrF,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAG3B,CAAC;YACF,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;YAC9E,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;oBACzB,uEAAuE;oBACvE,gBAAgB,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;iBAC7D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG;QACd,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB;QAC7D,aAAa,EAAE,aAAa,EAAE,qBAAqB;KACpD,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;YACzB,8EAA8E;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;QACzB,0EAA0E;QAC1E,kGAAkG;KACnG,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"executable-scorer.js","sourceRoot":"","sources":["../../../src/analyzers/scorers/executable-scorer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAEvC;;;GAGG;AACH,SAAS,cAAc,CAAC,UAAkB;IAOxC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;IACxE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAMpB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,UAAkB;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACnD,OAAO,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAkB,EAClB,WAAoB;IAEpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;YACzB,0FAA0F;SAC3F,CAAC,CAAC;IACL,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,CAC5B,UAAU,EACV,aAAa,EACb,yBAAyB,CAC1B,CAAC;IACF,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAG3B,CAAC;YACF,MAAM,cAAc,GAClB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;YACzD,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;oBACzB,uEAAuE;oBACvE,gBAAgB,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;iBAC7D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG;QACd,mBAAmB;QACnB,gBAAgB;QAChB,sBAAsB;QACtB,aAAa;QACb,aAAa;QACb,qBAAqB;KACtB,CAAC;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;YACzB,8EAA8E;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;QACzC,MAAM,YAAY,GAChB,GAAG,IAAI,GAAG;YACR,CAAC,CAAC,gBAAgB,UAAU,CAAC,MAAM,IAAI,QAAQ,iEAAiE;YAChH,CAAC,CAAC,gBAAgB,UAAU,CAAC,MAAM,IAAI,QAAQ,iBAAiB,GAAG,oDAAoD,CAAC;QAE5H,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,UAAU,IAAI,GAAG,EAAE,CAAC;YAChD,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;gBACzB,oDAAoD;gBACpD,YAAY;aACb,CAAC,CAAC;QACL,CAAC;QAED,2CAA2C;QAC3C,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;YACzB,yEAAyE;YACzE,YAAY;SACb,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;QACzB,0EAA0E;QAC1E,kGAAkG;QAClG,uFAAuF;KACxF,CAAC,CAAC;AACL,CAAC"}
@@ -8,9 +8,11 @@ export declare const ROUTE_DIRS: string[];
8
8
  export declare const DB_CALL_PATTERNS: RegExp[];
9
9
  /** Lines that are comments or imports — excluded from DB call detection. */
10
10
  export declare const COMMENT_OR_IMPORT: RegExp;
11
- /** Minimum instruction-file length to be considered substantive. */
12
- export declare const MIN_INSTRUCTION_FILE_LINES = 40;
13
- /** Keywords that indicate an instruction file covers architecture/conventions/decisions. */
11
+ /**
12
+ * Keywords that indicate an instruction file covers architecture/conventions/decisions.
13
+ * Intentionally broad to be tech-agnostic: web services, libraries, CLIs,
14
+ * GitHub Actions, and ML projects each use different vocabulary.
15
+ */
14
16
  export declare const INSTRUCTION_COVERAGE_KEYWORDS: string[];
15
17
  /** Minimum distinct keyword hits to award score 2 for Self-describing. */
16
18
  export declare const MIN_KEYWORD_HITS = 3;
@@ -1 +1 @@
1
- {"version":3,"file":"scorer-utils.d.ts","sourceRoot":"","sources":["../../../src/analyzers/scorers/scorer-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIzF,iEAAiE;AACjE,eAAO,MAAM,UAAU,UAA4D,CAAC;AAEpF,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,EAAE,MAAM,EASpC,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,QAA+C,CAAC;AAE9E,oEAAoE;AACpE,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,4FAA4F;AAC5F,eAAO,MAAM,6BAA6B,UAUzC,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAIlC,sCAAsC;AACtC,wBAAgB,EAAE,CAChB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,eAAe,CAEjB;AAID,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,6DAA6D;AAC7D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGrD;AAID,6DAA6D;AAC7D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,EAAE,GAC3B,IAAI,CASN;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAMxE"}
1
+ {"version":3,"file":"scorer-utils.d.ts","sourceRoot":"","sources":["../../../src/analyzers/scorers/scorer-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,cAAc,EACf,MAAM,uBAAuB,CAAC;AAI/B,iEAAiE;AACjE,eAAO,MAAM,UAAU,UAMtB,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,EAAE,MAAM,EASpC,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,QAA+C,CAAC;AAE9E;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,UAuBzC,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAIlC,sCAAsC;AACtC,wBAAgB,EAAE,CAChB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,eAAe,CAEjB;AAID,sEAAsE;AACtE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI1D;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAK7D;AAED,6DAA6D;AAC7D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKrD;AAID,6DAA6D;AAC7D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,EAAE,GAC3B,IAAI,CAaN;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAMxE"}
@@ -4,7 +4,13 @@
4
4
  import { extname, basename, dirname } from "node:path";
5
5
  // ── Constants ─────────────────────────────────────────────────────────
6
6
  /** Directories that are considered "route/controller" layers. */
7
- export const ROUTE_DIRS = ["routes", "controllers", "handlers", "api", "endpoints"];
7
+ export const ROUTE_DIRS = [
8
+ "routes",
9
+ "controllers",
10
+ "handlers",
11
+ "api",
12
+ "endpoints",
13
+ ];
8
14
  /** ORM/DB client call patterns to flag in route files. */
9
15
  export const DB_CALL_PATTERNS = [
10
16
  /\bprisma\.\w+\.\w+\s*\(/, // prisma.user.findMany(
@@ -18,19 +24,34 @@ export const DB_CALL_PATTERNS = [
18
24
  ];
19
25
  /** Lines that are comments or imports — excluded from DB call detection. */
20
26
  export const COMMENT_OR_IMPORT = /^\s*(\/\/|\/\*|\*|#|import\s|require\s*\()/;
21
- /** Minimum instruction-file length to be considered substantive. */
22
- export const MIN_INSTRUCTION_FILE_LINES = 40;
23
- /** Keywords that indicate an instruction file covers architecture/conventions/decisions. */
27
+ /**
28
+ * Keywords that indicate an instruction file covers architecture/conventions/decisions.
29
+ * Intentionally broad to be tech-agnostic: web services, libraries, CLIs,
30
+ * GitHub Actions, and ML projects each use different vocabulary.
31
+ */
24
32
  export const INSTRUCTION_COVERAGE_KEYWORDS = [
33
+ // Web service / layered architecture terms
25
34
  "architecture",
35
+ "layer",
36
+ "repository",
37
+ "service",
38
+ // Universal design terms
26
39
  "convention",
27
40
  "decision",
41
+ "pattern",
42
+ "module",
43
+ "interface",
44
+ "constraint",
45
+ "behavior",
46
+ // Documentation/traceability
28
47
  "adr",
29
48
  "domain",
30
- "pattern",
31
- "layer",
32
- "repository",
33
- "service",
49
+ // Action/CLI/tool-specific
50
+ "workflow",
51
+ "input",
52
+ "output",
53
+ "command",
54
+ "tool",
34
55
  ];
35
56
  /** Minimum distinct keyword hits to award score 2 for Self-describing. */
36
57
  export const MIN_KEYWORD_HITS = 3;
@@ -67,7 +88,11 @@ export function collectDbViolations(lines, relPath, violations) {
67
88
  continue;
68
89
  const matchedPattern = DB_CALL_PATTERNS.find((p) => p.test(line));
69
90
  if (matchedPattern) {
70
- violations.push({ file: relPath, line: i + 1, snippet: line.slice(0, 120) });
91
+ violations.push({
92
+ file: relPath,
93
+ line: i + 1,
94
+ snippet: line.slice(0, 120),
95
+ });
71
96
  }
72
97
  }
73
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scorer-utils.js","sourceRoot":"","sources":["../../../src/analyzers/scorers/scorer-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scorer-utils.js","sourceRoot":"","sources":["../../../src/analyzers/scorers/scorer-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOvD,yEAAyE;AAEzE,iEAAiE;AACjE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ;IACR,aAAa;IACb,UAAU;IACV,KAAK;IACL,WAAW;CACZ,CAAC;AAEF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,yBAAyB,EAAE,wBAAwB;IACnD,2BAA2B,EAAE,oBAAoB;IACjD,cAAc,EAAE,oBAAoB;IACpC,gBAAgB,EAAE,cAAc;IAChC,wBAAwB,EAAE,qBAAqB;IAC/C,qBAAqB,EAAE,kBAAkB;IACzC,wBAAwB,EAAE,qBAAqB;IAC/C,2BAA2B,EAAE,mCAAmC;CACjE,CAAC;AAEF,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,4CAA4C,CAAC;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,2CAA2C;IAC3C,cAAc;IACd,OAAO;IACP,YAAY;IACZ,SAAS;IACT,yBAAyB;IACzB,YAAY;IACZ,UAAU;IACV,SAAS;IACT,QAAQ;IACR,WAAW;IACX,YAAY;IACZ,UAAU;IACV,6BAA6B;IAC7B,KAAK;IACL,QAAQ;IACR,2BAA2B;IAC3B,UAAU;IACV,OAAO;IACP,QAAQ;IACR,SAAS;IACT,MAAM;CACP,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAElC,0EAA0E;AAE1E,sCAAsC;AACtC,MAAM,UAAU,EAAE,CAChB,QAAoB,EACpB,KAAgB,EAChB,QAAkB;IAElB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED,0EAA0E;AAE1E,sEAAsE;AACtE,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CACjE,OAAO,CAAC,QAAQ,CAAC,CAClB,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,sGAAsG,CAAC,IAAI,CAChH,UAAU,CACX,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,OAAO,uEAAuE,CAAC,IAAI,CACjF,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAC7B,IAAI,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,0EAA0E;AAE1E,6DAA6D;AAC7D,MAAM,UAAU,mBAAmB,CACjC,KAAe,EACf,OAAe,EACf,UAA4B;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAW,CAAC;QAChC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC3C,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,cAAc,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,CAAC,GAAG,CAAC;gBACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;aAC5B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,IAAY;IAEZ,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,OAAO,GAAG,GAAG,IAAI,IAAI,UAAU,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAAkB;IAC7D,OAAO,QAAQ,CAAC,IAAI,CAClB,CAAC,CAAC,EAAE,EAAE,CACJ,mBAAmB,CAAC,CAAC,CAAC;QACtB,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,KAAK,IAAI,CACrE,CAAC;AACJ,CAAC"}
@@ -1,12 +1,15 @@
1
1
  /**
2
- * Self-describing scorer: instruction file exists, is substantive, and covers
3
- * architecture / conventions / decisions.
2
+ * Self-describing scorer: instruction file exists and covers architecture/convention keywords.
3
+ *
4
+ * Sentinel-aware: a compact CLAUDE.md that navigates to the right docs is better
5
+ * than a verbose file that repeats them. Line count is irrelevant — keyword coverage
6
+ * is the signal.
4
7
  */
5
8
  import type { GsPropertyScore } from "../../shared/types.js";
6
9
  /**
7
10
  * Score the Self-describing GS property.
8
- * 2 = instruction file found, substantive, covers architecture/convention keywords.
9
- * 1 = file found but short or missing keywords.
11
+ * 2 = instruction file exists and covers ≥ MIN_KEYWORD_HITS architecture/convention keywords.
12
+ * 1 = file exists but covers fewer keywords (present but not describing the architecture).
10
13
  * 0 = no instruction file found.
11
14
  */
12
15
  export declare function scoreSelfDescribing(projectDir: string): GsPropertyScore;
@@ -1 +1 @@
1
- {"version":3,"file":"self-describing-scorer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/scorers/self-describing-scorer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAwCvE"}
1
+ {"version":3,"file":"self-describing-scorer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/scorers/self-describing-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAO7D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAuCvE"}
@@ -1,14 +1,17 @@
1
1
  /**
2
- * Self-describing scorer: instruction file exists, is substantive, and covers
3
- * architecture / conventions / decisions.
2
+ * Self-describing scorer: instruction file exists and covers architecture/convention keywords.
3
+ *
4
+ * Sentinel-aware: a compact CLAUDE.md that navigates to the right docs is better
5
+ * than a verbose file that repeats them. Line count is irrelevant — keyword coverage
6
+ * is the signal.
4
7
  */
5
8
  import { existsSync, readFileSync } from "node:fs";
6
9
  import { join } from "node:path";
7
- import { gs, MIN_INSTRUCTION_FILE_LINES, INSTRUCTION_COVERAGE_KEYWORDS, MIN_KEYWORD_HITS } from "./scorer-utils.js";
10
+ import { gs, INSTRUCTION_COVERAGE_KEYWORDS, MIN_KEYWORD_HITS, } from "./scorer-utils.js";
8
11
  /**
9
12
  * Score the Self-describing GS property.
10
- * 2 = instruction file found, substantive, covers architecture/convention keywords.
11
- * 1 = file found but short or missing keywords.
13
+ * 2 = instruction file exists and covers ≥ MIN_KEYWORD_HITS architecture/convention keywords.
14
+ * 1 = file exists but covers fewer keywords (present but not describing the architecture).
12
15
  * 0 = no instruction file found.
13
16
  */
14
17
  export function scoreSelfDescribing(projectDir) {
@@ -28,24 +31,20 @@ export function scoreSelfDescribing(projectDir) {
28
31
  try {
29
32
  content = readFileSync(join(projectDir, found), "utf-8");
30
33
  }
31
- catch { /* empty */ }
32
- const lines = content.split("\n").filter((l) => l.trim().length > 0);
33
- if (lines.length < MIN_INSTRUCTION_FILE_LINES) {
34
- return gs("self-describing", 1, [
35
- `${found} found but only ${lines.length} non-empty lines (< ${MIN_INSTRUCTION_FILE_LINES} — treat as stub)`,
36
- ]);
34
+ catch {
35
+ /* empty */
37
36
  }
38
37
  const lower = content.toLowerCase();
39
38
  const hits = INSTRUCTION_COVERAGE_KEYWORDS.filter((kw) => lower.includes(kw));
40
- if (hits.length < MIN_KEYWORD_HITS) {
41
- return gs("self-describing", 1, [
42
- `${found} found (${lines.length} lines) but covers fewer than ${MIN_KEYWORD_HITS} architecture/convention keywords`,
43
- `Missing keywords: ${INSTRUCTION_COVERAGE_KEYWORDS.filter((kw) => !lower.includes(kw)).slice(0, 5).join(", ")}`,
39
+ if (hits.length >= MIN_KEYWORD_HITS) {
40
+ return gs("self-describing", 2, [
41
+ `${found} found — covers: ${hits.join(", ")}`,
44
42
  ]);
45
43
  }
46
- return gs("self-describing", 2, [
47
- `${found} found ${lines.length} non-empty lines`,
48
- `Covers: ${hits.join(", ")}`,
44
+ const missing = INSTRUCTION_COVERAGE_KEYWORDS.filter((kw) => !lower.includes(kw));
45
+ return gs("self-describing", 1, [
46
+ `${found} found but covers fewer than ${MIN_KEYWORD_HITS} architecture/convention keywords`,
47
+ `Add navigation or constraints referencing: ${missing.slice(0, 5).join(", ")}`,
49
48
  ]);
50
49
  }
51
50
  //# sourceMappingURL=self-describing-scorer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"self-describing-scorer.js","sourceRoot":"","sources":["../../../src/analyzers/scorers/self-describing-scorer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,EAAE,EAAE,0BAA0B,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEpH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,MAAM,gBAAgB,GAAG;QACvB,WAAW;QACX,eAAe;QACf,iCAAiC;QACjC,gBAAgB;QAChB,aAAa;QACb,gBAAgB;KACjB,CAAC;IAEF,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErE,IAAI,KAAK,CAAC,MAAM,GAAG,0BAA0B,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE;YAC9B,GAAG,KAAK,mBAAmB,KAAK,CAAC,MAAM,uBAAuB,0BAA0B,mBAAmB;SAC5G,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E,IAAI,IAAI,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE;YAC9B,GAAG,KAAK,WAAW,KAAK,CAAC,MAAM,iCAAiC,gBAAgB,mCAAmC;YACnH,qBAAqB,6BAA6B,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAChH,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE;QAC9B,GAAG,KAAK,YAAY,KAAK,CAAC,MAAM,kBAAkB;QAClD,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KAC7B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"self-describing-scorer.js","sourceRoot":"","sources":["../../../src/analyzers/scorers/self-describing-scorer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,EAAE,EACF,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,MAAM,gBAAgB,GAAG;QACvB,WAAW;QACX,eAAe;QACf,iCAAiC;QACjC,gBAAgB;QAChB,aAAa;QACb,gBAAgB;KACjB,CAAC;IAEF,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,WAAW;IACb,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E,IAAI,IAAI,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;QACpC,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE;YAC9B,GAAG,KAAK,oBAAoB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,6BAA6B,CAAC,MAAM,CAClD,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC5B,CAAC;IACF,OAAO,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE;QAC9B,GAAG,KAAK,gCAAgC,gBAAgB,mCAAmC;QAC3F,8CAA8C,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KAC/E,CAAC,CAAC;AACL,CAAC"}
@@ -25,7 +25,7 @@ export declare class CommitHooksArtifact implements GenerativeSpec {
25
25
  readonly projectDir: string;
26
26
  readonly name = "Pre-commit Hooks (Automated Enforcement)";
27
27
  readonly purpose = "Rejects non-conforming commits before they enter the repository, making all other spec properties self-defending.";
28
- readonly covers: readonly ["Temporary/draft file prevention", "Secret scanning", "Production anti-pattern detection", "TypeScript compilation gate", "Test + coverage gate", "Dangerous command prevention", "Conventional commit message format enforcement"];
28
+ readonly covers: readonly ["Temporary/draft file prevention", "Secret scanning", "Production anti-pattern detection", "TypeScript compilation gate", "Rust cargo check + cargo clippy gate", "Test + coverage gate", "Dangerous command prevention", "Conventional commit message format enforcement"];
29
29
  readonly excludes: readonly ["Hook implementation details (those live in .claude/hooks/)", "CI/CD pipeline steps (those are post-commit enforcement)"];
30
30
  readonly version: string;
31
31
  readonly specId = "artifact:commit-hooks";
@@ -1 +1 @@
1
- {"version":3,"file":"commit-hooks.d.ts","sourceRoot":"","sources":["../../src/artifacts/commit-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AAWhE;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IA2BtD,QAAQ,CAAC,UAAU,EAAE,MAAM;IA1B7B,QAAQ,CAAC,IAAI,8CAA8C;IAC3D,QAAQ,CAAC,OAAO,uHACsG;IACtH,QAAQ,CAAC,MAAM,gPAQJ;IACX,QAAQ,CAAC,QAAQ,sIAGN;IAEX,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,2BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,CAAM;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,CAAM;IACvD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAM;IAE/C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;gBAGhC,UAAU,EAAE,MAAM,EAC3B,OAAO,SAAU;IAsEnB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAQlC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAUtE,MAAM;;;;;;;;IAOZ,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAMrD,WAAW,CACT,MAAM,EAAE,cAAc,GAAG,WAAW,GACnC,aAAa,CAAC,mBAAmB,CAAC;IAI/B,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC;CAU7B"}
1
+ {"version":3,"file":"commit-hooks.d.ts","sourceRoot":"","sources":["../../src/artifacts/commit-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AAYhE;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IA4BtD,QAAQ,CAAC,UAAU,EAAE,MAAM;IA3B7B,QAAQ,CAAC,IAAI,8CAA8C;IAC3D,QAAQ,CAAC,OAAO,uHACsG;IACtH,QAAQ,CAAC,MAAM,wRASJ;IACX,QAAQ,CAAC,QAAQ,sIAGN;IAEX,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,2BAA4B;IAC3C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,CAAM;IACrD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,CAAM;IACvD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAM;IAE/C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;gBAGhC,UAAU,EAAE,MAAM,EAC3B,OAAO,SAAU;IAsEnB,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAQlC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAUtE,MAAM;;;;;;;;IAOZ,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAMrD,WAAW,CACT,MAAM,EAAE,cAAc,GAAG,WAAW,GACnC,aAAa,CAAC,mBAAmB,CAAC;IAI/B,OAAO,CACX,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC;CAU7B"}
@@ -19,6 +19,7 @@ const REQUIRED_HOOKS = [
19
19
  "pre-commit-secrets.sh",
20
20
  "pre-commit-prod-quality.sh",
21
21
  "pre-commit-compile.sh",
22
+ "pre-commit-clippy.sh",
22
23
  "pre-commit-test.sh",
23
24
  "commit-msg.sh",
24
25
  ];
@@ -39,6 +40,7 @@ export class CommitHooksArtifact {
39
40
  "Secret scanning",
40
41
  "Production anti-pattern detection",
41
42
  "TypeScript compilation gate",
43
+ "Rust cargo check + cargo clippy gate",
42
44
  "Test + coverage gate",
43
45
  "Dangerous command prevention",
44
46
  "Conventional commit message format enforcement",
@@ -1 +1 @@
1
- {"version":3,"file":"commit-hooks.js","sourceRoot":"","sources":["../../src/artifacts/commit-hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commit-hooks.js","sourceRoot":"","sources":["../../src/artifacts/commit-hooks.ts"],"names":[],"mappings":"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"}
@@ -14,15 +14,17 @@ import type { Flags } from "./args.js";
14
14
  export declare function resolveTagsFromConfig(dir: string, flagTags: string[] | undefined): Tag[] | undefined;
15
15
  /**
16
16
  * Extract text from MCP-style handler result and print to stdout.
17
+ * With `json: true`, wraps output in `{ "ok": true, "output": "..." }`.
17
18
  *
18
19
  * @param result - MCP content result with text blocks
20
+ * @param json - When true, output as JSON (for CI/scripting)
19
21
  */
20
22
  export declare function printResult(result: {
21
23
  content: Array<{
22
24
  type: string;
23
25
  text: string;
24
26
  }>;
25
- }): void;
27
+ }, json?: boolean): void;
26
28
  /** @param pos - Positional args @param flags - Parsed flags */
27
29
  export declare function cmdSetup(pos: string[], flags: Flags): Promise<void>;
28
30
  /** @param pos - Positional args @param flags - Parsed flags */
@@ -51,4 +53,36 @@ export declare function cmdAddHook(pos: string[], flags: Flags): Promise<void>;
51
53
  export declare function cmdVerify(pos: string[], flags: Flags): Promise<void>;
52
54
  /** @param pos - Positional args @param flags - Parsed flags */
53
55
  export declare function cmdAddModule(pos: string[], flags: Flags): Promise<void>;
56
+ /**
57
+ * `check-cascade [dir]` — run cascade checks and exit 1 on required failures.
58
+ *
59
+ * With `--json`: outputs structured JSON suitable for CI parsing.
60
+ * Exit codes: 0 = all required steps pass, 1 = one or more required steps fail.
61
+ *
62
+ * @param pos - Positional args (pos[0] = project dir)
63
+ * @param flags - Parsed flags
64
+ */
65
+ export declare function cmdCheckCascade(pos: string[], flags: Flags): Promise<void>;
66
+ /**
67
+ * `violations [dir]` — report active gate violations, exit 1 if any present.
68
+ *
69
+ * Active violations are those recorded after the last git commit. Stale
70
+ * violations (cleared by a commit) are shown but don't trigger exit 1.
71
+ *
72
+ * With `--json`: outputs structured JSON suitable for CI parsing.
73
+ * Exit codes: 0 = no active violations, 1 = active violations present.
74
+ *
75
+ * @param pos - Positional args (pos[0] = project dir)
76
+ * @param flags - Parsed flags
77
+ */
78
+ export declare function cmdViolations(pos: string[], flags: Flags): Promise<void>;
79
+ /**
80
+ * `status [dir]` — print a live project state snapshot (always exits 0).
81
+ *
82
+ * With `--json`: wraps the snapshot text in `{ "ok": true, "output": "..." }`.
83
+ *
84
+ * @param pos - Positional args (pos[0] = project dir)
85
+ * @param flags - Parsed flags
86
+ */
87
+ export declare function cmdStatus(pos: string[], flags: Flags): Promise<void>;
54
88
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,GAAG,EAA6B,MAAM,oBAAoB,CAAC;AAmBzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AASvC;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAAE,GAAG,SAAS,GAC7B,GAAG,EAAE,GAAG,SAAS,CAInB;AAID;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE;IAClC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,GAAG,IAAI,CAEP;AAID,+DAA+D;AAC/D,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BzE;AAED,+DAA+D;AAC/D,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB3E;AAED,+DAA+D;AAC/D,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;AAED,+DAA+D;AAC/D,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3E;AAED,+DAA+D;AAC/D,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAazE;AAED,+DAA+D;AAC/D,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5E;AAED,+DAA+D;AAC/D,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1E;AAED,+DAA+D;AAC/D,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxE;AAED,+DAA+D;AAC/D,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5E;AAED,+DAA+D;AAC/D,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB5E;AAED,+DAA+D;AAC/D,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3E;AAED,+DAA+D;AAC/D,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAe3E;AAED,+DAA+D;AAC/D,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAe1E;AAED,+DAA+D;AAC/D,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7E"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,9 @@ import { addModuleHandler } from "../tools/add-module.js";
18
18
  import { verifyHandler } from "../tools/verify.js";
19
19
  import { adviceHandler } from "../tools/advice.js";
20
20
  import { metricsHandler } from "../tools/metrics.js";
21
+ import { runCascadeChecks, loadCascadeDecisions, isCascadeComplete, } from "../tools/check-cascade.js";
22
+ import { buildGateViolationReport, formatGateViolationReport, } from "../tools/gate-violations.js";
23
+ import { consolidateStatusHandler } from "../tools/consolidate-status.js";
21
24
  import { str, arr, bool } from "./args.js";
22
25
  import { detectAiAssistant, buildNoAssistantWarning, } from "./assistant-detector.js";
23
26
  // ── Config Resolution ────────────────────────────────────────────────
@@ -37,11 +40,19 @@ export function resolveTagsFromConfig(dir, flagTags) {
37
40
  // ── Output ───────────────────────────────────────────────────────────
38
41
  /**
39
42
  * Extract text from MCP-style handler result and print to stdout.
43
+ * With `json: true`, wraps output in `{ "ok": true, "output": "..." }`.
40
44
  *
41
45
  * @param result - MCP content result with text blocks
46
+ * @param json - When true, output as JSON (for CI/scripting)
42
47
  */
43
- export function printResult(result) {
44
- console.log(result.content[0]?.text ?? "");
48
+ export function printResult(result, json = false) {
49
+ const text = result.content[0]?.text ?? "";
50
+ if (json) {
51
+ console.log(JSON.stringify({ ok: true, output: text }));
52
+ }
53
+ else {
54
+ console.log(text);
55
+ }
45
56
  }
46
57
  // ── Commands ─────────────────────────────────────────────────────────
47
58
  /** @param pos - Positional args @param flags - Parsed flags */
@@ -270,4 +281,100 @@ export async function cmdAddModule(pos, flags) {
270
281
  });
271
282
  printResult(result);
272
283
  }
284
+ // ── CI / Bare Gate Commands ──────────────────────────────────────────
285
+ /**
286
+ * `check-cascade [dir]` — run cascade checks and exit 1 on required failures.
287
+ *
288
+ * With `--json`: outputs structured JSON suitable for CI parsing.
289
+ * Exit codes: 0 = all required steps pass, 1 = one or more required steps fail.
290
+ *
291
+ * @param pos - Positional args (pos[0] = project dir)
292
+ * @param flags - Parsed flags
293
+ */
294
+ export async function cmdCheckCascade(pos, flags) {
295
+ const projectDir = resolve(pos[0] ?? ".");
296
+ const json = bool(flags, "json", false);
297
+ const decisions = loadCascadeDecisions(projectDir);
298
+ const steps = runCascadeChecks(projectDir, decisions);
299
+ const passed = isCascadeComplete(steps);
300
+ if (json) {
301
+ const failedSteps = steps
302
+ .filter((s) => s.status === "FAIL" || s.status === "STUB")
303
+ .map((s) => ({ name: s.name, status: s.status, detail: s.detail }));
304
+ const passingCount = steps.filter((s) => s.status === "PASS" || s.status === "WARN").length;
305
+ console.log(JSON.stringify({
306
+ ok: passed,
307
+ passing: passingCount,
308
+ total: steps.length,
309
+ failedSteps,
310
+ }));
311
+ }
312
+ else {
313
+ for (const s of steps) {
314
+ const icon = s.status === "PASS"
315
+ ? "✅"
316
+ : s.status === "SKIP"
317
+ ? "⏭ "
318
+ : s.status === "WARN"
319
+ ? "⚠️ "
320
+ : "❌";
321
+ console.log(`${icon} ${s.name}: ${s.status}`);
322
+ if (s.status === "FAIL" || s.status === "STUB") {
323
+ console.log(` ${s.detail}`);
324
+ }
325
+ }
326
+ if (!passed) {
327
+ console.error("\n❌ Cascade gate failed — required steps are incomplete.");
328
+ }
329
+ }
330
+ if (!passed)
331
+ process.exit(1);
332
+ }
333
+ /**
334
+ * `violations [dir]` — report active gate violations, exit 1 if any present.
335
+ *
336
+ * Active violations are those recorded after the last git commit. Stale
337
+ * violations (cleared by a commit) are shown but don't trigger exit 1.
338
+ *
339
+ * With `--json`: outputs structured JSON suitable for CI parsing.
340
+ * Exit codes: 0 = no active violations, 1 = active violations present.
341
+ *
342
+ * @param pos - Positional args (pos[0] = project dir)
343
+ * @param flags - Parsed flags
344
+ */
345
+ export async function cmdViolations(pos, flags) {
346
+ const projectDir = resolve(pos[0] ?? ".");
347
+ const json = bool(flags, "json", false);
348
+ const report = buildGateViolationReport(projectDir);
349
+ if (json) {
350
+ console.log(JSON.stringify({
351
+ ok: report.active.length === 0,
352
+ active: report.active,
353
+ stale: report.stale,
354
+ lastCommitAt: report.lastCommitAt,
355
+ }));
356
+ }
357
+ else {
358
+ console.log(formatGateViolationReport(report));
359
+ if (report.active.length > 0) {
360
+ console.error(`\n❌ ${report.active.length} active gate violation(s) — fix before committing.`);
361
+ }
362
+ }
363
+ if (report.active.length > 0)
364
+ process.exit(1);
365
+ }
366
+ /**
367
+ * `status [dir]` — print a live project state snapshot (always exits 0).
368
+ *
369
+ * With `--json`: wraps the snapshot text in `{ "ok": true, "output": "..." }`.
370
+ *
371
+ * @param pos - Positional args (pos[0] = project dir)
372
+ * @param flags - Parsed flags
373
+ */
374
+ export async function cmdStatus(pos, flags) {
375
+ const projectDir = resolve(pos[0] ?? ".");
376
+ const json = bool(flags, "json", false);
377
+ const result = await consolidateStatusHandler({ project_dir: projectDir });
378
+ printResult(result, json);
379
+ }
273
380
  //# sourceMappingURL=commands.js.map