kibi-cli 1.0.1 → 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 (450) hide show
  1. package/dist/cli-errors.d.ts +3 -1
  2. package/dist/cli-errors.d.ts.map +1 -1
  3. package/dist/cli-errors.js +4 -1
  4. package/dist/cli-json-command.d.ts +1 -0
  5. package/dist/cli-json-command.d.ts.map +1 -1
  6. package/dist/cli-json-command.js +13 -4
  7. package/dist/cli-operation-loader.js +3 -3
  8. package/dist/cli-operation-metadata.d.ts +4 -3
  9. package/dist/cli-operation-metadata.d.ts.map +1 -1
  10. package/dist/cli-operation-metadata.js +7 -5
  11. package/dist/cli-protocol.js +1 -1
  12. package/dist/cli-register-maintenance.d.ts.map +1 -1
  13. package/dist/cli-register-maintenance.js +7 -0
  14. package/dist/cli-register-proof.d.ts +3 -0
  15. package/dist/cli-register-proof.d.ts.map +1 -0
  16. package/dist/cli-register-proof.js +103 -0
  17. package/dist/cli-register-reporting.d.ts.map +1 -1
  18. package/dist/cli-register-reporting.js +1 -0
  19. package/dist/cli.d.ts +4 -0
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +17 -10
  22. package/dist/commands/branch.d.ts +1 -0
  23. package/dist/commands/branch.d.ts.map +1 -1
  24. package/dist/commands/branch.js +8 -4
  25. package/dist/commands/check.d.ts +14 -0
  26. package/dist/commands/check.d.ts.map +1 -1
  27. package/dist/commands/check.js +190 -44
  28. package/dist/commands/coverage.d.ts +1 -0
  29. package/dist/commands/coverage.d.ts.map +1 -1
  30. package/dist/commands/coverage.js +6 -0
  31. package/dist/commands/doctor.d.ts +22 -0
  32. package/dist/commands/doctor.d.ts.map +1 -1
  33. package/dist/commands/doctor.js +48 -22
  34. package/dist/commands/engine.d.ts +12 -0
  35. package/dist/commands/engine.d.ts.map +1 -1
  36. package/dist/commands/engine.js +40 -0
  37. package/dist/commands/github-init.d.ts +1 -0
  38. package/dist/commands/github-init.d.ts.map +1 -1
  39. package/dist/commands/github-init.js +9 -5
  40. package/dist/commands/init-helpers.d.ts.map +1 -1
  41. package/dist/commands/init-helpers.js +38 -5
  42. package/dist/commands/migrate.d.ts +4 -0
  43. package/dist/commands/migrate.d.ts.map +1 -1
  44. package/dist/commands/migrate.js +7 -7
  45. package/dist/commands/proof-migrate-legacy.d.ts +7 -0
  46. package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
  47. package/dist/commands/proof-migrate-legacy.js +45 -0
  48. package/dist/commands/proof-prune.d.ts +8 -0
  49. package/dist/commands/proof-prune.d.ts.map +1 -0
  50. package/dist/commands/proof-prune.js +53 -0
  51. package/dist/commands/prove.d.ts +37 -0
  52. package/dist/commands/prove.d.ts.map +1 -0
  53. package/dist/commands/prove.js +470 -0
  54. package/dist/commands/report.js +1 -1
  55. package/dist/commands/sync/discovery.d.ts +3 -0
  56. package/dist/commands/sync/discovery.d.ts.map +1 -1
  57. package/dist/commands/sync/discovery.js +36 -28
  58. package/dist/commands/sync/manifest.d.ts +1 -1
  59. package/dist/commands/sync/manifest.d.ts.map +1 -1
  60. package/dist/commands/sync/manifest.js +53 -21
  61. package/dist/commands/sync/persistence.d.ts +4 -1
  62. package/dist/commands/sync/persistence.d.ts.map +1 -1
  63. package/dist/commands/sync/persistence.js +25 -14
  64. package/dist/commands/sync/staging.d.ts +1 -0
  65. package/dist/commands/sync/staging.d.ts.map +1 -1
  66. package/dist/commands/sync/staging.js +5 -2
  67. package/dist/commands/sync/untracked-targets.d.ts +24 -0
  68. package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
  69. package/dist/commands/sync/untracked-targets.js +108 -0
  70. package/dist/commands/sync.d.ts +11 -1
  71. package/dist/commands/sync.d.ts.map +1 -1
  72. package/dist/commands/sync.js +74 -30
  73. package/dist/engine-daemon.d.ts +3 -1
  74. package/dist/engine-daemon.d.ts.map +1 -1
  75. package/dist/engine-daemon.js +49 -20
  76. package/dist/engine.d.ts +14 -76
  77. package/dist/engine.d.ts.map +1 -1
  78. package/dist/engine.js +197 -30
  79. package/dist/extractors/manifest.d.ts +5 -0
  80. package/dist/extractors/manifest.d.ts.map +1 -1
  81. package/dist/extractors/manifest.js +46 -1
  82. package/dist/extractors/markdown.d.ts +5 -3
  83. package/dist/extractors/markdown.d.ts.map +1 -1
  84. package/dist/extractors/markdown.js +41 -24
  85. package/dist/extractors/playwright-cases.js +1 -1
  86. package/dist/extractors/relationships.d.ts +6 -0
  87. package/dist/extractors/relationships.d.ts.map +1 -1
  88. package/dist/extractors/relationships.js +1 -1
  89. package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
  90. package/dist/extractors/symbols-ts.d.ts +1 -0
  91. package/dist/extractors/symbols-ts.d.ts.map +1 -1
  92. package/dist/extractors/symbols-ts.js +142 -67
  93. package/dist/intent-search.d.ts +1 -0
  94. package/dist/intent-search.d.ts.map +1 -1
  95. package/dist/intent-search.js +7 -3
  96. package/dist/logic/ir.d.ts +1 -0
  97. package/dist/logic/ir.d.ts.map +1 -1
  98. package/dist/logic/ir.js +1 -1
  99. package/dist/operations/bootstrap/activation.d.ts +2 -1
  100. package/dist/operations/bootstrap/activation.d.ts.map +1 -1
  101. package/dist/operations/bootstrap/activation.js +11 -3
  102. package/dist/operations/bootstrap/generate.d.ts +2 -1
  103. package/dist/operations/bootstrap/generate.d.ts.map +1 -1
  104. package/dist/operations/bootstrap/generate.js +6 -3
  105. package/dist/operations/bootstrap/guidance.d.ts +1 -0
  106. package/dist/operations/bootstrap/guidance.d.ts.map +1 -1
  107. package/dist/operations/bootstrap/guidance.js +1 -1
  108. package/dist/operations/modeling/model-requirement.d.ts +5 -0
  109. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  110. package/dist/operations/modeling/model-requirement.js +53 -46
  111. package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -1
  112. package/dist/operations/modeling/predicate-applicability.js +103 -4
  113. package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
  114. package/dist/operations/modeling/predicate-catalog-2.js +18 -2
  115. package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
  116. package/dist/operations/modeling/predicate-catalog-3.js +17 -1
  117. package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
  118. package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
  119. package/dist/operations/modeling/predicate-catalog-5.js +291 -0
  120. package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
  121. package/dist/operations/modeling/predicate-catalog.js +4 -0
  122. package/dist/operations/modeling/predicate-loader.d.ts +1 -0
  123. package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
  124. package/dist/operations/modeling/predicate-loader.js +4 -3
  125. package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
  126. package/dist/operations/modeling/predicate-ranker.js +4 -1
  127. package/dist/operations/modeling/predicate-types.d.ts +1 -1
  128. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  129. package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
  130. package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
  131. package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
  132. package/dist/operations/modeling/suggest-predicates.d.ts +3 -1
  133. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  134. package/dist/operations/modeling/suggest-predicates.js +52 -19
  135. package/dist/operations/mutation/contradictions.d.ts +2 -1
  136. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  137. package/dist/operations/mutation/contradictions.js +26 -5
  138. package/dist/operations/mutation/delete.d.ts +3 -0
  139. package/dist/operations/mutation/delete.d.ts.map +1 -1
  140. package/dist/operations/mutation/delete.js +100 -32
  141. package/dist/operations/mutation/relationships.d.ts +1 -0
  142. package/dist/operations/mutation/relationships.d.ts.map +1 -1
  143. package/dist/operations/mutation/relationships.js +6 -4
  144. package/dist/operations/mutation/saga.d.ts +51 -0
  145. package/dist/operations/mutation/saga.d.ts.map +1 -0
  146. package/dist/operations/mutation/saga.js +67 -0
  147. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  148. package/dist/operations/mutation/serialization.js +3 -2
  149. package/dist/operations/mutation/source-authoring.d.ts +5 -1
  150. package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
  151. package/dist/operations/mutation/source-authoring.js +79 -46
  152. package/dist/operations/mutation/strict-fact.d.ts +1 -0
  153. package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
  154. package/dist/operations/mutation/strict-fact.js +8 -5
  155. package/dist/operations/mutation/symbol-compiler-lock.d.ts +5 -2
  156. package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -1
  157. package/dist/operations/mutation/symbol-compiler-lock.js +65 -2
  158. package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
  159. package/dist/operations/mutation/symbol-granularity.js +2 -2
  160. package/dist/operations/mutation/symbol-refresh.d.ts +1 -0
  161. package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
  162. package/dist/operations/mutation/symbol-refresh.js +10 -8
  163. package/dist/operations/mutation/upsert.d.ts +18 -2
  164. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  165. package/dist/operations/mutation/upsert.js +86 -54
  166. package/dist/operations/mutation/validate-upsert.js +2 -2
  167. package/dist/operations/mutation/validation.d.ts.map +1 -1
  168. package/dist/operations/mutation/validation.js +46 -4
  169. package/dist/operations/mutation/warnings.d.ts +1 -0
  170. package/dist/operations/mutation/warnings.d.ts.map +1 -1
  171. package/dist/operations/mutation/warnings.js +7 -5
  172. package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
  173. package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
  174. package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
  175. package/dist/operations/planning/apply-plan.d.ts +8 -106
  176. package/dist/operations/planning/apply-plan.d.ts.map +1 -1
  177. package/dist/operations/planning/apply-plan.js +113 -36
  178. package/dist/operations/planning/compile-intent.d.ts +2 -0
  179. package/dist/operations/planning/compile-intent.d.ts.map +1 -1
  180. package/dist/operations/planning/compile-intent.js +70 -14
  181. package/dist/operations/proof/ingest-proof.d.ts +34 -0
  182. package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
  183. package/dist/operations/proof/ingest-proof.js +307 -0
  184. package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
  185. package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
  186. package/dist/operations/proof/migrate-legacy-receipts.js +88 -0
  187. package/dist/operations/proof/prune-receipts.d.ts +35 -0
  188. package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
  189. package/dist/operations/proof/prune-receipts.js +91 -0
  190. package/dist/operations/proof/receipt-document.d.ts +29 -0
  191. package/dist/operations/proof/receipt-document.d.ts.map +1 -0
  192. package/dist/operations/proof/receipt-document.js +117 -0
  193. package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
  194. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  195. package/dist/operations/semantic-advisor/analyze-prose.js +46 -26
  196. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  197. package/dist/operations/semantic-advisor/clauses.js +20 -7
  198. package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
  199. package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
  200. package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
  201. package/dist/prolog/codec.d.ts +13 -1
  202. package/dist/prolog/codec.d.ts.map +1 -1
  203. package/dist/prolog/codec.js +269 -154
  204. package/dist/prolog/error-terms.d.ts +47 -0
  205. package/dist/prolog/error-terms.d.ts.map +1 -0
  206. package/dist/prolog/error-terms.js +334 -0
  207. package/dist/prolog/janitor.d.ts +50 -0
  208. package/dist/prolog/janitor.d.ts.map +1 -0
  209. package/dist/prolog/janitor.js +154 -0
  210. package/dist/prolog/store-lock.d.ts +45 -0
  211. package/dist/prolog/store-lock.d.ts.map +1 -0
  212. package/dist/prolog/store-lock.js +195 -0
  213. package/dist/prolog.d.ts +7 -0
  214. package/dist/prolog.d.ts.map +1 -1
  215. package/dist/prolog.js +55 -17
  216. package/dist/proof/evaluate.d.ts +27 -0
  217. package/dist/proof/evaluate.d.ts.map +1 -0
  218. package/dist/proof/evaluate.js +151 -0
  219. package/dist/proof/inspect.d.ts +12 -0
  220. package/dist/proof/inspect.d.ts.map +1 -0
  221. package/dist/proof/inspect.js +236 -0
  222. package/dist/proof/integrations.d.ts +35 -0
  223. package/dist/proof/integrations.d.ts.map +1 -0
  224. package/dist/proof/integrations.js +123 -0
  225. package/dist/proof/producers/junit-adapter.d.ts +26 -0
  226. package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
  227. package/dist/proof/producers/junit-adapter.js +186 -0
  228. package/dist/{public → proof/producers}/playwright-case-id.d.ts +1 -1
  229. package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
  230. package/dist/{public → proof/producers}/playwright-case-id.js +3 -3
  231. package/dist/proof/producers/playwright-reporter.d.ts +27 -0
  232. package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
  233. package/dist/proof/producers/playwright-reporter.js +138 -0
  234. package/dist/proof/producers/tap-adapter.d.ts +10 -0
  235. package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
  236. package/dist/proof/producers/tap-adapter.js +200 -0
  237. package/dist/proof/receipt-outcome.d.ts +2 -0
  238. package/dist/proof/receipt-outcome.d.ts.map +1 -0
  239. package/dist/proof/receipt-outcome.js +1 -0
  240. package/dist/public/diagnostic-usage.js +6 -6
  241. package/dist/public/distribution-parity.d.ts +7 -1
  242. package/dist/public/distribution-parity.d.ts.map +1 -1
  243. package/dist/public/distribution-parity.js +15 -10
  244. package/dist/public/impact/coverage-depth-quality.d.ts +1 -0
  245. package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
  246. package/dist/public/impact/coverage-depth-quality.js +1 -1
  247. package/dist/public/impact/diagnostics.d.ts.map +1 -1
  248. package/dist/public/impact/diagnostics.js +2 -2
  249. package/dist/public/impact/diff-meaning.d.ts +1 -0
  250. package/dist/public/impact/diff-meaning.d.ts.map +1 -1
  251. package/dist/public/impact/diff-meaning.js +5 -2
  252. package/dist/public/impact/full-kb-quality.d.ts +5 -2
  253. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  254. package/dist/public/impact/full-kb-quality.js +329 -64
  255. package/dist/public/operations/catalog.d.ts +447 -196
  256. package/dist/public/operations/catalog.d.ts.map +1 -1
  257. package/dist/public/operations/catalog.js +6 -4
  258. package/dist/public/operations/check-executor.d.ts.map +1 -1
  259. package/dist/public/operations/check-executor.js +3 -7
  260. package/dist/public/operations/contracts.d.ts +7 -0
  261. package/dist/public/operations/contracts.d.ts.map +1 -1
  262. package/dist/public/operations/contracts.js +31 -22
  263. package/dist/public/operations/discovery-entities.d.ts +3 -0
  264. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  265. package/dist/public/operations/discovery-entities.js +4 -0
  266. package/dist/public/operations/discovery-executors.d.ts +9 -9
  267. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  268. package/dist/public/operations/discovery-executors.js +17 -14
  269. package/dist/public/operations/index.d.ts +1 -1
  270. package/dist/public/operations/index.d.ts.map +1 -1
  271. package/dist/public/operations/index.js +1 -1
  272. package/dist/public/operations/migration-plan.d.ts +4 -3
  273. package/dist/public/operations/migration-plan.d.ts.map +1 -1
  274. package/dist/public/operations/migration-plan.js +23 -21
  275. package/dist/public/operations/node-ports.js +6 -6
  276. package/dist/public/operations/repair-plan.d.ts +3 -3
  277. package/dist/public/operations/repair-plan.d.ts.map +1 -1
  278. package/dist/public/operations/repair-plan.js +49 -19
  279. package/dist/public/operations/result-envelope.d.ts +1 -0
  280. package/dist/public/operations/result-envelope.d.ts.map +1 -1
  281. package/dist/public/operations/result-envelope.js +12 -10
  282. package/dist/public/operations/runtime-types.d.ts +5 -0
  283. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  284. package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
  285. package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
  286. package/dist/public/operations/specs/check-rules.generated.js +34 -0
  287. package/dist/public/operations/specs/check.d.ts +7 -2
  288. package/dist/public/operations/specs/check.d.ts.map +1 -1
  289. package/dist/public/operations/specs/check.js +8 -20
  290. package/dist/public/operations/specs/mutation-schemas.d.ts +257 -163
  291. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  292. package/dist/public/operations/specs/mutation-schemas.js +15 -7
  293. package/dist/public/operations/specs/planning.d.ts +9 -0
  294. package/dist/public/operations/specs/planning.d.ts.map +1 -1
  295. package/dist/public/operations/specs/planning.js +6 -0
  296. package/dist/public/operations/specs/proof.d.ts +212 -0
  297. package/dist/public/operations/specs/proof.d.ts.map +1 -0
  298. package/dist/public/operations/specs/proof.js +30 -0
  299. package/dist/public/operations/specs/reporting.d.ts +19 -0
  300. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  301. package/dist/public/operations/specs/reporting.js +112 -12
  302. package/dist/public/operations/specs/upsert.d.ts +257 -163
  303. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  304. package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
  305. package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
  306. package/dist/public/operations/symbol-repair-plan.js +118 -3
  307. package/dist/public/operations/types.d.ts +1 -1
  308. package/dist/public/operations/types.d.ts.map +1 -1
  309. package/dist/public/proof-fingerprint.d.ts +54 -0
  310. package/dist/public/proof-fingerprint.d.ts.map +1 -0
  311. package/dist/public/proof-fingerprint.js +141 -0
  312. package/dist/public/proof-protocol.d.ts +354 -0
  313. package/dist/public/proof-protocol.d.ts.map +1 -0
  314. package/dist/public/proof-protocol.js +454 -0
  315. package/dist/public/proof-receipt.d.ts +279 -0
  316. package/dist/public/proof-receipt.d.ts.map +1 -0
  317. package/dist/public/proof-receipt.js +377 -0
  318. package/dist/public/schemas/entity.d.ts.map +1 -1
  319. package/dist/public/schemas/entity.js +21 -7
  320. package/dist/public/skills/kibi-freshness/SKILL.md +1 -1
  321. package/dist/public/skills/kibi-usage/SKILL.md +41 -12
  322. package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
  323. package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
  324. package/dist/public/skills/kibi-usage/resources/workflows.md +6 -6
  325. package/dist/public/symbol-granularity.d.ts +3 -14
  326. package/dist/public/symbol-granularity.d.ts.map +1 -1
  327. package/dist/public/symbol-granularity.generated.d.ts +16 -0
  328. package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
  329. package/dist/public/symbol-granularity.generated.js +20 -0
  330. package/dist/public/symbol-granularity.js +6 -47
  331. package/dist/public/telemetry-acceptance.d.ts +3 -77
  332. package/dist/public/telemetry-acceptance.d.ts.map +1 -1
  333. package/dist/public/telemetry-acceptance.js +4 -2
  334. package/dist/public/telemetry-remediation.js +1 -1
  335. package/dist/report/html-report.css +282 -0
  336. package/dist/report/html-report.d.ts +4 -2
  337. package/dist/report/html-report.d.ts.map +1 -1
  338. package/dist/report/html-report.js +37 -300
  339. package/dist/runtime/cli-runtime.d.ts +2 -0
  340. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  341. package/dist/runtime/cli-runtime.js +14 -7
  342. package/dist/schemas/entity.schema.json +355 -215
  343. package/dist/search-ranking.d.ts +1 -0
  344. package/dist/search-ranking.d.ts.map +1 -1
  345. package/dist/search-ranking.js +3 -0
  346. package/dist/traceability/evidence-model.d.ts +28 -0
  347. package/dist/traceability/evidence-model.d.ts.map +1 -1
  348. package/dist/traceability/git-staged.d.ts +20 -0
  349. package/dist/traceability/git-staged.d.ts.map +1 -1
  350. package/dist/traceability/git-staged.js +145 -1
  351. package/dist/traceability/staged-diagnostics.d.ts +7 -0
  352. package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
  353. package/dist/traceability/staged-diagnostics.js +78 -7
  354. package/dist/traceability/staged-file-coverage.d.ts +33 -0
  355. package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
  356. package/dist/traceability/staged-file-coverage.js +284 -0
  357. package/dist/traceability/staged-impact-contract.js +4 -4
  358. package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
  359. package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
  360. package/dist/traceability/staged-symbols-manifest.js +138 -27
  361. package/dist/traceability/symbol-extract.d.ts +5 -0
  362. package/dist/traceability/symbol-extract.d.ts.map +1 -1
  363. package/dist/traceability/symbol-extract.js +1 -1
  364. package/dist/traceability/temp-kb.d.ts +2 -0
  365. package/dist/traceability/temp-kb.d.ts.map +1 -1
  366. package/dist/traceability/temp-kb.js +13 -4
  367. package/dist/types/entities.d.ts +5 -3
  368. package/dist/types/entities.d.ts.map +1 -1
  369. package/dist/utils/branch-resolver.d.ts +1 -0
  370. package/dist/utils/branch-resolver.d.ts.map +1 -1
  371. package/dist/utils/branch-resolver.js +7 -4
  372. package/dist/utils/branch-store.d.ts +6 -0
  373. package/dist/utils/branch-store.d.ts.map +1 -1
  374. package/dist/utils/branch-store.js +27 -0
  375. package/dist/utils/kb-paths.d.ts +1 -1
  376. package/dist/utils/kb-paths.d.ts.map +1 -1
  377. package/dist/utils/kb-paths.js +1 -1
  378. package/dist/utils/rule-registry.d.ts +1 -11
  379. package/dist/utils/rule-registry.d.ts.map +1 -1
  380. package/dist/utils/rule-registry.generated.d.ts +97 -0
  381. package/dist/utils/rule-registry.generated.d.ts.map +1 -0
  382. package/dist/utils/rule-registry.generated.js +125 -0
  383. package/dist/utils/rule-registry.js +12 -113
  384. package/dist/utils/strict-modeling.d.ts +1 -0
  385. package/dist/utils/strict-modeling.d.ts.map +1 -1
  386. package/dist/utils/strict-modeling.js +1 -1
  387. package/package.json +8 -11
  388. package/src/public/diagnostic-usage.ts +6 -6
  389. package/src/public/distribution-parity.ts +17 -10
  390. package/src/public/impact/coverage-depth-quality.ts +1 -1
  391. package/src/public/impact/diagnostics.ts +2 -1
  392. package/src/public/impact/diff-meaning.ts +11 -4
  393. package/src/public/impact/full-kb-quality.ts +463 -72
  394. package/src/public/operations/catalog.ts +10 -4
  395. package/src/public/operations/check-executor.ts +3 -7
  396. package/src/public/operations/contracts.ts +38 -22
  397. package/src/public/operations/discovery-entities.ts +7 -0
  398. package/src/public/operations/discovery-executors.ts +26 -23
  399. package/src/public/operations/index.ts +1 -1
  400. package/src/public/operations/migration-plan.ts +32 -25
  401. package/src/public/operations/node-ports.ts +6 -6
  402. package/src/public/operations/repair-plan.ts +60 -23
  403. package/src/public/operations/result-envelope.ts +15 -10
  404. package/src/public/operations/runtime-types.ts +5 -0
  405. package/src/public/operations/specs/check-rules.generated.ts +37 -0
  406. package/src/public/operations/specs/check.ts +12 -21
  407. package/src/public/operations/specs/mutation-schemas.ts +22 -9
  408. package/src/public/operations/specs/planning.ts +7 -0
  409. package/src/public/operations/specs/proof.ts +43 -0
  410. package/src/public/operations/specs/reporting.ts +140 -13
  411. package/src/public/operations/symbol-repair-plan.ts +163 -3
  412. package/src/public/operations/types.ts +1 -1
  413. package/src/public/proof-fingerprint.ts +216 -0
  414. package/src/public/proof-protocol-types.d.ts +96 -0
  415. package/src/public/proof-protocol.ts +589 -0
  416. package/src/public/proof-receipt.ts +499 -0
  417. package/src/public/schemas/entity.ts +26 -10
  418. package/src/public/skills/kibi-freshness/SKILL.md +1 -1
  419. package/src/public/skills/kibi-usage/SKILL.md +41 -12
  420. package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
  421. package/src/public/skills/kibi-usage/resources/proof.md +105 -0
  422. package/src/public/skills/kibi-usage/resources/workflows.md +6 -6
  423. package/src/public/symbol-granularity.generated.ts +41 -0
  424. package/src/public/symbol-granularity.ts +35 -60
  425. package/src/public/telemetry-acceptance-types.d.ts +98 -0
  426. package/src/public/telemetry-acceptance.ts +22 -100
  427. package/src/public/telemetry-remediation.ts +1 -1
  428. package/src/schemas/entity.schema.json +355 -215
  429. package/dist/cli-register-verification.d.ts +0 -3
  430. package/dist/cli-register-verification.d.ts.map +0 -1
  431. package/dist/cli-register-verification.js +0 -16
  432. package/dist/commands/verify.d.ts +0 -10
  433. package/dist/commands/verify.d.ts.map +0 -1
  434. package/dist/commands/verify.js +0 -126
  435. package/dist/operations/verification/ingest-verification.d.ts +0 -29
  436. package/dist/operations/verification/ingest-verification.d.ts.map +0 -1
  437. package/dist/operations/verification/ingest-verification.js +0 -192
  438. package/dist/public/operations/specs/verification.d.ts +0 -78
  439. package/dist/public/operations/specs/verification.d.ts.map +0 -1
  440. package/dist/public/operations/specs/verification.js +0 -62
  441. package/dist/public/playwright-case-id.d.ts.map +0 -1
  442. package/dist/public/verification-receipt.d.ts +0 -242
  443. package/dist/public/verification-receipt.d.ts.map +0 -1
  444. package/dist/public/verification-receipt.js +0 -296
  445. package/dist/verification/playwright-reporter.d.ts +0 -21
  446. package/dist/verification/playwright-reporter.d.ts.map +0 -1
  447. package/dist/verification/playwright-reporter.js +0 -114
  448. package/src/public/operations/specs/verification.ts +0 -78
  449. package/src/public/playwright-case-id.ts +0 -35
  450. package/src/public/verification-receipt.ts +0 -412
