kibi-cli 0.19.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (672) hide show
  1. package/dist/cli-errors.d.ts +3 -1
  2. package/dist/cli-errors.d.ts.map +1 -1
  3. package/dist/cli-errors.js +4 -1
  4. package/dist/cli-json-command.d.ts +1 -0
  5. package/dist/cli-json-command.d.ts.map +1 -1
  6. package/dist/cli-json-command.js +13 -4
  7. package/dist/cli-operation-loader.d.ts.map +1 -1
  8. package/dist/cli-operation-loader.js +53 -20
  9. package/dist/cli-operation-metadata.d.ts +21 -8
  10. package/dist/cli-operation-metadata.d.ts.map +1 -1
  11. package/dist/cli-operation-metadata.js +27 -10
  12. package/dist/cli-protocol.d.ts.map +1 -1
  13. package/dist/cli-protocol.js +38 -8
  14. package/dist/cli-register-foundation.d.ts.map +1 -1
  15. package/dist/cli-register-foundation.js +14 -2
  16. package/dist/cli-register-maintenance.d.ts.map +1 -1
  17. package/dist/cli-register-maintenance.js +33 -4
  18. package/dist/cli-register-proof.d.ts +3 -0
  19. package/dist/cli-register-proof.d.ts.map +1 -0
  20. package/dist/cli-register-proof.js +103 -0
  21. package/dist/cli-register-reporting.d.ts.map +1 -1
  22. package/dist/cli-register-reporting.js +11 -0
  23. package/dist/cli.d.ts +4 -0
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +17 -8
  26. package/dist/commands/aggregated-checks.d.ts +1 -2
  27. package/dist/commands/aggregated-checks.d.ts.map +1 -1
  28. package/dist/commands/aggregated-checks.js +14 -9
  29. package/dist/commands/branch.d.ts +37 -0
  30. package/dist/commands/branch.d.ts.map +1 -1
  31. package/dist/commands/branch.js +375 -40
  32. package/dist/commands/check.d.ts +14 -0
  33. package/dist/commands/check.d.ts.map +1 -1
  34. package/dist/commands/check.js +209 -110
  35. package/dist/commands/coverage.d.ts +1 -0
  36. package/dist/commands/coverage.d.ts.map +1 -1
  37. package/dist/commands/coverage.js +6 -0
  38. package/dist/commands/discovery-shared.d.ts.map +1 -1
  39. package/dist/commands/discovery-shared.js +10 -19
  40. package/dist/commands/doctor.d.ts +26 -1
  41. package/dist/commands/doctor.d.ts.map +1 -1
  42. package/dist/commands/doctor.js +291 -30
  43. package/dist/commands/engine.d.ts +12 -0
  44. package/dist/commands/engine.d.ts.map +1 -1
  45. package/dist/commands/engine.js +50 -7
  46. package/dist/commands/gc.d.ts +5 -2
  47. package/dist/commands/gc.d.ts.map +1 -1
  48. package/dist/commands/gc.js +140 -71
  49. package/dist/commands/github-init.d.ts +57 -0
  50. package/dist/commands/github-init.d.ts.map +1 -0
  51. package/dist/commands/github-init.js +314 -0
  52. package/dist/commands/init-helpers.d.ts +1 -1
  53. package/dist/commands/init-helpers.d.ts.map +1 -1
  54. package/dist/commands/init-helpers.js +109 -28
  55. package/dist/commands/init.d.ts +2 -0
  56. package/dist/commands/init.d.ts.map +1 -1
  57. package/dist/commands/init.js +79 -24
  58. package/dist/commands/legacy-storage-migration.d.ts +54 -0
  59. package/dist/commands/legacy-storage-migration.d.ts.map +1 -0
  60. package/dist/commands/legacy-storage-migration.js +277 -0
  61. package/dist/commands/migrate.d.ts +11 -0
  62. package/dist/commands/migrate.d.ts.map +1 -1
  63. package/dist/commands/migrate.js +249 -96
  64. package/dist/commands/proof-migrate-legacy.d.ts +7 -0
  65. package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
  66. package/dist/commands/proof-migrate-legacy.js +45 -0
  67. package/dist/commands/proof-prune.d.ts +8 -0
  68. package/dist/commands/proof-prune.d.ts.map +1 -0
  69. package/dist/commands/proof-prune.js +53 -0
  70. package/dist/commands/prove.d.ts +37 -0
  71. package/dist/commands/prove.d.ts.map +1 -0
  72. package/dist/commands/prove.js +470 -0
  73. package/dist/commands/report.d.ts +24 -0
  74. package/dist/commands/report.d.ts.map +1 -0
  75. package/dist/commands/report.js +191 -0
  76. package/dist/commands/sync/cache.d.ts +16 -3
  77. package/dist/commands/sync/cache.d.ts.map +1 -1
  78. package/dist/commands/sync/cache.js +111 -4
  79. package/dist/commands/sync/discovery.d.ts +26 -2
  80. package/dist/commands/sync/discovery.d.ts.map +1 -1
  81. package/dist/commands/sync/discovery.js +204 -15
  82. package/dist/commands/sync/extraction.d.ts +8 -1
  83. package/dist/commands/sync/extraction.d.ts.map +1 -1
  84. package/dist/commands/sync/extraction.js +38 -4
  85. package/dist/commands/sync/manifest.d.ts +9 -6
  86. package/dist/commands/sync/manifest.d.ts.map +1 -1
  87. package/dist/commands/sync/manifest.js +195 -60
  88. package/dist/commands/sync/persistence.d.ts +4 -1
  89. package/dist/commands/sync/persistence.d.ts.map +1 -1
  90. package/dist/commands/sync/persistence.js +26 -12
  91. package/dist/commands/sync/staging.d.ts +1 -0
  92. package/dist/commands/sync/staging.d.ts.map +1 -1
  93. package/dist/commands/sync/staging.js +5 -2
  94. package/dist/commands/sync/untracked-targets.d.ts +24 -0
  95. package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
  96. package/dist/commands/sync/untracked-targets.js +108 -0
  97. package/dist/commands/sync.d.ts +17 -1
  98. package/dist/commands/sync.d.ts.map +1 -1
  99. package/dist/commands/sync.js +375 -106
  100. package/dist/diagnostics.d.ts +1 -1
  101. package/dist/diagnostics.d.ts.map +1 -1
  102. package/dist/engine-daemon.d.ts +3 -1
  103. package/dist/engine-daemon.d.ts.map +1 -1
  104. package/dist/engine-daemon.js +49 -20
  105. package/dist/engine.d.ts +34 -3
  106. package/dist/engine.d.ts.map +1 -1
  107. package/dist/engine.js +578 -42
  108. package/dist/env.d.ts.map +1 -1
  109. package/dist/env.js +5 -6
  110. package/dist/extractors/manifest.d.ts +13 -1
  111. package/dist/extractors/manifest.d.ts.map +1 -1
  112. package/dist/extractors/manifest.js +97 -10
  113. package/dist/extractors/markdown.d.ts +5 -2
  114. package/dist/extractors/markdown.d.ts.map +1 -1
  115. package/dist/extractors/markdown.js +47 -12
  116. package/dist/extractors/playwright-cases.d.ts +24 -0
  117. package/dist/extractors/playwright-cases.d.ts.map +1 -0
  118. package/dist/extractors/playwright-cases.js +126 -0
  119. package/dist/extractors/relationships.d.ts +6 -0
  120. package/dist/extractors/relationships.d.ts.map +1 -1
  121. package/dist/extractors/relationships.js +2 -1
  122. package/dist/extractors/symbol-coordinates.d.ts +81 -3
  123. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  124. package/dist/extractors/symbol-coordinates.js +389 -51
  125. package/dist/extractors/symbols-coordinator.js +11 -1
  126. package/dist/extractors/symbols-ts.d.ts +1 -0
  127. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  128. package/dist/extractors/symbols-ts.js +142 -67
  129. package/dist/intent-search.d.ts +61 -0
  130. package/dist/intent-search.d.ts.map +1 -0
  131. package/dist/intent-search.js +437 -0
  132. package/dist/logic/ir.d.ts +1 -0
  133. package/dist/logic/ir.d.ts.map +1 -1
  134. package/dist/logic/ir.js +1 -1
  135. package/dist/operations/bootstrap/activation.d.ts +5 -0
  136. package/dist/operations/bootstrap/activation.d.ts.map +1 -0
  137. package/dist/operations/{autopilot → bootstrap}/activation.js +58 -33
  138. package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts.map +1 -1
  139. package/dist/operations/bootstrap/candidates.d.ts +4 -0
  140. package/dist/operations/{autopilot → bootstrap}/candidates.d.ts.map +1 -1
  141. package/dist/operations/{autopilot → bootstrap}/candidates.js +22 -8
  142. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts +2 -2
  143. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts.map +1 -1
  144. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.js +46 -6
  145. package/dist/operations/{autopilot → bootstrap}/discovery.d.ts +1 -1
  146. package/dist/operations/bootstrap/discovery.d.ts.map +1 -0
  147. package/dist/operations/{autopilot → bootstrap}/discovery.js +21 -14
  148. package/dist/operations/bootstrap/generate.d.ts +9 -0
  149. package/dist/operations/bootstrap/generate.d.ts.map +1 -0
  150. package/dist/operations/bootstrap/generate.js +207 -0
  151. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts +2 -2
  152. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts.map +1 -1
  153. package/dist/operations/{autopilot → bootstrap}/guidance-actions.js +4 -4
  154. package/dist/operations/{autopilot → bootstrap}/guidance.d.ts +3 -2
  155. package/dist/operations/bootstrap/guidance.d.ts.map +1 -0
  156. package/dist/operations/{autopilot → bootstrap}/guidance.js +3 -1
  157. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts +2 -2
  158. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts.map +1 -1
  159. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.js +4 -3
  160. package/dist/operations/bootstrap/presentation.d.ts +15 -0
  161. package/dist/operations/bootstrap/presentation.d.ts.map +1 -0
  162. package/dist/operations/bootstrap/presentation.js +177 -0
  163. package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts.map +1 -1
  164. package/dist/operations/{autopilot → bootstrap}/types.d.ts +63 -21
  165. package/dist/operations/bootstrap/types.d.ts.map +1 -0
  166. package/dist/operations/bootstrap/types.js +25 -0
  167. package/dist/operations/modeling/model-requirement.d.ts +5 -0
  168. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  169. package/dist/operations/modeling/model-requirement.js +57 -63
  170. package/dist/operations/modeling/predicate-applicability.d.ts +16 -0
  171. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -0
  172. package/dist/operations/modeling/predicate-applicability.js +375 -0
  173. package/dist/operations/modeling/predicate-applyplan.d.ts +13 -2
  174. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
  175. package/dist/operations/modeling/predicate-applyplan.js +100 -3
  176. package/dist/operations/modeling/predicate-bindings.d.ts +6 -0
  177. package/dist/operations/modeling/predicate-bindings.d.ts.map +1 -0
  178. package/dist/operations/modeling/predicate-bindings.js +122 -0
  179. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
  180. package/dist/operations/modeling/predicate-catalog-2.js +18 -2
  181. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
  182. package/dist/operations/modeling/predicate-catalog-3.js +17 -1
  183. package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -1
  184. package/dist/operations/modeling/predicate-catalog-4.js +155 -0
  185. package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
  186. package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
  187. package/dist/operations/modeling/predicate-catalog-5.js +291 -0
  188. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
  189. package/dist/operations/modeling/predicate-catalog.js +4 -0
  190. package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -1
  191. package/dist/operations/modeling/predicate-inference-1.js +8 -0
  192. package/dist/operations/modeling/predicate-inference-launcher.d.ts +10 -0
  193. package/dist/operations/modeling/predicate-inference-launcher.d.ts.map +1 -0
  194. package/dist/operations/modeling/predicate-inference-launcher.js +13 -0
  195. package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
  196. package/dist/operations/modeling/predicate-inference.js +4 -0
  197. package/dist/operations/modeling/predicate-loader.d.ts +1 -0
  198. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  199. package/dist/operations/modeling/predicate-loader.js +11 -3
  200. package/dist/operations/modeling/predicate-ranker.d.ts +8 -1
  201. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  202. package/dist/operations/modeling/predicate-ranker.js +159 -24
  203. package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -1
  204. package/dist/operations/modeling/predicate-score-3.js +6 -0
  205. package/dist/operations/modeling/predicate-types.d.ts +35 -1
  206. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  207. package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -1
  208. package/dist/operations/modeling/predicate-usage-hints-3.js +40 -0
  209. package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
  210. package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
  211. package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
  212. package/dist/operations/modeling/predicate-utils.d.ts.map +1 -1
  213. package/dist/operations/modeling/predicate-utils.js +2 -0
  214. package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
  215. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  216. package/dist/operations/modeling/suggest-predicates.js +203 -32
  217. package/dist/operations/mutation/contradictions.d.ts +2 -1
  218. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  219. package/dist/operations/mutation/contradictions.js +26 -5
  220. package/dist/operations/mutation/delete.d.ts +3 -0
  221. package/dist/operations/mutation/delete.d.ts.map +1 -1
  222. package/dist/operations/mutation/delete.js +483 -19
  223. package/dist/operations/mutation/entity-projection.d.ts +11 -0
  224. package/dist/operations/mutation/entity-projection.d.ts.map +1 -0
  225. package/dist/operations/mutation/entity-projection.js +14 -0
  226. package/dist/operations/mutation/relationships.d.ts +11 -0
  227. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  228. package/dist/operations/mutation/relationships.js +77 -5
  229. package/dist/operations/mutation/saga.d.ts +51 -0
  230. package/dist/operations/mutation/saga.d.ts.map +1 -0
  231. package/dist/operations/mutation/saga.js +67 -0
  232. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  233. package/dist/operations/mutation/serialization.js +3 -1
  234. package/dist/operations/mutation/source-authoring.d.ts +65 -0
  235. package/dist/operations/mutation/source-authoring.d.ts.map +1 -0
  236. package/dist/operations/mutation/source-authoring.js +576 -0
  237. package/dist/operations/mutation/strict-fact.d.ts +1 -0
  238. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  239. package/dist/operations/mutation/strict-fact.js +8 -5
  240. package/dist/operations/mutation/symbol-compiler-lock.d.ts +54 -0
  241. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -0
  242. package/dist/operations/mutation/symbol-compiler-lock.js +337 -0
  243. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  244. package/dist/operations/mutation/symbol-granularity.js +35 -4
  245. package/dist/operations/mutation/symbol-refresh.d.ts +19 -1
  246. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  247. package/dist/operations/mutation/symbol-refresh.js +227 -63
  248. package/dist/operations/mutation/types.d.ts +57 -1
  249. package/dist/operations/mutation/types.d.ts.map +1 -1
  250. package/dist/operations/mutation/upsert.d.ts +18 -2
  251. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  252. package/dist/operations/mutation/upsert.js +403 -32
  253. package/dist/operations/mutation/validate-upsert.js +2 -2
  254. package/dist/operations/mutation/validation.d.ts.map +1 -1
  255. package/dist/operations/mutation/validation.js +47 -4
  256. package/dist/operations/mutation/warnings.d.ts +1 -0
  257. package/dist/operations/mutation/warnings.d.ts.map +1 -1
  258. package/dist/operations/mutation/warnings.js +7 -5
  259. package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
  260. package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
  261. package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
  262. package/dist/operations/planning/apply-plan.d.ts +19 -0
  263. package/dist/operations/planning/apply-plan.d.ts.map +1 -0
  264. package/dist/operations/planning/apply-plan.js +1514 -0
  265. package/dist/operations/planning/compile-intent.d.ts +108 -0
  266. package/dist/operations/planning/compile-intent.d.ts.map +1 -0
  267. package/dist/operations/planning/compile-intent.js +618 -0
  268. package/dist/operations/proof/ingest-proof.d.ts +34 -0
  269. package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
  270. package/dist/operations/proof/ingest-proof.js +307 -0
  271. package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
  272. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
  273. package/dist/operations/proof/migrate-legacy-receipts.js +88 -0
  274. package/dist/operations/proof/prune-receipts.d.ts +35 -0
  275. package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
  276. package/dist/operations/proof/prune-receipts.js +91 -0
  277. package/dist/operations/proof/receipt-document.d.ts +29 -0
  278. package/dist/operations/proof/receipt-document.d.ts.map +1 -0
  279. package/dist/operations/proof/receipt-document.js +117 -0
  280. package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
  281. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  282. package/dist/operations/semantic-advisor/analyze-prose.js +52 -28
  283. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  284. package/dist/operations/semantic-advisor/clauses.js +35 -9
  285. package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -1
  286. package/dist/operations/semantic-advisor/ingestion-boundary.js +7 -3
  287. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +51 -0
  288. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -0
  289. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +96 -0
  290. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
  291. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
  292. package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
  293. package/dist/operations/semantic-advisor/types.d.ts +13 -5
  294. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  295. package/dist/prolog/codec.d.ts +13 -1
  296. package/dist/prolog/codec.d.ts.map +1 -1
  297. package/dist/prolog/codec.js +269 -153
  298. package/dist/prolog/error-terms.d.ts +47 -0
  299. package/dist/prolog/error-terms.d.ts.map +1 -0
  300. package/dist/prolog/error-terms.js +334 -0
  301. package/dist/prolog/janitor.d.ts +50 -0
  302. package/dist/prolog/janitor.d.ts.map +1 -0
  303. package/dist/prolog/janitor.js +154 -0
  304. package/dist/prolog/store-lock.d.ts +45 -0
  305. package/dist/prolog/store-lock.d.ts.map +1 -0
  306. package/dist/prolog/store-lock.js +195 -0
  307. package/dist/prolog.d.ts +7 -0
  308. package/dist/prolog.d.ts.map +1 -1
  309. package/dist/prolog.js +82 -25
  310. package/dist/proof/evaluate.d.ts +27 -0
  311. package/dist/proof/evaluate.d.ts.map +1 -0
  312. package/dist/proof/evaluate.js +151 -0
  313. package/dist/proof/inspect.d.ts +12 -0
  314. package/dist/proof/inspect.d.ts.map +1 -0
  315. package/dist/proof/inspect.js +236 -0
  316. package/dist/proof/integrations.d.ts +35 -0
  317. package/dist/proof/integrations.d.ts.map +1 -0
  318. package/dist/proof/integrations.js +123 -0
  319. package/dist/proof/producers/junit-adapter.d.ts +26 -0
  320. package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
  321. package/dist/proof/producers/junit-adapter.js +186 -0
  322. package/dist/proof/producers/playwright-case-id.d.ts +8 -0
  323. package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
  324. package/dist/proof/producers/playwright-case-id.js +25 -0
  325. package/dist/proof/producers/playwright-reporter.d.ts +27 -0
  326. package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
  327. package/dist/proof/producers/playwright-reporter.js +138 -0
  328. package/dist/proof/producers/tap-adapter.d.ts +10 -0
  329. package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
  330. package/dist/proof/producers/tap-adapter.js +200 -0
  331. package/dist/proof/receipt-outcome.d.ts +2 -0
  332. package/dist/proof/receipt-outcome.d.ts.map +1 -0
  333. package/dist/proof/receipt-outcome.js +1 -0
  334. package/dist/public/branch-resolver.d.ts +1 -0
  335. package/dist/public/branch-resolver.d.ts.map +1 -1
  336. package/dist/public/branch-resolver.js +1 -0
  337. package/dist/public/check-types.d.ts +2 -2
  338. package/dist/public/check-types.d.ts.map +1 -1
  339. package/dist/public/check-types.js +16 -16
  340. package/dist/public/diagnostic-usage.d.ts.map +1 -1
  341. package/dist/public/diagnostic-usage.js +74 -6
  342. package/dist/public/distribution-parity.d.ts +7 -1
  343. package/dist/public/distribution-parity.d.ts.map +1 -1
  344. package/dist/public/distribution-parity.js +15 -9
  345. package/dist/public/ignore-policy.d.ts.map +1 -1
  346. package/dist/public/ignore-policy.js +16 -4
  347. package/dist/public/impact/coverage-depth-quality.d.ts +7 -1
  348. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  349. package/dist/public/impact/coverage-depth-quality.js +22 -4
  350. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  351. package/dist/public/impact/diagnostics.js +2 -2
  352. package/dist/public/impact/diff-meaning.d.ts +1 -0
  353. package/dist/public/impact/diff-meaning.d.ts.map +1 -1
  354. package/dist/public/impact/diff-meaning.js +5 -2
  355. package/dist/public/impact/full-kb-quality.d.ts +7 -2
  356. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  357. package/dist/public/impact/full-kb-quality.js +364 -39
  358. package/dist/public/impact/manifest.d.ts.map +1 -1
  359. package/dist/public/impact/manifest.js +2 -5
  360. package/dist/public/operational-artifacts.d.ts.map +1 -1
  361. package/dist/public/operational-artifacts.js +7 -1
  362. package/dist/public/operations/catalog.d.ts +900 -34
  363. package/dist/public/operations/catalog.d.ts.map +1 -1
  364. package/dist/public/operations/catalog.js +130 -6
  365. package/dist/public/operations/check-executor.d.ts +2 -2
  366. package/dist/public/operations/check-executor.d.ts.map +1 -1
  367. package/dist/public/operations/check-executor.js +68 -13
  368. package/dist/public/operations/check-format-shared.d.ts +3 -0
  369. package/dist/public/operations/check-format-shared.d.ts.map +1 -1
  370. package/dist/public/operations/check-format-shared.js +3 -0
  371. package/dist/public/operations/check-helpers.d.ts +27 -2
  372. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  373. package/dist/public/operations/check-helpers.js +62 -26
  374. package/dist/public/operations/contracts.d.ts +18 -0
  375. package/dist/public/operations/contracts.d.ts.map +1 -0
  376. package/dist/public/operations/contracts.js +334 -0
  377. package/dist/public/operations/discovery-entities.d.ts +3 -0
  378. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  379. package/dist/public/operations/discovery-entities.js +4 -0
  380. package/dist/public/operations/discovery-executors.d.ts +43 -7
  381. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  382. package/dist/public/operations/discovery-executors.js +216 -13
  383. package/dist/public/operations/index.d.ts +9 -4
  384. package/dist/public/operations/index.d.ts.map +1 -1
  385. package/dist/public/operations/index.js +8 -3
  386. package/dist/public/operations/migration-plan.d.ts +102 -0
  387. package/dist/public/operations/migration-plan.d.ts.map +1 -0
  388. package/dist/public/operations/migration-plan.js +539 -0
  389. package/dist/public/operations/node-ports.d.ts.map +1 -1
  390. package/dist/public/operations/node-ports.js +71 -11
  391. package/dist/public/operations/prolog-json.d.ts +14 -0
  392. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  393. package/dist/public/operations/prolog-json.js +44 -5
  394. package/dist/public/operations/repair-plan.d.ts +3 -3
  395. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  396. package/dist/public/operations/repair-plan.js +49 -18
  397. package/dist/public/operations/result-envelope.d.ts +14 -0
  398. package/dist/public/operations/result-envelope.d.ts.map +1 -0
  399. package/dist/public/operations/result-envelope.js +106 -0
  400. package/dist/public/operations/runtime-types.d.ts +102 -7
  401. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  402. package/dist/public/operations/source-relationship-parity.d.ts +13 -0
  403. package/dist/public/operations/source-relationship-parity.d.ts.map +1 -0
  404. package/dist/public/operations/source-relationship-parity.js +162 -0
  405. package/dist/public/operations/specs/{autopilot.d.ts → bootstrap.d.ts} +9 -9
  406. package/dist/public/operations/specs/bootstrap.d.ts.map +1 -0
  407. package/dist/public/operations/specs/{autopilot.js → bootstrap.js} +8 -7
  408. package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
  409. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
  410. package/dist/public/operations/specs/check-rules.generated.js +34 -0
  411. package/dist/public/operations/specs/check.d.ts +9 -4
  412. package/dist/public/operations/specs/check.d.ts.map +1 -1
  413. package/dist/public/operations/specs/check.js +10 -21
  414. package/dist/public/operations/specs/discovery.d.ts +87 -3
  415. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  416. package/dist/public/operations/specs/discovery.js +53 -3
  417. package/dist/public/operations/specs/modeling.d.ts +3 -3
  418. package/dist/public/operations/specs/modeling.js +3 -3
  419. package/dist/public/operations/specs/mutation-schemas.d.ts +251 -14
  420. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  421. package/dist/public/operations/specs/mutation-schemas.js +16 -6
  422. package/dist/public/operations/specs/mutation.d.ts +42 -2
  423. package/dist/public/operations/specs/mutation.d.ts.map +1 -1
  424. package/dist/public/operations/specs/mutation.js +26 -2
  425. package/dist/public/operations/specs/planning.d.ts +279 -0
  426. package/dist/public/operations/specs/planning.d.ts.map +1 -0
  427. package/dist/public/operations/specs/planning.js +197 -0
  428. package/dist/public/operations/specs/proof.d.ts +212 -0
  429. package/dist/public/operations/specs/proof.d.ts.map +1 -0
  430. package/dist/public/operations/specs/proof.js +30 -0
  431. package/dist/public/operations/specs/reporting.d.ts +23 -1
  432. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  433. package/dist/public/operations/specs/reporting.js +156 -11
  434. package/dist/public/operations/specs/upsert.d.ts +265 -14
  435. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  436. package/dist/public/operations/specs/upsert.js +9 -0
  437. package/dist/public/operations/symbol-repair-plan.d.ts +22 -0
  438. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -0
  439. package/dist/public/operations/symbol-repair-plan.js +238 -0
  440. package/dist/public/operations/types.d.ts +52 -1
  441. package/dist/public/operations/types.d.ts.map +1 -1
  442. package/dist/public/proof-fingerprint.d.ts +54 -0
  443. package/dist/public/proof-fingerprint.d.ts.map +1 -0
  444. package/dist/public/proof-fingerprint.js +141 -0
  445. package/dist/public/proof-protocol.d.ts +354 -0
  446. package/dist/public/proof-protocol.d.ts.map +1 -0
  447. package/dist/public/proof-protocol.js +454 -0
  448. package/dist/public/proof-receipt.d.ts +279 -0
  449. package/dist/public/proof-receipt.d.ts.map +1 -0
  450. package/dist/public/proof-receipt.js +377 -0
  451. package/dist/public/schemas/entity.d.ts.map +1 -1
  452. package/dist/public/schemas/entity.js +22 -6
  453. package/dist/public/skills/kibi-bootstrap/SKILL.md +58 -0
  454. package/dist/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  455. package/dist/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  456. package/dist/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  457. package/dist/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  458. package/dist/public/skills/kibi-freshness/SKILL.md +39 -9
  459. package/dist/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  460. package/dist/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  461. package/dist/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  462. package/dist/public/skills/kibi-traceability/SKILL.md +47 -47
  463. package/dist/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  464. package/dist/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  465. package/dist/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  466. package/dist/public/skills/kibi-traceability/resources/traceability.md +8 -0
  467. package/dist/public/skills/kibi-usage/SKILL.md +136 -231
  468. package/dist/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  469. package/dist/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  470. package/dist/public/skills/kibi-usage/resources/operation-access.md +36 -38
  471. package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
  472. package/dist/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  473. package/dist/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  474. package/dist/public/skills/kibi-usage/resources/workflows.md +57 -4
  475. package/dist/public/symbol-granularity.d.ts +3 -14
  476. package/dist/public/symbol-granularity.d.ts.map +1 -1
  477. package/dist/public/symbol-granularity.generated.d.ts +16 -0
  478. package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
  479. package/dist/public/symbol-granularity.generated.js +20 -0
  480. package/dist/public/symbol-granularity.js +6 -46
  481. package/dist/public/telemetry-acceptance.d.ts +3 -70
  482. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  483. package/dist/public/telemetry-acceptance.js +11 -2
  484. package/dist/public/telemetry-remediation.js +1 -1
  485. package/dist/relationships/shards.d.ts +16 -0
  486. package/dist/relationships/shards.d.ts.map +1 -1
  487. package/dist/relationships/shards.js +87 -2
  488. package/dist/report/brand.d.ts +19 -0
  489. package/dist/report/brand.d.ts.map +1 -0
  490. package/dist/report/brand.js +112 -0
  491. package/dist/report/html-report.css +282 -0
  492. package/dist/report/html-report.d.ts +21 -0
  493. package/dist/report/html-report.d.ts.map +1 -0
  494. package/dist/report/html-report.js +700 -0
  495. package/dist/report/relative-time.d.ts +4 -0
  496. package/dist/report/relative-time.d.ts.map +1 -0
  497. package/dist/report/relative-time.js +46 -0
  498. package/dist/report/report-view.d.ts +17 -0
  499. package/dist/report/report-view.d.ts.map +1 -0
  500. package/dist/report/report-view.js +33 -0
  501. package/dist/report/repository.d.ts +35 -0
  502. package/dist/report/repository.d.ts.map +1 -0
  503. package/dist/report/repository.js +151 -0
  504. package/dist/runtime/cli-runtime.d.ts +2 -0
  505. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  506. package/dist/runtime/cli-runtime.js +90 -23
  507. package/dist/schemas/entity.schema.json +1254 -239
  508. package/dist/search-ranking.d.ts +1 -0
  509. package/dist/search-ranking.d.ts.map +1 -1
  510. package/dist/search-ranking.js +3 -0
  511. package/dist/traceability/evidence-model.d.ts +30 -2
  512. package/dist/traceability/evidence-model.d.ts.map +1 -1
  513. package/dist/traceability/evidence-model.js +2 -2
  514. package/dist/traceability/git-staged.d.ts +20 -0
  515. package/dist/traceability/git-staged.d.ts.map +1 -1
  516. package/dist/traceability/git-staged.js +156 -37
  517. package/dist/traceability/markdown-validate.d.ts.map +1 -1
  518. package/dist/traceability/markdown-validate.js +12 -7
  519. package/dist/traceability/staged-diagnostics.d.ts +7 -0
  520. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  521. package/dist/traceability/staged-diagnostics.js +78 -7
  522. package/dist/traceability/staged-file-coverage.d.ts +33 -0
  523. package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
  524. package/dist/traceability/staged-file-coverage.js +284 -0
  525. package/dist/traceability/staged-impact-contract.d.ts +3 -3
  526. package/dist/traceability/staged-impact-contract.d.ts.map +1 -1
  527. package/dist/traceability/staged-impact-contract.js +12 -40
  528. package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
  529. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  530. package/dist/traceability/staged-symbols-manifest.js +142 -26
  531. package/dist/traceability/symbol-extract.d.ts +5 -0
  532. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  533. package/dist/traceability/symbol-extract.js +1 -1
  534. package/dist/traceability/temp-kb.d.ts +2 -0
  535. package/dist/traceability/temp-kb.d.ts.map +1 -1
  536. package/dist/traceability/temp-kb.js +14 -2
  537. package/dist/types/entities.d.ts +5 -0
  538. package/dist/types/entities.d.ts.map +1 -1
  539. package/dist/utils/branch-resolver.d.ts +25 -10
  540. package/dist/utils/branch-resolver.d.ts.map +1 -1
  541. package/dist/utils/branch-resolver.js +124 -38
  542. package/dist/utils/branch-store-locator.d.ts +23 -0
  543. package/dist/utils/branch-store-locator.d.ts.map +1 -0
  544. package/dist/utils/branch-store-locator.js +90 -0
  545. package/dist/utils/branch-store.d.ts +21 -0
  546. package/dist/utils/branch-store.d.ts.map +1 -0
  547. package/dist/utils/branch-store.js +157 -0
  548. package/dist/utils/config.d.ts +39 -37
  549. package/dist/utils/config.d.ts.map +1 -1
  550. package/dist/utils/config.js +107 -119
  551. package/dist/utils/kb-manifest.d.ts +35 -0
  552. package/dist/utils/kb-manifest.d.ts.map +1 -0
  553. package/dist/utils/kb-manifest.js +154 -0
  554. package/dist/utils/kb-paths.d.ts +54 -0
  555. package/dist/utils/kb-paths.d.ts.map +1 -0
  556. package/dist/utils/kb-paths.js +125 -0
  557. package/dist/utils/manifest-paths.d.ts +4 -4
  558. package/dist/utils/manifest-paths.d.ts.map +1 -1
  559. package/dist/utils/manifest-paths.js +8 -56
  560. package/dist/utils/rule-registry.d.ts +42 -24
  561. package/dist/utils/rule-registry.d.ts.map +1 -1
  562. package/dist/utils/rule-registry.generated.d.ts +97 -0
  563. package/dist/utils/rule-registry.generated.d.ts.map +1 -0
  564. package/dist/utils/rule-registry.generated.js +125 -0
  565. package/dist/utils/rule-registry.js +52 -148
  566. package/dist/utils/schema-version.d.ts +5 -5
  567. package/dist/utils/schema-version.d.ts.map +1 -1
  568. package/dist/utils/schema-version.js +26 -6
  569. package/dist/utils/strict-modeling.d.ts +1 -4
  570. package/dist/utils/strict-modeling.d.ts.map +1 -1
  571. package/dist/utils/strict-modeling.js +8 -9
  572. package/package.json +47 -11
  573. package/schema/config.json +2 -2
  574. package/schema/manifest.json +26 -0
  575. package/src/public/branch-resolver.ts +1 -0
  576. package/src/public/check-types.ts +22 -19
  577. package/src/public/diagnostic-usage.ts +84 -6
  578. package/src/public/distribution-parity.ts +17 -9
  579. package/src/public/ignore-policy.ts +16 -10
  580. package/src/public/impact/coverage-depth-quality.ts +37 -1
  581. package/src/public/impact/diagnostics.ts +2 -1
  582. package/src/public/impact/diff-meaning.ts +11 -4
  583. package/src/public/impact/full-kb-quality.ts +545 -41
  584. package/src/public/impact/manifest.ts +2 -4
  585. package/src/public/operational-artifacts.ts +9 -1
  586. package/src/public/operations/catalog.ts +153 -10
  587. package/src/public/operations/check-executor.ts +98 -15
  588. package/src/public/operations/check-format-shared.ts +6 -0
  589. package/src/public/operations/check-helpers.ts +74 -35
  590. package/src/public/operations/contracts.ts +382 -0
  591. package/src/public/operations/discovery-entities.ts +7 -0
  592. package/src/public/operations/discovery-executors.ts +315 -25
  593. package/src/public/operations/index.ts +9 -4
  594. package/src/public/operations/migration-plan.ts +747 -0
  595. package/src/public/operations/node-ports.ts +87 -13
  596. package/src/public/operations/prolog-json.ts +60 -5
  597. package/src/public/operations/repair-plan.ts +60 -22
  598. package/src/public/operations/result-envelope.ts +141 -0
  599. package/src/public/operations/runtime-types.ts +96 -5
  600. package/src/public/operations/source-relationship-parity.ts +226 -0
  601. package/src/public/operations/specs/{autopilot.ts → bootstrap.ts} +17 -16
  602. package/src/public/operations/specs/check-rules.generated.ts +37 -0
  603. package/src/public/operations/specs/check.ts +14 -22
  604. package/src/public/operations/specs/discovery.ts +57 -3
  605. package/src/public/operations/specs/modeling.ts +3 -3
  606. package/src/public/operations/specs/mutation-schemas.ts +24 -6
  607. package/src/public/operations/specs/mutation.ts +27 -2
  608. package/src/public/operations/specs/planning.ts +241 -0
  609. package/src/public/operations/specs/proof.ts +43 -0
  610. package/src/public/operations/specs/reporting.ts +193 -12
  611. package/src/public/operations/specs/upsert.ts +10 -0
  612. package/src/public/operations/symbol-repair-plan.ts +324 -0
  613. package/src/public/operations/types.ts +62 -1
  614. package/src/public/proof-fingerprint.ts +216 -0
  615. package/src/public/proof-protocol-types.d.ts +96 -0
  616. package/src/public/proof-protocol.ts +589 -0
  617. package/src/public/proof-receipt.ts +499 -0
  618. package/src/public/schemas/entity.ts +27 -6
  619. package/src/public/skills/kibi-bootstrap/SKILL.md +58 -0
  620. package/src/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  621. package/src/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  622. package/src/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  623. package/src/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  624. package/src/public/skills/kibi-freshness/SKILL.md +39 -9
  625. package/src/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  626. package/src/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  627. package/src/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  628. package/src/public/skills/kibi-traceability/SKILL.md +47 -47
  629. package/src/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  630. package/src/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  631. package/src/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  632. package/src/public/skills/kibi-traceability/resources/traceability.md +8 -0
  633. package/src/public/skills/kibi-usage/SKILL.md +136 -231
  634. package/src/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  635. package/src/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  636. package/src/public/skills/kibi-usage/resources/operation-access.md +36 -38
  637. package/src/public/skills/kibi-usage/resources/proof.md +105 -0
  638. package/src/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  639. package/src/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  640. package/src/public/skills/kibi-usage/resources/workflows.md +57 -4
  641. package/src/public/symbol-granularity.generated.ts +41 -0
  642. package/src/public/symbol-granularity.ts +35 -59
  643. package/src/public/telemetry-acceptance-types.d.ts +98 -0
  644. package/src/public/telemetry-acceptance.ts +30 -93
  645. package/src/public/telemetry-remediation.ts +1 -1
  646. package/src/schemas/entity.schema.json +1254 -239
  647. package/templates/github/kibi-badge.yml +86 -0
  648. package/templates/github/kibi-report.yml +84 -0
  649. package/dist/operations/autopilot/activation.d.ts +0 -4
  650. package/dist/operations/autopilot/activation.d.ts.map +0 -1
  651. package/dist/operations/autopilot/candidates.d.ts +0 -4
  652. package/dist/operations/autopilot/discovery.d.ts.map +0 -1
  653. package/dist/operations/autopilot/generate.d.ts +0 -8
  654. package/dist/operations/autopilot/generate.d.ts.map +0 -1
  655. package/dist/operations/autopilot/generate.js +0 -112
  656. package/dist/operations/autopilot/guidance.d.ts.map +0 -1
  657. package/dist/operations/autopilot/presentation.d.ts +0 -13
  658. package/dist/operations/autopilot/presentation.d.ts.map +0 -1
  659. package/dist/operations/autopilot/presentation.js +0 -91
  660. package/dist/operations/autopilot/types.d.ts.map +0 -1
  661. package/dist/operations/autopilot/types.js +0 -8
  662. package/dist/public/operations/specs/autopilot.d.ts.map +0 -1
  663. package/dist/public/skills/init-kibi/SKILL.md +0 -62
  664. package/dist/public/verification-receipt.d.ts +0 -75
  665. package/dist/public/verification-receipt.d.ts.map +0 -1
  666. package/dist/public/verification-receipt.js +0 -129
  667. package/src/public/skills/init-kibi/SKILL.md +0 -62
  668. package/src/public/verification-receipt.ts +0 -170
  669. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts +0 -0
  670. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.js +0 -0
  671. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts +0 -0
  672. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.js +0 -0
