kibi-cli 0.19.0 → 2.0.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 (672) 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.d.ts.map +1 -1
  8. package/dist/cli-operation-loader.js +53 -20
  9. package/dist/cli-operation-metadata.d.ts +21 -8
  10. package/dist/cli-operation-metadata.d.ts.map +1 -1
  11. package/dist/cli-operation-metadata.js +27 -10
  12. package/dist/cli-protocol.d.ts.map +1 -1
  13. package/dist/cli-protocol.js +38 -8
  14. package/dist/cli-register-foundation.d.ts.map +1 -1
  15. package/dist/cli-register-foundation.js +14 -2
  16. package/dist/cli-register-maintenance.d.ts.map +1 -1
  17. package/dist/cli-register-maintenance.js +33 -4
  18. package/dist/cli-register-proof.d.ts +3 -0
  19. package/dist/cli-register-proof.d.ts.map +1 -0
  20. package/dist/cli-register-proof.js +103 -0
  21. package/dist/cli-register-reporting.d.ts.map +1 -1
  22. package/dist/cli-register-reporting.js +11 -0
  23. package/dist/cli.d.ts +4 -0
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +17 -8
  26. package/dist/commands/aggregated-checks.d.ts +1 -2
  27. package/dist/commands/aggregated-checks.d.ts.map +1 -1
  28. package/dist/commands/aggregated-checks.js +14 -9
  29. package/dist/commands/branch.d.ts +37 -0
  30. package/dist/commands/branch.d.ts.map +1 -1
  31. package/dist/commands/branch.js +375 -40
  32. package/dist/commands/check.d.ts +14 -0
  33. package/dist/commands/check.d.ts.map +1 -1
  34. package/dist/commands/check.js +209 -110
  35. package/dist/commands/coverage.d.ts +1 -0
  36. package/dist/commands/coverage.d.ts.map +1 -1
  37. package/dist/commands/coverage.js +6 -0
  38. package/dist/commands/discovery-shared.d.ts.map +1 -1
  39. package/dist/commands/discovery-shared.js +10 -19
  40. package/dist/commands/doctor.d.ts +26 -1
  41. package/dist/commands/doctor.d.ts.map +1 -1
  42. package/dist/commands/doctor.js +291 -30
  43. package/dist/commands/engine.d.ts +12 -0
  44. package/dist/commands/engine.d.ts.map +1 -1
  45. package/dist/commands/engine.js +50 -7
  46. package/dist/commands/gc.d.ts +5 -2
  47. package/dist/commands/gc.d.ts.map +1 -1
  48. package/dist/commands/gc.js +140 -71
  49. package/dist/commands/github-init.d.ts +57 -0
  50. package/dist/commands/github-init.d.ts.map +1 -0
  51. package/dist/commands/github-init.js +314 -0
  52. package/dist/commands/init-helpers.d.ts +1 -1
  53. package/dist/commands/init-helpers.d.ts.map +1 -1
  54. package/dist/commands/init-helpers.js +109 -28
  55. package/dist/commands/init.d.ts +2 -0
  56. package/dist/commands/init.d.ts.map +1 -1
  57. package/dist/commands/init.js +79 -24
  58. package/dist/commands/legacy-storage-migration.d.ts +54 -0
  59. package/dist/commands/legacy-storage-migration.d.ts.map +1 -0
  60. package/dist/commands/legacy-storage-migration.js +277 -0
  61. package/dist/commands/migrate.d.ts +11 -0
  62. package/dist/commands/migrate.d.ts.map +1 -1
  63. package/dist/commands/migrate.js +249 -96
  64. package/dist/commands/proof-migrate-legacy.d.ts +7 -0
  65. package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
  66. package/dist/commands/proof-migrate-legacy.js +45 -0
  67. package/dist/commands/proof-prune.d.ts +8 -0
  68. package/dist/commands/proof-prune.d.ts.map +1 -0
  69. package/dist/commands/proof-prune.js +53 -0
  70. package/dist/commands/prove.d.ts +37 -0
  71. package/dist/commands/prove.d.ts.map +1 -0
  72. package/dist/commands/prove.js +470 -0
  73. package/dist/commands/report.d.ts +24 -0
  74. package/dist/commands/report.d.ts.map +1 -0
  75. package/dist/commands/report.js +191 -0
  76. package/dist/commands/sync/cache.d.ts +16 -3
  77. package/dist/commands/sync/cache.d.ts.map +1 -1
  78. package/dist/commands/sync/cache.js +111 -4
  79. package/dist/commands/sync/discovery.d.ts +26 -2
  80. package/dist/commands/sync/discovery.d.ts.map +1 -1
  81. package/dist/commands/sync/discovery.js +204 -15
  82. package/dist/commands/sync/extraction.d.ts +8 -1
  83. package/dist/commands/sync/extraction.d.ts.map +1 -1
  84. package/dist/commands/sync/extraction.js +38 -4
  85. package/dist/commands/sync/manifest.d.ts +9 -6
  86. package/dist/commands/sync/manifest.d.ts.map +1 -1
  87. package/dist/commands/sync/manifest.js +195 -60
  88. package/dist/commands/sync/persistence.d.ts +4 -1
  89. package/dist/commands/sync/persistence.d.ts.map +1 -1
  90. package/dist/commands/sync/persistence.js +26 -12
  91. package/dist/commands/sync/staging.d.ts +1 -0
  92. package/dist/commands/sync/staging.d.ts.map +1 -1
  93. package/dist/commands/sync/staging.js +5 -2
  94. package/dist/commands/sync/untracked-targets.d.ts +24 -0
  95. package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
  96. package/dist/commands/sync/untracked-targets.js +108 -0
  97. package/dist/commands/sync.d.ts +17 -1
  98. package/dist/commands/sync.d.ts.map +1 -1
  99. package/dist/commands/sync.js +375 -106
  100. package/dist/diagnostics.d.ts +1 -1
  101. package/dist/diagnostics.d.ts.map +1 -1
  102. package/dist/engine-daemon.d.ts +3 -1
  103. package/dist/engine-daemon.d.ts.map +1 -1
  104. package/dist/engine-daemon.js +49 -20
  105. package/dist/engine.d.ts +34 -3
  106. package/dist/engine.d.ts.map +1 -1
  107. package/dist/engine.js +578 -42
  108. package/dist/env.d.ts.map +1 -1
  109. package/dist/env.js +5 -6
  110. package/dist/extractors/manifest.d.ts +13 -1
  111. package/dist/extractors/manifest.d.ts.map +1 -1
  112. package/dist/extractors/manifest.js +97 -10
  113. package/dist/extractors/markdown.d.ts +5 -2
  114. package/dist/extractors/markdown.d.ts.map +1 -1
  115. package/dist/extractors/markdown.js +47 -12
  116. package/dist/extractors/playwright-cases.d.ts +24 -0
  117. package/dist/extractors/playwright-cases.d.ts.map +1 -0
  118. package/dist/extractors/playwright-cases.js +126 -0
  119. package/dist/extractors/relationships.d.ts +6 -0
  120. package/dist/extractors/relationships.d.ts.map +1 -1
  121. package/dist/extractors/relationships.js +2 -1
  122. package/dist/extractors/symbol-coordinates.d.ts +81 -3
  123. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  124. package/dist/extractors/symbol-coordinates.js +389 -51
  125. package/dist/extractors/symbols-coordinator.js +11 -1
  126. package/dist/extractors/symbols-ts.d.ts +1 -0
  127. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  128. package/dist/extractors/symbols-ts.js +142 -67
  129. package/dist/intent-search.d.ts +61 -0
  130. package/dist/intent-search.d.ts.map +1 -0
  131. package/dist/intent-search.js +437 -0
  132. package/dist/logic/ir.d.ts +1 -0
  133. package/dist/logic/ir.d.ts.map +1 -1
  134. package/dist/logic/ir.js +1 -1
  135. package/dist/operations/bootstrap/activation.d.ts +5 -0
  136. package/dist/operations/bootstrap/activation.d.ts.map +1 -0
  137. package/dist/operations/{autopilot → bootstrap}/activation.js +58 -33
  138. package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts.map +1 -1
  139. package/dist/operations/bootstrap/candidates.d.ts +4 -0
  140. package/dist/operations/{autopilot → bootstrap}/candidates.d.ts.map +1 -1
  141. package/dist/operations/{autopilot → bootstrap}/candidates.js +22 -8
  142. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts +2 -2
  143. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts.map +1 -1
  144. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.js +46 -6
  145. package/dist/operations/{autopilot → bootstrap}/discovery.d.ts +1 -1
  146. package/dist/operations/bootstrap/discovery.d.ts.map +1 -0
  147. package/dist/operations/{autopilot → bootstrap}/discovery.js +21 -14
  148. package/dist/operations/bootstrap/generate.d.ts +9 -0
  149. package/dist/operations/bootstrap/generate.d.ts.map +1 -0
  150. package/dist/operations/bootstrap/generate.js +207 -0
  151. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts +2 -2
  152. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts.map +1 -1
  153. package/dist/operations/{autopilot → bootstrap}/guidance-actions.js +4 -4
  154. package/dist/operations/{autopilot → bootstrap}/guidance.d.ts +3 -2
  155. package/dist/operations/bootstrap/guidance.d.ts.map +1 -0
  156. package/dist/operations/{autopilot → bootstrap}/guidance.js +3 -1
  157. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts +2 -2
  158. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts.map +1 -1
  159. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.js +4 -3
  160. package/dist/operations/bootstrap/presentation.d.ts +15 -0
  161. package/dist/operations/bootstrap/presentation.d.ts.map +1 -0
  162. package/dist/operations/bootstrap/presentation.js +177 -0
  163. package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts.map +1 -1
  164. package/dist/operations/{autopilot → bootstrap}/types.d.ts +63 -21
  165. package/dist/operations/bootstrap/types.d.ts.map +1 -0
  166. package/dist/operations/bootstrap/types.js +25 -0
  167. package/dist/operations/modeling/model-requirement.d.ts +5 -0
  168. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  169. package/dist/operations/modeling/model-requirement.js +57 -63
  170. package/dist/operations/modeling/predicate-applicability.d.ts +16 -0
  171. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -0
  172. package/dist/operations/modeling/predicate-applicability.js +375 -0
  173. package/dist/operations/modeling/predicate-applyplan.d.ts +13 -2
  174. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
  175. package/dist/operations/modeling/predicate-applyplan.js +100 -3
  176. package/dist/operations/modeling/predicate-bindings.d.ts +6 -0
  177. package/dist/operations/modeling/predicate-bindings.d.ts.map +1 -0
  178. package/dist/operations/modeling/predicate-bindings.js +122 -0
  179. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
  180. package/dist/operations/modeling/predicate-catalog-2.js +18 -2
  181. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
  182. package/dist/operations/modeling/predicate-catalog-3.js +17 -1
  183. package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -1
  184. package/dist/operations/modeling/predicate-catalog-4.js +155 -0
  185. package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
  186. package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
  187. package/dist/operations/modeling/predicate-catalog-5.js +291 -0
  188. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
  189. package/dist/operations/modeling/predicate-catalog.js +4 -0
  190. package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -1
  191. package/dist/operations/modeling/predicate-inference-1.js +8 -0
  192. package/dist/operations/modeling/predicate-inference-launcher.d.ts +10 -0
  193. package/dist/operations/modeling/predicate-inference-launcher.d.ts.map +1 -0
  194. package/dist/operations/modeling/predicate-inference-launcher.js +13 -0
  195. package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
  196. package/dist/operations/modeling/predicate-inference.js +4 -0
  197. package/dist/operations/modeling/predicate-loader.d.ts +1 -0
  198. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  199. package/dist/operations/modeling/predicate-loader.js +11 -3
  200. package/dist/operations/modeling/predicate-ranker.d.ts +8 -1
  201. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  202. package/dist/operations/modeling/predicate-ranker.js +159 -24
  203. package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -1
  204. package/dist/operations/modeling/predicate-score-3.js +6 -0
  205. package/dist/operations/modeling/predicate-types.d.ts +35 -1
  206. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  207. package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -1
  208. package/dist/operations/modeling/predicate-usage-hints-3.js +40 -0
  209. package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
  210. package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
  211. package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
  212. package/dist/operations/modeling/predicate-utils.d.ts.map +1 -1
  213. package/dist/operations/modeling/predicate-utils.js +2 -0
  214. package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
  215. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  216. package/dist/operations/modeling/suggest-predicates.js +203 -32
  217. package/dist/operations/mutation/contradictions.d.ts +2 -1
  218. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  219. package/dist/operations/mutation/contradictions.js +26 -5
  220. package/dist/operations/mutation/delete.d.ts +3 -0
  221. package/dist/operations/mutation/delete.d.ts.map +1 -1
  222. package/dist/operations/mutation/delete.js +483 -19
  223. package/dist/operations/mutation/entity-projection.d.ts +11 -0
  224. package/dist/operations/mutation/entity-projection.d.ts.map +1 -0
  225. package/dist/operations/mutation/entity-projection.js +14 -0
  226. package/dist/operations/mutation/relationships.d.ts +11 -0
  227. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  228. package/dist/operations/mutation/relationships.js +77 -5
  229. package/dist/operations/mutation/saga.d.ts +51 -0
  230. package/dist/operations/mutation/saga.d.ts.map +1 -0
  231. package/dist/operations/mutation/saga.js +67 -0
  232. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  233. package/dist/operations/mutation/serialization.js +3 -1
  234. package/dist/operations/mutation/source-authoring.d.ts +65 -0
  235. package/dist/operations/mutation/source-authoring.d.ts.map +1 -0
  236. package/dist/operations/mutation/source-authoring.js +576 -0
  237. package/dist/operations/mutation/strict-fact.d.ts +1 -0
  238. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  239. package/dist/operations/mutation/strict-fact.js +8 -5
  240. package/dist/operations/mutation/symbol-compiler-lock.d.ts +54 -0
  241. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -0
  242. package/dist/operations/mutation/symbol-compiler-lock.js +337 -0
  243. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  244. package/dist/operations/mutation/symbol-granularity.js +35 -4
  245. package/dist/operations/mutation/symbol-refresh.d.ts +19 -1
  246. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  247. package/dist/operations/mutation/symbol-refresh.js +227 -63
  248. package/dist/operations/mutation/types.d.ts +57 -1
  249. package/dist/operations/mutation/types.d.ts.map +1 -1
  250. package/dist/operations/mutation/upsert.d.ts +18 -2
  251. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  252. package/dist/operations/mutation/upsert.js +403 -32
  253. package/dist/operations/mutation/validate-upsert.js +2 -2
  254. package/dist/operations/mutation/validation.d.ts.map +1 -1
  255. package/dist/operations/mutation/validation.js +47 -4
  256. package/dist/operations/mutation/warnings.d.ts +1 -0
  257. package/dist/operations/mutation/warnings.d.ts.map +1 -1
  258. package/dist/operations/mutation/warnings.js +7 -5
  259. package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
  260. package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
  261. package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
  262. package/dist/operations/planning/apply-plan.d.ts +19 -0
  263. package/dist/operations/planning/apply-plan.d.ts.map +1 -0
  264. package/dist/operations/planning/apply-plan.js +1514 -0
  265. package/dist/operations/planning/compile-intent.d.ts +108 -0
  266. package/dist/operations/planning/compile-intent.d.ts.map +1 -0
  267. package/dist/operations/planning/compile-intent.js +618 -0
  268. package/dist/operations/proof/ingest-proof.d.ts +34 -0
  269. package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
  270. package/dist/operations/proof/ingest-proof.js +307 -0
  271. package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
  272. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
  273. package/dist/operations/proof/migrate-legacy-receipts.js +88 -0
  274. package/dist/operations/proof/prune-receipts.d.ts +35 -0
  275. package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
  276. package/dist/operations/proof/prune-receipts.js +91 -0
  277. package/dist/operations/proof/receipt-document.d.ts +29 -0
  278. package/dist/operations/proof/receipt-document.d.ts.map +1 -0
  279. package/dist/operations/proof/receipt-document.js +117 -0
  280. package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
  281. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  282. package/dist/operations/semantic-advisor/analyze-prose.js +52 -28
  283. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  284. package/dist/operations/semantic-advisor/clauses.js +35 -9
  285. package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -1
  286. package/dist/operations/semantic-advisor/ingestion-boundary.js +7 -3
  287. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +51 -0
  288. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -0
  289. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +96 -0
  290. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
  291. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
  292. package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
  293. package/dist/operations/semantic-advisor/types.d.ts +13 -5
  294. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  295. package/dist/prolog/codec.d.ts +13 -1
  296. package/dist/prolog/codec.d.ts.map +1 -1
  297. package/dist/prolog/codec.js +269 -153
  298. package/dist/prolog/error-terms.d.ts +47 -0
  299. package/dist/prolog/error-terms.d.ts.map +1 -0
  300. package/dist/prolog/error-terms.js +334 -0
  301. package/dist/prolog/janitor.d.ts +50 -0
  302. package/dist/prolog/janitor.d.ts.map +1 -0
  303. package/dist/prolog/janitor.js +154 -0
  304. package/dist/prolog/store-lock.d.ts +45 -0
  305. package/dist/prolog/store-lock.d.ts.map +1 -0
  306. package/dist/prolog/store-lock.js +195 -0
  307. package/dist/prolog.d.ts +7 -0
  308. package/dist/prolog.d.ts.map +1 -1
  309. package/dist/prolog.js +82 -25
  310. package/dist/proof/evaluate.d.ts +27 -0
  311. package/dist/proof/evaluate.d.ts.map +1 -0
  312. package/dist/proof/evaluate.js +151 -0
  313. package/dist/proof/inspect.d.ts +12 -0
  314. package/dist/proof/inspect.d.ts.map +1 -0
  315. package/dist/proof/inspect.js +236 -0
  316. package/dist/proof/integrations.d.ts +35 -0
  317. package/dist/proof/integrations.d.ts.map +1 -0
  318. package/dist/proof/integrations.js +123 -0
  319. package/dist/proof/producers/junit-adapter.d.ts +26 -0
  320. package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
  321. package/dist/proof/producers/junit-adapter.js +186 -0
  322. package/dist/proof/producers/playwright-case-id.d.ts +8 -0
  323. package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
  324. package/dist/proof/producers/playwright-case-id.js +25 -0
  325. package/dist/proof/producers/playwright-reporter.d.ts +27 -0
  326. package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
  327. package/dist/proof/producers/playwright-reporter.js +138 -0
  328. package/dist/proof/producers/tap-adapter.d.ts +10 -0
  329. package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
  330. package/dist/proof/producers/tap-adapter.js +200 -0
  331. package/dist/proof/receipt-outcome.d.ts +2 -0
  332. package/dist/proof/receipt-outcome.d.ts.map +1 -0
  333. package/dist/proof/receipt-outcome.js +1 -0
  334. package/dist/public/branch-resolver.d.ts +1 -0
  335. package/dist/public/branch-resolver.d.ts.map +1 -1
  336. package/dist/public/branch-resolver.js +1 -0
  337. package/dist/public/check-types.d.ts +2 -2
  338. package/dist/public/check-types.d.ts.map +1 -1
  339. package/dist/public/check-types.js +16 -16
  340. package/dist/public/diagnostic-usage.d.ts.map +1 -1
  341. package/dist/public/diagnostic-usage.js +74 -6
  342. package/dist/public/distribution-parity.d.ts +7 -1
  343. package/dist/public/distribution-parity.d.ts.map +1 -1
  344. package/dist/public/distribution-parity.js +15 -9
  345. package/dist/public/ignore-policy.d.ts.map +1 -1
  346. package/dist/public/ignore-policy.js +16 -4
  347. package/dist/public/impact/coverage-depth-quality.d.ts +7 -1
  348. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  349. package/dist/public/impact/coverage-depth-quality.js +22 -4
  350. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  351. package/dist/public/impact/diagnostics.js +2 -2
  352. package/dist/public/impact/diff-meaning.d.ts +1 -0
  353. package/dist/public/impact/diff-meaning.d.ts.map +1 -1
  354. package/dist/public/impact/diff-meaning.js +5 -2
  355. package/dist/public/impact/full-kb-quality.d.ts +7 -2
  356. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  357. package/dist/public/impact/full-kb-quality.js +364 -39
  358. package/dist/public/impact/manifest.d.ts.map +1 -1
  359. package/dist/public/impact/manifest.js +2 -5
  360. package/dist/public/operational-artifacts.d.ts.map +1 -1
  361. package/dist/public/operational-artifacts.js +7 -1
  362. package/dist/public/operations/catalog.d.ts +900 -34
  363. package/dist/public/operations/catalog.d.ts.map +1 -1
  364. package/dist/public/operations/catalog.js +130 -6
  365. package/dist/public/operations/check-executor.d.ts +2 -2
  366. package/dist/public/operations/check-executor.d.ts.map +1 -1
  367. package/dist/public/operations/check-executor.js +68 -13
  368. package/dist/public/operations/check-format-shared.d.ts +3 -0
  369. package/dist/public/operations/check-format-shared.d.ts.map +1 -1
  370. package/dist/public/operations/check-format-shared.js +3 -0
  371. package/dist/public/operations/check-helpers.d.ts +27 -2
  372. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  373. package/dist/public/operations/check-helpers.js +62 -26
  374. package/dist/public/operations/contracts.d.ts +18 -0
  375. package/dist/public/operations/contracts.d.ts.map +1 -0
  376. package/dist/public/operations/contracts.js +334 -0
  377. package/dist/public/operations/discovery-entities.d.ts +3 -0
  378. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  379. package/dist/public/operations/discovery-entities.js +4 -0
  380. package/dist/public/operations/discovery-executors.d.ts +43 -7
  381. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  382. package/dist/public/operations/discovery-executors.js +216 -13
  383. package/dist/public/operations/index.d.ts +9 -4
  384. package/dist/public/operations/index.d.ts.map +1 -1
  385. package/dist/public/operations/index.js +8 -3
  386. package/dist/public/operations/migration-plan.d.ts +102 -0
  387. package/dist/public/operations/migration-plan.d.ts.map +1 -0
  388. package/dist/public/operations/migration-plan.js +539 -0
  389. package/dist/public/operations/node-ports.d.ts.map +1 -1
  390. package/dist/public/operations/node-ports.js +71 -11
  391. package/dist/public/operations/prolog-json.d.ts +14 -0
  392. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  393. package/dist/public/operations/prolog-json.js +44 -5
  394. package/dist/public/operations/repair-plan.d.ts +3 -3
  395. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  396. package/dist/public/operations/repair-plan.js +49 -18
  397. package/dist/public/operations/result-envelope.d.ts +14 -0
  398. package/dist/public/operations/result-envelope.d.ts.map +1 -0
  399. package/dist/public/operations/result-envelope.js +106 -0
  400. package/dist/public/operations/runtime-types.d.ts +102 -7
  401. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  402. package/dist/public/operations/source-relationship-parity.d.ts +13 -0
  403. package/dist/public/operations/source-relationship-parity.d.ts.map +1 -0
  404. package/dist/public/operations/source-relationship-parity.js +162 -0
  405. package/dist/public/operations/specs/{autopilot.d.ts → bootstrap.d.ts} +9 -9
  406. package/dist/public/operations/specs/bootstrap.d.ts.map +1 -0
  407. package/dist/public/operations/specs/{autopilot.js → bootstrap.js} +8 -7
  408. package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
  409. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
  410. package/dist/public/operations/specs/check-rules.generated.js +34 -0
  411. package/dist/public/operations/specs/check.d.ts +9 -4
  412. package/dist/public/operations/specs/check.d.ts.map +1 -1
  413. package/dist/public/operations/specs/check.js +10 -21
  414. package/dist/public/operations/specs/discovery.d.ts +87 -3
  415. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  416. package/dist/public/operations/specs/discovery.js +53 -3
  417. package/dist/public/operations/specs/modeling.d.ts +3 -3
  418. package/dist/public/operations/specs/modeling.js +3 -3
  419. package/dist/public/operations/specs/mutation-schemas.d.ts +251 -14
  420. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  421. package/dist/public/operations/specs/mutation-schemas.js +16 -6
  422. package/dist/public/operations/specs/mutation.d.ts +42 -2
  423. package/dist/public/operations/specs/mutation.d.ts.map +1 -1
  424. package/dist/public/operations/specs/mutation.js +26 -2
  425. package/dist/public/operations/specs/planning.d.ts +279 -0
  426. package/dist/public/operations/specs/planning.d.ts.map +1 -0
  427. package/dist/public/operations/specs/planning.js +197 -0
  428. package/dist/public/operations/specs/proof.d.ts +212 -0
  429. package/dist/public/operations/specs/proof.d.ts.map +1 -0
  430. package/dist/public/operations/specs/proof.js +30 -0
  431. package/dist/public/operations/specs/reporting.d.ts +23 -1
  432. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  433. package/dist/public/operations/specs/reporting.js +156 -11
  434. package/dist/public/operations/specs/upsert.d.ts +265 -14
  435. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  436. package/dist/public/operations/specs/upsert.js +9 -0
  437. package/dist/public/operations/symbol-repair-plan.d.ts +22 -0
  438. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -0
  439. package/dist/public/operations/symbol-repair-plan.js +238 -0
  440. package/dist/public/operations/types.d.ts +52 -1
  441. package/dist/public/operations/types.d.ts.map +1 -1
  442. package/dist/public/proof-fingerprint.d.ts +54 -0
  443. package/dist/public/proof-fingerprint.d.ts.map +1 -0
  444. package/dist/public/proof-fingerprint.js +141 -0
  445. package/dist/public/proof-protocol.d.ts +354 -0
  446. package/dist/public/proof-protocol.d.ts.map +1 -0
  447. package/dist/public/proof-protocol.js +454 -0
  448. package/dist/public/proof-receipt.d.ts +279 -0
  449. package/dist/public/proof-receipt.d.ts.map +1 -0
  450. package/dist/public/proof-receipt.js +377 -0
  451. package/dist/public/schemas/entity.d.ts.map +1 -1
  452. package/dist/public/schemas/entity.js +22 -6
  453. package/dist/public/skills/kibi-bootstrap/SKILL.md +58 -0
  454. package/dist/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  455. package/dist/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  456. package/dist/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  457. package/dist/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  458. package/dist/public/skills/kibi-freshness/SKILL.md +39 -9
  459. package/dist/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  460. package/dist/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  461. package/dist/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  462. package/dist/public/skills/kibi-traceability/SKILL.md +47 -47
  463. package/dist/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  464. package/dist/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  465. package/dist/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  466. package/dist/public/skills/kibi-traceability/resources/traceability.md +8 -0
  467. package/dist/public/skills/kibi-usage/SKILL.md +136 -231
  468. package/dist/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  469. package/dist/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  470. package/dist/public/skills/kibi-usage/resources/operation-access.md +36 -38
  471. package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
  472. package/dist/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  473. package/dist/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  474. package/dist/public/skills/kibi-usage/resources/workflows.md +57 -4
  475. package/dist/public/symbol-granularity.d.ts +3 -14
  476. package/dist/public/symbol-granularity.d.ts.map +1 -1
  477. package/dist/public/symbol-granularity.generated.d.ts +16 -0
  478. package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
  479. package/dist/public/symbol-granularity.generated.js +20 -0
  480. package/dist/public/symbol-granularity.js +6 -46
  481. package/dist/public/telemetry-acceptance.d.ts +3 -70
  482. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  483. package/dist/public/telemetry-acceptance.js +11 -2
  484. package/dist/public/telemetry-remediation.js +1 -1
  485. package/dist/relationships/shards.d.ts +16 -0
  486. package/dist/relationships/shards.d.ts.map +1 -1
  487. package/dist/relationships/shards.js +87 -2
  488. package/dist/report/brand.d.ts +19 -0
  489. package/dist/report/brand.d.ts.map +1 -0
  490. package/dist/report/brand.js +112 -0
  491. package/dist/report/html-report.css +282 -0
  492. package/dist/report/html-report.d.ts +21 -0
  493. package/dist/report/html-report.d.ts.map +1 -0
  494. package/dist/report/html-report.js +700 -0
  495. package/dist/report/relative-time.d.ts +4 -0
  496. package/dist/report/relative-time.d.ts.map +1 -0
  497. package/dist/report/relative-time.js +46 -0
  498. package/dist/report/report-view.d.ts +17 -0
  499. package/dist/report/report-view.d.ts.map +1 -0
  500. package/dist/report/report-view.js +33 -0
  501. package/dist/report/repository.d.ts +35 -0
  502. package/dist/report/repository.d.ts.map +1 -0
  503. package/dist/report/repository.js +151 -0
  504. package/dist/runtime/cli-runtime.d.ts +2 -0
  505. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  506. package/dist/runtime/cli-runtime.js +90 -23
  507. package/dist/schemas/entity.schema.json +1254 -239
  508. package/dist/search-ranking.d.ts +1 -0
  509. package/dist/search-ranking.d.ts.map +1 -1
  510. package/dist/search-ranking.js +3 -0
  511. package/dist/traceability/evidence-model.d.ts +30 -2
  512. package/dist/traceability/evidence-model.d.ts.map +1 -1
  513. package/dist/traceability/evidence-model.js +2 -2
  514. package/dist/traceability/git-staged.d.ts +20 -0
  515. package/dist/traceability/git-staged.d.ts.map +1 -1
  516. package/dist/traceability/git-staged.js +156 -37
  517. package/dist/traceability/markdown-validate.d.ts.map +1 -1
  518. package/dist/traceability/markdown-validate.js +12 -7
  519. package/dist/traceability/staged-diagnostics.d.ts +7 -0
  520. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  521. package/dist/traceability/staged-diagnostics.js +78 -7
  522. package/dist/traceability/staged-file-coverage.d.ts +33 -0
  523. package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
  524. package/dist/traceability/staged-file-coverage.js +284 -0
  525. package/dist/traceability/staged-impact-contract.d.ts +3 -3
  526. package/dist/traceability/staged-impact-contract.d.ts.map +1 -1
  527. package/dist/traceability/staged-impact-contract.js +12 -40
  528. package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
  529. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  530. package/dist/traceability/staged-symbols-manifest.js +142 -26
  531. package/dist/traceability/symbol-extract.d.ts +5 -0
  532. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  533. package/dist/traceability/symbol-extract.js +1 -1
  534. package/dist/traceability/temp-kb.d.ts +2 -0
  535. package/dist/traceability/temp-kb.d.ts.map +1 -1
  536. package/dist/traceability/temp-kb.js +14 -2
  537. package/dist/types/entities.d.ts +5 -0
  538. package/dist/types/entities.d.ts.map +1 -1
  539. package/dist/utils/branch-resolver.d.ts +25 -10
  540. package/dist/utils/branch-resolver.d.ts.map +1 -1
  541. package/dist/utils/branch-resolver.js +124 -38
  542. package/dist/utils/branch-store-locator.d.ts +23 -0
  543. package/dist/utils/branch-store-locator.d.ts.map +1 -0
  544. package/dist/utils/branch-store-locator.js +90 -0
  545. package/dist/utils/branch-store.d.ts +21 -0
  546. package/dist/utils/branch-store.d.ts.map +1 -0
  547. package/dist/utils/branch-store.js +157 -0
  548. package/dist/utils/config.d.ts +39 -37
  549. package/dist/utils/config.d.ts.map +1 -1
  550. package/dist/utils/config.js +107 -119
  551. package/dist/utils/kb-manifest.d.ts +35 -0
  552. package/dist/utils/kb-manifest.d.ts.map +1 -0
  553. package/dist/utils/kb-manifest.js +154 -0
  554. package/dist/utils/kb-paths.d.ts +54 -0
  555. package/dist/utils/kb-paths.d.ts.map +1 -0
  556. package/dist/utils/kb-paths.js +125 -0
  557. package/dist/utils/manifest-paths.d.ts +4 -4
  558. package/dist/utils/manifest-paths.d.ts.map +1 -1
  559. package/dist/utils/manifest-paths.js +8 -56
  560. package/dist/utils/rule-registry.d.ts +42 -24
  561. package/dist/utils/rule-registry.d.ts.map +1 -1
  562. package/dist/utils/rule-registry.generated.d.ts +97 -0
  563. package/dist/utils/rule-registry.generated.d.ts.map +1 -0
  564. package/dist/utils/rule-registry.generated.js +125 -0
  565. package/dist/utils/rule-registry.js +52 -148
  566. package/dist/utils/schema-version.d.ts +5 -5
  567. package/dist/utils/schema-version.d.ts.map +1 -1
  568. package/dist/utils/schema-version.js +26 -6
  569. package/dist/utils/strict-modeling.d.ts +1 -4
  570. package/dist/utils/strict-modeling.d.ts.map +1 -1
  571. package/dist/utils/strict-modeling.js +8 -9
  572. package/package.json +47 -11
  573. package/schema/config.json +2 -2
  574. package/schema/manifest.json +26 -0
  575. package/src/public/branch-resolver.ts +1 -0
  576. package/src/public/check-types.ts +22 -19
  577. package/src/public/diagnostic-usage.ts +84 -6
  578. package/src/public/distribution-parity.ts +17 -9
  579. package/src/public/ignore-policy.ts +16 -10
  580. package/src/public/impact/coverage-depth-quality.ts +37 -1
  581. package/src/public/impact/diagnostics.ts +2 -1
  582. package/src/public/impact/diff-meaning.ts +11 -4
  583. package/src/public/impact/full-kb-quality.ts +545 -41
  584. package/src/public/impact/manifest.ts +2 -4
  585. package/src/public/operational-artifacts.ts +9 -1
  586. package/src/public/operations/catalog.ts +153 -10
  587. package/src/public/operations/check-executor.ts +98 -15
  588. package/src/public/operations/check-format-shared.ts +6 -0
  589. package/src/public/operations/check-helpers.ts +74 -35
  590. package/src/public/operations/contracts.ts +382 -0
  591. package/src/public/operations/discovery-entities.ts +7 -0
  592. package/src/public/operations/discovery-executors.ts +315 -25
  593. package/src/public/operations/index.ts +9 -4
  594. package/src/public/operations/migration-plan.ts +747 -0
  595. package/src/public/operations/node-ports.ts +87 -13
  596. package/src/public/operations/prolog-json.ts +60 -5
  597. package/src/public/operations/repair-plan.ts +60 -22
  598. package/src/public/operations/result-envelope.ts +141 -0
  599. package/src/public/operations/runtime-types.ts +96 -5
  600. package/src/public/operations/source-relationship-parity.ts +226 -0
  601. package/src/public/operations/specs/{autopilot.ts → bootstrap.ts} +17 -16
  602. package/src/public/operations/specs/check-rules.generated.ts +37 -0
  603. package/src/public/operations/specs/check.ts +14 -22
  604. package/src/public/operations/specs/discovery.ts +57 -3
  605. package/src/public/operations/specs/modeling.ts +3 -3
  606. package/src/public/operations/specs/mutation-schemas.ts +24 -6
  607. package/src/public/operations/specs/mutation.ts +27 -2
  608. package/src/public/operations/specs/planning.ts +241 -0
  609. package/src/public/operations/specs/proof.ts +43 -0
  610. package/src/public/operations/specs/reporting.ts +193 -12
  611. package/src/public/operations/specs/upsert.ts +10 -0
  612. package/src/public/operations/symbol-repair-plan.ts +324 -0
  613. package/src/public/operations/types.ts +62 -1
  614. package/src/public/proof-fingerprint.ts +216 -0
  615. package/src/public/proof-protocol-types.d.ts +96 -0
  616. package/src/public/proof-protocol.ts +589 -0
  617. package/src/public/proof-receipt.ts +499 -0
  618. package/src/public/schemas/entity.ts +27 -6
  619. package/src/public/skills/kibi-bootstrap/SKILL.md +58 -0
  620. package/src/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  621. package/src/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  622. package/src/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  623. package/src/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  624. package/src/public/skills/kibi-freshness/SKILL.md +39 -9
  625. package/src/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  626. package/src/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  627. package/src/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  628. package/src/public/skills/kibi-traceability/SKILL.md +47 -47
  629. package/src/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  630. package/src/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  631. package/src/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  632. package/src/public/skills/kibi-traceability/resources/traceability.md +8 -0
  633. package/src/public/skills/kibi-usage/SKILL.md +136 -231
  634. package/src/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  635. package/src/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  636. package/src/public/skills/kibi-usage/resources/operation-access.md +36 -38
  637. package/src/public/skills/kibi-usage/resources/proof.md +105 -0
  638. package/src/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  639. package/src/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  640. package/src/public/skills/kibi-usage/resources/workflows.md +57 -4
  641. package/src/public/symbol-granularity.generated.ts +41 -0
  642. package/src/public/symbol-granularity.ts +35 -59
  643. package/src/public/telemetry-acceptance-types.d.ts +98 -0
  644. package/src/public/telemetry-acceptance.ts +30 -93
  645. package/src/public/telemetry-remediation.ts +1 -1
  646. package/src/schemas/entity.schema.json +1254 -239
  647. package/templates/github/kibi-badge.yml +86 -0
  648. package/templates/github/kibi-report.yml +84 -0
  649. package/dist/operations/autopilot/activation.d.ts +0 -4
  650. package/dist/operations/autopilot/activation.d.ts.map +0 -1
  651. package/dist/operations/autopilot/candidates.d.ts +0 -4
  652. package/dist/operations/autopilot/discovery.d.ts.map +0 -1
  653. package/dist/operations/autopilot/generate.d.ts +0 -8
  654. package/dist/operations/autopilot/generate.d.ts.map +0 -1
  655. package/dist/operations/autopilot/generate.js +0 -112
  656. package/dist/operations/autopilot/guidance.d.ts.map +0 -1
  657. package/dist/operations/autopilot/presentation.d.ts +0 -13
  658. package/dist/operations/autopilot/presentation.d.ts.map +0 -1
  659. package/dist/operations/autopilot/presentation.js +0 -91
  660. package/dist/operations/autopilot/types.d.ts.map +0 -1
  661. package/dist/operations/autopilot/types.js +0 -8
  662. package/dist/public/operations/specs/autopilot.d.ts.map +0 -1
  663. package/dist/public/skills/init-kibi/SKILL.md +0 -62
  664. package/dist/public/verification-receipt.d.ts +0 -75
  665. package/dist/public/verification-receipt.d.ts.map +0 -1
  666. package/dist/public/verification-receipt.js +0 -129
  667. package/src/public/skills/init-kibi/SKILL.md +0 -62
  668. package/src/public/verification-receipt.ts +0 -170
  669. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts +0 -0
  670. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.js +0 -0
  671. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts +0 -0
  672. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.js +0 -0
