kibi-cli 1.0.1 → 2.1.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 (548) hide show
  1. package/dist/cli-errors.d.ts +3 -1
  2. package/dist/cli-errors.d.ts.map +1 -1
  3. package/dist/cli-errors.js +4 -1
  4. package/dist/cli-json-command.d.ts +1 -0
  5. package/dist/cli-json-command.d.ts.map +1 -1
  6. package/dist/cli-json-command.js +13 -4
  7. package/dist/cli-operation-loader.js +3 -3
  8. package/dist/cli-operation-metadata.d.ts +4 -3
  9. package/dist/cli-operation-metadata.d.ts.map +1 -1
  10. package/dist/cli-operation-metadata.js +7 -5
  11. package/dist/cli-protocol.js +1 -1
  12. package/dist/cli-register-maintenance.d.ts.map +1 -1
  13. package/dist/cli-register-maintenance.js +7 -0
  14. package/dist/cli-register-proof.d.ts +3 -0
  15. package/dist/cli-register-proof.d.ts.map +1 -0
  16. package/dist/cli-register-proof.js +127 -0
  17. package/dist/cli-register-reporting.d.ts.map +1 -1
  18. package/dist/cli-register-reporting.js +7 -0
  19. package/dist/cli.d.ts +4 -0
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +19 -10
  22. package/dist/commands/branch.d.ts +1 -0
  23. package/dist/commands/branch.d.ts.map +1 -1
  24. package/dist/commands/branch.js +8 -4
  25. package/dist/commands/check-generated.d.ts +7 -0
  26. package/dist/commands/check-generated.d.ts.map +1 -0
  27. package/dist/commands/check-generated.js +192 -0
  28. package/dist/commands/check.d.ts +14 -0
  29. package/dist/commands/check.d.ts.map +1 -1
  30. package/dist/commands/check.js +193 -46
  31. package/dist/commands/coverage.d.ts +1 -0
  32. package/dist/commands/coverage.d.ts.map +1 -1
  33. package/dist/commands/coverage.js +6 -0
  34. package/dist/commands/doctor.d.ts +22 -0
  35. package/dist/commands/doctor.d.ts.map +1 -1
  36. package/dist/commands/doctor.js +170 -23
  37. package/dist/commands/engine.d.ts +12 -0
  38. package/dist/commands/engine.d.ts.map +1 -1
  39. package/dist/commands/engine.js +42 -0
  40. package/dist/commands/github-init.d.ts +1 -0
  41. package/dist/commands/github-init.d.ts.map +1 -1
  42. package/dist/commands/github-init.js +9 -5
  43. package/dist/commands/init-helpers.d.ts.map +1 -1
  44. package/dist/commands/init-helpers.js +49 -10
  45. package/dist/commands/migrate.d.ts +4 -0
  46. package/dist/commands/migrate.d.ts.map +1 -1
  47. package/dist/commands/migrate.js +7 -7
  48. package/dist/commands/proof-explain.d.ts +10 -0
  49. package/dist/commands/proof-explain.d.ts.map +1 -0
  50. package/dist/commands/proof-explain.js +45 -0
  51. package/dist/commands/proof-impact.d.ts +7 -0
  52. package/dist/commands/proof-impact.d.ts.map +1 -0
  53. package/dist/commands/proof-impact.js +39 -0
  54. package/dist/commands/proof-migrate-legacy.d.ts +7 -0
  55. package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
  56. package/dist/commands/proof-migrate-legacy.js +45 -0
  57. package/dist/commands/proof-prune.d.ts +8 -0
  58. package/dist/commands/proof-prune.d.ts.map +1 -0
  59. package/dist/commands/proof-prune.js +53 -0
  60. package/dist/commands/prove.d.ts +37 -0
  61. package/dist/commands/prove.d.ts.map +1 -0
  62. package/dist/commands/prove.js +470 -0
  63. package/dist/commands/report.d.ts.map +1 -1
  64. package/dist/commands/report.js +18 -3
  65. package/dist/commands/sync/discovery.d.ts +3 -0
  66. package/dist/commands/sync/discovery.d.ts.map +1 -1
  67. package/dist/commands/sync/discovery.js +36 -28
  68. package/dist/commands/sync/manifest.d.ts +2 -1
  69. package/dist/commands/sync/manifest.d.ts.map +1 -1
  70. package/dist/commands/sync/manifest.js +55 -21
  71. package/dist/commands/sync/persistence.d.ts +4 -1
  72. package/dist/commands/sync/persistence.d.ts.map +1 -1
  73. package/dist/commands/sync/persistence.js +31 -14
  74. package/dist/commands/sync/staging.d.ts +1 -0
  75. package/dist/commands/sync/staging.d.ts.map +1 -1
  76. package/dist/commands/sync/staging.js +5 -2
  77. package/dist/commands/sync/untracked-targets.d.ts +24 -0
  78. package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
  79. package/dist/commands/sync/untracked-targets.js +108 -0
  80. package/dist/commands/sync.d.ts +11 -1
  81. package/dist/commands/sync.d.ts.map +1 -1
  82. package/dist/commands/sync.js +74 -30
  83. package/dist/engine-daemon.d.ts +3 -1
  84. package/dist/engine-daemon.d.ts.map +1 -1
  85. package/dist/engine-daemon.js +49 -20
  86. package/dist/engine.d.ts +17 -77
  87. package/dist/engine.d.ts.map +1 -1
  88. package/dist/engine.js +331 -91
  89. package/dist/env/bootstrap.d.ts +84 -0
  90. package/dist/env/bootstrap.d.ts.map +1 -0
  91. package/dist/env/bootstrap.js +310 -0
  92. package/dist/extractors/manifest.d.ts +5 -0
  93. package/dist/extractors/manifest.d.ts.map +1 -1
  94. package/dist/extractors/manifest.js +46 -1
  95. package/dist/extractors/markdown.d.ts +7 -3
  96. package/dist/extractors/markdown.d.ts.map +1 -1
  97. package/dist/extractors/markdown.js +60 -24
  98. package/dist/extractors/playwright-cases.js +1 -1
  99. package/dist/extractors/relationships.d.ts +6 -0
  100. package/dist/extractors/relationships.d.ts.map +1 -1
  101. package/dist/extractors/relationships.js +1 -1
  102. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  103. package/dist/extractors/symbols-coordinator.d.ts +8 -0
  104. package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
  105. package/dist/extractors/symbols-coordinator.js +40 -0
  106. package/dist/extractors/symbols-ts.d.ts +9 -19
  107. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  108. package/dist/extractors/symbols-ts.js +34 -429
  109. package/dist/intent-search.d.ts +1 -0
  110. package/dist/intent-search.d.ts.map +1 -1
  111. package/dist/intent-search.js +11 -8
  112. package/dist/logic/ir.d.ts +1 -0
  113. package/dist/logic/ir.d.ts.map +1 -1
  114. package/dist/logic/ir.js +1 -1
  115. package/dist/operations/bootstrap/activation.d.ts +2 -1
  116. package/dist/operations/bootstrap/activation.d.ts.map +1 -1
  117. package/dist/operations/bootstrap/activation.js +11 -3
  118. package/dist/operations/bootstrap/generate.d.ts +2 -1
  119. package/dist/operations/bootstrap/generate.d.ts.map +1 -1
  120. package/dist/operations/bootstrap/generate.js +6 -3
  121. package/dist/operations/bootstrap/guidance.d.ts +1 -0
  122. package/dist/operations/bootstrap/guidance.d.ts.map +1 -1
  123. package/dist/operations/bootstrap/guidance.js +1 -1
  124. package/dist/operations/modeling/model-requirement.d.ts +5 -0
  125. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  126. package/dist/operations/modeling/model-requirement.js +57 -46
  127. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -1
  128. package/dist/operations/modeling/predicate-applicability.js +103 -4
  129. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
  130. package/dist/operations/modeling/predicate-catalog-2.js +18 -2
  131. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
  132. package/dist/operations/modeling/predicate-catalog-3.js +17 -1
  133. package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
  134. package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
  135. package/dist/operations/modeling/predicate-catalog-5.js +291 -0
  136. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
  137. package/dist/operations/modeling/predicate-catalog.js +4 -0
  138. package/dist/operations/modeling/predicate-loader.d.ts +1 -0
  139. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  140. package/dist/operations/modeling/predicate-loader.js +4 -3
  141. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  142. package/dist/operations/modeling/predicate-ranker.js +4 -1
  143. package/dist/operations/modeling/predicate-types.d.ts +1 -1
  144. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  145. package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
  146. package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
  147. package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
  148. package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
  149. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  150. package/dist/operations/modeling/suggest-predicates.js +82 -22
  151. package/dist/operations/mutation/contradictions.d.ts +2 -1
  152. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  153. package/dist/operations/mutation/contradictions.js +26 -5
  154. package/dist/operations/mutation/delete.d.ts +3 -0
  155. package/dist/operations/mutation/delete.d.ts.map +1 -1
  156. package/dist/operations/mutation/delete.js +100 -32
  157. package/dist/operations/mutation/relationships.d.ts +1 -0
  158. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  159. package/dist/operations/mutation/relationships.js +6 -4
  160. package/dist/operations/mutation/saga.d.ts +51 -0
  161. package/dist/operations/mutation/saga.d.ts.map +1 -0
  162. package/dist/operations/mutation/saga.js +67 -0
  163. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  164. package/dist/operations/mutation/serialization.js +3 -2
  165. package/dist/operations/mutation/source-authoring.d.ts +5 -1
  166. package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
  167. package/dist/operations/mutation/source-authoring.js +79 -46
  168. package/dist/operations/mutation/strict-fact.d.ts +1 -0
  169. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  170. package/dist/operations/mutation/strict-fact.js +8 -5
  171. package/dist/operations/mutation/symbol-compiler-lock.d.ts +5 -2
  172. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -1
  173. package/dist/operations/mutation/symbol-compiler-lock.js +65 -2
  174. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  175. package/dist/operations/mutation/symbol-granularity.js +11 -89
  176. package/dist/operations/mutation/symbol-refresh.d.ts +1 -0
  177. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  178. package/dist/operations/mutation/symbol-refresh.js +10 -8
  179. package/dist/operations/mutation/upsert.d.ts +18 -2
  180. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  181. package/dist/operations/mutation/upsert.js +86 -54
  182. package/dist/operations/mutation/validate-upsert.js +2 -2
  183. package/dist/operations/mutation/validation.d.ts.map +1 -1
  184. package/dist/operations/mutation/validation.js +46 -4
  185. package/dist/operations/mutation/warnings.d.ts +1 -0
  186. package/dist/operations/mutation/warnings.d.ts.map +1 -1
  187. package/dist/operations/mutation/warnings.js +7 -5
  188. package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
  189. package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
  190. package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
  191. package/dist/operations/planning/apply-plan.d.ts +8 -106
  192. package/dist/operations/planning/apply-plan.d.ts.map +1 -1
  193. package/dist/operations/planning/apply-plan.js +113 -36
  194. package/dist/operations/planning/compile-intent.d.ts +51 -0
  195. package/dist/operations/planning/compile-intent.d.ts.map +1 -1
  196. package/dist/operations/planning/compile-intent.js +133 -17
  197. package/dist/operations/proof/baseline-diff.d.ts +41 -0
  198. package/dist/operations/proof/baseline-diff.d.ts.map +1 -0
  199. package/dist/operations/proof/baseline-diff.js +153 -0
  200. package/dist/operations/proof/explain.d.ts +75 -0
  201. package/dist/operations/proof/explain.d.ts.map +1 -0
  202. package/dist/operations/proof/explain.js +294 -0
  203. package/dist/operations/proof/impact.d.ts +45 -0
  204. package/dist/operations/proof/impact.d.ts.map +1 -0
  205. package/dist/operations/proof/impact.js +118 -0
  206. package/dist/operations/proof/ingest-proof.d.ts +34 -0
  207. package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
  208. package/dist/operations/proof/ingest-proof.js +348 -0
  209. package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
  210. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
  211. package/dist/operations/proof/migrate-legacy-receipts.js +92 -0
  212. package/dist/operations/proof/prune-receipts.d.ts +35 -0
  213. package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
  214. package/dist/operations/proof/prune-receipts.js +91 -0
  215. package/dist/operations/proof/receipt-document.d.ts +29 -0
  216. package/dist/operations/proof/receipt-document.d.ts.map +1 -0
  217. package/dist/operations/proof/receipt-document.js +117 -0
  218. package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -1
  219. package/dist/operations/semantic-advisor/analysis-receipt.js +3 -9
  220. package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
  221. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  222. package/dist/operations/semantic-advisor/analyze-prose.js +64 -93
  223. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  224. package/dist/operations/semantic-advisor/clauses.js +20 -7
  225. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts +63 -0
  226. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts.map +1 -0
  227. package/dist/operations/semantic-advisor/plugin-orchestration.js +489 -0
  228. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +15 -2
  229. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -1
  230. package/dist/operations/semantic-advisor/predicate-rules-core.js +7 -140
  231. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +11 -12
  232. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -1
  233. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +6 -94
  234. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +16 -0
  235. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -1
  236. package/dist/operations/semantic-advisor/predicate-rules-policy.js +7 -150
  237. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +9 -0
  238. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -1
  239. package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +7 -102
  240. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +13 -0
  241. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -1
  242. package/dist/operations/semantic-advisor/predicate-rules-product.js +7 -133
  243. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
  244. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
  245. package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
  246. package/dist/operations/semantic-advisor/types.d.ts +1 -0
  247. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  248. package/dist/plugins/compose-ontology-packs.d.ts +51 -0
  249. package/dist/plugins/compose-ontology-packs.d.ts.map +1 -0
  250. package/dist/plugins/compose-ontology-packs.js +257 -0
  251. package/dist/plugins/compose-semantic-classifier.d.ts +42 -0
  252. package/dist/plugins/compose-semantic-classifier.d.ts.map +1 -0
  253. package/dist/plugins/compose-semantic-classifier.js +211 -0
  254. package/dist/plugins/external-allowlist.d.ts +10 -0
  255. package/dist/plugins/external-allowlist.d.ts.map +1 -0
  256. package/dist/plugins/external-allowlist.js +16 -0
  257. package/dist/plugins/index.d.ts +9 -0
  258. package/dist/plugins/index.d.ts.map +1 -0
  259. package/dist/plugins/index.js +33 -0
  260. package/dist/plugins/load-plugin.d.ts +19 -0
  261. package/dist/plugins/load-plugin.d.ts.map +1 -0
  262. package/dist/plugins/load-plugin.js +59 -0
  263. package/dist/plugins/project-config.d.ts +28 -0
  264. package/dist/plugins/project-config.d.ts.map +1 -0
  265. package/dist/plugins/project-config.js +90 -0
  266. package/dist/plugins/registry.d.ts +93 -0
  267. package/dist/plugins/registry.d.ts.map +1 -0
  268. package/dist/plugins/registry.js +338 -0
  269. package/dist/plugins/resolve-package.d.ts +47 -0
  270. package/dist/plugins/resolve-package.d.ts.map +1 -0
  271. package/dist/plugins/resolve-package.js +262 -0
  272. package/dist/plugins/source-analysis-service.d.ts +44 -0
  273. package/dist/plugins/source-analysis-service.d.ts.map +1 -0
  274. package/dist/plugins/source-analysis-service.js +232 -0
  275. package/dist/prolog/codec.d.ts +13 -1
  276. package/dist/prolog/codec.d.ts.map +1 -1
  277. package/dist/prolog/codec.js +269 -154
  278. package/dist/prolog/error-terms.d.ts +47 -0
  279. package/dist/prolog/error-terms.d.ts.map +1 -0
  280. package/dist/prolog/error-terms.js +334 -0
  281. package/dist/prolog/janitor.d.ts +50 -0
  282. package/dist/prolog/janitor.d.ts.map +1 -0
  283. package/dist/prolog/janitor.js +154 -0
  284. package/dist/prolog/store-lock.d.ts +45 -0
  285. package/dist/prolog/store-lock.d.ts.map +1 -0
  286. package/dist/prolog/store-lock.js +195 -0
  287. package/dist/prolog.d.ts +7 -0
  288. package/dist/prolog.d.ts.map +1 -1
  289. package/dist/prolog.js +55 -17
  290. package/dist/proof/evaluate.d.ts +27 -0
  291. package/dist/proof/evaluate.d.ts.map +1 -0
  292. package/dist/proof/evaluate.js +151 -0
  293. package/dist/proof/inspect.d.ts +12 -0
  294. package/dist/proof/inspect.d.ts.map +1 -0
  295. package/dist/proof/inspect.js +236 -0
  296. package/dist/proof/integrations.d.ts +35 -0
  297. package/dist/proof/integrations.d.ts.map +1 -0
  298. package/dist/proof/integrations.js +123 -0
  299. package/dist/proof/producers/junit-adapter.d.ts +26 -0
  300. package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
  301. package/dist/proof/producers/junit-adapter.js +186 -0
  302. package/dist/{public → proof/producers}/playwright-case-id.d.ts +1 -1
  303. package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
  304. package/dist/{public → proof/producers}/playwright-case-id.js +1 -1
  305. package/dist/proof/producers/playwright-reporter.d.ts +27 -0
  306. package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
  307. package/dist/proof/producers/playwright-reporter.js +138 -0
  308. package/dist/proof/producers/tap-adapter.d.ts +10 -0
  309. package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
  310. package/dist/proof/producers/tap-adapter.js +200 -0
  311. package/dist/proof/receipt-outcome.d.ts +2 -0
  312. package/dist/proof/receipt-outcome.d.ts.map +1 -0
  313. package/dist/proof/receipt-outcome.js +1 -0
  314. package/dist/public/diagnostic-usage.js +6 -6
  315. package/dist/public/distribution-parity.d.ts +7 -1
  316. package/dist/public/distribution-parity.d.ts.map +1 -1
  317. package/dist/public/distribution-parity.js +15 -10
  318. package/dist/public/extractors/symbols-coordinator.d.ts +1 -1
  319. package/dist/public/extractors/symbols-coordinator.d.ts.map +1 -1
  320. package/dist/public/extractors/symbols-coordinator.js +1 -1
  321. package/dist/public/impact/analyzer.d.ts +1 -1
  322. package/dist/public/impact/analyzer.d.ts.map +1 -1
  323. package/dist/public/impact/analyzer.js +6 -4
  324. package/dist/public/impact/coverage-depth-quality.d.ts +1 -0
  325. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  326. package/dist/public/impact/coverage-depth-quality.js +1 -1
  327. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  328. package/dist/public/impact/diagnostics.js +2 -2
  329. package/dist/public/impact/diff-meaning.d.ts +1 -0
  330. package/dist/public/impact/diff-meaning.d.ts.map +1 -1
  331. package/dist/public/impact/diff-meaning.js +5 -2
  332. package/dist/public/impact/full-kb-quality.d.ts +5 -2
  333. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  334. package/dist/public/impact/full-kb-quality.js +329 -64
  335. package/dist/public/operations/catalog.d.ts +450 -196
  336. package/dist/public/operations/catalog.d.ts.map +1 -1
  337. package/dist/public/operations/catalog.js +6 -4
  338. package/dist/public/operations/check-executor.d.ts.map +1 -1
  339. package/dist/public/operations/check-executor.js +4 -8
  340. package/dist/public/operations/check-helpers.d.ts +1 -1
  341. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  342. package/dist/public/operations/check-helpers.js +1 -1
  343. package/dist/public/operations/contracts.d.ts +7 -0
  344. package/dist/public/operations/contracts.d.ts.map +1 -1
  345. package/dist/public/operations/contracts.js +66 -34
  346. package/dist/public/operations/discovery-entities.d.ts +15 -0
  347. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  348. package/dist/public/operations/discovery-entities.js +38 -0
  349. package/dist/public/operations/discovery-executors.d.ts +9 -9
  350. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  351. package/dist/public/operations/discovery-executors.js +39 -31
  352. package/dist/public/operations/index.d.ts +1 -1
  353. package/dist/public/operations/index.d.ts.map +1 -1
  354. package/dist/public/operations/index.js +1 -1
  355. package/dist/public/operations/migration-plan.d.ts +4 -3
  356. package/dist/public/operations/migration-plan.d.ts.map +1 -1
  357. package/dist/public/operations/migration-plan.js +23 -21
  358. package/dist/public/operations/node-ports.js +6 -6
  359. package/dist/public/operations/prolog-json.d.ts +1 -1
  360. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  361. package/dist/public/operations/prolog-json.js +7 -7
  362. package/dist/public/operations/repair-plan.d.ts +3 -3
  363. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  364. package/dist/public/operations/repair-plan.js +49 -19
  365. package/dist/public/operations/result-envelope.d.ts +1 -0
  366. package/dist/public/operations/result-envelope.d.ts.map +1 -1
  367. package/dist/public/operations/result-envelope.js +12 -10
  368. package/dist/public/operations/runtime-types.d.ts +21 -1
  369. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  370. package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
  371. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
  372. package/dist/public/operations/specs/check-rules.generated.js +35 -0
  373. package/dist/public/operations/specs/check.d.ts +7 -2
  374. package/dist/public/operations/specs/check.d.ts.map +1 -1
  375. package/dist/public/operations/specs/check.js +8 -20
  376. package/dist/public/operations/specs/discovery.d.ts +3 -0
  377. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  378. package/dist/public/operations/specs/discovery.js +3 -0
  379. package/dist/public/operations/specs/mutation-schemas.d.ts +257 -163
  380. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  381. package/dist/public/operations/specs/mutation-schemas.js +15 -7
  382. package/dist/public/operations/specs/planning.d.ts +9 -0
  383. package/dist/public/operations/specs/planning.d.ts.map +1 -1
  384. package/dist/public/operations/specs/planning.js +6 -0
  385. package/dist/public/operations/specs/proof.d.ts +212 -0
  386. package/dist/public/operations/specs/proof.d.ts.map +1 -0
  387. package/dist/public/operations/specs/proof.js +30 -0
  388. package/dist/public/operations/specs/reporting.d.ts +20 -0
  389. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  390. package/dist/public/operations/specs/reporting.js +112 -12
  391. package/dist/public/operations/specs/semantic.d.ts +1 -1
  392. package/dist/public/operations/specs/semantic.d.ts.map +1 -1
  393. package/dist/public/operations/specs/semantic.js +54 -4
  394. package/dist/public/operations/specs/upsert.d.ts +257 -163
  395. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  396. package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
  397. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
  398. package/dist/public/operations/symbol-repair-plan.js +121 -4
  399. package/dist/public/operations/types.d.ts +6 -1
  400. package/dist/public/operations/types.d.ts.map +1 -1
  401. package/dist/public/proof-fingerprint.d.ts +54 -0
  402. package/dist/public/proof-fingerprint.d.ts.map +1 -0
  403. package/dist/public/proof-fingerprint.js +141 -0
  404. package/dist/public/proof-protocol.d.ts +354 -0
  405. package/dist/public/proof-protocol.d.ts.map +1 -0
  406. package/dist/public/proof-protocol.js +454 -0
  407. package/dist/public/proof-receipt.d.ts +279 -0
  408. package/dist/public/proof-receipt.d.ts.map +1 -0
  409. package/dist/public/proof-receipt.js +377 -0
  410. package/dist/public/schemas/entity.d.ts.map +1 -1
  411. package/dist/public/schemas/entity.js +21 -7
  412. package/dist/public/skills/kibi-freshness/SKILL.md +1 -1
  413. package/dist/public/skills/kibi-usage/SKILL.md +44 -12
  414. package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
  415. package/dist/public/skills/kibi-usage/resources/proof.md +150 -0
  416. package/dist/public/skills/kibi-usage/resources/workflows.md +6 -6
  417. package/dist/public/symbol-granularity.d.ts +3 -14
  418. package/dist/public/symbol-granularity.d.ts.map +1 -1
  419. package/dist/public/symbol-granularity.generated.d.ts +16 -0
  420. package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
  421. package/dist/public/symbol-granularity.generated.js +53 -0
  422. package/dist/public/symbol-granularity.js +6 -47
  423. package/dist/public/telemetry-acceptance.d.ts +3 -77
  424. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  425. package/dist/public/telemetry-acceptance.js +4 -2
  426. package/dist/public/telemetry-remediation.js +1 -1
  427. package/dist/report/html-report.css +1240 -0
  428. package/dist/report/html-report.d.ts +4 -2
  429. package/dist/report/html-report.d.ts.map +1 -1
  430. package/dist/report/html-report.js +37 -300
  431. package/dist/runtime/cli-runtime.d.ts +2 -0
  432. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  433. package/dist/runtime/cli-runtime.js +32 -7
  434. package/dist/schemas/entity.schema.json +355 -215
  435. package/dist/search-ranking.d.ts +1 -0
  436. package/dist/search-ranking.d.ts.map +1 -1
  437. package/dist/search-ranking.js +3 -0
  438. package/dist/traceability/evidence-model.d.ts +28 -0
  439. package/dist/traceability/evidence-model.d.ts.map +1 -1
  440. package/dist/traceability/git-staged.d.ts +20 -0
  441. package/dist/traceability/git-staged.d.ts.map +1 -1
  442. package/dist/traceability/git-staged.js +145 -1
  443. package/dist/traceability/staged-diagnostics.d.ts +7 -0
  444. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  445. package/dist/traceability/staged-diagnostics.js +78 -7
  446. package/dist/traceability/staged-file-coverage.d.ts +33 -0
  447. package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
  448. package/dist/traceability/staged-file-coverage.js +284 -0
  449. package/dist/traceability/staged-impact-contract.js +4 -4
  450. package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
  451. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  452. package/dist/traceability/staged-symbols-manifest.js +138 -27
  453. package/dist/traceability/symbol-extract.d.ts +24 -2
  454. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  455. package/dist/traceability/symbol-extract.js +64 -208
  456. package/dist/traceability/temp-kb.d.ts +2 -0
  457. package/dist/traceability/temp-kb.d.ts.map +1 -1
  458. package/dist/traceability/temp-kb.js +13 -4
  459. package/dist/types/entities.d.ts +5 -3
  460. package/dist/types/entities.d.ts.map +1 -1
  461. package/dist/utils/branch-resolver.d.ts +1 -0
  462. package/dist/utils/branch-resolver.d.ts.map +1 -1
  463. package/dist/utils/branch-resolver.js +7 -4
  464. package/dist/utils/branch-store.d.ts +6 -0
  465. package/dist/utils/branch-store.d.ts.map +1 -1
  466. package/dist/utils/branch-store.js +27 -0
  467. package/dist/utils/kb-paths.d.ts +1 -1
  468. package/dist/utils/kb-paths.d.ts.map +1 -1
  469. package/dist/utils/kb-paths.js +1 -1
  470. package/dist/utils/rule-registry.d.ts +1 -11
  471. package/dist/utils/rule-registry.d.ts.map +1 -1
  472. package/dist/utils/rule-registry.generated.d.ts +102 -0
  473. package/dist/utils/rule-registry.generated.d.ts.map +1 -0
  474. package/dist/utils/rule-registry.generated.js +131 -0
  475. package/dist/utils/rule-registry.js +12 -113
  476. package/dist/utils/strict-modeling.d.ts +1 -0
  477. package/dist/utils/strict-modeling.d.ts.map +1 -1
  478. package/dist/utils/strict-modeling.js +1 -1
  479. package/package.json +20 -20
  480. package/src/public/diagnostic-usage.ts +6 -6
  481. package/src/public/distribution-parity.ts +17 -10
  482. package/src/public/extractors/symbols-coordinator.ts +1 -0
  483. package/src/public/impact/analyzer.ts +15 -12
  484. package/src/public/impact/coverage-depth-quality.ts +1 -1
  485. package/src/public/impact/diagnostics.ts +2 -1
  486. package/src/public/impact/diff-meaning.ts +11 -4
  487. package/src/public/impact/full-kb-quality.ts +463 -72
  488. package/src/public/operations/catalog.ts +10 -4
  489. package/src/public/operations/check-executor.ts +4 -8
  490. package/src/public/operations/check-helpers.ts +2 -2
  491. package/src/public/operations/contracts.ts +78 -34
  492. package/src/public/operations/discovery-entities.ts +53 -0
  493. package/src/public/operations/discovery-executors.ts +64 -48
  494. package/src/public/operations/index.ts +1 -1
  495. package/src/public/operations/migration-plan.ts +32 -25
  496. package/src/public/operations/node-ports.ts +6 -6
  497. package/src/public/operations/prolog-json.ts +13 -5
  498. package/src/public/operations/repair-plan.ts +60 -23
  499. package/src/public/operations/result-envelope.ts +15 -10
  500. package/src/public/operations/runtime-types.ts +26 -2
  501. package/src/public/operations/specs/check-rules.generated.ts +38 -0
  502. package/src/public/operations/specs/check.ts +12 -21
  503. package/src/public/operations/specs/discovery.ts +3 -0
  504. package/src/public/operations/specs/mutation-schemas.ts +22 -9
  505. package/src/public/operations/specs/planning.ts +7 -0
  506. package/src/public/operations/specs/proof.ts +43 -0
  507. package/src/public/operations/specs/reporting.ts +140 -13
  508. package/src/public/operations/specs/semantic.ts +79 -17
  509. package/src/public/operations/symbol-repair-plan.ts +166 -7
  510. package/src/public/operations/types.ts +6 -1
  511. package/src/public/proof-fingerprint.ts +216 -0
  512. package/src/public/proof-protocol-types.d.ts +96 -0
  513. package/src/public/proof-protocol.ts +589 -0
  514. package/src/public/proof-receipt.ts +499 -0
  515. package/src/public/schemas/entity.ts +26 -10
  516. package/src/public/skills/kibi-freshness/SKILL.md +1 -1
  517. package/src/public/skills/kibi-usage/SKILL.md +44 -12
  518. package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
  519. package/src/public/skills/kibi-usage/resources/proof.md +150 -0
  520. package/src/public/skills/kibi-usage/resources/workflows.md +6 -6
  521. package/src/public/symbol-granularity.generated.ts +74 -0
  522. package/src/public/symbol-granularity.ts +34 -59
  523. package/src/public/telemetry-acceptance-types.d.ts +98 -0
  524. package/src/public/telemetry-acceptance.ts +22 -100
  525. package/src/public/telemetry-remediation.ts +1 -1
  526. package/src/schemas/entity.schema.json +355 -215
  527. package/dist/cli-register-verification.d.ts +0 -3
  528. package/dist/cli-register-verification.d.ts.map +0 -1
  529. package/dist/cli-register-verification.js +0 -16
  530. package/dist/commands/verify.d.ts +0 -10
  531. package/dist/commands/verify.d.ts.map +0 -1
  532. package/dist/commands/verify.js +0 -126
  533. package/dist/operations/verification/ingest-verification.d.ts +0 -29
  534. package/dist/operations/verification/ingest-verification.d.ts.map +0 -1
  535. package/dist/operations/verification/ingest-verification.js +0 -192
  536. package/dist/public/operations/specs/verification.d.ts +0 -78
  537. package/dist/public/operations/specs/verification.d.ts.map +0 -1
  538. package/dist/public/operations/specs/verification.js +0 -62
  539. package/dist/public/playwright-case-id.d.ts.map +0 -1
  540. package/dist/public/verification-receipt.d.ts +0 -242
  541. package/dist/public/verification-receipt.d.ts.map +0 -1
  542. package/dist/public/verification-receipt.js +0 -296
  543. package/dist/verification/playwright-reporter.d.ts +0 -21
  544. package/dist/verification/playwright-reporter.d.ts.map +0 -1
  545. package/dist/verification/playwright-reporter.js +0 -114
  546. package/src/public/operations/specs/verification.ts +0 -78
  547. package/src/public/playwright-case-id.ts +0 -35
  548. package/src/public/verification-receipt.ts +0 -412