@@ -1,5 +1,6 @@
1
- import { execFile } from "node:child_process";
1
+ import { execFile, execFileSync } from "node:child_process";
2
2
  import { createHash } from "node:crypto";
3
+ import * as fsSync from "node:fs";
3
4
  import * as fs from "node:fs/promises";
4
5
  import path from "node:path";
5
6
  import { promisify } from "node:util";
@@ -23,10 +24,22 @@ type NodeGitPort = GitPort & {
23
24
  };
24
25
 
25
26
  const execFileAsync = promisify(execFile);
26
- const SNAPSHOT_EXCLUDED_PREFIXES = [".changeset/", ".kb/", "docs/"] as const;
27
+ const SNAPSHOT_EXCLUDED_PREFIXES = [
28
+ ".changeset/",
29
+ ".kb/branches/",
30
+ ".kb/recovery/",
31
+ ".kb/proof/runs/",
32
+ ".kb/briefs/",
33
+ ".kb/migrations/",
34
+ "docs/",
35
+ ] as const;
27
36
  const ALWAYS_IGNORED_GLOBS = [
28
37
  "**/.git/**",
29
- "**/.kb/**",
38
+ "**/.kb/branches/**",
39
+ "**/.kb/recovery/**",
40
+ "**/.kb/proof/runs/**",
41
+ "**/.kb/briefs/**",
42
+ "**/.kb/migrations/**",
30
43
  "**/node_modules/**",
31
44
  "**/vendor/**",
32
45
  "**/vendors/**",
@@ -45,7 +58,7 @@ function includedSnapshotPath(relativePath: string): boolean {
45
58
  );
46
59
  }