@@ -4,12 +4,21 @@ import type {
4
4
  ExtractedEntity,
5
5
  ExtractionResult,
6
6
  } from "../../extractors/markdown.js";
7
- import type { PrologProcess } from "../../prolog.js";
8
7
  import {
8
+ normalizeEntityId,
9
+ parseAtomList,
9
10
  parseEntityFromList,
10
11
  parseListOfLists,
11
12
  parseTriples,
12
13
  } from "../../prolog/codec.js";
14
+ import {
15
+ runOperationJsonQuery,
16
+ toPrologAtom,
17
+ toPrologList,
18
+ } from "../operations/prolog-json.js";
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";
13
22
  import {
14
23
  analyzeTelemetryAcceptance,
15
24
  createTelemetryAcceptanceDiagnostics,
@@ -20,33 +29,27 @@ import { createRequirementQualityDiagnostics } from "./requirement-quality.js";
20
29
  import { createSymbolQualityDiagnostics } from "./symbol-quality.js";
21
30
  import type { QualityDiagnostic } from "./types.js";
22
31
 
23
- const RELATIONSHIP_TYPES = [
24
- "depends_on",
25
- "executable_for",
26
- "specified_by",
27
- "verified_by",
28
- "validates",
29
- "implements",
30
- "covered_by",
31
- "constrained_by",
32
- "constrains",
33
- "requires_property",
34
- "requires_predicate",
35
- "guards",
36
- "publishes",
37
- "consumes",
38
- "supersedes",
39
- "relates_to",
40
- ] 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)";
41
38
 
