@dommaker/harness 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +0 -2
  3. package/bin/harness.js +86 -32
  4. package/dist/cli/command-contract.d.ts +83 -0
  5. package/dist/cli/command-contract.d.ts.map +1 -0
  6. package/dist/cli/command-contract.js +66 -0
  7. package/dist/cli/command-contract.js.map +1 -0
  8. package/dist/cli/commands/acceptance.d.ts +3 -2
  9. package/dist/cli/commands/acceptance.d.ts.map +1 -1
  10. package/dist/cli/commands/acceptance.js +28 -24
  11. package/dist/cli/commands/acceptance.js.map +1 -1
  12. package/dist/cli/commands/analyze-sessions.d.ts +2 -1
  13. package/dist/cli/commands/analyze-sessions.d.ts.map +1 -1
  14. package/dist/cli/commands/analyze-sessions.js +25 -24
  15. package/dist/cli/commands/analyze-sessions.js.map +1 -1
  16. package/dist/cli/commands/check.d.ts +14 -2
  17. package/dist/cli/commands/check.d.ts.map +1 -1
  18. package/dist/cli/commands/check.js +76 -61
  19. package/dist/cli/commands/check.js.map +1 -1
  20. package/dist/cli/commands/command.d.ts +5 -1
  21. package/dist/cli/commands/command.d.ts.map +1 -1
  22. package/dist/cli/commands/command.js +26 -17
  23. package/dist/cli/commands/command.js.map +1 -1
  24. package/dist/cli/commands/constraints-report.d.ts +2 -1
  25. package/dist/cli/commands/constraints-report.d.ts.map +1 -1
  26. package/dist/cli/commands/constraints-report.js +37 -33
  27. package/dist/cli/commands/constraints-report.js.map +1 -1
  28. package/dist/cli/commands/constraints-retire.d.ts +6 -5
  29. package/dist/cli/commands/constraints-retire.d.ts.map +1 -1
  30. package/dist/cli/commands/constraints-retire.js +50 -52
  31. package/dist/cli/commands/constraints-retire.js.map +1 -1
  32. package/dist/cli/commands/constraints.d.ts +2 -1
  33. package/dist/cli/commands/constraints.d.ts.map +1 -1
  34. package/dist/cli/commands/constraints.js +10 -27
  35. package/dist/cli/commands/constraints.js.map +1 -1
  36. package/dist/cli/commands/contract.d.ts +3 -2
  37. package/dist/cli/commands/contract.d.ts.map +1 -1
  38. package/dist/cli/commands/contract.js +45 -42
  39. package/dist/cli/commands/contract.js.map +1 -1
  40. package/dist/cli/commands/definitions.d.ts +11 -11
  41. package/dist/cli/commands/definitions.d.ts.map +1 -1
  42. package/dist/cli/commands/definitions.js +29 -214
  43. package/dist/cli/commands/definitions.js.map +1 -1
  44. package/dist/cli/commands/failure.d.ts +5 -4
  45. package/dist/cli/commands/failure.d.ts.map +1 -1
  46. package/dist/cli/commands/failure.js +31 -25
  47. package/dist/cli/commands/failure.js.map +1 -1
  48. package/dist/cli/commands/init.d.ts +7 -5
  49. package/dist/cli/commands/init.d.ts.map +1 -1
  50. package/dist/cli/commands/init.js +147 -211
  51. package/dist/cli/commands/init.js.map +1 -1
  52. package/dist/cli/commands/knowledge.d.ts +21 -15
  53. package/dist/cli/commands/knowledge.d.ts.map +1 -1
  54. package/dist/cli/commands/knowledge.js +214 -199
  55. package/dist/cli/commands/knowledge.js.map +1 -1
  56. package/dist/cli/commands/passes-gate.d.ts +8 -2
  57. package/dist/cli/commands/passes-gate.d.ts.map +1 -1
  58. package/dist/cli/commands/passes-gate.js +44 -66
  59. package/dist/cli/commands/passes-gate.js.map +1 -1
  60. package/dist/cli/commands/performance.d.ts +2 -1
  61. package/dist/cli/commands/performance.d.ts.map +1 -1
  62. package/dist/cli/commands/performance.js +20 -18
  63. package/dist/cli/commands/performance.js.map +1 -1
  64. package/dist/cli/commands/posteval-plan.d.ts +5 -1
  65. package/dist/cli/commands/posteval-plan.d.ts.map +1 -1
  66. package/dist/cli/commands/posteval-plan.js +26 -15
  67. package/dist/cli/commands/posteval-plan.js.map +1 -1
  68. package/dist/cli/commands/release.d.ts +6 -1
  69. package/dist/cli/commands/release.d.ts.map +1 -1
  70. package/dist/cli/commands/release.js +69 -59
  71. package/dist/cli/commands/release.js.map +1 -1
  72. package/dist/cli/commands/report.d.ts +2 -1
  73. package/dist/cli/commands/report.d.ts.map +1 -1
  74. package/dist/cli/commands/report.js +9 -5
  75. package/dist/cli/commands/report.js.map +1 -1
  76. package/dist/cli/commands/review.d.ts +3 -2
  77. package/dist/cli/commands/review.d.ts.map +1 -1
  78. package/dist/cli/commands/review.js +33 -29
  79. package/dist/cli/commands/review.js.map +1 -1
  80. package/dist/cli/commands/sdd.d.ts +2 -1
  81. package/dist/cli/commands/sdd.d.ts.map +1 -1
  82. package/dist/cli/commands/sdd.js +7 -5
  83. package/dist/cli/commands/sdd.js.map +1 -1
  84. package/dist/cli/commands/security.d.ts +3 -2
  85. package/dist/cli/commands/security.d.ts.map +1 -1
  86. package/dist/cli/commands/security.js +29 -26
  87. package/dist/cli/commands/security.js.map +1 -1
  88. package/dist/cli/commands/spec-baseline-check.d.ts +2 -1
  89. package/dist/cli/commands/spec-baseline-check.d.ts.map +1 -1
  90. package/dist/cli/commands/spec-baseline-check.js +15 -11
  91. package/dist/cli/commands/spec-baseline-check.js.map +1 -1
  92. package/dist/cli/commands/spec.d.ts +7 -2
  93. package/dist/cli/commands/spec.d.ts.map +1 -1
  94. package/dist/cli/commands/spec.js +61 -51
  95. package/dist/cli/commands/spec.js.map +1 -1
  96. package/dist/cli/commands/status.d.ts +2 -1
  97. package/dist/cli/commands/status.d.ts.map +1 -1
  98. package/dist/cli/commands/status.js +57 -53
  99. package/dist/cli/commands/status.js.map +1 -1
  100. package/dist/cli/commands/sync-docs/agents-syncer.d.ts.map +1 -1
  101. package/dist/cli/commands/sync-docs/agents-syncer.js +5 -2
  102. package/dist/cli/commands/sync-docs/agents-syncer.js.map +1 -1
  103. package/dist/cli/commands/sync-docs/context-syncer.d.ts.map +1 -1
  104. package/dist/cli/commands/sync-docs/context-syncer.js +3 -2
  105. package/dist/cli/commands/sync-docs/context-syncer.js.map +1 -1
  106. package/dist/cli/commands/sync-docs/index.d.ts +2 -1
  107. package/dist/cli/commands/sync-docs/index.d.ts.map +1 -1
  108. package/dist/cli/commands/sync-docs/index.js +68 -88
  109. package/dist/cli/commands/sync-docs/index.js.map +1 -1
  110. package/dist/cli/commands/sync-docs/project-reader.d.ts +6 -1
  111. package/dist/cli/commands/sync-docs/project-reader.d.ts.map +1 -1
  112. package/dist/cli/commands/sync-docs/project-reader.js +14 -16
  113. package/dist/cli/commands/sync-docs/project-reader.js.map +1 -1
  114. package/dist/cli/commands/update-user-model.d.ts +2 -1
  115. package/dist/cli/commands/update-user-model.d.ts.map +1 -1
  116. package/dist/cli/commands/update-user-model.js +31 -45
  117. package/dist/cli/commands/update-user-model.js.map +1 -1
  118. package/dist/cli/commands/validate.d.ts +4 -3
  119. package/dist/cli/commands/validate.d.ts.map +1 -1
  120. package/dist/cli/commands/validate.js +28 -26
  121. package/dist/cli/commands/validate.js.map +1 -1
  122. package/dist/cli/session-mining/transcript.d.ts +7 -1
  123. package/dist/cli/session-mining/transcript.d.ts.map +1 -1
  124. package/dist/cli/session-mining/transcript.js +21 -14
  125. package/dist/cli/session-mining/transcript.js.map +1 -1
  126. package/dist/context/session-manager.d.ts.map +1 -1
  127. package/dist/context/session-manager.js +19 -32
  128. package/dist/context/session-manager.js.map +1 -1
  129. package/dist/core/constraints/agent-prompt-renderer.d.ts.map +1 -1
  130. package/dist/core/constraints/agent-prompt-renderer.js +1 -4
  131. package/dist/core/constraints/agent-prompt-renderer.js.map +1 -1
  132. package/dist/core/constraints/capabilities-parser.d.ts +24 -7
  133. package/dist/core/constraints/capabilities-parser.d.ts.map +1 -1
  134. package/dist/core/constraints/capabilities-parser.js +32 -28
  135. package/dist/core/constraints/capabilities-parser.js.map +1 -1
  136. package/dist/core/constraints/capabilities-reconcile.d.ts +67 -0
  137. package/dist/core/constraints/capabilities-reconcile.d.ts.map +1 -0
  138. package/dist/core/constraints/capabilities-reconcile.js +105 -0
  139. package/dist/core/constraints/capabilities-reconcile.js.map +1 -0
  140. package/dist/core/constraints/checker.d.ts +21 -43
  141. package/dist/core/constraints/checker.d.ts.map +1 -1
  142. package/dist/core/constraints/checker.js +64 -115
  143. package/dist/core/constraints/checker.js.map +1 -1
  144. package/dist/core/constraints/checkers/capability-sync.d.ts +4 -3
  145. package/dist/core/constraints/checkers/capability-sync.d.ts.map +1 -1
  146. package/dist/core/constraints/checkers/capability-sync.js +29 -69
  147. package/dist/core/constraints/checkers/capability-sync.js.map +1 -1
  148. package/dist/core/constraints/checkers/context-doc-sync.d.ts +4 -2
  149. package/dist/core/constraints/checkers/context-doc-sync.d.ts.map +1 -1
  150. package/dist/core/constraints/checkers/context-doc-sync.js +13 -22
  151. package/dist/core/constraints/checkers/context-doc-sync.js.map +1 -1
  152. package/dist/core/constraints/checkers/docs-freshness.d.ts.map +1 -1
  153. package/dist/core/constraints/checkers/docs-freshness.js +37 -63
  154. package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
  155. package/dist/core/constraints/checkers/governance-presence.d.ts +2 -2
  156. package/dist/core/constraints/checkers/governance-presence.d.ts.map +1 -1
  157. package/dist/core/constraints/checkers/governance-presence.js +7 -28
  158. package/dist/core/constraints/checkers/governance-presence.js.map +1 -1
  159. package/dist/core/constraints/checkers/no-test-simplification.d.ts.map +1 -1
  160. package/dist/core/constraints/checkers/no-test-simplification.js +4 -3
  161. package/dist/core/constraints/checkers/no-test-simplification.js.map +1 -1
  162. package/dist/core/constraints/checkers/types.d.ts +2 -2
  163. package/dist/core/constraints/context-builder.d.ts +15 -14
  164. package/dist/core/constraints/context-builder.d.ts.map +1 -1
  165. package/dist/core/constraints/context-builder.js +32 -96
  166. package/dist/core/constraints/context-builder.js.map +1 -1
  167. package/dist/core/constraints/doc-freshness/runner.d.ts.map +1 -1
  168. package/dist/core/constraints/doc-freshness/runner.js +2 -1
  169. package/dist/core/constraints/doc-freshness/runner.js.map +1 -1
  170. package/dist/core/constraints/git-evidence.d.ts +60 -0
  171. package/dist/core/constraints/git-evidence.d.ts.map +1 -0
  172. package/dist/core/constraints/git-evidence.js +88 -0
  173. package/dist/core/constraints/git-evidence.js.map +1 -0
  174. package/dist/core/constraints/injection-drift.d.ts +3 -20
  175. package/dist/core/constraints/injection-drift.d.ts.map +1 -1
  176. package/dist/core/constraints/injection-drift.js +10 -57
  177. package/dist/core/constraints/injection-drift.js.map +1 -1
  178. package/dist/core/constraints/injection-writer.d.ts +113 -0
  179. package/dist/core/constraints/injection-writer.d.ts.map +1 -0
  180. package/dist/core/constraints/injection-writer.js +228 -0
  181. package/dist/core/constraints/injection-writer.js.map +1 -0
  182. package/dist/core/constraints/usage-report.d.ts +22 -1
  183. package/dist/core/constraints/usage-report.d.ts.map +1 -1
  184. package/dist/core/constraints/usage-report.js +27 -20
  185. package/dist/core/constraints/usage-report.js.map +1 -1
  186. package/dist/core/index.d.ts +2 -2
  187. package/dist/core/index.d.ts.map +1 -1
  188. package/dist/core/index.js +4 -2
  189. package/dist/core/index.js.map +1 -1
  190. package/dist/core/project-config-loader.d.ts +32 -1
  191. package/dist/core/project-config-loader.d.ts.map +1 -1
  192. package/dist/core/project-config-loader.js +39 -9
  193. package/dist/core/project-config-loader.js.map +1 -1
  194. package/dist/core/validators/passes-gate.d.ts +15 -64
  195. package/dist/core/validators/passes-gate.d.ts.map +1 -1
  196. package/dist/core/validators/passes-gate.js +84 -222
  197. package/dist/core/validators/passes-gate.js.map +1 -1
  198. package/dist/core/validators/test-output.d.ts +58 -0
  199. package/dist/core/validators/test-output.d.ts.map +1 -0
  200. package/dist/core/validators/test-output.js +109 -0
  201. package/dist/core/validators/test-output.js.map +1 -0
  202. package/dist/failure/recorder.d.ts +6 -0
  203. package/dist/failure/recorder.d.ts.map +1 -1
  204. package/dist/failure/recorder.js +12 -8
  205. package/dist/failure/recorder.js.map +1 -1
  206. package/dist/gates/acceptance.d.ts +1 -48
  207. package/dist/gates/acceptance.d.ts.map +1 -1
  208. package/dist/gates/acceptance.js +6 -38
  209. package/dist/gates/acceptance.js.map +1 -1
  210. package/dist/gates/checker-gate.d.ts.map +1 -1
  211. package/dist/gates/checker-gate.js +6 -11
  212. package/dist/gates/checker-gate.js.map +1 -1
  213. package/dist/gates/command.d.ts.map +1 -1
  214. package/dist/gates/command.js +10 -22
  215. package/dist/gates/command.js.map +1 -1
  216. package/dist/gates/contract.d.ts.map +1 -1
  217. package/dist/gates/contract.js +22 -61
  218. package/dist/gates/contract.js.map +1 -1
  219. package/dist/gates/performance.d.ts.map +1 -1
  220. package/dist/gates/performance.js +13 -31
  221. package/dist/gates/performance.js.map +1 -1
  222. package/dist/gates/review.d.ts.map +1 -1
  223. package/dist/gates/review.js +21 -53
  224. package/dist/gates/review.js.map +1 -1
  225. package/dist/gates/security.d.ts.map +1 -1
  226. package/dist/gates/security.js +14 -32
  227. package/dist/gates/security.js.map +1 -1
  228. package/dist/gates/types.d.ts +28 -5
  229. package/dist/gates/types.d.ts.map +1 -1
  230. package/dist/gates/types.js +38 -1
  231. package/dist/gates/types.js.map +1 -1
  232. package/dist/hooks/bootstrap.d.ts +2 -0
  233. package/dist/hooks/bootstrap.d.ts.map +1 -1
  234. package/dist/hooks/bootstrap.js +5 -2
  235. package/dist/hooks/bootstrap.js.map +1 -1
  236. package/dist/index.d.ts +1 -2
  237. package/dist/index.d.ts.map +1 -1
  238. package/dist/index.js.map +1 -1
  239. package/dist/knowledge/audit.d.ts +7 -2
  240. package/dist/knowledge/audit.d.ts.map +1 -1
  241. package/dist/knowledge/audit.js +59 -79
  242. package/dist/knowledge/audit.js.map +1 -1
  243. package/dist/knowledge/flywheel-metrics.d.ts +39 -0
  244. package/dist/knowledge/flywheel-metrics.d.ts.map +1 -0
  245. package/dist/knowledge/flywheel-metrics.js +47 -0
  246. package/dist/knowledge/flywheel-metrics.js.map +1 -0
  247. package/dist/knowledge/import.d.ts.map +1 -1
  248. package/dist/knowledge/import.js +4 -14
  249. package/dist/knowledge/import.js.map +1 -1
  250. package/dist/knowledge/index-generator.d.ts.map +1 -1
  251. package/dist/knowledge/index-generator.js +17 -14
  252. package/dist/knowledge/index-generator.js.map +1 -1
  253. package/dist/knowledge/ingest.d.ts.map +1 -1
  254. package/dist/knowledge/ingest.js +9 -4
  255. package/dist/knowledge/ingest.js.map +1 -1
  256. package/dist/knowledge/migration.d.ts.map +1 -1
  257. package/dist/knowledge/migration.js +11 -8
  258. package/dist/knowledge/migration.js.map +1 -1
  259. package/dist/knowledge/reference-tracker.d.ts.map +1 -1
  260. package/dist/knowledge/reference-tracker.js +12 -9
  261. package/dist/knowledge/reference-tracker.js.map +1 -1
  262. package/dist/knowledge/store.d.ts +15 -0
  263. package/dist/knowledge/store.d.ts.map +1 -1
  264. package/dist/knowledge/store.js +59 -10
  265. package/dist/knowledge/store.js.map +1 -1
  266. package/dist/monitoring/context-tracker.d.ts.map +1 -1
  267. package/dist/monitoring/context-tracker.js +11 -20
  268. package/dist/monitoring/context-tracker.js.map +1 -1
  269. package/dist/monitoring/index.d.ts +1 -1
  270. package/dist/monitoring/index.d.ts.map +1 -1
  271. package/dist/monitoring/index.js +1 -2
  272. package/dist/monitoring/index.js.map +1 -1
  273. package/dist/monitoring/trace-analyzer.d.ts +15 -0
  274. package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
  275. package/dist/monitoring/trace-analyzer.js +19 -2
  276. package/dist/monitoring/trace-analyzer.js.map +1 -1
  277. package/dist/monitoring/traces.d.ts +21 -2
  278. package/dist/monitoring/traces.d.ts.map +1 -1
  279. package/dist/monitoring/traces.js +38 -29
  280. package/dist/monitoring/traces.js.map +1 -1
  281. package/dist/release/index.d.ts +2 -2
  282. package/dist/release/index.d.ts.map +1 -1
  283. package/dist/release/index.js +1 -5
  284. package/dist/release/index.js.map +1 -1
  285. package/dist/sdd/index-generator.js +10 -11
  286. package/dist/sdd/index-generator.js.map +1 -1
  287. package/dist/test-setup/project-fixture.d.ts +48 -0
  288. package/dist/test-setup/project-fixture.d.ts.map +1 -0
  289. package/dist/test-setup/project-fixture.js +106 -0
  290. package/dist/test-setup/project-fixture.js.map +1 -0
  291. package/dist/types/constraint.d.ts +0 -18
  292. package/dist/types/constraint.d.ts.map +1 -1
  293. package/dist/types/constraint.js.map +1 -1
  294. package/dist/types/passes-gate.d.ts +10 -25
  295. package/dist/types/passes-gate.d.ts.map +1 -1
  296. package/dist/types/project-config.d.ts +1 -1
  297. package/dist/types/session.d.ts +6 -5
  298. package/dist/types/session.d.ts.map +1 -1
  299. package/dist/utils/exec.d.ts +10 -0
  300. package/dist/utils/exec.d.ts.map +1 -1
  301. package/dist/utils/exec.js +12 -0
  302. package/dist/utils/exec.js.map +1 -1
  303. package/dist/utils/file-walk.d.ts +9 -1
  304. package/dist/utils/file-walk.d.ts.map +1 -1
  305. package/dist/utils/file-walk.js +10 -1
  306. package/dist/utils/file-walk.js.map +1 -1
  307. package/dist/utils/frontmatter.d.ts +73 -0
  308. package/dist/utils/frontmatter.d.ts.map +1 -0
  309. package/dist/utils/frontmatter.js +141 -0
  310. package/dist/utils/frontmatter.js.map +1 -0
  311. package/dist/utils/jsonl.d.ts +92 -0
  312. package/dist/utils/jsonl.d.ts.map +1 -0
  313. package/dist/utils/jsonl.js +166 -0
  314. package/dist/utils/jsonl.js.map +1 -0
  315. package/dist/utils/package-version.d.ts +16 -0
  316. package/dist/utils/package-version.d.ts.map +1 -0
  317. package/dist/utils/package-version.js +63 -0
  318. package/dist/utils/package-version.js.map +1 -0
  319. package/package.json +1 -1
  320. package/src/CONTEXT.md +7 -2
  321. package/src/__tests__/acceptance-gate.test.ts +3 -1
  322. package/src/__tests__/checker-extra.test.ts +7 -1218
  323. package/src/__tests__/context-files-resolution.test.ts +116 -0
  324. package/src/__tests__/effective-constraints.test.ts +10 -13
  325. package/src/__tests__/exec.test.ts +35 -1
  326. package/src/__tests__/layering.test.ts +152 -0
  327. package/src/__tests__/passes-gate-extra.test.ts +0 -145
  328. package/src/__tests__/passes-gate.test.ts +142 -106
  329. package/src/__tests__/skip-semantics.test.ts +5 -9
  330. package/src/cli/__tests__/command-contract.test.ts +170 -0
  331. package/src/cli/command-contract.ts +108 -0
  332. package/src/cli/commands/CONTEXT.md +22 -7
  333. package/src/cli/commands/__tests__/acceptance.test.ts +40 -33
  334. package/src/cli/commands/__tests__/analyze-sessions.test.ts +35 -29
  335. package/src/cli/commands/__tests__/bin-exit-mapping.test.ts +101 -0
  336. package/src/cli/commands/__tests__/check-drift.test.ts +27 -34
  337. package/src/cli/commands/__tests__/check-skip-output.test.ts +21 -24
  338. package/src/cli/commands/__tests__/check.test.ts +378 -382
  339. package/src/cli/commands/__tests__/command.test.ts +85 -70
  340. package/src/cli/commands/__tests__/constraints-report.test.ts +100 -71
  341. package/src/cli/commands/__tests__/constraints-retire.test.ts +152 -95
  342. package/src/cli/commands/__tests__/contract.test.ts +27 -34
  343. package/src/cli/commands/__tests__/failure.test.ts +31 -34
  344. package/src/cli/commands/__tests__/init-injection.test.ts +58 -28
  345. package/src/cli/commands/__tests__/init.test.ts +77 -48
  346. package/src/cli/commands/__tests__/knowledge-flywheel-consistency.test.ts +108 -0
  347. package/src/cli/commands/__tests__/knowledge.test.ts +69 -43
  348. package/src/cli/commands/__tests__/passes-gate.test.ts +43 -45
  349. package/src/cli/commands/__tests__/performance.test.ts +22 -23
  350. package/src/cli/commands/__tests__/posteval-plan.test.ts +39 -38
  351. package/src/cli/commands/__tests__/project-path-anchoring.test.ts +157 -0
  352. package/src/cli/commands/__tests__/project-path-convention.test.ts +169 -0
  353. package/src/cli/commands/__tests__/registry.test.ts +69 -35
  354. package/src/cli/commands/__tests__/release.test.ts +209 -80
  355. package/src/cli/commands/__tests__/report-extra.test.ts +16 -16
  356. package/src/cli/commands/__tests__/report.test.ts +25 -25
  357. package/src/cli/commands/__tests__/review.test.ts +33 -31
  358. package/src/cli/commands/__tests__/security.test.ts +23 -27
  359. package/src/cli/commands/__tests__/spec-baseline-check.test.ts +20 -20
  360. package/src/cli/commands/__tests__/spec.test.ts +41 -29
  361. package/src/cli/commands/__tests__/status-extra.test.ts +18 -18
  362. package/src/cli/commands/__tests__/status-skipped-lines.test.ts +72 -0
  363. package/src/cli/commands/__tests__/status.test.ts +34 -34
  364. package/src/cli/commands/__tests__/sync-docs-agents.test.ts +77 -78
  365. package/src/cli/commands/__tests__/sync-docs.test.ts +72 -74
  366. package/src/cli/commands/__tests__/update-user-model.test.ts +62 -33
  367. package/src/cli/commands/__tests__/validate.test.ts +27 -29
  368. package/src/cli/commands/acceptance.ts +35 -24
  369. package/src/cli/commands/analyze-sessions.ts +25 -24
  370. package/src/cli/commands/check.ts +88 -65
  371. package/src/cli/commands/command.ts +30 -17
  372. package/src/cli/commands/constraints-report.ts +37 -34
  373. package/src/cli/commands/constraints-retire.ts +58 -55
  374. package/src/cli/commands/constraints.ts +10 -27
  375. package/src/cli/commands/contract.ts +51 -42
  376. package/src/cli/commands/definitions.ts +36 -222
  377. package/src/cli/commands/failure.ts +33 -26
  378. package/src/cli/commands/init.ts +166 -220
  379. package/src/cli/commands/knowledge.ts +225 -203
  380. package/src/cli/commands/passes-gate.ts +58 -68
  381. package/src/cli/commands/performance.ts +23 -18
  382. package/src/cli/commands/posteval-plan.ts +29 -15
  383. package/src/cli/commands/release.ts +70 -59
  384. package/src/cli/commands/report.ts +9 -5
  385. package/src/cli/commands/review.ts +39 -29
  386. package/src/cli/commands/sdd.ts +7 -5
  387. package/src/cli/commands/security.ts +35 -26
  388. package/src/cli/commands/spec-baseline-check.ts +16 -11
  389. package/src/cli/commands/spec.ts +66 -53
  390. package/src/cli/commands/status.ts +59 -53
  391. package/src/cli/commands/sync-docs/agents-syncer.ts +5 -2
  392. package/src/cli/commands/sync-docs/context-syncer.ts +3 -2
  393. package/src/cli/commands/sync-docs/index.ts +73 -100
  394. package/src/cli/commands/sync-docs/project-reader.ts +17 -18
  395. package/src/cli/commands/update-user-model.ts +33 -45
  396. package/src/cli/commands/validate.ts +31 -25
  397. package/src/cli/session-mining/__tests__/transcript.test.ts +118 -0
  398. package/src/cli/session-mining/transcript.ts +26 -8
  399. package/src/context/session-manager.ts +19 -33
  400. package/src/core/CONTEXT.md +9 -6
  401. package/src/core/constraints/__tests__/capabilities-reconcile.test.ts +200 -0
  402. package/src/core/constraints/__tests__/capability-counts.test.ts +94 -0
  403. package/src/core/constraints/__tests__/git-evidence.test.ts +208 -0
  404. package/src/core/constraints/__tests__/injection-drift.test.ts +3 -10
  405. package/src/core/constraints/__tests__/injection-writer.test.ts +231 -0
  406. package/src/core/constraints/__tests__/trace-injection.test.ts +71 -0
  407. package/src/core/constraints/__tests__/usage-report.test.ts +112 -0
  408. package/src/core/constraints/agent-prompt-renderer.ts +2 -6
  409. package/src/core/constraints/capabilities-parser.ts +53 -35
  410. package/src/core/constraints/capabilities-reconcile.ts +166 -0
  411. package/src/core/constraints/checker.ts +75 -130
  412. package/src/core/constraints/checkers/__tests__/capability-sync.test.ts +214 -0
  413. package/src/core/constraints/checkers/__tests__/context-doc-sync.test.ts +77 -0
  414. package/src/core/constraints/checkers/__tests__/docs-freshness.test.ts +117 -0
  415. package/src/{__tests__ → core/constraints/checkers/__tests__}/governance-presence.test.ts +83 -9
  416. package/src/core/constraints/checkers/__tests__/iron-flags.test.ts +50 -0
  417. package/src/core/constraints/checkers/__tests__/no-bypass-checkpoint.test.ts +76 -0
  418. package/src/{__tests__ → core/constraints/checkers/__tests__}/no-hardcoded-credentials.test.ts +4 -3
  419. package/src/core/constraints/checkers/__tests__/no-test-simplification.test.ts +58 -0
  420. package/src/core/constraints/checkers/__tests__/three-state-consistency.test.ts +145 -0
  421. package/src/core/constraints/checkers/capability-sync.ts +29 -88
  422. package/src/core/constraints/checkers/context-doc-sync.ts +15 -25
  423. package/src/core/constraints/checkers/docs-freshness.ts +40 -69
  424. package/src/core/constraints/checkers/governance-presence.ts +7 -25
  425. package/src/core/constraints/checkers/no-test-simplification.ts +4 -3
  426. package/src/core/constraints/checkers/types.ts +2 -2
  427. package/src/core/constraints/context-builder.ts +39 -91
  428. package/src/core/constraints/doc-freshness/runner.ts +2 -1
  429. package/src/core/constraints/git-evidence.ts +120 -0
  430. package/src/core/constraints/injection-drift.ts +13 -60
  431. package/src/core/constraints/injection-writer.ts +212 -0
  432. package/src/core/constraints/usage-report.ts +36 -17
  433. package/src/core/index.ts +4 -2
  434. package/src/core/project-config-loader.ts +49 -9
  435. package/src/core/validators/__tests__/passes-gate.test.ts +2 -56
  436. package/src/core/validators/__tests__/test-output.test.ts +372 -0
  437. package/src/core/validators/passes-gate.ts +86 -248
  438. package/src/core/validators/test-output.ts +128 -0
  439. package/src/failure/__tests__/recorder.test.ts +168 -0
  440. package/src/failure/recorder.ts +12 -10
  441. package/src/gates/CONTEXT.md +6 -3
  442. package/src/gates/__tests__/acceptance-types-single-source.test.ts +68 -0
  443. package/src/gates/__tests__/acceptance.test.ts +4 -86
  444. package/src/gates/__tests__/effective-gates.test.ts +3 -8
  445. package/src/gates/__tests__/test-verdict-consistency.test.ts +140 -0
  446. package/src/gates/acceptance.ts +19 -84
  447. package/src/gates/checker-gate.ts +8 -7
  448. package/src/gates/command.ts +10 -16
  449. package/src/gates/contract.ts +22 -61
  450. package/src/gates/performance.ts +10 -22
  451. package/src/gates/review.ts +21 -41
  452. package/src/gates/security.ts +10 -22
  453. package/src/gates/types.ts +70 -5
  454. package/src/hooks/CONTEXT.md +1 -1
  455. package/src/hooks/bootstrap.ts +5 -2
  456. package/src/index.ts +0 -4
  457. package/src/knowledge/CONTEXT.md +8 -3
  458. package/src/knowledge/__tests__/audit-labels.test.ts +44 -0
  459. package/src/knowledge/__tests__/flywheel-metrics.test.ts +135 -0
  460. package/src/knowledge/__tests__/import.test.ts +44 -0
  461. package/src/knowledge/__tests__/index-generator.test.ts +53 -0
  462. package/src/knowledge/__tests__/ingest.test.ts +85 -0
  463. package/src/knowledge/__tests__/migration.test.ts +47 -0
  464. package/src/knowledge/__tests__/reference-tracker.test.ts +16 -0
  465. package/src/knowledge/__tests__/store.test.ts +194 -0
  466. package/src/knowledge/audit.ts +67 -71
  467. package/src/knowledge/flywheel-metrics.ts +71 -0
  468. package/src/knowledge/import.ts +4 -18
  469. package/src/knowledge/index-generator.ts +19 -14
  470. package/src/knowledge/ingest.ts +9 -4
  471. package/src/knowledge/migration.ts +11 -8
  472. package/src/knowledge/reference-tracker.ts +12 -8
  473. package/src/knowledge/store.ts +64 -11
  474. package/src/monitoring/CONTEXT.md +8 -3
  475. package/src/monitoring/__tests__/skipped-lines-report.test.ts +178 -0
  476. package/src/monitoring/__tests__/traces.test.ts +57 -0
  477. package/src/monitoring/context-tracker.ts +11 -23
  478. package/src/monitoring/index.ts +1 -1
  479. package/src/monitoring/trace-analyzer.ts +21 -2
  480. package/src/monitoring/traces.ts +39 -36
  481. package/src/release/CONTEXT.md +1 -0
  482. package/src/release/__tests__/barrel.test.ts +60 -0
  483. package/src/release/index.ts +2 -13
  484. package/src/sdd/__tests__/index-generator.test.ts +71 -0
  485. package/src/sdd/index-generator.ts +9 -9
  486. package/src/test-setup/__tests__/project-fixture.test.ts +178 -0
  487. package/src/test-setup/project-fixture.ts +87 -0
  488. package/src/tools/CONTEXT.md +6 -0
  489. package/src/tools/__tests__/registry.test.ts +221 -0
  490. package/src/types/__tests__/types.test.ts +4 -5
  491. package/src/types/constraint.ts +0 -25
  492. package/src/types/passes-gate.ts +10 -30
  493. package/src/types/project-config.ts +1 -1
  494. package/src/types/session.ts +5 -5
  495. package/src/utils/__tests__/frontmatter.test.ts +206 -0
  496. package/src/utils/__tests__/jsonl-skip-disposition.test.ts +175 -0
  497. package/src/utils/__tests__/jsonl.test.ts +187 -0
  498. package/src/utils/__tests__/package-version.test.ts +97 -0
  499. package/src/utils/exec.ts +15 -0
  500. package/src/utils/file-walk.ts +11 -2
  501. package/src/utils/frontmatter.ts +121 -0
  502. package/src/utils/jsonl.ts +167 -0
  503. package/src/utils/package-version.ts +27 -0
  504. package/dist/cli/commands/doc-freshness-check.d.ts +0 -53
  505. package/dist/cli/commands/doc-freshness-check.d.ts.map +0 -1
  506. package/dist/cli/commands/doc-freshness-check.js +0 -352
  507. package/dist/cli/commands/doc-freshness-check.js.map +0 -1
  508. package/dist/types/index.d.ts +0 -14
  509. package/dist/types/index.d.ts.map +0 -1
  510. package/dist/types/index.js +0 -39
  511. package/dist/types/index.js.map +0 -1
  512. package/src/__tests__/long-running.test.ts +0 -17
  513. package/src/__tests__/passes-gate-extension.test.ts +0 -151
  514. package/src/cli/commands/__tests__/doc-freshness-check.test.ts +0 -168
  515. package/src/cli/commands/doc-freshness-check.ts +0 -386
  516. package/src/spec/CONTEXT.md +0 -11
  517. package/src/types/index.ts +0 -47
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities-parser.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6BH,MAAM,WAAW,wBAAwB;IACvC,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,MAAM,EAAE,CAqB1G;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,MAAM,EAAE,CAMlH;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKlE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1E;AAwCD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,GAClB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAa1C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CASpF"}
1
+ {"version":3,"file":"capabilities-parser.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAmBH,MAAM,WAAW,wBAAwB;IACvC,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,MAAM,EAAE,CAoB1G;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,MAAM,EAAE,CAMlH;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKlE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1E;AAID;;;;;;;;GAQG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS;QAAE,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CACrC;AA+CD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,0BAA0B,GACjC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAa1C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,0BAA0B,GACjC,MAAM,CASR"}
@@ -6,6 +6,8 @@
6
6
  * 各持一份正则,收敛到此处。H2 起能力清单计数(checkCapabilityCounts /
7
7
  * updateCapabilityCounts)也从 sync-docs/capabilities-syncer 收敛到此,
