kibi-cli 1.0.1 → 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 (450) 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 +103 -0
  17. package/dist/cli-register-reporting.d.ts.map +1 -1
  18. package/dist/cli-register-reporting.js +1 -0
  19. package/dist/cli.d.ts +4 -0
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +17 -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.d.ts +14 -0
  26. package/dist/commands/check.d.ts.map +1 -1
  27. package/dist/commands/check.js +190 -44
  28. package/dist/commands/coverage.d.ts +1 -0
  29. package/dist/commands/coverage.d.ts.map +1 -1
  30. package/dist/commands/coverage.js +6 -0
  31. package/dist/commands/doctor.d.ts +22 -0
  32. package/dist/commands/doctor.d.ts.map +1 -1
  33. package/dist/commands/doctor.js +48 -22
  34. package/dist/commands/engine.d.ts +12 -0
  35. package/dist/commands/engine.d.ts.map +1 -1
  36. package/dist/commands/engine.js +40 -0
  37. package/dist/commands/github-init.d.ts +1 -0
  38. package/dist/commands/github-init.d.ts.map +1 -1
  39. package/dist/commands/github-init.js +9 -5
  40. package/dist/commands/init-helpers.d.ts.map +1 -1
  41. package/dist/commands/init-helpers.js +38 -5
  42. package/dist/commands/migrate.d.ts +4 -0
  43. package/dist/commands/migrate.d.ts.map +1 -1
  44. package/dist/commands/migrate.js +7 -7
  45. package/dist/commands/proof-migrate-legacy.d.ts +7 -0
  46. package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
  47. package/dist/commands/proof-migrate-legacy.js +45 -0
  48. package/dist/commands/proof-prune.d.ts +8 -0
  49. package/dist/commands/proof-prune.d.ts.map +1 -0
  50. package/dist/commands/proof-prune.js +53 -0
  51. package/dist/commands/prove.d.ts +37 -0
  52. package/dist/commands/prove.d.ts.map +1 -0
  53. package/dist/commands/prove.js +470 -0
  54. package/dist/commands/report.js +1 -1
  55. package/dist/commands/sync/discovery.d.ts +3 -0
  56. package/dist/commands/sync/discovery.d.ts.map +1 -1
  57. package/dist/commands/sync/discovery.js +36 -28
  58. package/dist/commands/sync/manifest.d.ts +1 -1
  59. package/dist/commands/sync/manifest.d.ts.map +1 -1
  60. package/dist/commands/sync/manifest.js +53 -21
  61. package/dist/commands/sync/persistence.d.ts +4 -1
  62. package/dist/commands/sync/persistence.d.ts.map +1 -1
  63. package/dist/commands/sync/persistence.js +25 -14
  64. package/dist/commands/sync/staging.d.ts +1 -0
  65. package/dist/commands/sync/staging.d.ts.map +1 -1
  66. package/dist/commands/sync/staging.js +5 -2
  67. package/dist/commands/sync/untracked-targets.d.ts +24 -0
  68. package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
  69. package/dist/commands/sync/untracked-targets.js +108 -0
  70. package/dist/commands/sync.d.ts +11 -1
  71. package/dist/commands/sync.d.ts.map +1 -1
  72. package/dist/commands/sync.js +74 -30
  73. package/dist/engine-daemon.d.ts +3 -1
  74. package/dist/engine-daemon.d.ts.map +1 -1
  75. package/dist/engine-daemon.js +49 -20
  76. package/dist/engine.d.ts +14 -76
  77. package/dist/engine.d.ts.map +1 -1
  78. package/dist/engine.js +197 -30
  79. package/dist/extractors/manifest.d.ts +5 -0
  80. package/dist/extractors/manifest.d.ts.map +1 -1
  81. package/dist/extractors/manifest.js +46 -1
  82. package/dist/extractors/markdown.d.ts +5 -3
  83. package/dist/extractors/markdown.d.ts.map +1 -1
  84. package/dist/extractors/markdown.js +41 -24
  85. package/dist/extractors/playwright-cases.js +1 -1
  86. package/dist/extractors/relationships.d.ts +6 -0
  87. package/dist/extractors/relationships.d.ts.map +1 -1
  88. package/dist/extractors/relationships.js +1 -1
  89. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  90. package/dist/extractors/symbols-ts.d.ts +1 -0
  91. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  92. package/dist/extractors/symbols-ts.js +142 -67
  93. package/dist/intent-search.d.ts +1 -0
  94. package/dist/intent-search.d.ts.map +1 -1
  95. package/dist/intent-search.js +7 -3
  96. package/dist/logic/ir.d.ts +1 -0
  97. package/dist/logic/ir.d.ts.map +1 -1
  98. package/dist/logic/ir.js +1 -1
  99. package/dist/operations/bootstrap/activation.d.ts +2 -1
  100. package/dist/operations/bootstrap/activation.d.ts.map +1 -1
  101. package/dist/operations/bootstrap/activation.js +11 -3
  102. package/dist/operations/bootstrap/generate.d.ts +2 -1
  103. package/dist/operations/bootstrap/generate.d.ts.map +1 -1
  104. package/dist/operations/bootstrap/generate.js +6 -3
  105. package/dist/operations/bootstrap/guidance.d.ts +1 -0
  106. package/dist/operations/bootstrap/guidance.d.ts.map +1 -1
  107. package/dist/operations/bootstrap/guidance.js +1 -1
  108. package/dist/operations/modeling/model-requirement.d.ts +5 -0
  109. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  110. package/dist/operations/modeling/model-requirement.js +53 -46
  111. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -1
  112. package/dist/operations/modeling/predicate-applicability.js +103 -4
  113. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
  114. package/dist/operations/modeling/predicate-catalog-2.js +18 -2
  115. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
  116. package/dist/operations/modeling/predicate-catalog-3.js +17 -1
  117. package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
  118. package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
  119. package/dist/operations/modeling/predicate-catalog-5.js +291 -0
  120. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
  121. package/dist/operations/modeling/predicate-catalog.js +4 -0
  122. package/dist/operations/modeling/predicate-loader.d.ts +1 -0
  123. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  124. package/dist/operations/modeling/predicate-loader.js +4 -3
  125. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  126. package/dist/operations/modeling/predicate-ranker.js +4 -1
  127. package/dist/operations/modeling/predicate-types.d.ts +1 -1
  128. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  129. package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
  130. package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
  131. package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
  132. package/dist/operations/modeling/suggest-predicates.d.ts +3 -1
  133. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  134. package/dist/operations/modeling/suggest-predicates.js +52 -19
  135. package/dist/operations/mutation/contradictions.d.ts +2 -1
  136. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  137. package/dist/operations/mutation/contradictions.js +26 -5
  138. package/dist/operations/mutation/delete.d.ts +3 -0
  139. package/dist/operations/mutation/delete.d.ts.map +1 -1
  140. package/dist/operations/mutation/delete.js +100 -32
  141. package/dist/operations/mutation/relationships.d.ts +1 -0
  142. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  143. package/dist/operations/mutation/relationships.js +6 -4
  144. package/dist/operations/mutation/saga.d.ts +51 -0
  145. package/dist/operations/mutation/saga.d.ts.map +1 -0
  146. package/dist/operations/mutation/saga.js +67 -0
  147. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  148. package/dist/operations/mutation/serialization.js +3 -2
  149. package/dist/operations/mutation/source-authoring.d.ts +5 -1
  150. package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
  151. package/dist/operations/mutation/source-authoring.js +79 -46
  152. package/dist/operations/mutation/strict-fact.d.ts +1 -0
  153. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  154. package/dist/operations/mutation/strict-fact.js +8 -5
  155. package/dist/operations/mutation/symbol-compiler-lock.d.ts +5 -2
  156. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -1
  157. package/dist/operations/mutation/symbol-compiler-lock.js +65 -2
  158. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  159. package/dist/operations/mutation/symbol-granularity.js +2 -2
  160. package/dist/operations/mutation/symbol-refresh.d.ts +1 -0
  161. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  162. package/dist/operations/mutation/symbol-refresh.js +10 -8
  163. package/dist/operations/mutation/upsert.d.ts +18 -2
  164. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  165. package/dist/operations/mutation/upsert.js +86 -54
  166. package/dist/operations/mutation/validate-upsert.js +2 -2
  167. package/dist/operations/mutation/validation.d.ts.map +1 -1
  168. package/dist/operations/mutation/validation.js +46 -4
  169. package/dist/operations/mutation/warnings.d.ts +1 -0
  170. package/dist/operations/mutation/warnings.d.ts.map +1 -1
  171. package/dist/operations/mutation/warnings.js +7 -5
  172. package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
  173. package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
  174. package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
  175. package/dist/operations/planning/apply-plan.d.ts +8 -106
  176. package/dist/operations/planning/apply-plan.d.ts.map +1 -1
  177. package/dist/operations/planning/apply-plan.js +113 -36
  178. package/dist/operations/planning/compile-intent.d.ts +2 -0
  179. package/dist/operations/planning/compile-intent.d.ts.map +1 -1
  180. package/dist/operations/planning/compile-intent.js +70 -14
  181. package/dist/operations/proof/ingest-proof.d.ts +34 -0
  182. package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
  183. package/dist/operations/proof/ingest-proof.js +307 -0
  184. package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
  185. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
  186. package/dist/operations/proof/migrate-legacy-receipts.js +88 -0
  187. package/dist/operations/proof/prune-receipts.d.ts +35 -0
  188. package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
  189. package/dist/operations/proof/prune-receipts.js +91 -0
  190. package/dist/operations/proof/receipt-document.d.ts +29 -0
  191. package/dist/operations/proof/receipt-document.d.ts.map +1 -0
  192. package/dist/operations/proof/receipt-document.js +117 -0
  193. package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
  194. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  195. package/dist/operations/semantic-advisor/analyze-prose.js +46 -26
  196. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  197. package/dist/operations/semantic-advisor/clauses.js +20 -7
  198. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
  199. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
  200. package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
  201. package/dist/prolog/codec.d.ts +13 -1
  202. package/dist/prolog/codec.d.ts.map +1 -1
  203. package/dist/prolog/codec.js +269 -154
  204. package/dist/prolog/error-terms.d.ts +47 -0
  205. package/dist/prolog/error-terms.d.ts.map +1 -0
  206. package/dist/prolog/error-terms.js +334 -0
  207. package/dist/prolog/janitor.d.ts +50 -0
  208. package/dist/prolog/janitor.d.ts.map +1 -0
  209. package/dist/prolog/janitor.js +154 -0
  210. package/dist/prolog/store-lock.d.ts +45 -0
  211. package/dist/prolog/store-lock.d.ts.map +1 -0
  212. package/dist/prolog/store-lock.js +195 -0
  213. package/dist/prolog.d.ts +7 -0
  214. package/dist/prolog.d.ts.map +1 -1
  215. package/dist/prolog.js +55 -17
  216. package/dist/proof/evaluate.d.ts +27 -0
  217. package/dist/proof/evaluate.d.ts.map +1 -0
  218. package/dist/proof/evaluate.js +151 -0
  219. package/dist/proof/inspect.d.ts +12 -0
  220. package/dist/proof/inspect.d.ts.map +1 -0
  221. package/dist/proof/inspect.js +236 -0
  222. package/dist/proof/integrations.d.ts +35 -0
  223. package/dist/proof/integrations.d.ts.map +1 -0
  224. package/dist/proof/integrations.js +123 -0
  225. package/dist/proof/producers/junit-adapter.d.ts +26 -0
  226. package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
  227. package/dist/proof/producers/junit-adapter.js +186 -0
  228. package/dist/{public → proof/producers}/playwright-case-id.d.ts +1 -1
  229. package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
  230. package/dist/{public → proof/producers}/playwright-case-id.js +3 -3
  231. package/dist/proof/producers/playwright-reporter.d.ts +27 -0
  232. package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
  233. package/dist/proof/producers/playwright-reporter.js +138 -0
  234. package/dist/proof/producers/tap-adapter.d.ts +10 -0
  235. package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
  236. package/dist/proof/producers/tap-adapter.js +200 -0
  237. package/dist/proof/receipt-outcome.d.ts +2 -0
  238. package/dist/proof/receipt-outcome.d.ts.map +1 -0
  239. package/dist/proof/receipt-outcome.js +1 -0
  240. package/dist/public/diagnostic-usage.js +6 -6
  241. package/dist/public/distribution-parity.d.ts +7 -1
  242. package/dist/public/distribution-parity.d.ts.map +1 -1
  243. package/dist/public/distribution-parity.js +15 -10
  244. package/dist/public/impact/coverage-depth-quality.d.ts +1 -0
  245. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  246. package/dist/public/impact/coverage-depth-quality.js +1 -1
  247. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  248. package/dist/public/impact/diagnostics.js +2 -2
  249. package/dist/public/impact/diff-meaning.d.ts +1 -0
  250. package/dist/public/impact/diff-meaning.d.ts.map +1 -1
  251. package/dist/public/impact/diff-meaning.js +5 -2
  252. package/dist/public/impact/full-kb-quality.d.ts +5 -2
  253. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  254. package/dist/public/impact/full-kb-quality.js +329 -64
  255. package/dist/public/operations/catalog.d.ts +447 -196
  256. package/dist/public/operations/catalog.d.ts.map +1 -1
  257. package/dist/public/operations/catalog.js +6 -4
  258. package/dist/public/operations/check-executor.d.ts.map +1 -1
  259. package/dist/public/operations/check-executor.js +3 -7
  260. package/dist/public/operations/contracts.d.ts +7 -0
  261. package/dist/public/operations/contracts.d.ts.map +1 -1
  262. package/dist/public/operations/contracts.js +31 -22
  263. package/dist/public/operations/discovery-entities.d.ts +3 -0
  264. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  265. package/dist/public/operations/discovery-entities.js +4 -0
  266. package/dist/public/operations/discovery-executors.d.ts +9 -9
  267. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  268. package/dist/public/operations/discovery-executors.js +17 -14
  269. package/dist/public/operations/index.d.ts +1 -1
  270. package/dist/public/operations/index.d.ts.map +1 -1
  271. package/dist/public/operations/index.js +1 -1
  272. package/dist/public/operations/migration-plan.d.ts +4 -3
  273. package/dist/public/operations/migration-plan.d.ts.map +1 -1
  274. package/dist/public/operations/migration-plan.js +23 -21
  275. package/dist/public/operations/node-ports.js +6 -6
  276. package/dist/public/operations/repair-plan.d.ts +3 -3
  277. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  278. package/dist/public/operations/repair-plan.js +49 -19
  279. package/dist/public/operations/result-envelope.d.ts +1 -0
  280. package/dist/public/operations/result-envelope.d.ts.map +1 -1
  281. package/dist/public/operations/result-envelope.js +12 -10
  282. package/dist/public/operations/runtime-types.d.ts +5 -0
  283. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  284. package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
  285. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
  286. package/dist/public/operations/specs/check-rules.generated.js +34 -0
  287. package/dist/public/operations/specs/check.d.ts +7 -2
  288. package/dist/public/operations/specs/check.d.ts.map +1 -1
  289. package/dist/public/operations/specs/check.js +8 -20
  290. package/dist/public/operations/specs/mutation-schemas.d.ts +257 -163
  291. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  292. package/dist/public/operations/specs/mutation-schemas.js +15 -7
  293. package/dist/public/operations/specs/planning.d.ts +9 -0
  294. package/dist/public/operations/specs/planning.d.ts.map +1 -1
  295. package/dist/public/operations/specs/planning.js +6 -0
  296. package/dist/public/operations/specs/proof.d.ts +212 -0
  297. package/dist/public/operations/specs/proof.d.ts.map +1 -0
  298. package/dist/public/operations/specs/proof.js +30 -0
  299. package/dist/public/operations/specs/reporting.d.ts +19 -0
  300. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  301. package/dist/public/operations/specs/reporting.js +112 -12
  302. package/dist/public/operations/specs/upsert.d.ts +257 -163
  303. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  304. package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
  305. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
  306. package/dist/public/operations/symbol-repair-plan.js +118 -3
  307. package/dist/public/operations/types.d.ts +1 -1
  308. package/dist/public/operations/types.d.ts.map +1 -1
  309. package/dist/public/proof-fingerprint.d.ts +54 -0
  310. package/dist/public/proof-fingerprint.d.ts.map +1 -0
  311. package/dist/public/proof-fingerprint.js +141 -0
  312. package/dist/public/proof-protocol.d.ts +354 -0
  313. package/dist/public/proof-protocol.d.ts.map +1 -0
  314. package/dist/public/proof-protocol.js +454 -0
  315. package/dist/public/proof-receipt.d.ts +279 -0
  316. package/dist/public/proof-receipt.d.ts.map +1 -0
  317. package/dist/public/proof-receipt.js +377 -0
  318. package/dist/public/schemas/entity.d.ts.map +1 -1
  319. package/dist/public/schemas/entity.js +21 -7
  320. package/dist/public/skills/kibi-freshness/SKILL.md +1 -1
  321. package/dist/public/skills/kibi-usage/SKILL.md +41 -12
  322. package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
  323. package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
  324. package/dist/public/skills/kibi-usage/resources/workflows.md +6 -6
  325. package/dist/public/symbol-granularity.d.ts +3 -14
  326. package/dist/public/symbol-granularity.d.ts.map +1 -1
  327. package/dist/public/symbol-granularity.generated.d.ts +16 -0
  328. package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
  329. package/dist/public/symbol-granularity.generated.js +20 -0
  330. package/dist/public/symbol-granularity.js +6 -47
  331. package/dist/public/telemetry-acceptance.d.ts +3 -77
  332. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  333. package/dist/public/telemetry-acceptance.js +4 -2
  334. package/dist/public/telemetry-remediation.js +1 -1
  335. package/dist/report/html-report.css +282 -0
  336. package/dist/report/html-report.d.ts +4 -2
  337. package/dist/report/html-report.d.ts.map +1 -1
  338. package/dist/report/html-report.js +37 -300
  339. package/dist/runtime/cli-runtime.d.ts +2 -0
  340. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  341. package/dist/runtime/cli-runtime.js +14 -7
  342. package/dist/schemas/entity.schema.json +355 -215
  343. package/dist/search-ranking.d.ts +1 -0
  344. package/dist/search-ranking.d.ts.map +1 -1
  345. package/dist/search-ranking.js +3 -0
  346. package/dist/traceability/evidence-model.d.ts +28 -0
  347. package/dist/traceability/evidence-model.d.ts.map +1 -1
  348. package/dist/traceability/git-staged.d.ts +20 -0
  349. package/dist/traceability/git-staged.d.ts.map +1 -1
  350. package/dist/traceability/git-staged.js +145 -1
  351. package/dist/traceability/staged-diagnostics.d.ts +7 -0
  352. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  353. package/dist/traceability/staged-diagnostics.js +78 -7
  354. package/dist/traceability/staged-file-coverage.d.ts +33 -0
  355. package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
  356. package/dist/traceability/staged-file-coverage.js +284 -0
  357. package/dist/traceability/staged-impact-contract.js +4 -4
  358. package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
  359. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  360. package/dist/traceability/staged-symbols-manifest.js +138 -27
  361. package/dist/traceability/symbol-extract.d.ts +5 -0
  362. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  363. package/dist/traceability/symbol-extract.js +1 -1
  364. package/dist/traceability/temp-kb.d.ts +2 -0
  365. package/dist/traceability/temp-kb.d.ts.map +1 -1
  366. package/dist/traceability/temp-kb.js +13 -4
  367. package/dist/types/entities.d.ts +5 -3
  368. package/dist/types/entities.d.ts.map +1 -1
  369. package/dist/utils/branch-resolver.d.ts +1 -0
  370. package/dist/utils/branch-resolver.d.ts.map +1 -1
  371. package/dist/utils/branch-resolver.js +7 -4
  372. package/dist/utils/branch-store.d.ts +6 -0
  373. package/dist/utils/branch-store.d.ts.map +1 -1
  374. package/dist/utils/branch-store.js +27 -0
  375. package/dist/utils/kb-paths.d.ts +1 -1
  376. package/dist/utils/kb-paths.d.ts.map +1 -1
  377. package/dist/utils/kb-paths.js +1 -1
  378. package/dist/utils/rule-registry.d.ts +1 -11
  379. package/dist/utils/rule-registry.d.ts.map +1 -1
  380. package/dist/utils/rule-registry.generated.d.ts +97 -0
  381. package/dist/utils/rule-registry.generated.d.ts.map +1 -0
  382. package/dist/utils/rule-registry.generated.js +125 -0
  383. package/dist/utils/rule-registry.js +12 -113
  384. package/dist/utils/strict-modeling.d.ts +1 -0
  385. package/dist/utils/strict-modeling.d.ts.map +1 -1
  386. package/dist/utils/strict-modeling.js +1 -1
  387. package/package.json +8 -11
  388. package/src/public/diagnostic-usage.ts +6 -6
  389. package/src/public/distribution-parity.ts +17 -10
  390. package/src/public/impact/coverage-depth-quality.ts +1 -1
  391. package/src/public/impact/diagnostics.ts +2 -1
  392. package/src/public/impact/diff-meaning.ts +11 -4
  393. package/src/public/impact/full-kb-quality.ts +463 -72
  394. package/src/public/operations/catalog.ts +10 -4
  395. package/src/public/operations/check-executor.ts +3 -7
  396. package/src/public/operations/contracts.ts +38 -22
  397. package/src/public/operations/discovery-entities.ts +7 -0
  398. package/src/public/operations/discovery-executors.ts +26 -23
  399. package/src/public/operations/index.ts +1 -1
  400. package/src/public/operations/migration-plan.ts +32 -25
  401. package/src/public/operations/node-ports.ts +6 -6
  402. package/src/public/operations/repair-plan.ts +60 -23
  403. package/src/public/operations/result-envelope.ts +15 -10
  404. package/src/public/operations/runtime-types.ts +5 -0
  405. package/src/public/operations/specs/check-rules.generated.ts +37 -0
  406. package/src/public/operations/specs/check.ts +12 -21
  407. package/src/public/operations/specs/mutation-schemas.ts +22 -9
  408. package/src/public/operations/specs/planning.ts +7 -0
  409. package/src/public/operations/specs/proof.ts +43 -0
  410. package/src/public/operations/specs/reporting.ts +140 -13
  411. package/src/public/operations/symbol-repair-plan.ts +163 -3
  412. package/src/public/operations/types.ts +1 -1
  413. package/src/public/proof-fingerprint.ts +216 -0
  414. package/src/public/proof-protocol-types.d.ts +96 -0
  415. package/src/public/proof-protocol.ts +589 -0
  416. package/src/public/proof-receipt.ts +499 -0
  417. package/src/public/schemas/entity.ts +26 -10
  418. package/src/public/skills/kibi-freshness/SKILL.md +1 -1
  419. package/src/public/skills/kibi-usage/SKILL.md +41 -12
  420. package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
  421. package/src/public/skills/kibi-usage/resources/proof.md +105 -0
  422. package/src/public/skills/kibi-usage/resources/workflows.md +6 -6
  423. package/src/public/symbol-granularity.generated.ts +41 -0
  424. package/src/public/symbol-granularity.ts +35 -60
  425. package/src/public/telemetry-acceptance-types.d.ts +98 -0
  426. package/src/public/telemetry-acceptance.ts +22 -100
  427. package/src/public/telemetry-remediation.ts +1 -1
  428. package/src/schemas/entity.schema.json +355 -215
  429. package/dist/cli-register-verification.d.ts +0 -3
  430. package/dist/cli-register-verification.d.ts.map +0 -1
  431. package/dist/cli-register-verification.js +0 -16
  432. package/dist/commands/verify.d.ts +0 -10
  433. package/dist/commands/verify.d.ts.map +0 -1
  434. package/dist/commands/verify.js +0 -126
  435. package/dist/operations/verification/ingest-verification.d.ts +0 -29
  436. package/dist/operations/verification/ingest-verification.d.ts.map +0 -1
  437. package/dist/operations/verification/ingest-verification.js +0 -192
  438. package/dist/public/operations/specs/verification.d.ts +0 -78
  439. package/dist/public/operations/specs/verification.d.ts.map +0 -1
  440. package/dist/public/operations/specs/verification.js +0 -62
  441. package/dist/public/playwright-case-id.d.ts.map +0 -1
  442. package/dist/public/verification-receipt.d.ts +0 -242
  443. package/dist/public/verification-receipt.d.ts.map +0 -1
  444. package/dist/public/verification-receipt.js +0 -296
  445. package/dist/verification/playwright-reporter.d.ts +0 -21
  446. package/dist/verification/playwright-reporter.d.ts.map +0 -1
  447. package/dist/verification/playwright-reporter.js +0 -114
  448. package/src/public/operations/specs/verification.ts +0 -78
  449. package/src/public/playwright-case-id.ts +0 -35
  450. package/src/public/verification-receipt.ts +0 -412