@@ -22,20 +22,21 @@ import { isCliTraceOrDebugEnabled } from "../env.js";
22
22
  import { extractFromManifest, extractFromManifestString, } from "../extractors/manifest.js";
23
23
  import { extractFromMarkdownString, } from "../extractors/markdown.js";
24
24
  import { PrologProcess } from "../prolog.js";
25
- import { escapeAtom, parseTriples, parseViolationRows, } from "../prolog/codec.js";
25
+ import { escapeAtom, normalizeEntityId, parseTriples, parseViolationRows, } from "../prolog/codec.js";
26
26
  import { createSemanticReviewDiagnostics, createSymbolGranularityDiagnostics, createSymbolQualityDiagnostics, hasBlockingImpactDiagnostics, } from "../public/impact-diagnostics.js";
27
27
  import { executeCheck } from "../public/operations/check-executor.js";
28
28
  import { KIBI_NO_IMPACT_DECLARATION, KIBI_SYMBOLS_MANIFEST_PATH, KIBI_SYMBOL_COORDINATES_PATH, } from "../traceability/evidence-model.js";
29
- import { getStagedFiles } from "../traceability/git-staged.js";
29
+ import { getStagedInventory, supportedStagedFiles, } from "../traceability/git-staged.js";
30
30
  import { validateStagedMarkdown } from "../traceability/markdown-validate.js";
