kibi-cli 0.19.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (672) hide show
  1. package/dist/cli-errors.d.ts +3 -1
  2. package/dist/cli-errors.d.ts.map +1 -1
  3. package/dist/cli-errors.js +4 -1
  4. package/dist/cli-json-command.d.ts +1 -0
  5. package/dist/cli-json-command.d.ts.map +1 -1
  6. package/dist/cli-json-command.js +13 -4
  7. package/dist/cli-operation-loader.d.ts.map +1 -1
  8. package/dist/cli-operation-loader.js +53 -20
  9. package/dist/cli-operation-metadata.d.ts +21 -8
  10. package/dist/cli-operation-metadata.d.ts.map +1 -1
  11. package/dist/cli-operation-metadata.js +27 -10
  12. package/dist/cli-protocol.d.ts.map +1 -1
  13. package/dist/cli-protocol.js +38 -8
  14. package/dist/cli-register-foundation.d.ts.map +1 -1
  15. package/dist/cli-register-foundation.js +14 -2
  16. package/dist/cli-register-maintenance.d.ts.map +1 -1
  17. package/dist/cli-register-maintenance.js +33 -4
  18. package/dist/cli-register-proof.d.ts +3 -0
  19. package/dist/cli-register-proof.d.ts.map +1 -0
  20. package/dist/cli-register-proof.js +103 -0
  21. package/dist/cli-register-reporting.d.ts.map +1 -1
  22. package/dist/cli-register-reporting.js +11 -0
  23. package/dist/cli.d.ts +4 -0
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +17 -8
  26. package/dist/commands/aggregated-checks.d.ts +1 -2
  27. package/dist/commands/aggregated-checks.d.ts.map +1 -1
  28. package/dist/commands/aggregated-checks.js +14 -9
  29. package/dist/commands/branch.d.ts +37 -0
  30. package/dist/commands/branch.d.ts.map +1 -1
  31. package/dist/commands/branch.js +375 -40
  32. package/dist/commands/check.d.ts +14 -0
  33. package/dist/commands/check.d.ts.map +1 -1
  34. package/dist/commands/check.js +209 -110
  35. package/dist/commands/coverage.d.ts +1 -0
  36. package/dist/commands/coverage.d.ts.map +1 -1
  37. package/dist/commands/coverage.js +6 -0
  38. package/dist/commands/discovery-shared.d.ts.map +1 -1
  39. package/dist/commands/discovery-shared.js +10 -19
  40. package/dist/commands/doctor.d.ts +26 -1
  41. package/dist/commands/doctor.d.ts.map +1 -1
  42. package/dist/commands/doctor.js +291 -30
  43. package/dist/commands/engine.d.ts +12 -0
  44. package/dist/commands/engine.d.ts.map +1 -1
  45. package/dist/commands/engine.js +50 -7
  46. package/dist/commands/gc.d.ts +5 -2
  47. package/dist/commands/gc.d.ts.map +1 -1
  48. package/dist/commands/gc.js +140 -71
  49. package/dist/commands/github-init.d.ts +57 -0
  50. package/dist/commands/github-init.d.ts.map +1 -0
  51. package/dist/commands/github-init.js +314 -0
  52. package/dist/commands/init-helpers.d.ts +1 -1
  53. package/dist/commands/init-helpers.d.ts.map +1 -1
  54. package/dist/commands/init-helpers.js +109 -28
  55. package/dist/commands/init.d.ts +2 -0
  56. package/dist/commands/init.d.ts.map +1 -1
  57. package/dist/commands/init.js +79 -24
  58. package/dist/commands/legacy-storage-migration.d.ts +54 -0
  59. package/dist/commands/legacy-storage-migration.d.ts.map +1 -0
  60. package/dist/commands/legacy-storage-migration.js +277 -0
  61. package/dist/commands/migrate.d.ts +11 -0
  62. package/dist/commands/migrate.d.ts.map +1 -1
  63. package/dist/commands/migrate.js +249 -96
  64. package/dist/commands/proof-migrate-legacy.d.ts +7 -0
  65. package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
  66. package/dist/commands/proof-migrate-legacy.js +45 -0
  67. package/dist/commands/proof-prune.d.ts +8 -0
  68. package/dist/commands/proof-prune.d.ts.map +1 -0
  69. package/dist/commands/proof-prune.js +53 -0
  70. package/dist/commands/prove.d.ts +37 -0
  71. package/dist/commands/prove.d.ts.map +1 -0
  72. package/dist/commands/prove.js +470 -0
  73. package/dist/commands/report.d.ts +24 -0
  74. package/dist/commands/report.d.ts.map +1 -0
  75. package/dist/commands/report.js +191 -0
  76. package/dist/commands/sync/cache.d.ts +16 -3
  77. package/dist/commands/sync/cache.d.ts.map +1 -1
  78. package/dist/commands/sync/cache.js +111 -4
  79. package/dist/commands/sync/discovery.d.ts +26 -2
  80. package/dist/commands/sync/discovery.d.ts.map +1 -1
  81. package/dist/commands/sync/discovery.js +204 -15
  82. package/dist/commands/sync/extraction.d.ts +8 -1
  83. package/dist/commands/sync/extraction.d.ts.map +1 -1
  84. package/dist/commands/sync/extraction.js +38 -4
  85. package/dist/commands/sync/manifest.d.ts +9 -6
  86. package/dist/commands/sync/manifest.d.ts.map +1 -1
  87. package/dist/commands/sync/manifest.js +195 -60
  88. package/dist/commands/sync/persistence.d.ts +4 -1
  89. package/dist/commands/sync/persistence.d.ts.map +1 -1
  90. package/dist/commands/sync/persistence.js +26 -12
  91. package/dist/commands/sync/staging.d.ts +1 -0
  92. package/dist/commands/sync/staging.d.ts.map +1 -1
  93. package/dist/commands/sync/staging.js +5 -2
  94. package/dist/commands/sync/untracked-targets.d.ts +24 -0
  95. package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
  96. package/dist/commands/sync/untracked-targets.js +108 -0
  97. package/dist/commands/sync.d.ts +17 -1
  98. package/dist/commands/sync.d.ts.map +1 -1
  99. package/dist/commands/sync.js +375 -106
  100. package/dist/diagnostics.d.ts +1 -1
  101. package/dist/diagnostics.d.ts.map +1 -1
  102. package/dist/engine-daemon.d.ts +3 -1
  103. package/dist/engine-daemon.d.ts.map +1 -1
  104. package/dist/engine-daemon.js +49 -20
  105. package/dist/engine.d.ts +34 -3
  106. package/dist/engine.d.ts.map +1 -1
  107. package/dist/engine.js +578 -42
  108. package/dist/env.d.ts.map +1 -1
  109. package/dist/env.js +5 -6
  110. package/dist/extractors/manifest.d.ts +13 -1
  111. package/dist/extractors/manifest.d.ts.map +1 -1
  112. package/dist/extractors/manifest.js +97 -10
  113. package/dist/extractors/markdown.d.ts +5 -2
  114. package/dist/extractors/markdown.d.ts.map +1 -1
  115. package/dist/extractors/markdown.js +47 -12
  116. package/dist/extractors/playwright-cases.d.ts +24 -0
  117. package/dist/extractors/playwright-cases.d.ts.map +1 -0
  118. package/dist/extractors/playwright-cases.js +126 -0
  119. package/dist/extractors/relationships.d.ts +6 -0
  120. package/dist/extractors/relationships.d.ts.map +1 -1
  121. package/dist/extractors/relationships.js +2 -1
  122. package/dist/extractors/symbol-coordinates.d.ts +81 -3
  123. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  124. package/dist/extractors/symbol-coordinates.js +389 -51
  125. package/dist/extractors/symbols-coordinator.js +11 -1
  126. package/dist/extractors/symbols-ts.d.ts +1 -0
  127. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  128. package/dist/extractors/symbols-ts.js +142 -67
  129. package/dist/intent-search.d.ts +61 -0
  130. package/dist/intent-search.d.ts.map +1 -0
  131. package/dist/intent-search.js +437 -0
  132. package/dist/logic/ir.d.ts +1 -0
  133. package/dist/logic/ir.d.ts.map +1 -1
  134. package/dist/logic/ir.js +1 -1
  135. package/dist/operations/bootstrap/activation.d.ts +5 -0
  136. package/dist/operations/bootstrap/activation.d.ts.map +1 -0
  137. package/dist/operations/{autopilot → bootstrap}/activation.js +58 -33
  138. package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts.map +1 -1
  139. package/dist/operations/bootstrap/candidates.d.ts +4 -0
  140. package/dist/operations/{autopilot → bootstrap}/candidates.d.ts.map +1 -1
  141. package/dist/operations/{autopilot → bootstrap}/candidates.js +22 -8
  142. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts +2 -2
  143. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts.map +1 -1
  144. package/dist/operations/{autopilot → bootstrap}/discovery-evidence.js +46 -6
  145. package/dist/operations/{autopilot → bootstrap}/discovery.d.ts +1 -1
  146. package/dist/operations/bootstrap/discovery.d.ts.map +1 -0
  147. package/dist/operations/{autopilot → bootstrap}/discovery.js +21 -14
  148. package/dist/operations/bootstrap/generate.d.ts +9 -0
  149. package/dist/operations/bootstrap/generate.d.ts.map +1 -0
  150. package/dist/operations/bootstrap/generate.js +207 -0
  151. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts +2 -2
  152. package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts.map +1 -1
  153. package/dist/operations/{autopilot → bootstrap}/guidance-actions.js +4 -4
  154. package/dist/operations/{autopilot → bootstrap}/guidance.d.ts +3 -2
  155. package/dist/operations/bootstrap/guidance.d.ts.map +1 -0
  156. package/dist/operations/{autopilot → bootstrap}/guidance.js +3 -1
  157. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts +2 -2
  158. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts.map +1 -1
  159. package/dist/operations/{autopilot → bootstrap}/markdown-candidates.js +4 -3
  160. package/dist/operations/bootstrap/presentation.d.ts +15 -0
  161. package/dist/operations/bootstrap/presentation.d.ts.map +1 -0
  162. package/dist/operations/bootstrap/presentation.js +177 -0
  163. package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts.map +1 -1
  164. package/dist/operations/{autopilot → bootstrap}/types.d.ts +63 -21
  165. package/dist/operations/bootstrap/types.d.ts.map +1 -0
  166. package/dist/operations/bootstrap/types.js +25 -0
  167. package/dist/operations/modeling/model-requirement.d.ts +5 -0
  168. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  169. package/dist/operations/modeling/model-requirement.js +57 -63
  170. package/dist/operations/modeling/predicate-applicability.d.ts +16 -0
  171. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -0
  172. package/dist/operations/modeling/predicate-applicability.js +375 -0
  173. package/dist/operations/modeling/predicate-applyplan.d.ts +13 -2
  174. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
  175. package/dist/operations/modeling/predicate-applyplan.js +100 -3
  176. package/dist/operations/modeling/predicate-bindings.d.ts +6 -0
  177. package/dist/operations/modeling/predicate-bindings.d.ts.map +1 -0
  178. package/dist/operations/modeling/predicate-bindings.js +122 -0
  179. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
  180. package/dist/operations/modeling/predicate-catalog-2.js +18 -2
  181. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
  182. package/dist/operations/modeling/predicate-catalog-3.js +17 -1
  183. package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -1
  184. package/dist/operations/modeling/predicate-catalog-4.js +155 -0
  185. package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
  186. package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
  187. package/dist/operations/modeling/predicate-catalog-5.js +291 -0
  188. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
  189. package/dist/operations/modeling/predicate-catalog.js +4 -0
  190. package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -1
  191. package/dist/operations/modeling/predicate-inference-1.js +8 -0
  192. package/dist/operations/modeling/predicate-inference-launcher.d.ts +10 -0
  193. package/dist/operations/modeling/predicate-inference-launcher.d.ts.map +1 -0
  194. package/dist/operations/modeling/predicate-inference-launcher.js +13 -0
  195. package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
  196. package/dist/operations/modeling/predicate-inference.js +4 -0
  197. package/dist/operations/modeling/predicate-loader.d.ts +1 -0
  198. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  199. package/dist/operations/modeling/predicate-loader.js +11 -3
  200. package/dist/operations/modeling/predicate-ranker.d.ts +8 -1
  201. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  202. package/dist/operations/modeling/predicate-ranker.js +159 -24
  203. package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -1
  204. package/dist/operations/modeling/predicate-score-3.js +6 -0
  205. package/dist/operations/modeling/predicate-types.d.ts +35 -1
  206. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  207. package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -1
  208. package/dist/operations/modeling/predicate-usage-hints-3.js +40 -0
  209. package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
  210. package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
  211. package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
  212. package/dist/operations/modeling/predicate-utils.d.ts.map +1 -1
  213. package/dist/operations/modeling/predicate-utils.js +2 -0
  214. package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
  215. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  216. package/dist/operations/modeling/suggest-predicates.js +203 -32
  217. package/dist/operations/mutation/contradictions.d.ts +2 -1
  218. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  219. package/dist/operations/mutation/contradictions.js +26 -5
  220. package/dist/operations/mutation/delete.d.ts +3 -0
  221. package/dist/operations/mutation/delete.d.ts.map +1 -1
  222. package/dist/operations/mutation/delete.js +483 -19
  223. package/dist/operations/mutation/entity-projection.d.ts +11 -0
  224. package/dist/operations/mutation/entity-projection.d.ts.map +1 -0
  225. package/dist/operations/mutation/entity-projection.js +14 -0
  226. package/dist/operations/mutation/relationships.d.ts +11 -0
  227. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  228. package/dist/operations/mutation/relationships.js +77 -5
  229. package/dist/operations/mutation/saga.d.ts +51 -0
  230. package/dist/operations/mutation/saga.d.ts.map +1 -0
  231. package/dist/operations/mutation/saga.js +67 -0
  232. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  233. package/dist/operations/mutation/serialization.js +3 -1
  234. package/dist/operations/mutation/source-authoring.d.ts +65 -0
  235. package/dist/operations/mutation/source-authoring.d.ts.map +1 -0
  236. package/dist/operations/mutation/source-authoring.js +576 -0
  237. package/dist/operations/mutation/strict-fact.d.ts +1 -0
  238. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  239. package/dist/operations/mutation/strict-fact.js +8 -5
  240. package/dist/operations/mutation/symbol-compiler-lock.d.ts +54 -0
  241. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -0
  242. package/dist/operations/mutation/symbol-compiler-lock.js +337 -0
  243. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  244. package/dist/operations/mutation/symbol-granularity.js +35 -4
  245. package/dist/operations/mutation/symbol-refresh.d.ts +19 -1
  246. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  247. package/dist/operations/mutation/symbol-refresh.js +227 -63
  248. package/dist/operations/mutation/types.d.ts +57 -1
  249. package/dist/operations/mutation/types.d.ts.map +1 -1
  250. package/dist/operations/mutation/upsert.d.ts +18 -2
  251. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  252. package/dist/operations/mutation/upsert.js +403 -32
  253. package/dist/operations/mutation/validate-upsert.js +2 -2
  254. package/dist/operations/mutation/validation.d.ts.map +1 -1
  255. package/dist/operations/mutation/validation.js +47 -4
  256. package/dist/operations/mutation/warnings.d.ts +1 -0
  257. package/dist/operations/mutation/warnings.d.ts.map +1 -1
  258. package/dist/operations/mutation/warnings.js +7 -5
  259. package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
  260. package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
  261. package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
  262. package/dist/operations/planning/apply-plan.d.ts +19 -0
  263. package/dist/operations/planning/apply-plan.d.ts.map +1 -0
  264. package/dist/operations/planning/apply-plan.js +1514 -0
  265. package/dist/operations/planning/compile-intent.d.ts +108 -0
  266. package/dist/operations/planning/compile-intent.d.ts.map +1 -0
  267. package/dist/operations/planning/compile-intent.js +618 -0
  268. package/dist/operations/proof/ingest-proof.d.ts +34 -0
  269. package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
  270. package/dist/operations/proof/ingest-proof.js +307 -0
  271. package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
  272. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
  273. package/dist/operations/proof/migrate-legacy-receipts.js +88 -0
  274. package/dist/operations/proof/prune-receipts.d.ts +35 -0
  275. package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
  276. package/dist/operations/proof/prune-receipts.js +91 -0
  277. package/dist/operations/proof/receipt-document.d.ts +29 -0
  278. package/dist/operations/proof/receipt-document.d.ts.map +1 -0
  279. package/dist/operations/proof/receipt-document.js +117 -0
  280. package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
  281. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  282. package/dist/operations/semantic-advisor/analyze-prose.js +52 -28
  283. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  284. package/dist/operations/semantic-advisor/clauses.js +35 -9
  285. package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -1
  286. package/dist/operations/semantic-advisor/ingestion-boundary.js +7 -3
  287. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +51 -0
  288. package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -0
  289. package/dist/operations/semantic-advisor/predicate-rules-launcher.js +96 -0
  290. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
  291. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
  292. package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
  293. package/dist/operations/semantic-advisor/types.d.ts +13 -5
  294. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  295. package/dist/prolog/codec.d.ts +13 -1
  296. package/dist/prolog/codec.d.ts.map +1 -1
  297. package/dist/prolog/codec.js +269 -153
  298. package/dist/prolog/error-terms.d.ts +47 -0
  299. package/dist/prolog/error-terms.d.ts.map +1 -0
  300. package/dist/prolog/error-terms.js +334 -0
  301. package/dist/prolog/janitor.d.ts +50 -0
  302. package/dist/prolog/janitor.d.ts.map +1 -0
  303. package/dist/prolog/janitor.js +154 -0
  304. package/dist/prolog/store-lock.d.ts +45 -0
  305. package/dist/prolog/store-lock.d.ts.map +1 -0
  306. package/dist/prolog/store-lock.js +195 -0
  307. package/dist/prolog.d.ts +7 -0
  308. package/dist/prolog.d.ts.map +1 -1
  309. package/dist/prolog.js +82 -25
  310. package/dist/proof/evaluate.d.ts +27 -0
  311. package/dist/proof/evaluate.d.ts.map +1 -0
  312. package/dist/proof/evaluate.js +151 -0
  313. package/dist/proof/inspect.d.ts +12 -0
  314. package/dist/proof/inspect.d.ts.map +1 -0
  315. package/dist/proof/inspect.js +236 -0
  316. package/dist/proof/integrations.d.ts +35 -0
  317. package/dist/proof/integrations.d.ts.map +1 -0
  318. package/dist/proof/integrations.js +123 -0
  319. package/dist/proof/producers/junit-adapter.d.ts +26 -0
  320. package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
  321. package/dist/proof/producers/junit-adapter.js +186 -0
  322. package/dist/proof/producers/playwright-case-id.d.ts +8 -0
  323. package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
  324. package/dist/proof/producers/playwright-case-id.js +25 -0
  325. package/dist/proof/producers/playwright-reporter.d.ts +27 -0
  326. package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
  327. package/dist/proof/producers/playwright-reporter.js +138 -0
  328. package/dist/proof/producers/tap-adapter.d.ts +10 -0
  329. package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
  330. package/dist/proof/producers/tap-adapter.js +200 -0
  331. package/dist/proof/receipt-outcome.d.ts +2 -0
  332. package/dist/proof/receipt-outcome.d.ts.map +1 -0
  333. package/dist/proof/receipt-outcome.js +1 -0
  334. package/dist/public/branch-resolver.d.ts +1 -0
  335. package/dist/public/branch-resolver.d.ts.map +1 -1
  336. package/dist/public/branch-resolver.js +1 -0
  337. package/dist/public/check-types.d.ts +2 -2
  338. package/dist/public/check-types.d.ts.map +1 -1
  339. package/dist/public/check-types.js +16 -16
  340. package/dist/public/diagnostic-usage.d.ts.map +1 -1
  341. package/dist/public/diagnostic-usage.js +74 -6
  342. package/dist/public/distribution-parity.d.ts +7 -1
  343. package/dist/public/distribution-parity.d.ts.map +1 -1
  344. package/dist/public/distribution-parity.js +15 -9
  345. package/dist/public/ignore-policy.d.ts.map +1 -1
  346. package/dist/public/ignore-policy.js +16 -4
  347. package/dist/public/impact/coverage-depth-quality.d.ts +7 -1
  348. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  349. package/dist/public/impact/coverage-depth-quality.js +22 -4
  350. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  351. package/dist/public/impact/diagnostics.js +2 -2
  352. package/dist/public/impact/diff-meaning.d.ts +1 -0
  353. package/dist/public/impact/diff-meaning.d.ts.map +1 -1
  354. package/dist/public/impact/diff-meaning.js +5 -2
  355. package/dist/public/impact/full-kb-quality.d.ts +7 -2
  356. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  357. package/dist/public/impact/full-kb-quality.js +364 -39
  358. package/dist/public/impact/manifest.d.ts.map +1 -1
  359. package/dist/public/impact/manifest.js +2 -5
  360. package/dist/public/operational-artifacts.d.ts.map +1 -1
  361. package/dist/public/operational-artifacts.js +7 -1
  362. package/dist/public/operations/catalog.d.ts +900 -34
  363. package/dist/public/operations/catalog.d.ts.map +1 -1
  364. package/dist/public/operations/catalog.js +130 -6
  365. package/dist/public/operations/check-executor.d.ts +2 -2
  366. package/dist/public/operations/check-executor.d.ts.map +1 -1
  367. package/dist/public/operations/check-executor.js +68 -13
  368. package/dist/public/operations/check-format-shared.d.ts +3 -0
  369. package/dist/public/operations/check-format-shared.d.ts.map +1 -1
  370. package/dist/public/operations/check-format-shared.js +3 -0
  371. package/dist/public/operations/check-helpers.d.ts +27 -2
  372. package/dist/public/operations/check-helpers.d.ts.map +1 -1
  373. package/dist/public/operations/check-helpers.js +62 -26
  374. package/dist/public/operations/contracts.d.ts +18 -0
  375. package/dist/public/operations/contracts.d.ts.map +1 -0
  376. package/dist/public/operations/contracts.js +334 -0
  377. package/dist/public/operations/discovery-entities.d.ts +3 -0
  378. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  379. package/dist/public/operations/discovery-entities.js +4 -0
  380. package/dist/public/operations/discovery-executors.d.ts +43 -7
  381. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  382. package/dist/public/operations/discovery-executors.js +216 -13
  383. package/dist/public/operations/index.d.ts +9 -4
  384. package/dist/public/operations/index.d.ts.map +1 -1
  385. package/dist/public/operations/index.js +8 -3
  386. package/dist/public/operations/migration-plan.d.ts +102 -0
  387. package/dist/public/operations/migration-plan.d.ts.map +1 -0
  388. package/dist/public/operations/migration-plan.js +539 -0
  389. package/dist/public/operations/node-ports.d.ts.map +1 -1
  390. package/dist/public/operations/node-ports.js +71 -11
  391. package/dist/public/operations/prolog-json.d.ts +14 -0
  392. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  393. package/dist/public/operations/prolog-json.js +44 -5
  394. package/dist/public/operations/repair-plan.d.ts +3 -3
  395. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  396. package/dist/public/operations/repair-plan.js +49 -18
  397. package/dist/public/operations/result-envelope.d.ts +14 -0
  398. package/dist/public/operations/result-envelope.d.ts.map +1 -0
  399. package/dist/public/operations/result-envelope.js +106 -0
  400. package/dist/public/operations/runtime-types.d.ts +102 -7
  401. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  402. package/dist/public/operations/source-relationship-parity.d.ts +13 -0
  403. package/dist/public/operations/source-relationship-parity.d.ts.map +1 -0
  404. package/dist/public/operations/source-relationship-parity.js +162 -0
  405. package/dist/public/operations/specs/{autopilot.d.ts → bootstrap.d.ts} +9 -9
  406. package/dist/public/operations/specs/bootstrap.d.ts.map +1 -0
  407. package/dist/public/operations/specs/{autopilot.js → bootstrap.js} +8 -7
  408. package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
  409. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
  410. package/dist/public/operations/specs/check-rules.generated.js +34 -0
  411. package/dist/public/operations/specs/check.d.ts +9 -4
  412. package/dist/public/operations/specs/check.d.ts.map +1 -1
  413. package/dist/public/operations/specs/check.js +10 -21
  414. package/dist/public/operations/specs/discovery.d.ts +87 -3
  415. package/dist/public/operations/specs/discovery.d.ts.map +1 -1
  416. package/dist/public/operations/specs/discovery.js +53 -3
  417. package/dist/public/operations/specs/modeling.d.ts +3 -3
  418. package/dist/public/operations/specs/modeling.js +3 -3
  419. package/dist/public/operations/specs/mutation-schemas.d.ts +251 -14
  420. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  421. package/dist/public/operations/specs/mutation-schemas.js +16 -6
  422. package/dist/public/operations/specs/mutation.d.ts +42 -2
  423. package/dist/public/operations/specs/mutation.d.ts.map +1 -1
  424. package/dist/public/operations/specs/mutation.js +26 -2
  425. package/dist/public/operations/specs/planning.d.ts +279 -0
  426. package/dist/public/operations/specs/planning.d.ts.map +1 -0
  427. package/dist/public/operations/specs/planning.js +197 -0
  428. package/dist/public/operations/specs/proof.d.ts +212 -0
  429. package/dist/public/operations/specs/proof.d.ts.map +1 -0
  430. package/dist/public/operations/specs/proof.js +30 -0
  431. package/dist/public/operations/specs/reporting.d.ts +23 -1
  432. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  433. package/dist/public/operations/specs/reporting.js +156 -11
  434. package/dist/public/operations/specs/upsert.d.ts +265 -14
  435. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  436. package/dist/public/operations/specs/upsert.js +9 -0
  437. package/dist/public/operations/symbol-repair-plan.d.ts +22 -0
  438. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -0
  439. package/dist/public/operations/symbol-repair-plan.js +238 -0
  440. package/dist/public/operations/types.d.ts +52 -1
  441. package/dist/public/operations/types.d.ts.map +1 -1
  442. package/dist/public/proof-fingerprint.d.ts +54 -0
  443. package/dist/public/proof-fingerprint.d.ts.map +1 -0
  444. package/dist/public/proof-fingerprint.js +141 -0
  445. package/dist/public/proof-protocol.d.ts +354 -0
  446. package/dist/public/proof-protocol.d.ts.map +1 -0
  447. package/dist/public/proof-protocol.js +454 -0
  448. package/dist/public/proof-receipt.d.ts +279 -0
  449. package/dist/public/proof-receipt.d.ts.map +1 -0
  450. package/dist/public/proof-receipt.js +377 -0
  451. package/dist/public/schemas/entity.d.ts.map +1 -1
  452. package/dist/public/schemas/entity.js +22 -6
  453. package/dist/public/skills/kibi-bootstrap/SKILL.md +58 -0
  454. package/dist/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  455. package/dist/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  456. package/dist/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  457. package/dist/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  458. package/dist/public/skills/kibi-freshness/SKILL.md +39 -9
  459. package/dist/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  460. package/dist/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  461. package/dist/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  462. package/dist/public/skills/kibi-traceability/SKILL.md +47 -47
  463. package/dist/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  464. package/dist/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  465. package/dist/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  466. package/dist/public/skills/kibi-traceability/resources/traceability.md +8 -0
  467. package/dist/public/skills/kibi-usage/SKILL.md +136 -231
  468. package/dist/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  469. package/dist/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  470. package/dist/public/skills/kibi-usage/resources/operation-access.md +36 -38
  471. package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
  472. package/dist/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  473. package/dist/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  474. package/dist/public/skills/kibi-usage/resources/workflows.md +57 -4
  475. package/dist/public/symbol-granularity.d.ts +3 -14
  476. package/dist/public/symbol-granularity.d.ts.map +1 -1
  477. package/dist/public/symbol-granularity.generated.d.ts +16 -0
  478. package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
  479. package/dist/public/symbol-granularity.generated.js +20 -0
  480. package/dist/public/symbol-granularity.js +6 -46
  481. package/dist/public/telemetry-acceptance.d.ts +3 -70
  482. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  483. package/dist/public/telemetry-acceptance.js +11 -2
  484. package/dist/public/telemetry-remediation.js +1 -1
  485. package/dist/relationships/shards.d.ts +16 -0
  486. package/dist/relationships/shards.d.ts.map +1 -1
  487. package/dist/relationships/shards.js +87 -2
  488. package/dist/report/brand.d.ts +19 -0
  489. package/dist/report/brand.d.ts.map +1 -0
  490. package/dist/report/brand.js +112 -0
  491. package/dist/report/html-report.css +282 -0
  492. package/dist/report/html-report.d.ts +21 -0
  493. package/dist/report/html-report.d.ts.map +1 -0
  494. package/dist/report/html-report.js +700 -0
  495. package/dist/report/relative-time.d.ts +4 -0
  496. package/dist/report/relative-time.d.ts.map +1 -0
  497. package/dist/report/relative-time.js +46 -0
  498. package/dist/report/report-view.d.ts +17 -0
  499. package/dist/report/report-view.d.ts.map +1 -0
  500. package/dist/report/report-view.js +33 -0
  501. package/dist/report/repository.d.ts +35 -0
  502. package/dist/report/repository.d.ts.map +1 -0
  503. package/dist/report/repository.js +151 -0
  504. package/dist/runtime/cli-runtime.d.ts +2 -0
  505. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  506. package/dist/runtime/cli-runtime.js +90 -23
  507. package/dist/schemas/entity.schema.json +1254 -239
  508. package/dist/search-ranking.d.ts +1 -0
  509. package/dist/search-ranking.d.ts.map +1 -1
  510. package/dist/search-ranking.js +3 -0
  511. package/dist/traceability/evidence-model.d.ts +30 -2
  512. package/dist/traceability/evidence-model.d.ts.map +1 -1
  513. package/dist/traceability/evidence-model.js +2 -2
  514. package/dist/traceability/git-staged.d.ts +20 -0
  515. package/dist/traceability/git-staged.d.ts.map +1 -1
  516. package/dist/traceability/git-staged.js +156 -37
  517. package/dist/traceability/markdown-validate.d.ts.map +1 -1
  518. package/dist/traceability/markdown-validate.js +12 -7
  519. package/dist/traceability/staged-diagnostics.d.ts +7 -0
  520. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  521. package/dist/traceability/staged-diagnostics.js +78 -7
  522. package/dist/traceability/staged-file-coverage.d.ts +33 -0
  523. package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
  524. package/dist/traceability/staged-file-coverage.js +284 -0
  525. package/dist/traceability/staged-impact-contract.d.ts +3 -3
  526. package/dist/traceability/staged-impact-contract.d.ts.map +1 -1
  527. package/dist/traceability/staged-impact-contract.js +12 -40
  528. package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
  529. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  530. package/dist/traceability/staged-symbols-manifest.js +142 -26
  531. package/dist/traceability/symbol-extract.d.ts +5 -0
  532. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  533. package/dist/traceability/symbol-extract.js +1 -1
  534. package/dist/traceability/temp-kb.d.ts +2 -0
  535. package/dist/traceability/temp-kb.d.ts.map +1 -1
  536. package/dist/traceability/temp-kb.js +14 -2
  537. package/dist/types/entities.d.ts +5 -0
  538. package/dist/types/entities.d.ts.map +1 -1
  539. package/dist/utils/branch-resolver.d.ts +25 -10
  540. package/dist/utils/branch-resolver.d.ts.map +1 -1
  541. package/dist/utils/branch-resolver.js +124 -38
  542. package/dist/utils/branch-store-locator.d.ts +23 -0
  543. package/dist/utils/branch-store-locator.d.ts.map +1 -0
  544. package/dist/utils/branch-store-locator.js +90 -0
  545. package/dist/utils/branch-store.d.ts +21 -0
  546. package/dist/utils/branch-store.d.ts.map +1 -0
  547. package/dist/utils/branch-store.js +157 -0
  548. package/dist/utils/config.d.ts +39 -37
  549. package/dist/utils/config.d.ts.map +1 -1
  550. package/dist/utils/config.js +107 -119
  551. package/dist/utils/kb-manifest.d.ts +35 -0
  552. package/dist/utils/kb-manifest.d.ts.map +1 -0
  553. package/dist/utils/kb-manifest.js +154 -0
  554. package/dist/utils/kb-paths.d.ts +54 -0
  555. package/dist/utils/kb-paths.d.ts.map +1 -0
  556. package/dist/utils/kb-paths.js +125 -0
  557. package/dist/utils/manifest-paths.d.ts +4 -4
  558. package/dist/utils/manifest-paths.d.ts.map +1 -1
  559. package/dist/utils/manifest-paths.js +8 -56
  560. package/dist/utils/rule-registry.d.ts +42 -24
  561. package/dist/utils/rule-registry.d.ts.map +1 -1
  562. package/dist/utils/rule-registry.generated.d.ts +97 -0
  563. package/dist/utils/rule-registry.generated.d.ts.map +1 -0
  564. package/dist/utils/rule-registry.generated.js +125 -0
  565. package/dist/utils/rule-registry.js +52 -148
  566. package/dist/utils/schema-version.d.ts +5 -5
  567. package/dist/utils/schema-version.d.ts.map +1 -1
  568. package/dist/utils/schema-version.js +26 -6
  569. package/dist/utils/strict-modeling.d.ts +1 -4
  570. package/dist/utils/strict-modeling.d.ts.map +1 -1
  571. package/dist/utils/strict-modeling.js +8 -9
  572. package/package.json +47 -11
  573. package/schema/config.json +2 -2
  574. package/schema/manifest.json +26 -0
  575. package/src/public/branch-resolver.ts +1 -0
  576. package/src/public/check-types.ts +22 -19
  577. package/src/public/diagnostic-usage.ts +84 -6
  578. package/src/public/distribution-parity.ts +17 -9
  579. package/src/public/ignore-policy.ts +16 -10
  580. package/src/public/impact/coverage-depth-quality.ts +37 -1
  581. package/src/public/impact/diagnostics.ts +2 -1
  582. package/src/public/impact/diff-meaning.ts +11 -4
  583. package/src/public/impact/full-kb-quality.ts +545 -41
  584. package/src/public/impact/manifest.ts +2 -4
  585. package/src/public/operational-artifacts.ts +9 -1
  586. package/src/public/operations/catalog.ts +153 -10
  587. package/src/public/operations/check-executor.ts +98 -15
  588. package/src/public/operations/check-format-shared.ts +6 -0
  589. package/src/public/operations/check-helpers.ts +74 -35
  590. package/src/public/operations/contracts.ts +382 -0
  591. package/src/public/operations/discovery-entities.ts +7 -0
  592. package/src/public/operations/discovery-executors.ts +315 -25
  593. package/src/public/operations/index.ts +9 -4
  594. package/src/public/operations/migration-plan.ts +747 -0
  595. package/src/public/operations/node-ports.ts +87 -13
  596. package/src/public/operations/prolog-json.ts +60 -5
  597. package/src/public/operations/repair-plan.ts +60 -22
  598. package/src/public/operations/result-envelope.ts +141 -0
  599. package/src/public/operations/runtime-types.ts +96 -5
  600. package/src/public/operations/source-relationship-parity.ts +226 -0
  601. package/src/public/operations/specs/{autopilot.ts → bootstrap.ts} +17 -16
  602. package/src/public/operations/specs/check-rules.generated.ts +37 -0
  603. package/src/public/operations/specs/check.ts +14 -22
  604. package/src/public/operations/specs/discovery.ts +57 -3
  605. package/src/public/operations/specs/modeling.ts +3 -3
  606. package/src/public/operations/specs/mutation-schemas.ts +24 -6
  607. package/src/public/operations/specs/mutation.ts +27 -2
  608. package/src/public/operations/specs/planning.ts +241 -0
  609. package/src/public/operations/specs/proof.ts +43 -0
  610. package/src/public/operations/specs/reporting.ts +193 -12
  611. package/src/public/operations/specs/upsert.ts +10 -0
  612. package/src/public/operations/symbol-repair-plan.ts +324 -0
  613. package/src/public/operations/types.ts +62 -1
  614. package/src/public/proof-fingerprint.ts +216 -0
  615. package/src/public/proof-protocol-types.d.ts +96 -0
  616. package/src/public/proof-protocol.ts +589 -0
  617. package/src/public/proof-receipt.ts +499 -0
  618. package/src/public/schemas/entity.ts +27 -6
  619. package/src/public/skills/kibi-bootstrap/SKILL.md +58 -0
  620. package/src/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
  621. package/src/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
  622. package/src/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
  623. package/src/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
  624. package/src/public/skills/kibi-freshness/SKILL.md +39 -9
  625. package/src/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
  626. package/src/public/skills/kibi-freshness/resources/operation-access.md +6 -0
  627. package/src/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
  628. package/src/public/skills/kibi-traceability/SKILL.md +47 -47
  629. package/src/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
  630. package/src/public/skills/kibi-traceability/resources/operation-access.md +5 -0
  631. package/src/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
  632. package/src/public/skills/kibi-traceability/resources/traceability.md +8 -0
  633. package/src/public/skills/kibi-usage/SKILL.md +136 -231
  634. package/src/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
  635. package/src/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
  636. package/src/public/skills/kibi-usage/resources/operation-access.md +36 -38
  637. package/src/public/skills/kibi-usage/resources/proof.md +105 -0
  638. package/src/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
  639. package/src/public/skills/kibi-usage/resources/source-authoring.md +31 -0
  640. package/src/public/skills/kibi-usage/resources/workflows.md +57 -4
  641. package/src/public/symbol-granularity.generated.ts +41 -0
  642. package/src/public/symbol-granularity.ts +35 -59
  643. package/src/public/telemetry-acceptance-types.d.ts +98 -0
  644. package/src/public/telemetry-acceptance.ts +30 -93
  645. package/src/public/telemetry-remediation.ts +1 -1
  646. package/src/schemas/entity.schema.json +1254 -239
  647. package/templates/github/kibi-badge.yml +86 -0
  648. package/templates/github/kibi-report.yml +84 -0
  649. package/dist/operations/autopilot/activation.d.ts +0 -4
  650. package/dist/operations/autopilot/activation.d.ts.map +0 -1
  651. package/dist/operations/autopilot/candidates.d.ts +0 -4
  652. package/dist/operations/autopilot/discovery.d.ts.map +0 -1
  653. package/dist/operations/autopilot/generate.d.ts +0 -8
  654. package/dist/operations/autopilot/generate.d.ts.map +0 -1
  655. package/dist/operations/autopilot/generate.js +0 -112
  656. package/dist/operations/autopilot/guidance.d.ts.map +0 -1
  657. package/dist/operations/autopilot/presentation.d.ts +0 -13
  658. package/dist/operations/autopilot/presentation.d.ts.map +0 -1
  659. package/dist/operations/autopilot/presentation.js +0 -91
  660. package/dist/operations/autopilot/types.d.ts.map +0 -1
  661. package/dist/operations/autopilot/types.js +0 -8
  662. package/dist/public/operations/specs/autopilot.d.ts.map +0 -1
  663. package/dist/public/skills/init-kibi/SKILL.md +0 -62
  664. package/dist/public/verification-receipt.d.ts +0 -75
  665. package/dist/public/verification-receipt.d.ts.map +0 -1
  666. package/dist/public/verification-receipt.js +0 -129
  667. package/src/public/skills/init-kibi/SKILL.md +0 -62
  668. package/src/public/verification-receipt.ts +0 -170
  669. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts +0 -0
  670. /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.js +0 -0
  671. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts +0 -0
  672. /package/dist/operations/{autopilot → bootstrap}/requirement-claims.js +0 -0
