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
@@ -1,78 +0,0 @@
1
- import {
2
- type IngestVerificationArgs,
3
- type IngestVerificationResult,
4
- executeIngestVerification,
5
- } from "../../../operations/verification/ingest-verification.js";
6
- import type { OperationSpec } from "../types.js";
7
-
8
- export type {
9
- IngestVerificationArgs,
10
- IngestVerificationResult,
11
- } from "../../../operations/verification/ingest-verification.js";
12
- export { executeIngestVerification } from "../../../operations/verification/ingest-verification.js";
13
-
14
- // implements REQ-kibi-verification-evidence-contract
15
- export const ingestVerificationSpec = {
16
- name: "kb_ingest_verification",
17
- cliName: "ingest-verification",
18
- description:
19
- "Ingest a reporter-produced kibi.playwright-run.v1 artifact for a contracted test. Revalidates the live workspace snapshot, runner/command contract, required case/project coverage, and append-only receipt history before deriving and appending a kibi.verification-receipt.v2. It never accepts a caller-authored receipt or trusted outcome.",
20
- businessInputSchema: {
21
- type: "object",
22
- required: ["testId", "snapshot", "artifact"],
23
- properties: {
24
- testId: {
25
- type: "string",
26
- minLength: 1,
27
- description: "Existing test entity with verification_contract.v1.",
28
- },
29
- snapshot: {
30
- type: "string",
31
- pattern: "^[a-f0-9]{64}$",
32
- description:
33
- "Workspace verification snapshot captured immediately before the run.",
34
- },
35
- artifact: {
36
- type: "object",
37
- required: [
38
- "version",
39
- "runner",
40
- "command_argv",
41
- "code_snapshot",
42
- "environment_hash",
43
- "started_at",
44
- "finished_at",
45
- "process_exit_code",
46
- "cases",
47
- ],
48
- properties: {
49
- version: { type: "string", const: "kibi.playwright-run.v1" },
50
- runner: { type: "string", minLength: 1 },
51
- command_argv: {
52
- type: "array",
53
- minItems: 1,
54
- items: { type: "string", minLength: 1 },
55
- },
56
- code_snapshot: { type: "string", pattern: "^[a-f0-9]{64}$" },
57
- environment_hash: { type: "string", pattern: "^[a-f0-9]{64}$" },
58
- started_at: { type: "string", minLength: 1 },
59
- finished_at: { type: "string", minLength: 1 },
60
- process_exit_code: { type: "integer" },
61
- cases: {
62
- type: "array",
63
- minItems: 1,
64
- maxItems: 1000,
65
- items: { type: "object" },
66
- },
67
- },
68
- additionalProperties: true,
69
- },
70
- },
71
- },
72
- requiresProlog: true,
73
- effects: ["kb-read", "kb-write", "workspace-read"],
74
- execute: executeIngestVerification,
75
- } as const satisfies OperationSpec<
76
- IngestVerificationArgs,
77
- IngestVerificationResult
78
- >;
@@ -1,35 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import path from "node:path";
3
-
4
- /**
5
- * Stable identity for a statically named Playwright test case.
6
- * The path is always repository-relative before hashing so the same case has
7
- * the same identity in a checkout, packed consumer, and dogfood workspace.
8
- */
9
- // implements REQ-kibi-verification-evidence-contract
10
- export function playwrightCaseId(
11
- sourceFile: string,
12
- qualifiedTitle: string,
13
- ): string {
14
- const normalizedPath = sourceFile
15
- .replaceAll("\\", "/")
16
- .replace(/^\.\//, "")
17
- .replace(/^\/+/, "");
18
- const key = `${normalizedPath}\0${qualifiedTitle.trim()}`;
19
- return `SYM-PW-${createHash("sha256").update(key).digest("hex").slice(0, 16).toUpperCase()}`;
20
- }
21
-
22
- // implements REQ-kibi-verification-evidence-contract
23
- export function normalizePlaywrightSourceFile(
24
- sourceFile: string,
25
- workspaceRoot?: string,
26
- ): string {
27
- const absolute = path.resolve(sourceFile);
28
- if (!workspaceRoot) return sourceFile.replaceAll("\\", "/");
29
- const root = path.resolve(workspaceRoot);
30
- const relative = path.relative(root, absolute);
31
- return (relative.startsWith("..") ? sourceFile : relative).replaceAll(
32
- "\\",
33
- "/",
34
- );
35
- }
@@ -1,412 +0,0 @@
1
- import { createHash } from "node:crypto";
2
-
3
- export const VERIFICATION_RECEIPT_VERSION =
4
- "kibi.verification-receipt.v1" as const;
5
- // implements REQ-kibi-verification-evidence-contract
6
- export const VERIFICATION_RECEIPT_V2_VERSION =
7
- "kibi.verification-receipt.v2" as const;
8
- // implements REQ-kibi-verification-evidence-contract
9
- export const VERIFICATION_CONTRACT_VERSION =
10
- "kibi.verification-contract.v1" as const;
11
-
12
- export const VERIFICATION_RECEIPT_MAX_AGE_SECONDS = 7 * 24 * 60 * 60;
13
-
14
- export const VERIFICATION_RECEIPT_OUTCOMES = [
15
- "passed",
16
- "failed",
17
- "errored",
18
- "cancelled",
19
- "skipped",
20
- "timed_out",
21
- "interrupted",
22
- ] as const;
23
-
24
- const VERIFICATION_RECEIPT_V1_SCHEMA = {
25
- type: "object",
26
- required: [
27
- "version",
28
- "receipt_id",
29
- "test_id",
30
- "runner",
31
- "command",
32
- "scope",
33
- "outcome",
34
- "code_snapshot",
35
- "environment_hash",
36
- "started_at",
37
- "finished_at",
38
- "artifact_digest",
39
- ],
40
- properties: {
41
- version: { type: "string", const: VERIFICATION_RECEIPT_VERSION },
42
- receipt_id: {
43
- type: "string",
44
- pattern: "^VR-[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$",
45
- },
46
- test_id: { type: "string", minLength: 1 },
47
- runner: { type: "string", minLength: 1 },
48
- command: { type: "string", minLength: 1 },
49
- scope: { type: "string", enum: ["unit", "integration", "end_to_end"] },
50
- outcome: { type: "string", enum: [...VERIFICATION_RECEIPT_OUTCOMES] },
51
- code_snapshot: { type: "string", pattern: "^[a-f0-9]{64}$" },
52
- environment_hash: { type: "string", pattern: "^[a-f0-9]{64}$" },
53
- started_at: { type: "string", minLength: 1 },
54
- finished_at: { type: "string", minLength: 1 },
55
- artifact_digest: { type: "string", pattern: "^[a-f0-9]{64}$" },
56
- },
57
- additionalProperties: false,
58
- } as const;
59
-
60
- // implements REQ-kibi-verification-evidence-contract
61
- export const VERIFICATION_CONTRACT_SCHEMA = {
62
- type: "object",
63
- required: [
64
- "version",
65
- "runner",
66
- "command_argv",
67
- "required_case_symbols",
68
- "required_projects",
69
- "success_policy",
70
- ],
71
- properties: {
72
- version: { type: "string", const: VERIFICATION_CONTRACT_VERSION },
73
- runner: { type: "string", minLength: 1 },
74
- command_argv: {
75
- type: "array",
76
- minItems: 1,
77
- items: { type: "string", minLength: 1 },
78
- },
79
- required_case_symbols: {
80
- type: "array",
81
- items: { type: "string", minLength: 1 },
82
- uniqueItems: true,
83
- },
84
- required_projects: {
85
- type: "array",
86
- items: { type: "string", minLength: 1 },
87
- uniqueItems: true,
88
- },
89
- success_policy: {
90
- type: "string",
91
- const: "all_required_cases_first_attempt",
92
- },
93
- },
94
- additionalProperties: false,
95
- } as const;
96
-
97
- const VERIFICATION_RECEIPT_V2_SCHEMA = {
98
- ...VERIFICATION_RECEIPT_V1_SCHEMA,
99
- required: [
100
- ...VERIFICATION_RECEIPT_V1_SCHEMA.required,
101
- "command_argv",
102
- "contract_hash",
103
- "case_results",
104
- ],
105
- properties: {
106
- ...VERIFICATION_RECEIPT_V1_SCHEMA.properties,
107
- version: { type: "string", const: VERIFICATION_RECEIPT_V2_VERSION },
108
- command_argv: {
109
- type: "array",
110
- minItems: 1,
111
- items: { type: "string", minLength: 1 },
112
- },
113
- contract_hash: { type: "string", pattern: "^[a-f0-9]{64}$" },
114
- case_results: {
115
- type: "array",
116
- minItems: 1,
117
- maxItems: 1000,
118
- items: {
119
- type: "object",
120
- required: ["symbol_id", "project", "outcome", "retries", "duration_ms"],
121
- properties: {
122
- symbol_id: { type: "string", minLength: 1 },
123
- project: { type: "string", minLength: 1 },
124
- outcome: {
125
- type: "string",
126
- enum: ["passed", "failed", "timed_out", "skipped", "interrupted"],
127
- },
128
- retries: { type: "integer", minimum: 0 },
129
- duration_ms: { type: "integer", minimum: 0 },
130
- },
131
- additionalProperties: false,
132
- },
133
- },
134
- },
135
- } as const;
136
-
137
- export const VERIFICATION_RECEIPT_SCHEMA = {
138
- oneOf: [VERIFICATION_RECEIPT_V1_SCHEMA, VERIFICATION_RECEIPT_V2_SCHEMA],
139
- } as const;
140
-
141
- export type VerificationReceipt = Readonly<{
142
- version: typeof VERIFICATION_RECEIPT_VERSION;
143
- receipt_id: string;
144
- test_id: string;
145
- runner: string;
146
- command: string;
147
- scope: "unit" | "integration" | "end_to_end";
148
- outcome: (typeof VERIFICATION_RECEIPT_OUTCOMES)[number];
149
- code_snapshot: string;
150
- environment_hash: string;
151
- started_at: string;
152
- finished_at: string;
153
- artifact_digest: string;
154
- }>;
155
-
156
- // implements REQ-kibi-verification-evidence-contract
157
- export type VerificationReceiptV2 = VerificationReceipt &
158
- Readonly<{
159
- version: typeof VERIFICATION_RECEIPT_V2_VERSION;
160
- command_argv: readonly string[];
161
- contract_hash: string;
162
- case_results: readonly {
163
- symbol_id: string;
164
- project: string;
165
- outcome: "passed" | "failed" | "timed_out" | "skipped" | "interrupted";
166
- retries: number;
167
- duration_ms: number;
168
- }[];
169
- }>;
170
-
171
- // implements REQ-kibi-verification-evidence-contract
172
- export type VerificationContract = Readonly<{
173
- version: typeof VERIFICATION_CONTRACT_VERSION;
174
- runner: string;
175
- command_argv: readonly string[];
176
- required_case_symbols: readonly string[];
177
- required_projects: readonly string[];
178
- success_policy: "all_required_cases_first_attempt";
179
- }>;
180
-
181
- function timestamp(value: unknown): number | null {
182
- if (typeof value !== "string") return null;
183
- if (
184
- !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/.test(
185
- value,
186
- )
187
- ) {
188
- return null;
189
- }
190
- const parsed = Date.parse(value);
191
- return Number.isFinite(parsed) ? parsed : null;
192
- }
193
-
194
- export function verificationReceiptHistoryErrors(
195
- testId: string,
196
- verificationScope: unknown,
197
- receipts: readonly Readonly<Record<string, unknown>>[],
198
- ): readonly string[] {
199
- const errors: string[] = [];
200
- let previousFinishedAt: number | null = null;
201
- if (receipts.length > 0 && typeof verificationScope !== "string") {
202
- errors.push(
203
- "verification_scope is required when verification_receipts are present",
204
- );
205
- }
206
- const receiptIds = new Set<string>();
207
- for (const [index, receipt] of receipts.entries()) {
208
- const prefix = `verification_receipts[${index}]`;
209
- const receiptId = receipt.receipt_id;
210
- if (typeof receiptId === "string") {
211
- if (receiptIds.has(receiptId)) {
212
- errors.push(`${prefix}.receipt_id duplicates '${receiptId}'`);
213
- }
214
- receiptIds.add(receiptId);
215
- }
216
- if (receipt.test_id !== testId) {
217
- errors.push(`${prefix}.test_id must equal '${testId}'`);
218
- }
219
- if (
220
- !(["unit", "integration", "end_to_end"] as const).includes(
221
- receipt.scope as "unit" | "integration" | "end_to_end",
222
- )
223
- ) {
224
- errors.push(`${prefix}.scope must be a supported verification scope`);
225
- }
226
- const startedAt = timestamp(receipt.started_at);
227
- const finishedAt = timestamp(receipt.finished_at);
228
- if (startedAt === null)
229
- errors.push(`${prefix}.started_at must be ISO-8601`);
230
- if (finishedAt === null)
231
- errors.push(`${prefix}.finished_at must be ISO-8601`);
232
- if (startedAt !== null && finishedAt !== null && finishedAt < startedAt) {
233
- errors.push(`${prefix}.finished_at must not precede started_at`);
234
- }
235
- if (
236
- finishedAt !== null &&
237
- previousFinishedAt !== null &&
238
- finishedAt <= previousFinishedAt
239
- ) {
240
- errors.push(
241
- `${prefix}.finished_at must be strictly later than the previous receipt`,
242
- );
243
- }
244
- if (finishedAt !== null) previousFinishedAt = finishedAt;
245
- if (receipt.version === VERIFICATION_RECEIPT_V2_VERSION) {
246
- if (
247
- !Array.isArray(receipt.command_argv) ||
248
- receipt.command_argv.length === 0 ||
249
- receipt.command_argv.some(
250
- (argument) => typeof argument !== "string" || argument.trim() === "",
251
- )
252
- ) {
253
- errors.push(
254
- `${prefix}.command_argv must be a non-empty argv of strings`,
255
- );
256
- }
257
- if (
258
- typeof receipt.contract_hash !== "string" ||
259
- !/^[a-f0-9]{64}$/.test(receipt.contract_hash)
260
- ) {
261
- errors.push(`${prefix}.contract_hash must be a SHA-256 hex digest`);
262
- }
263
- const caseResults = receipt.case_results;
264
- if (!Array.isArray(caseResults) || caseResults.length === 0) {
265
- errors.push(
266
- `${prefix}.case_results must contain at least one contracted case`,
267
- );
268
- } else {
269
- const seenCases = new Set<string>();
270
- for (const [caseIndex, caseResult] of caseResults.entries()) {
271
- if (
272
- !caseResult ||
273
- typeof caseResult !== "object" ||
274
- Array.isArray(caseResult)
275
- ) {
276
- errors.push(
277
- `${prefix}.case_results[${caseIndex}] must be an object`,
278
- );
279
- continue;
280
- }
281
- const row = caseResult as Record<string, unknown>;
282
- if (
283
- typeof row.symbol_id !== "string" ||
284
- row.symbol_id.trim() === "" ||
285
- typeof row.project !== "string" ||
286
- row.project.trim() === ""
287
- ) {
288
- errors.push(
289
- `${prefix}.case_results[${caseIndex}] requires non-empty symbol_id and project`,
290
- );
291
- }
292
- if (
293
- ![
294
- "passed",
295
- "failed",
296
- "timed_out",
297
- "skipped",
298
- "interrupted",
299
- ].includes(String(row.outcome))
300
- ) {
301
- errors.push(
302
- `${prefix}.case_results[${caseIndex}].outcome is not a supported result`,
303
- );
304
- }
305
- const key = `${String(row.project ?? "")}\0${String(row.symbol_id ?? "")}`;
306
- if (seenCases.has(key))
307
- errors.push(
308
- `${prefix}.case_results duplicates '${key.replace("\0", "/")}'`,
309
- );
310
- seenCases.add(key);
311
- if (
312
- typeof row.retries !== "number" ||
313
- !Number.isInteger(row.retries) ||
314
- row.retries < 0
315
- )
316
- errors.push(
317
- `${prefix}.case_results[${caseIndex}].retries must be a non-negative integer`,
318
- );
319
- if (
320
- typeof row.duration_ms !== "number" ||
321
- !Number.isInteger(row.duration_ms) ||
322
- row.duration_ms < 0
323
- )
324
- errors.push(
325
- `${prefix}.case_results[${caseIndex}].duration_ms must be a non-negative integer`,
326
- );
327
- }
328
- }
329
- }
330
- }
331
- return errors;
332
- }
333
-
334
- // implements REQ-kibi-verification-evidence-contract
335
- export function verificationReceiptCurrentBindingErrors(
336
- testId: string,
337
- verificationScope: unknown,
338
- receipt: Readonly<Record<string, unknown>>,
339
- contract?: Readonly<Record<string, unknown>>,
340
- ): readonly string[] {
341
- const errors: string[] = [];
342
- if (receipt.test_id !== testId) {
343
- errors.push(`verification receipt test_id must equal '${testId}'`);
344
- }
345
- if (typeof verificationScope !== "string") {
346
- errors.push("verification_scope is required for current receipt evidence");
347
- } else if (receipt.scope !== verificationScope) {
348
- errors.push(
349
- `verification receipt scope must equal the current verification_scope '${verificationScope}'`,
350
- );
351
- }
352
- if (contract !== undefined) {
353
- if (receipt.version !== VERIFICATION_RECEIPT_V2_VERSION) {
354
- errors.push(
355
- "the current verification_contract requires a kibi.verification-receipt.v2",
356
- );
357
- } else if (typeof receipt.contract_hash === "string") {
358
- const expectedHash = verificationContractHash(contract);
359
- if (receipt.contract_hash !== expectedHash) {
360
- errors.push(
361
- "verification receipt contract_hash does not match the current verification_contract",
362
- );
363
- }
364
- }
365
- }
366
- return errors;
367
- }
368
-
369
- function canonicalJson(value: unknown): string {
370
- if (Array.isArray(value)) {
371
- return `[${value.map(canonicalJson).join(",")}]`;
372
- }
373
- if (value !== null && typeof value === "object") {
374
- return `{${Object.entries(value)
375
- .sort(([left], [right]) => left.localeCompare(right))
376
- .map(([key, child]) => `${JSON.stringify(key)}:${canonicalJson(child)}`)
377
- .join(",")}}`;
378
- }
379
- return JSON.stringify(value);
380
- }
381
-
382
- // implements REQ-kibi-verification-evidence-contract
383
- export function verificationContractHash(
384
- contract: Readonly<Record<string, unknown>>,
385
- ): string {
386
- return createHash("sha256").update(canonicalJson(contract)).digest("hex");
387
- }
388
-
389
- export function appendOnlyVerificationReceiptHistoryErrors(
390
- previous: readonly Readonly<Record<string, unknown>>[],
391
- next: readonly Readonly<Record<string, unknown>>[] | undefined,
392
- ): readonly string[] {
393
- if (previous.length === 0) return [];
394
- if (next === undefined) {
395
- return [
396
- "verification_receipts is append-only and cannot be removed from an existing test",
397
- ];
398
- }
399
- if (next.length < previous.length) {
400
- return [
401
- `verification_receipts is append-only: expected at least ${previous.length} historical receipt(s), received ${next.length}`,
402
- ];
403
- }
404
- for (const [index, receipt] of previous.entries()) {
405
- if (canonicalJson(next[index]) !== canonicalJson(receipt)) {
406
- return [
407
- `verification_receipts is append-only: historical receipt at index ${index} was changed, removed, or reordered`,
408
- ];
409
- }
410
- }
411
- return [];
412
- }