42
39
  type FullKbQualityDiagnosticsOptions = {
43
- readonly prolog: Pick<PrologProcess, "query">;
40
+ readonly prolog: Pick<PrologPort, "query" | "queryEntities">;
44
41
  readonly hardViolationEntityIds?: ReadonlySet<string>;
45
42
  readonly maxDiagnostics?: number;
46
43
  readonly workspaceRoot?: string;
47
44
  readonly now?: Date;
45
+ readonly proofSnapshot?: string;
46
+ readonly checkedAt?: string;
48
47
  };
49
48
 
49
+ type CoverageEvidencePayload = Readonly<{
50
+ readonly rows?: readonly Readonly<Record<string, unknown>>[];
51
+ }>;
52
+
50
53
  function stringField(entity: Record<string, unknown>, key: string): string {
51
54
  const value = entity[key];
52
55
  return typeof value === "string" ? value : "";
@@ -77,6 +80,24 @@ function optionalStringArrayField(
77
80
  return value.map((item) => String(item));
78
81
  }
79
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
+
80
101
  function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
81
102
  const extracted: ExtractedEntity = {
82
103
  id: stringField(entity, "id"),
@@ -101,6 +122,41 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
101
122
  if (semanticText !== undefined) extracted.semantic_text = semanticText;
102
123
  const logicClaims = optionalStringArrayField(entity, "logic_claims");
103
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
+ }
104
160
  const granularityReason = optionalStringField(entity, "granularity_reason");
105
161
  if (granularityReason !== undefined) {
106
162
  extracted.granularity_reason = granularityReason;
@@ -117,6 +173,34 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
117
173
  ) {
118
174
  extracted.verification_scope = verificationScope;
119
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
+ }
120
204
  const sourceLine = optionalNumberField(entity, "sourceLine");
121
205
  if (sourceLine !== undefined) extracted.sourceLine = sourceLine;
122
206
  const sourceColumn = optionalNumberField(entity, "sourceColumn");
@@ -133,22 +217,78 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
133
217
  factKind === "observation" ||
134
218
  factKind === "meta" ||
135
219
  factKind === "predicate_schema" ||
136
- factKind === "predicate"
220
+ factKind === "predicate" ||
221
+ factKind === "rule_schema" ||
222
+ factKind === "rule"
137
223
  ) {
138
224
  extracted.fact_kind = factKind;
139
225
  }