@@ -1,14 +1,26 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync, readFileSync, realpathSync, unlinkSync, writeFileSync, } from "node:fs";
3
+ import path from "node:path";
4
+ import { OperationError } from "../../cli-errors.js";
5
+ import { readManifestWithCoordinateOverlay } from "../../extractors/manifest.js";
6
+ import { extractManifestSymbolRecords } from "../../extractors/manifest.js";
1
7
  import { escapeAtom } from "../../prolog/codec.js";
2
8
  import { loadEntities } from "../../public/operations/discovery-entities.js";
3
- import { appendOnlyVerificationReceiptHistoryErrors } from "../../public/verification-receipt.js";
9
+ import { appendOnlyProofReceiptHistoryErrors } from "../../public/proof-receipt.js";
10
+ import { appendRelationship, computeShardPath, } from "../../relationships/shards.js";
11
+ import { resolveBranchAttachment } from "../../utils/branch-resolver.js";
4
12
  import { analyzeSemanticAdvisorInput } from "../semantic-advisor/analyze-prose.js";
5
13
  import { assertLogicalGroundingClaimKeys, assertSemanticInventoryBoundary, } from "../semantic-advisor/ingestion-boundary.js";
6
14
  import { buildUpsertCommitGoal, formatUpsertError } from "./contradictions.js";