@@ -0,0 +1,589 @@
1
+ // implements REQ-kibi-proof-evidence-protocol
2
+ export const PROOF_RUN_VERSION = "kibi.proof-run.v1" as const;
3
+ // implements REQ-kibi-proof-evidence-protocol
4
+ export const PROOF_CONTRACT_VERSION = "kibi.proof-contract.v1" as const;
5
+ // implements REQ-kibi-proof-evidence-protocol
6
+ export const PROOF_RECEIPT_VERSION = "kibi.proof-receipt.v1" as const;
7
+ // implements REQ-kibi-proof-evidence-protocol
8
+ export const PROOF_INTEGRATION_VERSION = "kibi.proof-integration.v1" as const;
9
+
10
+ export const PROOF_RUN_OUTCOMES = [
11
+ "passed",
12
+ "failed",
13
+ "errored",
14
+ "cancelled",
15
+ "timed_out",
16
+ "interrupted",
17
+ "no_results",
18
+ ] as const;
19
+
20
+ export const PROOF_RESULT_OUTCOMES = [
21
+ "passed",
22
+ "failed",
23
+ "timed_out",
24
+ "skipped",
25
+ "interrupted",
26
+ "errored",
27
+ ] as const;
28
+
29
+ export const PROOF_BINDING_KINDS = ["native_case", "aggregate_run"] as const;
30
+
31
+ export const ATTEMPTS_STATUS = ["complete", "unavailable"] as const;
32
+
33
+ export const RUN_FAILURE_PHASES = [
34
+ "setup",
35
+ "collection",
36
+ "execution",
37
+ "teardown",
38
+ "infrastructure",
39
+ ] as const;
40
+
41
+ export const SUCCESS_POLICIES = ["all_required_first_attempt"] as const;
42
+
43
+ export type {
44
+ AttemptsStatus,
45
+ ProducerProvenance,
46
+ ProofAttempt,
47
+ ProofAttempts,
48
+ ProofBinding,
49
+ ProofBindingKind,
50
+ ProofContract,
51
+ ProofEnvironment,
52
+ ProofObligation,
53
+ ProofResult,
54
+ ProofResultOutcome,
55
+ ProofRun,
56
+ ProofRunArtifact,
57
+ ProofRunOutcome,
58
+ RunFailurePhase,
59
+ SuccessPolicy,
60
+ } from "./proof-protocol-types.js";
61
+
62
+ import type {
63
+ ProducerProvenance,
64
+ ProofAttempts,
65
+ ProofBinding,
66
+ ProofContract,
67
+ ProofResult,
68
+ ProofRunArtifact,
69
+ } from "./proof-protocol-types.js";
70
+
71
+ export const PROOF_RESULT_SCHEMA = {
72
+ type: "object",
73
+ description:
74
+ "One observed proof result. binding distinguishes native-case observations from aggregate-run bindings; attempts must report facts only.",
75
+ required: ["symbol_id", "target", "outcome", "binding", "attempts"],
76
+ properties: {
77
+ symbol_id: {
78
+ type: "string",
79
+ minLength: 1,
80
+ description: "Stable proof symbol ID (SYM-*).",
81
+ },
82
+ target: {
83
+ type: "string",
84
+ minLength: 1,
85
+ description:
86
+ "Ecosystem-neutral execution target (browser, runtime, database, device, deployment, or default).",
87
+ },
88
+ outcome: { type: "string", enum: [...PROOF_RESULT_OUTCOMES] },
89
+ binding: { type: "string", enum: [...PROOF_BINDING_KINDS] },
90
+ native_id: { type: "string", minLength: 1 },
91
+ attempts: {
92
+ oneOf: [
93
+ {
94
+ type: "object",
95
+ required: ["status", "entries"],
96
+ properties: {
97
+ status: { type: "string", const: "complete" },
98
+ entries: {
99
+ type: "array",
100
+ minItems: 1,
101
+ maxItems: 100,
102
+ items: {
103
+ type: "object",
104
+ required: ["outcome"],
105
+ properties: {
106
+ outcome: { type: "string", enum: [...PROOF_RESULT_OUTCOMES] },
107
+ duration_ms: { type: "number", minimum: 0 },
108
+ },
109
+ additionalProperties: false,
110
+ },
111
+ },
112
+ },
113
+ additionalProperties: false,
114
+ },
115
+ {
116
+ type: "object",
117
+ required: ["status"],
118
+ properties: { status: { type: "string", const: "unavailable" } },
119
+ additionalProperties: false,
120
+ },
121
+ ],
122
+ },
123
+ diagnostics: {
124
+ type: "array",
125
+ items: { type: "string", minLength: 1 },
126
+ },
127
+ },
128
+ additionalProperties: false,
129
+ } as const;
130
+
131
+ export const PROOF_RUN_ARTIFACT_SCHEMA = {
132
+ type: "object",
133
+ description:
134
+ "Producer-emitted kibi.proof-run.v1 proof artifact. Producers report what happened; Kibi evaluates proof obligations and policies. Produce it via `kibi prove` or direct kb_ingest_proof calls.",
135
+ required: [
136
+ "version",
137
+ "producer",
138
+ "command_argv",
139
+ "code_snapshot",
140
+ "environment",
141
+ "run",
142
+ "proof_results",
143
+ ],
144
+ properties: {
145
+ version: { type: "string", const: PROOF_RUN_VERSION },
146
+ producer: {
147
+ type: "object",
148
+ required: ["name"],
149
+ properties: {
150
+ name: { type: "string", minLength: 1 },
151
+ version: { type: "string", minLength: 1 },
152
+ },
153
+ additionalProperties: false,
154
+ },
155
+ executor: {
156
+ type: "object",
157
+ required: ["name"],
158
+ properties: {
159
+ name: { type: "string", minLength: 1 },
160
+ version: { type: "string", minLength: 1 },
161
+ },
162
+ additionalProperties: false,
163
+ },
164
+ command_argv: {
165
+ type: "array",
166
+ minItems: 1,
167
+ items: { type: "string", minLength: 1 },
168
+ },
169
+ code_snapshot: { type: "string", pattern: "^[a-f0-9]{64}$" },
170
+ environment: { type: "object", additionalProperties: true },
171
+ run: {
172
+ type: "object",
173
+ required: ["outcome", "exit_code", "started_at", "finished_at"],
174
+ properties: {
175
+ outcome: { type: "string", enum: [...PROOF_RUN_OUTCOMES] },
176
+ exit_code: { type: "integer" },
177
+ started_at: { type: "string", minLength: 1 },
178
+ finished_at: { type: "string", minLength: 1 },
179
+ failure_phase: { type: "string", enum: [...RUN_FAILURE_PHASES] },
180
+ },
181
+ additionalProperties: false,
182
+ },
183
+ proof_results: {
184
+ type: "array",
185
+ minItems: 1,
186
+ maxItems: 1000,
187
+ items: PROOF_RESULT_SCHEMA,
188
+ },
189
+ integration: { type: "string", minLength: 1 },
190
+ diagnostics: {
191
+ type: "array",
192
+ items: { type: "string", minLength: 1 },
193
+ },
194
+ },
195
+ additionalProperties: false,
196
+ } as const;
197
+
198
+ export const PROOF_CONTRACT_SCHEMA = {
199
+ type: "object",
200
+ description:
201
+ "Semantic proof contract binding a test to explicit proof obligations executed by a configured integration.",
202
+ required: ["version", "integration", "required_proofs", "success_policy"],
203
+ properties: {
204
+ version: { type: "string", const: PROOF_CONTRACT_VERSION },
205
+ integration: { type: "string", minLength: 1 },
206
+ required_proofs: {
207
+ type: "array",
208
+ minItems: 1,
209
+ maxItems: 1000,
210
+ items: {
211
+ type: "object",
212
+ required: ["symbol_id", "target"],
213
+ properties: {
214
+ symbol_id: { type: "string", minLength: 1 },
215
+ target: { type: "string", minLength: 1 },
216
+ },
217
+ additionalProperties: false,
218
+ },
219
+ },
220
+ success_policy: { type: "string", enum: [...SUCCESS_POLICIES] },
221
+ },
222
+ additionalProperties: false,
223
+ } as const;
224
+
225
+ export const PROOF_BINDINGS_SCHEMA = {
226
+ type: "array",
227
+ description:
228
+ "Optional native-runner bindings for proof obligations. Bindings are provenance metadata; they never replace the semantic proof contract.",
229
+ items: {
230
+ type: "object",
231
+ required: ["symbol_id", "target"],
232
+ properties: {
233
+ symbol_id: { type: "string", minLength: 1 },
234
+ target: { type: "string", minLength: 1 },
235
+ native_id: { type: "string", minLength: 1 },
236
+ aliases: {
237
+ type: "array",
238
+ items: { type: "string", minLength: 1 },
239
+ },
240
+ source_file: { type: "string", minLength: 1 },
241
+ line: { type: "integer", minimum: 1 },
242
+ },
243
+ additionalProperties: false,
244
+ },
245
+ } as const;
246
+
247
+ function record(value: unknown): Record<string, unknown> | null {
248
+ return value !== null && typeof value === "object" && !Array.isArray(value)
249
+ ? (value as Record<string, unknown>)
250
+ : null;
251
+ }
252
+
253
+ function nonEmptyString(value: unknown): boolean {
254
+ return typeof value === "string" && value.trim().length > 0;
255
+ }
256
+
257
+ function hex64(value: unknown): boolean {
258
+ return typeof value === "string" && /^[a-f0-9]{64}$/.test(value);
259
+ }
260
+
261
+ function isPlainJson(value: unknown): boolean {
262
+ if (
263
+ value === null ||
264
+ typeof value === "string" ||
265
+ typeof value === "number" ||
266
+ typeof value === "boolean"
267
+ ) {
268
+ return true;
269
+ }
270
+ if (Array.isArray(value)) return value.every(isPlainJson);
271
+ const row = record(value);
272
+ if (!row) return false;
273
+ return Object.values(row).every(isPlainJson);
274
+ }
275
+
276
+ function includes<T extends string>(
277
+ list: readonly T[],
278
+ value: unknown,
279
+ ): value is T {
280
+ return (
281
+ typeof value === "string" && (list as readonly string[]).includes(value)
282
+ );
283
+ }
284
+
285
+ function producerProvenanceErrors(
286
+ value: unknown,
287
+ label: string,
288
+ required: boolean,
289
+ ): string[] {
290
+ if (value === undefined) {
291
+ return required ? [`${label} is required`] : [];
292
+ }
293
+ const row = record(value);
294
+ if (!row)
295
+ return [
296
+ `${label} must be an object with a non-empty name (and optional version)`,
297
+ ];
298
+ const errors: string[] = [];
299
+ if (!nonEmptyString(row.name))
300
+ errors.push(`${label}.name must be a non-empty string`);
301
+ if (row.version !== undefined && !nonEmptyString(row.version))
302
+ errors.push(`${label}.version must be a non-empty string when present`);
303
+ return errors;
304
+ }
305
+
306
+ function attemptsErrors(value: unknown, label: string): string[] {
307
+ const row = record(value);
308
+ if (!row)
309
+ return [
310
+ `${label} must be an object: {status: "complete", entries: [...]} or {status: "unavailable"}`,
311
+ ];
312
+ if (!includes(ATTEMPTS_STATUS, row.status))
313
+ return [
314
+ `${label}.status must be one of: complete, unavailable; received ${JSON.stringify(row.status ?? null)}`,
315
+ ];
316
+ if (row.status === "unavailable") {
317
+ if (row.entries !== undefined)
318
+ return [`${label}.entries must be omitted when status is unavailable`];
319
+ return [];
320
+ }
321
+ if (!Array.isArray(row.entries) || row.entries.length === 0)
322
+ return [
323
+ `${label}.entries must be a non-empty array when status is complete`,
324
+ ];
325
+ const errors: string[] = [];
326
+ row.entries.forEach((entry, index) => {
327
+ const entryRow = record(entry);
328
+ const entryLabel = `${label}.entries[${index}]`;
329
+ if (!entryRow) {
330
+ errors.push(
331
+ `${entryLabel} must be an object with outcome (and optional duration_ms)`,
332
+ );
333
+ return;
334
+ }
335
+ if (!includes(PROOF_RESULT_OUTCOMES, entryRow.outcome))
336
+ errors.push(
337
+ `${entryLabel}.outcome must be one of: ${PROOF_RESULT_OUTCOMES.join(", ")}; received ${JSON.stringify(entryRow.outcome ?? null)}`,
338
+ );
339
+ if (
340
+ entryRow.duration_ms !== undefined &&
341
+ (!Number.isInteger(entryRow.duration_ms) ||
342
+ Number(entryRow.duration_ms) < 0)
343
+ )
344
+ errors.push(
345
+ `${entryLabel}.duration_ms must be a non-negative integer; received ${JSON.stringify(entryRow.duration_ms ?? null)}`,
346
+ );
347
+ });
348
+ return errors;
349
+ }
350
+
351
+ export function proofResultErrors(value: unknown, label: string): string[] {
352
+ const row = record(value);
353
+ if (!row)
354
+ return [
355
+ `${label} must be an object with symbol_id, target, outcome, binding, and attempts`,
356
+ ];
357
+ const errors: string[] = [];
358
+ if (!nonEmptyString(row.symbol_id))
359
+ errors.push(
360
+ `${label}.symbol_id must be a non-empty proof symbol ID (SYM-*)`,
361
+ );
362
+ if (!nonEmptyString(row.target))
363
+ errors.push(`${label}.target must be a non-empty execution target`);
364
+ if (!includes(PROOF_RESULT_OUTCOMES, row.outcome))
365
+ errors.push(
366
+ `${label}.outcome must be one of: ${PROOF_RESULT_OUTCOMES.join(", ")}; received ${JSON.stringify(row.outcome ?? null)}`,
367
+ );
368
+ if (!includes(PROOF_BINDING_KINDS, row.binding))
369
+ errors.push(
370
+ `${label}.binding must be one of: ${PROOF_BINDING_KINDS.join(", ")}; received ${JSON.stringify(row.binding ?? null)}`,
371
+ );
372
+ if (row.native_id !== undefined && !nonEmptyString(row.native_id))
373
+ errors.push(`${label}.native_id must be a non-empty string when present`);
374
+ errors.push(...attemptsErrors(row.attempts, `${label}.attempts`));
375
+ if (row.diagnostics !== undefined) {
376
+ if (
377
+ !Array.isArray(row.diagnostics) ||
378
+ !row.diagnostics.every((entry) => nonEmptyString(entry))
379
+ )
380
+ errors.push(`${label}.diagnostics must be an array of non-empty strings`);
381
+ }
382
+ return errors;
383
+ }
384
+
385
+ export function proofRunArtifactErrors(value: unknown): string[] {
386
+ const artifact = record(value);
387
+ if (!artifact)
388
+ return [
389
+ "artifact must be an object with version, producer, command_argv, code_snapshot, environment, run, and proof_results",
390
+ ];
391
+ const errors: string[] = [];
392
+ if (artifact.version !== PROOF_RUN_VERSION)
393
+ errors.push(
394
+ `artifact.version must be ${PROOF_RUN_VERSION}; received ${JSON.stringify(artifact.version ?? null)}`,
395
+ );
396
+ errors.push(
397
+ ...producerProvenanceErrors(artifact.producer, "artifact.producer", true),
398
+ );
399
+ errors.push(
400
+ ...producerProvenanceErrors(artifact.executor, "artifact.executor", false),
401
+ );
402
+ if (
403
+ !Array.isArray(artifact.command_argv) ||
404
+ artifact.command_argv.length === 0 ||
405
+ !artifact.command_argv.every((entry) => nonEmptyString(entry))
406
+ )
407
+ errors.push(
408
+ "artifact.command_argv must be a non-empty array of the exact executed command arguments",
409
+ );
410
+ if (!hex64(artifact.code_snapshot))
411
+ errors.push(
412
+ "artifact.code_snapshot must be the 64-hex workspace snapshot captured before the run",
413
+ );
414
+ const environment = record(artifact.environment);
415
+ if (!environment)
416
+ errors.push("artifact.environment must be a typed environment object");
417
+ else if (!isPlainJson(environment))
418
+ errors.push("artifact.environment must contain only JSON values");
419
+ const run = record(artifact.run);
420
+ if (!run)
421
+ errors.push(
422
+ "artifact.run must be an object with outcome, exit_code, started_at, and finished_at",
423
+ );
424
+ else {
425
+ if (!includes(PROOF_RUN_OUTCOMES, run.outcome))
426
+ errors.push(
427
+ `artifact.run.outcome must be one of: ${PROOF_RUN_OUTCOMES.join(", ")}; received ${JSON.stringify(run.outcome ?? null)}`,
428
+ );
429
+ if (!Number.isInteger(run.exit_code))
430
+ errors.push(
431
+ `artifact.run.exit_code must be an integer; received ${JSON.stringify(run.exit_code ?? null)}`,
432
+ );
433
+ if (!nonEmptyString(run.started_at))
434
+ errors.push("artifact.run.started_at must be a non-empty ISO timestamp");
435
+ if (!nonEmptyString(run.finished_at))
436
+ errors.push("artifact.run.finished_at must be a non-empty ISO timestamp");
437
+ if (
438
+ run.failure_phase !== undefined &&
439
+ !includes(RUN_FAILURE_PHASES, run.failure_phase)
440
+ )
441
+ errors.push(
442
+ `artifact.run.failure_phase must be one of: ${RUN_FAILURE_PHASES.join(", ")}; received ${JSON.stringify(run.failure_phase ?? null)}`,
443
+ );
444
+ }
445
+ if (
446
+ !Array.isArray(artifact.proof_results) ||
447
+ artifact.proof_results.length === 0
448
+ ) {
449
+ errors.push(
450
+ "artifact.proof_results must be a non-empty array of proof results with symbol_id, target, outcome, binding, and attempts",
451
+ );
452
+ } else {
453
+ if (artifact.proof_results.length > 1000)
454
+ errors.push("artifact.proof_results must contain at most 1000 results");
455
+ const seen = new Set<string>();
456
+ artifact.proof_results.forEach((entry, index) => {
457
+ const label = `artifact.proof_results[${index}]`;
458
+ errors.push(...proofResultErrors(entry, label));
459
+ const row = record(entry);
460
+ if (row && nonEmptyString(row.symbol_id) && nonEmptyString(row.target)) {
461
+ const key = `${String(row.target)}\0${String(row.symbol_id)}`;
462
+ if (seen.has(key))
463
+ errors.push(
464
+ `${label} duplicates target/symbol_id '${key.replace("\0", "/")}'`,
465
+ );
466
+ seen.add(key);
467
+ }
468
+ });
469
+ }
470
+ if (
471
+ artifact.integration !== undefined &&
472
+ !nonEmptyString(artifact.integration)
473
+ )
474
+ errors.push("artifact.integration must be a non-empty string when present");
475
+ if (artifact.diagnostics !== undefined) {
476
+ if (
477
+ !Array.isArray(artifact.diagnostics) ||
478
+ !artifact.diagnostics.every((entry) => nonEmptyString(entry))
479
+ )
480
+ errors.push("artifact.diagnostics must be an array of non-empty strings");
481
+ }
482
+ return errors;
483
+ }
484
+
485
+ export function proofContractErrors(value: unknown): string[] {
486
+ const contract = record(value);
487
+ if (!contract)
488
+ return [
489
+ "proof_contract must be an object with version, integration, required_proofs, and success_policy",
490
+ ];
491
+ const errors: string[] = [];
492
+ if (contract.version !== PROOF_CONTRACT_VERSION)
493
+ errors.push(
494
+ `proof_contract.version must be ${PROOF_CONTRACT_VERSION}; received ${JSON.stringify(contract.version ?? null)}`,
495
+ );
496
+ if (!nonEmptyString(contract.integration))
497
+ errors.push(
498
+ "proof_contract.integration must reference a configured integration id",
499
+ );
500
+ if (
501
+ !Array.isArray(contract.required_proofs) ||
502
+ contract.required_proofs.length === 0
503
+ ) {
504
+ errors.push(
505
+ "proof_contract.required_proofs must be a non-empty array of {symbol_id, target} obligations",
506
+ );
507
+ } else {
508
+ if (contract.required_proofs.length > 1000)
509
+ errors.push(
510
+ "proof_contract.required_proofs must contain at most 1000 obligations",
511
+ );
512
+ const seen = new Set<string>();
513
+ contract.required_proofs.forEach((entry, index) => {
514
+ const row = record(entry);
515
+ const label = `proof_contract.required_proofs[${index}]`;
516
+ if (!row) {
517
+ errors.push(`${label} must be an object with symbol_id and target`);
518
+ return;
519
+ }
520
+ if (!nonEmptyString(row.symbol_id))
521
+ errors.push(
522
+ `${label}.symbol_id must be a non-empty proof symbol ID (SYM-*)`,
523
+ );
524
+ if (!nonEmptyString(row.target))
525
+ errors.push(`${label}.target must be a non-empty execution target`);
526
+ if (nonEmptyString(row.symbol_id) && nonEmptyString(row.target)) {
527
+ const key = `${String(row.target)}\0${String(row.symbol_id)}`;
528
+ if (seen.has(key))
529
+ errors.push(
530
+ `${label} duplicates target/symbol_id '${key.replace("\0", "/")}'`,
531
+ );
532
+ seen.add(key);
533
+ }
534
+ });
535
+ }
536
+ if (!includes(SUCCESS_POLICIES, contract.success_policy))
537
+ errors.push(
538
+ `proof_contract.success_policy must be one of: ${SUCCESS_POLICIES.join(", ")}; received ${JSON.stringify(contract.success_policy ?? null)}`,
539
+ );
540
+ return errors;
541
+ }
542
+
543
+ export function proofBindingsErrors(value: unknown): string[] {
544
+ if (!Array.isArray(value))
545
+ return ["proof_bindings must be an array of binding objects"];
546
+ const errors: string[] = [];
547
+ const seen = new Set<string>();
548
+ value.forEach((entry, index) => {
549
+ const row = record(entry);
550
+ const label = `proof_bindings[${index}]`;
551
+ if (!row) {
552
+ errors.push(`${label} must be an object with symbol_id and target`);
553
+ return;
554
+ }
555
+ if (!nonEmptyString(row.symbol_id))
556
+ errors.push(
557
+ `${label}.symbol_id must be a non-empty proof symbol ID (SYM-*)`,
558
+ );
559
+ if (!nonEmptyString(row.target))
560
+ errors.push(`${label}.target must be a non-empty execution target`);
561
+ if (row.native_id !== undefined && !nonEmptyString(row.native_id))
562
+ errors.push(`${label}.native_id must be a non-empty string when present`);
563
+ if (row.aliases !== undefined) {
564
+ if (
565
+ !Array.isArray(row.aliases) ||
566
+ !row.aliases.every((alias) => nonEmptyString(alias))
567
+ )
568
+ errors.push(`${label}.aliases must be an array of non-empty strings`);
569
+ }
570
+ if (row.source_file !== undefined && !nonEmptyString(row.source_file))
571
+ errors.push(
572
+ `${label}.source_file must be a non-empty string when present`,
573
+ );
574
+ if (
575
+ row.line !== undefined &&
576
+ (!Number.isInteger(row.line) || Number(row.line) < 1)
577
+ )
578
+ errors.push(`${label}.line must be a positive integer when present`);
579
+ if (nonEmptyString(row.symbol_id) && nonEmptyString(row.target)) {
580
+ const key = `${String(row.target)}\0${String(row.symbol_id)}`;
581
+ if (seen.has(key))
582
+ errors.push(
583
+ `${label} duplicates target/symbol_id '${key.replace("\0", "/")}'`,
584
+ );
585
+ seen.add(key);
586
+ }
587
+ });
588
+ return errors;
589
+ }