8
8
  * 使本模块成为 CAPABILITIES.md 解析 + 计数唯一入口。
9
+ *
10
+ * 计数所需的命令/门禁定义由调用方注入(harness#88:core 不值导入上层定义表)。
9
11
  */
10
12
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
13
  if (k2 === undefined) k2 = k;
@@ -49,17 +51,9 @@ exports.checkCapabilityCounts = checkCapabilityCounts;
49
51
  exports.updateCapabilityCounts = updateCapabilityCounts;
50
52
  const fs = __importStar(require("fs"));
51
53
  const definitions_1 = require("./definitions");
52
- const definitions_2 = require("../../cli/commands/definitions");
53
- const definitions_3 = require("../../gates/definitions");
54
54
  const runner_1 = require("./doc-freshness/runner");
55
- /** CLI 命令数 = 非门禁命令定义 + 门禁命令定义(ADR-0002:定义表是命令形状单一来源) */
56
- function cliCommandCount() {
57
- return definitions_2.COMMAND_DEFINITIONS.length + definitions_3.GATE_DEFINITIONS.filter(g => g.cli).length;
58
- }
59
55
  /** 匹配表格单元格中的源码文件条目(如 `src/foo.ts`、`foo.tsx`) */
60
56
  const FILE_CELL_REGEX = /\|\s*([^|]+?\.(?:ts|tsx|js|jsx))\s*\|/g;
61
- /** 仅匹配表格第二列的文件条目(checker 的历史语义:第一列为模块名,第二列为文件) */
62
- const FILE_SECOND_COLUMN_REGEX = /^\|[^|]+\|\s*([^|]+?\.(?:ts|tsx|js|jsx))\s*\|/gm;
63
57
  /**
64
58
  * 匹配表格单元格中的目录条目(如 `agents/`)。
65
59
  *
@@ -71,16 +65,17 @@ const DIR_CELL_REGEX = /\|\s*([\w][\w@./-]*\/)\s*\|/g;
71
65
  /**
72
66
  * 从 CAPABILITIES.md 内容中提取表格列出的条目
73
67
  *
68
+ * 解析口径(ADR-0009):表格所有单元格收集;「只看第二列」的历史读法废弃。
69
+ *
74
70
  * @param content markdown 内容
75
71
  * @returns 文件路径原样 + (可选)目录条目,按出现顺序去重
76
72
  */
77
73
  function parseCapabilitiesEntries(content, options = {}) {
78
- const { includeDirs = false, secondColumnOnly = false } = options;
74
+ const { includeDirs = false } = options;
79
75
  const entries = [];
80
- const fileRegex = secondColumnOnly ? FILE_SECOND_COLUMN_REGEX : FILE_CELL_REGEX;
81
76
  let match;
82
- fileRegex.lastIndex = 0;
83
- while ((match = fileRegex.exec(content)) !== null) {
77
+ FILE_CELL_REGEX.lastIndex = 0;
78
+ while ((match = FILE_CELL_REGEX.exec(content)) !== null) {
84
79
  const raw = match[1].trim();
85
80
  if (!entries.includes(raw))
86
81
  entries.push(raw);
@@ -134,30 +129,39 @@ function aggregateToSourceSubdir(root, file) {
134
129
  return prefix;
135
130
  return prefix + rest.slice(0, idx) + '/';
136
131
  }
137
- const CAPABILITY_COUNT_RULES = [
138
- { label: 'CLI Commands', pattern: 'CLI Commands\\s*\\((\\d+)\\)', actual: cliCommandCount },
139
- { label: 'Quality Gates', pattern: 'Quality Gates?\\s*\\((\\d+)\\)', actual: () => definitions_3.GATE_DEFINITIONS.length },
140
- { label: 'Iron Laws', pattern: 'Iron Laws?\\s*\\((\\d+)\\)', actual: () => Object.keys(definitions_1.IRON_LAWS).length },
141
- { label: 'Guidelines', pattern: 'Guidelines?\\s*\\((\\d+)\\)', actual: () => Object.keys(definitions_1.GUIDELINES).length },
142
- ];
132
+ /**
133
+ * 能力清单统计规则(CLI Commands 计数 = 非门禁命令数 + cli 元数据的门禁数)
134
+ */
135
+ function capabilityCountRules(source) {
136
+ return [
137
+ {
138
+ label: 'CLI Commands',
139
+ pattern: 'CLI Commands\\s*\\((\\d+)\\)',
140
+ actual: source.commands.length + source.gates.filter(g => g.cli).length,
141
+ },
142
+ { label: 'Quality Gates', pattern: 'Quality Gates?\\s*\\((\\d+)\\)', actual: source.gates.length },
143
+ { label: 'Iron Laws', pattern: 'Iron Laws?\\s*\\((\\d+)\\)', actual: Object.keys(definitions_1.IRON_LAWS).length },
144
+ { label: 'Guidelines', pattern: 'Guidelines?\\s*\\((\\d+)\\)', actual: Object.keys(definitions_1.GUIDELINES).length },
145
+ ];
146
+ }
143
147
  /**
144
148
  * 构建 CAPABILITIES.md 能力清单格式的检查配置
145
149
  */
146
- function buildCapabilityChecks() {
147
- return CAPABILITY_COUNT_RULES.map(rule => ({
150
+ function buildCapabilityChecks(source) {
151
+ return capabilityCountRules(source).map(rule => ({
148
152
  type: 'doc_regex_count',
149
153
  doc: 'CAPABILITIES.md',
150
154
  label: rule.label,
151
155
  pattern: rule.pattern,
152
- actual: { kind: 'const_count', value: rule.actual() },
156
+ actual: { kind: 'const_count', value: rule.actual },
153
157
  }));
154
158
  }
155
159
  /**
156
160
  * 使用 FreshnessRunner 检查能力清单计数是否与代码一致(--check 模式)
157
161
  */
158
- function checkCapabilityCounts(projectPath) {
162
+ function checkCapabilityCounts(projectPath, source) {
159
163
  const runner = new runner_1.FreshnessRunner();
160
- const checks = buildCapabilityChecks();
164
+ const checks = buildCapabilityChecks(source);
161
165
  const results = runner.runAll({ checks }, projectPath);
162
166
  const mismatches = [];
163
167
  for (const r of results) {
@@ -170,14 +174,14 @@ function checkCapabilityCounts(projectPath) {
170
174
  /**
171
175
  * 更新 CAPABILITIES.md 中的能力清单计数(write 模式)
172
176
  *
173
- * 命令/门禁计数取自定义表(ADR-0002 单一来源),regex 替换文档计数行;
174
- * 规则与 check 方向共用 CAPABILITY_COUNT_RULES(ADR-0008)。
177
+ * 命令/门禁计数取自注入的定义源(ADR-0002 单一来源在调用方),regex 替换文档计数行;
178
+ * 规则与 check 方向共用 capabilityCountRules(ADR-0008)。
175
179
  */
176
- function updateCapabilityCounts(content, _projectPath) {
177
- for (const rule of CAPABILITY_COUNT_RULES) {
180
+ function updateCapabilityCounts(content, source) {
181
+ for (const rule of capabilityCountRules(source)) {
178
182
  const regex = new RegExp(rule.pattern);
179
183
  if (regex.test(content)) {
180
- content = content.replace(regex, `${rule.label} (${rule.actual()})`);
184
+ content = content.replace(regex, `${rule.label} (${rule.actual})`);
181
185
  }
182
186
  }
183
187
  return content;
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities-parser.js","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capabilities-parser.js","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * CAPABILITIES.md 声明与代码实况的对照判定(ADR-0009)
3
+ *
4
+ * 纯判定 module:吃「文档内容 + 实际文件清单(+ 增量清单)」,一次产出全部判定结果;
5
+ * 不做任何 fs/git IO(存在性可选注入)。此前同一套覆盖/幽灵规则在
6
+ * capability_sync / docs_freshness / sync-docs 三处独立实现,靠「同规则」注释人工同步,
7
+ * 同一 bug(basename 碰撞、后缀误配)在多处各修一遍——此处为唯一真相源。
8
+ *
9
+ * 方向:
10
+ * 代码→文档 uncoveredChanges / uncoveredFiles / uncoveredDirs(漏登记)
11
+ * 文档→代码 deadEntries(幽灵:文档登记的路径既不在代码实况中、文件系统中也不存在)
12
+ *
13
+ * 解析口径(ADR-0009):表格所有单元格收集,文件条目与目录条目都参与覆盖;
14
+ * 「只看第二列」的历史读法废弃。幽灵判定同样覆盖文件与目录条目(口径从严)。
15
+ * mode=module / file 的差异不在判定层,而是调用方取哪份输出形状:
16
+ * module 读 uncoveredDirs(目录聚合),file 读 uncoveredFiles(逐文件)。
17
+ */
18
+ export interface ReconcileInput {
19
+ /** CAPABILITIES.md 内容 */
20
+ content: string;
21
+ /** 代码实况全集:项目相对路径的源文件清单(由调用方收集,见 collectSourceFiles) */
22
+ populationFiles: string[];
23
+ /** 增量变更文件(项目相对路径);无 git 概念的消费方传空/不传 */
24
+ changedFiles?: string[];
25
+ /** 存在性 oracle(项目相对路径 → 是否存在);缺省退化为「代码实况兜底」 */
26
+ fileExists?: (relPath: string) => boolean;
27
+ /** 源码根(如 'src'、'apps/api/src'):未覆盖聚合与条目多根相对路径解析用 */
28
+ sourceRoots?: string[];
29
+ }
30
+ export interface CapabilityVerdict {
31
+ /** 文档中的文件条目(原样路径,可能为全路径或裸文件名) */
32
+ fileEntries: string[];
33
+ /** 文档中的目录条目(以 / 结尾) */
34
+ dirEntries: string[];
35
+ /** 参与覆盖判定的条目集 = 文件条目 + 目录条目 */
36
+ coverageEntries: string[];
37
+ /** 文档含 markdown 表格(区分「散文文档」与「有表格零条目」) */
38
+ hasTable: boolean;
39
+ /** 能力清单格式(计数行文档):无文件表可核对,调用方据此短路 */
40
+ listingFormat: boolean;
41
+ /** 增量文件中未被覆盖的(capability_sync Step1) */
42
+ uncoveredChanges: string[];
43
+ /** 代码实况中未被文档登记的 */
44
+ uncoveredFiles: string[];
45
+ /** 未覆盖文件按源码根下第一级子目录聚合(module 模式的 added 形状) */
46
+ uncoveredDirs: string[];
47
+ /** 幽灵条目(文件 + 目录):文档登记但代码实况与文件系统均不存在 */
48
+ deadEntries: string[];
49
+ }
50
+ export declare function reconcileCapabilities(input: ReconcileInput): CapabilityVerdict;
51
+ /**
52
+ * 变更清单中的「有意义的代码变更」:仅 .ts/.tsx/.js 且非测试文件
53
+ * (capability_sync Step1 的历史过滤规则,收口于此)
54
+ */
55
+ export declare function significantCodeChanges(diffNames: string[]): string[];
56
+ /**
57
+ * 收集源码根下的实际文件清单(项目相对路径)
58
+ *
59
+ * 对 utils/file-walk 的统一封装,替代各调用方自拼 join/relative。
60
+ * 扩展名口径保持各调用方现状(checker 不含 .tsx;sync-docs 的模块扫描需
61
+ * ModuleInfo 元数据,继续走 scanSourceModules)——统一扩展名口径属行为变更,
62
+ * 不在本次纯重构范围(ADR-0009 记录在案)。
63
+ */
64
+ export declare function collectSourceFiles(projectPath: string, roots: string[], options?: {
65
+ includeTsx?: boolean;
66
+ }): string[];
67
+ //# sourceMappingURL=capabilities-reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities-reconcile.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH,MAAM,WAAW,cAAc;IAC7B,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,uBAAuB;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,+BAA+B;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,uCAAuC;IACvC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AA2BD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,iBAAiB,CA2C9E;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAIpE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACrC,MAAM,EAAE,CAUV"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * CAPABILITIES.md 声明与代码实况的对照判定(ADR-0009)
4
+ *
5
+ * 纯判定 module:吃「文档内容 + 实际文件清单(+ 增量清单)」,一次产出全部判定结果;
6
+ * 不做任何 fs/git IO(存在性可选注入)。此前同一套覆盖/幽灵规则在
7
+ * capability_sync / docs_freshness / sync-docs 三处独立实现,靠「同规则」注释人工同步,
8
+ * 同一 bug(basename 碰撞、后缀误配)在多处各修一遍——此处为唯一真相源。
9
+ *
10
+ * 方向:
11
+ * 代码→文档 uncoveredChanges / uncoveredFiles / uncoveredDirs(漏登记)
12
+ * 文档→代码 deadEntries(幽灵:文档登记的路径既不在代码实况中、文件系统中也不存在)
13
+ *
14
+ * 解析口径(ADR-0009):表格所有单元格收集,文件条目与目录条目都参与覆盖;
15
+ * 「只看第二列」的历史读法废弃。幽灵判定同样覆盖文件与目录条目(口径从严)。
16
+ * mode=module / file 的差异不在判定层,而是调用方取哪份输出形状:
17
+ * module 读 uncoveredDirs(目录聚合),file 读 uncoveredFiles(逐文件)。
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.reconcileCapabilities = reconcileCapabilities;
21
+ exports.significantCodeChanges = significantCodeChanges;
22
+ exports.collectSourceFiles = collectSourceFiles;
23
+ const path_1 = require("path");
24
+ const capabilities_parser_1 = require("./capabilities-parser");
25
+ const file_walk_1 = require("../../utils/file-walk");
26
+ /** markdown 表格分隔行(|------|------|):区分「无表格的散文文档」与「有表格但零条目」 */
27
+ const TABLE_SEPARATOR_REGEX = /^\s*\|[\s:|-]+\|\s*$/m;
28
+ /**
29
+ * 变更文件是否被条目覆盖(ADR-0009 唯一覆盖规则)
30
+ *
31
+ * 目录条目(以 / 结尾)前缀匹配;文件条目精确匹配或路径边界后缀匹配
32
+ * (兼容 basename 条目,但拒绝 xfoo.ts 命中 foo.ts、docs/src/foo.tsx 命中 src/foo.ts
33
+ * 这类 endsWith/includes 模糊匹配造成的碰撞)
34
+ */
35
+ function isCoveredBy(entries, file) {
36
+ return entries.some((listed) => listed.endsWith('/')
37
+ ? file.startsWith(listed)
38
+ : file === listed || file.endsWith('/' + listed));
39
+ }
40
+ /** 条目多根相对路径的存在性:项目根直查 + 各源码根前缀(docs_freshness/sync-docs 历史同语义) */
41
+ function entryExistsOnDisk(entry, fileExists, sourceRoots) {
42
+ if (fileExists(entry))
43
+ return true;
44
+ return sourceRoots.some((root) => fileExists(`${root}/${entry}`));
45
+ }
46
+ function reconcileCapabilities(input) {
47
+ const { content, populationFiles, changedFiles = [], fileExists = () => false, sourceRoots = [], } = input;
48
+ const allEntries = (0, capabilities_parser_1.parseCapabilitiesEntries)(content, { includeDirs: true });
49
+ const fileEntries = allEntries.filter((e) => !e.endsWith('/'));
50
+ const dirEntries = allEntries.filter((e) => e.endsWith('/'));
51
+ const coverageEntries = [...fileEntries, ...dirEntries];
52
+ const uncoveredFiles = populationFiles.filter((f) => !isCoveredBy(coverageEntries, f));
53
+ const uncoveredDirs = [...new Set(uncoveredFiles.map((file) => {
54
+ // 与 sync-docs 历史聚合同语义:归属第一个能前缀匹配的来源根,兜底首根
55
+ const root = sourceRoots.find((d) => file.startsWith(d + '/')) || sourceRoots[0] || '';
56
+ return (0, capabilities_parser_1.aggregateToSourceSubdir)(root, file);
57
+ }))];
58
+ // 条目在代码实况中仍有对应文件即算活(裸文件名条目无法做存在性判定的兜底)
59
+ const aliveByPopulation = (entry) => populationFiles.some((f) => isCoveredBy([entry], f));
60
+ const deadEntries = allEntries.filter((entry) => {
61
+ if (entryExistsOnDisk(entry, fileExists, sourceRoots))
62
+ return false;
63
+ return !aliveByPopulation(entry);
64
+ });
65
+ return {
66
+ fileEntries,
67
+ dirEntries,
68
+ coverageEntries,
69
+ hasTable: TABLE_SEPARATOR_REGEX.test(content),
70
+ listingFormat: (0, capabilities_parser_1.isCapabilityListingFormat)(content),
71
+ uncoveredChanges: changedFiles.filter((f) => !isCoveredBy(coverageEntries, f)),
72
+ uncoveredFiles,
73
+ uncoveredDirs,
74
+ deadEntries,
75
+ };
76
+ }
77
+ /**
78
+ * 变更清单中的「有意义的代码变更」:仅 .ts/.tsx/.js 且非测试文件
79
+ * (capability_sync Step1 的历史过滤规则,收口于此)
80
+ */
81
+ function significantCodeChanges(diffNames) {
82
+ return diffNames
83
+ .filter((f) => f.endsWith('.ts') || f.endsWith('.tsx') || f.endsWith('.js'))
84
+ .filter((f) => !f.includes('__tests__') && !f.includes('.test.') && !f.includes('.spec.'));
85
+ }
86
+ /**
87
+ * 收集源码根下的实际文件清单(项目相对路径)
88
+ *
89
+ * 对 utils/file-walk 的统一封装,替代各调用方自拼 join/relative。
90
+ * 扩展名口径保持各调用方现状(checker 不含 .tsx;sync-docs 的模块扫描需
91
+ * ModuleInfo 元数据,继续走 scanSourceModules)——统一扩展名口径属行为变更,
92
+ * 不在本次纯重构范围(ADR-0009 记录在案)。
93
+ */
94
+ function collectSourceFiles(projectPath, roots, options = {}) {
95
+ const files = [];
96
+ for (const root of roots) {
97
+ const found = (0, file_walk_1.findTsSourceFiles)((0, path_1.join)(projectPath, root), {
98
+ skipIndex: true,
99
+ includeTsx: options.includeTsx,
100
+ });
101
+ files.push(...found.map((f) => (0, path_1.relative)(projectPath, f)));
102
+ }
103
+ return files;
104
+ }
105
+ //# sourceMappingURL=capabilities-reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities-reconcile.js","sourceRoot":"","sources":["../../../src/core/constraints/capabilities-reconcile.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;AAwEH,sDA2CC;AAMD,wDAIC;AAUD,gDAcC;AAnJD,+BAAsC;AACtC,+DAI+B;AAC/B,qDAA0D;AAE1D,6DAA6D;AAC7D,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAoCtD;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,OAAiB,EAAE,IAAY;IAClD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACzB,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,iBAAiB,CACxB,KAAa,EACb,UAAoC,EACpC,WAAqB;IAErB,IAAI,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAgB,qBAAqB,CAAC,KAAqB;IACzD,MAAM,EACJ,OAAO,EACP,eAAe,EACf,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,EACxB,WAAW,GAAG,EAAE,GACjB,GAAG,KAAK,CAAC;IAEV,MAAM,UAAU,GAAG,IAAA,8CAAwB,EAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC;IAExD,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1B,0CAA0C;YAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvF,OAAO,IAAA,6CAAuB,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CACH,CAAC,CAAC;IAEH,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAW,EAAE,CACnD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9C,IAAI,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC;YAAE,OAAO,KAAK,CAAC;QACpE,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,UAAU;QACV,eAAe;QACf,QAAQ,EAAE,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC;QAC7C,aAAa,EAAE,IAAA,+CAAyB,EAAC,OAAO,CAAC;QACjD,gBAAgB,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QAC9E,cAAc;QACd,aAAa;QACb,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CAAC,SAAmB;IACxD,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC3E,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,WAAmB,EACnB,KAAe,EACf,UAAoC,EAAE;IAEtC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAA,6BAAiB,EAAC,IAAA,WAAI,EAAC,WAAW,EAAE,IAAI,CAAC,EAAE;YACvD,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,eAAQ,EAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -9,12 +9,13 @@
9
9
  import { Constraint, ConstraintContext, ConstraintResult, ConstraintCheckResult } from '../../types/constraint';
10
10
  import type { ExecutionTrace } from '../../types/trace';
11
11
  import type { MergedConstraintsConfig } from '../../types/project-config';
12
+ import { type GitEvidence } from './git-evidence';
12
13
  /**
13
- * trace 记录器最小接口(原工单 15 为消除 core→monitoring 循环;现 monitoring
14
- * 不反向依赖 core,方向单向、无环,checker 可直接值引用 getTraceCollector)
14
+ * trace 记录器最小接口(工单 15 decycle 收尾,harness#88)
15
15
  *
16
- * checker 不构造收集器;生产路径首次记录时惰性接线 getTraceCollector()
17
- * (幂等单点,ADR-0003),测试可经 setTraceRecorder 注入替身。
16
+ * core 不上行依赖 monitoring:记录器经**构造参数**注入,未注入 = no-op
17
+ * (默认无副作用)。真实收集器由组合根接线——CLI check/report 与 bootstrap
18
+ * 各自 `new ConstraintChecker(getTraceCollector())`。
18
19
  */
19
20
  export interface TraceRecorder {
20
21
  record(trace: ExecutionTrace): void;
@@ -26,38 +27,13 @@ export declare class ConstraintChecker {
26
27
  private static instance;
27
28
  /** 检查结果缓存(S7:src 扫描等重复 I/O,TTL=1s 防跨测试污染) */
28
29
  private cache;
30
+ /** trace 记录器(构造注入;缺省 no-op) */
31
+ private readonly traceRecorder;
32
+ constructor(traceRecorder?: TraceRecorder);
29
33
  /**
30
- * run 级 memo(工单 18):一次 checkConstraints 内
31
- * git diff 等命令只执行一次;run 外直接调用私有检查方法时不 memo(恒新鲜)。
32
- */
33
- private runCache;
34
- /** trace 记录器(注入式;null = 未显式注入,首次记录时惰性接线全局收集器) */
35
- private traceRecorder;
36
- private constructor();
37
- /**
38
- * 取 trace 记录器:未显式注入时惰性接线全局收集器(幂等,ADR-0003 副作用收敛)
39
- */
40
- private getRecorder;
41
- /**
42
- * run 内 memoize;无活动 run 时直接执行(工单 18)
43
- */
44
- private memoRun;
45
- /**
46
- * staged 全量 diff(同一次 run 内只执行一次 git 命令,工单 18)
47
- */
48
- private getStagedDiff;
49
- /**
50
- * staged 变更文件名列表(同一次 run 内只执行一次 git 命令,工单 18)
51
- */
52
- private getStagedDiffNames;
53
- /**
54
- * 获取单例实例
34
+ * 获取单例实例(未接线记录器的默认实例:不写 trace)
55
35
  */
56
36
  static getInstance(): ConstraintChecker;
57
- /**
58
- * 注入 trace 记录器(测试/定制场景;不调用则首次记录时惰性接线全局收集器)
59
- */
60
- setTraceRecorder(recorder: TraceRecorder): void;
61
37
  /**
62
38
  * 获取当前的约束集合(内置 + 自定义)
63
39
  *
@@ -73,19 +49,14 @@ export declare class ConstraintChecker {
73
49
  };
74
50
  /**
75
51
  * 检查单个约束
52
+ *
53
+ * @param evidence 可选,本 run 的 git 证据实例(#87);不传 = 本次调用独占一份真 git 证据
76
54
  */
77
- check(constraint: Constraint, context: ConstraintContext): Promise<ConstraintResult>;
55
+ check(constraint: Constraint, context: ConstraintContext, evidence?: GitEvidence): Promise<ConstraintResult>;
78
56
  /**
79
57
  * 根据约束层级获取严重性
80
58
  */
81
59
  private getSeverity;
82
- /**
83
- * 判断约束是否匹配当前触发条件
84
- *
85
- * context.operation 为主触发条件,context.extraTriggers 为次级推断
86
- * (ADR-0001:pre-commit 代码变更附加 code_implementation),任一命中即匹配。
87
- */
88
- private matchesTrigger;
89
60
  /**
90
61
  * 记录约束检查的 trace
91
62
  */
@@ -95,6 +66,9 @@ export declare class ConstraintChecker {
95
66
  *
96
67
  * 注册表闭环(ADR-0001):kind='check' 未注册 checker 直接抛错,
97
68
  * 不再有"未注册默认通过"路径;kind='prompt' 在 check() 入口已短路。
69
+ *
70
+ * git 证据(stagedDiff/stagedDiffNames)单一来源 = GitEvidence adapter(#87):
71
+ * 一次 run 内调用方传同一实例即至多取证一次,run 外调用独占一份。
98
72
  */
99
73
  private checkPrecondition;
100
74
  /**
@@ -116,16 +90,20 @@ export declare class ConstraintChecker {
116
90
  *
117
91
  * @param context 约束上下文
118
92
  * @param customConfig 可选,per-request 自定义配置(避免多请求间的单例状态污染)
93
+ * @param evidence 可选,本 run 的 git 证据 adapter(#87)。调用方(CLI check)与
94
+ * buildConstraintContext 传同一实例 → 一次 run 内 git 取证单一来源;
95
+ * 不传则本 run 自建一份,run 级 memo 照样生效(memo 在实例层,非隐式全局)。
119
96
  */
120
- checkConstraints(context: ConstraintContext, customConfig?: MergedConstraintsConfig | null): Promise<ConstraintCheckResult>;
97
+ checkConstraints(context: ConstraintContext, customConfig?: MergedConstraintsConfig | null, evidence?: GitEvidence): Promise<ConstraintCheckResult>;
121
98
  /**
122
99
  * 执行前检查(仅检查 Iron Laws)
123
100
  *
124
101
  * @param context 约束上下文
125
102
  * @param customConfig 可选,per-request 自定义配置(避免多请求间的单例状态污染)
103
+ * @param evidence 可选,本次检查共用的 git 证据 adapter(#87,同 checkConstraints)
126
104
  * @throws ConstraintViolationError 如果有铁律违规
127
105
  */
128
- beforeExecution(context: ConstraintContext, customConfig?: MergedConstraintsConfig | null): Promise<void>;
106
+ beforeExecution(context: ConstraintContext, customConfig?: MergedConstraintsConfig | null, evidence?: GitEvidence): Promise<void>;
129
107
  }
130
108
  /**
131
109
  * 快捷函数:检查约束
@@ -1 +1 @@
1
- {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/checker.ts"],"names":[],"mappings":"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"}