@dommaker/harness 0.16.6 → 0.16.8

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 (641) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +54 -14
  3. package/bin/harness.js +56 -96
  4. package/dist/architecture/constraint-engine.d.ts.map +1 -1
  5. package/dist/architecture/constraint-engine.js +0 -4
  6. package/dist/architecture/constraint-engine.js.map +1 -1
  7. package/dist/architecture/cross-project-checker.d.ts.map +1 -1
  8. package/dist/architecture/cross-project-checker.js +5 -25
  9. package/dist/architecture/cross-project-checker.js.map +1 -1
  10. package/dist/cli/commands/analyze-sessions.d.ts +2 -0
  11. package/dist/cli/commands/analyze-sessions.d.ts.map +1 -1
  12. package/dist/cli/commands/analyze-sessions.js +25 -181
  13. package/dist/cli/commands/analyze-sessions.js.map +1 -1
  14. package/dist/cli/commands/check.d.ts +1 -0
  15. package/dist/cli/commands/check.d.ts.map +1 -1
  16. package/dist/cli/commands/check.js +24 -216
  17. package/dist/cli/commands/check.js.map +1 -1
  18. package/dist/cli/commands/doc-freshness-check.d.ts.map +1 -1
  19. package/dist/cli/commands/doc-freshness-check.js +14 -28
  20. package/dist/cli/commands/doc-freshness-check.js.map +1 -1
  21. package/dist/cli/commands/flow.d.ts.map +1 -1
  22. package/dist/cli/commands/flow.js +2 -1
  23. package/dist/cli/commands/flow.js.map +1 -1
  24. package/dist/cli/commands/init.js +2 -2
  25. package/dist/cli/commands/init.js.map +1 -1
  26. package/dist/cli/commands/posteval-plan.d.ts.map +1 -1
  27. package/dist/cli/commands/posteval-plan.js +0 -1
  28. package/dist/cli/commands/posteval-plan.js.map +1 -1
  29. package/dist/cli/commands/release.js +1 -1
  30. package/dist/cli/commands/release.js.map +1 -1
  31. package/dist/cli/commands/report.d.ts.map +1 -1
  32. package/dist/cli/commands/report.js +2 -0
  33. package/dist/cli/commands/report.js.map +1 -1
  34. package/dist/cli/commands/spec-baseline-check.d.ts.map +1 -1
  35. package/dist/cli/commands/spec-baseline-check.js +12 -23
  36. package/dist/cli/commands/spec-baseline-check.js.map +1 -1
  37. package/dist/cli/commands/sync-docs/agents-syncer.d.ts +19 -0
  38. package/dist/cli/commands/sync-docs/agents-syncer.d.ts.map +1 -0
  39. package/dist/cli/commands/sync-docs/agents-syncer.js +288 -0
  40. package/dist/cli/commands/sync-docs/agents-syncer.js.map +1 -0
  41. package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts +37 -0
  42. package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts.map +1 -0
  43. package/dist/cli/commands/sync-docs/capabilities-syncer.js +235 -0
  44. package/dist/cli/commands/sync-docs/capabilities-syncer.js.map +1 -0
  45. package/dist/cli/commands/sync-docs/context-syncer.d.ts +17 -0
  46. package/dist/cli/commands/sync-docs/context-syncer.d.ts.map +1 -0
  47. package/dist/cli/commands/sync-docs/context-syncer.js +143 -0
  48. package/dist/cli/commands/sync-docs/context-syncer.js.map +1 -0
  49. package/dist/cli/commands/{sync-docs.d.ts → sync-docs/index.d.ts} +9 -2
  50. package/dist/cli/commands/sync-docs/index.d.ts.map +1 -0
  51. package/dist/cli/commands/sync-docs/index.js +338 -0
  52. package/dist/cli/commands/sync-docs/index.js.map +1 -0
  53. package/dist/cli/commands/sync-docs/preserve-block.d.ts +24 -0
  54. package/dist/cli/commands/sync-docs/preserve-block.d.ts.map +1 -0
  55. package/dist/cli/commands/sync-docs/preserve-block.js +55 -0
  56. package/dist/cli/commands/sync-docs/preserve-block.js.map +1 -0
  57. package/dist/cli/commands/sync-docs/project-reader.d.ts +41 -0
  58. package/dist/cli/commands/sync-docs/project-reader.d.ts.map +1 -0
  59. package/dist/cli/commands/sync-docs/project-reader.js +183 -0
  60. package/dist/cli/commands/sync-docs/project-reader.js.map +1 -0
  61. package/dist/cli/commands/update-user-model.d.ts +2 -0
  62. package/dist/cli/commands/update-user-model.d.ts.map +1 -1
  63. package/dist/cli/commands/update-user-model.js +19 -90
  64. package/dist/cli/commands/update-user-model.js.map +1 -1
  65. package/dist/cli/commands/validate.d.ts +3 -0
  66. package/dist/cli/commands/validate.d.ts.map +1 -1
  67. package/dist/cli/commands/validate.js +6 -39
  68. package/dist/cli/commands/validate.js.map +1 -1
  69. package/dist/cli/session-mining/corrections.d.ts +17 -0
  70. package/dist/cli/session-mining/corrections.d.ts.map +1 -0
  71. package/dist/cli/session-mining/corrections.js +58 -0
  72. package/dist/cli/session-mining/corrections.js.map +1 -0
  73. package/dist/cli/session-mining/index.d.ts +13 -0
  74. package/dist/cli/session-mining/index.d.ts.map +1 -0
  75. package/dist/{core/spec → cli/session-mining}/index.js +9 -3
  76. package/dist/cli/session-mining/index.js.map +1 -0
  77. package/dist/cli/session-mining/text.d.ts +31 -0
  78. package/dist/cli/session-mining/text.d.ts.map +1 -0
  79. package/dist/cli/session-mining/text.js +126 -0
  80. package/dist/cli/session-mining/text.js.map +1 -0
  81. package/dist/cli/session-mining/transcript.d.ts +28 -0
  82. package/dist/cli/session-mining/transcript.d.ts.map +1 -0
  83. package/dist/cli/session-mining/transcript.js +123 -0
  84. package/dist/cli/session-mining/transcript.js.map +1 -0
  85. package/dist/constraints/lifecycle-runner.d.ts +1 -1
  86. package/dist/constraints/lifecycle-runner.d.ts.map +1 -1
  87. package/dist/context/compaction.d.ts.map +1 -1
  88. package/dist/context/compaction.js +2 -3
  89. package/dist/context/compaction.js.map +1 -1
  90. package/dist/context/knowledge-injector.d.ts.map +1 -1
  91. package/dist/context/tool-output-budget.d.ts +1 -1
  92. package/dist/context/tool-output-budget.d.ts.map +1 -1
  93. package/dist/context/tool-output-budget.js +1 -1
  94. package/dist/context/tool-output-budget.js.map +1 -1
  95. package/dist/core/constraints/capabilities-parser.d.ts +24 -0
  96. package/dist/core/constraints/capabilities-parser.d.ts.map +1 -0
  97. package/dist/core/constraints/capabilities-parser.js +95 -0
  98. package/dist/core/constraints/capabilities-parser.js.map +1 -0
  99. package/dist/core/constraints/checker.d.ts +37 -100
  100. package/dist/core/constraints/checker.d.ts.map +1 -1
  101. package/dist/core/constraints/checker.js +150 -737
  102. package/dist/core/constraints/checker.js.map +1 -1
  103. package/dist/core/constraints/checkers/always-pass.d.ts +17 -0
  104. package/dist/core/constraints/checkers/always-pass.d.ts.map +1 -0
  105. package/dist/core/constraints/checkers/always-pass.js +23 -0
  106. package/dist/core/constraints/checkers/always-pass.js.map +1 -0
  107. package/dist/core/constraints/checkers/capability-sync.d.ts +10 -0
  108. package/dist/core/constraints/checkers/capability-sync.d.ts.map +1 -0
  109. package/dist/core/constraints/checkers/capability-sync.js +60 -0
  110. package/dist/core/constraints/checkers/capability-sync.js.map +1 -0
  111. package/dist/core/constraints/checkers/context-doc-sync.d.ts +6 -0
  112. package/dist/core/constraints/checkers/context-doc-sync.d.ts.map +1 -0
  113. package/dist/core/constraints/checkers/context-doc-sync.js +35 -0
  114. package/dist/core/constraints/checkers/context-doc-sync.js.map +1 -0
  115. package/dist/core/constraints/checkers/docs-freshness.d.ts +10 -0
  116. package/dist/core/constraints/checkers/docs-freshness.d.ts.map +1 -0
  117. package/dist/core/constraints/checkers/docs-freshness.js +111 -0
  118. package/dist/core/constraints/checkers/docs-freshness.js.map +1 -0
  119. package/dist/core/constraints/checkers/guideline-flags.d.ts +9 -0
  120. package/dist/core/constraints/checkers/guideline-flags.d.ts.map +1 -0
  121. package/dist/core/constraints/checkers/guideline-flags.js +13 -0
  122. package/dist/core/constraints/checkers/guideline-flags.js.map +1 -0
  123. package/dist/core/constraints/checkers/index.d.ts +17 -0
  124. package/dist/core/constraints/checkers/index.d.ts.map +1 -0
  125. package/dist/core/constraints/checkers/index.js +82 -0
  126. package/dist/core/constraints/checkers/index.js.map +1 -0
  127. package/dist/core/constraints/checkers/iron-flags.d.ts +14 -0
  128. package/dist/core/constraints/checkers/iron-flags.d.ts.map +1 -0
  129. package/dist/core/constraints/checkers/iron-flags.js +24 -0
  130. package/dist/core/constraints/checkers/iron-flags.js.map +1 -0
  131. package/dist/core/constraints/checkers/no-any-type.d.ts +6 -0
  132. package/dist/core/constraints/checkers/no-any-type.d.ts.map +1 -0
  133. package/dist/core/constraints/checkers/no-any-type.js +42 -0
  134. package/dist/core/constraints/checkers/no-any-type.js.map +1 -0
  135. package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts +6 -0
  136. package/dist/core/constraints/checkers/no-bypass-checkpoint.d.ts.map +1 -0
  137. package/dist/core/constraints/checkers/no-bypass-checkpoint.js +40 -0
  138. package/dist/core/constraints/checkers/no-bypass-checkpoint.js.map +1 -0
  139. package/dist/core/constraints/checkers/no-excuse-patterns.d.ts +6 -0
  140. package/dist/core/constraints/checkers/no-excuse-patterns.d.ts.map +1 -0
  141. package/dist/core/constraints/checkers/no-excuse-patterns.js +25 -0
  142. package/dist/core/constraints/checkers/no-excuse-patterns.js.map +1 -0
  143. package/dist/core/constraints/checkers/no-fuzzy-completion-claim.d.ts +6 -0
  144. package/dist/core/constraints/checkers/no-fuzzy-completion-claim.d.ts.map +1 -0
  145. package/dist/core/constraints/checkers/no-fuzzy-completion-claim.js +34 -0
  146. package/dist/core/constraints/checkers/no-fuzzy-completion-claim.js.map +1 -0
  147. package/dist/core/constraints/checkers/no-performative-agreement.d.ts +8 -0
  148. package/dist/core/constraints/checkers/no-performative-agreement.d.ts.map +1 -0
  149. package/dist/core/constraints/checkers/no-performative-agreement.js +23 -0
  150. package/dist/core/constraints/checkers/no-performative-agreement.js.map +1 -0
  151. package/dist/core/constraints/checkers/no-simplification-without-approval.d.ts +6 -0
  152. package/dist/core/constraints/checkers/no-simplification-without-approval.d.ts.map +1 -0
  153. package/dist/core/constraints/checkers/no-simplification-without-approval.js +30 -0
  154. package/dist/core/constraints/checkers/no-simplification-without-approval.js.map +1 -0
  155. package/dist/core/constraints/checkers/no-test-simplification.d.ts +6 -0
  156. package/dist/core/constraints/checkers/no-test-simplification.d.ts.map +1 -0
  157. package/dist/core/constraints/checkers/no-test-simplification.js +29 -0
  158. package/dist/core/constraints/checkers/no-test-simplification.js.map +1 -0
  159. package/dist/core/constraints/checkers/test-coverage.d.ts +6 -0
  160. package/dist/core/constraints/checkers/test-coverage.d.ts.map +1 -0
  161. package/dist/core/constraints/checkers/test-coverage.js +33 -0
  162. package/dist/core/constraints/checkers/test-coverage.js.map +1 -0
  163. package/dist/core/constraints/checkers/types.d.ts +43 -0
  164. package/dist/core/constraints/checkers/types.d.ts.map +1 -0
  165. package/dist/core/constraints/checkers/types.js +23 -0
  166. package/dist/core/constraints/checkers/types.js.map +1 -0
  167. package/dist/core/constraints/checkers/yagni.d.ts +8 -0
  168. package/dist/core/constraints/checkers/yagni.d.ts.map +1 -0
  169. package/dist/core/constraints/checkers/yagni.js +96 -0
  170. package/dist/core/constraints/checkers/yagni.js.map +1 -0
  171. package/dist/core/constraints/context-builder.d.ts +67 -0
  172. package/dist/core/constraints/context-builder.d.ts.map +1 -0
  173. package/dist/core/constraints/context-builder.js +294 -0
  174. package/dist/core/constraints/context-builder.js.map +1 -0
  175. package/dist/core/constraints/definitions/guidelines.d.ts +7 -0
  176. package/dist/core/constraints/definitions/guidelines.d.ts.map +1 -0
  177. package/dist/core/constraints/definitions/guidelines.js +641 -0
  178. package/dist/core/constraints/definitions/guidelines.js.map +1 -0
  179. package/dist/core/constraints/definitions/iron-laws.d.ts +7 -0
  180. package/dist/core/constraints/definitions/iron-laws.d.ts.map +1 -0
  181. package/dist/core/constraints/definitions/iron-laws.js +322 -0
  182. package/dist/core/constraints/definitions/iron-laws.js.map +1 -0
  183. package/dist/core/constraints/definitions/tips.d.ts +7 -0
  184. package/dist/core/constraints/definitions/tips.d.ts.map +1 -0
  185. package/dist/core/constraints/definitions/tips.js +62 -0
  186. package/dist/core/constraints/definitions/tips.js.map +1 -0
  187. package/dist/core/constraints/definitions.d.ts +8 -21
  188. package/dist/core/constraints/definitions.d.ts.map +1 -1
  189. package/dist/core/constraints/definitions.js +15 -1048
  190. package/dist/core/constraints/definitions.js.map +1 -1
  191. package/dist/core/constraints/doc-freshness/runner.d.ts.map +1 -1
  192. package/dist/core/constraints/doc-freshness/runner.js +0 -1
  193. package/dist/core/constraints/doc-freshness/runner.js.map +1 -1
  194. package/dist/core/constraints/index.d.ts +4 -5
  195. package/dist/core/constraints/index.d.ts.map +1 -1
  196. package/dist/core/constraints/index.js +1 -16
  197. package/dist/core/constraints/index.js.map +1 -1
  198. package/dist/core/constraints/interceptor.d.ts.map +1 -1
  199. package/dist/core/constraints/interceptor.js.map +1 -1
  200. package/dist/core/index.js +0 -1
  201. package/dist/core/index.js.map +1 -1
  202. package/dist/core/project-config-loader.d.ts +6 -4
  203. package/dist/core/project-config-loader.d.ts.map +1 -1
  204. package/dist/core/project-config-loader.js +46 -13
  205. package/dist/core/project-config-loader.js.map +1 -1
  206. package/dist/core/validators/check-handlers/command.d.ts +7 -0
  207. package/dist/core/validators/check-handlers/command.d.ts.map +1 -0
  208. package/dist/core/validators/check-handlers/command.js +58 -0
  209. package/dist/core/validators/check-handlers/command.js.map +1 -0
  210. package/dist/core/validators/check-handlers/file.d.ts +10 -0
  211. package/dist/core/validators/check-handlers/file.d.ts.map +1 -0
  212. package/dist/core/validators/check-handlers/file.js +128 -0
  213. package/dist/core/validators/check-handlers/file.js.map +1 -0
  214. package/dist/core/validators/check-handlers/http.d.ts +7 -0
  215. package/dist/core/validators/check-handlers/http.d.ts.map +1 -0
  216. package/dist/core/validators/check-handlers/http.js +88 -0
  217. package/dist/core/validators/check-handlers/http.js.map +1 -0
  218. package/dist/core/validators/check-handlers/output.d.ts +15 -0
  219. package/dist/core/validators/check-handlers/output.d.ts.map +1 -0
  220. package/dist/core/validators/check-handlers/output.js +152 -0
  221. package/dist/core/validators/check-handlers/output.js.map +1 -0
  222. package/dist/core/validators/checkpoint.d.ts +4 -72
  223. package/dist/core/validators/checkpoint.d.ts.map +1 -1
  224. package/dist/core/validators/checkpoint.js +21 -400
  225. package/dist/core/validators/checkpoint.js.map +1 -1
  226. package/dist/core/validators/cso.js +1 -1
  227. package/dist/core/validators/cso.js.map +1 -1
  228. package/dist/core/validators/passes-gate.js +2 -2
  229. package/dist/core/validators/passes-gate.js.map +1 -1
  230. package/dist/dashboard/stats.d.ts.map +1 -1
  231. package/dist/dashboard/types.d.ts.map +1 -1
  232. package/dist/evolution/auto-evolve.d.ts +1 -2
  233. package/dist/evolution/auto-evolve.d.ts.map +1 -1
  234. package/dist/evolution/auto-evolve.js +2 -1
  235. package/dist/evolution/auto-evolve.js.map +1 -1
  236. package/dist/failure/types.d.ts +5 -85
  237. package/dist/failure/types.d.ts.map +1 -1
  238. package/dist/failure/types.js +19 -115
  239. package/dist/failure/types.js.map +1 -1
  240. package/dist/gates/contract.d.ts.map +1 -1
  241. package/dist/gates/contract.js.map +1 -1
  242. package/dist/gates/index.d.ts.map +1 -1
  243. package/dist/gates/index.js.map +1 -1
  244. package/dist/gates/performance.js +1 -1
  245. package/dist/gates/performance.js.map +1 -1
  246. package/dist/gates/security.d.ts.map +1 -1
  247. package/dist/gates/security.js +1 -1
  248. package/dist/gates/security.js.map +1 -1
  249. package/dist/hooks/bootstrap.d.ts.map +1 -1
  250. package/dist/hooks/bootstrap.js +6 -48
  251. package/dist/hooks/bootstrap.js.map +1 -1
  252. package/dist/index.d.ts +0 -1
  253. package/dist/index.d.ts.map +1 -1
  254. package/dist/index.js +3 -1
  255. package/dist/index.js.map +1 -1
  256. package/dist/knowledge/audit.d.ts.map +1 -1
  257. package/dist/knowledge/doctor.d.ts.map +1 -1
  258. package/dist/knowledge/doctor.js.map +1 -1
  259. package/dist/knowledge/import.d.ts.map +1 -1
  260. package/dist/knowledge/import.js +1 -1
  261. package/dist/knowledge/import.js.map +1 -1
  262. package/dist/knowledge/index-generator.d.ts.map +1 -1
  263. package/dist/knowledge/index-generator.js +0 -1
  264. package/dist/knowledge/index-generator.js.map +1 -1
  265. package/dist/knowledge/ingest.d.ts.map +1 -1
  266. package/dist/knowledge/ingest.js +1 -1
  267. package/dist/knowledge/ingest.js.map +1 -1
  268. package/dist/knowledge/lint.d.ts +1 -1
  269. package/dist/knowledge/lint.d.ts.map +1 -1
  270. package/dist/knowledge/lint.js +2 -2
  271. package/dist/knowledge/lint.js.map +1 -1
  272. package/dist/knowledge/primitives/code-structure.d.ts.map +1 -1
  273. package/dist/knowledge/primitives/code-structure.js +29 -12
  274. package/dist/knowledge/primitives/code-structure.js.map +1 -1
  275. package/dist/knowledge/query.d.ts.map +1 -1
  276. package/dist/knowledge/query.js.map +1 -1
  277. package/dist/knowledge/store.d.ts.map +1 -1
  278. package/dist/llm/adapter.d.ts +3 -3
  279. package/dist/llm/adapter.d.ts.map +1 -1
  280. package/dist/llm/adapter.js +3 -3
  281. package/dist/llm/adapter.js.map +1 -1
  282. package/dist/monitoring/analyzer-base.d.ts +50 -0
  283. package/dist/monitoring/analyzer-base.d.ts.map +1 -0
  284. package/dist/monitoring/analyzer-base.js +146 -0
  285. package/dist/monitoring/analyzer-base.js.map +1 -0
  286. package/dist/monitoring/constraint-doctor.d.ts +3 -46
  287. package/dist/monitoring/constraint-doctor.d.ts.map +1 -1
  288. package/dist/monitoring/constraint-doctor.js +11 -113
  289. package/dist/monitoring/constraint-doctor.js.map +1 -1
  290. package/dist/monitoring/constraint-evolver.d.ts +9 -63
  291. package/dist/monitoring/constraint-evolver.d.ts.map +1 -1
  292. package/dist/monitoring/constraint-evolver.js +8 -10
  293. package/dist/monitoring/constraint-evolver.js.map +1 -1
  294. package/dist/monitoring/diagnosis-rules.d.ts +18 -0
  295. package/dist/monitoring/diagnosis-rules.d.ts.map +1 -0
  296. package/dist/monitoring/diagnosis-rules.js +119 -0
  297. package/dist/monitoring/diagnosis-rules.js.map +1 -0
  298. package/dist/monitoring/knowledge-doctor.d.ts.map +1 -1
  299. package/dist/monitoring/knowledge-doctor.js.map +1 -1
  300. package/dist/monitoring/performance-analyzer.d.ts +0 -12
  301. package/dist/monitoring/performance-analyzer.d.ts.map +1 -1
  302. package/dist/monitoring/performance-analyzer.js +13 -93
  303. package/dist/monitoring/performance-analyzer.js.map +1 -1
  304. package/dist/monitoring/performance-collector.d.ts +0 -8
  305. package/dist/monitoring/performance-collector.d.ts.map +1 -1
  306. package/dist/monitoring/performance-collector.js +0 -21
  307. package/dist/monitoring/performance-collector.js.map +1 -1
  308. package/dist/monitoring/trace-analyzer.d.ts +0 -8
  309. package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
  310. package/dist/monitoring/trace-analyzer.js +9 -91
  311. package/dist/monitoring/trace-analyzer.js.map +1 -1
  312. package/dist/presets/index.d.ts +1 -1
  313. package/dist/presets/index.d.ts.map +1 -1
  314. package/dist/presets/index.js +1 -4
  315. package/dist/presets/index.js.map +1 -1
  316. package/dist/presets/standard.d.ts +0 -9
  317. package/dist/presets/standard.d.ts.map +1 -1
  318. package/dist/presets/standard.js +1 -16
  319. package/dist/presets/standard.js.map +1 -1
  320. package/dist/safety/output-guardrail.d.ts +0 -1
  321. package/dist/safety/output-guardrail.d.ts.map +1 -1
  322. package/dist/safety/output-guardrail.js +0 -3
  323. package/dist/safety/output-guardrail.js.map +1 -1
  324. package/dist/tools/registry.d.ts.map +1 -1
  325. package/dist/types/constraint.d.ts +5 -59
  326. package/dist/types/constraint.d.ts.map +1 -1
  327. package/dist/types/constraint.js +1 -39
  328. package/dist/types/constraint.js.map +1 -1
  329. package/dist/types/failure.d.ts +89 -0
  330. package/dist/types/failure.d.ts.map +1 -0
  331. package/dist/types/failure.js +121 -0
  332. package/dist/types/failure.js.map +1 -0
  333. package/dist/types/index.d.ts +2 -3
  334. package/dist/types/index.d.ts.map +1 -1
  335. package/dist/types/index.js +7 -6
  336. package/dist/types/index.js.map +1 -1
  337. package/dist/types/monitoring-types.d.ts +114 -0
  338. package/dist/types/monitoring-types.d.ts.map +1 -0
  339. package/dist/types/monitoring-types.js +10 -0
  340. package/dist/types/monitoring-types.js.map +1 -0
  341. package/dist/utils/detect-source-roots.js.map +1 -1
  342. package/dist/utils/file-walk.d.ts +33 -0
  343. package/dist/utils/file-walk.d.ts.map +1 -0
  344. package/dist/utils/file-walk.js +89 -0
  345. package/dist/utils/file-walk.js.map +1 -0
  346. package/dist/verification/rules-based.d.ts.map +1 -1
  347. package/dist/verification/rules-based.js.map +1 -1
  348. package/package.json +3 -7
  349. package/src/__tests__/checker-extra.test.ts +0 -30
  350. package/src/__tests__/checker.test.ts +0 -33
  351. package/src/__tests__/checkpoint.test.ts +46 -46
  352. package/src/__tests__/constraint-evolver.test.ts +22 -21
  353. package/src/__tests__/doctor-evolver.test.ts +3 -3
  354. package/src/__tests__/iron-laws.test.ts +0 -27
  355. package/src/__tests__/presets.test.ts +1 -40
  356. package/src/architecture/constraint-engine.ts +0 -5
  357. package/src/architecture/cross-project-checker.ts +6 -24
  358. package/src/cli/commands/__tests__/check.test.ts +3 -1
  359. package/src/cli/commands/__tests__/sync-docs.test.ts +77 -0
  360. package/src/cli/commands/__tests__/validate.test.ts +5 -0
  361. package/src/cli/commands/analyze-sessions.ts +31 -185
  362. package/src/cli/commands/check.ts +26 -225
  363. package/src/cli/commands/doc-freshness-check.ts +14 -25
  364. package/src/cli/commands/flow.ts +5 -3
  365. package/src/cli/commands/init.ts +3 -3
  366. package/src/cli/commands/posteval-plan.ts +0 -1
  367. package/src/cli/commands/release.ts +1 -1
  368. package/src/cli/commands/report.ts +2 -0
  369. package/src/cli/commands/spec-baseline-check.ts +12 -19
  370. package/src/cli/commands/sync-docs/agents-syncer.ts +280 -0
  371. package/src/cli/commands/sync-docs/capabilities-syncer.ts +229 -0
  372. package/src/cli/commands/sync-docs/context-syncer.ts +108 -0
  373. package/src/cli/commands/sync-docs/index.ts +355 -0
  374. package/src/cli/commands/sync-docs/preserve-block.ts +59 -0
  375. package/src/cli/commands/sync-docs/project-reader.ts +163 -0
  376. package/src/cli/commands/update-user-model.ts +23 -87
  377. package/src/cli/commands/validate.ts +6 -40
  378. package/src/cli/session-mining/corrections.ts +56 -0
  379. package/src/cli/session-mining/index.ts +13 -0
  380. package/src/cli/session-mining/text.ts +117 -0
  381. package/src/cli/session-mining/transcript.ts +107 -0
  382. package/src/constraints/__tests__/lifecycle-runner.test.ts +1 -1
  383. package/src/constraints/lifecycle-runner.ts +1 -1
  384. package/src/context/compaction.ts +2 -3
  385. package/src/context/knowledge-injector.ts +1 -1
  386. package/src/context/tool-output-budget.ts +1 -1
  387. package/src/core/constraints/capabilities-parser.ts +70 -0
  388. package/src/core/constraints/checker.ts +170 -779
  389. package/src/core/constraints/checkers/always-pass.ts +22 -0
  390. package/src/core/constraints/checkers/capability-sync.ts +71 -0
  391. package/src/core/constraints/checkers/context-doc-sync.ts +36 -0
  392. package/src/core/constraints/checkers/docs-freshness.ts +116 -0
  393. package/src/core/constraints/checkers/guideline-flags.ts +30 -0
  394. package/src/core/constraints/checkers/index.ts +114 -0
  395. package/src/core/constraints/checkers/iron-flags.ts +62 -0
  396. package/src/core/constraints/checkers/no-any-type.ts +42 -0
  397. package/src/core/constraints/checkers/no-bypass-checkpoint.ts +40 -0
  398. package/src/core/constraints/checkers/no-excuse-patterns.ts +24 -0
  399. package/src/core/constraints/checkers/no-fuzzy-completion-claim.ts +33 -0
  400. package/src/core/constraints/checkers/no-performative-agreement.ts +22 -0
  401. package/src/core/constraints/checkers/no-simplification-without-approval.ts +29 -0
  402. package/src/core/constraints/checkers/no-test-simplification.ts +28 -0
  403. package/src/core/constraints/checkers/test-coverage.ts +35 -0
  404. package/src/core/constraints/checkers/types.ts +54 -0
  405. package/src/core/constraints/checkers/yagni.ts +65 -0
  406. package/src/core/constraints/context-builder.ts +262 -0
  407. package/src/core/constraints/definitions/guidelines.ts +668 -0
  408. package/src/core/constraints/definitions/iron-laws.ts +333 -0
  409. package/src/core/constraints/definitions/tips.ts +63 -0
  410. package/src/core/constraints/definitions.ts +9 -1086
  411. package/src/core/constraints/doc-freshness/runner.ts +2 -3
  412. package/src/core/constraints/index.ts +1 -27
  413. package/src/core/constraints/interceptor.ts +0 -2
  414. package/src/core/index.ts +1 -1
  415. package/src/core/project-config-loader.ts +49 -13
  416. package/src/core/validators/check-handlers/command.ts +58 -0
  417. package/src/core/validators/check-handlers/file.ts +104 -0
  418. package/src/core/validators/check-handlers/http.ts +88 -0
  419. package/src/core/validators/check-handlers/output.ts +165 -0
  420. package/src/core/validators/checkpoint.ts +32 -407
  421. package/src/core/validators/cso.ts +1 -1
  422. package/src/core/validators/passes-gate.ts +2 -2
  423. package/src/dashboard/stats.ts +1 -1
  424. package/src/dashboard/types.ts +1 -1
  425. package/src/evolution/__tests__/auto-evolve.test.ts +1 -2
  426. package/src/evolution/auto-evolve.ts +3 -3
  427. package/src/failure/types.ts +5 -161
  428. package/src/gates/contract.ts +0 -1
  429. package/src/gates/index.ts +0 -2
  430. package/src/gates/performance.ts +1 -1
  431. package/src/gates/security.ts +1 -3
  432. package/src/hooks/bootstrap.ts +6 -16
  433. package/src/index.ts +4 -1
  434. package/src/knowledge/__tests__/lifecycle.test.ts +4 -1
  435. package/src/knowledge/audit.ts +1 -1
  436. package/src/knowledge/doctor.ts +0 -1
  437. package/src/knowledge/import.ts +2 -2
  438. package/src/knowledge/index-generator.ts +0 -1
  439. package/src/knowledge/ingest.ts +1 -2
  440. package/src/knowledge/lint.ts +2 -2
  441. package/src/knowledge/primitives/__tests__/code-structure-degrade.test.ts +24 -0
  442. package/src/knowledge/primitives/code-structure.ts +36 -12
  443. package/src/knowledge/query.ts +0 -3
  444. package/src/knowledge/store.ts +1 -1
  445. package/src/llm/adapter.ts +3 -3
  446. package/src/monitoring/analyzer-base.ts +112 -0
  447. package/src/monitoring/constraint-doctor.ts +14 -175
  448. package/src/monitoring/constraint-evolver.ts +20 -92
  449. package/src/monitoring/diagnosis-rules.ts +132 -0
  450. package/src/monitoring/knowledge-doctor.ts +0 -1
  451. package/src/monitoring/performance-analyzer.ts +22 -72
  452. package/src/monitoring/performance-collector.ts +0 -22
  453. package/src/monitoring/trace-analyzer.ts +17 -73
  454. package/src/presets/__tests__/standard.test.ts +2 -17
  455. package/src/presets/index.ts +1 -3
  456. package/src/presets/standard.ts +1 -26
  457. package/src/safety/output-guardrail.ts +0 -4
  458. package/src/tools/registry.ts +1 -1
  459. package/src/types/__tests__/types.test.ts +1 -33
  460. package/src/types/constraint.ts +6 -75
  461. package/src/types/failure.ts +165 -0
  462. package/src/types/index.ts +7 -5
  463. package/src/types/monitoring-types.ts +150 -0
  464. package/src/utils/detect-source-roots.ts +1 -1
  465. package/src/utils/file-walk.ts +78 -0
  466. package/src/verification/rules-based.ts +0 -1
  467. package/bin/harness-knowledge-capture.js +0 -99
  468. package/bin/harness-knowledge-check.js +0 -164
  469. package/bin/harness-knowledge-track.js +0 -118
  470. package/dist/cli/commands/sync-docs.d.ts.map +0 -1
  471. package/dist/cli/commands/sync-docs.js +0 -1074
  472. package/dist/cli/commands/sync-docs.js.map +0 -1
  473. package/dist/constraints/index.d.ts +0 -4
  474. package/dist/constraints/index.d.ts.map +0 -1
  475. package/dist/constraints/index.js +0 -20
  476. package/dist/constraints/index.js.map +0 -1
  477. package/dist/core/constraints/doc-freshness/auto-fix.d.ts +0 -23
  478. package/dist/core/constraints/doc-freshness/auto-fix.d.ts.map +0 -1
  479. package/dist/core/constraints/doc-freshness/auto-fix.js +0 -59
  480. package/dist/core/constraints/doc-freshness/auto-fix.js.map +0 -1
  481. package/dist/core/constraints/prompt-injection.d.ts +0 -16
  482. package/dist/core/constraints/prompt-injection.d.ts.map +0 -1
  483. package/dist/core/constraints/prompt-injection.js +0 -69
  484. package/dist/core/constraints/prompt-injection.js.map +0 -1
  485. package/dist/core/spec/index.d.ts +0 -7
  486. package/dist/core/spec/index.d.ts.map +0 -1
  487. package/dist/core/spec/index.js.map +0 -1
  488. package/dist/governance/executor.d.ts +0 -45
  489. package/dist/governance/executor.d.ts.map +0 -1
  490. package/dist/governance/executor.js +0 -243
  491. package/dist/governance/executor.js.map +0 -1
  492. package/dist/governance/index.d.ts +0 -9
  493. package/dist/governance/index.d.ts.map +0 -1
  494. package/dist/governance/index.js +0 -13
  495. package/dist/governance/index.js.map +0 -1
  496. package/dist/governance/types.d.ts +0 -46
  497. package/dist/governance/types.d.ts.map +0 -1
  498. package/dist/governance/types.js +0 -9
  499. package/dist/governance/types.js.map +0 -1
  500. package/dist/tools/definitions/definitions/core/code/fingerprint.sh +0 -273
  501. package/dist/tools/definitions/definitions/core/code/fingerprint.yml +0 -72
  502. package/dist/tools/definitions/definitions/core/code/parse.yml +0 -68
  503. package/dist/tools/definitions/definitions/core/code/register-language.sh +0 -475
  504. package/dist/tools/definitions/definitions/core/code/register-language.yml +0 -74
  505. package/dist/tools/definitions/definitions/core/docker/build.yml +0 -73
  506. package/dist/tools/definitions/definitions/core/docker/run.yml +0 -81
  507. package/dist/tools/definitions/definitions/core/file/copy.yml +0 -88
  508. package/dist/tools/definitions/definitions/core/file/read.yml +0 -69
  509. package/dist/tools/definitions/definitions/core/file/write.yml +0 -75
  510. package/dist/tools/definitions/definitions/core/git/branch.yml +0 -61
  511. package/dist/tools/definitions/definitions/core/git/cleanup-worktree.yml +0 -50
  512. package/dist/tools/definitions/definitions/core/git/clone.yml +0 -69
  513. package/dist/tools/definitions/definitions/core/git/commit.yml +0 -65
  514. package/dist/tools/definitions/definitions/core/git/push.yml +0 -79
  515. package/dist/tools/definitions/definitions/core/git/worktree.yml +0 -96
  516. package/dist/tools/definitions/definitions/core/notification/notify.sh +0 -152
  517. package/dist/tools/definitions/definitions/core/notification/notify.yml +0 -60
  518. package/dist/tools/definitions/definitions/core/npm/build.yml +0 -75
  519. package/dist/tools/definitions/definitions/core/npm/install.yml +0 -58
  520. package/dist/tools/definitions/definitions/core/npm/test.yml +0 -75
  521. package/dist/tools/definitions/definitions/core/validation/check-reuse.yml +0 -170
  522. package/dist/tools/definitions/definitions/core/validation/validate-handlers.yml +0 -118
  523. package/dist/tools/definitions/definitions/core/validation/validate-readme-stats.yml +0 -155
  524. package/dist/tools/definitions/definitions/core/validation/validate-yaml-syntax.yml +0 -134
  525. package/dist/tools/definitions/definitions/ext/browser/browser-automate.sh +0 -255
  526. package/dist/tools/definitions/definitions/ext/browser/browser-automate.yml +0 -166
  527. package/dist/tools/definitions/definitions/ext/browser/browser-close.sh +0 -104
  528. package/dist/tools/definitions/definitions/ext/browser/browser-close.yml +0 -55
  529. package/dist/tools/definitions/definitions/ext/browser/browser-mcp-debug.sh +0 -682
  530. package/dist/tools/definitions/definitions/ext/browser/browser-mcp-debug.yml +0 -167
  531. package/dist/tools/definitions/definitions/ext/browser/browser-start.sh +0 -101
  532. package/dist/tools/definitions/definitions/ext/browser/browser-start.yml +0 -62
  533. package/dist/tools/definitions/definitions/registry.json +0 -795
  534. package/dist/tools/definitions/definitions/std/README.md +0 -350
  535. package/dist/tools/definitions/definitions/std/analysis/analyze-codebase.yml +0 -72
  536. package/dist/tools/definitions/definitions/std/analysis/analyze-diff.yml +0 -182
  537. package/dist/tools/definitions/definitions/std/analysis/analyze-git-diff.yml +0 -70
  538. package/dist/tools/definitions/definitions/std/analysis/analyze-impact.yml +0 -78
  539. package/dist/tools/definitions/definitions/std/analysis/analyze-requirements.yml +0 -105
  540. package/dist/tools/definitions/definitions/std/analysis/brainstorm-options.yml +0 -106
  541. package/dist/tools/definitions/definitions/std/analysis/build-graph.yml +0 -154
  542. package/dist/tools/definitions/definitions/std/analysis/clarify-requirements.yml +0 -90
  543. package/dist/tools/definitions/definitions/std/analysis/detect-context.yml +0 -109
  544. package/dist/tools/definitions/definitions/std/analysis/detect-layers.yml +0 -125
  545. package/dist/tools/definitions/definitions/std/analysis/generate-tour.yml +0 -102
  546. package/dist/tools/definitions/definitions/std/analysis/search-enhance.yml +0 -105
  547. package/dist/tools/definitions/definitions/std/backlog/add.yml +0 -51
  548. package/dist/tools/definitions/definitions/std/backlog/decide.yml +0 -39
  549. package/dist/tools/definitions/definitions/std/backlog/github-sync.yml +0 -161
  550. package/dist/tools/definitions/definitions/std/backlog/list.yml +0 -53
  551. package/dist/tools/definitions/definitions/std/backlog/load.yml +0 -46
  552. package/dist/tools/definitions/definitions/std/backlog/resolve.yml +0 -37
  553. package/dist/tools/definitions/definitions/std/backlog/update.yml +0 -42
  554. package/dist/tools/definitions/definitions/std/bugfix/diagnose.yml +0 -68
  555. package/dist/tools/definitions/definitions/std/bugfix/fix.yml +0 -66
  556. package/dist/tools/definitions/definitions/std/bugfix/verify.yml +0 -69
  557. package/dist/tools/definitions/definitions/std/constraint/check-decomposition.yml +0 -103
  558. package/dist/tools/definitions/definitions/std/constraint/check-feature-list.yml +0 -77
  559. package/dist/tools/definitions/definitions/std/constraint/check-progress.yml +0 -97
  560. package/dist/tools/definitions/definitions/std/constraint/generate-report.yml +0 -147
  561. package/dist/tools/definitions/definitions/std/deploy/commit-push.yml +0 -33
  562. package/dist/tools/definitions/definitions/std/deploy/deploy-backend.yml +0 -37
  563. package/dist/tools/definitions/definitions/std/deploy/deploy-frontend.yml +0 -37
  564. package/dist/tools/definitions/definitions/std/deploy/rollback.yml +0 -148
  565. package/dist/tools/definitions/definitions/std/design/analyze-architecture-impact.yml +0 -113
  566. package/dist/tools/definitions/definitions/std/design/design-api.yml +0 -55
  567. package/dist/tools/definitions/definitions/std/design/design-architecture.yml +0 -97
  568. package/dist/tools/definitions/definitions/std/design/design-db.yml +0 -81
  569. package/dist/tools/definitions/definitions/std/design/generate-spec.yml +0 -182
  570. package/dist/tools/definitions/definitions/std/development/develop-api.yml +0 -85
  571. package/dist/tools/definitions/definitions/std/development/develop-backend.yml +0 -88
  572. package/dist/tools/definitions/definitions/std/development/develop-frontend.yml +0 -87
  573. package/dist/tools/definitions/definitions/std/development/develop-shared-types.yml +0 -74
  574. package/dist/tools/definitions/definitions/std/development/develop-task.yml +0 -122
  575. package/dist/tools/definitions/definitions/std/development/develop-tests.yml +0 -76
  576. package/dist/tools/definitions/definitions/std/development/execute-batch.yml +0 -152
  577. package/dist/tools/definitions/definitions/std/development/fix-issues.yml +0 -100
  578. package/dist/tools/definitions/definitions/std/development/implement-task.yml +0 -124
  579. package/dist/tools/definitions/definitions/std/development/review-fix-cycle.yml +0 -232
  580. package/dist/tools/definitions/definitions/std/evolution/implement.yml +0 -125
  581. package/dist/tools/definitions/definitions/std/evolution/prioritize.yml +0 -112
  582. package/dist/tools/definitions/definitions/std/evolution/report-gap.yml +0 -166
  583. package/dist/tools/definitions/definitions/std/file/read.yml +0 -21
  584. package/dist/tools/definitions/definitions/std/governance/aggregate-opinions.sh +0 -201
  585. package/dist/tools/definitions/definitions/std/governance/aggregate-opinions.yml +0 -79
  586. package/dist/tools/definitions/definitions/std/governance/audit-task.yml +0 -178
  587. package/dist/tools/definitions/definitions/std/governance/cast-vote.yml +0 -129
  588. package/dist/tools/definitions/definitions/std/governance/collect-issues.yml +0 -16
  589. package/dist/tools/definitions/definitions/std/governance/create-signed-document.yml +0 -23
  590. package/dist/tools/definitions/definitions/std/governance/create-voting-session.yml +0 -101
  591. package/dist/tools/definitions/definitions/std/governance/define-stance.sh +0 -243
  592. package/dist/tools/definitions/definitions/std/governance/define-stance.yml +0 -82
  593. package/dist/tools/definitions/definitions/std/governance/generate-review-report.yml +0 -23
  594. package/dist/tools/definitions/definitions/std/governance/impeach.yml +0 -179
  595. package/dist/tools/definitions/definitions/std/governance/multi-stance-review.yml +0 -154
  596. package/dist/tools/definitions/definitions/std/governance/prepare-artifact.yml +0 -20
  597. package/dist/tools/definitions/definitions/std/governance/review-spec-approval.yml +0 -262
  598. package/dist/tools/definitions/definitions/std/governance/rollback.yml +0 -186
  599. package/dist/tools/definitions/definitions/std/governance/stance-review.yml +0 -149
  600. package/dist/tools/definitions/definitions/std/governance/track-effect.yml +0 -199
  601. package/dist/tools/definitions/definitions/std/governance/vote-tally.yml +0 -144
  602. package/dist/tools/definitions/definitions/std/patch/execute.yml +0 -51
  603. package/dist/tools/definitions/definitions/std/planning/generate-tasks.yml +0 -36
  604. package/dist/tools/definitions/definitions/std/planning/load-tasks.yml +0 -44
  605. package/dist/tools/definitions/definitions/std/planning/split-batch.yml +0 -481
  606. package/dist/tools/definitions/definitions/std/planning/split-tasks.yml +0 -359
  607. package/dist/tools/definitions/definitions/std/planning/update-tasks.yml +0 -51
  608. package/dist/tools/definitions/definitions/std/planning/validate-tasks.yml +0 -46
  609. package/dist/tools/definitions/definitions/std/project/decide-next-workflow.yml +0 -38
  610. package/dist/tools/definitions/definitions/std/project/load-state.yml +0 -31
  611. package/dist/tools/definitions/definitions/std/project/save-state.yml +0 -32
  612. package/dist/tools/definitions/definitions/std/quality/check-quality.yml +0 -241
  613. package/dist/tools/definitions/definitions/std/quality/debug-systematic.yml +0 -163
  614. package/dist/tools/definitions/definitions/std/quality/handle-feedback.yml +0 -108
  615. package/dist/tools/definitions/definitions/std/quality/review-code.yml +0 -128
  616. package/dist/tools/definitions/definitions/std/quality/review-spec.yml +0 -140
  617. package/dist/tools/definitions/definitions/std/quality/review-task.yml +0 -190
  618. package/dist/tools/definitions/definitions/std/quality/run-tests.yml +0 -80
  619. package/dist/tools/definitions/definitions/std/quick/analyze.yml +0 -56
  620. package/dist/tools/definitions/definitions/std/quick/implement.yml +0 -67
  621. package/dist/tools/definitions/definitions/std/quick/verify.yml +0 -71
  622. package/dist/tools/definitions/definitions/std/verification/verify_completion.yml +0 -113
  623. package/dist/tools/definitions/definitions/std/verification/wait-condition.yml +0 -107
  624. package/dist/types/iron-law.d.ts +0 -25
  625. package/dist/types/iron-law.d.ts.map +0 -1
  626. package/dist/types/iron-law.js +0 -16
  627. package/dist/types/iron-law.js.map +0 -1
  628. package/src/cli/commands/sync-docs.ts +0 -1175
  629. package/src/constraints/index.ts +0 -3
  630. package/src/core/constraints/__tests__/prompt-injection.test.ts +0 -89
  631. package/src/core/constraints/doc-freshness/auto-fix.ts +0 -69
  632. package/src/core/constraints/prompt-injection.ts +0 -73
  633. package/src/core/spec/index.ts +0 -7
  634. package/src/governance/CONTEXT.md +0 -22
  635. package/src/governance/__tests__/executor.test.ts +0 -249
  636. package/src/governance/executor.ts +0 -229
  637. package/src/governance/index.ts +0 -13
  638. package/src/governance/types.ts +0 -53
  639. package/src/tools/core/package.json +0 -7
  640. package/src/tools/core/pnpm-lock.yaml +0 -232
  641. package/src/types/iron-law.ts +0 -50