@@ -0,0 +1,39 @@
1
+ /*
2
+ Kibi — repo-local, per-branch, queryable long-term memory for software projects
3
+ Copyright (C) 2026 Piotr Franczyk
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU Affero General Public License as published by
7
+ the Free Software Foundation, either version 3 of the License, or
8
+ (at your option) any later version.
9
+ */
10
+ import { executeProofImpact, proofImpactExitCode, } from "../operations/proof/impact.js";
11
+ import { createCliRuntime } from "../runtime/cli-runtime.js";
12
+ // implements REQ-kibi-verification-evidence-contract
13
+ export async function proofImpactCommand(options) {
14
+ const runtime = createCliRuntime();
15
+ const context = await runtime.open({
16
+ name: "kibi_proof_impact",
17
+ effects: [],
18
+ requiresProlog: true,
19
+ execute: async () => undefined,
20
+ }, {});
21
+ let completed = false;
22
+ try {
23
+ const { result, text } = await executeProofImpact(context);
24
+ if (options.json) {
25
+ process.stdout.write(`${JSON.stringify(result, null, 2)}\n`);
26
+ }
27
+ else {
28
+ process.stdout.write(text);
29
+ }
30
+ completed = true;
31
+ await runtime.afterSuccess({ name: "kibi_proof_impact" }, context);
32
+ return { exitCode: proofImpactExitCode(result) };
33
+ }
34
+ finally {
35
+ await runtime.close(context, completed
36
+ ? { status: "success", result: 0 }
37
+ : { status: "error", error: 1 });
38
+ }
39
+ }
@@ -0,0 +1,7 @@
1
+ export type ProofMigrateLegacyOptions = Readonly<{
2
+ test?: string;
3
+ }>;
4
+ export declare function proofMigrateLegacyCommand(options: ProofMigrateLegacyOptions): Promise<{
5
+ exitCode: number;
6
+ }>;
7
+ //# sourceMappingURL=proof-migrate-legacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof-migrate-legacy.d.ts","sourceRoot":"","sources":["../../src/commands/proof-migrate-legacy.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAE/C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAGH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAqC/B"}
@@ -0,0 +1,45 @@
1
+ /*
2
+ Kibi — repo-local, per-branch, queryable long-term memory for software projects
3
+ Copyright (C) 2026 Piotr Franczyk
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU Affero General Public License as published by
7
+ the Free Software Foundation, either version 3 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU Affero General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Affero General Public License
16
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ import { executeMigrateLegacyReceipts } from "../operations/proof/migrate-legacy-receipts.js";
19
+ import { createCliRuntime } from "../runtime/cli-runtime.js";
20
+ // implements REQ-kibi-verification-evidence-contract
21
+ export async function proofMigrateLegacyCommand(options) {
22
+ const runtime = createCliRuntime();
23
+ const context = await runtime.open({
24
+ name: "kibi_proof_migrate_legacy",
25
+ effects: ["kb-mutate", "workspace-write"],
26
+ requiresProlog: true,
27
+ execute: async () => undefined,
28
+ }, {});
29
+ let completed = false;
30
+ try {
31
+ const result = await executeMigrateLegacyReceipts(options.test === undefined ? {} : { testId: options.test }, context);
32
+ process.stdout.write(`${result.content[0]?.text ?? ""}\n`);
33
+ for (const row of result.structuredContent.tests) {
34
+ process.stdout.write(` ${row.testId}: legacy verification_receipts removed\n`);
35
+ }
36
+ completed = true;
37
+ await runtime.afterSuccess({ name: "kibi_proof_migrate_legacy" }, context);
38
+ return { exitCode: 0 };
39
+ }
40
+ finally {
41
+ await runtime.close(context, completed
42
+ ? { status: "success", result: 0 }
43
+ : { status: "error", error: 1 });
44
+ }
45
+ }
@@ -0,0 +1,8 @@
1
+ export type ProofPruneOptions = Readonly<{
2
+ test?: string;
3
+ keep?: string;
4
+ }>;
5
+ export declare function proofPruneCommand(options: ProofPruneOptions): Promise<{
6
+ exitCode: number;
7
+ }>;
8
+ //# sourceMappingURL=proof-prune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof-prune.d.ts","sourceRoot":"","sources":["../../src/commands/proof-prune.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IAEvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAGH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC3E,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CA0CD"}
@@ -0,0 +1,53 @@
1
+ /*
2
+ Kibi — repo-local, per-branch, queryable long-term memory for software projects
3
+ Copyright (C) 2026 Piotr Franczyk
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU Affero General Public License as published by
7
+ the Free Software Foundation, either version 3 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU Affero General Public License for more details.
14
+
15
+ You should have received a copy of the GNU Affero General Public License
16
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
17
+ */
18
+ import { executePruneReceipts } from "../operations/proof/prune-receipts.js";
19
+ import { createCliRuntime } from "../runtime/cli-runtime.js";
20
+ // implements REQ-kibi-verification-evidence-contract
21
+ export async function proofPruneCommand(options) {
22
+ const keepRaw = options.keep ?? "1";
23
+ const keep = Number.parseInt(keepRaw, 10);
24
+ if (!Number.isSafeInteger(keep) || keep < 1 || keep > 50) {
25
+ throw new Error("proof prune: --keep must be an integer between 1 and 50");
26
+ }
27
+ const runtime = createCliRuntime();
28
+ const context = await runtime.open({
29
+ name: "kibi_proof_prune",
30
+ effects: ["kb-mutate", "workspace-write"],
31
+ requiresProlog: true,
32
+ execute: async () => undefined,
33
+ }, {});
34
+ let completed = false;
35
+ try {
36
+ const result = await executePruneReceipts({
37
+ keep,
38
+ ...(options.test === undefined ? {} : { testId: options.test }),
39
+ }, context);
40
+ process.stdout.write(`${result.content[0]?.text ?? ""}\n`);
41
+ for (const row of result.structuredContent.tests) {
42
+ process.stdout.write(` ${row.testId}: ${row.before} -> ${row.after} receipt(s)\n`);
43
+ }
44
+ completed = true;
45
+ await runtime.afterSuccess({ name: "kibi_proof_prune" }, context);
46
+ return { exitCode: 0 };
47
+ }
48
+ finally {
49
+ await runtime.close(context, completed
50
+ ? { status: "success", result: 0 }
51
+ : { status: "error", error: 1 });
52
+ }
53
+ }
@@ -0,0 +1,37 @@
1
+ import { executeIngestProof } from "../operations/proof/ingest-proof.js";
2
+ import type { ProofIntegration } from "../proof/integrations.js";
3
+ import type { OperationRuntime } from "../public/operations/runtime-types.js";
4
+ import { readWorkspaceSnapshot } from "../public/operations/workspace-snapshot.js";
5
+ export type ProveCommandOptions = Readonly<{
6
+ testId?: string;
7
+ requirement?: string;
8
+ integration?: string;
9
+ integrationExcept?: string;
10
+ all?: boolean;
11
+ workspaceRoot?: string;
12
+ }>;
13
+ export type ProveCommandDependencies = Readonly<{
14
+ runtime?: OperationRuntime;
15
+ ingestProof?: typeof executeIngestProof;
16
+ }>;
17
+ type SelectedTest = Record<string, unknown>;
18
+ /**
19
+ * Describe which paths moved when a proof snapshot refusal fires, so
20
+ * consumers can see what kibi thinks changed instead of diffing by hand.
21
+ * Snapshot-relevant changes come first (receipt-only and ignored edits do
22
+ * not affect the hash), and the list is capped to keep the error readable.
23
+ */
24
+ export declare function describeWorkspaceDrift(snapshot: Awaited<ReturnType<typeof readWorkspaceSnapshot>>): string;
25
+ /**
26
+ * Parse a comma-separated integration selector ("a", "a,b,c") into a set of
27
+ * trimmed, non-empty ids. Empty selectors yield an empty set; blank items
28
+ * fail fast instead of silently narrowing the selection.
29
+ */
30
+ export declare function parseIntegrationSelector(value: string | undefined, flagName: string): Set<string>;
31
+ export declare function testId(test: SelectedTest): string;
32
+ export declare function commandEnvironment(integration: ProofIntegration, commandArgv: readonly string[], snapshot: string, workspaceRoot: string, testIds: readonly string[], outputPath: string): NodeJS.ProcessEnv;
33
+ export declare function proveCommand(options: ProveCommandOptions, deps?: ProveCommandDependencies): Promise<{
34
+ exitCode: number;
35
+ }>;
36
+ export {};
37
+ //# sourceMappingURL=prove.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prove.d.ts","sourceRoot":"","sources":["../../src/commands/prove.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AASjE,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAYnF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC,CAAC;AAGH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,kBAAkB,CAAC;CACzC,CAAC,CAAC;AAEH,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5C;;;;;GAKG;AAEH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,GAC1D,MAAM,CAiBR;AAED;;;;GAIG;AAEH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,QAAQ,EAAE,MAAM,GACf,GAAG,CAAC,MAAM,CAAC,CAUb;AAQD,wBAAgB,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEjD;AAkCD,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,UAAU,CAWnB;AA4KD,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,GAAE,wBAA6B,GAClC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAgL/B"}
@@ -0,0 +1,470 @@
1
+ import { spawn } from "node:child_process";
2
+ import { mkdir, readFile, rm, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { executeIngestProof } from "../operations/proof/ingest-proof.js";
5
+ import { PROOF_RUNS_DIR, loadProofIntegrations, resolveIntegration, } from "../proof/integrations.js";
6
+ import { convertJUnitXml } from "../proof/producers/junit-adapter.js";
7
+ import { convertTap } from "../proof/producers/tap-adapter.js";
8
+ import { loadEntities } from "../public/operations/discovery-entities.js";
9
+ import { ingestProofSpec } from "../public/operations/specs/proof.js";
10
+ import { readWorkspaceSnapshot } from "../public/operations/workspace-snapshot.js";
11
+ import { PROOF_RUN_VERSION, proofBindingsErrors, proofRunArtifactErrors, } from "../public/proof-protocol.js";
12
+ import { createCliRuntime } from "../runtime/cli-runtime.js";
13
+ /**
14
+ * Describe which paths moved when a proof snapshot refusal fires, so
15
+ * consumers can see what kibi thinks changed instead of diffing by hand.
16
+ * Snapshot-relevant changes come first (receipt-only and ignored edits do
17
+ * not affect the hash), and the list is capped to keep the error readable.
18
+ */
19
+ // implements REQ-kibi-verification-evidence-contract
20
+ export function describeWorkspaceDrift(snapshot) {
21
+ if (!snapshot.available)
22
+ return " (workspace snapshot unavailable)";
23
+ const changes = snapshot.snapshot.changes ?? [];
24
+ const relevant = changes.filter((change) => change.snapshotRelevant);
25
+ const pool = relevant.length > 0
26
+ ? relevant
27
+ : changes.filter((change) => !change.snapshotRelevant);
28
+ if (pool.length === 0) {
29
+ return " (git reported no workspace changes; the hash drift may come from file content that git treats as unchanged)";
30
+ }
31
+ const maxPaths = 10;
32
+ const listed = pool
33
+ .slice(0, maxPaths)
34
+ .map((change) => `${change.status.trim() || "M"} ${change.path}`);
35
+ const more = pool.length - listed.length;
36
+ return `; changed: ${listed.join(", ")}${more > 0 ? ` (+${more} more)` : ""}`;
37
+ }
38
+ /**
39
+ * Parse a comma-separated integration selector ("a", "a,b,c") into a set of
40
+ * trimmed, non-empty ids. Empty selectors yield an empty set; blank items
41
+ * fail fast instead of silently narrowing the selection.
42
+ */
43
+ // implements REQ-kibi-verification-evidence-contract
44
+ export function parseIntegrationSelector(value, flagName) {
45
+ if (value === undefined || value.trim() === "")
46
+ return new Set();
47
+ const ids = new Set();
48
+ for (const raw of value.split(",")) {
49
+ const id = raw.trim();
50
+ if (id === "")
51
+ throw new Error(`prove: ${flagName} contains an empty integration id`);
52
+ ids.add(id);
53
+ }
54
+ return ids;
55
+ }
56
+ function withId(entity) {
57
+ if (typeof entity.id !== "string" || entity.id === "")
58
+ throw new Error("prove: loaded test entity is missing an id");
59
+ return entity;
60
+ }
61
+ export function testId(test) {
62
+ return String(test.id);
63
+ }
64
+ function parseContract(test) {
65
+ const contract = test.proof_contract;
66
+ if (contract === null ||
67
+ typeof contract !== "object" ||
68
+ Array.isArray(contract))
69
+ return null;
70
+ return contract;
71
+ }
72
+ async function runChild(commandArgv, cwd, env) {
73
+ const [command, ...args] = commandArgv;
74
+ if (!command)
75
+ throw new Error("prove: integration command argv must be non-empty");
76
+ return await new Promise((resolve, reject) => {
77
+ const child = spawn(command, args, {
78
+ cwd,
79
+ env,
80
+ shell: false,
81
+ stdio: "inherit",
82
+ });
83
+ child.once("error", reject);
84
+ child.once("close", (code) => resolve(code ?? 1));
85
+ });
86
+ }
87
+ // implements REQ-kibi-verification-evidence-contract
88
+ export function commandEnvironment(integration, commandArgv, snapshot, workspaceRoot, testIds, outputPath) {
89
+ return {
90
+ ...process.env,
91
+ KIBI_PROOF_RUN: "1",
92
+ KIBI_PROOF_OUTPUT: outputPath,
93
+ KIBI_PROOF_SNAPSHOT: snapshot,
94
+ KIBI_PROOF_COMMAND_ARGV: JSON.stringify(commandArgv),
95
+ KIBI_PROOF_INTEGRATION: integration.id,
96
+ KIBI_PROOF_WORKSPACE: workspaceRoot,
97
+ KIBI_PROOF_TEST_IDS: JSON.stringify(testIds),
98
+ };
99
+ }
100
+ function collectBindings(tests) {
101
+ const bindings = [];
102
+ for (const test of tests) {
103
+ const raw = test.proof_bindings;
104
+ if (raw === undefined || raw === null)
105
+ continue;
106
+ if (!Array.isArray(raw))
107
+ continue;
108
+ const errors = proofBindingsErrors(raw);
109
+ if (errors.length > 0)
110
+ throw new Error(`prove: test ${test.id} has invalid proof_bindings: ${errors.join("; ")}`);
111
+ for (const entry of raw) {
112
+ const row = entry;
113
+ bindings.push({
114
+ symbol_id: String(row.symbol_id),
115
+ target: String(row.target),
116
+ ...(row.native_id !== undefined
117
+ ? { native_id: String(row.native_id) }
118
+ : {}),
119
+ ...(row.aliases !== undefined
120
+ ? { aliases: row.aliases.map(String) }
121
+ : {}),
122
+ });
123
+ }
124
+ }
125
+ return bindings;
126
+ }
127
+ function dedupeObligations(tests) {
128
+ const seen = new Set();
129
+ const results = [];
130
+ for (const test of tests) {
131
+ const contract = parseContract(test);
132
+ if (!contract)
133
+ continue;
134
+ for (const obligation of contract.required_proofs) {
135
+ const key = `${obligation.target}\0${obligation.symbol_id}`;
136
+ if (seen.has(key))
137
+ continue;
138
+ seen.add(key);
139
+ results.push({
140
+ symbol_id: obligation.symbol_id,
141
+ target: obligation.target,
142
+ outcome: "passed",
143
+ binding: "aggregate_run",
144
+ attempts: { status: "unavailable" },
145
+ });
146
+ }
147
+ }
148
+ return results;
149
+ }
150
+ function markAggregateFailure(results) {
151
+ return results.map((result) => ({ ...result, outcome: "failed" }));
152
+ }
153
+ async function selectTests(context, options) {
154
+ // Paginated: loading every test entity with full props in one query can
155
+ // exceed the Prolog output buffer once receipt histories grow.
156
+ const loadAll = async () => {
157
+ const pageSize = 25;
158
+ const all = [];
159
+ for (let offset = 0;; offset += pageSize) {
160
+ const page = await loadEntities(context.prolog, {
161
+ type: "test",
162
+ limit: pageSize,
163
+ offset,
164
+ });
165
+ all.push(...page);
166
+ if (page.length < pageSize)
167
+ return all;
168
+ }
169
+ };
170
+ let candidates = [];
171
+ if (options.testId) {
172
+ const found = await loadEntities(context.prolog, {
173
+ id: options.testId,
174
+ type: "test",
175
+ });
176
+ candidates = found.map(withId);
177
+ }
178
+ else if (options.requirement) {
179
+ const requirementId = options.requirement;
180
+ const scenarioResult = await context.prolog?.query(`findall([S,T], (kb_relationship(specified_by, '${requirementId}', S), (kb_relationship(verified_by, S, T) ; kb_relationship(validates, T, S)), kb_entity(T, test, _)), Rows)`);
181
+ const rowsRaw = scenarioResult?.success
182
+ ? scenarioResult.bindings.Rows
183
+ : undefined;
184
+ const ids = new Set();
185
+ if (typeof rowsRaw === "string") {
186
+ for (const match of rowsRaw.matchAll(/\[['"]?([^,\]]+)['"]?,['"]?([^,\]]+)['"]?\]/g)) {
187
+ const test = match[2];
188
+ if (test)
189
+ ids.add(test.trim());
190
+ }
191
+ }
192
+ const directResult = await context.prolog?.query(`findall(T, (kb_relationship(validates, T, '${requirementId}'), kb_entity(T, test, _)), Rows)`);
193
+ const directRaw = directResult?.success
194
+ ? directResult.bindings.Rows
195
+ : undefined;
196
+ if (typeof directRaw === "string") {
197
+ for (const match of directRaw.matchAll(/\[?['"]?([A-Za-z0-9_-]+)['"]?\]?/g)) {
198
+ const candidate = match[1];
199
+ if (candidate?.startsWith("TEST-"))
200
+ ids.add(candidate);
201
+ }
202
+ }
203
+ const all = await loadAll();
204
+ candidates = all.filter((entity) => ids.has(String(entity.id))).map(withId);
205
+ }
206
+ else {
207
+ candidates = (await loadAll()).map(withId);
208
+ }
209
+ const selected = candidates.filter((entity) => parseContract(entity) !== null);
210
+ const includeIds = parseIntegrationSelector(options.integration, "--integration");
211
+ const excludeIds = parseIntegrationSelector(options.integrationExcept, "--integration-except");
212
+ if (includeIds.size === 0 && excludeIds.size === 0)
213
+ return selected;
214
+ const filtered = selected.filter((entity) => {
215
+ const contract = parseContract(entity);
216
+ if (!contract)
217
+ return false;
218
+ if (includeIds.size > 0 && !includeIds.has(contract.integration))
219
+ return false;
220
+ if (excludeIds.size > 0 && excludeIds.has(contract.integration))
221
+ return false;
222
+ return true;
223
+ });
224
+ if (filtered.length === 0 && includeIds.size + excludeIds.size > 0) {
225
+ const requested = [
226
+ ...(includeIds.size > 0
227
+ ? [`integrations: ${[...includeIds].sort().join(", ")}`]
228
+ : []),
229
+ ...(excludeIds.size > 0
230
+ ? [`excluding: ${[...excludeIds].sort().join(", ")}`]
231
+ : []),
232
+ ].join("; ");
233
+ throw new Error(`prove: no proof-bearing tests match the integration selector (${requested})`);
234
+ }
235
+ return filtered;
236
+ }
237
+ function summarize(result) {
238
+ const parts = [`passed ${result.passed}`, `failed ${result.failed}`];
239
+ if (result.unchanged > 0)
240
+ parts.push(`unchanged ${result.unchanged}`);
241
+ return parts.join(", ");
242
+ }
243
+ // implements REQ-kibi-verification-evidence-contract
244
+ export async function proveCommand(options, deps = {}) {
245
+ const workspaceRoot = options.workspaceRoot ?? process.cwd();
246
+ const ingestProof = deps.ingestProof ?? executeIngestProof;
247
+ const runtime = deps.runtime ??
248
+ createCliRuntime(options.workspaceRoot === undefined ? {} : { workspaceRoot });
249
+ const context = await runtime.open(ingestProofSpec, {
250
+ ...(options.workspaceRoot === undefined ? {} : { workspaceRoot }),
251
+ });
252
+ let completed = false;
253
+ try {
254
+ const integrations = loadProofIntegrations(context.workspaceRoot);
255
+ if (!integrations.available)
256
+ throw new Error(`prove: ${integrations.error}`);
257
+ const selected = await selectTests(context, options);
258
+ if (selected.length === 0) {
259
+ process.stdout.write(`${JSON.stringify({ proved: 0, failed: 0, message: "no proof-bearing tests selected" })}\n`);
260
+ completed = true;
261
+ return { exitCode: 0 };
262
+ }
263
+ const before = await readWorkspaceSnapshot(context);
264
+ if (!before.available)
265
+ throw new Error(`prove: ${before.error}`);
266
+ const snapshot = before.snapshot.hash;
267
+ // Packed contracts run in separate processes; one shared packed-tarball
268
+ // cache area per campaign snapshot replaces dozens of repeated packs and
269
+ // installs with a single population. The snapshot hash is the provenance
270
+ // key: different workspace state never sees another campaign's artifacts.
271
+ process.env.KIBI_E2E_PACK_CACHE_KEY ??= snapshot;
272
+ const groups = new Map();
273
+ for (const test of selected) {
274
+ const contract = parseContract(test);
275
+ if (!contract)
276
+ continue;
277
+ const list = groups.get(contract.integration) ?? [];
278
+ list.push(test);
279
+ groups.set(contract.integration, list);
280
+ }
281
+ const runsDir = path.join(context.workspaceRoot, PROOF_RUNS_DIR);
282
+ await mkdir(runsDir, { recursive: true });
283
+ const ingestResults = [];
284
+ const failures = [];
285
+ for (const [integrationId, tests] of groups) {
286
+ const integration = resolveIntegration(integrations.integrations, integrationId);
287
+ if (!integration) {
288
+ failures.push(`integration '${integrationId}' (required by ${tests.map((t) => t.id).join(", ")}) is not configured in .kb/proof/integrations.json`);
289
+ continue;
290
+ }
291
+ const commandArgv = [...integration.command];
292
+ const artifactPath = path.resolve(context.workspaceRoot, integration.artifact ??
293
+ path.join(PROOF_RUNS_DIR, `${integrationId}.json`));
294
+ await mkdir(path.dirname(artifactPath), { recursive: true });
295
+ await rm(artifactPath, { force: true });
296
+ const env = commandEnvironment(integration, commandArgv, snapshot, context.workspaceRoot, tests.map((test) => String(test.id)), artifactPath);
297
+ const startedAt = new Date().toISOString();
298
+ let exitCode;
299
+ try {
300
+ exitCode = await runChild(commandArgv, context.workspaceRoot, env);
301
+ }
302
+ catch (error) {
303
+ failures.push(`integration '${integrationId}' failed to start: ${error instanceof Error ? error.message : String(error)}`);
304
+ continue;
305
+ }
306
+ const finishedAt = new Date().toISOString();
307
+ let artifact;
308
+ try {
309
+ artifact = await buildArtifact({
310
+ integration,
311
+ commandArgv,
312
+ exitCode,
313
+ startedAt,
314
+ finishedAt,
315
+ artifactPath,
316
+ snapshot,
317
+ tests,
318
+ });
319
+ }
320
+ catch (error) {
321
+ failures.push(`integration '${integrationId}': ${error instanceof Error ? error.message : String(error)}`);
322
+ continue;
323
+ }
324
+ const artifactErrors = proofRunArtifactErrors(artifact);
325
+ if (artifactErrors.length > 0) {
326
+ failures.push(`integration '${integrationId}' produced an invalid kibi.proof-run.v1 artifact: ${artifactErrors.join("; ")}`);
327
+ continue;
328
+ }
329
+ await mkdir(path.dirname(artifactPath), { recursive: true });
330
+ await writeFile(artifactPath, `${JSON.stringify(artifact, null, 2)}\n`, "utf8");
331
+ const afterRun = await readWorkspaceSnapshot(context);
332
+ if (!afterRun.available || afterRun.snapshot.hash !== snapshot) {
333
+ failures.push(`integration '${integrationId}' changed the tracked workspace during proof execution; proof is bound to snapshot ${snapshot}${describeWorkspaceDrift(afterRun)}`);
334
+ continue;
335
+ }
336
+ const ingested = await ingestProof({
337
+ snapshot,
338
+ artifact: artifact,
339
+ testIds: tests.map((test) => String(test.id)),
340
+ }, context);
341
+ ingestResults.push(ingested.structuredContent);
342
+ const afterIngest = await readWorkspaceSnapshot(context);
343
+ if (!afterIngest.available || afterIngest.snapshot.hash !== snapshot) {
344
+ failures.push(`the tracked workspace changed while receipts were applied; re-run kibi prove${describeWorkspaceDrift(afterIngest)}`);
345
+ }
346
+ }
347
+ const passed = ingestResults.reduce((sum, result) => sum + result.passed, 0);
348
+ const failed = ingestResults.reduce((sum, result) => sum + result.failed, 0);
349
+ const unchanged = ingestResults.reduce((sum, result) => sum + result.unchanged, 0);
350
+ const summary = {
351
+ proved: passed,
352
+ failed,
353
+ unchanged,
354
+ runs: ingestResults.map((result) => ({
355
+ integration: result.integration,
356
+ summary: summarize(result),
357
+ results: result.results,
358
+ })),
359
+ ...(failures.length > 0 ? { failures } : {}),
360
+ };
361
+ process.stdout.write(`${JSON.stringify(summary)}\n`);
362
+ completed = true;
363
+ await runtime.afterSuccess(ingestProofSpec, context);
364
+ return { exitCode: failures.length > 0 || failed > 0 ? 1 : 0 };
365
+ }
366
+ finally {
367
+ await runtime.close(context, completed
368
+ ? { status: "success", result: 0 }
369
+ : { status: "error", error: 1 });
370
+ }
371
+ }
372
+ async function buildArtifact(input) {
373
+ const { integration, commandArgv, exitCode, startedAt, finishedAt, artifactPath, snapshot, tests, } = input;
374
+ const run = (outcome) => ({
375
+ outcome,
376
+ exit_code: exitCode,
377
+ started_at: startedAt,
378
+ finished_at: finishedAt,
379
+ });
380
+ if (integration.producer === "command") {
381
+ const results = dedupeObligations(tests);
382
+ return {
383
+ version: PROOF_RUN_VERSION,
384
+ producer: {
385
+ name: "kibi-command-producer",
386
+ ...(integration.producer_version !== undefined
387
+ ? { version: integration.producer_version }
388
+ : {}),
389
+ },
390
+ integration: integration.id,
391
+ command_argv: [...commandArgv],
392
+ code_snapshot: snapshot,
393
+ environment: {
394
+ os: process.platform,
395
+ arch: process.arch,
396
+ runtime: { name: "node", version: process.version },
397
+ },
398
+ run: run(exitCode === 0 ? "passed" : "failed"),
399
+ proof_results: exitCode === 0 ? results : markAggregateFailure(results),
400
+ };
401
+ }
402
+ if (integration.producer === "junit" || integration.producer === "tap") {
403
+ const nativePath = integration.artifact;
404
+ if (!nativePath)
405
+ throw new Error(`producer '${integration.producer}' requires an artifact path in .kb/proof/integrations.json`);
406
+ let native;
407
+ try {
408
+ native = await readFile(path.resolve(context_path(nativePath)), "utf8");
409
+ }
410
+ catch {
411
+ throw new Error(`producer '${integration.producer}' did not produce its native report at ${nativePath}`);
412
+ }
413
+ const bindings = collectBindings(tests);
414
+ const conversion = integration.producer === "junit"
415
+ ? convertJUnitXml(native, bindings)
416
+ : convertTap(native, bindings);
417
+ if (conversion.fatal) {
418
+ throw new Error(`producer '${integration.producer}' rejected its native report${conversion.diagnostics.length > 0 ? `: ${conversion.diagnostics.join("; ")}` : ""}`);
419
+ }
420
+ if (conversion.results.length === 0)
421
+ throw new Error(`producer '${integration.producer}' produced no bound proof results${conversion.diagnostics.length > 0 ? `: ${conversion.diagnostics.join("; ")}` : ""}`);
422
+ return {
423
+ version: PROOF_RUN_VERSION,
424
+ producer: {
425
+ name: `kibi-${integration.producer}-adapter`,
426
+ ...(integration.producer_version !== undefined
427
+ ? { version: integration.producer_version }
428
+ : {}),
429
+ },
430
+ integration: integration.id,
431
+ command_argv: [...commandArgv],
432
+ code_snapshot: snapshot,
433
+ environment: {
434
+ os: process.platform,
435
+ arch: process.arch,
436
+ runtime: { name: "node", version: process.version },
437
+ },
438
+ run: run(conversion.results.every((result) => result.outcome === "passed")
439
+ ? "passed"
440
+ : "failed"),
441
+ proof_results: conversion.results,
442
+ ...(conversion.diagnostics.length > 0
443
+ ? { diagnostics: conversion.diagnostics }
444
+ : {}),
445
+ };
446
+ }
447
+ // Self-emitting producers (playwright and custom): read the emitted
448
+ // kibi.proof-run.v1 artifact and enforce the process outcome.
449
+ let parsed;
450
+ try {
451
+ parsed = JSON.parse(await readFile(artifactPath, "utf8"));
452
+ }
453
+ catch {
454
+ throw new Error(`producer '${integration.producer}' did not emit a readable kibi.proof-run.v1 artifact at ${artifactPath}`);
455
+ }
456
+ const artifact = parsed;
457
+ const runRecord = parsed.run;
458
+ const reportedOutcome = runRecord?.outcome;
459
+ if (exitCode !== 0) {
460
+ if (reportedOutcome === "passed") {
461
+ throw new Error(`producer '${integration.producer}' reported run.outcome 'passed' but the process exited with code ${exitCode}`);
462
+ }
463
+ }
464
+ return artifact;
465
+ }
466
+ function context_path(nativePath) {
467
+ return path.isAbsolute(nativePath)
468
+ ? nativePath
469
+ : path.join(process.cwd(), nativePath);
470
+ }