47
60
 
48
- function withoutVerificationReceiptFrontmatter(content: string): string {
61
+ function withoutProofReceiptFrontmatter(content: string): string {
49
62
  const lines = content.match(/[^\n]*\n|[^\n]+$/g) ?? [];
50
63
  if (lines[0]?.trim() !== "---") return content;
51
64
  let inFrontmatter = true;
@@ -59,7 +72,7 @@ function withoutVerificationReceiptFrontmatter(content: string): string {
59
72
  retained.push(line);
60
73
  continue;
61
74
  }
62
- if (inFrontmatter && /^verification_receipts\s*:/.test(line)) {
75
+ if (inFrontmatter && /^proof_receipts\s*:/.test(line)) {
63
76
  skippingReceipts = true;
64
77
  continue;
65
78
  }
@@ -76,17 +89,42 @@ function withoutVerificationReceiptFrontmatter(content: string): string {
76
89
  }
77
90
 
78
91
  function snapshotFileContent(relativePath: string, content: Buffer): Buffer {
79
- if (
80
- relativePath.startsWith("documentation/") &&
81
- relativePath.endsWith(".md")
82
- ) {
92
+ if (relativePath.endsWith(".md")) {
83
93
  return Buffer.from(
84
- withoutVerificationReceiptFrontmatter(content.toString("utf8")),
94
+ withoutProofReceiptFrontmatter(content.toString("utf8")),
85
95
  );
86
96
  }
87
97
  return content;
88
98
  }
89
99
 
100
+ /**
101
+ * A tracked markdown file whose only change is proof-receipt frontmatter
102
+ * cannot alter the snapshot hash (receipts are stripped before hashing), so it
103
+ * must not mark the workspace dirty either. CI proof runs append receipts to
104
+ * tracked proof documents before reporting, and would otherwise always surface
105
+ * a dirty-workspace warning.
106
+ */
107
+ function isReceiptOnlyMarkdownChange(
108
+ workspaceRoot: string,
109
+ relativePath: string,
110
+ ): boolean {
111
+ if (!relativePath.endsWith(".md")) return false;
112
+ try {
113
+ const working = snapshotFileContent(
114
+ relativePath,
115
+ fsSync.readFileSync(path.join(workspaceRoot, relativePath)),
116
+ );
117
+ const committed = execFileSync(
118
+ "git",
119
+ ["-C", workspaceRoot, "show", `HEAD:${relativePath}`],
120
+ { encoding: "buffer", maxBuffer: 64 * 1024 * 1024 },
121
+ ) as Buffer;
122
+ return working.equals(snapshotFileContent(relativePath, committed));
123
+ } catch {
124
+ return false;
125
+ }
126
+ }
127
+
90
128
  async function workspaceSnapshot(workspaceRoot: string) {
91
129
  const { stdout: listed } = await execFileAsync(
92
130
  "git",
@@ -108,7 +146,7 @@ async function workspaceSnapshot(workspaceRoot: string) {
108
146
  .filter(includedSnapshotPath)
109
147
  .sort();
110
148
  const digest = createHash("sha256");
111
- digest.update("kibi.workspace-snapshot.v1\0");
149
+ digest.update("kibi.workspace-snapshot.v2\0");
112
150
  for (const relativePath of paths) {
113
151
  digest.update(relativePath);
114
152
  digest.update("\0");
@@ -132,14 +170,48 @@ async function workspaceSnapshot(workspaceRoot: string) {
132
170
  "status",
133
171
  "--porcelain=v1",
134
172
  "--untracked-files=normal",
173
+ "-z",
135
174
  ],
136
175
  { maxBuffer: 16 * 1024 * 1024 },
137
176
  );
177
+ const rawChanges = status.split("\0").filter(Boolean);
178
+ const changes: {
179
+ path: string;
180
+ status: string;
181
+ snapshotRelevant: boolean;
182
+ previousPath?: string;
183
+ }[] = [];
184
+ for (let index = 0; index < rawChanges.length; index++) {
185
+ const entry = rawChanges[index] ?? "";
186
+ const statusCode = entry.slice(0, 2);
187
+ const relativePath = entry.slice(3).replaceAll("\\", "/");
188
+ const previous = rawChanges[index + 1];
189
+ const isRenameOrCopy = statusCode[0] === "R" || statusCode[0] === "C";
190
+ const previousPath =
191
+ isRenameOrCopy && previous ? previous.replaceAll("\\", "/") : undefined;
192
+ const receiptOnly =
193
+ statusCode.includes("M") &&
194
+ includedSnapshotPath(relativePath) &&
195
+ isReceiptOnlyMarkdownChange(workspaceRoot, relativePath);
196
+ changes.push({
197
+ path: relativePath,
198
+ status: statusCode,
199
+ snapshotRelevant:
200
+ (includedSnapshotPath(relativePath) && !receiptOnly) ||
201
+ (previousPath !== undefined && includedSnapshotPath(previousPath)),
202
+ ...(previousPath !== undefined ? { previousPath } : {}),
203
+ });
204
+ if (previousPath !== undefined) index++;
205
+ }
206
+ const maxChanges = 200;
138
207
  return {
139
- version: "kibi.workspace-snapshot.v1" as const,
208
+ version: "kibi.workspace-snapshot.v2" as const,
140
209
  hash: digest.digest("hex"),
141
- dirty: status.trim().length > 0,
210
+ dirty: changes.some((change) => change.snapshotRelevant),
142
211
  fileCount: paths.length,
212
+ changes: changes.slice(0, maxChanges),
213
+ changeCount: changes.length,
214
+ changesTruncated: changes.length > maxChanges,
143
215
  };
144
216
  }
145
217
 
@@ -148,10 +220,12 @@ export const nodeFilesystem: NodeFilesystemPort = {
148
220
  writeFile: async (filePath, data) => {
149
221
  await fs.writeFile(filePath, data, "utf8");
150
222
  },
223
+ rename: (from, to) => fs.rename(from, to),
151
224
  mkdir: async (directoryPath) => {
152
225
  await fs.mkdir(directoryPath, { recursive: true });
153
226
  },
154
227
  stat: (filePath) => fs.stat(filePath),
228
+ unlink: (filePath) => fs.unlink(filePath),
155
229
  glob: (patterns, options) =>
156
230
  fg([...patterns], {
157
231
  cwd: options.cwd,
@@ -5,6 +5,43 @@ import { resolveKbPlPath } from "../../prolog.js";
5
5
  import { escapeAtom } from "../../prolog/codec.js";
6
6
  import type { PrologPort } from "./runtime-types.js";
7
7
 
8
+ export type JsonBindingDecodeStage = "outer" | "inner";
9
+
10
+ /**
11
+ * A JSON operation result is transported through Prolog's answer printer and
12
+ * then through the engine frame. Keep decode failures typed and bounded: the
13
+ * raw binding may contain project-authored data and must never be copied into
14
+ * diagnostics wholesale.
15
+ */
16
+ export class OperationJsonDecodeError extends Error {
17
+ readonly code = "engine_result_invalid_json";
18
+ readonly stage: JsonBindingDecodeStage;
19
+ readonly rawLength: number;
20
+ readonly prefixCodePoints: readonly number[];
21
+
22
+ constructor(
23
+ errorLabel: string,
24
+ stage: JsonBindingDecodeStage,
25
+ rawJson: unknown,
26
+ cause: unknown,
27
+ ) {
28
+ const rawText = typeof rawJson === "string" ? rawJson : "";
29
+ const bindingType = typeof rawJson;
30
+ const message = cause instanceof Error ? cause.message : String(cause);
31
+ super(
32
+ `${errorLabel} returned invalid JSON binding (stage=${stage}, bindingType=${bindingType}, length=${rawText.length}, prefixCodePoints=${JSON.stringify([...rawText].slice(0, 8).map((character) => character.codePointAt(0) ?? 0))}): ${message}`,
33
+ );
34
+ this.name = "OperationJsonDecodeError";
35
+ this.stage = stage;
36
+ this.rawLength = rawText.length;
37
+ this.prefixCodePoints = Object.freeze(
38
+ [...rawText]
39
+ .slice(0, 8)
40
+ .map((character) => character.codePointAt(0) ?? 0),
41
+ );
42
+ }
43
+ }
44
+
8
45
  function resolveCoreModulePath(fileName: string): string {
9
46
  const genericOverride = getKbPlPathOverride();
10
47
  return path.join(
@@ -29,9 +66,10 @@ export async function runOperationJsonQuery<T>(
29
66
  const longLivedEngine =
30
67
  typeof (prolog as { storageStatus?: unknown }).storageStatus === "function";
31
68
  const oneShotMode =
32
- !longLivedEngine &&
33
- process.env.NODE_ENV === "test" &&
34
- typeof (globalThis as { Bun?: unknown }).Bun !== "undefined";
69
+ prolog.oneShotMode === true ||
70
+ (!longLivedEngine &&
71
+ process.env.NODE_ENV === "test" &&
72
+ typeof (globalThis as { Bun?: unknown }).Bun !== "undefined");
35
73
  const typedStatusQuery = prolog.queryStatusJson;
36
74
  const result =
37
75
  fileName === "status.pl" && typeof typedStatusQuery === "function"
@@ -48,9 +86,26 @@ export async function runOperationJsonQuery<T>(
48
86
  if (rawJson === undefined) {
49
87
  throw new Error(`${errorLabel} query returned no JsonString binding`);
50
88
  }
51
- let parsed: unknown = JSON.parse(rawJson);
89
+ if (typeof rawJson !== "string") {
90
+ throw new OperationJsonDecodeError(
91
+ errorLabel,
92
+ "outer",
93
+ rawJson,
94
+ new TypeError("JsonString binding is not a string"),
95
+ );
96
+ }
97
+ let parsed: unknown;
98
+ try {
99
+ parsed = JSON.parse(rawJson);
100
+ } catch (error) {
101
+ throw new OperationJsonDecodeError(errorLabel, "outer", rawJson, error);
102
+ }
52
103
  if (typeof parsed === "string") {
53
- parsed = JSON.parse(parsed);
104
+ try {
105
+ parsed = JSON.parse(parsed);
106
+ } catch (error) {
107
+ throw new OperationJsonDecodeError(errorLabel, "inner", parsed, error);
108
+ }
54
109
  }
55
110
  return parsed as T;
56
111
  }
@@ -126,15 +126,14 @@ const REPAIR_PHASES = {
126
126
  validationRules: [],
127
127
  writePolicy: "runtime_recovery",
128
128
  },
129
- verification_evidence: {
129
+ proof_evidence: {
130
130
  order: 80,
131
131
  objective:
132
- "Run the scenario-backed E2E test and append a fresh snapshot-bound passing receipt.",
132
+ "Run the configured proof integration with kibi prove and append fresh snapshot-bound passing receipts.",
133
133
  workflowSteps: [
134
134
  "kb_status",
135
- "execute_e2e",
136
- "kb_validate_upsert",
137
- "kb_upsert",
135
+ "execute_proof_run",
136
+ "kb_ingest_proof",
138
137
  "kb_coverage",
139
138
  ],
140
139
  validationRules: ["required-fields", "no-dangling-refs"],
@@ -206,12 +205,13 @@ const GAP_PHASE: Readonly<Record<string, RepairPhase>> = {
206
205
  blocking_contradiction: "contradiction_resolution",
207
206
  missing_scenario: "scenario_endpoints",
208
207
  missing_scenario_test: "scenario_tests",
209
- verification_snapshot_unavailable: "snapshot_runtime",
210
- missing_passing_e2e: "verification_evidence",
211
- missing_verification_receipt: "verification_evidence",
212
- stale_verification_receipt: "verification_evidence",
213
- failed_verification_receipt: "verification_evidence",
214
- invalid_verification_receipt: "verification_evidence",
208
+ proof_snapshot_unavailable: "snapshot_runtime",
209
+ missing_passing_e2e: "proof_evidence",
210
+ proof_contract_mismatch: "proof_evidence",
211
+ missing_proof_receipt: "proof_evidence",
212
+ stale_proof_receipt: "proof_evidence",
213
+ failed_proof_receipt: "proof_evidence",
214
+ invalid_proof_receipt: "proof_evidence",
215
215
  missing_executable_test_symbol: "executable_symbols",
216
216
  missing_production_symbol: "production_ownership",
217
217
  missing_production_symbol_coverage: "production_coverage",
@@ -233,11 +233,12 @@ const GAP_STAGE: Readonly<Record<string, string>> = {
233
233
  missing_scenario: "scenarios",
234
234
  missing_scenario_test: "scenario_tests",
235
235
  missing_passing_e2e: "passing_e2e",
236
- missing_verification_receipt: "passing_e2e",
237
- stale_verification_receipt: "passing_e2e",
238
- failed_verification_receipt: "passing_e2e",
239
- invalid_verification_receipt: "passing_e2e",
240
- verification_snapshot_unavailable: "passing_e2e",
236
+ missing_proof_receipt: "passing_e2e",
237
+ stale_proof_receipt: "passing_e2e",
238
+ failed_proof_receipt: "passing_e2e",
239
+ invalid_proof_receipt: "passing_e2e",
240
+ proof_contract_mismatch: "passing_e2e",
241
+ proof_snapshot_unavailable: "passing_e2e",
241
242
  missing_executable_test_symbol: "executable_symbols",
242
243
  missing_production_symbol: "production_symbols",
243
244
  missing_production_symbol_coverage: "production_symbols",
@@ -426,7 +427,38 @@ function buildRequirementBatches(
426
427
  );
427
428
  const priorBatchIds: string[] = [];
428
429
  return phases.map((phase) => {
429
- const definition = REPAIR_PHASES[phase];
430
+ const phaseRepairs = byPhase.get(phase) ?? [];
431
+ const coordinatesNeedReview =
432
+ phase === "source_coordinates" &&
433
+ phaseRepairs.some((repair) => {
434
+ const evidence = repair.evidence.coordinateRepairs;
435
+ return (
436
+ repair.gap !== "missing_symbol_coordinates" ||
437
+ !Array.isArray(evidence) ||
438
+ evidence.length === 0 ||
439
+ evidence.some((item) => !isRecord(item) || item.refreshable !== true)
440
+ );
441
+ });
442
+ const definition: RepairPhaseDefinition = coordinatesNeedReview
443
+ ? {
444
+ ...REPAIR_PHASES[phase],
445
+ objective: phaseRepairs.some(
446
+ (repair) => repair.gap === "missing_requirement_source",
447
+ )
448
+ ? "Bind the requirement to its current source document through validated upsert and inspect any missing symbol anchors before refreshing."
449
+ : "Query the affected symbols and repair their sourceFile/title or explicitly author granularity_reason: extractor-miss (or another intentional coarse anchor) through validated upsert before refreshing.",
450
+ workflowSteps: [
451
+ "kb_query",
452
+ "kb_validate_upsert",
453
+ "kb_upsert",
454
+ "kibi sync --refresh-symbol-coordinates",
455
+ "kibi sync",
456
+ "kb_check",
457
+ "kb_coverage",
458
+ ],
459
+ writePolicy: "review_then_sequential_upsert",
460
+ }
461
+ : REPAIR_PHASES[phase];
430
462
  const id = batchId(requirementId, phase);
431
463
  const batch: RepairPlanBatch = {
432
464
  id,
@@ -440,11 +472,17 @@ function buildRequirementBatches(
440
472
  validationRules: definition.validationRules,
441
473
  writePolicy: definition.writePolicy,
442
474
  autoApplicable: false,
443
- repairs: (byPhase.get(phase) ?? []).sort(
444
- (left, right) =>
445
- left.proofPriority - right.proofPriority ||
446
- left.gap.localeCompare(right.gap),
447
- ),
475
+ repairs: phaseRepairs
476
+ .map((repair) =>
477
+ coordinatesNeedReview
478
+ ? { ...repair, action: definition.objective }
479
+ : repair,
480
+ )
481
+ .sort(
482
+ (left, right) =>
483
+ left.proofPriority - right.proofPriority ||
484
+ left.gap.localeCompare(right.gap),
485
+ ),
448
486
  };
449
487
  priorBatchIds.push(id);
450
488
  return batch;
@@ -0,0 +1,141 @@
1
+ import type { KibiResult, OperationEffect, OperationName } from "./types.js";
2
+
3
+ export const KIBI_PROTOCOL_VERSION = 1 as const;
4
+
5
+ function record(value: unknown): value is Record<string, unknown> {
6
+ return value !== null && typeof value === "object" && !Array.isArray(value);
7
+ }
8
+
9
+ function diagnostics(value: unknown): KibiResult["diagnostics"] {
10
+ if (!Array.isArray(value)) return [];
11
+ return value.flatMap((entry) => {
12
+ if (typeof entry === "string")
13
+ return [{ message: entry, severity: "warning" as const }];
14
+ if (!record(entry) || typeof entry.message !== "string") return [];
15
+ return [entry as KibiResult["diagnostics"][number]];
16
+ });
17
+ }
18
+
19
+ function nextActions(value: unknown): KibiResult["nextActions"] {
20
+ if (!Array.isArray(value)) return [];
21
+ return value.flatMap((entry) => {
22
+ if (
23
+ !record(entry) ||
24
+ typeof entry.operation !== "string" ||
25
+ typeof entry.reason !== "string"
26
+ )
27
+ return [];
28
+ return [
29
+ {
30
+ operation: entry.operation,
31
+ input: entry.input,
32
+ reason: entry.reason,
33
+ required: entry.required === true,
34
+ },
35
+ ];
36
+ });
37
+ }
38
+
39
+ export function failedEffectStatus(
40
+ effect: OperationEffect,
41
+ failure: Record<string, unknown>,
42
+ ): KibiResult["effects"][number] {
43
+ return {
44
+ kind: effect,
45
+ status: "failed",
46
+ detail: failure.detail,
47
+ ...(typeof failure.errorCode === "string"
48
+ ? { errorCode: failure.errorCode }
49
+ : {}),
50
+ };
51
+ }
52
+
53
+ function effectStatus(
54
+ effect: OperationEffect,
55
+ data: Record<string, unknown> | undefined,
56
+ ): KibiResult["effects"][number] {
57
+ const failures = data?.effectFailures;
58
+ if (Array.isArray(failures)) {
59
+ const failure = failures.find(
60
+ (entry) => record(entry) && entry.kind === effect,
61
+ );
62
+ if (record(failure)) return failedEffectStatus(effect, failure);
63
+ }
64
+ return { kind: effect, status: "completed" };
65
+ }
66
+
67
+ function extraFailedEffects(
68
+ declared: readonly OperationEffect[],
69
+ data: Record<string, unknown> | undefined,
70
+ ): KibiResult["effects"] {
71
+ const failures = data?.effectFailures;
72
+ if (!Array.isArray(failures)) return [];
73
+ const seen = new Set(declared);
74
+ return failures.flatMap((entry) => {
75
+ if (
76
+ !record(entry) ||
77
+ typeof entry.kind !== "string" ||
78
+ seen.has(entry.kind as OperationEffect)
79
+ ) {
80
+ return [];
81
+ }
82
+ seen.add(entry.kind as OperationEffect);
83
+ return [
84
+ {
85
+ kind: entry.kind,
86
+ status: "failed" as const,
87
+ detail: entry.detail,
88
+ ...(typeof entry.errorCode === "string"
89
+ ? { errorCode: entry.errorCode }
90
+ : {}),
91
+ },
92
+ ];
93
+ });
94
+ }
95
+
96
+ export function resultVersion(spec: {
97
+ readonly name: OperationName | string;
98
+ readonly resultVersion?: string;
99
+ }): string {
100
+ return spec.resultVersion ?? `kibi.${spec.name}.v1`;
101
+ }
102
+
103
+ export function toKibiResult<T>(
104
+ spec: {
105
+ readonly name: OperationName | string;
106
+ readonly effects: readonly OperationEffect[];
107
+ readonly resultVersion?: string;
108
+ },
109
+ data: T,
110
+ options: Partial<
111
+ Pick<KibiResult<T>, "status" | "diagnostics" | "nextActions" | "error">
112
+ > = {},
113
+ ): KibiResult<T> {
114
+ const row = record(data) ? data : undefined;
115
+ const status =
116
+ options.status ??
117
+ (row?.status === "committed_with_repairs"
118
+ ? "committed_with_repairs"
119
+ : "success");
120
+ return {
121
+ kibiProtocol: KIBI_PROTOCOL_VERSION,
122
+ operation: spec.name as OperationName,
123
+ resultVersion: resultVersion(spec),
124
+ status,
125
+ data,
126
+ effects: [
127
+ ...spec.effects.map((effect) => effectStatus(effect, row)),
128
+ ...extraFailedEffects(spec.effects, row),
129
+ ],
130
+ diagnostics: options.diagnostics ?? diagnostics(row?.diagnostics),
131
+ nextActions: options.nextActions ?? nextActions(row?.nextActions),
132
+ ...(options.error ? { error: options.error } : {}),
133
+ };
134
+ }
135
+
136
+ export function operationData(value: unknown): unknown {
137
+ if (record(value) && "structuredContent" in value) {
138
+ return value.structuredContent;
139
+ }
140
+ return value;
141
+ }
@@ -1,3 +1,5 @@
1
+ import type { PrologErrorRecord } from "../../prolog/error-terms.js";
2
+ import type { BranchAttachment } from "../../utils/branch-resolver.js";
1
3
  import type { OperationEffect } from "./types.js";
2
4
 
3
5
  export type { OperationEffect } from "./types.js";
@@ -6,6 +8,8 @@ export type PrologQueryResult = {
6
8
  readonly success: boolean;
7
9
  readonly bindings: Readonly<Record<string, string>>;
8
10
  readonly error?: string;
11
+ /** Structured error term when the failure crossed a kb.pl throw site. */
12
+ readonly errorRecord?: PrologErrorRecord;
9
13
  };
10
14
 
11
15
  export type PrologEntityQueryInput = Readonly<{
@@ -35,20 +39,79 @@ export type PrologSearchQueryResult = Readonly<{
35
39
  count: number;
36
40
  }>;
37
41
 
42
+ /** Goal-free, versioned commands accepted by the journaled engine. */
43
+ export type EngineCommandV1 =
44
+ | Readonly<{ version: 1; kind: "status" }>
45
+ | Readonly<{
46
+ version: 1;
47
+ kind: "entities";
48
+ type?: string;
49
+ id?: string;
50
+ tags?: readonly string[];
51
+ sourceFile?: string;
52
+ limit: number;
53
+ offset: number;
54
+ }>
55
+ | Readonly<{
56
+ version: 1;
57
+ kind: "search";
58
+ query: string;
59
+ type?: string;
60
+ limit: number;
61
+ offset: number;
62
+ }>
63
+ | Readonly<{ version: 1; kind: "checkpoint" }>
64
+ | Readonly<{ version: 1; kind: "compact" }>
65
+ | Readonly<{ version: 1; kind: "save" }>
66
+ | Readonly<{ version: 1; kind: "check"; rule?: string }>
67
+ | Readonly<{
68
+ version: 1;
69
+ kind: "relationship";
70
+ action: "assert" | "retract";
71
+ type: string;
72
+ from: string;
73
+ to: string;
74
+ }>
75
+ | Readonly<{
76
+ version: 1;
77
+ kind: "persistence";
78
+ action: "checkpoint" | "compact" | "save" | "export";
79
+ targetDirectory?: string;
80
+ }>
81
+ | Readonly<{
82
+ version: 1;
83
+ kind: "lifecycle";
84
+ action: "stop" | "cancel";
85
+ requestId?: number;
86
+ }>
87
+ | Readonly<{ version: 1; kind: "stop" }>
88
+ | Readonly<{ version: 1; kind: "cancel"; requestId: number }>;
89
+
90
+ export interface EnginePort {
91
+ execute<T = PrologQueryResult>(
92
+ command: EngineCommandV1,
93
+ signal?: AbortSignal,
94
+ ): Promise<T>;
95
+ }
96
+
38
97
  // implements REQ-kibi-operation-interface-parity
39
98
  export interface PrologPort {
40
- query(goal: string): Promise<PrologQueryResult>;
99
+ query(goal: string, signal?: AbortSignal): Promise<PrologQueryResult>;
100
+ /** True when each query is isolated and must include its module load. */
101
+ oneShotMode?: boolean;
41
102
  /** Optional index-backed page query supplied by the journaled engine. */
42
103
  queryEntities?(
43
104
  input: PrologEntityQueryInput,
105
+ signal?: AbortSignal,
44
106
  ): Promise<PrologEntityQueryResult>;
45
107
  /** Optional normalized-token candidate lookup supplied by the engine. */
46
108
  searchEntities?(
47
109
  input: PrologSearchQueryInput,
110
+ signal?: AbortSignal,
48
111
  ): Promise<PrologSearchQueryResult>;
49
112
  nextSolution(): Promise<PrologQueryResult | null>;
50
113
  invalidateCache?(): void;
51
- save(): Promise<PrologQueryResult>;
114
+ save(signal?: AbortSignal): Promise<PrologQueryResult>;
52
115
  /** Present on the journaled engine; used to distinguish a persistent port from one-shot SWI. */
53
116
  storageStatus?(): Promise<PrologQueryResult>;
54
117
  /** Typed public freshness query; avoids exposing module loading over RPC. */
@@ -63,21 +126,39 @@ export type FilesystemStat = {
63
126
  export interface FilesystemPort {
64
127
  readFile(path: string): Promise<string>;
65
128
  writeFile(path: string, data: string): Promise<void>;
129
+ /** Optional workspace globbing used by source-posture classifiers. */
130
+ glob?(
131
+ patterns: readonly string[],
132
+ options: { readonly cwd: string; readonly includeIgnored?: boolean },
133
+ ): Promise<readonly string[]>;
134
+ /** Replace a file atomically when the host filesystem supports it. */
135
+ rename?(from: string, to: string): Promise<void>;
66
136
  mkdir(path: string): Promise<void>;
67
137
  stat(path: string): Promise<FilesystemStat>;
138
+ /** Optional destructive primitive used only to roll back newly-created files. */
139
+ unlink?(path: string): Promise<void>;
68
140
  }
69
141
 
70
142
  export interface GitPort {
71
- revParse(...args: readonly string[]): Promise<string>;
72
- showToplevel(): Promise<string>;
143
+ /** Optional low-level Git probes; the journaled runtime may provide them. */
144
+ revParse?(...args: readonly string[]): Promise<string>;
145
+ showToplevel?(): Promise<string>;
73
146
  workspaceSnapshot?(workspaceRoot: string): Promise<WorkspaceSnapshot>;
74
147
  }
75
148
 
76
149
  export type WorkspaceSnapshot = Readonly<{
77
- version: "kibi.workspace-snapshot.v1";
150
+ version: "kibi.workspace-snapshot.v2";
78
151
  hash: string;
152
+ /** True only when at least one change can alter the verification snapshot. */
79
153
  dirty: boolean;
80
154
  fileCount: number;
155
+ readonly changes?: readonly {
156
+ readonly path: string;
157
+ readonly status: string;
158
+ readonly snapshotRelevant: boolean;
159
+ }[];
160
+ readonly changeCount?: number;
161
+ readonly changesTruncated?: boolean;
81
162
  }>;
82
163
 
83
164
  export interface NetworkPort {
@@ -101,9 +182,19 @@ export type OperationContext = {
101
182
  readonly signal: AbortSignal;
102
183
  readonly clock: Clock;
103
184
  readonly prolog?: PrologPort;
185
+ readonly engine?: EnginePort;
186
+ /** Lazily acquire the branch engine for operations that may start without Prolog. */
187
+ readonly ensureProlog?: () => Promise<PrologPort>;
104
188
  readonly fs?: FilesystemPort;
189
+ /** Whether filesystem-capable mutations must author tracked source files. */
190
+ readonly sourceFirst?: boolean;
191
+ /** Internal apply-plan capability: source bytes were already approved/published. */
192
+ readonly sourcePlanApplication?: boolean;
193
+ /** Internal apply-plan capability: caller holds the cooperative source lock. */
194
+ readonly sourceMutationLockHeld?: boolean;
105
195
  readonly git?: GitPort;
106
196
  readonly net?: NetworkPort;
197
+ readonly branchAttachment?: BranchAttachment;
107
198
  };
108
199
 
109
200
  export interface RuntimeOperationSpec<TInput = unknown, TResult = unknown> {