kibi-cli 0.19.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-errors.d.ts +3 -1
- package/dist/cli-errors.d.ts.map +1 -1
- package/dist/cli-errors.js +4 -1
- package/dist/cli-json-command.d.ts +1 -0
- package/dist/cli-json-command.d.ts.map +1 -1
- package/dist/cli-json-command.js +13 -4
- package/dist/cli-operation-loader.d.ts.map +1 -1
- package/dist/cli-operation-loader.js +53 -20
- package/dist/cli-operation-metadata.d.ts +21 -8
- package/dist/cli-operation-metadata.d.ts.map +1 -1
- package/dist/cli-operation-metadata.js +27 -10
- package/dist/cli-protocol.d.ts.map +1 -1
- package/dist/cli-protocol.js +38 -8
- package/dist/cli-register-foundation.d.ts.map +1 -1
- package/dist/cli-register-foundation.js +14 -2
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +33 -4
- package/dist/cli-register-proof.d.ts +3 -0
- package/dist/cli-register-proof.d.ts.map +1 -0
- package/dist/cli-register-proof.js +103 -0
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +11 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -8
- package/dist/commands/aggregated-checks.d.ts +1 -2
- package/dist/commands/aggregated-checks.d.ts.map +1 -1
- package/dist/commands/aggregated-checks.js +14 -9
- package/dist/commands/branch.d.ts +37 -0
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +375 -40
- package/dist/commands/check.d.ts +14 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +209 -110
- package/dist/commands/coverage.d.ts +1 -0
- package/dist/commands/coverage.d.ts.map +1 -1
- package/dist/commands/coverage.js +6 -0
- package/dist/commands/discovery-shared.d.ts.map +1 -1
- package/dist/commands/discovery-shared.js +10 -19
- package/dist/commands/doctor.d.ts +26 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +291 -30
- package/dist/commands/engine.d.ts +12 -0
- package/dist/commands/engine.d.ts.map +1 -1
- package/dist/commands/engine.js +50 -7
- package/dist/commands/gc.d.ts +5 -2
- package/dist/commands/gc.d.ts.map +1 -1
- package/dist/commands/gc.js +140 -71
- package/dist/commands/github-init.d.ts +57 -0
- package/dist/commands/github-init.d.ts.map +1 -0
- package/dist/commands/github-init.js +314 -0
- package/dist/commands/init-helpers.d.ts +1 -1
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +109 -28
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +79 -24
- package/dist/commands/legacy-storage-migration.d.ts +54 -0
- package/dist/commands/legacy-storage-migration.d.ts.map +1 -0
- package/dist/commands/legacy-storage-migration.js +277 -0
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +249 -96
- package/dist/commands/proof-migrate-legacy.d.ts +7 -0
- package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
- package/dist/commands/proof-migrate-legacy.js +45 -0
- package/dist/commands/proof-prune.d.ts +8 -0
- package/dist/commands/proof-prune.d.ts.map +1 -0
- package/dist/commands/proof-prune.js +53 -0
- package/dist/commands/prove.d.ts +37 -0
- package/dist/commands/prove.d.ts.map +1 -0
- package/dist/commands/prove.js +470 -0
- package/dist/commands/report.d.ts +24 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +191 -0
- package/dist/commands/sync/cache.d.ts +16 -3
- package/dist/commands/sync/cache.d.ts.map +1 -1
- package/dist/commands/sync/cache.js +111 -4
- package/dist/commands/sync/discovery.d.ts +26 -2
- package/dist/commands/sync/discovery.d.ts.map +1 -1
- package/dist/commands/sync/discovery.js +204 -15
- package/dist/commands/sync/extraction.d.ts +8 -1
- package/dist/commands/sync/extraction.d.ts.map +1 -1
- package/dist/commands/sync/extraction.js +38 -4
- package/dist/commands/sync/manifest.d.ts +9 -6
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +195 -60
- package/dist/commands/sync/persistence.d.ts +4 -1
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +26 -12
- package/dist/commands/sync/staging.d.ts +1 -0
- package/dist/commands/sync/staging.d.ts.map +1 -1
- package/dist/commands/sync/staging.js +5 -2
- package/dist/commands/sync/untracked-targets.d.ts +24 -0
- package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
- package/dist/commands/sync/untracked-targets.js +108 -0
- package/dist/commands/sync.d.ts +17 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +375 -106
- package/dist/diagnostics.d.ts +1 -1
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/engine-daemon.d.ts +3 -1
- package/dist/engine-daemon.d.ts.map +1 -1
- package/dist/engine-daemon.js +49 -20
- package/dist/engine.d.ts +34 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +578 -42
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +5 -6
- package/dist/extractors/manifest.d.ts +13 -1
- package/dist/extractors/manifest.d.ts.map +1 -1
- package/dist/extractors/manifest.js +97 -10
- package/dist/extractors/markdown.d.ts +5 -2
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +47 -12
- package/dist/extractors/playwright-cases.d.ts +24 -0
- package/dist/extractors/playwright-cases.d.ts.map +1 -0
- package/dist/extractors/playwright-cases.js +126 -0
- package/dist/extractors/relationships.d.ts +6 -0
- package/dist/extractors/relationships.d.ts.map +1 -1
- package/dist/extractors/relationships.js +2 -1
- package/dist/extractors/symbol-coordinates.d.ts +81 -3
- package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
- package/dist/extractors/symbol-coordinates.js +389 -51
- package/dist/extractors/symbols-coordinator.js +11 -1
- package/dist/extractors/symbols-ts.d.ts +1 -0
- package/dist/extractors/symbols-ts.d.ts.map +1 -1
- package/dist/extractors/symbols-ts.js +142 -67
- package/dist/intent-search.d.ts +61 -0
- package/dist/intent-search.d.ts.map +1 -0
- package/dist/intent-search.js +437 -0
- package/dist/logic/ir.d.ts +1 -0
- package/dist/logic/ir.d.ts.map +1 -1
- package/dist/logic/ir.js +1 -1
- package/dist/operations/bootstrap/activation.d.ts +5 -0
- package/dist/operations/bootstrap/activation.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/activation.js +58 -33
- package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts.map +1 -1
- package/dist/operations/bootstrap/candidates.d.ts +4 -0
- package/dist/operations/{autopilot → bootstrap}/candidates.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/candidates.js +22 -8
- package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts +2 -2
- package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/discovery-evidence.js +46 -6
- package/dist/operations/{autopilot → bootstrap}/discovery.d.ts +1 -1
- package/dist/operations/bootstrap/discovery.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/discovery.js +21 -14
- package/dist/operations/bootstrap/generate.d.ts +9 -0
- package/dist/operations/bootstrap/generate.d.ts.map +1 -0
- package/dist/operations/bootstrap/generate.js +207 -0
- package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts +2 -2
- package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/guidance-actions.js +4 -4
- package/dist/operations/{autopilot → bootstrap}/guidance.d.ts +3 -2
- package/dist/operations/bootstrap/guidance.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/guidance.js +3 -1
- package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts +2 -2
- package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/markdown-candidates.js +4 -3
- package/dist/operations/bootstrap/presentation.d.ts +15 -0
- package/dist/operations/bootstrap/presentation.d.ts.map +1 -0
- package/dist/operations/bootstrap/presentation.js +177 -0
- package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/types.d.ts +63 -21
- package/dist/operations/bootstrap/types.d.ts.map +1 -0
- package/dist/operations/bootstrap/types.js +25 -0
- package/dist/operations/modeling/model-requirement.d.ts +5 -0
- package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
- package/dist/operations/modeling/model-requirement.js +57 -63
- package/dist/operations/modeling/predicate-applicability.d.ts +16 -0
- package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-applicability.js +375 -0
- package/dist/operations/modeling/predicate-applyplan.d.ts +13 -2
- package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-applyplan.js +100 -3
- package/dist/operations/modeling/predicate-bindings.d.ts +6 -0
- package/dist/operations/modeling/predicate-bindings.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-bindings.js +122 -0
- package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-2.js +18 -2
- package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-3.js +17 -1
- package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-4.js +155 -0
- package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
- package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-catalog-5.js +291 -0
- package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog.js +4 -0
- package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-inference-1.js +8 -0
- package/dist/operations/modeling/predicate-inference-launcher.d.ts +10 -0
- package/dist/operations/modeling/predicate-inference-launcher.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-inference-launcher.js +13 -0
- package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-inference.js +4 -0
- package/dist/operations/modeling/predicate-loader.d.ts +1 -0
- package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-loader.js +11 -3
- package/dist/operations/modeling/predicate-ranker.d.ts +8 -1
- package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-ranker.js +159 -24
- package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-score-3.js +6 -0
- package/dist/operations/modeling/predicate-types.d.ts +35 -1
- package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-usage-hints-3.js +40 -0
- package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
- package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
- package/dist/operations/modeling/predicate-utils.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-utils.js +2 -0
- package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +203 -32
- package/dist/operations/mutation/contradictions.d.ts +2 -1
- package/dist/operations/mutation/contradictions.d.ts.map +1 -1
- package/dist/operations/mutation/contradictions.js +26 -5
- package/dist/operations/mutation/delete.d.ts +3 -0
- package/dist/operations/mutation/delete.d.ts.map +1 -1
- package/dist/operations/mutation/delete.js +483 -19
- package/dist/operations/mutation/entity-projection.d.ts +11 -0
- package/dist/operations/mutation/entity-projection.d.ts.map +1 -0
- package/dist/operations/mutation/entity-projection.js +14 -0
- package/dist/operations/mutation/relationships.d.ts +11 -0
- package/dist/operations/mutation/relationships.d.ts.map +1 -1
- package/dist/operations/mutation/relationships.js +77 -5
- package/dist/operations/mutation/saga.d.ts +51 -0
- package/dist/operations/mutation/saga.d.ts.map +1 -0
- package/dist/operations/mutation/saga.js +67 -0
- package/dist/operations/mutation/serialization.d.ts.map +1 -1
- package/dist/operations/mutation/serialization.js +3 -1
- package/dist/operations/mutation/source-authoring.d.ts +65 -0
- package/dist/operations/mutation/source-authoring.d.ts.map +1 -0
- package/dist/operations/mutation/source-authoring.js +576 -0
- package/dist/operations/mutation/strict-fact.d.ts +1 -0
- package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
- package/dist/operations/mutation/strict-fact.js +8 -5
- package/dist/operations/mutation/symbol-compiler-lock.d.ts +54 -0
- package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -0
- package/dist/operations/mutation/symbol-compiler-lock.js +337 -0
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-granularity.js +35 -4
- package/dist/operations/mutation/symbol-refresh.d.ts +19 -1
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-refresh.js +227 -63
- package/dist/operations/mutation/types.d.ts +57 -1
- package/dist/operations/mutation/types.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.d.ts +18 -2
- package/dist/operations/mutation/upsert.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.js +403 -32
- package/dist/operations/mutation/validate-upsert.js +2 -2
- package/dist/operations/mutation/validation.d.ts.map +1 -1
- package/dist/operations/mutation/validation.js +47 -4
- package/dist/operations/mutation/warnings.d.ts +1 -0
- package/dist/operations/mutation/warnings.d.ts.map +1 -1
- package/dist/operations/mutation/warnings.js +7 -5
- package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
- package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
- package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
- package/dist/operations/planning/apply-plan.d.ts +19 -0
- package/dist/operations/planning/apply-plan.d.ts.map +1 -0
- package/dist/operations/planning/apply-plan.js +1514 -0
- package/dist/operations/planning/compile-intent.d.ts +108 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -0
- package/dist/operations/planning/compile-intent.js +618 -0
- package/dist/operations/proof/ingest-proof.d.ts +34 -0
- package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
- package/dist/operations/proof/ingest-proof.js +307 -0
- package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
- package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
- package/dist/operations/proof/migrate-legacy-receipts.js +88 -0
- package/dist/operations/proof/prune-receipts.d.ts +35 -0
- package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
- package/dist/operations/proof/prune-receipts.js +91 -0
- package/dist/operations/proof/receipt-document.d.ts +29 -0
- package/dist/operations/proof/receipt-document.d.ts.map +1 -0
- package/dist/operations/proof/receipt-document.js +117 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +52 -28
- package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/clauses.js +35 -9
- package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/ingestion-boundary.js +7 -3
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +51 -0
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/predicate-rules-launcher.js +96 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
- package/dist/operations/semantic-advisor/types.d.ts +13 -5
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/prolog/codec.d.ts +13 -1
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +269 -153
- package/dist/prolog/error-terms.d.ts +47 -0
- package/dist/prolog/error-terms.d.ts.map +1 -0
- package/dist/prolog/error-terms.js +334 -0
- package/dist/prolog/janitor.d.ts +50 -0
- package/dist/prolog/janitor.d.ts.map +1 -0
- package/dist/prolog/janitor.js +154 -0
- package/dist/prolog/store-lock.d.ts +45 -0
- package/dist/prolog/store-lock.d.ts.map +1 -0
- package/dist/prolog/store-lock.js +195 -0
- package/dist/prolog.d.ts +7 -0
- package/dist/prolog.d.ts.map +1 -1
- package/dist/prolog.js +82 -25
- package/dist/proof/evaluate.d.ts +27 -0
- package/dist/proof/evaluate.d.ts.map +1 -0
- package/dist/proof/evaluate.js +151 -0
- package/dist/proof/inspect.d.ts +12 -0
- package/dist/proof/inspect.d.ts.map +1 -0
- package/dist/proof/inspect.js +236 -0
- package/dist/proof/integrations.d.ts +35 -0
- package/dist/proof/integrations.d.ts.map +1 -0
- package/dist/proof/integrations.js +123 -0
- package/dist/proof/producers/junit-adapter.d.ts +26 -0
- package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
- package/dist/proof/producers/junit-adapter.js +186 -0
- package/dist/proof/producers/playwright-case-id.d.ts +8 -0
- package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
- package/dist/proof/producers/playwright-case-id.js +25 -0
- package/dist/proof/producers/playwright-reporter.d.ts +27 -0
- package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
- package/dist/proof/producers/playwright-reporter.js +138 -0
- package/dist/proof/producers/tap-adapter.d.ts +10 -0
- package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
- package/dist/proof/producers/tap-adapter.js +200 -0
- package/dist/proof/receipt-outcome.d.ts +2 -0
- package/dist/proof/receipt-outcome.d.ts.map +1 -0
- package/dist/proof/receipt-outcome.js +1 -0
- package/dist/public/branch-resolver.d.ts +1 -0
- package/dist/public/branch-resolver.d.ts.map +1 -1
- package/dist/public/branch-resolver.js +1 -0
- package/dist/public/check-types.d.ts +2 -2
- package/dist/public/check-types.d.ts.map +1 -1
- package/dist/public/check-types.js +16 -16
- package/dist/public/diagnostic-usage.d.ts.map +1 -1
- package/dist/public/diagnostic-usage.js +74 -6
- package/dist/public/distribution-parity.d.ts +7 -1
- package/dist/public/distribution-parity.d.ts.map +1 -1
- package/dist/public/distribution-parity.js +15 -9
- package/dist/public/ignore-policy.d.ts.map +1 -1
- package/dist/public/ignore-policy.js +16 -4
- package/dist/public/impact/coverage-depth-quality.d.ts +7 -1
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +22 -4
- package/dist/public/impact/diagnostics.d.ts.map +1 -1
- package/dist/public/impact/diagnostics.js +2 -2
- package/dist/public/impact/diff-meaning.d.ts +1 -0
- package/dist/public/impact/diff-meaning.d.ts.map +1 -1
- package/dist/public/impact/diff-meaning.js +5 -2
- package/dist/public/impact/full-kb-quality.d.ts +7 -2
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +364 -39
- package/dist/public/impact/manifest.d.ts.map +1 -1
- package/dist/public/impact/manifest.js +2 -5
- package/dist/public/operational-artifacts.d.ts.map +1 -1
- package/dist/public/operational-artifacts.js +7 -1
- package/dist/public/operations/catalog.d.ts +900 -34
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/catalog.js +130 -6
- package/dist/public/operations/check-executor.d.ts +2 -2
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +68 -13
- package/dist/public/operations/check-format-shared.d.ts +3 -0
- package/dist/public/operations/check-format-shared.d.ts.map +1 -1
- package/dist/public/operations/check-format-shared.js +3 -0
- package/dist/public/operations/check-helpers.d.ts +27 -2
- package/dist/public/operations/check-helpers.d.ts.map +1 -1
- package/dist/public/operations/check-helpers.js +62 -26
- package/dist/public/operations/contracts.d.ts +18 -0
- package/dist/public/operations/contracts.d.ts.map +1 -0
- package/dist/public/operations/contracts.js +334 -0
- package/dist/public/operations/discovery-entities.d.ts +3 -0
- package/dist/public/operations/discovery-entities.d.ts.map +1 -1
- package/dist/public/operations/discovery-entities.js +4 -0
- package/dist/public/operations/discovery-executors.d.ts +43 -7
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +216 -13
- package/dist/public/operations/index.d.ts +9 -4
- package/dist/public/operations/index.d.ts.map +1 -1
- package/dist/public/operations/index.js +8 -3
- package/dist/public/operations/migration-plan.d.ts +102 -0
- package/dist/public/operations/migration-plan.d.ts.map +1 -0
- package/dist/public/operations/migration-plan.js +539 -0
- package/dist/public/operations/node-ports.d.ts.map +1 -1
- package/dist/public/operations/node-ports.js +71 -11
- package/dist/public/operations/prolog-json.d.ts +14 -0
- package/dist/public/operations/prolog-json.d.ts.map +1 -1
- package/dist/public/operations/prolog-json.js +44 -5
- package/dist/public/operations/repair-plan.d.ts +3 -3
- package/dist/public/operations/repair-plan.d.ts.map +1 -1
- package/dist/public/operations/repair-plan.js +49 -18
- package/dist/public/operations/result-envelope.d.ts +14 -0
- package/dist/public/operations/result-envelope.d.ts.map +1 -0
- package/dist/public/operations/result-envelope.js +106 -0
- package/dist/public/operations/runtime-types.d.ts +102 -7
- package/dist/public/operations/runtime-types.d.ts.map +1 -1
- package/dist/public/operations/source-relationship-parity.d.ts +13 -0
- package/dist/public/operations/source-relationship-parity.d.ts.map +1 -0
- package/dist/public/operations/source-relationship-parity.js +162 -0
- package/dist/public/operations/specs/{autopilot.d.ts → bootstrap.d.ts} +9 -9
- package/dist/public/operations/specs/bootstrap.d.ts.map +1 -0
- package/dist/public/operations/specs/{autopilot.js → bootstrap.js} +8 -7
- package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
- package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
- package/dist/public/operations/specs/check-rules.generated.js +34 -0
- package/dist/public/operations/specs/check.d.ts +9 -4
- package/dist/public/operations/specs/check.d.ts.map +1 -1
- package/dist/public/operations/specs/check.js +10 -21
- package/dist/public/operations/specs/discovery.d.ts +87 -3
- package/dist/public/operations/specs/discovery.d.ts.map +1 -1
- package/dist/public/operations/specs/discovery.js +53 -3
- package/dist/public/operations/specs/modeling.d.ts +3 -3
- package/dist/public/operations/specs/modeling.js +3 -3
- package/dist/public/operations/specs/mutation-schemas.d.ts +251 -14
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +16 -6
- package/dist/public/operations/specs/mutation.d.ts +42 -2
- package/dist/public/operations/specs/mutation.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation.js +26 -2
- package/dist/public/operations/specs/planning.d.ts +279 -0
- package/dist/public/operations/specs/planning.d.ts.map +1 -0
- package/dist/public/operations/specs/planning.js +197 -0
- package/dist/public/operations/specs/proof.d.ts +212 -0
- package/dist/public/operations/specs/proof.d.ts.map +1 -0
- package/dist/public/operations/specs/proof.js +30 -0
- package/dist/public/operations/specs/reporting.d.ts +23 -1
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +156 -11
- package/dist/public/operations/specs/upsert.d.ts +265 -14
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/specs/upsert.js +9 -0
- package/dist/public/operations/symbol-repair-plan.d.ts +22 -0
- package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -0
- package/dist/public/operations/symbol-repair-plan.js +238 -0
- package/dist/public/operations/types.d.ts +52 -1
- package/dist/public/operations/types.d.ts.map +1 -1
- package/dist/public/proof-fingerprint.d.ts +54 -0
- package/dist/public/proof-fingerprint.d.ts.map +1 -0
- package/dist/public/proof-fingerprint.js +141 -0
- package/dist/public/proof-protocol.d.ts +354 -0
- package/dist/public/proof-protocol.d.ts.map +1 -0
- package/dist/public/proof-protocol.js +454 -0
- package/dist/public/proof-receipt.d.ts +279 -0
- package/dist/public/proof-receipt.d.ts.map +1 -0
- package/dist/public/proof-receipt.js +377 -0
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +22 -6
- package/dist/public/skills/kibi-bootstrap/SKILL.md +58 -0
- package/dist/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
- package/dist/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
- package/dist/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
- package/dist/public/skills/kibi-freshness/SKILL.md +39 -9
- package/dist/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-freshness/resources/operation-access.md +6 -0
- package/dist/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
- package/dist/public/skills/kibi-traceability/SKILL.md +47 -47
- package/dist/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-traceability/resources/operation-access.md +5 -0
- package/dist/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
- package/dist/public/skills/kibi-traceability/resources/traceability.md +8 -0
- package/dist/public/skills/kibi-usage/SKILL.md +136 -231
- package/dist/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
- package/dist/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
- package/dist/public/skills/kibi-usage/resources/operation-access.md +36 -38
- package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
- package/dist/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
- package/dist/public/skills/kibi-usage/resources/source-authoring.md +31 -0
- package/dist/public/skills/kibi-usage/resources/workflows.md +57 -4
- package/dist/public/symbol-granularity.d.ts +3 -14
- package/dist/public/symbol-granularity.d.ts.map +1 -1
- package/dist/public/symbol-granularity.generated.d.ts +16 -0
- package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
- package/dist/public/symbol-granularity.generated.js +20 -0
- package/dist/public/symbol-granularity.js +6 -46
- package/dist/public/telemetry-acceptance.d.ts +3 -70
- package/dist/public/telemetry-acceptance.d.ts.map +1 -1
- package/dist/public/telemetry-acceptance.js +11 -2
- package/dist/public/telemetry-remediation.js +1 -1
- package/dist/relationships/shards.d.ts +16 -0
- package/dist/relationships/shards.d.ts.map +1 -1
- package/dist/relationships/shards.js +87 -2
- package/dist/report/brand.d.ts +19 -0
- package/dist/report/brand.d.ts.map +1 -0
- package/dist/report/brand.js +112 -0
- package/dist/report/html-report.css +282 -0
- package/dist/report/html-report.d.ts +21 -0
- package/dist/report/html-report.d.ts.map +1 -0
- package/dist/report/html-report.js +700 -0
- package/dist/report/relative-time.d.ts +4 -0
- package/dist/report/relative-time.d.ts.map +1 -0
- package/dist/report/relative-time.js +46 -0
- package/dist/report/report-view.d.ts +17 -0
- package/dist/report/report-view.d.ts.map +1 -0
- package/dist/report/report-view.js +33 -0
- package/dist/report/repository.d.ts +35 -0
- package/dist/report/repository.d.ts.map +1 -0
- package/dist/report/repository.js +151 -0
- package/dist/runtime/cli-runtime.d.ts +2 -0
- package/dist/runtime/cli-runtime.d.ts.map +1 -1
- package/dist/runtime/cli-runtime.js +90 -23
- package/dist/schemas/entity.schema.json +1254 -239
- package/dist/search-ranking.d.ts +1 -0
- package/dist/search-ranking.d.ts.map +1 -1
- package/dist/search-ranking.js +3 -0
- package/dist/traceability/evidence-model.d.ts +30 -2
- package/dist/traceability/evidence-model.d.ts.map +1 -1
- package/dist/traceability/evidence-model.js +2 -2
- package/dist/traceability/git-staged.d.ts +20 -0
- package/dist/traceability/git-staged.d.ts.map +1 -1
- package/dist/traceability/git-staged.js +156 -37
- package/dist/traceability/markdown-validate.d.ts.map +1 -1
- package/dist/traceability/markdown-validate.js +12 -7
- package/dist/traceability/staged-diagnostics.d.ts +7 -0
- package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
- package/dist/traceability/staged-diagnostics.js +78 -7
- package/dist/traceability/staged-file-coverage.d.ts +33 -0
- package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
- package/dist/traceability/staged-file-coverage.js +284 -0
- package/dist/traceability/staged-impact-contract.d.ts +3 -3
- package/dist/traceability/staged-impact-contract.d.ts.map +1 -1
- package/dist/traceability/staged-impact-contract.js +12 -40
- package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
- package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
- package/dist/traceability/staged-symbols-manifest.js +142 -26
- package/dist/traceability/symbol-extract.d.ts +5 -0
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +1 -1
- package/dist/traceability/temp-kb.d.ts +2 -0
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +14 -2
- package/dist/types/entities.d.ts +5 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/branch-resolver.d.ts +25 -10
- package/dist/utils/branch-resolver.d.ts.map +1 -1
- package/dist/utils/branch-resolver.js +124 -38
- package/dist/utils/branch-store-locator.d.ts +23 -0
- package/dist/utils/branch-store-locator.d.ts.map +1 -0
- package/dist/utils/branch-store-locator.js +90 -0
- package/dist/utils/branch-store.d.ts +21 -0
- package/dist/utils/branch-store.d.ts.map +1 -0
- package/dist/utils/branch-store.js +157 -0
- package/dist/utils/config.d.ts +39 -37
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +107 -119
- package/dist/utils/kb-manifest.d.ts +35 -0
- package/dist/utils/kb-manifest.d.ts.map +1 -0
- package/dist/utils/kb-manifest.js +154 -0
- package/dist/utils/kb-paths.d.ts +54 -0
- package/dist/utils/kb-paths.d.ts.map +1 -0
- package/dist/utils/kb-paths.js +125 -0
- package/dist/utils/manifest-paths.d.ts +4 -4
- package/dist/utils/manifest-paths.d.ts.map +1 -1
- package/dist/utils/manifest-paths.js +8 -56
- package/dist/utils/rule-registry.d.ts +42 -24
- package/dist/utils/rule-registry.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.d.ts +97 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -0
- package/dist/utils/rule-registry.generated.js +125 -0
- package/dist/utils/rule-registry.js +52 -148
- package/dist/utils/schema-version.d.ts +5 -5
- package/dist/utils/schema-version.d.ts.map +1 -1
- package/dist/utils/schema-version.js +26 -6
- package/dist/utils/strict-modeling.d.ts +1 -4
- package/dist/utils/strict-modeling.d.ts.map +1 -1
- package/dist/utils/strict-modeling.js +8 -9
- package/package.json +47 -11
- package/schema/config.json +2 -2
- package/schema/manifest.json +26 -0
- package/src/public/branch-resolver.ts +1 -0
- package/src/public/check-types.ts +22 -19
- package/src/public/diagnostic-usage.ts +84 -6
- package/src/public/distribution-parity.ts +17 -9
- package/src/public/ignore-policy.ts +16 -10
- package/src/public/impact/coverage-depth-quality.ts +37 -1
- package/src/public/impact/diagnostics.ts +2 -1
- package/src/public/impact/diff-meaning.ts +11 -4
- package/src/public/impact/full-kb-quality.ts +545 -41
- package/src/public/impact/manifest.ts +2 -4
- package/src/public/operational-artifacts.ts +9 -1
- package/src/public/operations/catalog.ts +153 -10
- package/src/public/operations/check-executor.ts +98 -15
- package/src/public/operations/check-format-shared.ts +6 -0
- package/src/public/operations/check-helpers.ts +74 -35
- package/src/public/operations/contracts.ts +382 -0
- package/src/public/operations/discovery-entities.ts +7 -0
- package/src/public/operations/discovery-executors.ts +315 -25
- package/src/public/operations/index.ts +9 -4
- package/src/public/operations/migration-plan.ts +747 -0
- package/src/public/operations/node-ports.ts +87 -13
- package/src/public/operations/prolog-json.ts +60 -5
- package/src/public/operations/repair-plan.ts +60 -22
- package/src/public/operations/result-envelope.ts +141 -0
- package/src/public/operations/runtime-types.ts +96 -5
- package/src/public/operations/source-relationship-parity.ts +226 -0
- package/src/public/operations/specs/{autopilot.ts → bootstrap.ts} +17 -16
- package/src/public/operations/specs/check-rules.generated.ts +37 -0
- package/src/public/operations/specs/check.ts +14 -22
- package/src/public/operations/specs/discovery.ts +57 -3
- package/src/public/operations/specs/modeling.ts +3 -3
- package/src/public/operations/specs/mutation-schemas.ts +24 -6
- package/src/public/operations/specs/mutation.ts +27 -2
- package/src/public/operations/specs/planning.ts +241 -0
- package/src/public/operations/specs/proof.ts +43 -0
- package/src/public/operations/specs/reporting.ts +193 -12
- package/src/public/operations/specs/upsert.ts +10 -0
- package/src/public/operations/symbol-repair-plan.ts +324 -0
- package/src/public/operations/types.ts +62 -1
- package/src/public/proof-fingerprint.ts +216 -0
- package/src/public/proof-protocol-types.d.ts +96 -0
- package/src/public/proof-protocol.ts +589 -0
- package/src/public/proof-receipt.ts +499 -0
- package/src/public/schemas/entity.ts +27 -6
- package/src/public/skills/kibi-bootstrap/SKILL.md +58 -0
- package/src/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
- package/src/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
- package/src/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
- package/src/public/skills/kibi-freshness/SKILL.md +39 -9
- package/src/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-freshness/resources/operation-access.md +6 -0
- package/src/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
- package/src/public/skills/kibi-traceability/SKILL.md +47 -47
- package/src/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-traceability/resources/operation-access.md +5 -0
- package/src/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
- package/src/public/skills/kibi-traceability/resources/traceability.md +8 -0
- package/src/public/skills/kibi-usage/SKILL.md +136 -231
- package/src/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
- package/src/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
- package/src/public/skills/kibi-usage/resources/operation-access.md +36 -38
- package/src/public/skills/kibi-usage/resources/proof.md +105 -0
- package/src/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
- package/src/public/skills/kibi-usage/resources/source-authoring.md +31 -0
- package/src/public/skills/kibi-usage/resources/workflows.md +57 -4
- package/src/public/symbol-granularity.generated.ts +41 -0
- package/src/public/symbol-granularity.ts +35 -59
- package/src/public/telemetry-acceptance-types.d.ts +98 -0
- package/src/public/telemetry-acceptance.ts +30 -93
- package/src/public/telemetry-remediation.ts +1 -1
- package/src/schemas/entity.schema.json +1254 -239
- package/templates/github/kibi-badge.yml +86 -0
- package/templates/github/kibi-report.yml +84 -0
- package/dist/operations/autopilot/activation.d.ts +0 -4
- package/dist/operations/autopilot/activation.d.ts.map +0 -1
- package/dist/operations/autopilot/candidates.d.ts +0 -4
- package/dist/operations/autopilot/discovery.d.ts.map +0 -1
- package/dist/operations/autopilot/generate.d.ts +0 -8
- package/dist/operations/autopilot/generate.d.ts.map +0 -1
- package/dist/operations/autopilot/generate.js +0 -112
- package/dist/operations/autopilot/guidance.d.ts.map +0 -1
- package/dist/operations/autopilot/presentation.d.ts +0 -13
- package/dist/operations/autopilot/presentation.d.ts.map +0 -1
- package/dist/operations/autopilot/presentation.js +0 -91
- package/dist/operations/autopilot/types.d.ts.map +0 -1
- package/dist/operations/autopilot/types.js +0 -8
- package/dist/public/operations/specs/autopilot.d.ts.map +0 -1
- package/dist/public/skills/init-kibi/SKILL.md +0 -62
- package/dist/public/verification-receipt.d.ts +0 -75
- package/dist/public/verification-receipt.d.ts.map +0 -1
- package/dist/public/verification-receipt.js +0 -129
- package/src/public/skills/init-kibi/SKILL.md +0 -62
- package/src/public/verification-receipt.ts +0 -170
- /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts +0 -0
- /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.js +0 -0
- /package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts +0 -0
- /package/dist/operations/{autopilot → bootstrap}/requirement-claims.js +0 -0
|
@@ -4,12 +4,21 @@ import type {
|
|
|
4
4
|
ExtractedEntity,
|
|
5
5
|
ExtractionResult,
|
|
6
6
|
} from "../../extractors/markdown.js";
|
|
7
|
-
import type { PrologProcess } from "../../prolog.js";
|
|
8
7
|
import {
|
|
8
|
+
normalizeEntityId,
|
|
9
|
+
parseAtomList,
|
|
9
10
|
parseEntityFromList,
|
|
10
11
|
parseListOfLists,
|
|
11
12
|
parseTriples,
|
|
12
13
|
} from "../../prolog/codec.js";
|
|
14
|
+
import {
|
|
15
|
+
runOperationJsonQuery,
|
|
16
|
+
toPrologAtom,
|
|
17
|
+
toPrologList,
|
|
18
|
+
} from "../operations/prolog-json.js";
|
|
19
|
+
import type { PrologPort } from "../operations/runtime-types.js";
|
|
20
|
+
import { PROOF_RECEIPT_MAX_AGE_SECONDS } from "../proof-receipt.js";
|
|
21
|
+
import relationshipSchema from "../schemas/relationship.js";
|
|
13
22
|
import {
|
|
14
23
|
analyzeTelemetryAcceptance,
|
|
15
24
|
createTelemetryAcceptanceDiagnostics,
|
|
@@ -20,33 +29,27 @@ import { createRequirementQualityDiagnostics } from "./requirement-quality.js";
|
|
|
20
29
|
import { createSymbolQualityDiagnostics } from "./symbol-quality.js";
|
|
21
30
|
import type { QualityDiagnostic } from "./types.js";
|
|
22
31
|
|
|
23
|
-
const RELATIONSHIP_TYPES
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
"implements",
|
|
30
|
-
"covered_by",
|
|
31
|
-
"constrained_by",
|
|
32
|
-
"constrains",
|
|
33
|
-
"requires_property",
|
|
34
|
-
"requires_predicate",
|
|
35
|
-
"guards",
|
|
36
|
-
"publishes",
|
|
37
|
-
"consumes",
|
|
38
|
-
"supersedes",
|
|
39
|
-
"relates_to",
|
|
40
|
-
] as const;
|
|
32
|
+
const RELATIONSHIP_TYPES: readonly string[] =
|
|
33
|
+
relationshipSchema.properties.type.enum;
|
|
34
|
+
const ENTITY_BATCH_SIZE = 32;
|
|
35
|
+
const PROLOG_OUTPUT_CAPACITY_MARKER =
|
|
36
|
+
"Query exceeded bounded Prolog output capacity (ENOBUFS)";
|
|
37
|
+
const ENTITY_IDS_QUERY = "findall(Id, kb_entity(Id, _, _), Ids)";
|
|
41
38
|
|
|
42
39
|
type FullKbQualityDiagnosticsOptions = {
|
|
43
|
-
readonly prolog: Pick<
|
|
40
|
+
readonly prolog: Pick<PrologPort, "query" | "queryEntities">;
|
|
44
41
|
readonly hardViolationEntityIds?: ReadonlySet<string>;
|
|
45
42
|
readonly maxDiagnostics?: number;
|
|
46
43
|
readonly workspaceRoot?: string;
|
|
47
44
|
readonly now?: Date;
|
|
45
|
+
readonly proofSnapshot?: string;
|
|
46
|
+
readonly checkedAt?: string;
|
|
48
47
|
};
|
|
49
48
|
|
|
49
|
+
type CoverageEvidencePayload = Readonly<{
|
|
50
|
+
readonly rows?: readonly Readonly<Record<string, unknown>>[];
|
|
51
|
+
}>;
|
|
52
|
+
|
|
50
53
|
function stringField(entity: Record<string, unknown>, key: string): string {
|
|
51
54
|
const value = entity[key];
|
|
52
55
|
return typeof value === "string" ? value : "";
|
|
@@ -77,6 +80,24 @@ function optionalStringArrayField(
|
|
|
77
80
|
return value.map((item) => String(item));
|
|
78
81
|
}
|
|
79
82
|
|
|
83
|
+
function optionalBooleanField(
|
|
84
|
+
entity: Record<string, unknown>,
|
|
85
|
+
key: string,
|
|
86
|
+
): boolean | undefined {
|
|
87
|
+
const value = entity[key];
|
|
88
|
+
return typeof value === "boolean" ? value : undefined;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function optionalObjectField(
|
|
92
|
+
entity: Record<string, unknown>,
|
|
93
|
+
key: string,
|
|
94
|
+
): Record<string, unknown> | undefined {
|
|
95
|
+
const value = entity[key];
|
|
96
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
97
|
+
? (value as Record<string, unknown>)
|
|
98
|
+
: undefined;
|
|
99
|
+
}
|
|
100
|
+
|
|
80
101
|
function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
|
|
81
102
|
const extracted: ExtractedEntity = {
|
|
82
103
|
id: stringField(entity, "id"),
|
|
@@ -101,6 +122,41 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
|
|
|
101
122
|
if (semanticText !== undefined) extracted.semantic_text = semanticText;
|
|
102
123
|
const logicClaims = optionalStringArrayField(entity, "logic_claims");
|
|
103
124
|
if (logicClaims !== undefined) extracted.logic_claims = logicClaims;
|
|
125
|
+
const semanticClauses = optionalStringArrayField(entity, "semantic_clauses");
|
|
126
|
+
if (semanticClauses !== undefined)
|
|
127
|
+
extracted.semantic_clauses = semanticClauses;
|
|
128
|
+
const semanticInventoryVersion = optionalStringField(
|
|
129
|
+
entity,
|
|
130
|
+
"semantic_inventory_version",
|
|
131
|
+
);
|
|
132
|
+
if (semanticInventoryVersion === "kibi.semantic-inventory.v1") {
|
|
133
|
+
extracted.semantic_inventory_version = semanticInventoryVersion;
|
|
134
|
+
}
|
|
135
|
+
const semanticSourceField = optionalStringField(
|
|
136
|
+
entity,
|
|
137
|
+
"semantic_source_field",
|
|
138
|
+
);
|
|
139
|
+
if (
|
|
140
|
+
semanticSourceField === "semantic_text" ||
|
|
141
|
+
semanticSourceField === "text_ref" ||
|
|
142
|
+
semanticSourceField === "title"
|
|
143
|
+
) {
|
|
144
|
+
extracted.semantic_source_field = semanticSourceField;
|
|
145
|
+
}
|
|
146
|
+
const semanticSourceHash = optionalStringField(
|
|
147
|
+
entity,
|
|
148
|
+
"semantic_source_hash",
|
|
149
|
+
);
|
|
150
|
+
if (semanticSourceHash !== undefined) {
|
|
151
|
+
extracted.semantic_source_hash = semanticSourceHash;
|
|
152
|
+
}
|
|
153
|
+
const semanticInventory = entity.semantic_inventory;
|
|
154
|
+
if (Array.isArray(semanticInventory)) {
|
|
155
|
+
extracted.semantic_inventory = semanticInventory as readonly Record<
|
|
156
|
+
string,
|
|
157
|
+
unknown
|
|
158
|
+
>[];
|
|
159
|
+
}
|
|
104
160
|
const granularityReason = optionalStringField(entity, "granularity_reason");
|
|
105
161
|
if (granularityReason !== undefined) {
|
|
106
162
|
extracted.granularity_reason = granularityReason;
|
|
@@ -117,6 +173,34 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
|
|
|
117
173
|
) {
|
|
118
174
|
extracted.verification_scope = verificationScope;
|
|
119
175
|
}
|
|
176
|
+
const verificationPerspective = optionalStringField(
|
|
177
|
+
entity,
|
|
178
|
+
"verification_perspective",
|
|
179
|
+
);
|
|
180
|
+
if (
|
|
181
|
+
verificationPerspective === "internal" ||
|
|
182
|
+
verificationPerspective === "consumer"
|
|
183
|
+
) {
|
|
184
|
+
extracted.verification_perspective = verificationPerspective;
|
|
185
|
+
}
|
|
186
|
+
const proofContract = optionalObjectField(entity, "proof_contract");
|
|
187
|
+
if (proofContract !== undefined) {
|
|
188
|
+
extracted.proof_contract = proofContract as NonNullable<
|
|
189
|
+
ExtractedEntity["proof_contract"]
|
|
190
|
+
>;
|
|
191
|
+
}
|
|
192
|
+
const proofBindings = entity.proof_bindings;
|
|
193
|
+
if (Array.isArray(proofBindings)) {
|
|
194
|
+
extracted.proof_bindings = proofBindings as NonNullable<
|
|
195
|
+
ExtractedEntity["proof_bindings"]
|
|
196
|
+
>;
|
|
197
|
+
}
|
|
198
|
+
const proofReceipts = entity.proof_receipts;
|
|
199
|
+
if (Array.isArray(proofReceipts)) {
|
|
200
|
+
extracted.proof_receipts = proofReceipts as NonNullable<
|
|
201
|
+
ExtractedEntity["proof_receipts"]
|
|
202
|
+
>;
|
|
203
|
+
}
|
|
120
204
|
const sourceLine = optionalNumberField(entity, "sourceLine");
|
|
121
205
|
if (sourceLine !== undefined) extracted.sourceLine = sourceLine;
|
|
122
206
|
const sourceColumn = optionalNumberField(entity, "sourceColumn");
|
|
@@ -133,22 +217,78 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
|
|
|
133
217
|
factKind === "observation" ||
|
|
134
218
|
factKind === "meta" ||
|
|
135
219
|
factKind === "predicate_schema" ||
|
|
136
|
-
factKind === "predicate"
|
|
220
|
+
factKind === "predicate" ||
|
|
221
|
+
factKind === "rule_schema" ||
|
|
222
|
+
factKind === "rule"
|
|
137
223
|
) {
|
|
138
224
|
extracted.fact_kind = factKind;
|
|
139
225
|
}
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
226
|
+
for (const field of [
|
|
227
|
+
"subject_key",
|
|
228
|
+
"property_key",
|
|
229
|
+
"value_string",
|
|
230
|
+
"unit",
|
|
231
|
+
"scope",
|
|
232
|
+
"valid_from",
|
|
233
|
+
"valid_to",
|
|
234
|
+
"canonical_key",
|
|
235
|
+
"claim_key",
|
|
236
|
+
"claim_text",
|
|
237
|
+
"predicate_name",
|
|
238
|
+
"predicate_namespace",
|
|
239
|
+
"rule_hash",
|
|
240
|
+
"rule_schema_id",
|
|
241
|
+
"rule_name",
|
|
242
|
+
"semantic_key",
|
|
243
|
+
] as const) {
|
|
244
|
+
const value = optionalStringField(entity, field);
|
|
245
|
+
if (value !== undefined) extracted[field] = value;
|
|
246
|
+
}
|
|
247
|
+
const operator = optionalStringField(entity, "operator");
|
|
248
|
+
if (
|
|
249
|
+
operator === "eq" ||
|
|
250
|
+
operator === "neq" ||
|
|
251
|
+
operator === "lt" ||
|
|
252
|
+
operator === "lte" ||
|
|
253
|
+
operator === "gt" ||
|
|
254
|
+
operator === "gte"
|
|
255
|
+
) {
|
|
256
|
+
extracted.operator = operator;
|
|
149
257
|
}
|
|
258
|
+
const valueType = optionalStringField(entity, "value_type");
|
|
259
|
+
if (
|
|
260
|
+
valueType === "string" ||
|
|
261
|
+
valueType === "int" ||
|
|
262
|
+
valueType === "number" ||
|
|
263
|
+
valueType === "bool"
|
|
264
|
+
) {
|
|
265
|
+
extracted.value_type = valueType;
|
|
266
|
+
}
|
|
267
|
+
const polarity = optionalStringField(entity, "polarity");
|
|
268
|
+
if (
|
|
269
|
+
polarity === "require" ||
|
|
270
|
+
polarity === "forbid" ||
|
|
271
|
+
polarity === "assert" ||
|
|
272
|
+
polarity === "deny"
|
|
273
|
+
) {
|
|
274
|
+
extracted.polarity = polarity;
|
|
275
|
+
}
|
|
276
|
+
const valueInt = optionalNumberField(entity, "value_int");
|
|
277
|
+
if (valueInt !== undefined) extracted.value_int = valueInt;
|
|
278
|
+
const valueNumber = optionalNumberField(entity, "value_number");
|
|
279
|
+
if (valueNumber !== undefined) extracted.value_number = valueNumber;
|
|
150
280
|
const predicateArity = optionalNumberField(entity, "predicate_arity");
|
|
151
281
|
if (predicateArity !== undefined) extracted.predicate_arity = predicateArity;
|
|
282
|
+
const claimSpanStart = optionalNumberField(entity, "claim_span_start");
|
|
283
|
+
if (claimSpanStart !== undefined) extracted.claim_span_start = claimSpanStart;
|
|
284
|
+
const claimSpanEnd = optionalNumberField(entity, "claim_span_end");
|
|
285
|
+
if (claimSpanEnd !== undefined) extracted.claim_span_end = claimSpanEnd;
|
|
286
|
+
const valueBool = optionalBooleanField(entity, "value_bool");
|
|
287
|
+
if (valueBool !== undefined) extracted.value_bool = valueBool;
|
|
288
|
+
const closedWorld = optionalBooleanField(entity, "closed_world");
|
|
289
|
+
if (closedWorld !== undefined) extracted.closed_world = closedWorld;
|
|
290
|
+
const ruleIr = optionalObjectField(entity, "rule_ir");
|
|
291
|
+
if (ruleIr !== undefined) extracted.rule_ir = ruleIr;
|
|
152
292
|
for (const field of [
|
|
153
293
|
"argument_names",
|
|
154
294
|
"argument_types",
|
|
@@ -170,25 +310,298 @@ function sourceFileFor(entity: Record<string, unknown>): string | undefined {
|
|
|
170
310
|
);
|
|
171
311
|
}
|
|
172
312
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
)
|
|
176
|
-
|
|
177
|
-
|
|
313
|
+
class BoundedEntityProjectionError extends Error {
|
|
314
|
+
constructor(message: string) {
|
|
315
|
+
super(message);
|
|
316
|
+
this.name = "BoundedEntityProjectionError";
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
function isOutputCapacityError(error: string | undefined): boolean {
|
|
321
|
+
return error?.includes(PROLOG_OUTPUT_CAPACITY_MARKER) === true;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
function parseAuthoritativeEntityIds(raw: string): string[] {
|
|
325
|
+
const trimmed = raw.trim();
|
|
326
|
+
if (
|
|
327
|
+
trimmed !== "[]" &&
|
|
328
|
+
(!trimmed.startsWith("[") || !trimmed.endsWith("]"))
|
|
329
|
+
) {
|
|
330
|
+
throw new Error("Full KB entity ID enumeration returned malformed data");
|
|
331
|
+
}
|
|
332
|
+
const ids = parseAtomList(trimmed);
|
|
333
|
+
if (ids.some((id) => id.length === 0)) {
|
|
334
|
+
throw new Error("Full KB entity ID enumeration returned an empty ID");
|
|
335
|
+
}
|
|
336
|
+
return ids;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
function validateEntityBatch(
|
|
340
|
+
requestedIds: readonly string[],
|
|
341
|
+
entities: readonly Record<string, unknown>[],
|
|
342
|
+
): Record<string, unknown>[] {
|
|
343
|
+
const requested = new Set<string>();
|
|
344
|
+
for (const id of requestedIds) {
|
|
345
|
+
const normalizedId = normalizeEntityId(id);
|
|
346
|
+
if (normalizedId.length === 0 || requested.has(normalizedId)) {
|
|
347
|
+
throw new Error(
|
|
348
|
+
"Full KB bounded entity projection returned duplicate or empty requested IDs",
|
|
349
|
+
);
|
|
350
|
+
}
|
|
351
|
+
requested.add(normalizedId);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
const returned = new Map<string, Record<string, unknown>>();
|
|
355
|
+
for (const entity of entities) {
|
|
356
|
+
const id = stringField(entity, "id");
|
|
357
|
+
const type = stringField(entity, "type");
|
|
358
|
+
const normalizedId = normalizeEntityId(id);
|
|
359
|
+
if (normalizedId.length === 0 || type.length === 0) {
|
|
360
|
+
throw new Error(
|
|
361
|
+
"Full KB bounded entity projection returned a malformed entity row",
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
if (!requested.has(normalizedId) || returned.has(normalizedId)) {
|
|
365
|
+
throw new Error(
|
|
366
|
+
`Full KB bounded entity projection returned an unexpected entity ID: ${normalizedId}`,
|
|
367
|
+
);
|
|
368
|
+
}
|
|
369
|
+
returned.set(normalizedId, entity);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
const missing = [...requested.keys()].filter((id) => !returned.has(id));
|
|
373
|
+
if (missing.length > 0) {
|
|
374
|
+
throw new Error(
|
|
375
|
+
`Full KB bounded entity projection returned an incomplete page; missing ${missing.join(", ")}`,
|
|
376
|
+
);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
return [...requested.keys()].map(
|
|
380
|
+
(id) => returned.get(id) as Record<string, unknown>,
|
|
381
|
+
);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
function validateIndexedEntityPage(
|
|
385
|
+
entities: readonly Record<string, unknown>[],
|
|
386
|
+
seenIds: ReadonlySet<string>,
|
|
387
|
+
): Record<string, unknown>[] {
|
|
388
|
+
const pageIds = new Set<string>();
|
|
389
|
+
for (const entity of entities) {
|
|
390
|
+
const id = normalizeEntityId(stringField(entity, "id"));
|
|
391
|
+
const type = stringField(entity, "type");
|
|
392
|
+
if (id.length === 0 || type.length === 0) {
|
|
393
|
+
throw new Error(
|
|
394
|
+
"Full KB paginated entity projection returned a malformed entity row",
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
if (pageIds.has(id) || seenIds.has(id)) {
|
|
398
|
+
throw new Error(
|
|
399
|
+
`Full KB paginated entity projection returned duplicate entity ID: ${id}`,
|
|
400
|
+
);
|
|
401
|
+
}
|
|
402
|
+
pageIds.add(id);
|
|
403
|
+
}
|
|
404
|
+
return [...entities];
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
function isOutputCapacityException(error: unknown): boolean {
|
|
408
|
+
return isOutputCapacityError(
|
|
409
|
+
error instanceof Error ? error.message : String(error),
|
|
178
410
|
);
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
async function loadIndexedEntityProjection(
|
|
414
|
+
queryEntities: NonNullable<PrologPort["queryEntities"]>,
|
|
415
|
+
): Promise<Record<string, unknown>[]> {
|
|
416
|
+
const entities: Record<string, unknown>[] = [];
|
|
417
|
+
const seenIds = new Set<string>();
|
|
418
|
+
let offset = 0;
|
|
419
|
+
let pageSize = ENTITY_BATCH_SIZE;
|
|
420
|
+
let totalCount: number | undefined;
|
|
421
|
+
type EntityPage = Awaited<ReturnType<typeof queryEntities>>;
|
|
422
|
+
|
|
423
|
+
while (totalCount === undefined || offset < totalCount) {
|
|
424
|
+
let page: EntityPage;
|
|
425
|
+
try {
|
|
426
|
+
page = await queryEntities({ limit: pageSize, offset });
|
|
427
|
+
} catch (error) {
|
|
428
|
+
if (!isOutputCapacityException(error) || pageSize === 1) {
|
|
429
|
+
throw error;
|
|
430
|
+
}
|
|
431
|
+
pageSize = Math.ceil(pageSize / 2);
|
|
432
|
+
continue;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
if (
|
|
436
|
+
!Number.isInteger(page.count) ||
|
|
437
|
+
page.count < 0 ||
|
|
438
|
+
(totalCount !== undefined && page.count !== totalCount)
|
|
439
|
+
) {
|
|
440
|
+
throw new Error(
|
|
441
|
+
"Full KB paginated entity projection returned an inconsistent count",
|
|
442
|
+
);
|
|
443
|
+
}
|
|
444
|
+
totalCount ??= page.count;
|
|
445
|
+
if (page.entities.length > pageSize) {
|
|
446
|
+
throw new Error(
|
|
447
|
+
"Full KB paginated entity projection returned an oversized page",
|
|
448
|
+
);
|
|
449
|
+
}
|
|
450
|
+
const pageEntities = validateIndexedEntityPage(page.entities, seenIds);
|
|
451
|
+
if (offset + pageEntities.length > totalCount) {
|
|
452
|
+
throw new Error(
|
|
453
|
+
"Full KB paginated entity projection returned more rows than its count",
|
|
454
|
+
);
|
|
455
|
+
}
|
|
456
|
+
if (pageEntities.length === 0 && offset < totalCount) {
|
|
457
|
+
throw new Error(
|
|
458
|
+
"Full KB paginated entity projection returned an incomplete page",
|
|
459
|
+
);
|
|
460
|
+
}
|
|
461
|
+
for (const entity of pageEntities) {
|
|
462
|
+
seenIds.add(normalizeEntityId(stringField(entity, "id")));
|
|
463
|
+
}
|
|
464
|
+
entities.push(...pageEntities);
|
|
465
|
+
offset += pageEntities.length;
|
|
466
|
+
if (offset < totalCount && pageEntities.length < pageSize) {
|
|
467
|
+
throw new Error(
|
|
468
|
+
"Full KB paginated entity projection returned an incomplete page",
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
if (entities.length !== totalCount) {
|
|
474
|
+
throw new Error(
|
|
475
|
+
"Full KB paginated entity projection returned an incomplete result",
|
|
476
|
+
);
|
|
477
|
+
}
|
|
478
|
+
return entities;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
async function loadEntityBatch(
|
|
482
|
+
prolog: Pick<PrologPort, "query">,
|
|
483
|
+
ids: readonly string[],
|
|
484
|
+
): Promise<Record<string, unknown>[]> {
|
|
485
|
+
const idTerms = ids.map((id) => toPrologAtom(id)).join(",");
|
|
486
|
+
const result = await prolog.query(
|
|
487
|
+
`findall([Id,Type,Props], (member(Id, [${idTerms}]), kb_entity(Id, Type, Props)), Results)`,
|
|
488
|
+
);
|
|
489
|
+
if (!result.success) {
|
|
490
|
+
const message = result.error ?? "Unknown error";
|
|
491
|
+
if (isOutputCapacityError(result.error)) {
|
|
492
|
+
throw new BoundedEntityProjectionError(message);
|
|
493
|
+
}
|
|
494
|
+
throw new Error(
|
|
495
|
+
`Full KB bounded entity projection query failed: ${message}`,
|
|
496
|
+
);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
const rawRows = result.bindings.Results;
|
|
500
|
+
if (rawRows === undefined) {
|
|
501
|
+
throw new Error(
|
|
502
|
+
"Full KB bounded entity projection query returned no Results binding",
|
|
503
|
+
);
|
|
504
|
+
}
|
|
505
|
+
return validateEntityBatch(
|
|
506
|
+
ids,
|
|
507
|
+
parseListOfLists(rawRows).map(parseEntityFromList),
|
|
508
|
+
);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
async function loadEntityBatchAdaptively(
|
|
512
|
+
prolog: Pick<PrologPort, "query">,
|
|
513
|
+
ids: readonly string[],
|
|
514
|
+
): Promise<Record<string, unknown>[]> {
|
|
515
|
+
try {
|
|
516
|
+
return await loadEntityBatch(prolog, ids);
|
|
517
|
+
} catch (error) {
|
|
518
|
+
if (!(error instanceof BoundedEntityProjectionError)) throw error;
|
|
519
|
+
if (ids.length === 1) {
|
|
520
|
+
throw new Error(
|
|
521
|
+
`Full KB entity projection failed for ${ids[0]}: ${error.message}`,
|
|
522
|
+
);
|
|
523
|
+
}
|
|
524
|
+
const midpoint = Math.ceil(ids.length / 2);
|
|
525
|
+
const left = await loadEntityBatchAdaptively(
|
|
526
|
+
prolog,
|
|
527
|
+
ids.slice(0, midpoint),
|
|
528
|
+
);
|
|
529
|
+
const right = await loadEntityBatchAdaptively(prolog, ids.slice(midpoint));
|
|
530
|
+
return [...left, ...right];
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
async function loadBoundedEntityProjection(
|
|
535
|
+
prolog: Pick<PrologPort, "query">,
|
|
536
|
+
): Promise<Record<string, unknown>[]> {
|
|
537
|
+
const idsResult = await prolog.query(ENTITY_IDS_QUERY);
|
|
538
|
+
if (!idsResult.success) {
|
|
539
|
+
throw new Error(
|
|
540
|
+
`Full KB entity ID enumeration query failed: ${idsResult.error ?? "Unknown error"}`,
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
const rawIds = idsResult.bindings.Ids;
|
|
544
|
+
if (rawIds === undefined) {
|
|
545
|
+
throw new Error(
|
|
546
|
+
"Full KB entity ID enumeration query returned no Ids binding",
|
|
547
|
+
);
|
|
548
|
+
}
|
|
549
|
+
const ids = parseAuthoritativeEntityIds(rawIds);
|
|
550
|
+
const entities: Record<string, unknown>[] = [];
|
|
551
|
+
for (let offset = 0; offset < ids.length; offset += ENTITY_BATCH_SIZE) {
|
|
552
|
+
entities.push(
|
|
553
|
+
...(await loadEntityBatchAdaptively(
|
|
554
|
+
prolog,
|
|
555
|
+
ids.slice(offset, offset + ENTITY_BATCH_SIZE),
|
|
556
|
+
)),
|
|
557
|
+
);
|
|
558
|
+
}
|
|
559
|
+
return entities;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
export async function loadKbExtractionResults(
|
|
563
|
+
prolog: Pick<PrologPort, "query" | "queryEntities">,
|
|
564
|
+
): Promise<ExtractionResult[]> {
|
|
565
|
+
let entities: Record<string, unknown>[];
|
|
566
|
+
if (prolog.queryEntities !== undefined) {
|
|
567
|
+
entities = await loadIndexedEntityProjection(
|
|
568
|
+
prolog.queryEntities.bind(prolog),
|
|
569
|
+
);
|
|
570
|
+
} else {
|
|
571
|
+
const entityResult = await prolog.query(
|
|
572
|
+
"findall([Id,Type,Props], kb_entity(Id, Type, Props), Results)",
|
|
573
|
+
);
|
|
574
|
+
if (entityResult.success) {
|
|
575
|
+
entities = entityResult.bindings.Results
|
|
576
|
+
? parseListOfLists(entityResult.bindings.Results).map(
|
|
577
|
+
parseEntityFromList,
|
|
578
|
+
)
|
|
579
|
+
: [];
|
|
580
|
+
} else if (isOutputCapacityError(entityResult.error)) {
|
|
581
|
+
entities = await loadBoundedEntityProjection(prolog);
|
|
582
|
+
} else {
|
|
583
|
+
throw new Error(
|
|
584
|
+
`Full KB entity projection query failed: ${entityResult.error ?? "Unknown error"}`,
|
|
585
|
+
);
|
|
586
|
+
}
|
|
587
|
+
}
|
|
182
588
|
const relationships = new Map<string, ExtractionResult["relationships"]>();
|
|
183
589
|
|
|
184
590
|
for (const relationshipType of RELATIONSHIP_TYPES) {
|
|
185
591
|
const relResult = await prolog.query(
|
|
186
592
|
`findall([From,To,'${relationshipType}'], kb_relationship(${relationshipType}, From, To), Rels)`,
|
|
187
593
|
);
|
|
594
|
+
if (!relResult.success) {
|
|
595
|
+
throw new Error(
|
|
596
|
+
`Full KB relationship projection query failed for ${relationshipType}: ${relResult.error ?? "Unknown error"}`,
|
|
597
|
+
);
|
|
598
|
+
}
|
|
188
599
|
const rows = relResult.bindings.Rels
|
|
189
600
|
? parseTriples(relResult.bindings.Rels)
|
|
190
601
|
: [];
|
|
191
|
-
for (const [
|
|
602
|
+
for (const [rawFrom, rawTo, type] of rows) {
|
|
603
|
+
const from = normalizeEntityId(rawFrom);
|
|
604
|
+
const to = normalizeEntityId(rawTo);
|
|
192
605
|
const current = relationships.get(from) ?? [];
|
|
193
606
|
current.push({ from, to, type });
|
|
194
607
|
relationships.set(from, current);
|
|
@@ -208,6 +621,89 @@ async function loadKbExtractionResults(
|
|
|
208
621
|
});
|
|
209
622
|
}
|
|
210
623
|
|
|
624
|
+
export function passingE2eStage(
|
|
625
|
+
passingE2e: unknown,
|
|
626
|
+
): Readonly<Record<string, unknown>> | undefined {
|
|
627
|
+
return passingE2e &&
|
|
628
|
+
typeof passingE2e === "object" &&
|
|
629
|
+
!Array.isArray(passingE2e)
|
|
630
|
+
? (passingE2e as Readonly<Record<string, unknown>>)
|
|
631
|
+
: undefined;
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
function stringArrayField(value: unknown): readonly string[] | undefined {
|
|
635
|
+
return Array.isArray(value) ? value.map(String) : undefined;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
async function loadCoverageProofEvidence(
|
|
639
|
+
prolog: Pick<PrologPort, "query">,
|
|
640
|
+
requirementCount: number,
|
|
641
|
+
proofSnapshot: string | undefined,
|
|
642
|
+
checkedAt: string | undefined,
|
|
643
|
+
): Promise<
|
|
644
|
+
ReadonlyMap<
|
|
645
|
+
string,
|
|
646
|
+
Readonly<{
|
|
647
|
+
readonly proofStatus?: string;
|
|
648
|
+
readonly passingE2eStatus?: string;
|
|
649
|
+
readonly passingE2eTests?: readonly string[];
|
|
650
|
+
readonly receiptGapCodes?: readonly string[];
|
|
651
|
+
}>
|
|
652
|
+
>
|
|
653
|
+
> {
|
|
654
|
+
if (
|
|
655
|
+
proofSnapshot === undefined ||
|
|
656
|
+
checkedAt === undefined ||
|
|
657
|
+
requirementCount === 0
|
|
658
|
+
) {
|
|
659
|
+
return new Map();
|
|
660
|
+
}
|
|
661
|
+
let payload: CoverageEvidencePayload;
|
|
662
|
+
try {
|
|
663
|
+
// W1 push-down: the slim evidence projection returns only the fields the
|
|
664
|
+
// quality diagnostics consume, keeping the response far below the output
|
|
665
|
+
// capacity limit on large KBs (the full coverage report rows were the
|
|
666
|
+
// original ENOBUFS offender).
|
|
667
|
+
payload = await runOperationJsonQuery<CoverageEvidencePayload>(
|
|
668
|
+
prolog as PrologPort,
|
|
669
|
+
"discovery.pl",
|
|
670
|
+
`discovery:coverage_evidence_json(${toPrologList([])}, ${toPrologAtom(proofSnapshot)}, ${toPrologAtom(checkedAt)}, ${PROOF_RECEIPT_MAX_AGE_SECONDS}, JsonString)`,
|
|
671
|
+
"Quality diagnostic coverage evidence",
|
|
672
|
+
);
|
|
673
|
+
} catch {
|
|
674
|
+
// Quality diagnostics must fail closed when the optional proof readback is
|
|
675
|
+
// unavailable; a failed advisory query must not make kb_check fail.
|
|
676
|
+
return new Map();
|
|
677
|
+
}
|
|
678
|
+
const evidence = new Map<
|
|
679
|
+
string,
|
|
680
|
+
Readonly<{
|
|
681
|
+
readonly proofStatus?: string;
|
|
682
|
+
readonly passingE2eStatus?: string;
|
|
683
|
+
readonly passingE2eTests?: readonly string[];
|
|
684
|
+
readonly receiptGapCodes?: readonly string[];
|
|
685
|
+
}>
|
|
686
|
+
>();
|
|
687
|
+
for (const row of payload.rows ?? []) {
|
|
688
|
+
const id = typeof row.id === "string" ? row.id : undefined;
|
|
689
|
+
if (id === undefined) continue;
|
|
690
|
+
const passingE2eTests = stringArrayField(row.passingE2eTests) ?? [];
|
|
691
|
+
evidence.set(id, {
|
|
692
|
+
...(typeof row.proofStatus === "string"
|
|
693
|
+
? { proofStatus: row.proofStatus }
|
|
694
|
+
: {}),
|
|
695
|
+
...(typeof row.passingE2eStatus === "string"
|
|
696
|
+
? { passingE2eStatus: row.passingE2eStatus }
|
|
697
|
+
: {}),
|
|
698
|
+
passingE2eTests,
|
|
699
|
+
...(Array.isArray(row.receiptGapCodes)
|
|
700
|
+
? { receiptGapCodes: row.receiptGapCodes.map(String) }
|
|
701
|
+
: {}),
|
|
702
|
+
});
|
|
703
|
+
}
|
|
704
|
+
return evidence;
|
|
705
|
+
}
|
|
706
|
+
|
|
211
707
|
function capDiagnostics(
|
|
212
708
|
diagnostics: readonly QualityDiagnostic[],
|
|
213
709
|
maxDiagnostics: number | undefined,
|
|
@@ -282,8 +778,16 @@ export async function collectFullKbQualityDiagnostics(
|
|
|
282
778
|
options.now ?? new Date(),
|
|
283
779
|
),
|
|
284
780
|
]);
|
|
285
|
-
const
|
|
286
|
-
|
|
781
|
+
const proofEvidence = await loadCoverageProofEvidence(
|
|
782
|
+
options.prolog,
|
|
783
|
+
manifestResults.filter((result) => result.entity.type === "req").length,
|
|
784
|
+
options.proofSnapshot,
|
|
785
|
+
options.checkedAt,
|
|
786
|
+
);
|
|
787
|
+
const coverageDepthDiagnostics = createCoverageDepthQualityDiagnostics(
|
|
788
|
+
manifestResults,
|
|
789
|
+
proofEvidence,
|
|
790
|
+
);
|
|
287
791
|
const diagnostics = [
|
|
288
792
|
...telemetryDiagnostics,
|
|
289
793
|
...createRequirementQualityDiagnostics({
|
|
@@ -3,7 +3,7 @@ import * as path from "node:path";
|
|
|
3
3
|
import { extractFromManifest } from "../../extractors/manifest.js";
|
|
4
4
|
import type { ExtractionResult } from "../../extractors/markdown.js";
|
|
5
5
|
import type { ManifestLookup } from "../../traceability/symbol-extract.js";
|
|
6
|
-
import {
|
|
6
|
+
import { CANONICAL_ENTITY_PATHS } from "../../utils/kb-paths.js";
|
|
7
7
|
import { isTraceabilityRelationshipType } from "../symbol-granularity.js";
|
|
8
8
|
import { normalizeSourceFile } from "./source-changes.js";
|
|
9
9
|
import type { TraceabilityRelationship } from "./types.js";
|
|
@@ -19,9 +19,7 @@ function toTraceabilityRelationships(
|
|
|
19
19
|
export function readImpactManifestResults(
|
|
20
20
|
workspaceRoot: string,
|
|
21
21
|
): readonly ExtractionResult[] {
|
|
22
|
-
const
|
|
23
|
-
const symbolsPath = config.paths.symbols;
|
|
24
|
-
if (!symbolsPath) return [];
|
|
22
|
+
const symbolsPath = CANONICAL_ENTITY_PATHS.symbols;
|
|
25
23
|
|
|
26
24
|
const absolutePath = path.isAbsolute(symbolsPath)
|
|
27
25
|
? symbolsPath
|