31
31
  import { collectStagedKibiDiagnostics, } from "../traceability/staged-diagnostics.js";
32
+ import { analyzeStagedFileCoverage, } from "../traceability/staged-file-coverage.js";
32
33
  import { classifyKibiImpactEvidence, isBehaviorSourceEdit, parseKibiImpactOverride, } from "../traceability/staged-impact-contract.js";
33
34
  import { assessStagedSymbolsManifest, collectStagedAuthoredSymbolsManifestEvidence, } from "../traceability/staged-symbols-manifest.js";
34
35
  import { createManifestLookupSentinelKey, extractSymbolsFromStagedFile, } from "../traceability/symbol-extract.js";
35
36
  import { cleanupTempKb, consultOverlay, createOverlayFacts, createTempKb, projectStagedEntities, } from "../traceability/temp-kb.js";
36
37
  import { formatViolations as formatStagedViolations, validateStagedSymbols, } from "../traceability/validate.js";
37
38
  import { resolveBranchAttachment } from "../utils/branch-resolver.js";
38
- import { CANONICAL_ENTITY_PATHS } from "../utils/kb-paths.js";
39
+ import { CANONICAL_ENTITY_PATHS, isEntityLanePath } from "../utils/kb-paths.js";
39
40
  import { safeCleanupProlog } from "../utils/prolog-cleanup.js";