@@ -1,19 +1,20 @@
1
1
  /**
2
2
  * harness check 命令
3
- *
3
+ *
4
4
  * 检查约束是否满足(三层:Iron Laws / Guidelines / Tips)
5
+ * 工单 23:触发条件与证据检测迁至 core/constraints/context-builder;--preset 接入 applyPreset
5
6
  */
6
7
 
7
8
  import chalk from 'chalk';
8
9
  import * as fs from 'fs';
9
10
  import * as path from 'path';
10
- import { exec, execSync } from 'child_process';
11
- import { execAsync } from '../../utils/exec';
12
11
  import { constraintChecker } from '../../core/constraints/checker';
13
- import { getAllConstraints, IRON_LAWS, GUIDELINES, TIPS } from '../../core/constraints/definitions';
12
+ import { getTraceCollector } from '../../monitoring/traces';
13
+ import { IRON_LAWS, GUIDELINES, TIPS } from '../../core/constraints/definitions';
14
14
  import { ProjectConfigLoader } from '../../core/project-config-loader';
15
- import { detectSourceRoots } from '../../utils/detect-source-roots';
16
- import type { ConstraintTrigger, ConstraintContext, ConstraintResult } from '../../types/constraint';
15
+ import { buildConstraintContext } from '../../core/constraints/context-builder';
16
+ import { applyPreset } from '../../presets';
17
+ import type { ConstraintTrigger } from '../../types/constraint';
17
18
 
