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
@@ -0,0 +1,576 @@
1
+ import { createHash } from "node:crypto";
2
+ import { randomUUID } from "node:crypto";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import { dump as dumpYaml, load as loadYaml } from "js-yaml";
6
+ import { parseDocument, stringify } from "yaml";
7
+ import { OperationError } from "../../cli-errors.js";
8
+ import { CANONICAL_ENTITY_PATHS, isDerivedKbPath, } from "../../utils/kb-paths.js";
9
+ function digest(value) {
10
+ return createHash("sha256").update(value).digest("hex");
11
+ }
12
+ function pendingReceiptPath(workspaceRoot, relativePath) {
13
+ return path.join(workspaceRoot, ".kb", "recovery", "pending-sources", `${digest(relativePath)}.json`);
14
+ }
15
+ export function writePendingSourceReceipt(workspaceRoot, relativePath, afterHash) {
16
+ const receiptPath = pendingReceiptPath(workspaceRoot, relativePath);
17
+ fs.mkdirSync(path.dirname(receiptPath), { recursive: true, mode: 0o700 });
18
+ fs.writeFileSync(receiptPath, `${JSON.stringify({
19
+ version: 1,
20
+ path: relativePath,
21
+ afterHash,
22
+ createdAt: new Date().toISOString(),
23
+ }, null, 2)}\n`, { mode: 0o600 });
24
+ }
25
+ function authoredPath(value) {
26
+ if (typeof value !== "string" || !value.trim())
27
+ return undefined;
28
+ const normalized = value.replaceAll("\\", "/");
29
+ if (/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(normalized))
30
+ return undefined;
31
+ if (!/\.(?:md|mdx|ya?ml)$/i.test(normalized))
32
+ return undefined;
33
+ return normalized;
34
+ }
35
+ export function resolveContainedSourcePath(workspaceRoot, relative) {
36
+ if (path.isAbsolute(relative) ||
37
+ relative.split(/[\\/]/).some((part) => part === ".." || part === "")) {
38
+ throw new OperationError("SOURCE_PATH_INVALID", `document.path must be a workspace-relative path without traversal: ${relative}`);
39
+ }
40
+ const absolute = path.resolve(workspaceRoot, relative);
41
+ const root = path.resolve(workspaceRoot);
42
+ if (absolute !== root && !absolute.startsWith(`${root}${path.sep}`)) {
43
+ throw new OperationError("SOURCE_PATH_INVALID", `document.path escapes the workspace: ${relative}`);
44
+ }
45
+ const workspaceRelative = path
46
+ .relative(root, absolute)
47
+ .replaceAll(path.sep, "/");
48
+ if (isDerivedKbPath(workspaceRelative)) {
49
+ throw new OperationError("SOURCE_PATH_INVALID", `document.path cannot target Kibi's derived state under ${workspaceRelative}: ${relative}`);
50
+ }
51
+ // A symlinked existing file or parent could otherwise escape the workspace.
52
+ let existing = fs.existsSync(absolute) ? absolute : path.dirname(absolute);
53
+ while (!fs.existsSync(existing) && path.dirname(existing) !== existing) {
54
+ existing = path.dirname(existing);
55
+ }
56
+ const real = fs.realpathSync.native(existing);
57
+ if (real !== root && !real.startsWith(`${root}${path.sep}`)) {
58
+ throw new OperationError("SOURCE_PATH_INVALID", `document.path resolves outside the workspace: ${relative}`);
59
+ }
60
+ return absolute;
61
+ }
62
+ export function normalizeAuthoredSourcePath(workspaceRoot, source) {
63
+ const normalized = source.replaceAll("\\", "/");
64
+ const relative = path.isAbsolute(normalized)
65
+ ? path.relative(path.resolve(workspaceRoot), path.resolve(normalized))
66
+ : normalized;
67
+ return path
68
+ .relative(path.resolve(workspaceRoot), resolveContainedSourcePath(workspaceRoot, relative))
69
+ .replaceAll(path.sep, "/");
70
+ }
71
+ function bodyAndFrontmatter(content) {
72
+ if (!content.startsWith("---"))
73
+ return { frontmatter: {}, body: content };
74
+ const firstEnd = content.indexOf("\n", 3);
75
+ if (firstEnd < 0)
76
+ return { frontmatter: {}, body: content };
77
+ const marker = content.indexOf("\n---", firstEnd);
78
+ if (marker < 0)
79
+ return { frontmatter: {}, body: content };
80
+ const raw = content.slice(firstEnd + 1, marker);
81
+ const parsed = loadYaml(raw);
82
+ return {
83
+ frontmatter: parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)
84
+ ? parsed
85
+ : {},
86
+ body: content.slice(marker + "\n---".length),
87
+ };
88
+ }
89
+ /**
90
+ * Canonical authored target for an entity type: `.kb/<lane>/<ID>.md` for
91
+ * markdown entities and `.kb/symbols.yaml` for symbols. Kibi owns these
92
+ * locations; repositories cannot relocate them.
93
+ */
94
+ export function configuredSourceTarget(workspaceRoot, type) {
95
+ const laneByType = {
96
+ req: CANONICAL_ENTITY_PATHS.requirements,
97
+ scenario: CANONICAL_ENTITY_PATHS.scenarios,
98
+ test: CANONICAL_ENTITY_PATHS.tests,
99
+ adr: CANONICAL_ENTITY_PATHS.adr,
100
+ flag: CANONICAL_ENTITY_PATHS.flags,
101
+ event: CANONICAL_ENTITY_PATHS.events,
102
+ fact: CANONICAL_ENTITY_PATHS.facts,
103
+ symbol: CANONICAL_ENTITY_PATHS.symbols,
104
+ };
105
+ return laneByType[type];
106
+ }
107
+ export function hasConfiguredSourceTarget(workspaceRoot, type) {
108
+ return configuredSourceTarget(workspaceRoot, type) !== undefined;
109
+ }
110
+ function sourcePath(context, input, entity, existing) {
111
+ const requested = input.document?.path;
112
+ const canonical = configuredSourceTarget(context.workspaceRoot, input.type);
113
+ let relative = requested ?? authoredPath(existing?.source);
114
+ // Canonical markdown lanes name a directory; append the entity's file so
115
+ // upserts without document.path land in the canonical location.
116
+ if (relative === undefined &&
117
+ canonical !== undefined &&
118
+ !/\.(?:md|mdx|ya?ml)$/i.test(canonical)) {
119
+ relative = `${canonical}/${String(entity.id)}.md`;
120
+ }
121
+ else if (relative === undefined && canonical !== undefined) {
122
+ relative = canonical;
123
+ }
124
+ if (!relative) {
125
+ throw new OperationError("DOCUMENT_PATH_REQUIRED", `No writable source target is available for ${input.type}; provide document.path explicitly`);
126
+ }
127
+ // Extracted entities may carry an absolute source path even though the
128
+ // authored document contract is workspace-relative. Rebase paths that are
129
+ // inside the workspace before applying containment and symlink checks.
130
+ if (path.isAbsolute(relative)) {
131
+ const root = path.resolve(context.workspaceRoot);
132
+ const absolute = path.resolve(relative);
133
+ if (absolute !== root && !absolute.startsWith(`${root}${path.sep}`)) {
134
+ throw new OperationError("SOURCE_PATH_INVALID", `document.path resolves outside the workspace: ${relative}`);
135
+ }
136
+ relative = path.relative(root, absolute).replaceAll(path.sep, "/");
137
+ }
138
+ return resolveContainedSourcePath(context.workspaceRoot, relative);
139
+ }
140
+ function renderEntityDocument(input, entity, existingContent) {
141
+ const existing = existingContent
142
+ ? bodyAndFrontmatter(existingContent)
143
+ : { frontmatter: {}, body: "" };
144
+ const body = input.document?.body !== undefined
145
+ ? input.document.body
146
+ : existingContent !== undefined
147
+ ? existing.body
148
+ : input.type === "req"
149
+ ? `${String(entity.semantic_text ?? "").trim()}\n`
150
+ : "\n";
151
+ const frontmatter = {
152
+ ...existing.frontmatter,
153
+ ...Object.fromEntries(Object.entries(entity).filter(([key]) =>
154
+ // Runtime provenance/timestamps belong to the compiled entity, not to
155
+ // the authored source artifact. Keeping them out also makes the source
156
+ // diff deterministic across CLI and MCP transports.
157
+ ![
158
+ "id",
159
+ "type",
160
+ "source",
161
+ "links",
162
+ "relationships",
163
+ "created_at",
164
+ "updated_at",
165
+ ].includes(key))),
166
+ };
167
+ frontmatter.id = entity.id;
168
+ frontmatter.title ??= entity.id;
169
+ frontmatter.type = entity.type;
170
+ return `---\n${dumpYaml(frontmatter, { noRefs: true, lineWidth: -1, sortKeys: false })}---${body.startsWith("\n") ? "" : "\n"}${body}`;
171
+ }
172
+ /** Generated coordinate fields belong exclusively to `.kb/symbol-coordinates.yaml`. */
173
+ // implements REQ-generated-coordinate-persistence
174
+ export const GENERATED_SYMBOL_FIELDS = [
175
+ "sourceLine",
176
+ "sourceColumn",
177
+ "sourceEndLine",
178
+ "sourceEndColumn",
179
+ "coordinatesGeneratedAt",
180
+ ];
181
+ function symbolManifestRecord(entity, relationships = []) {
182
+ const record = Object.fromEntries(Object.entries(entity).filter(([key]) => ![
183
+ "type",
184
+ "source",
185
+ "relationships",
186
+ "created_at",
187
+ "updated_at",
188
+ // Generated coordinates are compiler output. They must never enter
189
+ // the authored manifest, including legacy inline occurrences.
190
+ ...GENERATED_SYMBOL_FIELDS,
191
+ ].includes(key)));
192
+ if (relationships.length > 0) {
193
+ record.relationships = relationships.map(({ type, target }) => ({
194
+ type,
195
+ target,
196
+ }));
197
+ }
198
+ return record;
199
+ }
200
+ export function manifestRelationships(item) {
201
+ if (item === null ||
202
+ typeof item !== "object" ||
203
+ !("get" in item) ||
204
+ typeof item.get !== "function") {
205
+ return [];
206
+ }
207
+ const sequence = item.get("relationships", true);
208
+ if (sequence === null ||
209
+ typeof sequence !== "object" ||
210
+ !("toJSON" in sequence) ||
211
+ typeof sequence.toJSON !== "function") {
212
+ return [];
213
+ }
214
+ const value = sequence.toJSON();
215
+ if (!Array.isArray(value))
216
+ return [];
217
+ return value.flatMap((relationship) => {
218
+ if (relationship === null || typeof relationship !== "object") {
219
+ return [];
220
+ }
221
+ const candidate = relationship;
222
+ const type = candidate.type;
223
+ const target = candidate.target ?? candidate.to;
224
+ return typeof type === "string" && typeof target === "string"
225
+ ? [{ type, target }]
226
+ : [];
227
+ });
228
+ }
229
+ function mergeManifestRelationships(existing, incoming, entityId) {
230
+ const merged = new Map();
231
+ for (const relationship of existing) {
232
+ merged.set(`${relationship.type}\u0000${relationship.target}`, {
233
+ type: relationship.type,
234
+ target: relationship.target,
235
+ });
236
+ }
237
+ for (const relationship of incoming) {
238
+ if (relationship.from !== entityId ||
239
+ typeof relationship.type !== "string" ||
240
+ typeof relationship.to !== "string") {
241
+ continue;
242
+ }
243
+ const normalized = { type: relationship.type, target: relationship.to };
244
+ merged.set(`${normalized.type}\u0000${normalized.target}`, normalized);
245
+ }
246
+ return [...merged.values()].sort((left, right) => `${left.type}\u0000${left.target}`.localeCompare(`${right.type}\u0000${right.target}`));
247
+ }
248
+ function renderSymbolManifest(entity, relationships, existingContent) {
249
+ if (existingContent === undefined) {
250
+ const doc = parseDocument(stringify({
251
+ symbols: [
252
+ symbolManifestRecord(entity, mergeManifestRelationships([], relationships, String(entity.id))),
253
+ ],
254
+ }));
255
+ return doc.toString();
256
+ }
257
+ const doc = parseDocument(existingContent);
258
+ const symbols = doc.get("symbols", true);
259
+ if (!symbols || typeof symbols !== "object" || !("items" in symbols)) {
260
+ throw new OperationError("SOURCE_FORMAT_INVALID", "Symbol manifest must contain a symbols array");
261
+ }
262
+ const items = symbols.items;
263
+ const id = String(entity.id);
264
+ const index = items.findIndex((item) => {
265
+ if (!item || typeof item !== "object" || !("get" in item))
266
+ return false;
267
+ return String(item.get("id")) === id;
268
+ });
269
+ const existingRelationships = index >= 0 ? manifestRelationships(items[index]) : [];
270
+ let next = symbolManifestRecord(entity, mergeManifestRelationships(existingRelationships, relationships, id));
271
+ if (index >= 0) {
272
+ // Partial symbol payloads (for example a relationship-only upsert) must
273
+ // never erase authored provenance from the manifest. Preserve fields the
274
+ // payload omits, with incoming values winning on explicit conflicts.
275
+ const item = items[index];
276
+ const previous = typeof item?.toJSON === "function" ? item.toJSON() : null;
277
+ if (typeof previous === "object" &&
278
+ previous !== null &&
279
+ !Array.isArray(previous)) {
280
+ const preserved = symbolManifestRecord(previous, []);
281
+ next = { ...preserved, ...next };
282
+ }
283
+ doc.setIn(["symbols", index], next);
284
+ }
285
+ else {
286
+ doc.addIn(["symbols"], next);
287
+ }
288
+ return doc.toString();
289
+ }
290
+ export function renderSourceDeletion(sourcePathValue, entityId, entityType, existingContent) {
291
+ const extension = path.extname(sourcePathValue).toLowerCase();
292
+ if (extension === ".md" || extension === ".mdx") {
293
+ const parsed = bodyAndFrontmatter(existingContent);
294
+ if (String(parsed.frontmatter.id ?? "") !== entityId) {
295
+ throw new OperationError("SOURCE_ENTITY_MISMATCH", `Authored document ${sourcePathValue} does not contain ${entityId}`);
296
+ }
297
+ return { mode: "delete" };
298
+ }
299
+ if (extension === ".yaml" || extension === ".yml") {
300
+ if (entityType !== "symbol") {
301
+ throw new OperationError("SOURCE_FORMAT_UNSUPPORTED", `YAML deletion is supported only for symbol manifests, not ${entityType}`);
302
+ }
303
+ const doc = parseDocument(existingContent);
304
+ const symbols = doc.get("symbols", true);
305
+ if (!symbols || typeof symbols !== "object" || !("items" in symbols)) {
306
+ throw new OperationError("SOURCE_FORMAT_INVALID", "Symbol manifest must contain a symbols array");
307
+ }
308
+ const items = symbols.items;
309
+ const index = items.findIndex((item) => {
310
+ if (!item || typeof item !== "object" || !("get" in item))
311
+ return false;
312
+ return (String(item.get("id")) === entityId);
313
+ });
314
+ if (index < 0) {
315
+ throw new OperationError("SOURCE_ENTITY_MISMATCH", `Symbol manifest ${sourcePathValue} does not contain ${entityId}`);
316
+ }
317
+ doc.deleteIn(["symbols", index]);
318
+ return { mode: "write", body: doc.toString() };
319
+ }
320
+ throw new OperationError("SOURCE_FORMAT_UNSUPPORTED", `Unsupported authored source format: ${extension || "unknown"}`);
321
+ }
322
+ /**
323
+ * Remove one legacy relationship declaration from an authored Markdown
324
+ * document. Relationship shards are the canonical relationship lane, but
325
+ * older entity documents may still carry `links` or typed `relationships`
326
+ * frontmatter. When such a declaration is explicitly deleted, patch only
327
+ * that record through the YAML CST so comments, ordering, and the Markdown
328
+ * body remain byte-stable.
329
+ */
330
+ export function renderMarkdownRelationshipDeletion(sourcePathValue, existingContent, selector) {
331
+ const extension = path.extname(sourcePathValue).toLowerCase();
332
+ if (extension !== ".md" && extension !== ".mdx") {
333
+ throw new OperationError("SOURCE_FORMAT_UNSUPPORTED", `Relationship declarations can only be patched in Markdown documents: ${sourcePathValue}`);
334
+ }
335
+ if (!existingContent.startsWith("---"))
336
+ return { body: existingContent, removed: false };
337
+ const firstEnd = existingContent.indexOf("\n", 3);
338
+ if (firstEnd < 0)
339
+ return { body: existingContent, removed: false };
340
+ const marker = existingContent.indexOf("\n---", firstEnd);
341
+ if (marker < 0)
342
+ return { body: existingContent, removed: false };
343
+ const frontmatter = parseDocument(existingContent.slice(firstEnd + 1, marker));
344
+ let removed = false;
345
+ for (const key of ["links", "relationships"]) {
346
+ const sequence = frontmatter.get(key, true);
347
+ if (!sequence || typeof sequence !== "object" || !("items" in sequence))
348
+ continue;
349
+ const items = sequence.items;
350
+ for (let index = items.length - 1; index >= 0; index -= 1) {
351
+ const item = items[index];
352
+ if (!item || typeof item !== "object")
353
+ continue;
354
+ if (key === "links" && !("get" in item)) {
355
+ const scalar = item;
356
+ const value = scalar.toJSON?.() ?? scalar.value;
357
+ if (typeof value === "string" &&
358
+ value.replace(/^kb:entity\//, "") === selector.to) {
359
+ frontmatter.deleteIn([key, index]);
360
+ removed = true;
361
+ }
362
+ continue;
363
+ }
364
+ if (!("get" in item))
365
+ continue;
366
+ const node = item;
367
+ const target = node.get("target") ?? node.get("to");
368
+ const relationType = node.get("type");
369
+ const matches = typeof target === "string" &&
370
+ target.replace(/^kb:entity\//, "") === selector.to &&
371
+ (key === "links" ||
372
+ relationType === selector.type ||
373
+ relationType === undefined);
374
+ if (matches) {
375
+ frontmatter.deleteIn([key, index]);
376
+ removed = true;
377
+ }
378
+ }
379
+ }
380
+ if (!removed)
381
+ return { body: existingContent, removed: false };
382
+ const body = existingContent.slice(marker + "\n---".length);
383
+ return {
384
+ body: `---\n${frontmatter.toString()}---${body.startsWith("\n") ? "" : "\n"}${body}`,
385
+ removed: true,
386
+ };
387
+ }
388
+ /**
389
+ * Remove one exact typed relationship from an authored symbol manifest. The
390
+ * YAML CST is edited in place so comments, ordering, and unrelated symbols or
391
+ * relationships remain authored content rather than being re-serialized.
392
+ */
393
+ export function renderYamlRelationshipDeletion(sourcePathValue, existingContent, selector) {
394
+ const extension = path.extname(sourcePathValue).toLowerCase();
395
+ if (extension !== ".yaml" && extension !== ".yml") {
396
+ throw new OperationError("SOURCE_FORMAT_UNSUPPORTED", `Relationship declarations can only be patched in YAML symbol manifests: ${sourcePathValue}`);
397
+ }
398
+ const doc = parseDocument(existingContent);
399
+ if (doc.errors.length > 0) {
400
+ throw new OperationError("SOURCE_FORMAT_INVALID", `Symbol manifest contains invalid YAML: ${doc.errors[0]?.message ?? "parse failed"}`);
401
+ }
402
+ const symbols = doc.get("symbols", true);
403
+ if (!symbols || typeof symbols !== "object" || !("items" in symbols)) {
404
+ throw new OperationError("SOURCE_FORMAT_INVALID", "Symbol manifest must contain a symbols array");
405
+ }
406
+ const items = symbols.items;
407
+ const symbol = items.find((item) => {
408
+ if (!item || typeof item !== "object" || !("get" in item))
409
+ return false;
410
+ return (String(item.get("id")) ===
411
+ selector.from);
412
+ });
413
+ if (!symbol || typeof symbol !== "object" || !("get" in symbol)) {
414
+ return { body: existingContent, removed: false };
415
+ }
416
+ const relationships = symbol.get("relationships", true);
417
+ if (!relationships ||
418
+ typeof relationships !== "object" ||
419
+ !("items" in relationships)) {
420
+ return { body: existingContent, removed: false };
421
+ }
422
+ const relationshipItems = relationships.items;
423
+ let removed = false;
424
+ for (let index = relationshipItems.length - 1; index >= 0; index -= 1) {
425
+ const item = relationshipItems[index];
426
+ if (!item || typeof item !== "object" || !("get" in item))
427
+ continue;
428
+ const node = item;
429
+ const type = node.get("type");
430
+ const target = node.get("target") ?? node.get("to");
431
+ const normalizedTarget = typeof target === "string"
432
+ ? target.replace(/^kb:entity\//, "")
433
+ : undefined;
434
+ if (type === selector.type && normalizedTarget === selector.to) {
435
+ relationships.delete(index);
436
+ removed = true;
437
+ }
438
+ }
439
+ return removed
440
+ ? { body: doc.toString(), removed: true }
441
+ : { body: existingContent, removed: false };
442
+ }
443
+ function renderSourceDocument(input, entity, existingContent, relativePath) {
444
+ const extension = path.extname(relativePath).toLowerCase();
445
+ if (extension === ".yaml" || extension === ".yml") {
446
+ if (input.type !== "symbol") {
447
+ throw new OperationError("SOURCE_FORMAT_UNSUPPORTED", `YAML source authoring is supported only for symbol manifests, not ${input.type}`);
448
+ }
449
+ return renderSymbolManifest(entity, input.relationships ?? [], existingContent);
450
+ }
451
+ if (extension !== ".md" && extension !== ".mdx") {
452
+ throw new OperationError("SOURCE_FORMAT_UNSUPPORTED", `Unsupported authored source format: ${extension || "unknown"}`);
453
+ }
454
+ return renderEntityDocument(input, entity, existingContent);
455
+ }
456
+ export async function writeSourceForUpsert(input, entity, existing, context, sourceDocumentOverride) {
457
+ if (!context?.fs)
458
+ return null;
459
+ const absolute = sourcePath(context, input, entity, existing);
460
+ const relative = path
461
+ .relative(context.workspaceRoot, absolute)
462
+ .replaceAll("\\", "/");
463
+ let before;
464
+ try {
465
+ before = await context.fs.readFile(absolute);
466
+ }
467
+ catch {
468
+ before = undefined;
469
+ }
470
+ // Proof-receipt ingest supplies pre-patched bytes so unrelated frontmatter
471
+ // keeps its authored formatting (and the workspace snapshot stays stable).
472
+ // Only valid when the document already exists; a new document still needs
473
+ // the canonical render.
474
+ const after = before !== undefined && sourceDocumentOverride !== undefined
475
+ ? sourceDocumentOverride
476
+ : renderSourceDocument(input, entity, before, relative);
477
+ await context.fs.mkdir(path.dirname(absolute));
478
+ const temporary = `${absolute}.kibi-source-${process.pid}-${randomUUID()}`;
479
+ try {
480
+ await context.fs.writeFile(temporary, after);
481
+ if (context.fs.rename) {
482
+ await context.fs.rename(temporary, absolute);
483
+ }
484
+ else {
485
+ await context.fs.writeFile(absolute, after);
486
+ await context.fs.unlink?.(temporary).catch(() => undefined);
487
+ }
488
+ }
489
+ catch (error) {
490
+ // A failed rename must not leak the unique temp file into the authored
491
+ // tree; the published target (if any) is untouched at this point.
492
+ await context.fs.unlink?.(temporary).catch(() => undefined);
493
+ throw error;
494
+ }
495
+ const receipt = {
496
+ path: relative,
497
+ mode: "write",
498
+ beforeHash: before === undefined ? null : digest(before),
499
+ afterHash: digest(after),
500
+ created: before === undefined,
501
+ };
502
+ const rollback = async () => {
503
+ const fsPort = context.fs;
504
+ if (fsPort === undefined)
505
+ return;
506
+ // Compare before restore: a concurrent writer may have replaced the file
507
+ // after our publication. Never clobber newer bytes; keep the recovery
508
+ // receipt so the next sync reconciles deterministically instead.
509
+ let current;
510
+ try {
511
+ current = await fsPort.readFile(absolute);
512
+ }
513
+ catch {
514
+ current = undefined;
515
+ }
516
+ if (current !== undefined && digest(current) !== digest(after)) {
517
+ writePendingSourceReceipt(context.workspaceRoot, relative, receipt.afterHash);
518
+ console.warn(`Skipped source rollback for ${relative}: file changed after the Kibi write; kept concurrent content and recorded recovery metadata.`);
519
+ return;
520
+ }
521
+ if (before === undefined) {
522
+ if (fsPort.unlink)
523
+ await fsPort.unlink(absolute);
524
+ else
525
+ await fsPort.writeFile(absolute, "");
526
+ try {
527
+ fs.unlinkSync(pendingReceiptPath(context.workspaceRoot, relative));
528
+ }
529
+ catch {
530
+ // The pending receipt is advisory recovery metadata.
531
+ }
532
+ }
533
+ else {
534
+ const rollbackTemp = `${absolute}.kibi-rollback-${process.pid}-${randomUUID()}`;
535
+ try {
536
+ await fsPort.writeFile(rollbackTemp, before);
537
+ if (fsPort.rename)
538
+ await fsPort.rename(rollbackTemp, absolute);
539
+ else {
540
+ await fsPort.writeFile(absolute, before);
541
+ await fsPort.unlink?.(rollbackTemp).catch(() => undefined);
542
+ }
543
+ }
544
+ catch (error) {
545
+ await fsPort.unlink?.(rollbackTemp).catch(() => undefined);
546
+ throw error;
547
+ }
548
+ }
549
+ };
550
+ const pendingReceipt = pendingReceiptPath(context.workspaceRoot, relative);
551
+ try {
552
+ if (receipt.afterHash !== null &&
553
+ (before === undefined || fs.existsSync(pendingReceipt))) {
554
+ writePendingSourceReceipt(context.workspaceRoot, relative, receipt.afterHash);
555
+ }
556
+ }
557
+ catch (receiptError) {
558
+ // The source bytes are already published but the caller has not received
559
+ // the rollback handle yet. Unwind the publication here so no failed call
560
+ // ever leaves a half-registered source write behind.
561
+ try {
562
+ await rollback();
563
+ }
564
+ catch (rollbackError) {
565
+ throw new AggregateError([receiptError, rollbackError], `Source published for ${relative}, but pending receipt publication and rollback both failed; recover from the pending-source receipt or restore the authored file manually`);
566
+ }
567
+ throw receiptError;
568
+ }
569
+ return { receipt, rollback };
570
+ }
571
+ /** Resolve and normalize the canonical authored path for an entity. */
572
+ export function canonicalSourcePath(context, input, entity, existing) {
573
+ return path
574
+ .relative(context.workspaceRoot, sourcePath(context, input, entity, existing))
575
+ .replaceAll(path.sep, "/");
576
+ }
@@ -1,4 +1,5 @@
1
1
  export declare function valueFieldHint(value: unknown): string;
2
2
  export declare function factKindShapeHints(entity: Readonly<Record<string, unknown>>): string[];
3
+ export declare function assertRuleSchemaArity(argumentNames: unknown, argumentTypes: unknown): void;
3
4
  export declare function validateFactModelingShape(entity: Readonly<Record<string, unknown>>): void;
4
5
  //# sourceMappingURL=strict-fact.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"strict-fact.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/strict-fact.ts"],"names":[],"mappings":"AAUA,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAarD;AAGD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxC,MAAM,EAAE,CA+EV;AAGD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxC,IAAI,CAuDN"}
1
+ {"version":3,"file":"strict-fact.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/strict-fact.ts"],"names":[],"mappings":"AAUA,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAarD;AAGD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxC,MAAM,EAAE,CA+EV;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,OAAO,GACrB,IAAI,CAUN;AAGD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACxC,IAAI,CA+CN"}
@@ -93,6 +93,13 @@ export function factKindShapeHints(entity) {
93
93
  ];
94
94
  return [];
95
95
  }
96
+ export function assertRuleSchemaArity(argumentNames, argumentTypes) {
97
+ if (!Array.isArray(argumentNames) ||
98
+ !Array.isArray(argumentTypes) ||
99
+ argumentNames.length !== argumentTypes.length) {
100
+ throw new Error("Entity validation failed: rule_schema argument_names and argument_types must have equal lengths");
101
+ }
102
+ }
96
103
  // implements REQ-kibi-operation-interface-parity
97
104
  export function validateFactModelingShape(entity) {
98
105
  const hints = factKindShapeHints(entity);
@@ -123,10 +130,6 @@ export function validateFactModelingShape(entity) {
123
130
  entity.rule_name.trim() === "") {
124
131
  throw new Error("Entity validation failed: fact_kind 'rule_schema' requires rule_name");
125
132
  }
126
- if (!Array.isArray(entity.argument_names) ||
127
- !Array.isArray(entity.argument_types) ||
128
- entity.argument_names.length !== entity.argument_types.length) {
129
- throw new Error("Entity validation failed: rule_schema argument_names and argument_types must have equal lengths");
130
- }
133
+ assertRuleSchemaArity(entity.argument_names, entity.argument_types);
131
134
  }
132
135
  }