40
41
  function getMatchGroup(match, index = 1) {
41
42
  const value = match?.[index];
@@ -198,6 +199,9 @@ function formatStagedKibiDiagnostics(diagnostics) {
198
199
  if (diagnostic.files.length > 0) {
199
200
  lines.push(` Files: ${diagnostic.files.join(", ")}`);
200
201
  }
202
+ for (const detail of diagnostic.details ?? []) {
203
+ lines.push(` Detail: ${detail}`);
204
+ }
201
205
  if (diagnostic.docs.length > 0) {
202
206
  lines.push(` Docs: ${diagnostic.docs.join(", ")}`);
203
207
  }
@@ -239,6 +243,66 @@ function printStructuredCheckResult(input) {
239
243
  },
240
244
  }));
241
245
  }
246
+ function formatStagedCoverage(result) {
247
+ const counts = {
248
+ symbol: result.files.filter((file) => file.analysisDepth === "symbol")
249
+ .length,
250
+ metadata: result.files.filter((file) => file.analysisDepth === "metadata")
251
+ .length,
252
+ file: result.files.filter((file) => file.analysisDepth === "file").length,
253
+ skipped: result.files.filter((file) => file.disposition === "skipped")
254
+ .length,
255
+ };
256
+ const lines = [
257
+ `Staged files: ${result.files.length} total; ${counts.symbol} symbol-level; ${counts.metadata} metadata; ${counts.file} file-level; ${counts.skipped} skipped.`,
258
+ ];
259
+ for (const file of result.files) {
260
+ const details = [file.analysisDepth, file.disposition];
261
+ if (file.reason)
262
+ details.push(file.reason);
263
+ if (file.requirementIds.length > 0) {
264
+ details.push(`requirements: ${file.requirementIds.join(", ")}`);
265
+ }
266
+ if (file.evidencePaths.length > 0) {
267
+ details.push(`evidence: ${file.evidencePaths.join(", ")}`);
268
+ }
269
+ lines.push(` ${file.status} ${file.path} [${details.join("; ")}]`);
270
+ }
271
+ if (result.diagnostics.length > 0) {
272
+ lines.push("", `Advisory staged-file diagnostics (${result.diagnostics.length}):`);
273
+ for (const diagnostic of result.diagnostics) {
274
+ lines.push(` [${diagnostic.id}] ${diagnostic.message}`);
275
+ lines.push(` Suggestion: ${diagnostic.suggestion}`);
276
+ }
277
+ }
278
+ return lines.join("\n");
279
+ }
280
+ function printStagedResult(input) {
281
+ const violations = input.violations ?? [];
282
+ const qualityDiagnostics = input.qualityDiagnostics ?? [];
283
+ if (input.format === "json") {
284
+ console.log(JSON.stringify({
285
+ structuredContent: {
286
+ violations,
287
+ count: violations.length,
288
+ diagnostics: input.coverage?.diagnostics ?? [],
289
+ qualityDiagnostics,
290
+ staged: input.coverage,
291
+ messages: input.messages ?? [],
292
+ ...(input.operationalError
293
+ ? { operationalError: input.operationalError }
294
+ : {}),
295
+ },
296
+ }));
297
+ return;
298
+ }
299
+ if (input.coverage)
300
+ console.log(formatStagedCoverage(input.coverage));
301
+ for (const message of input.messages ?? [])
302
+ console.log(message);
303
+ if (input.operationalError)
304
+ console.error(input.operationalError);
305
+ }
242
306
  function uniqueSorted(values) {
243
307
  return Array.from(new Set(values)).sort();
244
308
  }
