kibi-cli 1.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/dist/cli-errors.d.ts +3 -1
  2. package/dist/cli-errors.d.ts.map +1 -1
  3. package/dist/cli-errors.js +4 -1
  4. package/dist/cli-json-command.d.ts +1 -0
  5. package/dist/cli-json-command.d.ts.map +1 -1
  6. package/dist/cli-json-command.js +13 -4
  7. package/dist/cli-operation-loader.js +3 -3
  8. package/dist/cli-operation-metadata.d.ts +4 -3
  9. package/dist/cli-operation-metadata.d.ts.map +1 -1
  10. package/dist/cli-operation-metadata.js +7 -5
  11. package/dist/cli-protocol.js +1 -1
  12. package/dist/cli-register-maintenance.d.ts.map +1 -1
  13. package/dist/cli-register-maintenance.js +7 -0
  14. package/dist/cli-register-proof.d.ts +3 -0
  15. package/dist/cli-register-proof.d.ts.map +1 -0
  16. package/dist/cli-register-proof.js +127 -0
  17. package/dist/cli-register-reporting.d.ts.map +1 -1
  18. package/dist/cli-register-reporting.js +7 -0
  19. package/dist/cli.d.ts +4 -0
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +19 -10
  22. package/dist/commands/branch.d.ts +1 -0
  23. package/dist/commands/branch.d.ts.map +1 -1
  24. package/dist/commands/branch.js +8 -4
  25. package/dist/commands/check-generated.d.ts +7 -0
  26. package/dist/commands/check-generated.d.ts.map +1 -0
  27. package/dist/commands/check-generated.js +192 -0
  28. package/dist/commands/check.d.ts +14 -0
  29. package/dist/commands/check.d.ts.map +1 -1
  30. package/dist/commands/check.js +193 -46
  31. package/dist/commands/coverage.d.ts +1 -0
  32. package/dist/commands/coverage.d.ts.map +1 -1
  33. package/dist/commands/coverage.js +6 -0
  34. package/dist/commands/doctor.d.ts +22 -0
  35. package/dist/commands/doctor.d.ts.map +1 -1
  36. package/dist/commands/doctor.js +170 -23
  37. package/dist/commands/engine.d.ts +12 -0
  38. package/dist/commands/engine.d.ts.map +1 -1
  39. package/dist/commands/engine.js +42 -0
  40. package/dist/commands/github-init.d.ts +1 -0
  41. package/dist/commands/github-init.d.ts.map +1 -1
  42. package/dist/commands/github-init.js +9 -5
  43. package/dist/commands/init-helpers.d.ts.map +1 -1
  44. package/dist/commands/init-helpers.js +49 -10
  45. package/dist/commands/migrate.d.ts +4 -0
  46. package/dist/commands/migrate.d.ts.map +1 -1
  47. package/dist/commands/migrate.js +7 -7
  48. package/dist/commands/proof-explain.d.ts +10 -0
  49. package/dist/commands/proof-explain.d.ts.map +1 -0
  50. package/dist/commands/proof-explain.js +45 -0
  51. package/dist/commands/proof-impact.d.ts +7 -0
  52. package/dist/commands/proof-impact.d.ts.map +1 -0
  53. package/dist/commands/proof-impact.js +39 -0
  54. package/dist/commands/proof-migrate-legacy.d.ts +7 -0
  55. package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
  56. package/dist/commands/proof-migrate-legacy.js +45 -0
  57. package/dist/commands/proof-prune.d.ts +8 -0
  58. package/dist/commands/proof-prune.d.ts.map +1 -0
  59. package/dist/commands/proof-prune.js +53 -0
  60. package/dist/commands/prove.d.ts +37 -0
  61. package/dist/commands/prove.d.ts.map +1 -0
  62. package/dist/commands/prove.js +470 -0
  63. package/dist/commands/report.d.ts.map +1 -1
  64. package/dist/commands/report.js +18 -3
  65. package/dist/commands/sync/discovery.d.ts +3 -0
  66. package/dist/commands/sync/discovery.d.ts.map +1 -1
  67. package/dist/commands/sync/discovery.js +36 -28
  68. package/dist/commands/sync/manifest.d.ts +2 -1
  69. package/dist/commands/sync/manifest.d.ts.map +1 -1
  70. package/dist/commands/sync/manifest.js +55 -21
  71. package/dist/commands/sync/persistence.d.ts +4 -1
  72. package/dist/commands/sync/persistence.d.ts.map +1 -1
  73. package/dist/commands/sync/persistence.js +31 -14
  74. package/dist/commands/sync/staging.d.ts +1 -0
  75. package/dist/commands/sync/staging.d.ts.map +1 -1
  76. package/dist/commands/sync/staging.js +5 -2
  77. package/dist/commands/sync/untracked-targets.d.ts +24 -0
  78. package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
  79. package/dist/commands/sync/untracked-targets.js +108 -0
  80. package/dist/commands/sync.d.ts +11 -1
  81. package/dist/commands/sync.d.ts.map +1 -1
  82. package/dist/commands/sync.js +74 -30
  83. package/dist/engine-daemon.d.ts +3 -1
  84. package/dist/engine-daemon.d.ts.map +1 -1
  85. package/dist/engine-daemon.js +49 -20
  86. package/dist/engine.d.ts +17 -77
  87. package/dist/engine.d.ts.map +1 -1
  88. package/dist/engine.js +331 -91
  89. package/dist/env/bootstrap.d.ts +84 -0
  90. package/dist/env/bootstrap.d.ts.map +1 -0
  91. package/dist/env/bootstrap.js +310 -0
  92. package/dist/extractors/manifest.d.ts +5 -0
  93. package/dist/extractors/manifest.d.ts.map +1 -1
  94. package/dist/extractors/manifest.js +46 -1
  95. package/dist/extractors/markdown.d.ts +7 -3
  96. package/dist/extractors/markdown.d.ts.map +1 -1
  97. package/dist/extractors/markdown.js +60 -24
  98. package/dist/extractors/playwright-cases.js +1 -1
  99. package/dist/extractors/relationships.d.ts +6 -0
  100. package/dist/extractors/relationships.d.ts.map +1 -1
  101. package/dist/extractors/relationships.js +1 -1
  102. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  103. package/dist/extractors/symbols-coordinator.d.ts +8 -0
  104. package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
  105. package/dist/extractors/symbols-coordinator.js +40 -0
  106. package/dist/extractors/symbols-ts.d.ts +9 -19
  107. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  108. package/dist/extractors/symbols-ts.js +34 -429
  109. package/dist/intent-search.d.ts +1 -0
  110. package/dist/intent-search.d.ts.map +1 -1
  111. package/dist/intent-search.js +11 -8
  112. package/dist/logic/ir.d.ts +1 -0
  113. package/dist/logic/ir.d.ts.map +1 -1
  114. package/dist/logic/ir.js +1 -1
  115. package/dist/operations/bootstrap/activation.d.ts +2 -1
  116. package/dist/operations/bootstrap/activation.d.ts.map +1 -1
  117. package/dist/operations/bootstrap/activation.js +11 -3
  118. package/dist/operations/bootstrap/generate.d.ts +2 -1
  119. package/dist/operations/bootstrap/generate.d.ts.map +1 -1
  120. package/dist/operations/bootstrap/generate.js +6 -3
  121. package/dist/operations/bootstrap/guidance.d.ts +1 -0
  122. package/dist/operations/bootstrap/guidance.d.ts.map +1 -1
  123. package/dist/operations/bootstrap/guidance.js +1 -1
  124. package/dist/operations/modeling/model-requirement.d.ts +5 -0
  125. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  126. package/dist/operations/modeling/model-requirement.js +57 -46
  127. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -1
  128. package/dist/operations/modeling/predicate-applicability.js +103 -4
  129. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
  130. package/dist/operations/modeling/predicate-catalog-2.js +18 -2
  131. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
  132. package/dist/operations/modeling/predicate-catalog-3.js +17 -1
  133. package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
  134. package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
  135. package/dist/operations/modeling/predicate-catalog-5.js +291 -0
  136. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
  137. package/dist/operations/modeling/predicate-catalog.js +4 -0
  138. package/dist/operations/modeling/predicate-loader.d.ts +1 -0
  139. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  140. package/dist/operations/modeling/predicate-loader.js +4 -3
  141. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  142. package/dist/operations/modeling/predicate-ranker.js +4 -1
  143. package/dist/operations/modeling/predicate-types.d.ts +1 -1
  144. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  145. package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
  146. package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
  147. package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
  148. package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
  149. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  150. package/dist/operations/modeling/suggest-predicates.js +82 -22
  151. package/dist/operations/mutation/contradictions.d.ts +2 -1
  152. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  153. package/dist/operations/mutation/contradictions.js +26 -5
  154. package/dist/operations/mutation/delete.d.ts +3 -0
  155. package/dist/operations/mutation/delete.d.ts.map +1 -1
  156. package/dist/operations/mutation/delete.js +100 -32
  157. package/dist/operations/mutation/relationships.d.ts +1 -0
  158. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  159. package/dist/operations/mutation/relationships.js +6 -4
  160. package/dist/operations/mutation/saga.d.ts +51 -0
  161. package/dist/operations/mutation/saga.d.ts.map +1 -0
  162. package/dist/operations/mutation/saga.js +67 -0
  163. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  164. package/dist/operations/mutation/serialization.js +3 -2
  165. package/dist/operations/mutation/source-authoring.d.ts +5 -1
  166. package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
  167. package/dist/operations/mutation/source-authoring.js +79 -46
  168. package/dist/operations/mutation/strict-fact.d.ts +1 -0
  169. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  170. package/dist/operations/mutation/strict-fact.js +8 -5
  171. package/dist/operations/mutation/symbol-compiler-lock.d.ts +5 -2
  172. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -1
  173. package/dist/operations/mutation/symbol-compiler-lock.js +65 -2
  174. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  175. package/dist/operations/mutation/symbol-granularity.js +11 -89
  176. package/dist/operations/mutation/symbol-refresh.d.ts +1 -0
  177. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  178. package/dist/operations/mutation/symbol-refresh.js +10 -8
  179. package/dist/operations/mutation/upsert.d.ts +18 -2
  180. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  181. package/dist/operations/mutation/upsert.js +86 -54
  182. package/dist/operations/mutation/validate-upsert.js +2 -2
  183. package/dist/operations/mutation/validation.d.ts.map +1 -1
  184. package/dist/operations/mutation/validation.js +46 -4
  185. package/dist/operations/mutation/warnings.d.ts +1 -0
  186. package/dist/operations/mutation/warnings.d.ts.map +1 -1
  187. package/dist/operations/mutation/warnings.js +7 -5
  188. package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
  189. package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
  190. package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
  191. package/dist/operations/planning/apply-plan.d.ts +8 -106
  192. package/dist/operations/planning/apply-plan.d.ts.map +1 -1
  193. package/dist/operations/planning/apply-plan.js +113 -36
  194. package/dist/operations/planning/compile-intent.d.ts +51 -0
  195. package/dist/operations/planning/compile-intent.d.ts.map +1 -1
  196. package/dist/operations/planning/compile-intent.js +133 -17
  197. package/dist/operations/proof/baseline-diff.d.ts +41 -0
  198. package/dist/operations/proof/baseline-diff.d.ts.map +1 -0
  199. package/dist/operations/proof/baseline-diff.js +153 -0
  200. package/dist/operations/proof/explain.d.ts +75 -0
  201. package/dist/operations/proof/explain.d.ts.map +1 -0
  202. package/dist/operations/proof/explain.js +294 -0
  203. package/dist/operations/proof/impact.d.ts +45 -0
  204. package/dist/operations/proof/impact.d.ts.map +1 -0
  205. package/dist/operations/proof/impact.js +118 -0
  206. package/dist/operations/proof/ingest-proof.d.ts +34 -0
  207. package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
  208. package/dist/operations/proof/ingest-proof.js +348 -0
  209. package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
  210. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
  211. package/dist/operations/proof/migrate-legacy-receipts.js +92 -0
  212. package/dist/operations/proof/prune-receipts.d.ts +35 -0
  213. package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
  214. package/dist/operations/proof/prune-receipts.js +91 -0
  215. package/dist/operations/proof/receipt-document.d.ts +29 -0
  216. package/dist/operations/proof/receipt-document.d.ts.map +1 -0
  217. package/dist/operations/proof/receipt-document.js +117 -0
  218. package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -1
  219. package/dist/operations/semantic-advisor/analysis-receipt.js +3 -9
  220. package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
  221. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  222. package/dist/operations/semantic-advisor/analyze-prose.js +64 -93
  223. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  224. package/dist/operations/semantic-advisor/clauses.js +20 -7
  225. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts +63 -0
  226. package/dist/operations/semantic-advisor/plugin-orchestration.d.ts.map +1 -0
  227. package/dist/operations/semantic-advisor/plugin-orchestration.js +489 -0
  228. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +15 -2
  229. package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -1
  230. package/dist/operations/semantic-advisor/predicate-rules-core.js +7 -140
  231. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +11 -12
  232. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -1
  233. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +6 -94
  234. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +16 -0
  235. package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -1
  236. package/dist/operations/semantic-advisor/predicate-rules-policy.js +7 -150
  237. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +9 -0
  238. package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -1
  239. package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +7 -102
  240. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +13 -0
  241. package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -1
  242. package/dist/operations/semantic-advisor/predicate-rules-product.js +7 -133
  243. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
  244. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
  245. package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
  246. package/dist/operations/semantic-advisor/types.d.ts +1 -0
  247. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  248. package/dist/plugins/compose-ontology-packs.d.ts +51 -0
  249. package/dist/plugins/compose-ontology-packs.d.ts.map +1 -0
  250. package/dist/plugins/compose-ontology-packs.js +257 -0
  251. package/dist/plugins/compose-semantic-classifier.d.ts +42 -0
  252. package/dist/plugins/compose-semantic-classifier.d.ts.map +1 -0
  253. package/dist/plugins/compose-semantic-classifier.js +211 -0
  254. package/dist/plugins/external-allowlist.d.ts +10 -0
  255. package/dist/plugins/external-allowlist.d.ts.map +1 -0
  256. package/dist/plugins/external-allowlist.js +16 -0
  257. package/dist/plugins/index.d.ts +9 -0
  258. package/dist/plugins/index.d.ts.map +1 -0
  259. package/dist/plugins/index.js +33 -0
  260. package/dist/plugins/load-plugin.d.ts +19 -0
  261. package/dist/plugins/load-plugin.d.ts.map +1 -0
  262. package/dist/plugins/load-plugin.js +59 -0
  263. package/dist/plugins/project-config.d.ts +28 -0
  264. package/dist/plugins/project-config.d.ts.map +1 -0
  265. package/dist/plugins/project-config.js +90 -0
  266. package/dist/plugins/registry.d.ts +93 -0
  267. package/dist/plugins/registry.d.ts.map +1 -0
  268. package/dist/plugins/registry.js +338 -0
  269. package/dist/plugins/resolve-package.d.ts +47 -0
  270. package/dist/plugins/resolve-package.d.ts.map +1 -0
  271. package/dist/plugins/resolve-package.js +262 -0
  272. package/dist/plugins/source-analysis-service.d.ts +44 -0
  273. package/dist/plugins/source-analysis-service.d.ts.map +1 -0
  274. package/dist/plugins/source-analysis-service.js +232 -0
  275. package/dist/prolog/codec.d.ts +13 -1
  276. package/dist/prolog/codec.d.ts.map +1 -1
  277. package/dist/prolog/codec.js +269 -154
  278. package/dist/prolog/error-terms.d.ts +47 -0
  279. package/dist/prolog/error-terms.d.ts.map +1 -0
  280. package/dist/prolog/error-terms.js +334 -0
  281. package/dist/prolog/janitor.d.ts +50 -0
  282. package/dist/prolog/janitor.d.ts.map +1 -0
  283. package/dist/prolog/janitor.js +154 -0
  284. package/dist/prolog/store-lock.d.ts +45 -0
  285. package/dist/prolog/store-lock.d.ts.map +1 -0
  286. package/dist/prolog/store-lock.js +195 -0
  287. package/dist/prolog.d.ts +7 -0
  288. package/dist/prolog.d.ts.map +1 -1
  289. package/dist/prolog.js +55 -17
  290. package/dist/proof/evaluate.d.ts +27 -0
  291. package/dist/proof/evaluate.d.ts.map +1 -0
  292. package/dist/proof/evaluate.js +151 -0
  293. package/dist/proof/inspect.d.ts +12 -0
  294. package/dist/proof/inspect.d.ts.map +1 -0
  295. package/dist/proof/inspect.js +236 -0
  296. package/dist/proof/integrations.d.ts +35 -0
  297. package/dist/proof/integrations.d.ts.map +1 -0
  298. package/dist/proof/integrations.js +123 -0
  299. package/dist/proof/producers/junit-adapter.d.ts +26 -0
  300. package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
  301. package/dist/proof/producers/junit-adapter.js +186 -0
  302. package/dist/{public → proof/producers}/playwright-case-id.d.ts +1 -1
  303. package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
  304. package/dist/{public → proof/producers}/playwright-case-id.js +1 -1
  305. package/dist/proof/producers/playwright-reporter.d.ts +27 -0
  306. package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
  307. package/dist/proof/producers/playwright-reporter.js +138 -0
  308. package/dist/proof/producers/tap-adapter.d.ts +10 -0
  309. package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
  310. package/dist/proof/producers/tap-adapter.js +200 -0
  311. package/dist/proof/receipt-outcome.d.ts +2 -0
  312. package/dist/proof/receipt-outcome.d.ts.map +1 -0
  313. package/dist/proof/receipt-outcome.js +1 -0
  314. package/dist/public/diagnostic-usage.js +6 -6
  315. package/dist/public/distribution-parity.d.ts +7 -1
  316. package/dist/public/distribution-parity.d.ts.map +1 -1
  317. package/dist/public/distribution-parity.js +15 -10
  318. package/dist/public/extractors/symbols-coordinator.d.ts +1 -1
  319. package/dist/public/extractors/symbols-coordinator.d.ts.map +1 -1
  320. package/dist/public/extractors/symbols-coordinator.js +1 -1
  321. package/dist/public/impact/analyzer.d.ts +1 -1
  322. package/dist/public/impact/analyzer.d.ts.map +1 -1
  323. package/dist/public/impact/analyzer.js +6 -4
  324. package/dist/public/impact/coverage-depth-quality.d.ts +1 -0
  325. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  326. package/dist/public/impact/coverage-depth-quality.js +1 -1
  327. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  328. package/dist/public/impact/diagnostics.js +2 -2
  329. package/dist/public/impact/diff-meaning.d.ts +1 -0
  330. package/dist/public/impact/diff-meaning.d.ts.map +1 -1
  331. package/dist/public/impact/diff-meaning.js +5 -2
  332. package/dist/public/impact/full-kb-quality.d.ts +5 -2
  333. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  334. package/dist/public/impact/full-kb-quality.js +329 -64
  335. package/dist/public/operations/catalog.d.ts +450 -196
  336. package/dist/public/operations/catalog.d.ts.map +1 -1
  337. package/dist/public/operations/catalog.js +6 -4
  338. package/dist/public/operations/check-executor.d.ts.map +1 -1
  339. package/dist/public/operations/check-executor.js +4 -8
  340. package/dist/public/operations/check-helpers.d.ts +1 -1
  341. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  342. package/dist/public/operations/check-helpers.js +1 -1
  343. package/dist/public/operations/contracts.d.ts +7 -0
  344. package/dist/public/operations/contracts.d.ts.map +1 -1
  345. package/dist/public/operations/contracts.js +66 -34
  346. package/dist/public/operations/discovery-entities.d.ts +15 -0
  347. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  348. package/dist/public/operations/discovery-entities.js +38 -0
  349. package/dist/public/operations/discovery-executors.d.ts +9 -9
  350. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  351. package/dist/public/operations/discovery-executors.js +39 -31
  352. package/dist/public/operations/index.d.ts +1 -1
  353. package/dist/public/operations/index.d.ts.map +1 -1
  354. package/dist/public/operations/index.js +1 -1
  355. package/dist/public/operations/migration-plan.d.ts +4 -3
  356. package/dist/public/operations/migration-plan.d.ts.map +1 -1
  357. package/dist/public/operations/migration-plan.js +23 -21
  358. package/dist/public/operations/node-ports.js +6 -6
  359. package/dist/public/operations/prolog-json.d.ts +1 -1
  360. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  361. package/dist/public/operations/prolog-json.js +7 -7
  362. package/dist/public/operations/repair-plan.d.ts +3 -3
  363. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  364. package/dist/public/operations/repair-plan.js +49 -19
  365. package/dist/public/operations/result-envelope.d.ts +1 -0
  366. package/dist/public/operations/result-envelope.d.ts.map +1 -1
  367. package/dist/public/operations/result-envelope.js +12 -10
  368. package/dist/public/operations/runtime-types.d.ts +21 -1
  369. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  370. package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
  371. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
  372. package/dist/public/operations/specs/check-rules.generated.js +35 -0
  373. package/dist/public/operations/specs/check.d.ts +7 -2
  374. package/dist/public/operations/specs/check.d.ts.map +1 -1
  375. package/dist/public/operations/specs/check.js +8 -20
  376. package/dist/public/operations/specs/discovery.d.ts +3 -0
  377. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  378. package/dist/public/operations/specs/discovery.js +3 -0
  379. package/dist/public/operations/specs/mutation-schemas.d.ts +257 -163
  380. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  381. package/dist/public/operations/specs/mutation-schemas.js +15 -7
  382. package/dist/public/operations/specs/planning.d.ts +9 -0
  383. package/dist/public/operations/specs/planning.d.ts.map +1 -1
  384. package/dist/public/operations/specs/planning.js +6 -0
  385. package/dist/public/operations/specs/proof.d.ts +212 -0
  386. package/dist/public/operations/specs/proof.d.ts.map +1 -0
  387. package/dist/public/operations/specs/proof.js +30 -0
  388. package/dist/public/operations/specs/reporting.d.ts +20 -0
  389. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  390. package/dist/public/operations/specs/reporting.js +112 -12
  391. package/dist/public/operations/specs/semantic.d.ts +1 -1
  392. package/dist/public/operations/specs/semantic.d.ts.map +1 -1
  393. package/dist/public/operations/specs/semantic.js +54 -4
  394. package/dist/public/operations/specs/upsert.d.ts +257 -163
  395. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  396. package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
  397. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
  398. package/dist/public/operations/symbol-repair-plan.js +121 -4
  399. package/dist/public/operations/types.d.ts +6 -1
  400. package/dist/public/operations/types.d.ts.map +1 -1
  401. package/dist/public/proof-fingerprint.d.ts +54 -0
  402. package/dist/public/proof-fingerprint.d.ts.map +1 -0
  403. package/dist/public/proof-fingerprint.js +141 -0
  404. package/dist/public/proof-protocol.d.ts +354 -0
  405. package/dist/public/proof-protocol.d.ts.map +1 -0
  406. package/dist/public/proof-protocol.js +454 -0
  407. package/dist/public/proof-receipt.d.ts +279 -0
  408. package/dist/public/proof-receipt.d.ts.map +1 -0
  409. package/dist/public/proof-receipt.js +377 -0
  410. package/dist/public/schemas/entity.d.ts.map +1 -1
  411. package/dist/public/schemas/entity.js +21 -7
  412. package/dist/public/skills/kibi-freshness/SKILL.md +1 -1
  413. package/dist/public/skills/kibi-usage/SKILL.md +44 -12
  414. package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
  415. package/dist/public/skills/kibi-usage/resources/proof.md +150 -0
  416. package/dist/public/skills/kibi-usage/resources/workflows.md +6 -6
  417. package/dist/public/symbol-granularity.d.ts +3 -14
  418. package/dist/public/symbol-granularity.d.ts.map +1 -1
  419. package/dist/public/symbol-granularity.generated.d.ts +16 -0
  420. package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
  421. package/dist/public/symbol-granularity.generated.js +53 -0
  422. package/dist/public/symbol-granularity.js +6 -47
  423. package/dist/public/telemetry-acceptance.d.ts +3 -77
  424. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  425. package/dist/public/telemetry-acceptance.js +4 -2
  426. package/dist/public/telemetry-remediation.js +1 -1
  427. package/dist/report/html-report.css +1240 -0
  428. package/dist/report/html-report.d.ts +4 -2
  429. package/dist/report/html-report.d.ts.map +1 -1
  430. package/dist/report/html-report.js +37 -300
  431. package/dist/runtime/cli-runtime.d.ts +2 -0
  432. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  433. package/dist/runtime/cli-runtime.js +32 -7
  434. package/dist/schemas/entity.schema.json +355 -215
  435. package/dist/search-ranking.d.ts +1 -0
  436. package/dist/search-ranking.d.ts.map +1 -1
  437. package/dist/search-ranking.js +3 -0
  438. package/dist/traceability/evidence-model.d.ts +28 -0
  439. package/dist/traceability/evidence-model.d.ts.map +1 -1
  440. package/dist/traceability/git-staged.d.ts +20 -0
  441. package/dist/traceability/git-staged.d.ts.map +1 -1
  442. package/dist/traceability/git-staged.js +145 -1
  443. package/dist/traceability/staged-diagnostics.d.ts +7 -0
  444. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  445. package/dist/traceability/staged-diagnostics.js +78 -7
  446. package/dist/traceability/staged-file-coverage.d.ts +33 -0
  447. package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
  448. package/dist/traceability/staged-file-coverage.js +284 -0
  449. package/dist/traceability/staged-impact-contract.js +4 -4
  450. package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
  451. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  452. package/dist/traceability/staged-symbols-manifest.js +138 -27
  453. package/dist/traceability/symbol-extract.d.ts +24 -2
  454. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  455. package/dist/traceability/symbol-extract.js +64 -208
  456. package/dist/traceability/temp-kb.d.ts +2 -0
  457. package/dist/traceability/temp-kb.d.ts.map +1 -1
  458. package/dist/traceability/temp-kb.js +13 -4
  459. package/dist/types/entities.d.ts +5 -3
  460. package/dist/types/entities.d.ts.map +1 -1
  461. package/dist/utils/branch-resolver.d.ts +1 -0
  462. package/dist/utils/branch-resolver.d.ts.map +1 -1
  463. package/dist/utils/branch-resolver.js +7 -4
  464. package/dist/utils/branch-store.d.ts +6 -0
  465. package/dist/utils/branch-store.d.ts.map +1 -1
  466. package/dist/utils/branch-store.js +27 -0
  467. package/dist/utils/kb-paths.d.ts +1 -1
  468. package/dist/utils/kb-paths.d.ts.map +1 -1
  469. package/dist/utils/kb-paths.js +1 -1
  470. package/dist/utils/rule-registry.d.ts +1 -11
  471. package/dist/utils/rule-registry.d.ts.map +1 -1
  472. package/dist/utils/rule-registry.generated.d.ts +102 -0
  473. package/dist/utils/rule-registry.generated.d.ts.map +1 -0
  474. package/dist/utils/rule-registry.generated.js +131 -0
  475. package/dist/utils/rule-registry.js +12 -113
  476. package/dist/utils/strict-modeling.d.ts +1 -0
  477. package/dist/utils/strict-modeling.d.ts.map +1 -1
  478. package/dist/utils/strict-modeling.js +1 -1
  479. package/package.json +20 -20
  480. package/src/public/diagnostic-usage.ts +6 -6
  481. package/src/public/distribution-parity.ts +17 -10
  482. package/src/public/extractors/symbols-coordinator.ts +1 -0
  483. package/src/public/impact/analyzer.ts +15 -12
  484. package/src/public/impact/coverage-depth-quality.ts +1 -1
  485. package/src/public/impact/diagnostics.ts +2 -1
  486. package/src/public/impact/diff-meaning.ts +11 -4
  487. package/src/public/impact/full-kb-quality.ts +463 -72
  488. package/src/public/operations/catalog.ts +10 -4
  489. package/src/public/operations/check-executor.ts +4 -8
  490. package/src/public/operations/check-helpers.ts +2 -2
  491. package/src/public/operations/contracts.ts +78 -34
  492. package/src/public/operations/discovery-entities.ts +53 -0
  493. package/src/public/operations/discovery-executors.ts +64 -48
  494. package/src/public/operations/index.ts +1 -1
  495. package/src/public/operations/migration-plan.ts +32 -25
  496. package/src/public/operations/node-ports.ts +6 -6
  497. package/src/public/operations/prolog-json.ts +13 -5
  498. package/src/public/operations/repair-plan.ts +60 -23
  499. package/src/public/operations/result-envelope.ts +15 -10
  500. package/src/public/operations/runtime-types.ts +26 -2
  501. package/src/public/operations/specs/check-rules.generated.ts +38 -0
  502. package/src/public/operations/specs/check.ts +12 -21
  503. package/src/public/operations/specs/discovery.ts +3 -0
  504. package/src/public/operations/specs/mutation-schemas.ts +22 -9
  505. package/src/public/operations/specs/planning.ts +7 -0
  506. package/src/public/operations/specs/proof.ts +43 -0
  507. package/src/public/operations/specs/reporting.ts +140 -13
  508. package/src/public/operations/specs/semantic.ts +79 -17
  509. package/src/public/operations/symbol-repair-plan.ts +166 -7
  510. package/src/public/operations/types.ts +6 -1
  511. package/src/public/proof-fingerprint.ts +216 -0
  512. package/src/public/proof-protocol-types.d.ts +96 -0
  513. package/src/public/proof-protocol.ts +589 -0
  514. package/src/public/proof-receipt.ts +499 -0
  515. package/src/public/schemas/entity.ts +26 -10
  516. package/src/public/skills/kibi-freshness/SKILL.md +1 -1
  517. package/src/public/skills/kibi-usage/SKILL.md +44 -12
  518. package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
  519. package/src/public/skills/kibi-usage/resources/proof.md +150 -0
  520. package/src/public/skills/kibi-usage/resources/workflows.md +6 -6
  521. package/src/public/symbol-granularity.generated.ts +74 -0
  522. package/src/public/symbol-granularity.ts +34 -59
  523. package/src/public/telemetry-acceptance-types.d.ts +98 -0
  524. package/src/public/telemetry-acceptance.ts +22 -100
  525. package/src/public/telemetry-remediation.ts +1 -1
  526. package/src/schemas/entity.schema.json +355 -215
  527. package/dist/cli-register-verification.d.ts +0 -3
  528. package/dist/cli-register-verification.d.ts.map +0 -1
  529. package/dist/cli-register-verification.js +0 -16
  530. package/dist/commands/verify.d.ts +0 -10
  531. package/dist/commands/verify.d.ts.map +0 -1
  532. package/dist/commands/verify.js +0 -126
  533. package/dist/operations/verification/ingest-verification.d.ts +0 -29
  534. package/dist/operations/verification/ingest-verification.d.ts.map +0 -1
  535. package/dist/operations/verification/ingest-verification.js +0 -192
  536. package/dist/public/operations/specs/verification.d.ts +0 -78
  537. package/dist/public/operations/specs/verification.d.ts.map +0 -1
  538. package/dist/public/operations/specs/verification.js +0 -62
  539. package/dist/public/playwright-case-id.d.ts.map +0 -1
  540. package/dist/public/verification-receipt.d.ts +0 -242
  541. package/dist/public/verification-receipt.d.ts.map +0 -1
  542. package/dist/public/verification-receipt.js +0 -296
  543. package/dist/verification/playwright-reporter.d.ts +0 -21
  544. package/dist/verification/playwright-reporter.d.ts.map +0 -1
  545. package/dist/verification/playwright-reporter.js +0 -114
  546. package/src/public/operations/specs/verification.ts +0 -78
  547. package/src/public/playwright-case-id.ts +0 -35
  548. package/src/public/verification-receipt.ts +0 -412
