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
@@ -6,19 +6,21 @@ import { readManifestWithCoordinateOverlay } from "../../extractors/manifest.js"
6
6
  import { extractManifestSymbolRecords } from "../../extractors/manifest.js";
7
7
  import { escapeAtom } from "../../prolog/codec.js";
8
8
  import { loadEntities } from "../../public/operations/discovery-entities.js";
9
- import { appendOnlyVerificationReceiptHistoryErrors } from "../../public/verification-receipt.js";
9
+ import { appendOnlyProofReceiptHistoryErrors } from "../../public/proof-receipt.js";
10
10
  import { appendRelationship, computeShardPath, } from "../../relationships/shards.js";
11
11
  import { resolveBranchAttachment } from "../../utils/branch-resolver.js";
12
12
  import { analyzeSemanticAdvisorInput } from "../semantic-advisor/analyze-prose.js";
13
13
  import { assertLogicalGroundingClaimKeys, assertSemanticInventoryBoundary, } from "../semantic-advisor/ingestion-boundary.js";
14
14
  import { buildUpsertCommitGoal, formatUpsertError } from "./contradictions.js";
15
15
  import { existingRelationships, validateLiveRelationshipTargets, validateRelationshipSources, validateStrictLanePairing, validateSupersedesSourceHistory, } from "./relationships.js";
16
+ import { MutationSaga } from "./saga.js";
16
17
  import { writePendingSourceReceipt, writeSourceForUpsert, } from "./source-authoring.js";
17
18
  import { acquireSymbolCompilerLock, releaseSymbolCompilerLock, } from "./symbol-compiler-lock.js";
18
19
  import { validateSymbolGranularity } from "./symbol-granularity.js";
19
20
  import { refreshSymbolCoordinatesForManifest } from "./symbol-refresh.js";
20
21
  import { validateUpsertInput } from "./validation.js";
21
22
  import { scenarioCoverageWarnings } from "./warnings.js";