@@ -327,6 +391,9 @@ function buildStagedKibiImpactEvidence(options) {
327
391
  path: stagedSymbolsManifest.path,
328
392
  state: stagedSymbolsManifest.state,
329
393
  sourcePaths: stagedSymbolsManifest.sourcePaths,
394
+ ...(stagedSymbolsManifest.fileDetails
395
+ ? { fileDetails: stagedSymbolsManifest.fileDetails }
396
+ : {}),
330
397
  },
331
398
  mode: resolvedKbArtifacts.length > 0
332
399
  ? { kind: "kb_changes", kbArtifacts: resolvedKbArtifacts }
@@ -335,6 +402,13 @@ function buildStagedKibiImpactEvidence(options) {
335
402
  : { kind: "missing" },
336
403
  };
337
404
  }
405
+ export function requireActiveProlog(engine, prolog) {
406
+ const activeProlog = engine ?? prolog;
407
+ if (activeProlog == null) {
408
+ throw new Error("Prolog runtime not initialized");
409
+ }
410
+ return activeProlog;
411
+ }
338
412
  // implements REQ-006
339
413
  export async function checkCommand(options) {
340
414
  let prolog = null;
@@ -358,17 +432,27 @@ export async function checkCommand(options) {
358
432
  }
359
433
  if (options.staged) {
360
434
  const minLinks = options.minLinks ? Number(options.minLinks) : 1;
435
+ let stagedCoverage = null;
361
436
  let tempCtx = null;
362
437
  try {
363
- const stagedFiles = getStagedFiles();
364
- if (!stagedFiles || stagedFiles.length === 0) {
365
- console.log("No staged files found.");
438
+ const stagedInventory = getStagedInventory();
439
+ stagedCoverage = analyzeStagedFileCoverage(stagedInventory);
440
+ const stagedFiles = supportedStagedFiles(stagedInventory);
441
+ if (stagedInventory.length === 0) {
442
+ printStagedResult({
443
+ format: options.format,
444
+ coverage: stagedCoverage,
445
+ messages: ["No staged files found."],
446
+ });
366
447
  return { exitCode: 0 };
367
448
  }
368
449
  const { manifestLookup, manifestResults, authoredSymbolResults, stagedAuthoredSymbolResults, } = buildManifestLookup(stagedFiles);
369
450
  const symbolsManifestPath = KIBI_SYMBOLS_MANIFEST_PATH;
370
- const sourceFiles = stagedFiles.filter((file) => !file.path.endsWith(".md") && !isStagedManifestPath(file.path));
371
- const markdownFiles = stagedFiles.filter((f) => f.path.endsWith(".md"));
451
+ const symbolPaths = new Set(stagedInventory
452
+ .filter((file) => file.analysisDepth === "symbol")
453
+ .map((file) => file.path));
454
+ const sourceFiles = stagedFiles.filter((file) => symbolPaths.has(file.path));
455
+ const markdownFiles = stagedFiles.filter((file) => file.path.endsWith(".md") && isEntityLanePath(file.path));
372
456
  const markdownErrors = [];
373
457
  for (const f of markdownFiles) {
374
458
  const result = validateStagedMarkdown(f.path, f.content || "");
@@ -377,11 +461,18 @@ export async function checkCommand(options) {
377
461
  }
378
462
  }
379
463
  if (markdownErrors.length > 0) {
380
- console.log("Found embedded entity violations in staged markdown files:");
381
- for (const err of markdownErrors) {
382
- console.log(err);
383
- console.log();
384
- }
464
+ printStagedResult({
465
+ format: options.format,
466
+ coverage: stagedCoverage,
467
+ violations: markdownErrors.map((message) => ({
468
+ rule: "staged-markdown",
469
+ message,
470
+ })),
471
+ messages: [
472
+ "Found embedded entity violations in staged markdown files:",
473
+ ...markdownErrors,
474
+ ],
475
+ });
385
476
  if (options.dryRun) {
386
477
  return { exitCode: 0 };
387
478
  }
@@ -402,7 +493,9 @@ export async function checkCommand(options) {
402
493
  }
403
494
  }
404
495
  catch (e) {
405
- console.error(`Error extracting symbols from staged file ${f.path}: ${e instanceof Error ? e.message : String(e)}`);
496
+ const message = `Error extracting symbols from staged file ${f.path}: ${e instanceof Error ? e.message : String(e)}`;
497
+ if (options.format !== "json")
498
+ console.error(message);
406
499
  }
407
500
  }
408
501
  const markdownResultsByPath = new Map();
@@ -453,7 +546,12 @@ export async function checkCommand(options) {
453
546
  }), ...createSemanticReviewDiagnostics({ symbolsByFile }));
454
547
  if (allSymbols.length === 0 && stagedEntityResults.length === 0) {
455
548
  if (stagedKibiDiagnostics.length > 0) {
456
- console.log(formatStagedKibiDiagnostics(stagedKibiDiagnostics));
549
+ printStagedResult({
550
+ format: options.format,
551
+ coverage: stagedCoverage,
552
+ qualityDiagnostics: stagedKibiDiagnostics,
553
+ messages: [formatStagedKibiDiagnostics(stagedKibiDiagnostics)],
554
+ });
457
555
  if (options.dryRun) {
458
556
  return { exitCode: 0 };
459
557
  }
@@ -463,12 +561,23 @@ export async function checkCommand(options) {
463
561
  : 0,
464
562
  };
465
563
  }
466
- console.log("No exported symbols or staged entities found in staged files.");
564
+ printStagedResult({
565
+ format: options.format,
566
+ coverage: stagedCoverage,
567
+ messages: [
568
+ "No exported symbols or staged entities found in staged files.",
569
+ ],
570
+ });
467
571
  return { exitCode: 0 };
468
572
  }
469
573
  if (allSymbols.length === 0) {
470
574
  if (stagedKibiDiagnostics.length > 0) {
471
- console.log(formatStagedKibiDiagnostics(stagedKibiDiagnostics));
575
+ printStagedResult({
576
+ format: options.format,
577
+ coverage: stagedCoverage,
578
+ qualityDiagnostics: stagedKibiDiagnostics,
579
+ messages: [formatStagedKibiDiagnostics(stagedKibiDiagnostics)],
580
+ });
472
581
  if (options.dryRun) {
473
582
  return { exitCode: 0 };
474
583
  }
@@ -478,7 +587,11 @@ export async function checkCommand(options) {
478
587
  : 0,
479
588
  };
480
589
  }
481
- console.log("✓ No violations found in staged files.");
590
+ printStagedResult({
591
+ format: options.format,
592
+ coverage: stagedCoverage,
593
+ messages: ["✓ No violations found in staged files."],
594
+ });
482
595
  return { exitCode: 0 };
483
596
  }
484
597
  // Create temp KB
@@ -496,12 +609,19 @@ export async function checkCommand(options) {
496
609
  prolog: tempCtx.prolog,
497
610
  });