@@ -1,6 +1,7 @@
1
- import { createHash } from "node:crypto";
1
+ import { createHash, randomUUID } from "node:crypto";
2
2
  import { existsSync, realpathSync } from "node:fs";
3
3
  import path from "node:path";
4
+ import { OperationError } from "../../cli-errors.js";
4
5
  import { branchEnsureCommand, branchMigrateCommand, branchRecoverCommand, } from "../../commands/branch.js";
5
6
  import { migrateCommand } from "../../commands/migrate.js";
6
7
  import { syncCommand } from "../../commands/sync.js";
@@ -13,6 +14,7 @@ import { bootstrapEmptyKbSnapshotId, bootstrapPlanHash, } from "../bootstrap/typ
13
14
  import { executeDelete } from "../mutation/delete.js";
14
15
  import { writePendingSourceReceipt } from "../mutation/source-authoring.js";
15
16
  import { executeUpsert } from "../mutation/upsert.js";
17
+ import { acquireWorkspaceMutationLock, releaseWorkspaceMutationLock, } from "../mutation/workspace-mutation-lock.js";
16
18
  import { compilePlanHash, } from "./compile-intent.js";
17
19
  // implements REQ-kibi-change-to-proof-plan-compiler
18
20
  export const PLAN_APPLY_RESULT_VERSION = "kibi.plan-apply-result.v1";