@@ -0,0 +1,54 @@
1
+ export interface SymbolCompilerLockFileSystem {
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 SymbolCompilerLockOptions {
14
+ readonly timeoutMs?: number;
15
+ readonly now?: () => number;
16
+ readonly sleep?: (ms: number) => Promise<void>;
17
+ readonly fileSystem?: SymbolCompilerLockFileSystem;
18
+ readonly isProcessAlive?: (pid: number) => boolean;
19
+ }
20
+ export declare class SymbolCompilerLockError extends Error {
21
+ readonly name = "SymbolCompilerLockError";
22
+ }
23
+ export interface SymbolCompilerLockHandle {
24
+ /**
25
+ * Remove this handle's validated owner metadata and then its empty lock
26
+ * directory. Transient cleanup errors are retried; exhausted or permanent
27
+ * failures leave the lock fail-closed and may require verified manual
28
+ * cleanup. Successful release is idempotent, and a stale handle never
29
+ * removes a different owner token.
30
+ */
31
+ readonly release: () => void;
32
+ }
33
+ export declare function releaseSymbolCompilerLock(handle: SymbolCompilerLockHandle | undefined, operationFailure?: {
34
+ readonly error: unknown;
35
+ }, committed?: boolean): void;
36
+ /**
37
+ * Acquire the workspace symbol compiler lock without a callback shape, for
38
+ * operations whose lock must span several awaits (source publication,
39
+ * coordinate refresh, canonical re-extraction, and the RDF commit).
40
+ */
41
+ export declare function acquireSymbolCompilerLock(workspaceRoot: string, options?: SymbolCompilerLockOptions): Promise<SymbolCompilerLockHandle>;
42
+ /**
43
+ * Run `operation` while holding the workspace symbol compiler lock.
44
+ *
45
+ * Atomic directory creation is the lock authority. Owner metadata is
46
+ * release authorization and diagnostics: every existing target, including a
47
+ * legacy file or a directory with missing/corrupt metadata, blocks contenders
48
+ * until timeout. A well-formed owner record whose holder pid is provably
49
+ * dead is stolen immediately instead of blocking for the full timeout;
50
+ * corrupt metadata and live holders stay fail-closed.
51
+ * Release failures propagate so successful work is never reported unlocked.
52
+ */
53
+ export declare function withSymbolCompilerLock<T>(workspaceRoot: string, operation: () => Promise<T>, options?: SymbolCompilerLockOptions): Promise<T>;
54
+ //# sourceMappingURL=symbol-compiler-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-compiler-lock.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/symbol-compiler-lock.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,4BAA4B;IAC3C,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,yBAAyB;IACxC,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,4BAA4B,CAAC;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD;AAGD,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,SAAkB,IAAI,6BAA6B;CACpD;AA8MD,MAAM,WAAW,wBAAwB;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAGD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,wBAAwB,GAAG,SAAS,EAC5C,gBAAgB,CAAC,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,EAC9C,SAAS,UAAQ,GAChB,IAAI,CAoBN;AAED;;;;GAIG;AAEH,wBAAsB,yBAAyB,CAC7C,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,wBAAwB,CAAC,CA2InC;AAED;;;;;;;;;;GAUG;AAEH,wBAAsB,sBAAsB,CAAC,CAAC,EAC5C,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,CAAC,CAAC,CAWZ"}