498
611
  const violationsFormatted = formatStagedViolations(violationsRaw);
499
- if (stagedKibiDiagnostics.length > 0) {
500
- console.log(formatStagedKibiDiagnostics(stagedKibiDiagnostics));
501
- console.log();
502
- }
503
612
  if (violationsRaw && violationsRaw.length > 0) {
504
- console.log(violationsFormatted);
613
+ printStagedResult({
614
+ format: options.format,
615
+ coverage: stagedCoverage,
616
+ violations: violationsRaw,
617
+ qualityDiagnostics: stagedKibiDiagnostics,
618
+ messages: [
619
+ ...(stagedKibiDiagnostics.length > 0
620
+ ? [formatStagedKibiDiagnostics(stagedKibiDiagnostics)]
621
+ : []),
622
+ violationsFormatted,
623
+ ],
624
+ });
505
625
  await cleanupTempKb(tempCtx.tempDir);
506
626
  if (options.dryRun) {
507
627
  return { exitCode: 0 };
@@ -510,23 +630,38 @@ export async function checkCommand(options) {
510
630
  }
511
631
  if (stagedKibiDiagnostics.length > 0) {
512
632
  await cleanupTempKb(tempCtx.tempDir);
633
+ const blocking = hasBlockingImpactDiagnostics(stagedKibiDiagnostics);
634
+ printStagedResult({
635
+ format: options.format,
636
+ coverage: stagedCoverage,
637
+ qualityDiagnostics: stagedKibiDiagnostics,
638
+ messages: [
639
+ formatStagedKibiDiagnostics(stagedKibiDiagnostics),
640
+ ...(!blocking
641
+ ? ["✓ No violations found in staged symbols."]
642
+ : []),
643
+ ],
644
+ });
513
645
  if (options.dryRun) {
514
646
  return { exitCode: 0 };
515
647
  }
516
- if (!hasBlockingImpactDiagnostics(stagedKibiDiagnostics)) {
517
- console.log("✓ No violations found in staged symbols.");
648
+ if (!blocking) {
518
649
  return { exitCode: 0 };
519
650
  }
520
651
  return {
521
652
  exitCode: 1,
522
653
  };
523
654
  }
524
- console.log("✓ No violations found in staged symbols.");
655
+ printStagedResult({
656
+ format: options.format,
657
+ coverage: stagedCoverage,
658
+ messages: ["✓ No violations found in staged symbols."],
659
+ });
525
660
  await cleanupTempKb(tempCtx.tempDir);
526
661
  return { exitCode: 0 };
527
662
  }
528
663
  catch (err) {
529
- console.error(`Error running staged validation: ${err instanceof Error ? err.message : String(err)}`);
664
+ const message = `Error running staged validation: ${err instanceof Error ? err.message : String(err)}`;
530
665
  if (tempCtx) {
531
666
  try {
532
667
  await cleanupTempKb(tempCtx.tempDir);
@@ -535,6 +670,11 @@ export async function checkCommand(options) {
535
670
  // best-effort: temp directory may already be cleaned up
536
671
  }
537
672
  }
673
+ printStagedResult({
674
+ format: options.format,
675
+ coverage: stagedCoverage,
676
+ operationalError: message,
677
+ });
538
678
  return { exitCode: 1 };
539
679
  }
540
680
  }
@@ -561,10 +701,7 @@ export async function checkCommand(options) {
561
701
  }
562
702
  attached = true;
563
703
  }
564
- const activeProlog = engine ?? prolog;
565
- if (!activeProlog) {
566
- throw new Error("Prolog runtime not initialized");
567
- }
704
+ const activeProlog = requireActiveProlog(engine, prolog);
568
705
  const rules = options.rules
569
706
  ?.split(",")
570
707
  .map((rule) => rule.trim())
@@ -575,6 +712,9 @@ export async function checkCommand(options) {
575
712
  clock: () => new Date(),
576
713
  prolog: {
577
714
  query: (goal) => activeProlog.query(goal),
715
+ ...(activeProlog instanceof EngineClient
716
+ ? { queryEntities: activeProlog.queryEntities.bind(activeProlog) }
717
+ : {}),
578
718
  nextSolution: async () => null,
579
719
  invalidateCache: () => activeProlog.invalidateCache(),
580
720
  save: () => activeProlog.query("kb_save"),
@@ -628,7 +768,7 @@ export async function checkCommand(options) {
628
768
  await safeCleanupProlog(prolog);
629
769
  }
630
770
  }
631
- async function checkMustPriorityCoverage(prolog) {
771
+ export async function checkMustPriorityCoverage(prolog) {
632
772
  const violations = [];
633
773
  const mustReqs = await findMustPriorityReqs(prolog);
634
774
  for (const reqId of mustReqs) {
@@ -667,7 +807,9 @@ async function checkMustPriorityCoverage(prolog) {
667
807
  }
668
808
  return violations;
669
809
  }
670
- async function findMustPriorityReqs(prolog) {
810
+ // implements REQ-cli-check
811
+ // covered_by TEST-004
812
+ export async function findMustPriorityReqs(prolog) {
671
813
  const query = `findall(Id, (kb_entity(Id, req, Props), memberchk(priority=P, Props), (P = ^^("must", _) ; P = "must" ; P = 'must' ; (atom(P), atom_string(P, PS), sub_string(PS, _, 4, 0, "must")))), Ids)`;
672
814
  const result = await prolog.query(query);
673
815
  if (!result.success || !result.bindings.Ids) {
@@ -681,7 +823,7 @@ async function findMustPriorityReqs(prolog) {
681
823
  }
682
824
  return content.split(",").map((id) => id.trim().replace(/^'|'$/g, ""));
683
825
  }
684
- async function getAllEntityIds(prolog, type) {
826
+ export async function getAllEntityIds(prolog, type) {
685
827
  const typeFilter = type ? `, Type = ${type}` : "";
686
828
  const query = `findall(Id, (kb_entity(Id, Type, _)${typeFilter}), Ids)`;
687
829
  const result = await prolog.query(query);
@@ -696,7 +838,7 @@ async function getAllEntityIds(prolog, type) {
696
838
  }
697
839
  return content.split(",").map((id) => id.trim().replace(/^'|'$/g, ""));
698
840
  }
699
- async function checkNoDanglingRefs(prolog) {
841
+ export async function checkNoDanglingRefs(prolog) {
700
842
  const violations = [];
701
843
  const allEntityIds = new Set(await getAllEntityIds(prolog));
702
844
  const relTypes = [
@@ -751,7 +893,9 @@ async function checkNoDanglingRefs(prolog) {
751
893
  }
752
894
  return violations;
753
895
  }
754
- async function checkNoCycles(prolog) {
896
+ // implements REQ-cli-check
897
+ // covered_by TEST-cli-check-integrity
898
+ export async function checkNoCycles(prolog) {
755
899
  const violations = [];
756
900
  const depsResult = await prolog.query("findall([From,To], kb_relationship(depends_on, From, To), Deps)");
757
901
  if (!depsResult.success || !depsResult.bindings.Deps) {
@@ -835,7 +979,7 @@ async function checkNoCycles(prolog) {
835
979
  }
836
980
  return violations;
837
981
  }
838
- async function checkRequiredFields(prolog, allEntityIds) {
982
+ export async function checkRequiredFields(prolog, allEntityIds) {
839
983
  const violations = [];
840
984
  const required = [
841
985
  "id",
@@ -871,7 +1015,7 @@ async function checkRequiredFields(prolog, allEntityIds) {
871
1015
  }
872
1016
  return violations;
873
1017
  }
874
- async function checkDeprecatedAdrs(prolog) {
1018
+ export async function checkDeprecatedAdrs(prolog) {
875
1019
  const violations = [];
876
1020
  // Use Prolog predicate to find deprecated ADRs without successors
877
1021
  const result = await prolog.query("setof(Id, deprecated_no_successor(Id), Ids)");
@@ -908,14 +1052,16 @@ async function checkDeprecatedAdrs(prolog) {
908
1052
  }
909
1053
  return violations;
910
1054
  }
911
- async function checkDomainContradictions(prolog) {
1055
+ export async function checkDomainContradictions(prolog) {
912
1056
  const violations = [];
913
1057
  const result = await prolog.query("setof([A,B,Reason], contradicting_reqs(A, B, Reason), Rows)");
914
1058
  if (!result.success || !result.bindings.Rows) {
915
1059
  return violations;
916
1060
  }
917
1061
  const rows = parseTriples(result.bindings.Rows);
918
- for (const [reqA, reqB, reason] of rows) {
1062
+ for (const [rawReqA, rawReqB, reason] of rows) {
1063
+ const reqA = normalizeEntityId(rawReqA);
1064
+ const reqB = normalizeEntityId(rawReqB);
919
1065
  violations.push({
920
1066
  rule: "domain-contradictions",
921
1067
  entityId: `${reqA}/${reqB}`,
@@ -925,7 +1071,7 @@ async function checkDomainContradictions(prolog) {
925
1071
  }
926
1072
  return violations;
927
1073
  }
928
- async function checkStrictFactShape(prolog) {
1074
+ export async function checkStrictFactShape(prolog) {
929
1075
  const violations = [];
930
1076
  const result = await prolog.query(`findall(violation(Rule, EntityId, Desc, Sugg, Src),
931
1077
  checks:strict_fact_shape_violation(violation(Rule, EntityId, Desc, Sugg, Src)),
@@ -941,7 +1087,7 @@ async function checkStrictFactShape(prolog) {
941
1087
  }
942
1088
  return violations;
943
1089
  }
944
- async function checkStrictReqFactPairing(prolog) {
1090
+ export async function checkStrictReqFactPairing(prolog) {
945
1091
  const violations = [];
946
1092
  const result = await prolog.query(`findall(violation(Rule, EntityId, Desc, Sugg, Src),
947
1093
  checks:strict_req_fact_pairing_violation(violation(Rule, EntityId, Desc, Sugg, Src)),
@@ -957,7 +1103,7 @@ async function checkStrictReqFactPairing(prolog) {
957
1103
  }
958
1104
  return violations;
959
1105
  }
960
- async function checkStrictReadiness(prolog) {
1106
+ export async function checkStrictReadiness(prolog) {
961
1107
  const violations = [];
962
1108
  const result = await prolog.query(`findall(violation(Rule, EntityId, Desc, Sugg, Src),
963
1109
  checks:strict_readiness_violation(violation(Rule, EntityId, Desc, Sugg, Src)),
@@ -973,7 +1119,7 @@ async function checkStrictReadiness(prolog) {
973
1119
  }
974
1120
  return violations;
975
1121
  }
976
- async function checkSymbolCoverage(prolog) {
1122
+ export async function checkSymbolCoverage(prolog) {
977
1123
  const violations = [];
978
1124
  const uncoveredResult = await prolog.query("setof(Symbol, symbol_no_req_coverage(Symbol, _), Symbols)");
979
1125
  if (uncoveredResult.success && uncoveredResult.bindings.Symbols) {
@@ -2,6 +2,7 @@ interface CoverageOptions {
2
2
  by?: "req" | "symbol" | "type";
3
3
  tag?: string;
4
4
  includePassing?: boolean;
5
+ status?: string;
5
6
  includeTransitive?: boolean;
6
7
  limit?: string;
7
8
  offset?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/commands/coverage.ts"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,EAAE,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAGD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B7E"}
1
+ {"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../src/commands/coverage.ts"],"names":[],"mappings":"AAMA,UAAU,eAAe;IACvB,EAAE,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAGD,wBAAsB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC7E"}
@@ -11,6 +11,12 @@ export async function coverageCommand(options) {
11
11
  .filter(Boolean)
12
12
  : [],
13
13
  includePassing: options.includePassing ?? false,
14
+ statuses: options.status
15
+ ? options.status
16
+ .split(",")
17
+ .map((item) => item.trim())
18
+ .filter(Boolean)
19
+ : [],
14
20
  includeTransitive: options.includeTransitive ?? true,
15
21
  limit: Number.parseInt(options.limit || "100", 10),
16
22
  offset: Number.parseInt(options.offset || "0", 10),
@@ -4,4 +4,26 @@ export interface DoctorOptions {
4
4
  export declare function doctorCommand(options?: DoctorOptions): Promise<{
5
5
  exitCode: number;
6
6
  }>;
7
+ export declare function detectExecuteApplyPlanExport(load?: () => Promise<{
8
+ executeApplyPlan?: unknown;
9
+ }>): Promise<boolean>;
10
+ export declare function packageMigrationActions(runtime: Readonly<Record<string, unknown>>): Promise<Readonly<{
11
+ id: string;
12
+ code: string;
13
+ category: "package" | "branch" | "storage" | "schema" | "freshness" | "relationship" | "symbol" | "semantic" | "proof" | "quality";
14
+ state: import("../public/operations/migration-plan.js").MigrationActionState;
15
+ safety: import("../public/operations/migration-plan.js").MigrationSafety;
16
+ invocation: import("../public/operations/migration-plan.js").MigrationInvocation;
17
+ affectedEntityIds: readonly string[];
18
+ affectedFiles: readonly string[];
19
+ dependsOn: readonly string[];
20
+ preconditions: readonly Readonly<Record<string, unknown>>[];
21
+ postconditions: readonly Readonly<Record<string, unknown>>[];
22
+ evidence: Readonly<Record<string, unknown>>;
23
+ autoApplicable: boolean;
24
+ dispositionRequired: boolean;
25
+ allowedDispositions: readonly import("../public/operations/migration-plan.js").MigrationDisposition[];
26
+ }>[]>;
27
+ export declare function nextAncestorDirectory(current: string): string | undefined;
28
+ export declare function nearestNamedPackageManifest(startDir: string, name: string): string | undefined;
7
29
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAGD,wBAAsB,aAAa,CACjC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiF/B"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAGD,wBAAsB,aAAa,CACjC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiF/B;AAED,wBAAsB,4BAA4B,CAChD,IAAI,GAAE,MAAM,OAAO,CAAC;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,CACT,GACxC,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;;MAkE3C;AAkGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAepB"}
@@ -97,7 +97,16 @@ export async function doctorCommand(options = {}) {
97
97
  console.log("Some checks failed. Please address the issues above.");
98
98
  return { exitCode: 1 };
99
99
  }
100
- async function packageMigrationActions(runtime) {
100
+ export async function detectExecuteApplyPlanExport(load = () => import("../public/operations/index.js")) {
101
+ try {
102
+ const operations = await load();
103
+ return typeof operations.executeApplyPlan === "function";
104
+ }
105
+ catch {
106
+ return false;
107
+ }
108
+ }
109
+ export async function packageMigrationActions(runtime) {
101
110
  const actions = [];
102
111
  const versions = ["cliVersion", "coreVersion", "mcpVersion"].filter((key) => runtime[key] === "unresolved" || runtime[key] === "unknown");
103
112
  if (versions.length > 0) {
@@ -175,15 +184,7 @@ async function runtimeProvenance() {
175
184
  }
176
185
  const core = resolveInstalledPackageInfo("kibi-core");
177
186
  const mcp = resolveInstalledPackageInfo("kibi-mcp");
178
- let executeApplyPlanExported;
179
- try {
180
- const operations = await import("../public/operations/index.js");
181
- executeApplyPlanExported =
182
- typeof operations.executeApplyPlan === "function";
183
- }
184
- catch {
185
- executeApplyPlanExported = false;
186
- }
187
+ const executeApplyPlanExported = await detectExecuteApplyPlanExport();
187
188
  return {
188
189
  cliVersion: typeof cli.version === "string" ? cli.version : "unknown",
189
190
  coreVersion: core.version,
@@ -226,9 +227,13 @@ function packageInfoFromManifest(manifestPath) {
226
227
  : undefined,
227
228
  };
228
229
  }
229
- function nearestNamedPackageManifest(startDir, name) {
230
+ export function nextAncestorDirectory(current) {
231
+ const parent = path.dirname(current);
232
+ return parent === current ? undefined : parent;
233
+ }
234
+ export function nearestNamedPackageManifest(startDir, name) {
230
235
  let current = startDir;
231
- while (true) {
236
+ while (current !== undefined) {
232
237
  const candidate = path.join(current, "package.json");
233
238
  try {
234
239
  const metadata = JSON.parse(readFileSync(candidate, "utf8"));
@@ -238,11 +243,9 @@ function nearestNamedPackageManifest(startDir, name) {
238
243
  catch {
239
244
  // Keep walking; an unrelated or absent manifest is not a match.
240
245
  }
241
- const parent = path.dirname(current);
242
- if (parent === current)
243
- return undefined;
244
- current = parent;
246
+ current = nextAncestorDirectory(current);
245
247
  }
248
+ return undefined;
246
249
  }
247
250
  function resolveInstalledPackageInfo(name) {
248
251
  const require = createRequire(import.meta.url);
@@ -468,8 +471,13 @@ function checkPreCommitHook() {
468
471
  const preCommitExecutable = (preCommitStats.mode & 0o111) !== 0;
469
472
  // Read hook content to determine whether it's using the new staged check
470
473
  const content = readFileSync(preCommitPath, "utf-8");
471
- const usesKibi = content.includes("kibi check");
472
- const usesStaged = content.includes("kibi check --staged");
474
+ // Current templates resolve the kibi binary into KIBI_BIN before invoking
475
+ // it (git hooks do not get node_modules/.bin on PATH); legacy templates
476
+ // invoked bare `kibi`.
477
+ const resolvesKibi = content.includes("KIBI_BIN=");
478
+ const usesKibi = resolvesKibi || content.includes("kibi check");
479
+ const usesStaged = content.includes('"$KIBI_BIN" check --staged') ||
480
+ content.includes("kibi check --staged");
473
481
  if (!usesKibi) {
474
482
  // Fail if hook doesn't invoke kibi at all
475
483
  return {
@@ -480,15 +488,24 @@ function checkPreCommitHook() {
480
488
  }
481
489
  if (preCommitExecutable) {
482
490
  if (usesStaged) {
491
+ if (!resolvesKibi) {
492
+ // Functional template that invokes bare `kibi`: it fails whenever
493
+ // kibi is installed only as a project dependency.
494
+ return {
495
+ passed: true,
496
+ message: "Installed and executable (legacy template without kibi CLI resolution — run 'kibi init' to regenerate so hooks work with local installs)",
497
+ remediation: "Run: kibi init to update git hooks to the latest template",
498
+ };
499
+ }
483
500
  return {
484
501
  passed: true,
485
- message: "Installed and executable (uses 'kibi check --staged')",
502
+ message: "Installed and executable (resolves kibi CLI; uses 'kibi check --staged')",
486
503
  };
487
504
  }
488
505
  // Warn but pass if using legacy kibi check without --staged
489
506
  return {
490
507
  passed: true,
491
- message: "Installed and executable (uses legacy 'kibi check' — consider running 'kibi init' to update hooks to use '--staged')",
508
+ message: "Installed and executable (uses legacy 'kibi check' — consider running 'kibi init' to update hooks to use '--staged' with CLI resolution)",
492
509
  remediation: "Run: kibi init to update git hooks to the latest template",
493
510
  };
494
511
  }
@@ -529,9 +546,11 @@ function checkPostRewriteHook() {
529
546
  try {
530
547
  const postRewriteStats = statSync(postRewritePath);
531
548
  const postRewriteExecutable = (postRewriteStats.mode & 0o111) !== 0;
532
- // Read hook content to verify it invokes kibi
549
+ // Read hook content to verify it invokes kibi. Current templates invoke
550
+ // the resolved KIBI_BIN; legacy templates invoked bare `kibi sync`.
533
551
  const content = readFileSync(postRewritePath, "utf-8");
534
- const usesKibi = content.includes("kibi sync");
552
+ const usesKibi = content.includes('"$KIBI_BIN" sync') || content.includes("kibi sync");
553
+ const resolvesKibi = content.includes("KIBI_BIN=");
535
554
  if (!usesKibi) {
536
555
  return {
537
556
  passed: false,
@@ -540,6 +559,13 @@ function checkPostRewriteHook() {
540
559
  };
541
560
  }
542
561
  if (postRewriteExecutable) {
562
+ if (!resolvesKibi) {
563
+ return {
564
+ passed: true,
565
+ message: "Installed and executable (legacy template without kibi CLI resolution — run 'kibi init' to regenerate so hooks work with local installs)",
566
+ remediation: "Run: kibi init to update git hooks to the latest template",
567
+ };
568
+ }
543
569
  return {
544
570
  passed: true,
545
571
  message: "Installed and executable",