140
- const claimKey = optionalStringField(entity, "claim_key");
141
- if (claimKey !== undefined) extracted.claim_key = claimKey;
142
- const claimText = optionalStringField(entity, "claim_text");
143
- if (claimText !== undefined) extracted.claim_text = claimText;
144
- const predicateName = optionalStringField(entity, "predicate_name");
145
- if (predicateName !== undefined) extracted.predicate_name = predicateName;
146
- const predicateNamespace = optionalStringField(entity, "predicate_namespace");
147
- if (predicateNamespace !== undefined) {
148
- 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;
149
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;
150
280
  const predicateArity = optionalNumberField(entity, "predicate_arity");
151
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;
152
292
  for (const field of [
153
293
  "argument_names",
154
294
  "argument_types",
@@ -170,25 +310,298 @@ function sourceFileFor(entity: Record<string, unknown>): string | undefined {
170
310
  );
171
311
  }
172
312
 
173
- async function loadKbExtractionResults(
174
- prolog: Pick<PrologProcess, "query">,
175
- ): Promise<ExtractionResult[]> {
176
- const entityResult = await prolog.query(
177
- "findall([Id,Type,Props], kb_entity(Id, Type, Props), Results)",
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),
178
410
  );
179
- const entities = entityResult.bindings.Results
180
- ? parseListOfLists(entityResult.bindings.Results).map(parseEntityFromList)
181
- : [];
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(
482
+ prolog: Pick<PrologPort, "query">,
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),
508
+ );
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
+ }
182
588
  const relationships = new Map<string, ExtractionResult["relationships"]>();