7
- import { existingRelationships, validateLiveRelationshipTargets, validateRelationshipSources, validateStrictLanePairing, } from "./relationships.js";
15
+ import { existingRelationships, validateLiveRelationshipTargets, validateRelationshipSources, validateStrictLanePairing, validateSupersedesSourceHistory, } from "./relationships.js";
16
+ import { MutationSaga } from "./saga.js";
17
+ import { writePendingSourceReceipt, writeSourceForUpsert, } from "./source-authoring.js";
18
+ import { acquireSymbolCompilerLock, releaseSymbolCompilerLock, } from "./symbol-compiler-lock.js";
8
19
  import { validateSymbolGranularity } from "./symbol-granularity.js";
9
- import { refreshSymbolCoordinates } from "./symbol-refresh.js";
20
+ import { refreshSymbolCoordinatesForManifest } from "./symbol-refresh.js";
10
21
  import { validateUpsertInput } from "./validation.js";
11
22
  import { scenarioCoverageWarnings } from "./warnings.js";
23
+ import { acquireWorkspaceMutationLock, releaseWorkspaceMutationLock, } from "./workspace-mutation-lock.js";
12
24
  function requireProlog(context) {
13
25
  if (context.prolog === undefined) {
14
26
  throw new Error("Upsert operation requires a Prolog runtime");
@@ -28,33 +40,92 @@ function parseChangeKind(value) {
28
40
  ? normalized
29
41
  : null;
30
42
  }
31
- export async function validateAppendOnlyVerificationReceipts(entity, context) {
43
+ function fileHash(pathname) {
44
+ if (!existsSync(pathname))
45
+ return null;
46
+ return createHash("sha256").update(readFileSync(pathname)).digest("hex");
47
+ }
48
+ function textHash(value) {
49
+ return createHash("sha256").update(value).digest("hex");
50
+ }
51
+ function assertRelationshipShardContained(workspaceRoot, shardPath) {
52
+ const root = path.resolve(workspaceRoot);
53
+ const relationshipRoot = path.resolve(root, ".kb", "relationships");
54
+ const absolute = path.resolve(shardPath);
55
+ if (!absolute.startsWith(`${relationshipRoot}${path.sep}`)) {
56
+ throw new OperationError("SOURCE_PATH_INVALID", `Relationship shard escapes the canonical workspace lane: ${shardPath}`);
57
+ }
58
+ let existing = absolute;
59
+ while (!existsSync(existing) && path.dirname(existing) !== existing) {
60
+ existing = path.dirname(existing);
61
+ }
62
+ const real = realpathSync.native(existing);
63
+ if (real !== root && !real.startsWith(`${root}${path.sep}`)) {
64
+ throw new OperationError("SOURCE_PATH_INVALID", `Relationship shard follows a symlink outside the workspace: ${shardPath}`);
65
+ }
66
+ }
67
+ function restoreRelationshipShard(shardPath, before, expectedAfterHash) {
68
+ // Compare before restore: a concurrent writer may have replaced the shard
69
+ // after our append. Never clobber newer bytes; the next check/sync reports
70
+ // any canonical source path that needs reconciliation.
71
+ if (expectedAfterHash !== null) {
72
+ let currentHash = null;
73
+ try {
74
+ currentHash = fileHash(shardPath);
75
+ }
76
+ catch {
77
+ currentHash = null;
78
+ }
79
+ if (currentHash !== expectedAfterHash) {
80
+ console.warn(`Skipped relationship shard rollback for ${path.relative(process.cwd(), shardPath)}: shard changed after the Kibi write.`);
81
+ return;
82
+ }
83
+ }
84
+ if (before === null) {
85
+ try {
86
+ unlinkSync(shardPath);
87
+ }
88
+ catch {
89
+ // The file may already be absent after an interrupted atomic replace.
90
+ }
91
+ return;
92
+ }
93
+ writeFileSync(shardPath, before, "utf8");
94
+ }
95
+ export async function validateAppendOnlyProofReceipts(entity, context) {
32
96
  if (entity.type !== "test")
33
97
  return;
34
98
  const existing = await loadEntities(requireProlog(context), {
35
99
  id: String(entity.id),
36
100
  type: "test",
37
101
  });
38
- const previous = receiptRecords(existing[0]?.verification_receipts);
102
+ const previous = receiptRecords(existing[0]?.proof_receipts);
39
103
  if (!previous || previous.length === 0)
40
104
  return;
41
- const next = receiptRecords(entity.verification_receipts);
42
- const errors = appendOnlyVerificationReceiptHistoryErrors(previous, next);
105
+ const next = receiptRecords(entity.proof_receipts);
106
+ const errors = appendOnlyProofReceiptHistoryErrors(previous, next);
43
107
  if (errors.length > 0) {
44
108
  throw new Error(`Entity validation failed: ${errors.join("; ")}`);
45
109
  }
46
110
  }
47
111
  export async function effectiveRelationships(input, entity, relationships, context) {
48
- if (input.relationships !== undefined && input.relationships.length > 0) {
49
- return relationships;
50
- }
51
112
  const prolog = requireProlog(context);
52
113
  const exists = await prolog.query(`once(kb_entity('${escapeAtom(input.id)}', _, _))`);
53
114
  if (!exists.success)
54
115
  return relationships;
55
116
  try {
56
- const current = await existingRelationships(prolog, String(entity.id));
57
- return current.length > 0 ? current : relationships;
117
+ const current = (await existingRelationships(prolog, String(entity.id)))
118
+ // An upsert owns only relationships whose source is the upserted entity.
119
+ // Incoming relationships must not be copied into its validation or
120
+ // canonical source projection.
121
+ .filter((relationship) => relationship.from === input.id);
122
+ const merged = new Map();
123
+ for (const relationship of [...current, ...relationships]) {
124
+ const key = `${String(relationship.type)}\u0000${String(relationship.from)}\u0000${String(relationship.to)}`;
125
+ // The explicit input wins so any supplied metadata is retained.
126
+ merged.set(key, relationship);
127
+ }
128
+ return [...merged.values()];
58
129
  }
59
130
  catch (error) {
60
131
  if (error instanceof Error)
@@ -62,55 +133,283 @@ export async function effectiveRelationships(input, entity, relationships, conte
62
133
  throw error;
63
134
  }
64
135
  }
65
- export async function executeUpsert(input, context) {
136
+ /**
137
+ * Re-extract one complete canonical symbol entity from the authored manifest
138
+ * plus the freshly published generated coordinate artifact. Source-first
139
+ * commits must match exactly what the next sync would compile, instead of
140
+ * hand-merging generated fields into the caller's partial payload.
141
+ */
142
+ function reextractCanonicalSymbolEntity(symbolId, authoredRelativePath, workspaceRoot) {
143
+ const absoluteManifest = path.resolve(workspaceRoot, authoredRelativePath);
144
+ let records;
145
+ try {
146
+ records = readManifestWithCoordinateOverlay(absoluteManifest);
147
+ }
148
+ catch (error) {
149
+ throw new Error(`Canonical symbol manifest ${authoredRelativePath} could not be compiled after coordinate refresh: ${error instanceof Error ? error.message : String(error)}`);
150
+ }
151
+ const mine = records.find((candidate) => candidate.id === symbolId);
152
+ if (mine === undefined)
153
+ return null;
154
+ const [result] = extractManifestSymbolRecords([mine], absoluteManifest);
155
+ if (result === undefined)
156
+ return null;
157
+ return {
158
+ ...result.entity,
159
+ ...(result.sourceFile === undefined
160
+ ? {}
161
+ : { sourceFile: result.sourceFile }),
162
+ };
163
+ }
164
+ export async function executeUpsert(input, context, options = {}) {
165
+ const branchAttachment = context.branchAttachment ?? resolveBranchAttachment(context.workspaceRoot);
166
+ if ("error" in branchAttachment) {
167
+ throw new Error(`Unable to resolve KB branch: ${branchAttachment.error}`);
168
+ }
169
+ if (branchAttachment.migrationRequired &&
170
+ (context.branchAttachment !== undefined || context.fs !== undefined)) {
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.`);
172
+ }
66
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();
179
+ let sourceWrite = null;
180
+ let commitEntity;
181
+ let relationshipCount = 0;
182
+ let changeKind = null;
183
+ let semanticAdvisor;
184
+ let compilerLock;
185
+ let sourceMutationLock;
186
+ let operationFailure;
187
+ const relationshipShardBefore = new Map();
188
+ const relationshipShardAfterHash = new Map();
189
+ const holdsSymbolCompilerLock = input.type === "symbol" &&
190
+ context.fs !== undefined &&
191
+ context.sourceFirst !== false;
192
+ const holdsSourceMutationLock = context.fs !== undefined &&
193
+ context.sourceFirst !== false &&
194
+ context.sourceMutationLockHeld !== true;
67
195
  try {
196
+ if (holdsSourceMutationLock) {
197
+ sourceMutationLock = await acquireWorkspaceMutationLock(context.workspaceRoot);
198
+ }
199
+ if (holdsSymbolCompilerLock) {
200
+ // Symbol source publication, coordinate refresh, canonical
201
+ // re-extraction, and the RDF commit form one read-modify-write cycle.
202
+ // Serialize the whole cycle so concurrent full refreshes or sibling
203
+ // upserts cannot lose updates.
204
+ compilerLock = await acquireSymbolCompilerLock(context.workspaceRoot);
205
+ }
68
206
  const validated = validateUpsertInput(input, context.clock());
69
- await validateAppendOnlyVerificationReceipts(validated.entity, context);
207
+ if (options.allowReceiptsPrune !== true) {
208
+ await validateAppendOnlyProofReceipts(validated.entity, context);
209
+ }
70
210
  validateRelationshipSources(input.id, validated.relationships);
71
211
  await validateSymbolGranularity(validated.entity, validated.relationships, context);
72
212
  const relationships = await effectiveRelationships(input, validated.entity, validated.relationships, context);
73
- await validateStrictLanePairing(prolog, relationships);
74
- await validateLiveRelationshipTargets(prolog, validated.entity, relationships);
213
+ relationshipCount = validated.relationships.length;
214
+ await validateStrictLanePairing(prolog, validated.relationships);
215
+ await validateLiveRelationshipTargets(prolog, validated.entity, validated.relationships);
216
+ await validateSupersedesSourceHistory(prolog, validated.entity, validated.relationships, context.workspaceRoot);
75
217
  const semantic = analyzeSemanticAdvisorInput({
76
218
  payload: { ...input, relationships },
77
219
  });
220
+ semanticAdvisor = semantic.receipt;
78
221
  assertSemanticInventoryBoundary({ ...input, relationships }, relationships, semantic.receipt);
79
222
  await assertLogicalGroundingClaimKeys(prolog, { ...input, relationships }, relationships);
223
+ if (context.fs !== undefined && context.sourceFirst !== false) {
224
+ const existingRows = await loadEntities(prolog, {
225
+ id: input.id,
226
+ type: input.type,
227
+ });
228
+ const existing = existingRows[0];
229
+ const existingSource = existing !== undefined && typeof existing.source === "string"
230
+ ? existing.source
231
+ : undefined;
232
+ // Existing non-authored runtime sources (mcp://, test://, etc.) have no
233
+ // tracked document to update unless the caller explicitly supplies one;
234
+ // new entities are required to choose a source target in this
235
+ // filesystem-capable context.
236
+ if (input.document !== undefined ||
237
+ existingSource?.match(/\.(?:md|mdx|ya?ml|json)$/i) ||
238
+ // A filesystem-capable runtime is source-first for every new entity.
239
+ // writeSourceForUpsert emits the typed DOCUMENT_PATH_REQUIRED request
240
+ // when configuration has zero or multiple writable targets, rather
241
+ // than silently creating compiled-only state.
242
+ existing === undefined) {
243
+ sourceWrite = await writeSourceForUpsert(input, validated.entity, existing, context, options.sourceDocumentOverride);
244
+ if (sourceWrite !== null) {
245
+ const sourceStep = sourceWrite;
246
+ saga.add({
247
+ name: "authored-source",
248
+ rollback: () => sourceStep.rollback(),
249
+ onError: "capture",
250
+ });
251
+ // The authored path is the entity's canonical identity. Runtime
252
+ // transport provenance (mcp://...) must never survive a source-first
253
+ // write or a later delete/sync cycle.
254
+ commitEntity = {
255
+ ...validated.entity,
256
+ source: sourceWrite.receipt.path,
257
+ };
258
+ }
259
+ }
260
+ }
261
+ // Relationship shards are canonical source artifacts. Patch them before
262
+ // the compiled transaction so a failed commit can restore exact bytes and
263
+ // a successful commit never leaves a compiled-only relationship behind.
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
+ });
276
+ for (const relationship of validated.relationships) {
277
+ const type = typeof relationship.type === "string" ? relationship.type : "";
278
+ const from = typeof relationship.from === "string" ? relationship.from : input.id;
279
+ const to = typeof relationship.to === "string" ? relationship.to : "";
280
+ if (!type || !from || !to)
281
+ continue;
282
+ const shardPath = computeShardPath(path.join(context.workspaceRoot, ".kb"), from);
283
+ assertRelationshipShardContained(context.workspaceRoot, shardPath);
284
+ if (!relationshipShardBefore.has(shardPath)) {
285
+ relationshipShardBefore.set(shardPath, existsSync(shardPath) ? readFileSync(shardPath, "utf8") : null);
286
+ }
287
+ appendRelationship(path.join(context.workspaceRoot, ".kb"), {
288
+ type,
289
+ from,
290
+ to,
291
+ created_at: context.clock().toISOString(),
292
+ created_by: "kibi/upsert",
293
+ source: "mcp://kibi/upsert",
294
+ });
295
+ relationshipShardAfterHash.set(shardPath, fileHash(shardPath));
296
+ }
297
+ }
298
+ // Coordinates are generated compiler state owned by
299
+ // `.kb/symbol-coordinates.yaml`. Refresh the target's generated record
300
+ // from current extraction (we hold the symbol compiler lock), then commit
301
+ // the complete canonical entity the next sync would compile. Failures
302
+ // abort before the RDF transaction so source and shard rollbacks keep all
303
+ // surfaces consistent; stale coordinates are never reused as a fallback.
304
+ if (input.type === "symbol" &&
305
+ context.fs !== undefined &&
306
+ context.sourceFirst !== false &&
307
+ sourceWrite !== null) {
308
+ const refresh = await refreshSymbolCoordinatesForManifest(input.id, path.resolve(context.workspaceRoot, sourceWrite.receipt.path), context);
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
+ }
317
+ if (!refresh.found || refresh.outcome === "removed") {
318
+ throw new Error(`Coordinate refresh could not find ${input.id} in the authored symbol manifest`);
319
+ }
320
+ const canonical = reextractCanonicalSymbolEntity(input.id, sourceWrite.receipt.path, context.workspaceRoot);
321
+ if (canonical === null) {
322
+ throw new Error(`Canonical symbol manifest ${sourceWrite.receipt.path} no longer contains ${input.id} after coordinate refresh`);
323
+ }
324
+ // The authored path is the entity's canonical identity. Runtime
325
+ // transport provenance (mcp://...) must never survive a source-first
326
+ // write or a later delete/sync cycle.
327
+ commitEntity = {
328
+ ...canonical,
329
+ source: sourceWrite.receipt.path,
330
+ };
331
+ }
80
332
  const transaction = buildUpsertCommitGoal({
81
- entity: validated.entity,
82
- relationships,
333
+ entity: commitEntity ?? validated.entity,
334
+ relationships: validated.relationships,
83
335
  skipContradictionCheck: input._skipContradictionCheck === true,
84
336
  });
85
337
  const written = await prolog.query(transaction);
86
338
  if (!written.success) {
87
- throw new Error(formatUpsertError(input.id, written.error));
339
+ throw new Error(formatUpsertError(input.id, written.error, written.errorRecord));
88
340
  }
341
+ saga.markCommitted();
89
342
  // The combined commit is the sole mutation boundary. Invalidate reads only
90
343
  // after Prolog reports success so a failed/rolled-back commit does not
91
344
  // disturb callers' view of the current snapshot.
92
345
  prolog.invalidateCache?.();
93
- const changeKind = parseChangeKind(written.bindings.ChangeKind);
346
+ changeKind = parseChangeKind(written.bindings.ChangeKind);
94
347
  if (changeKind === null) {
95
348
  throw new Error(`Upsert commit completed without a created/updated result for ${input.id}`);
96
349
  }
97
- if (input.type === "symbol") {
98
- try {
99
- await refreshSymbolCoordinates(input.id, context);
100
- }
101
- catch (error) {
102
- if (!(error instanceof Error))
103
- throw error;
104
- }
105
- }
106
350
  const coverage = await scenarioCoverageWarnings(prolog, validated.relationships, input.type, input.id);
107
351
  const created = changeKind === "created" ? 1 : 0;
352
+ const shardWarnings = [];
353
+ const relationshipSourceWrites = [];
354
+ for (const [shardPath, before] of relationshipShardBefore) {
355
+ const afterHash = fileHash(shardPath);
356
+ const beforeHash = before === null ? null : textHash(before);
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)
368
+ continue;
369
+ const relative = path
370
+ .relative(context.workspaceRoot, shardPath)
371
+ .replaceAll("\\", "/");
372
+ writePendingSourceReceipt(context.workspaceRoot, relative, afterHash);
373
+ relationshipSourceWrites.push({
374
+ path: relative,
375
+ mode: "write",
376
+ beforeHash,
377
+ afterHash,
378
+ created: before === null,
379
+ });
380
+ }
108
381
  const payload = {
109
382
  created,
110
383
  updated: changeKind === "updated" ? 1 : 0,
111
- relationships_created: relationships.length,
112
- warnings: [...semantic.warnings, ...coverage],
384
+ relationships_created: validated.relationships.length,
385
+ warnings: [...semantic.warnings, ...coverage, ...shardWarnings],
113
386
  semanticAdvisor: semantic.receipt,
387
+ ...(shardWarnings.length > 0
388
+ ? {
389
+ status: "committed_with_repairs",
390
+ effectFailures: shardWarnings.map((detail) => ({
391
+ kind: "workspace-write",
392
+ errorCode: "RELATIONSHIP_SHARD_WRITE_FAILED",
393
+ detail,
394
+ })),
395
+ nextActions: [
396
+ {
397
+ operation: "kb_check",
398
+ reason: "Relationship shard publication failed after the KB commit; inspect the shard diagnostics and repair the canonical YAML before syncing.",
399
+ required: true,
400
+ },
401
+ ],
402
+ }
403
+ : {}),
404
+ ...(sourceWrite ? { sourceWrites: [sourceWrite.receipt] } : {}),
405
+ ...(relationshipSourceWrites.length > 0
406
+ ? {
407
+ sourceWrites: [
408
+ ...(sourceWrite ? [sourceWrite.receipt] : []),
409
+ ...relationshipSourceWrites,
410
+ ],
411
+ }
412
+ : {}),
114
413
  ...(input.type === "req"
115
414
  ? {
116
415
  contradictionCheck: {
@@ -136,7 +435,79 @@ export async function executeUpsert(input, context) {
136
435
  };
137
436
  }
138
437
  catch (error) {
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) {
444
+ const detail = error instanceof Error ? error.message : String(error);
445
+ return {
446
+ content: [
447
+ {
448
+ type: "text",
449
+ text: `Upserted ${input.id}, but a derived effect requires repair.`,
450
+ },
451
+ ],
452
+ structuredContent: {
453
+ created: changeKind === "created" ? 1 : 0,
454
+ updated: changeKind === "updated" ? 1 : 0,
455
+ relationships_created: relationshipCount,
456
+ warnings: [detail],
457
+ semanticAdvisor: semanticAdvisor,
458
+ status: "committed_with_repairs",
459
+ effectFailures: [
460
+ {
461
+ kind: "derived-effect",
462
+ errorCode: "POST_COMMIT_EFFECT_FAILED",
463
+ detail,
464
+ },
465
+ ],
466
+ nextActions: [
467
+ {
468
+ operation: "kb_status",
469
+ reason: "The compiled mutation committed; inspect the authoritative source and derived status before repairing.",
470
+ required: true,
471
+ },
472
+ {
473
+ operation: "kb_sync",
474
+ reason: "Recompile canonical source files after the committed derived effect failure; do not retry the original upsert.",
475
+ required: true,
476
+ },
477
+ ],
478
+ },
479
+ };
480
+ }
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}`);
493
+ operationFailure = { error: failure };
494
+ throw failure;
495
+ }
496
+ if (error instanceof OperationError) {
497
+ operationFailure = { error };
498
+ throw error;
499
+ }
139
500
  const message = error instanceof Error ? error.message : String(error);
140
- throw new Error(`Upsert execution failed: ${message}`);
501
+ const failure = new Error(`Upsert execution failed: ${message}`);
502
+ operationFailure = { error: failure };
503
+ throw failure;
504
+ }
505
+ finally {
506
+ try {
507
+ releaseSymbolCompilerLock(compilerLock, operationFailure, saga.committed);
508
+ }
509
+ finally {
510
+ releaseWorkspaceMutationLock(sourceMutationLock, operationFailure, saga.committed);
511
+ }
141
512
  }
142
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;AAiF/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 });
@@ -22,6 +22,7 @@ const validateEntity = ajv.compile({
22
22
  "module-level-behavior",
23
23
  "extractor-miss",
24
24
  "legacy-link",
25
+ "test-suite",
25
26
  ],
26
27
  },
27
28
  symbol_role: { type: "string", enum: [...SYMBOL_ROLES] },
@@ -85,9 +86,11 @@ export function validateUpsertInput(input, now) {
85
86
  if (!validateEntity(entity)) {
86
87
  throw new Error(`Entity validation failed: ${formatEntityErrors(entity, validateEntity.errors ?? [])}`);
87
88
  }
88
- if (entity.type === "test" && Array.isArray(entity.verification_receipts)) {
89
- const receipts = entity.verification_receipts.filter((value) => typeof value === "object" && value !== null && !Array.isArray(value));
90
- 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);
91
94
  if (receiptErrors.length > 0) {
92
95
  throw new Error(`Entity validation failed: ${receiptErrors.join("; ")}`);
93
96
  }
@@ -113,3 +116,43 @@ export function validateUpsertInput(input, now) {
113
116
  return { entity, relationships };
114
117
  }
115
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
  }