23
+ import { acquireWorkspaceMutationLock, releaseWorkspaceMutationLock, } from "./workspace-mutation-lock.js";
22
24
  function requireProlog(context) {
23
25
  if (context.prolog === undefined) {
24
26
  throw new Error("Upsert operation requires a Prolog runtime");
@@ -90,18 +92,18 @@ function restoreRelationshipShard(shardPath, before, expectedAfterHash) {
90
92
  }
91
93
  writeFileSync(shardPath, before, "utf8");
92
94
  }
93
- export async function validateAppendOnlyVerificationReceipts(entity, context) {
95
+ export async function validateAppendOnlyProofReceipts(entity, context) {
94
96
  if (entity.type !== "test")
95
97
  return;
96
98
  const existing = await loadEntities(requireProlog(context), {
97
99
  id: String(entity.id),
98
100
  type: "test",
99
101
  });
100
- const previous = receiptRecords(existing[0]?.verification_receipts);
102
+ const previous = receiptRecords(existing[0]?.proof_receipts);
101
103
  if (!previous || previous.length === 0)
102
104
  return;
103
- const next = receiptRecords(entity.verification_receipts);
104
- const errors = appendOnlyVerificationReceiptHistoryErrors(previous, next);
105
+ const next = receiptRecords(entity.proof_receipts);
106
+ const errors = appendOnlyProofReceiptHistoryErrors(previous, next);
105
107
  if (errors.length > 0) {
106
108
  throw new Error(`Entity validation failed: ${errors.join("; ")}`);
107
109
  }
@@ -159,7 +161,7 @@ function reextractCanonicalSymbolEntity(symbolId, authoredRelativePath, workspac
159
161
  : { sourceFile: result.sourceFile }),
160
162
  };
161
163
  }
162
- export async function executeUpsert(input, context) {
164
+ export async function executeUpsert(input, context, options = {}) {
163
165
  const branchAttachment = context.branchAttachment ?? resolveBranchAttachment(context.workspaceRoot);
164
166
  if ("error" in branchAttachment) {
165
167
  throw new Error(`Unable to resolve KB branch: ${branchAttachment.error}`);
@@ -169,22 +171,31 @@ export async function executeUpsert(input, context) {
169
171
  throw new Error(`Upsert blocked: KB is attached through legacy branch storage (${branchAttachment.gitBranch} -> ${branchAttachment.kbBranch}). Run 'kibi branch migrate --from ${branchAttachment.kbBranch} --to ${branchAttachment.gitBranch} --apply' first.`);
170
172
  }
171
173
  const prolog = requireProlog(context);
174
+ // Declared compensation list for the multi-surface mutation. Steps register
175
+ // as they succeed (authored source -> relationship shards -> coordinates);
176
+ // a failure rolls them back in reverse under the symbol compiler lock, and
177
+ // the compiled commit marks the point of no return.
178
+ const saga = new MutationSaga();
172
179
  let sourceWrite = null;
173
180
  let commitEntity;
174
- let sourceRolledBack = false;
175
- let compiledCommitted = false;
176
181
  let relationshipCount = 0;
177
182
  let changeKind = null;
178
183
  let semanticAdvisor;
179
184
  let compilerLock;
180
- let coordinatePublication;
185
+ let sourceMutationLock;
181
186
  let operationFailure;
182
187
  const relationshipShardBefore = new Map();
183
188
  const relationshipShardAfterHash = new Map();
184
189
  const holdsSymbolCompilerLock = input.type === "symbol" &&
185
190
  context.fs !== undefined &&
186
191
  context.sourceFirst !== false;
192
+ const holdsSourceMutationLock = context.fs !== undefined &&
193
+ context.sourceFirst !== false &&
194
+ context.sourceMutationLockHeld !== true;
187
195
  try {
196
+ if (holdsSourceMutationLock) {
197
+ sourceMutationLock = await acquireWorkspaceMutationLock(context.workspaceRoot);
198
+ }
188
199
  if (holdsSymbolCompilerLock) {
189
200
  // Symbol source publication, coordinate refresh, canonical
190
201
  // re-extraction, and the RDF commit form one read-modify-write cycle.
@@ -193,7 +204,9 @@ export async function executeUpsert(input, context) {
193
204
  compilerLock = await acquireSymbolCompilerLock(context.workspaceRoot);
194
205
  }
195
206
  const validated = validateUpsertInput(input, context.clock());
196
- await validateAppendOnlyVerificationReceipts(validated.entity, context);
207
+ if (options.allowReceiptsPrune !== true) {
208
+ await validateAppendOnlyProofReceipts(validated.entity, context);
209
+ }
197
210
  validateRelationshipSources(input.id, validated.relationships);
198
211
  await validateSymbolGranularity(validated.entity, validated.relationships, context);
199
212
  const relationships = await effectiveRelationships(input, validated.entity, validated.relationships, context);
@@ -227,8 +240,14 @@ export async function executeUpsert(input, context) {
227
240
  // when configuration has zero or multiple writable targets, rather
228
241
  // than silently creating compiled-only state.
229
242
  existing === undefined) {
230
- sourceWrite = await writeSourceForUpsert(input, validated.entity, existing, context);
243
+ sourceWrite = await writeSourceForUpsert(input, validated.entity, existing, context, options.sourceDocumentOverride);
231
244
  if (sourceWrite !== null) {
245
+ const sourceStep = sourceWrite;
246
+ saga.add({
247
+ name: "authored-source",
248
+ rollback: () => sourceStep.rollback(),
249
+ onError: "capture",
250
+ });
232
251
  // The authored path is the entity's canonical identity. Runtime
233
252
  // transport provenance (mcp://...) must never survive a source-first
234
253
  // write or a later delete/sync cycle.
@@ -243,6 +262,17 @@ export async function executeUpsert(input, context) {
243
262
  // the compiled transaction so a failed commit can restore exact bytes and
244
263
  // a successful commit never leaves a compiled-only relationship behind.
245
264
  if (context.fs !== undefined && validated.relationships.length > 0) {
265
+ // Register the rollback before appending so a failure on any shard (for
266
+ // example the second write of a multi-shard batch) unwinds the shards
267
+ // that were already appended.
268
+ saga.add({
269
+ name: "relationship-shards",
270
+ rollback: () => {
271
+ for (const [shardPath, before] of relationshipShardBefore) {
272
+ restoreRelationshipShard(shardPath, before, relationshipShardAfterHash.get(shardPath) ?? null);
273
+ }
274
+ },
275
+ });
246
276
  for (const relationship of validated.relationships) {
247
277
  const type = typeof relationship.type === "string" ? relationship.type : "";
248
278
  const from = typeof relationship.from === "string" ? relationship.from : input.id;
@@ -276,7 +306,14 @@ export async function executeUpsert(input, context) {
276
306
  context.sourceFirst !== false &&
277
307
  sourceWrite !== null) {
278
308
  const refresh = await refreshSymbolCoordinatesForManifest(input.id, path.resolve(context.workspaceRoot, sourceWrite.receipt.path), context);
279
- coordinatePublication = refresh.publication;
309
+ const coordinatePublication = refresh.publication;
310
+ if (coordinatePublication !== undefined) {
311
+ saga.add({
312
+ name: "symbol-coordinates",
313
+ rollback: () => coordinatePublication.rollback(),
314
+ onError: "capture",
315
+ });
316
+ }
280
317
  if (!refresh.found || refresh.outcome === "removed") {
281
318
  throw new Error(`Coordinate refresh could not find ${input.id} in the authored symbol manifest`);
282
319
  }
@@ -299,14 +336,9 @@ export async function executeUpsert(input, context) {
299
336
  });
300
337
  const written = await prolog.query(transaction);
301
338
  if (!written.success) {
302
- await sourceWrite?.rollback();
303
- sourceRolledBack = sourceWrite !== null;
304
- for (const [shardPath, before] of relationshipShardBefore) {
305
- restoreRelationshipShard(shardPath, before, relationshipShardAfterHash.get(shardPath) ?? null);
306
- }
307
- throw new Error(formatUpsertError(input.id, written.error));
339
+ throw new Error(formatUpsertError(input.id, written.error, written.errorRecord));
308
340
  }
309
- compiledCommitted = true;
341
+ saga.markCommitted();
310
342
  // The combined commit is the sole mutation boundary. Invalidate reads only
311
343
  // after Prolog reports success so a failed/rolled-back commit does not
312
344
  // disturb callers' view of the current snapshot.
@@ -322,7 +354,17 @@ export async function executeUpsert(input, context) {
322
354
  for (const [shardPath, before] of relationshipShardBefore) {
323
355
  const afterHash = fileHash(shardPath);
324
356
  const beforeHash = before === null ? null : textHash(before);
325
- if (afterHash === null || afterHash === beforeHash)
357
+ const expectedAfterHash = relationshipShardAfterHash.get(shardPath) ?? null;
358
+ if (afterHash === null) {
359
+ if (expectedAfterHash !== null) {
360
+ const relative = path
361
+ .relative(context.workspaceRoot, shardPath)
362
+ .replaceAll("\\", "/");
363
+ shardWarnings.push(`Relationship shard vanished after write: ${relative}`);
364
+ }
365
+ continue;
366
+ }
367
+ if (afterHash === beforeHash)
326
368
  continue;
327
369
  const relative = path
328
370
  .relative(context.workspaceRoot, shardPath)
@@ -393,37 +435,12 @@ export async function executeUpsert(input, context) {
393
435
  };
394
436
  }
395
437
  catch (error) {
396
- let coordinateRollbackError;
397
- if (!compiledCommitted && coordinatePublication !== undefined) {
398
- try {
399
- coordinatePublication.rollback();
400
- }
401
- catch (rollbackError) {
402
- coordinateRollbackError = rollbackError;
403
- }
404
- }
405
- if (!compiledCommitted) {
406
- for (const [shardPath, before] of relationshipShardBefore) {
407
- try {
408
- restoreRelationshipShard(shardPath, before, relationshipShardAfterHash.get(shardPath) ?? null);
409
- }
410
- catch {
411
- // Preserve the original failure; the next check/sync reports any
412
- // canonical source path that could not be restored.
413
- }
414
- }
415
- }
416
- if (!compiledCommitted && sourceWrite !== null && !sourceRolledBack) {
417
- try {
418
- await sourceWrite.rollback();
419
- sourceRolledBack = true;
420
- }
421
- catch {
422
- // Preserve the original mutation error; the recovery journal can
423
- // reconcile a failed source rollback on the next sync.
424
- }
425
- }
426
- if (compiledCommitted) {
438
+ // Roll back every completed pre-commit surface in reverse order, exactly
439
+ // once. After the compiled commit this is a no-op: post-commit failures
440
+ // return committed-with-repairs results instead of undoing committed
441
+ // state.
442
+ const rollbackFailures = await saga.rollback();
443
+ if (saga.committed) {
427
444
  const detail = error instanceof Error ? error.message : String(error);
428
445
  return {
429
446
  content: [
@@ -461,8 +478,18 @@ export async function executeUpsert(input, context) {
461
478
  },
462
479
  };
463
480
  }
464
- if (coordinateRollbackError !== undefined) {
465
- const failure = new AggregateError([error, coordinateRollbackError], `Upsert failed and coordinate artifact rollback failed for ${input.id}`);
481
+ const coordinateFailure = rollbackFailures.find((failure) => failure.step === "symbol-coordinates");
482
+ if (coordinateFailure !== undefined) {
483
+ const failure = new AggregateError([error, coordinateFailure.error], `Upsert failed and coordinate artifact rollback failed for ${input.id}`);
484
+ operationFailure = { error: failure };
485
+ throw failure;
486
+ }
487
+ const sourceFailure = rollbackFailures.find((failure) => failure.step === "authored-source");
488
+ if (sourceFailure !== undefined) {
489
+ const rollbackMessage = sourceFailure.error instanceof Error
490
+ ? sourceFailure.error.message
491
+ : String(sourceFailure.error);
492
+ const failure = new AggregateError([error, sourceFailure.error], `Upsert failed and authored source rollback failed for ${input.id}: ${rollbackMessage}`);
466
493
  operationFailure = { error: failure };
467
494
  throw failure;
468
495
  }
@@ -476,6 +503,11 @@ export async function executeUpsert(input, context) {
476
503
  throw failure;
477
504
  }
478
505
  finally {
479
- releaseSymbolCompilerLock(compilerLock, operationFailure);
506
+ try {
507
+ releaseSymbolCompilerLock(compilerLock, operationFailure, saga.committed);
508
+ }
509
+ finally {
510
+ releaseWorkspaceMutationLock(sourceMutationLock, operationFailure, saga.committed);
511
+ }
480
512
  }
481
513
  }
@@ -2,12 +2,12 @@ import { analyzeSemanticAdvisorInput } from "../semantic-advisor/analyze-prose.j
2
2
  import { assertLogicalGroundingClaimKeys, assertSemanticInventoryBoundary, validateSemanticInventoryBoundary, } from "../semantic-advisor/ingestion-boundary.js";
3
3
  import { validateLiveRelationshipTargets, validateRelationshipSources, } from "./relationships.js";
4
4
  import { validateSymbolGranularity } from "./symbol-granularity.js";
5
- import { effectiveRelationships, validateAppendOnlyVerificationReceipts, } from "./upsert.js";
5
+ import { effectiveRelationships, validateAppendOnlyProofReceipts, } from "./upsert.js";
6
6
  import { validateUpsertInput } from "./validation.js";
7
7
  export async function executeValidateUpsert(input, context) {
8
8
  try {
9
9
  const validated = validateUpsertInput(input, context.clock());
10
- await validateAppendOnlyVerificationReceipts(validated.entity, context);
10
+ await validateAppendOnlyProofReceipts(validated.entity, context);
11
11
  validateRelationshipSources(input.id, validated.relationships);
12
12
  await validateSymbolGranularity(validated.entity, validated.relationships, context);
13
13
  const previewSemantic = analyzeSemanticAdvisorInput({
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/validation.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,0BAA0B,EAC3B,MAAM,oCAAoC,CAAC;AAQ5C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAkF/D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,IAAI,GACR,eAAe,CAwDjB;AAED,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/validation.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,0BAA0B,EAC3B,MAAM,oCAAoC,CAAC;AAO5C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAkF/D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,IAAI,GACR,eAAe,CA0DjB;AAED,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import Ajv from "ajv";
2
+ import { proofReceiptHistoryErrors } from "../../public/proof-receipt.js";
2
3
  import entitySchema from "../../public/schemas/entity.js";
3
4
  import relationshipSchema from "../../public/schemas/relationship.js";
4
5
  // implements REQ-kibi-operation-interface-parity
5
6
  import { SYMBOL_ROLES, isAllowedGranularityReason, } from "../../public/symbol-granularity.js";
6
- import { verificationReceiptHistoryErrors } from "../../public/verification-receipt.js";
7
7
  import { semanticClaimKey } from "../semantic-advisor/clauses.js";
8
8
  import { factKindShapeHints, validateFactModelingShape, valueFieldHint, } from "./strict-fact.js";
9
9
  const ajv = new Ajv({ strict: false });
@@ -86,9 +86,11 @@ export function validateUpsertInput(input, now) {
86
86
  if (!validateEntity(entity)) {
87
87
  throw new Error(`Entity validation failed: ${formatEntityErrors(entity, validateEntity.errors ?? [])}`);
88
88
  }
89
- if (entity.type === "test" && Array.isArray(entity.verification_receipts)) {
90
- const receipts = entity.verification_receipts.filter((value) => typeof value === "object" && value !== null && !Array.isArray(value));
91
- const receiptErrors = verificationReceiptHistoryErrors(input.id, entity.verification_scope, receipts);
89
+ validateSymbolSourceFile(entity);
90
+ validateProofExemptionPairing(entity);
91
+ if (entity.type === "test" && Array.isArray(entity.proof_receipts)) {
92
+ const receipts = entity.proof_receipts.filter((value) => typeof value === "object" && value !== null && !Array.isArray(value));
93
+ const receiptErrors = proofReceiptHistoryErrors(input.id, entity.verification_scope, receipts);
92
94
  if (receiptErrors.length > 0) {
93
95
  throw new Error(`Entity validation failed: ${receiptErrors.join("; ")}`);
94
96
  }
@@ -114,3 +116,43 @@ export function validateUpsertInput(input, now) {
114
116
  return { entity, relationships };
115
117
  }
116
118
  export { isAllowedGranularityReason };
119
+ /**
120
+ * A symbol whose sourceFile points into .kb/ can publish coordinates to the
121
+ * artifact, but the engine never merges coordinates for KB-internal paths —
122
+ * coverage then reports missing_symbol_coordinates forever with no signal.
123
+ * Reject the configuration at upsert time instead.
124
+ */
125
+ function validateSymbolSourceFile(entity) {
126
+ if (entity.type !== "symbol")
127
+ return;
128
+ const sourceFile = entity.sourceFile;
129
+ if (typeof sourceFile !== "string" || sourceFile.trim() === "")
130
+ return;
131
+ const normalized = sourceFile.replaceAll("\\", "/").trim();
132
+ if (normalized === ".kb" || normalized.startsWith(".kb/")) {
133
+ throw new Error(`Entity validation failed: symbol sourceFile must point at a real code file in the workspace, not into the knowledge base ('${sourceFile}'). Coordinates for .kb/ paths are never merged into the engine, so coverage would report missing_symbol_coordinates permanently. Point the symbol at the implementing or verifying code file instead.`);
134
+ }
135
+ }
136
+ /**
137
+ * proof_exempt parks a current requirement outside E2E-proof scope. Without a
138
+ * reason the requirement would disappear from the proof ladder silently, so
139
+ * the exemption only exists with its justification attached (mirrored in
140
+ * requirement_proof.pl, which ignores an exemption without a reason).
141
+ */
142
+ function validateProofExemptionPairing(entity) {
143
+ if (entity.type !== "req")
144
+ return;
145
+ const flag = entity.proof_exempt;
146
+ const isExempt = flag === true ||
147
+ flag === "true" ||
148
+ flag === "yes" ||
149
+ flag === "on" ||
150
+ flag === 1 ||
151
+ flag === "1";
152
+ if (!isExempt)
153
+ return;
154
+ const reason = entity.proof_exempt_reason;
155
+ if (typeof reason !== "string" || reason.trim() === "") {
156
+ throw new Error("Entity validation failed: proof_exempt requires a non-empty proof_exempt_reason explaining why the requirement is outside E2E-proof scope");
157
+ }
158
+ }
@@ -1,4 +1,5 @@
1
1
  import type { PrologPort } from "../../public/operations/runtime-types.js";
2
2
  import type { RelationshipInput } from "./types.js";
3
+ export declare function scenarioCoverageWarning(entityId: string): readonly string[];
3
4
  export declare function scenarioCoverageWarnings(prolog: PrologPort, relationships: readonly RelationshipInput[], entityType: string, entityId: string): Promise<readonly string[]>;
4
5
  //# sourceMappingURL=warnings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"warnings.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/warnings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,SAAS,iBAAiB,EAAE,EAC3C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAc5B"}
1
+ {"version":3,"file":"warnings.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/warnings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAI3E;AAGD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,SAAS,iBAAiB,EAAE,EAC3C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAU5B"}
@@ -1,4 +1,9 @@
1
1
  import { escapeAtom } from "../../prolog/codec.js";
2
+ export function scenarioCoverageWarning(entityId) {
3
+ return [
4
+ `Scenario-backed coverage: verified_by(${entityId},test) is valid but will not satisfy symbol-coverage because ${entityId} has specified_by a scenario. Use verified_by(scenario,test) or validates(test,scenario) instead.`,
5
+ ];
6
+ }
2
7
  // implements REQ-kibi-operation-interface-parity
3
8
  export async function scenarioCoverageWarnings(prolog, relationships, entityType, entityId) {
4
9
  if (entityType !== "req")
@@ -7,11 +12,8 @@ export async function scenarioCoverageWarnings(prolog, relationships, entityType
7
12
  if (relationship.type !== "verified_by")
8
13
  continue;
9
14
  const result = await prolog.query(`once(kb_relationship(specified_by, '${escapeAtom(entityId)}', ScenarioId))`);
10
- if (result.success) {
11
- return [
12
- `Scenario-backed coverage: verified_by(${entityId},test) is valid but will not satisfy symbol-coverage because ${entityId} has specified_by a scenario. Use verified_by(scenario,test) or validates(test,scenario) instead.`,
13
- ];
14
- }
15
+ if (result.success)
16
+ return scenarioCoverageWarning(entityId);
15
17
  }
16
18
  return [];
17
19
  }
@@ -0,0 +1,60 @@
1
+ export interface WorkspaceMutationLockFileSystem {
2
+ readonly mkdirSync: (target: string, options?: {
3
+ readonly recursive?: boolean;
4
+ }) => void;
5
+ readonly readFileSync: (target: string) => string;
6
+ readonly writeFileSync: (target: string, data: string, options: {
7
+ readonly encoding: "utf8";
8
+ readonly flag: "wx";
9
+ }) => void;
10
+ readonly unlinkSync: (target: string) => void;
11
+ readonly rmdirSync: (target: string) => void;
12
+ }
13
+ export interface WorkspaceMutationLockOptions {
14
+ readonly lockFileRelative?: string;
15
+ readonly timeoutMs?: number;
16
+ readonly now?: () => number;
17
+ readonly sleep?: (ms: number) => Promise<void>;
18
+ readonly fileSystem?: WorkspaceMutationLockFileSystem;
19
+ readonly isProcessAlive?: (pid: number) => boolean;
20
+ }
21
+ export declare class WorkspaceMutationLockError extends Error {
22
+ readonly name = "WorkspaceMutationLockError";
23
+ }
24
+ export interface WorkspaceMutationLockHandle {
25
+ /**
26
+ * Remove this handle's validated owner metadata and then its empty lock
27
+ * directory. Transient cleanup errors are retried; exhausted or permanent
28
+ * failures leave the lock fail-closed and may require verified manual
29
+ * cleanup. Successful release is idempotent, and a stale handle never
30
+ * removes a different owner token.
31
+ */
32
+ readonly release: () => void;
33
+ }
34
+ export declare function releaseWorkspaceMutationLock(handle: WorkspaceMutationLockHandle | undefined, operationFailure?: {
35
+ readonly error: unknown;
36
+ }, committed?: boolean): void;
37
+ /**
38
+ * Classify the failure of an operation whose authoritative commit already
39
+ * happened. Typed operation errors keep their code and retryability; generic
40
+ * failures are wrapped immediately as non-retryable so callers never read a
41
+ * committed mutation as an invitation to retry.
42
+ */
43
+ export declare function classifySourceMutationFailure(operation: string, error: unknown, committed: boolean): unknown;
44
+ /**
45
+ * Acquire the workspace workspace mutation lock without a callback shape, for
46
+ * operations whose lock must span several awaits (source publication,
47
+ * coordinate refresh, canonical re-extraction, and the RDF commit).
48
+ */
49
+ export declare function acquireWorkspaceMutationLock(workspaceRoot: string, options?: WorkspaceMutationLockOptions): Promise<WorkspaceMutationLockHandle>;
50
+ /**
51
+ * Run `operation` while holding the workspace mutation lock.
52
+ *
53
+ * Atomic directory creation is the sole lock authority. Owner metadata is
54
+ * release authorization and diagnostics. Every existing target, including a
55
+ * legacy file or a directory with missing/corrupt metadata, blocks or fails
56
+ * closed without mutating the lock path. Release failures propagate so
57
+ * successful work is never reported unlocked.
58
+ */
59
+ export declare function withWorkspaceMutationLock<T>(workspaceRoot: string, operation: () => Promise<T>, options?: WorkspaceMutationLockOptions): Promise<T>;
60
+ //# sourceMappingURL=workspace-mutation-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-mutation-lock.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/workspace-mutation-lock.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,SAAS,EAAE,CAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,KACvC,IAAI,CAAC;IACV,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,QAAQ,CAAC,aAAa,EAAE,CACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;KAAE,KACxD,IAAI,CAAC;IACV,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAeD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,+BAA+B,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD;AAGD,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,SAAkB,IAAI,gCAAgC;CACvD;AAwMD,MAAM,WAAW,2BAA2B;IAC1C;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAGD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,2BAA2B,GAAG,SAAS,EAC/C,gBAAgB,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,EAC9C,SAAS,UAAQ,GAChB,IAAI,CAoBN;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,OAAO,GACjB,OAAO,CAWT;AAED;;;;GAIG;AAEH,wBAAsB,4BAA4B,CAChD,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,2BAA2B,CAAC,CA4KtC;AAED;;;;;;;;GAQG;AAEH,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,CAAC,CAAC,CAWZ"}