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
@@ -1,3 +1,13 @@
1
+ export function isTrailingCommaBeforeCloser(
2
+ character: string,
3
+ nextCharacter: string | undefined,
4
+ ): boolean {
5
+ return (
6
+ character === "," &&
7
+ (nextCharacter === ")" || nextCharacter === "]" || nextCharacter === "}")
8
+ );
9
+ }
10
+
1
11
  function normalizeDiffContent(line: string): string {
2
12
  let normalized = "";
3
13
  let quote: '"' | "'" | "`" | null = null;
@@ -62,10 +72,7 @@ function removeSyntacticTrailingCommas(content: string): string {
62
72
  }
63
73
 
64
74
  const nextCharacter = content[index + 1];
65
- if (
66
- character === "," &&
67
- (nextCharacter === ")" || nextCharacter === "]" || nextCharacter === "}")
68
- ) {
75
+ if (isTrailingCommaBeforeCloser(character, nextCharacter)) {
69
76
  continue;
70
77
  }
71
78
 
@@ -5,6 +5,8 @@ import type {
5
5
  ExtractionResult,
6
6
  } from "../../extractors/markdown.js";
7
7
  import {
8
+ normalizeEntityId,
9
+ parseAtomList,
8
10
  parseEntityFromList,
9
11
  parseListOfLists,
10
12
  parseTriples,
@@ -15,47 +17,36 @@ import {
15
17
  toPrologList,
16
18
  } from "../operations/prolog-json.js";
17
19
  import type { PrologPort } from "../operations/runtime-types.js";
20
+ import { PROOF_RECEIPT_MAX_AGE_SECONDS } from "../proof-receipt.js";
21
+ import relationshipSchema from "../schemas/relationship.js";
18
22
  import {
19
23
  analyzeTelemetryAcceptance,
20
24
  createTelemetryAcceptanceDiagnostics,
21
25
  parseTelemetryUsageLog,
22
26
  } from "../telemetry-acceptance.js";
23
- import { VERIFICATION_RECEIPT_MAX_AGE_SECONDS } from "../verification-receipt.js";
24
27
  import { createCoverageDepthQualityDiagnostics } from "./coverage-depth-quality.js";
25
28
  import { createRequirementQualityDiagnostics } from "./requirement-quality.js";
26
29
  import { createSymbolQualityDiagnostics } from "./symbol-quality.js";
27
30
  import type { QualityDiagnostic } from "./types.js";
28
31
 
29
- const RELATIONSHIP_TYPES = [
30
- "depends_on",
31
- "executable_for",
32
- "specified_by",
33
- "verified_by",
34
- "validates",
35
- "implements",
36
- "covered_by",
37
- "constrained_by",
38
- "constrains",
39
- "requires_property",
40
- "requires_predicate",
41
- "guards",
42
- "publishes",
43
- "consumes",
44
- "supersedes",
45
- "relates_to",
46
- ] as const;
32
+ const RELATIONSHIP_TYPES: readonly string[] =
33
+ relationshipSchema.properties.type.enum;
34
+ const ENTITY_BATCH_SIZE = 32;
35
+ const PROLOG_OUTPUT_CAPACITY_MARKER =
36
+ "Query exceeded bounded Prolog output capacity (ENOBUFS)";
37
+ const ENTITY_IDS_QUERY = "findall(Id, kb_entity(Id, _, _), Ids)";
47
38
 
48
39
  type FullKbQualityDiagnosticsOptions = {
49
- readonly prolog: Pick<PrologPort, "query">;
40
+ readonly prolog: Pick<PrologPort, "query" | "queryEntities">;
50
41
  readonly hardViolationEntityIds?: ReadonlySet<string>;
51
42
  readonly maxDiagnostics?: number;
52
43
  readonly workspaceRoot?: string;
53
44
  readonly now?: Date;
54
- readonly verificationSnapshot?: string;
45
+ readonly proofSnapshot?: string;
55
46
  readonly checkedAt?: string;
56
47
  };
57
48
 
58
- type CoveragePayload = Readonly<{
49
+ type CoverageEvidencePayload = Readonly<{
59
50
  readonly rows?: readonly Readonly<Record<string, unknown>>[];
60
51
  }>;
61
52
 
@@ -89,6 +80,24 @@ function optionalStringArrayField(
89
80
  return value.map((item) => String(item));
90
81
  }
91
82
 
83
+ function optionalBooleanField(
84
+ entity: Record<string, unknown>,
85
+ key: string,
86
+ ): boolean | undefined {
87
+ const value = entity[key];
88
+ return typeof value === "boolean" ? value : undefined;
89
+ }
90
+
91
+ function optionalObjectField(
92
+ entity: Record<string, unknown>,
93
+ key: string,
94
+ ): Record<string, unknown> | undefined {
95
+ const value = entity[key];
96
+ return value && typeof value === "object" && !Array.isArray(value)
97
+ ? (value as Record<string, unknown>)
98
+ : undefined;
99
+ }
100
+
92
101
  function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
93
102
  const extracted: ExtractedEntity = {
94
103
  id: stringField(entity, "id"),
@@ -113,6 +122,41 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
113
122
  if (semanticText !== undefined) extracted.semantic_text = semanticText;
114
123
  const logicClaims = optionalStringArrayField(entity, "logic_claims");
115
124
  if (logicClaims !== undefined) extracted.logic_claims = logicClaims;
125
+ const semanticClauses = optionalStringArrayField(entity, "semantic_clauses");
126
+ if (semanticClauses !== undefined)
127
+ extracted.semantic_clauses = semanticClauses;
128
+ const semanticInventoryVersion = optionalStringField(
129
+ entity,
130
+ "semantic_inventory_version",
131
+ );
132
+ if (semanticInventoryVersion === "kibi.semantic-inventory.v1") {
133
+ extracted.semantic_inventory_version = semanticInventoryVersion;
134
+ }
135
+ const semanticSourceField = optionalStringField(
136
+ entity,
137
+ "semantic_source_field",
138
+ );
139
+ if (
140
+ semanticSourceField === "semantic_text" ||
141
+ semanticSourceField === "text_ref" ||
142
+ semanticSourceField === "title"
143
+ ) {
144
+ extracted.semantic_source_field = semanticSourceField;
145
+ }
146
+ const semanticSourceHash = optionalStringField(
147
+ entity,
148
+ "semantic_source_hash",
149
+ );
150
+ if (semanticSourceHash !== undefined) {
151
+ extracted.semantic_source_hash = semanticSourceHash;
152
+ }
153
+ const semanticInventory = entity.semantic_inventory;
154
+ if (Array.isArray(semanticInventory)) {
155
+ extracted.semantic_inventory = semanticInventory as readonly Record<
156
+ string,
157
+ unknown
158
+ >[];
159
+ }
116
160
  const granularityReason = optionalStringField(entity, "granularity_reason");
117
161
  if (granularityReason !== undefined) {
118
162
  extracted.granularity_reason = granularityReason;
@@ -129,6 +173,34 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
129
173
  ) {
130
174
  extracted.verification_scope = verificationScope;
131
175
  }
176
+ const verificationPerspective = optionalStringField(
177
+ entity,
178
+ "verification_perspective",
179
+ );
180
+ if (
181
+ verificationPerspective === "internal" ||
182
+ verificationPerspective === "consumer"
183
+ ) {
184
+ extracted.verification_perspective = verificationPerspective;
185
+ }
186
+ const proofContract = optionalObjectField(entity, "proof_contract");
187
+ if (proofContract !== undefined) {
188
+ extracted.proof_contract = proofContract as NonNullable<
189
+ ExtractedEntity["proof_contract"]
190
+ >;
191
+ }
192
+ const proofBindings = entity.proof_bindings;
193
+ if (Array.isArray(proofBindings)) {
194
+ extracted.proof_bindings = proofBindings as NonNullable<
195
+ ExtractedEntity["proof_bindings"]
196
+ >;
197
+ }
198
+ const proofReceipts = entity.proof_receipts;
199
+ if (Array.isArray(proofReceipts)) {
200
+ extracted.proof_receipts = proofReceipts as NonNullable<
201
+ ExtractedEntity["proof_receipts"]
202
+ >;
203
+ }
132
204
  const sourceLine = optionalNumberField(entity, "sourceLine");
133
205
  if (sourceLine !== undefined) extracted.sourceLine = sourceLine;
134
206
  const sourceColumn = optionalNumberField(entity, "sourceColumn");
@@ -145,22 +217,78 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
145
217
  factKind === "observation" ||
146
218
  factKind === "meta" ||
147
219
  factKind === "predicate_schema" ||
148
- factKind === "predicate"
220
+ factKind === "predicate" ||
221
+ factKind === "rule_schema" ||
222
+ factKind === "rule"
149
223
  ) {
150
224
  extracted.fact_kind = factKind;
151
225
  }
152
- const claimKey = optionalStringField(entity, "claim_key");
153
- if (claimKey !== undefined) extracted.claim_key = claimKey;
154
- const claimText = optionalStringField(entity, "claim_text");
155
- if (claimText !== undefined) extracted.claim_text = claimText;
156
- const predicateName = optionalStringField(entity, "predicate_name");
157
- if (predicateName !== undefined) extracted.predicate_name = predicateName;
158
- const predicateNamespace = optionalStringField(entity, "predicate_namespace");
159
- if (predicateNamespace !== undefined) {
160
- extracted.predicate_namespace = predicateNamespace;
226
+ for (const field of [
227
+ "subject_key",
228
+ "property_key",
229
+ "value_string",
230
+ "unit",
231
+ "scope",
232
+ "valid_from",
233
+ "valid_to",
234
+ "canonical_key",
235
+ "claim_key",
236
+ "claim_text",
237
+ "predicate_name",
238
+ "predicate_namespace",
239
+ "rule_hash",
240
+ "rule_schema_id",
241
+ "rule_name",
242
+ "semantic_key",
243
+ ] as const) {
244
+ const value = optionalStringField(entity, field);
245
+ if (value !== undefined) extracted[field] = value;
246
+ }
247
+ const operator = optionalStringField(entity, "operator");
248
+ if (
249
+ operator === "eq" ||
250
+ operator === "neq" ||
251
+ operator === "lt" ||
252
+ operator === "lte" ||
253
+ operator === "gt" ||
254
+ operator === "gte"
255
+ ) {
256
+ extracted.operator = operator;
161
257
  }
258
+ const valueType = optionalStringField(entity, "value_type");
259
+ if (
260
+ valueType === "string" ||
261
+ valueType === "int" ||
262
+ valueType === "number" ||
263
+ valueType === "bool"
264
+ ) {
265
+ extracted.value_type = valueType;
266
+ }
267
+ const polarity = optionalStringField(entity, "polarity");
268
+ if (
269
+ polarity === "require" ||
270
+ polarity === "forbid" ||
271
+ polarity === "assert" ||
272
+ polarity === "deny"
273
+ ) {
274
+ extracted.polarity = polarity;
275
+ }
276
+ const valueInt = optionalNumberField(entity, "value_int");
277
+ if (valueInt !== undefined) extracted.value_int = valueInt;
278
+ const valueNumber = optionalNumberField(entity, "value_number");
279
+ if (valueNumber !== undefined) extracted.value_number = valueNumber;
162
280
  const predicateArity = optionalNumberField(entity, "predicate_arity");
163
281
  if (predicateArity !== undefined) extracted.predicate_arity = predicateArity;
282
+ const claimSpanStart = optionalNumberField(entity, "claim_span_start");
283
+ if (claimSpanStart !== undefined) extracted.claim_span_start = claimSpanStart;
284
+ const claimSpanEnd = optionalNumberField(entity, "claim_span_end");
285
+ if (claimSpanEnd !== undefined) extracted.claim_span_end = claimSpanEnd;
286
+ const valueBool = optionalBooleanField(entity, "value_bool");
287
+ if (valueBool !== undefined) extracted.value_bool = valueBool;
288
+ const closedWorld = optionalBooleanField(entity, "closed_world");
289
+ if (closedWorld !== undefined) extracted.closed_world = closedWorld;
290
+ const ruleIr = optionalObjectField(entity, "rule_ir");
291
+ if (ruleIr !== undefined) extracted.rule_ir = ruleIr;
164
292
  for (const field of [
165
293
  "argument_names",
166
294
  "argument_types",
@@ -182,25 +310,298 @@ function sourceFileFor(entity: Record<string, unknown>): string | undefined {
182
310
  );
183
311
  }
184
312
 
185
- async function loadKbExtractionResults(
313
+ class BoundedEntityProjectionError extends Error {
314
+ constructor(message: string) {
315
+ super(message);
316
+ this.name = "BoundedEntityProjectionError";
317
+ }
318
+ }
319
+
320
+ function isOutputCapacityError(error: string | undefined): boolean {
321
+ return error?.includes(PROLOG_OUTPUT_CAPACITY_MARKER) === true;
322
+ }
323
+
324
+ function parseAuthoritativeEntityIds(raw: string): string[] {
325
+ const trimmed = raw.trim();
326
+ if (
327
+ trimmed !== "[]" &&
328
+ (!trimmed.startsWith("[") || !trimmed.endsWith("]"))
329
+ ) {
330
+ throw new Error("Full KB entity ID enumeration returned malformed data");
331
+ }
332
+ const ids = parseAtomList(trimmed);
333
+ if (ids.some((id) => id.length === 0)) {
334
+ throw new Error("Full KB entity ID enumeration returned an empty ID");
335
+ }
336
+ return ids;
337
+ }
338
+
339
+ function validateEntityBatch(
340
+ requestedIds: readonly string[],
341
+ entities: readonly Record<string, unknown>[],
342
+ ): Record<string, unknown>[] {
343
+ const requested = new Set<string>();
344
+ for (const id of requestedIds) {
345
+ const normalizedId = normalizeEntityId(id);
346
+ if (normalizedId.length === 0 || requested.has(normalizedId)) {
347
+ throw new Error(
348
+ "Full KB bounded entity projection returned duplicate or empty requested IDs",
349
+ );
350
+ }
351
+ requested.add(normalizedId);
352
+ }
353
+
354
+ const returned = new Map<string, Record<string, unknown>>();
355
+ for (const entity of entities) {
356
+ const id = stringField(entity, "id");
357
+ const type = stringField(entity, "type");
358
+ const normalizedId = normalizeEntityId(id);
359
+ if (normalizedId.length === 0 || type.length === 0) {
360
+ throw new Error(
361
+ "Full KB bounded entity projection returned a malformed entity row",
362
+ );
363
+ }
364
+ if (!requested.has(normalizedId) || returned.has(normalizedId)) {
365
+ throw new Error(
366
+ `Full KB bounded entity projection returned an unexpected entity ID: ${normalizedId}`,
367
+ );
368
+ }
369
+ returned.set(normalizedId, entity);
370
+ }
371
+
372
+ const missing = [...requested.keys()].filter((id) => !returned.has(id));
373
+ if (missing.length > 0) {
374
+ throw new Error(
375
+ `Full KB bounded entity projection returned an incomplete page; missing ${missing.join(", ")}`,
376
+ );
377
+ }
378
+
379
+ return [...requested.keys()].map(
380
+ (id) => returned.get(id) as Record<string, unknown>,
381
+ );
382
+ }
383
+
384
+ function validateIndexedEntityPage(
385
+ entities: readonly Record<string, unknown>[],
386
+ seenIds: ReadonlySet<string>,
387
+ ): Record<string, unknown>[] {
388
+ const pageIds = new Set<string>();
389
+ for (const entity of entities) {
390
+ const id = normalizeEntityId(stringField(entity, "id"));
391
+ const type = stringField(entity, "type");
392
+ if (id.length === 0 || type.length === 0) {
393
+ throw new Error(
394
+ "Full KB paginated entity projection returned a malformed entity row",
395
+ );
396
+ }
397
+ if (pageIds.has(id) || seenIds.has(id)) {
398
+ throw new Error(
399
+ `Full KB paginated entity projection returned duplicate entity ID: ${id}`,
400
+ );
401
+ }
402
+ pageIds.add(id);
403
+ }
404
+ return [...entities];
405
+ }
406
+
407
+ function isOutputCapacityException(error: unknown): boolean {
408
+ return isOutputCapacityError(
409
+ error instanceof Error ? error.message : String(error),
410
+ );
411
+ }
412
+
413
+ async function loadIndexedEntityProjection(
414
+ queryEntities: NonNullable<PrologPort["queryEntities"]>,
415
+ ): Promise<Record<string, unknown>[]> {
416
+ const entities: Record<string, unknown>[] = [];
417
+ const seenIds = new Set<string>();
418
+ let offset = 0;
419
+ let pageSize = ENTITY_BATCH_SIZE;
420
+ let totalCount: number | undefined;
421
+ type EntityPage = Awaited<ReturnType<typeof queryEntities>>;
422
+
423
+ while (totalCount === undefined || offset < totalCount) {
424
+ let page: EntityPage;
425
+ try {
426
+ page = await queryEntities({ limit: pageSize, offset });
427
+ } catch (error) {
428
+ if (!isOutputCapacityException(error) || pageSize === 1) {
429
+ throw error;
430
+ }
431
+ pageSize = Math.ceil(pageSize / 2);
432
+ continue;
433
+ }
434
+
435
+ if (
436
+ !Number.isInteger(page.count) ||
437
+ page.count < 0 ||
438
+ (totalCount !== undefined && page.count !== totalCount)
439
+ ) {
440
+ throw new Error(
441
+ "Full KB paginated entity projection returned an inconsistent count",
442
+ );
443
+ }
444
+ totalCount ??= page.count;
445
+ if (page.entities.length > pageSize) {
446
+ throw new Error(
447
+ "Full KB paginated entity projection returned an oversized page",
448
+ );
449
+ }
450
+ const pageEntities = validateIndexedEntityPage(page.entities, seenIds);
451
+ if (offset + pageEntities.length > totalCount) {
452
+ throw new Error(
453
+ "Full KB paginated entity projection returned more rows than its count",
454
+ );
455
+ }
456
+ if (pageEntities.length === 0 && offset < totalCount) {
457
+ throw new Error(
458
+ "Full KB paginated entity projection returned an incomplete page",
459
+ );
460
+ }
461
+ for (const entity of pageEntities) {
462
+ seenIds.add(normalizeEntityId(stringField(entity, "id")));
463
+ }
464
+ entities.push(...pageEntities);
465
+ offset += pageEntities.length;
466
+ if (offset < totalCount && pageEntities.length < pageSize) {
467
+ throw new Error(
468
+ "Full KB paginated entity projection returned an incomplete page",
469
+ );
470
+ }
471
+ }
472
+
473
+ if (entities.length !== totalCount) {
474
+ throw new Error(
475
+ "Full KB paginated entity projection returned an incomplete result",
476
+ );
477
+ }
478
+ return entities;
479
+ }
480
+
481
+ async function loadEntityBatch(
186
482
  prolog: Pick<PrologPort, "query">,
187
- ): Promise<ExtractionResult[]> {
188
- const entityResult = await prolog.query(
189
- "findall([Id,Type,Props], kb_entity(Id, Type, Props), Results)",
483
+ ids: readonly string[],
484
+ ): Promise<Record<string, unknown>[]> {
485
+ const idTerms = ids.map((id) => toPrologAtom(id)).join(",");
486
+ const result = await prolog.query(
487
+ `findall([Id,Type,Props], (member(Id, [${idTerms}]), kb_entity(Id, Type, Props)), Results)`,
488
+ );
489
+ if (!result.success) {
490
+ const message = result.error ?? "Unknown error";
491
+ if (isOutputCapacityError(result.error)) {
492
+ throw new BoundedEntityProjectionError(message);
493
+ }
494
+ throw new Error(
495
+ `Full KB bounded entity projection query failed: ${message}`,
496
+ );
497
+ }
498
+
499
+ const rawRows = result.bindings.Results;
500
+ if (rawRows === undefined) {
501
+ throw new Error(
502
+ "Full KB bounded entity projection query returned no Results binding",
503
+ );
504
+ }
505
+ return validateEntityBatch(
506
+ ids,
507
+ parseListOfLists(rawRows).map(parseEntityFromList),
190
508
  );
191
- const entities = entityResult.bindings.Results
192
- ? parseListOfLists(entityResult.bindings.Results).map(parseEntityFromList)
193
- : [];
509
+ }
510
+
511
+ async function loadEntityBatchAdaptively(
512
+ prolog: Pick<PrologPort, "query">,
513
+ ids: readonly string[],
514
+ ): Promise<Record<string, unknown>[]> {
515
+ try {
516
+ return await loadEntityBatch(prolog, ids);
517
+ } catch (error) {
518
+ if (!(error instanceof BoundedEntityProjectionError)) throw error;
519
+ if (ids.length === 1) {
520
+ throw new Error(
521
+ `Full KB entity projection failed for ${ids[0]}: ${error.message}`,
522
+ );
523
+ }
524
+ const midpoint = Math.ceil(ids.length / 2);
525
+ const left = await loadEntityBatchAdaptively(
526
+ prolog,
527
+ ids.slice(0, midpoint),
528
+ );
529
+ const right = await loadEntityBatchAdaptively(prolog, ids.slice(midpoint));
530
+ return [...left, ...right];
531
+ }
532
+ }
533
+
534
+ async function loadBoundedEntityProjection(
535
+ prolog: Pick<PrologPort, "query">,
536
+ ): Promise<Record<string, unknown>[]> {
537
+ const idsResult = await prolog.query(ENTITY_IDS_QUERY);
538
+ if (!idsResult.success) {
539
+ throw new Error(
540
+ `Full KB entity ID enumeration query failed: ${idsResult.error ?? "Unknown error"}`,
541
+ );
542
+ }
543
+ const rawIds = idsResult.bindings.Ids;
544
+ if (rawIds === undefined) {
545
+ throw new Error(
546
+ "Full KB entity ID enumeration query returned no Ids binding",
547
+ );
548
+ }
549
+ const ids = parseAuthoritativeEntityIds(rawIds);
550
+ const entities: Record<string, unknown>[] = [];
551
+ for (let offset = 0; offset < ids.length; offset += ENTITY_BATCH_SIZE) {
552
+ entities.push(
553
+ ...(await loadEntityBatchAdaptively(
554
+ prolog,
555
+ ids.slice(offset, offset + ENTITY_BATCH_SIZE),
556
+ )),
557
+ );
558
+ }
559
+ return entities;
560
+ }
561
+
562
+ export async function loadKbExtractionResults(
563
+ prolog: Pick<PrologPort, "query" | "queryEntities">,
564
+ ): Promise<ExtractionResult[]> {
565
+ let entities: Record<string, unknown>[];
566
+ if (prolog.queryEntities !== undefined) {
567
+ entities = await loadIndexedEntityProjection(
568
+ prolog.queryEntities.bind(prolog),
569
+ );
570
+ } else {
571
+ const entityResult = await prolog.query(
572
+ "findall([Id,Type,Props], kb_entity(Id, Type, Props), Results)",
573
+ );
574
+ if (entityResult.success) {
575
+ entities = entityResult.bindings.Results
576
+ ? parseListOfLists(entityResult.bindings.Results).map(
577
+ parseEntityFromList,
578
+ )
579
+ : [];
580
+ } else if (isOutputCapacityError(entityResult.error)) {
581
+ entities = await loadBoundedEntityProjection(prolog);
582
+ } else {
583
+ throw new Error(
584
+ `Full KB entity projection query failed: ${entityResult.error ?? "Unknown error"}`,
585
+ );
586
+ }
587
+ }
194
588
  const relationships = new Map<string, ExtractionResult["relationships"]>();
195
589
 
196
590
  for (const relationshipType of RELATIONSHIP_TYPES) {
197
591
  const relResult = await prolog.query(
198
592
  `findall([From,To,'${relationshipType}'], kb_relationship(${relationshipType}, From, To), Rels)`,
199
593
  );
594
+ if (!relResult.success) {
595
+ throw new Error(
596
+ `Full KB relationship projection query failed for ${relationshipType}: ${relResult.error ?? "Unknown error"}`,
597
+ );
598
+ }
200
599
  const rows = relResult.bindings.Rels
201
600
  ? parseTriples(relResult.bindings.Rels)
202
601
  : [];
203
- for (const [from, to, type] of rows) {
602
+ for (const [rawFrom, rawTo, type] of rows) {
603
+ const from = normalizeEntityId(rawFrom);
604
+ const to = normalizeEntityId(rawTo);
204
605
  const current = relationships.get(from) ?? [];
205
606
  current.push({ from, to, type });
206
607
  relationships.set(from, current);
@@ -220,18 +621,9 @@ async function loadKbExtractionResults(
220
621
  });
221
622
  }
222
623
 
223
- function stringArrayField(value: unknown): readonly string[] | undefined {
224
- return Array.isArray(value) ? value.map(String) : undefined;
225
- }
226
-
227
- function proofStage(
228
- row: Readonly<Record<string, unknown>>,
624
+ export function passingE2eStage(
625
+ passingE2e: unknown,
229
626
  ): Readonly<Record<string, unknown>> | undefined {
230
- const stages = row.proofStages;
231
- if (!stages || typeof stages !== "object" || Array.isArray(stages)) {
232
- return undefined;
233
- }
234
- const passingE2e = (stages as Record<string, unknown>).passingE2e;
235
627
  return passingE2e &&
236
628
  typeof passingE2e === "object" &&
237
629
  !Array.isArray(passingE2e)
@@ -239,10 +631,14 @@ function proofStage(
239
631
  : undefined;
240
632
  }
241
633
 
634
+ function stringArrayField(value: unknown): readonly string[] | undefined {
635
+ return Array.isArray(value) ? value.map(String) : undefined;
636
+ }
637
+
242
638
  async function loadCoverageProofEvidence(
243
639
  prolog: Pick<PrologPort, "query">,
244
640
  requirementCount: number,
245
- verificationSnapshot: string | undefined,
641
+ proofSnapshot: string | undefined,
246
642
  checkedAt: string | undefined,
247
643
  ): Promise<
248
644
  ReadonlyMap<
@@ -256,18 +652,22 @@ async function loadCoverageProofEvidence(
256
652
  >
257
653
  > {
258
654
  if (
259
- verificationSnapshot === undefined ||
655
+ proofSnapshot === undefined ||
260
656
  checkedAt === undefined ||
261
657
  requirementCount === 0
262
658
  ) {
263
659
  return new Map();
264
660
  }
265
- let payload: CoveragePayload;
661
+ let payload: CoverageEvidencePayload;
266
662
  try {
267
- payload = await runOperationJsonQuery<CoveragePayload>(
663
+ // W1 push-down: the slim evidence projection returns only the fields the
664
+ // quality diagnostics consume, keeping the response far below the output
665
+ // capacity limit on large KBs (the full coverage report rows were the
666
+ // original ENOBUFS offender).
667
+ payload = await runOperationJsonQuery<CoverageEvidencePayload>(
268
668
  prolog as PrologPort,
269
669
  "discovery.pl",
270
- `discovery:coverage_report_json('req', ${toPrologList([])}, true, true, ${requirementCount}, 0, ${toPrologAtom(verificationSnapshot)}, ${toPrologAtom(checkedAt)}, ${VERIFICATION_RECEIPT_MAX_AGE_SECONDS}, JsonString)`,
670
+ `discovery:coverage_evidence_json(${toPrologList([])}, ${toPrologAtom(proofSnapshot)}, ${toPrologAtom(checkedAt)}, ${PROOF_RECEIPT_MAX_AGE_SECONDS}, JsonString)`,
271
671
  "Quality diagnostic coverage evidence",
272
672
  );
273
673
  } catch {
@@ -287,26 +687,17 @@ async function loadCoverageProofEvidence(
287
687
  for (const row of payload.rows ?? []) {
288
688
  const id = typeof row.id === "string" ? row.id : undefined;
289
689
  if (id === undefined) continue;
290
- const passingE2e = proofStage(row);
291
- const proofGaps = stringArrayField(row.proofGaps);
292
- const passingE2eTests = stringArrayField(passingE2e?.tests);
690
+ const passingE2eTests = stringArrayField(row.passingE2eTests) ?? [];
293
691
  evidence.set(id, {
294
692
  ...(typeof row.proofStatus === "string"
295
693
  ? { proofStatus: row.proofStatus }
296
694
  : {}),
297
- ...(typeof passingE2e?.status === "string"
298
- ? { passingE2eStatus: passingE2e.status }
695
+ ...(typeof row.passingE2eStatus === "string"
696
+ ? { passingE2eStatus: row.passingE2eStatus }
299
697
  : {}),
300
- ...(passingE2eTests !== undefined ? { passingE2eTests } : {}),
301
- ...(proofGaps !== undefined
302
- ? {
303
- receiptGapCodes: proofGaps.filter(
304
- (gap) =>
305
- gap.includes("verification_receipt") ||
306
- gap.includes("verification_contract") ||
307
- gap.includes("verification_snapshot"),
308
- ),
309
- }
698
+ passingE2eTests,
699
+ ...(Array.isArray(row.receiptGapCodes)
700
+ ? { receiptGapCodes: row.receiptGapCodes.map(String) }
310
701
  : {}),
311
702
  });
312
703
  }
@@ -390,7 +781,7 @@ export async function collectFullKbQualityDiagnostics(
390
781
  const proofEvidence = await loadCoverageProofEvidence(
391
782
  options.prolog,
392
783
  manifestResults.filter((result) => result.entity.type === "req").length,
393
- options.verificationSnapshot,
784
+ options.proofSnapshot,
394
785
  options.checkedAt,
395
786
  );
396
787
  const coverageDepthDiagnostics = createCoverageDepthQualityDiagnostics(