18
19
  export interface CheckOptions {
19
20
  /** 预设名称 */
@@ -26,61 +27,6 @@ export interface CheckOptions {
26
27
  projectPath?: string;
27
28
  }
28
29
 
29
- /**
30
- * 从 git diff 获取变更的文件
31
- */
32
- async function getChangedFiles(staged: boolean): Promise<string[]> {
33
- try {
34
- const command = staged ? 'git diff --cached --name-only' : 'git diff --name-only';
35
- const { stdout } = await execAsync(command);
36
- return stdout.trim().split('\n').filter(Boolean);
37
- } catch {
38
- return [];
39
- }
40
- }
41
-
42
- /**
43
- * 检查文件所在目录是否在 git HEAD 中不存在(即新目录)
44
- */
45
- function isNewDirectory(projectPath: string, filePath: string): boolean {
46
- const dir = path.dirname(filePath);
47
- try {
48
- const output = execSync(`git ls-tree HEAD -- "${dir}"`, { cwd: projectPath, stdio: 'pipe', encoding: 'utf-8' });
49
- return String(output).trim().length === 0; // empty output = directory doesn't exist in HEAD
50
- } catch {
51
- return true; // command failed = assume new
52
- }
53
- }
54
-
55
- /**
56
- * 检测触发条件
57
- */
58
- function detectTrigger(changedFiles: string[], options: CheckOptions): ConstraintTrigger {
59
- if (options.trigger) return options.trigger;
60
-
61
- // 根据变更文件推断触发条件
62
- // 注意:不自动推断 code_implementation——那是 caller 的语义判断。
63
- // pre-commit 无法区分"模板编辑"和"逻辑实现",保守使用 file_modification。
64
- const hasTestChange = changedFiles.some(f =>
65
- f.includes('.test.') || f.includes('.spec.') || f.includes('__tests__')
66
- );
67
- const sourceRoots = detectSourceRoots(options.projectPath || process.cwd());
68
- const hasModuleChange = changedFiles.some(f =>
69
- sourceRoots.some(root => f.startsWith(root + '/') || f.startsWith(root + '\\')) && !f.includes('__tests__')
70
- );
71
- const projectPath = options.projectPath || process.cwd();
72
- const hasModuleCreation = changedFiles.some(f =>
73
- sourceRoots.some(root => f.startsWith(root + '/') || f.startsWith(root + '\\')) &&
74
- isNewDirectory(projectPath, f)
75
- );
76
-
77
- if (hasTestChange && !hasModuleChange) return 'test_creation';
78
- if (hasModuleCreation) return 'module_creation';
79
- if (hasModuleChange) return 'module_modification';
80
-
81
- return 'file_modification';
82
- }
83
-
84
30
  /**
85
31
  * 执行约束检查
86
32
  */
@@ -93,6 +39,7 @@ export async function check(options: CheckOptions): Promise<void> {
93
39
  const projectPath = options.projectPath || process.cwd();
94
40
  const configLoader = new ProjectConfigLoader(projectPath);
95
41
  configLoader.load();
42
+ constraintChecker.setTraceRecorder(getTraceCollector());
96
43
 
97
44
  if (configLoader.hasCustomConfig()) {
98
45
  const merged = configLoader.mergeConstraints();
@@ -103,32 +50,30 @@ export async function check(options: CheckOptions): Promise<void> {
103
50
  }
104
51
  }
105
52
 
106
- // 获取变更文件
107
- const changedFiles = await getChangedFiles(options.staged);
53
+ // 构建上下文(工单 23:触发条件与证据检测收敛至 core/constraints/context-builder)
54
+ const context = await buildConstraintContext({
55
+ projectPath: options.projectPath,
56
+ staged: options.staged,
57
+ trigger: options.trigger,
58
+ });
59
+ const changedFiles = context.changedFiles ?? [];
108
60
  if (changedFiles.length > 0) {
109
61
  console.log(chalk.gray(`变更文件: ${changedFiles.length} 个`));
110
62
  }
63
+ console.log(chalk.gray(`触发条件: ${context.operation}`));
111
64
 
112
- // 检测触发条件
113
- const trigger = detectTrigger(changedFiles, options);
114
- console.log(chalk.gray(`触发条件: ${trigger}`));
115
-
116
- // 构建上下文
117
- const context: ConstraintContext = {
118
- operation: trigger,
119
- projectPath: options.projectPath || process.cwd(),
120
- changedFiles,
121
- hasTest: changedFiles.some(f => f.includes('.test.') || f.includes('.spec.')),
122
- hasFailingTest: await detectFailingTest(projectPath),
123
- hasRootCauseInvestigation: detectRootCauseInvestigation(projectPath),
124
- hasVerificationEvidence: await detectVerificationEvidence(projectPath),
125
- hasReuseCheck: detectReuseCheck(projectPath),
126
- hasRequirement: detectRequirement(projectPath),
127
- hasWorktree: detectWorktree(projectPath),
128
- };
65
+ // 预设(工单 23:--preset 真正生效;项目自定义配置优先于预设)
66
+ let presetConfig;
67
+ if (!configLoader.hasCustomConfig()) {
68
+ try {
69
+ presetConfig = applyPreset(options.preset || 'standard');
70
+ } catch {
71
+ presetConfig = undefined; // 未知预设名回退内置全集
72
+ }
73
+ }
129
74
 
130
75
  // 执行三层检查
131
- const result = await constraintChecker.checkConstraints(context);
76
+ const result = await constraintChecker.checkConstraints(context, presetConfig);
132
77
 
133
78
  // 输出结果
134
79
  console.log();
@@ -191,150 +136,6 @@ export async function check(options: CheckOptions): Promise<void> {
191
136
  }
192
137
  }
193
138
 
194
- /**
195
- * 检测是否有失败的测试记录
196
- * 扫描 .harness/traces/ 中最近的 trace 记录
197
- */
198
- async function detectFailingTest(projectPath: string): Promise<boolean> {
199
- try {
200
- const tracesDir = path.join(projectPath, '.harness', 'traces');
201
- if (!fs.existsSync(tracesDir)) return false;
202
-
203
- const traceFile = path.join(tracesDir, 'execution.log');
204
- if (!fs.existsSync(traceFile)) return false;
205
-
206
- const content = fs.readFileSync(traceFile, 'utf-8');
207
- const lines = content.trim().split('\n').filter(Boolean);
208
- if (lines.length === 0) return false;
209
-
210
- // 检查最近 20 条记录是否有 fail
211
- const recent = lines.slice(-20);
212
- return recent.some(line => {
213
- try {
214
- const trace = JSON.parse(line);
215
- return trace.result === 'fail';
216
- } catch {
217
- return false;
218
- }
219
- });
220
- } catch {
221
- return false;
222
- }
223
- }
224
-
225
- /**
226
- * 检测是否有根因分析文档
227
- * 检查 ROOT_CAUSE.md、.harness/diagnoses/、或 git commit 消息
228
- */
229
- function detectRootCauseInvestigation(projectPath: string): boolean {
230
- // 检查 ROOT_CAUSE.md
231
- if (fs.existsSync(path.join(projectPath, 'ROOT_CAUSE.md'))) return true;
232
-
233
- // 检查 .harness/diagnoses/ 目录
234
- const diagnosesDir = path.join(projectPath, '.harness', 'diagnoses');
235
- if (fs.existsSync(diagnosesDir)) {
236
- try {
237
- const files = fs.readdirSync(diagnosesDir);
238
- if (files.length > 0) return true;
239
- } catch {
240
- // ignore
241
- }
242
- }
243
-
244
- return false;
245
- }
246
-
247
- /**
248
- * 检测是否有验证证据
249
- * 检查 .harness/traces/ 中最近的成功验证记录
250
- */
251
- async function detectVerificationEvidence(projectPath: string): Promise<boolean> {
252
- try {
253
- const tracesDir = path.join(projectPath, '.harness', 'traces');
254
- if (!fs.existsSync(tracesDir)) return false;
255
-
256
- const traceFile = path.join(tracesDir, 'execution.log');
257
- if (!fs.existsSync(traceFile)) return false;
258
-
259
- const content = fs.readFileSync(traceFile, 'utf-8');
260
- const lines = content.trim().split('\n').filter(Boolean);
261
- if (lines.length === 0) return false;
262
-
263
- // 检查最近 10 条记录是否有 pass
264
- const recent = lines.slice(-10);
265
- return recent.some(line => {
266
- try {
267
- const trace = JSON.parse(line);
268
- return trace.result === 'pass';
269
- } catch {
270
- return false;
271
- }
272
- });
273
- } catch {
274
- return false;
275
- }
276
- }
277
-
278
- /**
279
- * 检测是否有复用检查
280
- * 检查 .harness/reuse/ 目录或相关文档
281
- */
282
- /**
283
- * 检测是否有需求来源
284
- * 检查 CLAUDE.md、README.md、specs/、docs/specs/ 等
285
- */
286
- function detectRequirement(projectPath: string): boolean {
287
- // Check for CLAUDE.md with HARNESS_CONSTRAINTS section
288
- const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
289
- if (fs.existsSync(claudeMdPath)) {
290
- try {
291
- const content = fs.readFileSync(claudeMdPath, 'utf-8');
292
- if (content.includes('HARNESS_CONSTRAINTS')) {
293
- return true;
294
- }
295
- } catch {
296
- // ignore
297
- }
298
- }
299
-
300
- const indicators = [
301
- 'README.md',
302
- 'specs',
303
- 'docs/specs',
304
- '.specs',
305
- ];
306
- return indicators.some(f => fs.existsSync(path.join(projectPath, f)));
307
- }
308
-
309
- /**
310
- * 检测是否在 git worktree 中
311
- */
312
- function detectWorktree(projectPath: string): boolean {
313
- try {
314
- const gitDir = path.join(projectPath, '.git');
315
- if (fs.existsSync(gitDir)) {
316
- const content = fs.readFileSync(gitDir, 'utf-8');
317
- // 实际 worktree 的 .git 是文件(指向主 repo),不是目录
318
- return content.startsWith('gitdir:');
319
- }
320
- } catch { /* ignore */ }
321
- return false;
322
- }
323
-
324
- function detectReuseCheck(projectPath: string): boolean {
325
- const reuseDir = path.join(projectPath, '.harness', 'reuse');
326
- if (fs.existsSync(reuseDir)) {
327
- try {
328
- const files = fs.readdirSync(reuseDir);
329
- if (files.length > 0) return true;
330
- } catch {
331
- // ignore
332
- }
333
- }
334
-
335
- return false;
336
- }
337
-
338
139
  /**
339
140
  * 智能提示:检查是否需要提示用户下一步操作
340
141
  */
@@ -8,6 +8,7 @@
8
8
  import chalk from 'chalk';
9
9
  import * as fs from 'fs';
10
10
  import * as path from 'path';
11
+ import { walkFiles } from '../../utils/file-walk';
11
12
 
12
13
  export interface DocFreshnessCheckOptions {
13
14
  /** 输出 JSON 格式 */
@@ -149,36 +150,24 @@ export function extractClaims(content: string, filePath: string): ClaimResult[]
149
150
  function countGrepMatches(pattern: string, projectPath: string, fileGlob?: string): number {
150
151
  const searchDir = projectPath || process.cwd();
151
152
  let count = 0;
153
+ const regex = new RegExp(pattern, 'gi');
152
154
 
153
- function walkDir(dir: string) {
154
- let entries: fs.Dirent[];
155
+ const files = walkFiles(searchDir, {
156
+ skipDirs: ['node_modules', 'dist'],
157
+ skipHidden: true,
158
+ filter: (name) => !fileGlob || matchGlob(name, fileGlob),
159
+ });
160
+
161
+ for (const fullPath of files) {
155
162
  try {
156
- entries = fs.readdirSync(dir, { withFileTypes: true });
163
+ const content = fs.readFileSync(fullPath, 'utf-8');
164
+ const matches = content.match(regex);
165
+ if (matches) count += matches.length;
157
166
  } catch {
158
- return;
159
- }
160
-
161
- for (const entry of entries) {
162
- if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist') continue;
163
-
164
- const fullPath = path.join(dir, entry.name);
165
- if (entry.isDirectory()) {
166
- walkDir(fullPath);
167
- } else if (entry.isFile()) {
168
- if (fileGlob && !matchGlob(entry.name, fileGlob)) continue;
169
- try {
170
- const content = fs.readFileSync(fullPath, 'utf-8');
171
- const regex = new RegExp(pattern, 'gi');
172
- const matches = content.match(regex);
173
- if (matches) count += matches.length;
174
- } catch {
175
- // skip unreadable files
176
- }
177
- }
167
+ // skip unreadable files
178
168
  }
179
169
  }
180
170
 
181
- walkDir(searchDir);
182
171
  return count;
183
172
  }
184
173
 
@@ -261,7 +250,7 @@ function verifyListClaim(claim: ClaimResult, projectPath: string): ClaimResult {
261
250
  /**
262
251
  * 验证状态声明:检查标记是否与代码/文件一致
263
252
  */
264
- function verifyStatusClaim(claim: ClaimResult, projectPath: string): ClaimResult {
253
+ function verifyStatusClaim(claim: ClaimResult, _projectPath: string): ClaimResult {
265
254
  // 状态声明的验证较复杂,标记为需要人工确认
266
255
  return {
267
256
  ...claim,
@@ -10,8 +10,10 @@ import * as path from 'path';
10
10
  import * as readline from 'readline';
11
11
  import { TraceCollector } from '../../monitoring/traces';
12
12
  import { TraceAnalyzer } from '../../monitoring/trace-analyzer';
13
- import { ConstraintDoctor, Diagnosis } from '../../monitoring/constraint-doctor';
14
- import { ConstraintEvolver, ConstraintProposal } from '../../monitoring/constraint-evolver';
13
+ import { ConstraintDoctor } from '../../monitoring/constraint-doctor';
14
+ import { ConstraintEvolver } from '../../monitoring/constraint-evolver';
15
+ import { getConstraint } from '../../core/constraints/definitions';
16
+ import type { Diagnosis, ConstraintProposal } from '../../types/monitoring-types';
15
17
  import { ConstraintLifecycleRunner, type ExecutionResult } from '../../constraints/lifecycle-runner';
16
18
  import type { TraceAnomaly } from '../../types/trace';
17
19
 
@@ -168,7 +170,7 @@ export async function flow(options: FlowOptions): Promise<void> {
168
170
  console.log(chalk.blue('💡 步骤 3/4: 生成提案'));
169
171
  console.log(chalk.gray('────────────────────────────'));
170
172
 
171
- const evolver = new ConstraintEvolver();
173
+ const evolver = new ConstraintEvolver(undefined, getConstraint);
172
174
  const proposals: ConstraintProposal[] = [];
173
175
 
174
176
  for (const diagnosis of diagnoses) {
@@ -11,7 +11,7 @@ import * as path from 'path';
11
11
  import * as yaml from 'js-yaml';
12
12
  import { createExampleCheckpoint, createExampleResolutions } from './validate';
13
13
  import { detectSourceRoots } from '../../utils/detect-source-roots';
14
- import { IRON_LAWS, GUIDELINES, TIPS, getAllConstraints } from '../../core/constraints/definitions';
14
+ import { IRON_LAWS, GUIDELINES, TIPS } from '../../core/constraints/definitions';
15
15
 
16
16
  export interface InitOptions {
17
17
  /** 项目路径 */
@@ -202,7 +202,7 @@ export async function init(options: InitOptions): Promise<void> {
202
202
 
203
203
  // 创建 GitHub Actions
204
204
  if (options.githubActions !== false) {
205
- await setupGitHubActions(projectPath, options.preset);
205
+ await setupGitHubActions(projectPath);
206
206
  }
207
207
 
208
208
  // 治理相关文件生成
@@ -363,7 +363,7 @@ echo "✅ All checks passed"
363
363
  /**
364
364
  * 设置 GitHub Actions
365
365
  */
366
- async function setupGitHubActions(projectPath: string, preset: string): Promise<void> {
366
+ async function setupGitHubActions(projectPath: string): Promise<void> {
367
367
  const workflowsDir = path.join(projectPath, '.github', 'workflows');
368
368
  const workflowPath = path.join(workflowsDir, 'harness-check.yml');
369
369
 
@@ -13,7 +13,6 @@ export interface PostEvalPlanOptions {
13
13
 
14
14
  const MAX_RETRIES = 3;
15
15
  const RETRY_DELAY_MS = 2000;
16
- const GRACE_PERIOD_MS = parseInt(process.env.POSTEVAL_GRACE_MS || '30000', 10); // 30s total before fallback
17
16
 
18
17
  async function fetchWithRetry(url: string, body: string, retries: number): Promise<Response> {
19
18
  let lastError: any;
@@ -201,7 +201,7 @@ export async function release(options: ReleaseOptions): Promise<void> {
201
201
  const origRegistry = await run('npm config get registry', pkgPath);
202
202
  await run('npm config set registry https://registry.npmjs.org/', pkgPath);
203
203
  console.log(chalk.cyan('📤 Publishing to npm...'));
204
- const pub = await run('npm publish --registry https://registry.npmjs.org/', pkgPath, 180_000);
204
+ await run('npm publish --registry https://registry.npmjs.org/', pkgPath, 180_000);
205
205
  await run(`npm config set registry ${origRegistry.stdout}`, pkgPath);
206
206
  const verify = await run(`npm view ${pkgName} version --registry https://registry.npmjs.org/`, pkgPath);
207
207
  if (verify.stdout.trim() === newVersion) {
@@ -7,6 +7,7 @@
7
7
  import chalk from 'chalk';
8
8
  import * as fs from 'fs/promises';
9
9
  import { ConstraintChecker } from '../../core/constraints/checker';
10
+ import { getTraceCollector } from '../../monitoring/traces';
10
11
  import { IRON_LAWS, GUIDELINES, TIPS } from '../../core/constraints/definitions';
11
12
  import { executeWithCollect } from '../../failure/constraint-handler';
12
13
  import type { ConstraintContext } from '../../types/constraint';
@@ -47,6 +48,7 @@ export async function report(options: ReportOptions): Promise<void> {
47
48
 
48
49
  const projectPath = options.projectPath || process.cwd();
49
50
  const checker = ConstraintChecker.getInstance();
51
+ checker.setTraceRecorder(getTraceCollector());
50
52
 
51
53
  const allConstraints = { ...IRON_LAWS, ...GUIDELINES, ...TIPS };
52
54
  const totalConstraints = Object.keys(allConstraints).length;
@@ -8,6 +8,7 @@
8
8
  import chalk from 'chalk';
9
9
  import * as fs from 'fs';
10
10
  import * as path from 'path';
11
+ import { walkFiles } from '../../utils/file-walk';
11
12
 
12
13
  export interface SpecBaselineCheckOptions {
13
14
  /** 项目路径 */
@@ -160,29 +161,21 @@ function checkCodePattern(pattern: string, projectPath: string): { exists: boole
160
161
  const found: string[] = [];
161
162
  const notFound: string[] = [];
162
163
 
164
+ // 遍历一次,供所有关键词复用(工单 19:walkFiles 收敛)
165
+ const sourceFiles = walkFiles(projectPath, {
166
+ skipDirs: ['node_modules', 'dist'],
167
+ skipHidden: true,
168
+ filter: (_name, fullPath) => fullPath.endsWith('.ts') || fullPath.endsWith('.js'),
169
+ });
170
+
163
171
  for (const kw of keywords) {
164
172
  let count = 0;
165
- function walkDir(dir: string) {
166
- let entries: fs.Dirent[];
173
+ for (const fullPath of sourceFiles) {
167
174
  try {
168
- entries = fs.readdirSync(dir, { withFileTypes: true });
169
- } catch {
170
- return;
171
- }
172
- for (const entry of entries) {
173
- if (entry.name.startsWith('.') || entry.name === 'node_modules' || entry.name === 'dist') continue;
174
- const fullPath = path.join(dir, entry.name);
175
- if (entry.isDirectory()) {
176
- walkDir(fullPath);
177
- } else if (entry.isFile() && (fullPath.endsWith('.ts') || fullPath.endsWith('.js'))) {
178
- try {
179
- const content = fs.readFileSync(fullPath, 'utf-8');
180
- if (content.includes(kw)) count++;
181
- } catch { /* skip */ }
182
- }
183
- }
175
+ const content = fs.readFileSync(fullPath, 'utf-8');
176
+ if (content.includes(kw)) count++;
177
+ } catch { /* skip */ }
184
178
  }
185
- walkDir(projectPath);
186
179
  if (count > 0) {
187
180
  found.push(`${kw} (${count} files)`);
188
181
  } else {