@@ -96,6 +98,21 @@ function isMigrationApplyArgs(args) {
96
98
  function isBootstrapApplyArgs(args) {
97
99
  return "plan" in args && args.plan.version === "kibi.bootstrap-plan.v1";
98
100
  }
101
+ export function assertSourceWriteStaysInWorkspace(root, absolute, writePath) {
102
+ if (absolute !== root && !absolute.startsWith(`${root}${path.sep}`)) {
103
+ throw new Error(`Apply plan failed: sourceWrites.path escapes workspace: ${writePath}`);
104
+ }
105
+ }
106
+ export function assertBootstrapRecoveryDependencies(remaining, applied) {
107
+ for (const action of remaining) {
108
+ for (const dependency of action.dependsOn ?? []) {
109
+ if (!applied.has(dependency) &&
110
+ !remaining.some((candidate) => candidate.id === dependency)) {
111
+ throw new Error(`Bootstrap recovery journal is missing dependency '${dependency}' for '${action.id}'`);
112
+ }
113
+ }
114
+ }
115
+ }
99
116
  export function orderBootstrapActions(actions, completed = new Set()) {
100
117
  const byId = new Map();
101
118
  for (const action of actions) {
@@ -274,7 +291,7 @@ async function validateSources(context, sourceHashes) {
274
291
  }
275
292
  return checked;
276
293
  }
277
- async function applySourceWrites(context, writes, planHash, allowReplay = false) {
294
+ async function applySourceWrites(context, writes, planHash, allowReplay = false, onCommitted = () => undefined) {
278
295
  if (writes.length === 0) {
279
296
  return { paths: [], rollback: async () => undefined, journalId: null };
280
297
  }
@@ -338,6 +355,7 @@ async function applySourceWrites(context, writes, planHash, allowReplay = false)
338
355
  if (!allowReplay) {
339
356
  throw new Error(`MUTATION_ALREADY_COMMITTED: source plan ${planHash} already crossed the authoritative commit boundary; use kb_apply_plan recoveryJournalId=${journalId} instead of retrying the original mutation`);
340
357
  }
358
+ onCommitted();
341
359
  for (const entry of prior.entries) {
342
360
  if (entry.mode === "write" && entry.afterHash !== null) {
343
361
  writePendingSourceReceipt(context.workspaceRoot, entry.path, entry.afterHash);
@@ -378,6 +396,7 @@ async function applySourceWrites(context, writes, planHash, allowReplay = false)
378
396
  const originals = [];
379
397
  const entries = [];
380
398
  const paths = [];
399
+ let sourceCommitted = false;
381
400
  try {
382
401
  // Validate every target and hash before touching the working tree.
383
402
  for (const write of writes) {
@@ -388,9 +407,7 @@ async function applySourceWrites(context, writes, planHash, allowReplay = false)
388
407
  }
389
408
  const absolute = path.resolve(context.workspaceRoot, write.path);
390
409
  const root = path.resolve(context.workspaceRoot);
391
- if (absolute !== root && !absolute.startsWith(`${root}${path.sep}`)) {
392
- throw new Error(`Apply plan failed: sourceWrites.path escapes workspace: ${write.path}`);
393
- }
410
+ assertSourceWriteStaysInWorkspace(root, absolute, write.path);
394
411
  const workspaceRelative = path
395
412
  .relative(root, absolute)
396
413
  .split(path.sep)
@@ -471,22 +488,33 @@ async function applySourceWrites(context, writes, planHash, allowReplay = false)
471
488
  await context.fs.unlink(absolute);
472
489
  }
473
490
  else {
474
- const staged = `${absolute}.kibi-stage-${journalId}-${index}`;
475
- await context.fs.writeFile(staged, write.body ?? "");
476
- if (context.fs.rename) {
477
- await context.fs.rename(staged, absolute);
491
+ const staged = `${absolute}.kibi-stage-${journalId}-${index}-${randomUUID()}`;
492
+ try {
493
+ await context.fs.writeFile(staged, write.body ?? "");
494
+ if (context.fs.rename) {
495
+ await context.fs.rename(staged, absolute);
496
+ }
497
+ else {
498
+ // Test and constrained host ports may not expose rename. Keep the
499
+ // compatibility fallback explicit; production nodeFilesystem uses
500
+ // same-directory rename for atomic replacement.
501
+ await context.fs.writeFile(absolute, write.body ?? "");
502
+ if (context.fs.unlink)
503
+ await context.fs.unlink(staged).catch(() => undefined);
504
+ }
478
505
  }
479
- else {
480
- // Test and constrained host ports may not expose rename. Keep the
481
- // compatibility fallback explicit; production nodeFilesystem uses
482
- // same-directory rename for atomic replacement.
483
- await context.fs.writeFile(absolute, write.body ?? "");
506
+ catch (error) {
507
+ // A failed rename must not leak the unique staged temp file into
508
+ // the authored tree; rollback of originals happens in the caller.
484
509
  if (context.fs.unlink)
485
510
  await context.fs.unlink(staged).catch(() => undefined);
511
+ throw error;
486
512
  }
487
513
  }
488
514
  }
489
515
  await context.fs.writeFile(journalPath, `${JSON.stringify({ version: 1, planHash, state: "sources_committed", entries }, null, 2)}\n`);
516
+ sourceCommitted = true;
517
+ onCommitted();
490
518
  // A newly authored file is intentionally excluded from ordinary Git
491
519
  // discovery until the operator stages it. The receipt binds that pending
492
520
  // input to the exact bytes committed by this plan.
@@ -497,6 +525,17 @@ async function applySourceWrites(context, writes, planHash, allowReplay = false)
497
525
  }
498
526
  }
499
527
  catch (error) {
528
+ if (sourceCommitted) {
529
+ // The authoritative source bytes must remain in place once the commit
530
+ // milestone has fired. A pending receipt failure is repair metadata
531
+ // failure, not permission to roll back the committed mutation. Surface
532
+ // the recovery journal instead of a generic exception so callers never
533
+ // read the committed plan as retryable.
534
+ await markSourceJournal(context, journalId, "repair_required");
535
+ if (error instanceof OperationError)
536
+ throw error;
537
+ throw new OperationError("SOURCE_COMMIT_REPAIR_REQUIRED", `Source plan ${planHash} committed its authoritative bytes, but postcommit repair metadata failed: ${error instanceof Error ? error.message : String(error)}; recovery journal ${journalId} is marked repair_required; use kb_apply_plan recoveryJournalId=${journalId} instead of retrying the original mutation`, false);
538
+ }
500
539
  for (const original of [...originals].reverse()) {
501
540
  try {
502
541
  if (original.body === undefined && context.fs.unlink) {
@@ -542,7 +581,7 @@ async function markSourceJournal(context, journalId, state) {
542
581
  // authoritative operation result behind a best-effort metadata write.
543
582
  }
544
583
  }
545
- async function executeSourceRecovery(args, context) {
584
+ async function executeSourceRecovery(args, context, onCommitted = () => undefined) {
546
585
  if (!context.fs)
547
586
  throw new Error("Source recovery requires a filesystem-capable runtime");
548
587
  if (!/^[A-Za-z0-9._-]+$/.test(args.recoveryJournalId)) {
@@ -569,7 +608,7 @@ async function executeSourceRecovery(args, context) {
569
608
  ...(body === undefined ? {} : { body }),
570
609
  });
571
610
  }
572
- const sourceWrites = await applySourceWrites(context, writes, journal.planHash, true);
611
+ const sourceWrites = await applySourceWrites(context, writes, journal.planHash, true, onCommitted);
573
612
  for (const write of writes) {
574
613
  if (write.mode === "write" && write.afterHash !== null) {
575
614
  writePendingSourceReceipt(context.workspaceRoot, write.path, write.afterHash);
@@ -613,7 +652,7 @@ async function executeSourceRecovery(args, context) {
613
652
  },
614
653
  };
615
654
  }
616
- async function executeBootstrapPlan(args, context, recovery = false, remainingActions, priorResults = []) {
655
+ async function executeBootstrapPlan(args, context, recovery = false, remainingActions, priorResults = [], onCommitted = () => undefined) {
617
656
  const actions = recovery
618
657
  ? [...(remainingActions ?? args.plan.actions)]
619
658
  : validateBootstrapPlanShape(args);
@@ -700,6 +739,7 @@ async function executeBootstrapPlan(args, context, recovery = false, remainingAc
700
739
  activeActionId = action.id;
701
740
  await writeJournal("applying", activeActionId);
702
741
  const result = await executeUpsert(asUpsert(action.payload), operationContext);
742
+ onCommitted();
703
743
  const payload = result.structuredContent;
704
744
  if (payload && typeof payload === "object") {
705
745
  const row = payload;
@@ -924,7 +964,7 @@ async function executeBootstrapPlan(args, context, recovery = false, remainingAc
924
964
  };
925
965
  }
926
966
  // implements REQ-kibi-change-to-proof-plan-compiler, REQ-agent-guided-migration-orchestration
927
- export async function executeApplyPlan(args, context) {
967
+ async function executeApplyPlanUnlocked(args, context, onCommitted = () => undefined) {
928
968
  if ("recoveryJournalId" in args) {
929
969
  if (args.recoveryJournalId.startsWith("bootstrap-")) {
930
970
  if (!context.fs)
@@ -980,13 +1020,7 @@ export async function executeApplyPlan(args, context) {
980
1020
  applied.add(row.actionId);
981
1021
  }
982
1022
  const remaining = orderBootstrapActions(ordered.filter((action) => !applied.has(action.id)), applied);
983
- for (const action of remaining) {
984
- for (const dependency of action.dependsOn ?? []) {
985
- if (!applied.has(dependency) &&
986
- !remaining.some((candidate) => candidate.id === dependency))
987
- throw new Error(`Bootstrap recovery journal is missing dependency '${dependency}' for '${action.id}'`);
988
- }
989
- }
1023
+ assertBootstrapRecoveryDependencies(remaining, applied);
990
1024
  return executeBootstrapPlan({ plan: journal.plan, approvedPlanHash: journal.plan.planHash }, context, true, remaining, (journal.results ?? []).flatMap((row) => row &&
991
1025
  typeof row.actionId === "string" &&
992
1026
  (row.outcome === "applied" ||
@@ -1002,18 +1036,18 @@ export async function executeApplyPlan(args, context) {
1002
1036
  },
1003
1037
  ]
1004
1038
  : []
1005
- : []));
1039
+ : []), onCommitted);
1006
1040
  }
1007
- return executeSourceRecovery(args, context);
1041
+ return executeSourceRecovery(args, context, onCommitted);
1008
1042
  }
1009
1043
  if (isBootstrapApplyArgs(args))
1010
- return executeBootstrapPlan(args, context);
1044
+ return executeBootstrapPlan(args, context, false, undefined, [], onCommitted);
1011
1045
  if (isMigrationApplyArgs(args)) {
1012
- return applyMigrationPlan(args, context);
1046
+ return applyMigrationPlan(args, context, onCommitted);
1013
1047
  }
1014
1048
  if (isEntityDeletionApplyArgs(args)) {
1015
1049
  validateEntityDeletionPlan(args);
1016
- const sourceWrites = await applySourceWrites(context, args.plan.sourceWrites ?? [], args.plan.planHash);
1050
+ const sourceWrites = await applySourceWrites(context, args.plan.sourceWrites ?? [], args.plan.planHash, false, onCommitted);
1017
1051
  const operationContext = {
1018
1052
  ...context,
1019
1053
  sourceFirst: false,
@@ -1025,6 +1059,7 @@ export async function executeApplyPlan(args, context) {
1025
1059
  try {
1026
1060
  const result = await executeDelete({ ids: args.plan.entityIds }, operationContext);
1027
1061
  payload = result.structuredContent;
1062
+ onCommitted();
1028
1063
  await markSourceJournal(operationContext, sourceWrites.journalId, "compiled_published");
1029
1064
  }
1030
1065
  catch (error) {
@@ -1090,18 +1125,24 @@ export async function executeApplyPlan(args, context) {
1090
1125
  throw new Error("Apply plan failed: workspace snapshot changed since compilation");
1091
1126
  const sourceHashesChecked = await validateSources(operationContext, args.plan.expected.sourceHashes);
1092
1127
  const steps = args.plan.steps.map((step) => asUpsert(step));
1093
- const sourceWrites = await applySourceWrites(operationContext, args.plan.sourceWrites, args.plan.planHash);
1128
+ const sourceWrites = await applySourceWrites(operationContext, args.plan.sourceWrites, args.plan.planHash, false, onCommitted);
1094
1129
  const notes = [
1095
1130
  "Plan steps and tracked source writes are validated before sequential application; source writes are journaled for replay.",
1096
1131
  ];
1097
1132
  let changedEntities = 0;
1098
1133
  let changedRelationships = 0;
1134
+ let appliedSteps = 0;
1099
1135
  const effectFailures = [];
1100
1136
  const nextActions = [];
1101
1137
  let compiledCommit = false;
1102
1138
  try {
1103
1139
  for (const step of steps) {
1104
1140
  const result = await executeUpsert(step, operationContext);
1141
+ appliedSteps += 1;
1142
+ // Each step's compiled commit is an authoritative mutation boundary.
1143
+ // Mark it immediately so a later step's failure can never be mistaken
1144
+ // for a retryable whole-plan failure.
1145
+ onCommitted();
1105
1146
  const payload = result.structuredContent;
1106
1147
  if (payload && typeof payload === "object") {
1107
1148
  const row = payload;
@@ -1117,6 +1158,7 @@ export async function executeApplyPlan(args, context) {
1117
1158
  }
1118
1159
  }
1119
1160
  compiledCommit = true;
1161
+ onCommitted();
1120
1162
  }
1121
1163
  catch (error) {
1122
1164
  if (sourceWrites.journalId !== null) {
@@ -1131,8 +1173,18 @@ export async function executeApplyPlan(args, context) {
1131
1173
  reason: "Authoritative source files are committed but compiled effects failed; replay the recovery journal instead of retrying the original mutation.",
1132
1174
  required: true,
1133
1175
  });
1176
+ onCommitted();
1134
1177
  await markSourceJournal(operationContext, sourceWrites.journalId, "repair_required");
1135
1178
  }
1179
+ else if (appliedSteps > 0) {
1180
+ // A journalless plan (sourceWrites: []) already committed earlier steps
1181
+ // when a later step failed. Expose an explicit non-retryable
1182
+ // partial-commit error instead of a generic exception that invites a
1183
+ // blind retry of the whole plan.
1184
+ if (error instanceof OperationError)
1185
+ throw error;
1186
+ throw new OperationError("PARTIAL_COMMIT_REPAIR_REQUIRED", `Plan ${args.plan.planHash} committed ${appliedSteps} of ${steps.length} step(s) before failing: ${error instanceof Error ? error.message : String(error)}. This plan carries no recovery journal; do not retry the original plan; inspect the committed snapshot and apply a fresh plan for the remaining steps`, false);
1187
+ }
1136
1188
  else {
1137
1189
  throw error;
1138
1190
  }
@@ -1220,7 +1272,31 @@ export async function executeApplyPlan(args, context) {
1220
1272
  structuredContent: payload,
1221
1273
  };
1222
1274
  }
1223
- async function applyMigrationPlan(args, context) {
1275
+ export async function executeApplyPlan(args, context) {
1276
+ if (!context.fs || context.sourceMutationLockHeld === true)
1277
+ return executeApplyPlanUnlocked(args, context);
1278
+ const lock = await acquireWorkspaceMutationLock(context.workspaceRoot);
1279
+ let operationFailure;
1280
+ let committed = false;
1281
+ try {
1282
+ const result = await executeApplyPlanUnlocked(args, {
1283
+ ...context,
1284
+ sourceMutationLockHeld: true,
1285
+ }, () => {
1286
+ committed = true;
1287
+ });
1288
+ committed = true;
1289
+ return result;
1290
+ }
1291
+ catch (error) {
1292
+ operationFailure = { error };
1293
+ throw error;
1294
+ }
1295
+ finally {
1296
+ releaseWorkspaceMutationLock(lock, operationFailure, committed);
1297
+ }
1298
+ }
1299
+ async function applyMigrationPlan(args, context, onCommitted = () => undefined) {
1224
1300
  const actions = topologicalActions(validateMigrationPlanShape(args));
1225
1301
  const initialStatus = (await executeStatus({}, context)).structuredContent;
1226
1302
  if (!initialStatus)
@@ -1258,6 +1334,7 @@ async function applyMigrationPlan(args, context) {
1258
1334
  }
1259
1335
  try {
1260
1336
  await applyMigrationAction(action, context);
1337
+ onCommitted();
1261
1338
  results.push({
1262
1339
  actionId: action.id,
1263
1340
  outcome: "applied",
@@ -1329,11 +1406,11 @@ async function applyMigrationPlan(args, context) {
1329
1406
  : finalStatus.syncState === "fresh"
1330
1407
  ? "clean_fresh"
1331
1408
  : "not_evaluated";
1332
- const verificationState = finalStatus.verificationSnapshotAvailable === false
1409
+ const snapshotState = finalStatus.proofSnapshotAvailable === false
1333
1410
  ? "unavailable"
1334
- : finalStatus.verificationSnapshotDirty === true
1411
+ : finalStatus.proofSnapshotDirty === true
1335
1412
  ? "dirty"
1336
- : finalStatus.verificationSnapshotDirty === false
1413
+ : finalStatus.proofSnapshotDirty === false
1337
1414
  ? "fresh"
1338
1415
  : "not_evaluated";
1339
1416
  const proven = coverageSummary?.proofProven;
@@ -1366,7 +1443,7 @@ async function applyMigrationPlan(args, context) {
1366
1443
  ? "blocked"
1367
1444
  : "interim",
1368
1445
  kbState,
1369
- verificationState,
1446
+ snapshotState,
1370
1447
  proofState,
1371
1448
  limitationDisposition: "not_applicable",
1372
1449
  },
@@ -24,6 +24,8 @@ export type TestDraft = Readonly<{
24
24
  id?: string;
25
25
  title: string;
26
26
  body: string;
27
+ /** Stable IDs of the scenario drafts that this test verifies. */
28
+ scenarioIds?: readonly string[];
27
29
  verificationScope?: "unit" | "integration" | "end_to_end";
28
30
  verificationPerspective?: "internal" | "consumer";
29
31
  }>;
@@ -88,6 +90,55 @@ export type CompilePlanV1 = Readonly<{
88
90
  steps: readonly PlanStep[];
89
91
  sourceWrites: readonly SourceWritePlan[];
90
92
  diagnostics: readonly string[];
93
+ /** Bounded replace/augment/shadow provenance; never changes canonical steps. */
94
+ capabilityPlugins?: Readonly<{
95
+ stamps: readonly {
96
+ pluginId: string;
97
+ pluginVersion: string;
98
+ capability: string;
99
+ mode: string;
100
+ external: boolean;
101
+ network: boolean;
102
+ metered: boolean;
103
+ fallbackUsed?: boolean;
104
+ model?: string;
105
+ }[];
106
+ classification: Readonly<{
107
+ fallbackUsed: boolean;
108
+ decisions: readonly {
109
+ claimKey: string;
110
+ lane: string;
111
+ confidence: number;
112
+ }[];
113
+ shadowComparisons: readonly {
114
+ pluginId: string;
115
+ pluginVersion: string;
116
+ capability: string;
117
+ mode: string;
118
+ external: boolean;
119
+ network: boolean;
120
+ metered: boolean;
121
+ fallbackUsed?: boolean;
122
+ model?: string;
123
+ decisions: readonly {
124
+ claimKey: string;
125
+ lane: string;
126
+ confidence: number;
127
+ }[];
128
+ }[];
129
+ }> | null;
130
+ ontology: Readonly<{
131
+ replaced: boolean;
132
+ matchCount: number;
133
+ shadowMatchCount: number;
134
+ shadowMatches: readonly {
135
+ packId: string;
136
+ schemaId: string;
137
+ predicateName: string;
138
+ confidence: number;
139
+ }[];
140
+ }>;
141
+ }>;
91
142
  }>;
92
143
  export type SourceWritePlan = Readonly<{
93
144
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"compile-intent.d.ts","sourceRoot":"","sources":["../../../src/operations/planning/compile-intent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile-intent.d.ts","sourceRoot":"","sources":["../../../src/operations/planning/compile-intent.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,12 @@ import { createHash } from "node:crypto";
2
2
  import path from "node:path";
3
3
  import { dump as dumpYaml } from "js-yaml";
4
4
  import { executeIntentSearch, } from "../../intent-search.js";
5
- import { parseTriples } from "../../prolog/codec.js";
5
+ import { publicCapabilityStamp } from "../../plugins/compose-semantic-classifier.js";
6
+ import { normalizeEntityId, parseTriples } from "../../prolog/codec.js";
6
7
  import { loadEntities } from "../../public/operations/discovery-entities.js";
7
8
  import { executeStatus } from "../../public/operations/discovery-executors.js";
8
9
  import { configuredSourceTarget } from "../mutation/source-authoring.js";
9
- import { analyzeSemanticAdvisorInput } from "../semantic-advisor/analyze-prose.js";
10
+ import { analyzeSemanticAdvisorInputWithPlugins } from "../semantic-advisor/plugin-orchestration.js";
10
11
  import { canonicalize } from "../semantic-advisor/shared.js";
11
12
  // implements REQ-kibi-change-to-proof-plan-compiler
12
13
  export const COMPILE_PLAN_VERSION = "kibi.compile-plan.v1";
@@ -227,8 +228,16 @@ async function contradictionAnalysis(prolog, requirementId) {
227
228
  return { outcome: "unresolved", witnesses: [] };
228
229
  const rows = parseTriples(result.bindings.Rows ?? "[]");
229
230
  const witnesses = rows
230
- .filter(([left, right]) => left === requirementId || right === requirementId)
231
- .map(([left, right, reason]) => ({ requirements: [left, right], reason }));
231
+ .map(([left, right, reason]) => ({
232
+ left: normalizeEntityId(left),
233
+ right: normalizeEntityId(right),
234
+ reason,
235
+ }))
236
+ .filter(({ left, right }) => left === requirementId || right === requirementId)
237
+ .map(({ left, right, reason }) => ({
238
+ requirements: [left, right],
239
+ reason,
240
+ }));
232
241
  return {
233
242
  outcome: witnesses.length > 0 ? "conflict" : "no_conflict",
234
243
  witnesses,
@@ -282,12 +291,20 @@ function applyAcceptedProposals(steps, proposals) {
282
291
  function draftId(prefix, title, index) {
283
292
  return `${prefix}-${slug(title)}-${shortHash(`${title}\0${index}`).toUpperCase()}`;
284
293
  }
294
+ // implements REQ-kibi-change-to-proof-plan-compiler
285
295
  function draftSteps(requirementId, scenarios, tests) {
286
296
  const diagnostics = [];
287
297
  const steps = [];
288
298
  const scenarioIds = [];
299
+ const linkedScenarioIds = new Set();
300
+ const duplicateScenarioIds = new Set();
301
+ const testIds = new Set();
289
302
  scenarios.forEach((scenario, index) => {
290
303
  const id = text(scenario.id) || draftId("SCEN", scenario.title, index);
304
+ if (scenarioIds.includes(id)) {
305
+ duplicateScenarioIds.add(id);
306
+ diagnostics.push(`unresolved duplicate scenario draft ID ${id}; scenario associations are ambiguous.`);
307
+ }
291
308
  scenarioIds.push(id);
292
309
  steps.push({
293
310
  type: "scenario",
@@ -303,9 +320,42 @@ function draftSteps(requirementId, scenarios, tests) {
303
320
  });
304
321
  tests.forEach((test, index) => {
305
322
  const id = text(test.id) || draftId("TEST", test.title, index);
306
- if (scenarioIds.length === 0)
307
- diagnostics.push(`Test draft ${id} has no scenario draft; proof-bearing tests require a scenario relationship.`);
308
- const scenarioId = scenarioIds[index] ?? scenarioIds[0];
323
+ if (testIds.has(id)) {
324
+ diagnostics.push(`unresolved duplicate test draft ID ${id}; test associations are ambiguous.`);
325
+ }
326
+ testIds.add(id);
327
+ const requestedScenarioIds = test.scenarioIds?.map(text) ?? null;
328
+ const soleScenarioId = scenarioIds.length === 1 ? scenarioIds[0] : undefined;
329
+ const associatedScenarioIds = requestedScenarioIds !== null
330
+ ? Array.from(new Set(requestedScenarioIds.filter(Boolean)))
331
+ : soleScenarioId !== undefined
332
+ ? [soleScenarioId]
333
+ : [];
334
+ if (scenarioIds.length === 0) {
335
+ diagnostics.push(`unresolved test draft ${id} has no scenario draft; proof-bearing tests require a scenario relationship.`);
336
+ }
337
+ else if (requestedScenarioIds === null && scenarioIds.length > 1) {
338
+ diagnostics.push(`unresolved test draft ${id} must declare scenarioIds when multiple scenario drafts exist; positional association is not supported.`);
339
+ }
340
+ else if (requestedScenarioIds !== null &&
341
+ associatedScenarioIds.length === 0) {
342
+ diagnostics.push(`unresolved test draft ${id} must reference at least one scenario ID in scenarioIds.`);
343
+ }
344
+ if (requestedScenarioIds !== null &&
345
+ (requestedScenarioIds.some((scenarioId) => !scenarioId) ||
346
+ requestedScenarioIds.filter(Boolean).length !==
347
+ associatedScenarioIds.length)) {
348
+ diagnostics.push(`unresolved test draft ${id} repeats or omits scenario IDs; associations must be unique and non-empty.`);
349
+ }
350
+ const validScenarioIds = associatedScenarioIds.filter((scenarioId) => scenarioIds.includes(scenarioId) &&
351
+ !duplicateScenarioIds.has(scenarioId));
352
+ for (const scenarioId of associatedScenarioIds) {
353
+ if (!scenarioIds.includes(scenarioId)) {
354
+ diagnostics.push(`unresolved test draft ${id} references unknown scenario ID ${scenarioId}.`);
355
+ }
356
+ }
357
+ for (const scenarioId of validScenarioIds)
358
+ linkedScenarioIds.add(scenarioId);
309
359
  steps.push({
310
360
  type: "test",
311
361
  id,
@@ -314,14 +364,21 @@ function draftSteps(requirementId, scenarios, tests) {
314
364
  status: "draft",
315
365
  body: test.body.trim(),
316
366
  source: "mcp://kibi/compile-intent",
317
- verification_scope: test.verificationScope ?? "end_to_end",
318
- verification_perspective: test.verificationPerspective ?? "consumer",
367
+ verification_scope: test.verificationScope ?? "integration",
368
+ verification_perspective: test.verificationPerspective ?? "internal",
319
369
  },
320
- relationships: scenarioId
321
- ? [{ type: "verified_by", from: scenarioId, to: id }]
322
- : [],
370
+ relationships: validScenarioIds.map((scenarioId) => ({
371
+ type: "verified_by",
372
+ from: scenarioId,
373
+ to: id,
374
+ })),
323
375
  });
324
376
  });
377
+ for (const scenarioId of scenarioIds) {
378
+ if (!linkedScenarioIds.has(scenarioId)) {
379
+ diagnostics.push(`unresolved scenario draft ${scenarioId} has no test draft; add a test with scenarioIds to establish executable coverage.`);
380
+ }
381
+ }
325
382
  if (scenarioIds.length > 0) {
326
383
  steps.push({
327
384
  type: "req",
@@ -348,13 +405,13 @@ export async function executeCompileIntent(args, context) {
348
405
  const status = statusResult.structuredContent;
349
406
  if (!status)
350
407
  throw new Error("Compile intent failed: status query returned no payload");
351
- const snapshotEvidence = status?.verificationSnapshot;
408
+ const snapshotEvidence = status?.proofSnapshot;
352
409
  const workspaceSnapshot = snapshotEvidence
353
410
  ? {
354
411
  version: "kibi.workspace-snapshot.v2",
355
412
  hash: snapshotEvidence,
356
- dirty: status?.verificationSnapshotDirty ?? false,
357
- fileCount: status?.verificationSnapshotFileCount ?? 0,
413
+ dirty: status?.proofSnapshotDirty ?? false,
414
+ fileCount: status?.proofSnapshotFileCount ?? 0,
358
415
  }
359
416
  : {
360
417
  version: "kibi.workspace-snapshot.v2",
@@ -415,7 +472,7 @@ export async function executeCompileIntent(args, context) {
415
472
  const source = text(args.sourceLocations?.[0]?.path) ||
416
473
  text(existingEntity.source) ||
417
474
  "mcp://kibi/compile-intent";
418
- const advisor = analyzeSemanticAdvisorInput({
475
+ const orchestrated = await analyzeSemanticAdvisorInputWithPlugins({
419
476
  payload: {
420
477
  type: "req",
421
478
  id: requirementId,
@@ -430,9 +487,65 @@ export async function executeCompileIntent(args, context) {
430
487
  },
431
488
  },
432
489
  ...(args.clauses ? { clauses: args.clauses } : {}),
433
- ...(args.interpretations ? { interpretations: args.interpretations } : {}),
490
+ ...(args.interpretations
491
+ ? { interpretations: args.interpretations }
492
+ : {}),
493
+ }, {
494
+ operationName: "kb_compile_intent",
495
+ ...(context.ensurePlugins
496
+ ? { ensurePlugins: context.ensurePlugins }
497
+ : {}),
434
498
  });
499
+ const advisor = orchestrated.analysis;
435
500
  diagnostics.push(...advisor.warnings);
501
+ if (orchestrated.stamps.length > 0) {
502
+ diagnostics.push(`Capability plugins consulted: ${orchestrated.stamps
503
+ .map((stamp) => `${stamp.pluginId}/${stamp.capability}`)
504
+ .join(", ")}.`);
505
+ }
506
+ const semanticShadowCount = orchestrated.classification?.shadowComparisons.length ?? 0;
507
+ if (semanticShadowCount > 0) {
508
+ diagnostics.push(`Semantic classifier shadow comparisons observed (${semanticShadowCount}); canonical compile plan unchanged.`);
509
+ }
510
+ if (orchestrated.ontologyShadowMatches.length > 0) {
511
+ diagnostics.push(`Ontology pack shadow matches observed (${orchestrated.ontologyShadowMatches.length}); canonical compile plan unchanged.`);
512
+ }
513
+ const capabilityPlugins = orchestrated.stamps.length > 0 ||
514
+ semanticShadowCount > 0 ||
515
+ orchestrated.ontologyShadowMatches.length > 0
516
+ ? {
517
+ stamps: orchestrated.stamps.map((stamp) => publicCapabilityStamp(stamp)),
518
+ classification: orchestrated.classification
519
+ ? {
520
+ fallbackUsed: orchestrated.classification.fallbackUsed,
521
+ decisions: orchestrated.classification.decisions.map((decision) => ({
522
+ claimKey: decision.claimKey,
523
+ lane: decision.lane,
524
+ confidence: decision.confidence,
525
+ })),
526
+ shadowComparisons: orchestrated.classification.shadowComparisons.map((comparison) => ({
527
+ ...publicCapabilityStamp(comparison.stamp),
528
+ decisions: comparison.decisions.map((decision) => ({
529
+ claimKey: decision.claimKey,
530
+ lane: decision.lane,
531
+ confidence: decision.confidence,
532
+ })),
533
+ })),
534
+ }
535
+ : null,
536
+ ontology: {
537
+ replaced: orchestrated.ontologyCatalog?.replaced ?? false,
538
+ matchCount: orchestrated.ontologyMatches.length,
539
+ shadowMatchCount: orchestrated.ontologyShadowMatches.length,
540
+ shadowMatches: orchestrated.ontologyShadowMatches.map((candidate) => ({
541
+ packId: candidate.packId,
542
+ schemaId: candidate.schemaId,
543
+ predicateName: candidate.predicateName,
544
+ confidence: candidate.confidence,
545
+ })),
546
+ },
547
+ }
548
+ : undefined;
436
549
  const suggestionByClaim = new Map(advisor.receipt.suggestions.map((suggestion) => [
437
550
  suggestion.claim_key,
438
551
  suggestion,
@@ -546,8 +659,11 @@ export async function executeCompileIntent(args, context) {
546
659
  sourceWrites,
547
660
  diagnostics,
548
661
  };
662
+ // Shadow/provenance metadata is returned for observation but must not enter
663
+ // planHash — shadow providers never affect canonical apply identity.
549
664
  const plan = {
550
665
  ...planBody,
666
+ ...(capabilityPlugins ? { capabilityPlugins } : {}),
551
667
  planHash: compilePlanHash(planBody),
552
668
  };
553
669
  return {