183
589
 
184
590
  for (const relationshipType of RELATIONSHIP_TYPES) {
185
591
  const relResult = await prolog.query(
186
592
  `findall([From,To,'${relationshipType}'], kb_relationship(${relationshipType}, From, To), Rels)`,
187
593
  );
594
+ if (!relResult.success) {
595
+ throw new Error(
596
+ `Full KB relationship projection query failed for ${relationshipType}: ${relResult.error ?? "Unknown error"}`,
597
+ );
598
+ }
188
599
  const rows = relResult.bindings.Rels
189
600
  ? parseTriples(relResult.bindings.Rels)
190
601
  : [];
191
- 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);
192
605
  const current = relationships.get(from) ?? [];
193
606
  current.push({ from, to, type });
194
607
  relationships.set(from, current);
@@ -208,6 +621,89 @@ async function loadKbExtractionResults(
208
621
  });
209
622
  }
210
623
 
624
+ export function passingE2eStage(
625
+ passingE2e: unknown,
626
+ ): Readonly<Record<string, unknown>> | undefined {
627
+ return passingE2e &&
628
+ typeof passingE2e === "object" &&
629
+ !Array.isArray(passingE2e)
630
+ ? (passingE2e as Readonly<Record<string, unknown>>)
631
+ : undefined;
632
+ }
633
+
634
+ function stringArrayField(value: unknown): readonly string[] | undefined {
635
+ return Array.isArray(value) ? value.map(String) : undefined;
636
+ }
637
+
638
+ async function loadCoverageProofEvidence(
639
+ prolog: Pick<PrologPort, "query">,
640
+ requirementCount: number,
641
+ proofSnapshot: string | undefined,
642
+ checkedAt: string | undefined,
643
+ ): Promise<
644
+ ReadonlyMap<
645
+ string,
646
+ Readonly<{
647
+ readonly proofStatus?: string;
648
+ readonly passingE2eStatus?: string;
649
+ readonly passingE2eTests?: readonly string[];
650
+ readonly receiptGapCodes?: readonly string[];
651
+ }>
652
+ >
653
+ > {
654
+ if (
655
+ proofSnapshot === undefined ||
656
+ checkedAt === undefined ||
657
+ requirementCount === 0
658
+ ) {
659
+ return new Map();
660
+ }
661
+ let payload: CoverageEvidencePayload;
662
+ try {
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>(
668
+ prolog as PrologPort,
669
+ "discovery.pl",
670
+ `discovery:coverage_evidence_json(${toPrologList([])}, ${toPrologAtom(proofSnapshot)}, ${toPrologAtom(checkedAt)}, ${PROOF_RECEIPT_MAX_AGE_SECONDS}, JsonString)`,
671
+ "Quality diagnostic coverage evidence",
672
+ );
673
+ } catch {
674
+ // Quality diagnostics must fail closed when the optional proof readback is
675
+ // unavailable; a failed advisory query must not make kb_check fail.
676
+ return new Map();
677
+ }
678
+ const evidence = new Map<
679
+ string,
680
+ Readonly<{
681
+ readonly proofStatus?: string;
682
+ readonly passingE2eStatus?: string;
683
+ readonly passingE2eTests?: readonly string[];
684
+ readonly receiptGapCodes?: readonly string[];
685
+ }>
686
+ >();
687
+ for (const row of payload.rows ?? []) {
688
+ const id = typeof row.id === "string" ? row.id : undefined;
689
+ if (id === undefined) continue;
690
+ const passingE2eTests = stringArrayField(row.passingE2eTests) ?? [];
691
+ evidence.set(id, {
692
+ ...(typeof row.proofStatus === "string"
693
+ ? { proofStatus: row.proofStatus }
694
+ : {}),
695
+ ...(typeof row.passingE2eStatus === "string"
696
+ ? { passingE2eStatus: row.passingE2eStatus }
697
+ : {}),
698
+ passingE2eTests,
699
+ ...(Array.isArray(row.receiptGapCodes)
700
+ ? { receiptGapCodes: row.receiptGapCodes.map(String) }
701
+ : {}),
702
+ });
703
+ }
704
+ return evidence;
705
+ }
706
+
211
707
  function capDiagnostics(
212
708
  diagnostics: readonly QualityDiagnostic[],
213
709
  maxDiagnostics: number | undefined,
@@ -282,8 +778,16 @@ export async function collectFullKbQualityDiagnostics(
282
778
  options.now ?? new Date(),
283
779
  ),
284
780
  ]);
