kibi-cli 0.17.0 → 0.19.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 (241) hide show
  1. package/dist/cli-json-command.d.ts +1 -2
  2. package/dist/cli-json-command.d.ts.map +1 -1
  3. package/dist/cli-json-command.js +88 -44
  4. package/dist/cli-operation-loader.d.ts +3 -0
  5. package/dist/cli-operation-loader.d.ts.map +1 -0
  6. package/dist/cli-operation-loader.js +58 -0
  7. package/dist/cli-operation-metadata.d.ts +82 -0
  8. package/dist/cli-operation-metadata.d.ts.map +1 -0
  9. package/dist/cli-operation-metadata.js +106 -0
  10. package/dist/cli-protocol.d.ts +1 -1
  11. package/dist/cli-protocol.d.ts.map +1 -1
  12. package/dist/cli-protocol.js +4 -3
  13. package/dist/cli-register-foundation.d.ts.map +1 -1
  14. package/dist/cli-register-foundation.js +14 -17
  15. package/dist/cli-register-json.d.ts +3 -0
  16. package/dist/cli-register-json.d.ts.map +1 -0
  17. package/dist/cli-register-json.js +35 -0
  18. package/dist/cli-register-maintenance.d.ts.map +1 -1
  19. package/dist/cli-register-maintenance.js +41 -8
  20. package/dist/cli-register-reporting.d.ts.map +1 -1
  21. package/dist/cli-register-reporting.js +18 -14
  22. package/dist/cli-register-skills.d.ts.map +1 -1
  23. package/dist/cli-register-skills.js +8 -6
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +3 -2
  26. package/dist/commands/aggregated-checks.d.ts.map +1 -1
  27. package/dist/commands/aggregated-checks.js +1 -0
  28. package/dist/commands/check.d.ts.map +1 -1
  29. package/dist/commands/check.js +30 -12
  30. package/dist/commands/coverage.d.ts +5 -0
  31. package/dist/commands/coverage.d.ts.map +1 -1
  32. package/dist/commands/coverage.js +6 -1
  33. package/dist/commands/discovery-shared.d.ts +2 -1
  34. package/dist/commands/discovery-shared.d.ts.map +1 -1
  35. package/dist/commands/discovery-shared.js +35 -13
  36. package/dist/commands/discovery-table.d.ts.map +1 -1
  37. package/dist/commands/discovery-table.js +96 -5
  38. package/dist/commands/engine.d.ts +8 -0
  39. package/dist/commands/engine.d.ts.map +1 -0
  40. package/dist/commands/engine.js +100 -0
  41. package/dist/commands/gaps.js +1 -1
  42. package/dist/commands/graph.js +1 -1
  43. package/dist/commands/query.d.ts.map +1 -1
  44. package/dist/commands/query.js +3 -1
  45. package/dist/commands/search.d.ts.map +1 -1
  46. package/dist/commands/search.js +3 -1
  47. package/dist/commands/status.d.ts.map +1 -1
  48. package/dist/commands/status.js +2 -1
  49. package/dist/commands/sync/cache.d.ts +12 -0
  50. package/dist/commands/sync/cache.d.ts.map +1 -1
  51. package/dist/commands/sync/cache.js +38 -1
  52. package/dist/commands/sync/persistence.d.ts +10 -1
  53. package/dist/commands/sync/persistence.d.ts.map +1 -1
  54. package/dist/commands/sync/persistence.js +276 -43
  55. package/dist/commands/sync/staging.d.ts +10 -1
  56. package/dist/commands/sync/staging.d.ts.map +1 -1
  57. package/dist/commands/sync/staging.js +84 -1
  58. package/dist/commands/sync.d.ts.map +1 -1
  59. package/dist/commands/sync.js +521 -27
  60. package/dist/commands/usage-metrics.d.ts +66 -2
  61. package/dist/commands/usage-metrics.d.ts.map +1 -1
  62. package/dist/commands/usage-metrics.js +34 -24
  63. package/dist/commands/usage-remediation.d.ts +9 -0
  64. package/dist/commands/usage-remediation.d.ts.map +1 -0
  65. package/dist/commands/usage-remediation.js +52 -0
  66. package/dist/engine-daemon.d.ts +3 -0
  67. package/dist/engine-daemon.d.ts.map +1 -0
  68. package/dist/engine-daemon.js +34 -0
  69. package/dist/engine.d.ts +63 -0
  70. package/dist/engine.d.ts.map +1 -0
  71. package/dist/engine.js +1256 -0
  72. package/dist/extractors/markdown.d.ts +8 -0
  73. package/dist/extractors/markdown.d.ts.map +1 -1
  74. package/dist/extractors/markdown.js +69 -2
  75. package/dist/extractors/relationships.d.ts +2 -0
  76. package/dist/extractors/relationships.d.ts.map +1 -1
  77. package/dist/extractors/relationships.js +15 -17
  78. package/dist/operations/modeling/logic-modeling.d.ts.map +1 -1
  79. package/dist/operations/modeling/logic-modeling.js +14 -5
  80. package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
  81. package/dist/operations/modeling/model-requirement.js +27 -2
  82. package/dist/operations/modeling/predicate-applyplan.d.ts +1 -1
  83. package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
  84. package/dist/operations/modeling/predicate-applyplan.js +18 -6
  85. package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
  86. package/dist/operations/modeling/predicate-inference.js +5 -17
  87. package/dist/operations/modeling/predicate-loader.js +1 -1
  88. package/dist/operations/modeling/predicate-types.d.ts +9 -1
  89. package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
  90. package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
  91. package/dist/operations/modeling/suggest-predicates.js +35 -11
  92. package/dist/operations/mutation/audit.js +1 -1
  93. package/dist/operations/mutation/contradictions.d.ts +1 -1
  94. package/dist/operations/mutation/contradictions.d.ts.map +1 -1
  95. package/dist/operations/mutation/contradictions.js +23 -18
  96. package/dist/operations/mutation/serialization.d.ts.map +1 -1
  97. package/dist/operations/mutation/serialization.js +6 -3
  98. package/dist/operations/mutation/upsert.d.ts +3 -1
  99. package/dist/operations/mutation/upsert.d.ts.map +1 -1
  100. package/dist/operations/mutation/upsert.js +51 -12
  101. package/dist/operations/mutation/validate-upsert.d.ts.map +1 -1
  102. package/dist/operations/mutation/validate-upsert.js +18 -2
  103. package/dist/operations/mutation/validation.d.ts.map +1 -1
  104. package/dist/operations/mutation/validation.js +8 -0
  105. package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -1
  106. package/dist/operations/semantic-advisor/analysis-receipt.js +7 -1
  107. package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
  108. package/dist/operations/semantic-advisor/analyze-prose.js +76 -61
  109. package/dist/operations/semantic-advisor/clauses.d.ts +1 -0
  110. package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
  111. package/dist/operations/semantic-advisor/clauses.js +7 -7
  112. package/dist/operations/semantic-advisor/ingestion-boundary.d.ts +18 -0
  113. package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -0
  114. package/dist/operations/semantic-advisor/ingestion-boundary.js +167 -0
  115. package/dist/operations/semantic-advisor/shared.d.ts +8 -0
  116. package/dist/operations/semantic-advisor/shared.d.ts.map +1 -1
  117. package/dist/operations/semantic-advisor/shared.js +37 -3
  118. package/dist/operations/semantic-advisor/types.d.ts +5 -0
  119. package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
  120. package/dist/prolog/codec.d.ts.map +1 -1
  121. package/dist/prolog/codec.js +9 -2
  122. package/dist/prolog.d.ts +14 -0
  123. package/dist/prolog.d.ts.map +1 -1
  124. package/dist/prolog.js +279 -69
  125. package/dist/public/diagnostic-usage.d.ts +17 -0
  126. package/dist/public/diagnostic-usage.d.ts.map +1 -0
  127. package/dist/public/diagnostic-usage.js +152 -0
  128. package/dist/public/distribution-parity.d.ts +90 -0
  129. package/dist/public/distribution-parity.d.ts.map +1 -0
  130. package/dist/public/distribution-parity.js +367 -0
  131. package/dist/public/impact/full-kb-quality.d.ts +2 -0
  132. package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
  133. package/dist/public/impact/full-kb-quality.js +53 -1
  134. package/dist/public/impact-diagnostics.d.ts +2 -0
  135. package/dist/public/impact-diagnostics.d.ts.map +1 -1
  136. package/dist/public/impact-diagnostics.js +1 -0
  137. package/dist/public/operations/catalog.d.ts +151 -6
  138. package/dist/public/operations/catalog.d.ts.map +1 -1
  139. package/dist/public/operations/check-executor.d.ts.map +1 -1
  140. package/dist/public/operations/check-executor.js +4 -0
  141. package/dist/public/operations/discovery-entities.d.ts.map +1 -1
  142. package/dist/public/operations/discovery-entities.js +3 -2
  143. package/dist/public/operations/discovery-executors.d.ts +6 -0
  144. package/dist/public/operations/discovery-executors.d.ts.map +1 -1
  145. package/dist/public/operations/discovery-executors.js +58 -5
  146. package/dist/public/operations/index.d.ts +4 -0
  147. package/dist/public/operations/index.d.ts.map +1 -1
  148. package/dist/public/operations/index.js +4 -0
  149. package/dist/public/operations/legacy-migration-plan.d.ts +113 -0
  150. package/dist/public/operations/legacy-migration-plan.d.ts.map +1 -0
  151. package/dist/public/operations/legacy-migration-plan.js +409 -0
  152. package/dist/public/operations/node-ports.d.ts.map +1 -1
  153. package/dist/public/operations/node-ports.js +90 -0
  154. package/dist/public/operations/prolog-json.d.ts.map +1 -1
  155. package/dist/public/operations/prolog-json.js +14 -4
  156. package/dist/public/operations/repair-plan.d.ts +184 -0
  157. package/dist/public/operations/repair-plan.d.ts.map +1 -0
  158. package/dist/public/operations/repair-plan.js +397 -0
  159. package/dist/public/operations/runtime-types.d.ts +38 -0
  160. package/dist/public/operations/runtime-types.d.ts.map +1 -1
  161. package/dist/public/operations/specs/check.d.ts +2 -2
  162. package/dist/public/operations/specs/check.js +2 -2
  163. package/dist/public/operations/specs/discovery.d.ts +1 -1
  164. package/dist/public/operations/specs/discovery.js +1 -1
  165. package/dist/public/operations/specs/modeling.d.ts +19 -1
  166. package/dist/public/operations/specs/modeling.d.ts.map +1 -1
  167. package/dist/public/operations/specs/modeling.js +16 -1
  168. package/dist/public/operations/specs/mutation-schemas.d.ts +96 -1
  169. package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
  170. package/dist/public/operations/specs/mutation-schemas.js +40 -1
  171. package/dist/public/operations/specs/reporting.d.ts +42 -1
  172. package/dist/public/operations/specs/reporting.d.ts.map +1 -1
  173. package/dist/public/operations/specs/reporting.js +70 -6
  174. package/dist/public/operations/specs/semantic.js +1 -1
  175. package/dist/public/operations/specs/upsert.d.ts +96 -1
  176. package/dist/public/operations/specs/upsert.d.ts.map +1 -1
  177. package/dist/public/operations/workspace-snapshot.d.ts +10 -0
  178. package/dist/public/operations/workspace-snapshot.d.ts.map +1 -0
  179. package/dist/public/operations/workspace-snapshot.js +20 -0
  180. package/dist/public/schemas/entity.d.ts.map +1 -1
  181. package/dist/public/schemas/entity.js +43 -1
  182. package/dist/public/skills/init-kibi/SKILL.md +2 -2
  183. package/dist/public/skills/kibi-freshness/SKILL.md +2 -2
  184. package/dist/public/skills/kibi-traceability/SKILL.md +8 -2
  185. package/dist/public/skills/kibi-usage/SKILL.md +12 -6
  186. package/dist/public/skills/kibi-usage/resources/fact-lanes.md +1 -1
  187. package/dist/public/skills/kibi-usage/resources/logic-ir.md +1 -1
  188. package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
  189. package/dist/public/skills/kibi-usage/resources/workflows.md +19 -2
  190. package/dist/public/telemetry-acceptance.d.ts +89 -0
  191. package/dist/public/telemetry-acceptance.d.ts.map +1 -0
  192. package/dist/public/telemetry-acceptance.js +597 -0
  193. package/dist/public/telemetry-remediation.d.ts +33 -0
  194. package/dist/public/telemetry-remediation.d.ts.map +1 -0
  195. package/dist/public/telemetry-remediation.js +257 -0
  196. package/dist/public/verification-receipt.d.ts +75 -0
  197. package/dist/public/verification-receipt.d.ts.map +1 -0
  198. package/dist/public/verification-receipt.js +129 -0
  199. package/dist/runtime/cli-runtime.d.ts.map +1 -1
  200. package/dist/runtime/cli-runtime.js +33 -37
  201. package/dist/schemas/entity.schema.json +96 -2
  202. package/dist/traceability/temp-kb.d.ts.map +1 -1
  203. package/dist/traceability/temp-kb.js +36 -3
  204. package/dist/types/entities.d.ts +1 -0
  205. package/dist/types/entities.d.ts.map +1 -1
  206. package/dist/utils/rule-registry.d.ts +2 -0
  207. package/dist/utils/rule-registry.d.ts.map +1 -1
  208. package/package.json +36 -4
  209. package/src/public/diagnostic-usage.ts +206 -0
  210. package/src/public/distribution-parity.ts +580 -0
  211. package/src/public/impact/full-kb-quality.ts +74 -1
  212. package/src/public/impact-diagnostics.ts +16 -0
  213. package/src/public/operations/check-executor.ts +4 -0
  214. package/src/public/operations/discovery-entities.ts +3 -2
  215. package/src/public/operations/discovery-executors.ts +68 -5
  216. package/src/public/operations/index.ts +4 -0
  217. package/src/public/operations/legacy-migration-plan.ts +688 -0
  218. package/src/public/operations/node-ports.ts +109 -0
  219. package/src/public/operations/prolog-json.ts +15 -3
  220. package/src/public/operations/repair-plan.ts +562 -0
  221. package/src/public/operations/runtime-types.ts +47 -0
  222. package/src/public/operations/specs/check.ts +2 -2
  223. package/src/public/operations/specs/discovery.ts +1 -1
  224. package/src/public/operations/specs/modeling.ts +19 -1
  225. package/src/public/operations/specs/mutation-schemas.ts +47 -1
  226. package/src/public/operations/specs/reporting.ts +91 -6
  227. package/src/public/operations/specs/semantic.ts +1 -1
  228. package/src/public/operations/workspace-snapshot.ts +28 -0
  229. package/src/public/schemas/entity.ts +44 -1
  230. package/src/public/skills/init-kibi/SKILL.md +2 -2
  231. package/src/public/skills/kibi-freshness/SKILL.md +2 -2
  232. package/src/public/skills/kibi-traceability/SKILL.md +8 -2
  233. package/src/public/skills/kibi-usage/SKILL.md +12 -6
  234. package/src/public/skills/kibi-usage/resources/fact-lanes.md +1 -1
  235. package/src/public/skills/kibi-usage/resources/logic-ir.md +1 -1
  236. package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
  237. package/src/public/skills/kibi-usage/resources/workflows.md +19 -2
  238. package/src/public/telemetry-acceptance.ts +859 -0
  239. package/src/public/telemetry-remediation.ts +462 -0
  240. package/src/public/verification-receipt.ts +170 -0
  241. package/src/schemas/entity.schema.json +96 -2