285
- const coverageDepthDiagnostics =
286
- createCoverageDepthQualityDiagnostics(manifestResults);
781
+ const proofEvidence = await loadCoverageProofEvidence(
782
+ options.prolog,
783
+ manifestResults.filter((result) => result.entity.type === "req").length,
784
+ options.proofSnapshot,
785
+ options.checkedAt,
786
+ );
787
+ const coverageDepthDiagnostics = createCoverageDepthQualityDiagnostics(
788
+ manifestResults,
789
+ proofEvidence,
790
+ );
287
791
  const diagnostics = [
288
792
  ...telemetryDiagnostics,
289
793
  ...createRequirementQualityDiagnostics({
@@ -3,7 +3,7 @@ import * as path from "node:path";
3
3
  import { extractFromManifest } from "../../extractors/manifest.js";
4
4
  import type { ExtractionResult } from "../../extractors/markdown.js";
5
5
  import type { ManifestLookup } from "../../traceability/symbol-extract.js";
6
- import { loadConfig } from "../../utils/config.js";
6
+ import { CANONICAL_ENTITY_PATHS } from "../../utils/kb-paths.js";
7
7
  import { isTraceabilityRelationshipType } from "../symbol-granularity.js";
8
8
  import { normalizeSourceFile } from "./source-changes.js";
9
9
  import type { TraceabilityRelationship } from "./types.js";
@@ -19,9 +19,7 @@ function toTraceabilityRelationships(
19
19
  export function readImpactManifestResults(
20
20
  workspaceRoot: string,
21
21
  ): readonly ExtractionResult[] {
22
- const config = loadConfig(workspaceRoot);
23
- const symbolsPath = config.paths.symbols;
24
- if (!symbolsPath) return [];
22
+ const symbolsPath = CANONICAL_ENTITY_PATHS.symbols;
25
23
 
26
24
  const absolutePath = path.isAbsolute(symbolsPath)
27
25
  ? symbolsPath