@@ -241,12 +241,33 @@
241
241
  "severity": { "type": "string" },
242
242
  "links": { "type": "array", "items": { "type": "string" } },
243
243
  "text_ref": { "type": "string" },
244
+ "semantic_text": {
245
+ "type": "string",
246
+ "description": "Requirement-only authored prose whose exact UTF-8 bytes anchor the semantic inventory without replacing text_ref evidence."
247
+ },
244
248
  "logic_claims": {
245
249
  "type": "array",
246
250
  "minItems": 1,
247
251
  "uniqueItems": true,
248
252
  "items": { "type": "string", "pattern": "^CLAIM-[A-F0-9]{16}$" }
249
253
  },
254
+ "semantic_clauses": {
255
+ "type": "array",
256
+ "minItems": 1,
257
+ "items": { "type": "string", "minLength": 1 }
258
+ },
259
+ "semantic_inventory_version": {
260
+ "type": "string",
261
+ "const": "kibi.semantic-inventory.v1"
262
+ },
263
+ "semantic_source_field": {
264
+ "type": "string",
265
+ "enum": ["semantic_text", "text_ref", "title"]
266
+ },
267
+ "semantic_source_hash": {
268
+ "type": "string",
269
+ "pattern": "^[a-f0-9]{64}$"
270
+ },
250
271
  "semantic_inventory": {
251
272
  "type": "array",
252
273
  "items": {
@@ -323,6 +344,63 @@
323
344
  "type": "string",
324
345
  "enum": ["internal", "consumer"]
325
346
  },
347
+ "verification_receipts": {
348
+ "type": "array",
349
+ "maxItems": 50,
350
+ "items": {
351
+ "type": "object",
352
+ "required": [
353
+ "version",
354
+ "receipt_id",
355
+ "test_id",
356
+ "runner",
357
+ "command",
358
+ "scope",
359
+ "outcome",
360
+ "code_snapshot",
361
+ "environment_hash",
362
+ "started_at",
363
+ "finished_at",
364
+ "artifact_digest"
365
+ ],
366
+ "properties": {
367
+ "version": {
368
+ "type": "string",
369
+ "const": "kibi.verification-receipt.v1"
370
+ },
371
+ "receipt_id": {
372
+ "type": "string",
373
+ "pattern": "^VR-[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$"
374
+ },
375
+ "test_id": { "type": "string", "minLength": 1 },
376
+ "runner": { "type": "string", "minLength": 1 },
377
+ "command": { "type": "string", "minLength": 1 },
378
+ "scope": {
379
+ "type": "string",
380
+ "enum": ["unit", "integration", "end_to_end"]
381
+ },
382
+ "outcome": {
383
+ "type": "string",
384
+ "enum": ["passed", "failed", "errored", "cancelled", "skipped"]
385
+ },
386
+ "code_snapshot": {
387
+ "type": "string",
388
+ "pattern": "^[a-f0-9]{64}$"
389
+ },
390
+ "environment_hash": {
391
+ "type": "string",
392
+ "pattern": "^[a-f0-9]{64}$"
393
+ },
394
+ "started_at": { "type": "string", "minLength": 1 },
395
+ "finished_at": { "type": "string", "minLength": 1 },
396
+ "artifact_digest": {
397
+ "type": "string",
398
+ "pattern": "^[a-f0-9]{64}$"
399
+ }
400
+ },
401
+ "additionalProperties": false
402
+ }
403
+ },
326
404
  "type": {
327
405
  "type": "string",
328
406
  "enum": [
@@ -427,11 +505,16 @@
427
505
  "not": {
428
506
  "anyOf": [
429
507
  { "required": ["verification_scope"] },
430
- { "required": ["verification_perspective"] }
508
+ { "required": ["verification_perspective"] },
509
+ { "required": ["verification_receipts"] }
431
510
  ]
432
511
  }
433
512
  }
434
513
  },
514
+ {
515
+ "if": { "required": ["verification_receipts"] },
516
+ "then": { "required": ["verification_scope"] }
517
+ },
435
518
  {
436
519
  "if": {
437
520
  "properties": {
@@ -513,7 +596,18 @@
513
596
  "properties": { "type": { "const": "req" } }
514
597
  },
515
598
  "then": {},
516
- "else": { "not": { "required": ["semantic_inventory"] } }
599
+ "else": {
600
+ "not": {
601
+ "anyOf": [
602
+ { "required": ["semantic_inventory"] },
603
+ { "required": ["semantic_clauses"] },
604
+ { "required": ["semantic_text"] },
605
+ { "required": ["semantic_inventory_version"] },
606
+ { "required": ["semantic_source_field"] },
607
+ { "required": ["semantic_source_hash"] }
608
+ ]
609
+ }
610
+ }
517
611
  },
518
612
  {
519
613
  "if": {
@@ -1 +1 @@
1
- {"version":3,"file":"temp-kb.d.ts","sourceRoot":"","sources":["../../src/traceability/temp-kb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;CACvB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,aAAa,GACpD,IAAI,CAEN;AAuMD,iBAAe,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB/D;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAG1B,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6C7E;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAkBrE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BlE"}
1
+ {"version":3,"file":"temp-kb.d.ts","sourceRoot":"","sources":["../../src/traceability/temp-kb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;CACvB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,aAAa,GACpD,IAAI,CAEN;AAoPD,iBAAe,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB/D;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAG1B,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6C7E;AAGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAkBrE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BlE"}
@@ -133,7 +133,7 @@ function serializeTypedFactFields(entity) {
133
133
  }
134
134
  return fields;
135
135
  }
136
- function buildEntityAssertionGoal(entity) {
136
+ function buildEntityAssertionGoal(entity, sourceFile) {
137
137
  const props = [
138
138
  `id=${toPrologAtom(entity.id)}`,
139
139
  `title=${toPrologString(entity.title)}`,
@@ -153,12 +153,45 @@ function buildEntityAssertionGoal(entity) {
153
153
  props.push(`severity=${toPrologAtom(entity.severity)}`);
154
154
  if (entity.text_ref)
155
155
  props.push(`text_ref=${toPrologString(entity.text_ref)}`);
156
+ if (entity.type === "req" && entity.semantic_text) {
157
+ props.push(`semantic_text=${toPrologString(entity.semantic_text)}`);
158
+ }
156
159
  if (entity.type === "req" && entity.logic_claims) {
157
160
  props.push(`logic_claims=[${entity.logic_claims.map(toPrologAtom).join(",")}]`);
158
161
  }
162
+ if (entity.type === "req" && entity.semantic_clauses) {
163
+ props.push(`semantic_clauses=[${entity.semantic_clauses.map(toPrologString).join(",")}]`);
164
+ }
165
+ if (entity.type === "req" && entity.semantic_inventory_version) {
166
+ props.push(`semantic_inventory_version=${toPrologString(entity.semantic_inventory_version)}`);
167
+ }
168
+ if (entity.type === "req" && entity.semantic_source_field) {
169
+ props.push(`semantic_source_field=${toPrologString(entity.semantic_source_field)}`);
170
+ }
171
+ if (entity.type === "req" && entity.semantic_source_hash) {
172
+ props.push(`semantic_source_hash=${toPrologString(entity.semantic_source_hash)}`);
173
+ }
159
174
  if (entity.type === "req" && entity.semantic_inventory) {
160
175
  props.push(`semantic_inventory=${toPrologString(JSON.stringify(entity.semantic_inventory))}`);
161
176
  }
177
+ if (sourceFile)
178
+ props.push(`sourceFile=${toPrologString(sourceFile)}`);
179
+ if (entity.type === "symbol") {
180
+ if (entity.symbol_role)
181
+ props.push(`symbol_role=${toPrologAtom(entity.symbol_role)}`);
182
+ if (entity.granularity_reason)
183
+ props.push(`granularity_reason=${toPrologAtom(entity.granularity_reason)}`);
184
+ for (const key of [
185
+ "sourceLine",
186
+ "sourceColumn",
187
+ "sourceEndLine",
188
+ "sourceEndColumn",
189
+ ]) {
190
+ const value = entity[key];
191
+ if (typeof value === "number")
192
+ props.push(`${key}=${value}`);
193
+ }
194
+ }
162
195
  if (entity.type === "fact") {
163
196
  props.push(...serializeTypedFactFields(entity));
164
197
  }
@@ -215,11 +248,11 @@ async function consultOverlay(ctx) {
215
248
  export { consultOverlay };
216
249
  // implements REQ-014
217
250
  export async function projectStagedEntities(prolog, results) {
218
- for (const { entity } of results) {
251
+ for (const { entity, sourceFile } of results) {
219
252
  // Retract stale relationships before re-asserting entity
220
253
  // (kb_assert_entity_no_audit preserves relationships on upsert)
221
254
  await prolog.query(`kb_retract_entity_relationships('${entity.id}')`);
222
- const assertEntityResult = await prolog.query(buildEntityAssertionGoal(entity));
255
+ const assertEntityResult = await prolog.query(buildEntityAssertionGoal(entity, sourceFile));
223
256
  if (!assertEntityResult.success) {
224
257
  throw new Error(`Failed to assert staged entity ${entity.id}: ${assertEntityResult.error || "unknown error"}`);
225
258
  }
@@ -47,6 +47,7 @@ export interface TestVerificationFields {
47
47
  }
48
48
  export type Requirement = BaseEntity & {
49
49
  type: "req";
50
+ semantic_text?: string;
50
51
  logic_claims?: string[];
51
52
  };
52
53
  export type Scenario = BaseEntity & {
@@ -1 +1 @@
1
- {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/types/entities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../src/types/entities.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,8 @@ export interface Violation {
18
18
  description: string;
19
19
  suggestion?: string;
20
20
  source?: string;
21
+ /** Exact source-bound proof evidence, when the check can produce it. */
22
+ evidence?: Readonly<Record<string, unknown>>;
21
23
  }
22
24
  export interface ChecksConfig {
23
25
  rules: Record<string, boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"rule-registry.d.ts","sourceRoot":"","sources":["../../src/utils/rule-registry.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,cAAc,CAAC;CACnE;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,kBAAkB,EAAE,yBAAyB,CAAC;CAC/C;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,cAAc,EAsHjC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU,aAAoC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAKnC,CAAC;AAEF;;;;;GAKG;AAEH,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,GAChB,GAAG,CAAC,MAAM,CAAC,CAsBb;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC9B,YAAY,CAWd"}
1
+ {"version":3,"file":"rule-registry.d.ts","sourceRoot":"","sources":["../../src/utils/rule-registry.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,cAAc,CAAC;CACnE;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,kBAAkB,EAAE,yBAAyB,CAAC;CAC/C;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,SAAS,cAAc,EAsHjC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU,aAAoC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAKnC,CAAC;AAEF;;;;;GAKG;AAEH,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,GAChB,GAAG,CAAC,MAAM,CAAC,CAsBb;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC9B,YAAY,CAWd"}
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "kibi-cli",
3
- "version": "0.17.0",
3
+ "version": "0.19.0",
4
4
  "type": "module",
5
5
  "description": "Kibi CLI for knowledge base management",
6
6
  "engines": {
7
- "node": ">=18",
8
- "bun": ">=1.0"
7
+ "node": ">=18"
9
8
  },
10
9
  "main": "./dist/cli.js",
11
10
  "bin": {
@@ -14,6 +13,7 @@
14
13
  "files": ["dist", "bin", "schema", "src/schemas", "src/public"],
15
14
  "scripts": {
16
15
  "build": "tsc -p tsconfig.json && mkdir -p dist/public/skills && cp -r src/public/skills/. dist/public/skills/",
16
+ "test": "node ../../scripts/run-owned-engine-tests.mjs -- bun test --timeout 15000 .",
17
17
  "typecheck": "tsc -p tsconfig.json --noEmit",
18
18
  "prepack": "npm run build"
19
19
  },
@@ -30,10 +30,22 @@
30
30
  "types": "./dist/prolog/codec.d.ts",
31
31
  "default": "./dist/prolog/codec.js"
32
32
  },
33
+ "./engine": {
34
+ "types": "./dist/engine.d.ts",
35
+ "default": "./dist/engine.js"
36
+ },
33
37
  "./operations/runtime-types": {
34
38
  "types": "./dist/public/operations/runtime-types.d.ts",
35
39
  "default": "./dist/public/operations/runtime-types.js"
36
40
  },
41
+ "./operations/node-ports": {
42
+ "types": "./dist/public/operations/node-ports.d.ts",
43
+ "default": "./dist/public/operations/node-ports.js"
44
+ },
45
+ "./verification-receipt": {
46
+ "types": "./dist/public/verification-receipt.d.ts",
47
+ "default": "./dist/public/verification-receipt.js"
48
+ },
37
49
  "./operations/semantic-advisor/analyze-prose": {
38
50
  "types": "./dist/operations/semantic-advisor/analyze-prose.d.ts",
39
51
  "default": "./dist/operations/semantic-advisor/analyze-prose.js"
@@ -90,6 +102,26 @@
90
102
  "types": "./dist/public/impact-diagnostics.d.ts",
91
103
  "default": "./dist/public/impact-diagnostics.js"
92
104
  },
105
+ "./telemetry-acceptance": {
106
+ "types": "./dist/public/telemetry-acceptance.d.ts",
107
+ "default": "./dist/public/telemetry-acceptance.js"
108
+ },
109
+ "./telemetry-remediation": {
110
+ "types": "./dist/public/telemetry-remediation.d.ts",
111
+ "default": "./dist/public/telemetry-remediation.js"
112
+ },
113
+ "./diagnostic-usage": {
114
+ "types": "./dist/public/diagnostic-usage.d.ts",
115
+ "default": "./dist/public/diagnostic-usage.js"
116
+ },
117
+ "./distribution-parity": {
118
+ "types": "./dist/public/distribution-parity.d.ts",
119
+ "default": "./dist/public/distribution-parity.js"
120
+ },
121
+ "./legacy-migration-plan": {
122
+ "types": "./dist/public/operations/legacy-migration-plan.d.ts",
123
+ "default": "./dist/public/operations/legacy-migration-plan.js"
124
+ },
93
125
  "./public/symbol-granularity": {
94
126
  "types": "./dist/public/symbol-granularity.d.ts",
95
127
  "default": "./dist/public/symbol-granularity.js"
@@ -161,7 +193,7 @@
161
193
  "fast-glob": "^3.2.12",
162
194
  "gray-matter": "^4.0.3",
163
195
  "js-yaml": "^4.1.0",
164
- "kibi-core": "^0.8.0",
196
+ "kibi-core": "^0.10.0",
165
197
  "ts-morph": "^23.0.0",
166
198
  "ignore": "^5.3.0"
167
199
  },
@@ -0,0 +1,206 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { appendFileSync, mkdirSync } from "node:fs";
3
+ import path from "node:path";
4
+
5
+ export interface DiagnosticUsageInput {
6
+ readonly workspaceRoot: string;
7
+ readonly tool: string;
8
+ readonly businessArgs: Readonly<Record<string, unknown>>;
9
+ readonly telemetry: Readonly<Record<string, unknown>> | null;
10
+ readonly startedAt: Date;
11
+ readonly finishedAt?: Date;
12
+ readonly status: "success" | "error";
13
+ readonly result?: unknown;
14
+ readonly error?: string;
15
+ readonly requestId?: string;
16
+ readonly logPath?: string;
17
+ }
18
+
19
+ function isRecord(value: unknown): value is Record<string, unknown> {
20
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
21
+ }
22
+
23
+ function resultRecord(result: unknown): Record<string, unknown> | undefined {
24
+ if (!isRecord(result)) return undefined;
25
+ return isRecord(result.structuredContent) ? result.structuredContent : result;
26
+ }
27
+
28
+ function stringArray(value: unknown): string[] {
29
+ return Array.isArray(value)
30
+ ? value.filter((item): item is string => typeof item === "string")
31
+ : [];
32
+ }
33
+
34
+ function canonicalValue(value: unknown): unknown {
35
+ if (Array.isArray(value)) return value.map(canonicalValue);
36
+ if (!isRecord(value)) return value;
37
+ return Object.fromEntries(
38
+ Object.entries(value)
39
+ .filter(([key]) => key !== "_diagnostic_telemetry")
40
+ .sort(([left], [right]) => left.localeCompare(right))
41
+ .map(([key, child]) => [key, canonicalValue(child)]),
42
+ );
43
+ }
44
+
45
+ export function diagnosticMutationFingerprint(
46
+ args: Readonly<Record<string, unknown>>,
47
+ ): string {
48
+ return createHash("sha256")
49
+ .update(JSON.stringify(canonicalValue(args)))
50
+ .digest("hex");
51
+ }
52
+
53
+ function appendMutationFields(
54
+ fields: Record<string, unknown>,
55
+ args: Readonly<Record<string, unknown>>,
56
+ ): void {
57
+ fields.mutation_fingerprint = diagnosticMutationFingerprint(args);
58
+ const type = typeof args.type === "string" ? args.type : "unknown";
59
+ const id = typeof args.id === "string" ? args.id : "unknown";
60
+ fields.mutation_target = `${type}:${id}`;
61
+ }
62
+
63
+ function appendSemanticFields(
64
+ fields: Record<string, unknown>,
65
+ receipt: unknown,
66
+ ): void {
67
+ if (!isRecord(receipt)) return;
68
+ const inventory = isRecord(receipt.inventory_contract)
69
+ ? receipt.inventory_contract
70
+ : undefined;
71
+ if (typeof inventory?.source_hash === "string") {
72
+ fields.semantic_source_hash = inventory.source_hash;
73
+ }
74
+ if (typeof receipt.logic_readiness === "string") {
75
+ fields.semantic_logic_readiness = receipt.logic_readiness;
76
+ }
77
+ if (typeof receipt.candidate_lane === "string") {
78
+ fields.semantic_candidate_lane = receipt.candidate_lane;
79
+ }
80
+ }
81
+
82
+ const RECEIPT_GAP_CODES = new Set([
83
+ "missing_verification_receipt",
84
+ "stale_verification_receipt",
85
+ "failed_verification_receipt",
86
+ "invalid_verification_receipt",
87
+ "verification_snapshot_unavailable",
88
+ ]);
89
+
90
+ function appendCoverageFields(
91
+ fields: Record<string, unknown>,
92
+ args: Readonly<Record<string, unknown>>,
93
+ result: Record<string, unknown>,
94
+ ): void {
95
+ const rows = Array.isArray(result.rows) ? result.rows.filter(isRecord) : [];
96
+ const summary = isRecord(result.summary) ? result.summary : {};
97
+ const gapCodes = rows.flatMap((row) => stringArray(row.proofGaps));
98
+ const repairPlan = isRecord(result.repairPlan)
99
+ ? result.repairPlan
100
+ : undefined;
101
+ const scope = isRecord(repairPlan?.scope) ? repairPlan.scope : undefined;
102
+ fields.coverage_by = typeof args.by === "string" ? args.by : "req";
103
+ fields.coverage_requirement_count = Number(summary.total ?? rows.length);
104
+ fields.coverage_proven_count = Number(summary.proofProven ?? 0);
105
+ fields.coverage_proof_missing_count = Number(summary.proofMissing ?? 0);
106
+ fields.coverage_proof_gap_count = gapCodes.length;
107
+ fields.coverage_gap_codes = [...new Set(gapCodes)].sort();
108
+ fields.coverage_receipt_gap_count = gapCodes.filter((code) =>
109
+ RECEIPT_GAP_CODES.has(code),
110
+ ).length;
111
+ if (typeof scope?.complete === "boolean") {
112
+ fields.coverage_scope_complete = scope.complete;
113
+ }
114
+ }
115
+
116
+ export function deriveDiagnosticUsageFields(
117
+ tool: string,
118
+ args: Readonly<Record<string, unknown>>,
119
+ telemetry: Readonly<Record<string, unknown>> | null,
120
+ result: unknown,
121
+ ): Record<string, unknown> {
122
+ const fields: Record<string, unknown> = {
123
+ telemetry_status: telemetry ? "provided" : "missing",
124
+ };
125
+ if (telemetry) {
126
+ fields.telemetry_is_autonomous = telemetry.is_autonomous ?? null;
127
+ fields.telemetry_confidence_score = telemetry.confidence_score ?? null;
128
+ fields.telemetry_attempt_number = telemetry.attempt_number ?? null;
129
+ if (typeof telemetry.session_id === "string") {
130
+ fields.session_id = telemetry.session_id;
131
+ }
132
+ if (typeof telemetry.actor_id === "string") {
133
+ fields.actor_id = telemetry.actor_id;
134
+ }
135
+ }
136
+
137
+ const structured = resultRecord(result);
138
+ if (tool === "kb_query" || tool === "kb_search") {
139
+ const resultCount = Number(structured?.count ?? 0);
140
+ fields.result_count = resultCount;
141
+ fields.zero_results = resultCount === 0;
142
+ fields.result_summary =
143
+ resultCount === 0 ? "0 results" : `${resultCount} results`;
144
+ }
145
+ if (tool === "kb_check") {
146
+ const count = Number(structured?.count ?? 0);
147
+ fields.violation_count = count;
148
+ fields.requested_rules = Array.isArray(args.rules) ? args.rules : [];
149
+ fields.result_summary =
150
+ count === 0 ? "0 violations" : `${count} violations`;
151
+ }
152
+ if (tool === "kb_coverage" && structured) {
153
+ appendCoverageFields(fields, args, structured);
154
+ fields.result_summary = `${String(
155
+ fields.coverage_proven_count,
156
+ )} proven; ${String(fields.coverage_proof_gap_count)} proof gaps`;
157
+ }
158
+ if (tool === "kb_semantic_advisor" && structured) {
159
+ appendSemanticFields(fields, structured.receipt);
160
+ }
161
+ if (tool === "kb_validate_upsert") {
162
+ appendMutationFields(fields, args);
163
+ fields.validation_valid = structured?.valid === true;
164
+ appendSemanticFields(fields, structured?.semanticAdvisor);
165
+ }
166
+ if (tool === "kb_upsert") {
167
+ appendMutationFields(fields, args);
168
+ appendSemanticFields(fields, structured?.semanticAdvisor);
169
+ }
170
+ if (!fields.result_summary) fields.result_summary = `${tool} completed`;
171
+ return fields;
172
+ }
173
+
174
+ export function appendCliDiagnosticUsage(input: DiagnosticUsageInput): void {
175
+ const finishedAt = input.finishedAt ?? new Date();
176
+ const requestId = input.requestId ?? `cli-${randomUUID()}`;
177
+ const logPath =
178
+ input.logPath ??
179
+ process.env.KIBI_CLI_DIAGNOSTIC_USAGE_LOG_PATH ??
180
+ path.join(input.workspaceRoot, ".kb", "usage.log");
181
+ mkdirSync(path.dirname(logPath), { recursive: true });
182
+ appendFileSync(
183
+ logPath,
184
+ `${JSON.stringify({
185
+ timestamp: finishedAt.toISOString(),
186
+ request_id: requestId,
187
+ tool: input.tool,
188
+ interface: "cli_json",
189
+ telemetry: input.telemetry,
190
+ business_args: input.businessArgs,
191
+ status: input.status,
192
+ started_at: input.startedAt.toISOString(),
193
+ finished_at: finishedAt.toISOString(),
194
+ duration_ms: finishedAt.getTime() - input.startedAt.getTime(),
195
+ active_branch: process.env.KIBI_BRANCH ?? null,
196
+ ...(input.error ? { error_message: input.error } : {}),
197
+ ...deriveDiagnosticUsageFields(
198
+ input.tool,
199
+ input.businessArgs,
200
+ input.telemetry,
201
+ input.result,
202
+ ),
203
+ })}\n`,
204
+ "utf8",
205
+ );
206
+ }