kibi-cli 1.0.1 → 2.1.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.js +3 -3
- package/dist/cli-operation-metadata.d.ts +4 -3
- package/dist/cli-operation-metadata.d.ts.map +1 -1
- package/dist/cli-operation-metadata.js +7 -5
- package/dist/cli-protocol.js +1 -1
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +7 -0
- 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 +127 -0
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +7 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -10
- package/dist/commands/branch.d.ts +1 -0
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +8 -4
- package/dist/commands/check-generated.d.ts +7 -0
- package/dist/commands/check-generated.d.ts.map +1 -0
- package/dist/commands/check-generated.js +192 -0
- package/dist/commands/check.d.ts +14 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +193 -46
- 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/doctor.d.ts +22 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +170 -23
- package/dist/commands/engine.d.ts +12 -0
- package/dist/commands/engine.d.ts.map +1 -1
- package/dist/commands/engine.js +42 -0
- package/dist/commands/github-init.d.ts +1 -0
- package/dist/commands/github-init.d.ts.map +1 -1
- package/dist/commands/github-init.js +9 -5
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +49 -10
- package/dist/commands/migrate.d.ts +4 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +7 -7
- package/dist/commands/proof-explain.d.ts +10 -0
- package/dist/commands/proof-explain.d.ts.map +1 -0
- package/dist/commands/proof-explain.js +45 -0
- package/dist/commands/proof-impact.d.ts +7 -0
- package/dist/commands/proof-impact.d.ts.map +1 -0
- package/dist/commands/proof-impact.js +39 -0
- 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.map +1 -1
- package/dist/commands/report.js +18 -3
- package/dist/commands/sync/discovery.d.ts +3 -0
- package/dist/commands/sync/discovery.d.ts.map +1 -1
- package/dist/commands/sync/discovery.js +36 -28
- package/dist/commands/sync/manifest.d.ts +2 -1
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +55 -21
- 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 +31 -14
- 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 +11 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +74 -30
- 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 +17 -77
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +331 -91
- package/dist/env/bootstrap.d.ts +84 -0
- package/dist/env/bootstrap.d.ts.map +1 -0
- package/dist/env/bootstrap.js +310 -0
- package/dist/extractors/manifest.d.ts +5 -0
- package/dist/extractors/manifest.d.ts.map +1 -1
- package/dist/extractors/manifest.js +46 -1
- package/dist/extractors/markdown.d.ts +7 -3
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +60 -24
- package/dist/extractors/playwright-cases.js +1 -1
- package/dist/extractors/relationships.d.ts +6 -0
- package/dist/extractors/relationships.d.ts.map +1 -1
- package/dist/extractors/relationships.js +1 -1
- package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
- package/dist/extractors/symbols-coordinator.d.ts +8 -0
- package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/extractors/symbols-coordinator.js +40 -0
- package/dist/extractors/symbols-ts.d.ts +9 -19
- package/dist/extractors/symbols-ts.d.ts.map +1 -1
- package/dist/extractors/symbols-ts.js +34 -429
- package/dist/intent-search.d.ts +1 -0
- package/dist/intent-search.d.ts.map +1 -1
- package/dist/intent-search.js +11 -8
- 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 +2 -1
- package/dist/operations/bootstrap/activation.d.ts.map +1 -1
- package/dist/operations/bootstrap/activation.js +11 -3
- package/dist/operations/bootstrap/generate.d.ts +2 -1
- package/dist/operations/bootstrap/generate.d.ts.map +1 -1
- package/dist/operations/bootstrap/generate.js +6 -3
- package/dist/operations/bootstrap/guidance.d.ts +1 -0
- package/dist/operations/bootstrap/guidance.d.ts.map +1 -1
- package/dist/operations/bootstrap/guidance.js +1 -1
- 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 -46
- package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-applicability.js +103 -4
- 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-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-loader.d.ts +1 -0
- package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-loader.js +4 -3
- package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-ranker.js +4 -1
- package/dist/operations/modeling/predicate-types.d.ts +1 -1
- package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
- 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/suggest-predicates.d.ts +4 -2
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +82 -22
- 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 +100 -32
- package/dist/operations/mutation/relationships.d.ts +1 -0
- package/dist/operations/mutation/relationships.d.ts.map +1 -1
- package/dist/operations/mutation/relationships.js +6 -4
- 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 -2
- package/dist/operations/mutation/source-authoring.d.ts +5 -1
- package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
- package/dist/operations/mutation/source-authoring.js +79 -46
- 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 +5 -2
- package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-compiler-lock.js +65 -2
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-granularity.js +11 -89
- package/dist/operations/mutation/symbol-refresh.d.ts +1 -0
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-refresh.js +10 -8
- 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 +86 -54
- 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 +46 -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 +8 -106
- package/dist/operations/planning/apply-plan.d.ts.map +1 -1
- package/dist/operations/planning/apply-plan.js +113 -36
- package/dist/operations/planning/compile-intent.d.ts +51 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -1
- package/dist/operations/planning/compile-intent.js +133 -17
- package/dist/operations/proof/baseline-diff.d.ts +41 -0
- package/dist/operations/proof/baseline-diff.d.ts.map +1 -0
- package/dist/operations/proof/baseline-diff.js +153 -0
- package/dist/operations/proof/explain.d.ts +75 -0
- package/dist/operations/proof/explain.d.ts.map +1 -0
- package/dist/operations/proof/explain.js +294 -0
- package/dist/operations/proof/impact.d.ts +45 -0
- package/dist/operations/proof/impact.d.ts.map +1 -0
- package/dist/operations/proof/impact.js +118 -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 +348 -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 +92 -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/analysis-receipt.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analysis-receipt.js +3 -9
- 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 +64 -93
- package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/clauses.js +20 -7
- package/dist/operations/semantic-advisor/plugin-orchestration.d.ts +63 -0
- package/dist/operations/semantic-advisor/plugin-orchestration.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/plugin-orchestration.js +489 -0
- package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +15 -2
- package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-core.js +7 -140
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +11 -12
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-launcher.js +6 -94
- package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +16 -0
- package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-policy.js +7 -150
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +9 -0
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +7 -102
- package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +13 -0
- package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-product.js +7 -133
- 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 +1 -0
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/plugins/compose-ontology-packs.d.ts +51 -0
- package/dist/plugins/compose-ontology-packs.d.ts.map +1 -0
- package/dist/plugins/compose-ontology-packs.js +257 -0
- package/dist/plugins/compose-semantic-classifier.d.ts +42 -0
- package/dist/plugins/compose-semantic-classifier.d.ts.map +1 -0
- package/dist/plugins/compose-semantic-classifier.js +211 -0
- package/dist/plugins/external-allowlist.d.ts +10 -0
- package/dist/plugins/external-allowlist.d.ts.map +1 -0
- package/dist/plugins/external-allowlist.js +16 -0
- package/dist/plugins/index.d.ts +9 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +33 -0
- package/dist/plugins/load-plugin.d.ts +19 -0
- package/dist/plugins/load-plugin.d.ts.map +1 -0
- package/dist/plugins/load-plugin.js +59 -0
- package/dist/plugins/project-config.d.ts +28 -0
- package/dist/plugins/project-config.d.ts.map +1 -0
- package/dist/plugins/project-config.js +90 -0
- package/dist/plugins/registry.d.ts +93 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +338 -0
- package/dist/plugins/resolve-package.d.ts +47 -0
- package/dist/plugins/resolve-package.d.ts.map +1 -0
- package/dist/plugins/resolve-package.js +262 -0
- package/dist/plugins/source-analysis-service.d.ts +44 -0
- package/dist/plugins/source-analysis-service.d.ts.map +1 -0
- package/dist/plugins/source-analysis-service.js +232 -0
- package/dist/prolog/codec.d.ts +13 -1
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +269 -154
- 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 +55 -17
- 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/{public → proof/producers}/playwright-case-id.d.ts +1 -1
- package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
- package/dist/{public → proof/producers}/playwright-case-id.js +1 -1
- 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/diagnostic-usage.js +6 -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 -10
- package/dist/public/extractors/symbols-coordinator.d.ts +1 -1
- package/dist/public/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/public/extractors/symbols-coordinator.js +1 -1
- package/dist/public/impact/analyzer.d.ts +1 -1
- package/dist/public/impact/analyzer.d.ts.map +1 -1
- package/dist/public/impact/analyzer.js +6 -4
- package/dist/public/impact/coverage-depth-quality.d.ts +1 -0
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +1 -1
- 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 +5 -2
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +329 -64
- package/dist/public/operations/catalog.d.ts +450 -196
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/catalog.js +6 -4
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +4 -8
- package/dist/public/operations/check-helpers.d.ts +1 -1
- package/dist/public/operations/check-helpers.d.ts.map +1 -1
- package/dist/public/operations/check-helpers.js +1 -1
- package/dist/public/operations/contracts.d.ts +7 -0
- package/dist/public/operations/contracts.d.ts.map +1 -1
- package/dist/public/operations/contracts.js +66 -34
- package/dist/public/operations/discovery-entities.d.ts +15 -0
- package/dist/public/operations/discovery-entities.d.ts.map +1 -1
- package/dist/public/operations/discovery-entities.js +38 -0
- package/dist/public/operations/discovery-executors.d.ts +9 -9
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +39 -31
- package/dist/public/operations/index.d.ts +1 -1
- package/dist/public/operations/index.d.ts.map +1 -1
- package/dist/public/operations/index.js +1 -1
- package/dist/public/operations/migration-plan.d.ts +4 -3
- package/dist/public/operations/migration-plan.d.ts.map +1 -1
- package/dist/public/operations/migration-plan.js +23 -21
- package/dist/public/operations/node-ports.js +6 -6
- package/dist/public/operations/prolog-json.d.ts +1 -1
- package/dist/public/operations/prolog-json.d.ts.map +1 -1
- package/dist/public/operations/prolog-json.js +7 -7
- 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 -19
- package/dist/public/operations/result-envelope.d.ts +1 -0
- package/dist/public/operations/result-envelope.d.ts.map +1 -1
- package/dist/public/operations/result-envelope.js +12 -10
- package/dist/public/operations/runtime-types.d.ts +21 -1
- package/dist/public/operations/runtime-types.d.ts.map +1 -1
- 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 +35 -0
- package/dist/public/operations/specs/check.d.ts +7 -2
- package/dist/public/operations/specs/check.d.ts.map +1 -1
- package/dist/public/operations/specs/check.js +8 -20
- package/dist/public/operations/specs/discovery.d.ts +3 -0
- package/dist/public/operations/specs/discovery.d.ts.map +1 -1
- package/dist/public/operations/specs/discovery.js +3 -0
- package/dist/public/operations/specs/mutation-schemas.d.ts +257 -163
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +15 -7
- package/dist/public/operations/specs/planning.d.ts +9 -0
- package/dist/public/operations/specs/planning.d.ts.map +1 -1
- package/dist/public/operations/specs/planning.js +6 -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 +20 -0
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +112 -12
- package/dist/public/operations/specs/semantic.d.ts +1 -1
- package/dist/public/operations/specs/semantic.d.ts.map +1 -1
- package/dist/public/operations/specs/semantic.js +54 -4
- package/dist/public/operations/specs/upsert.d.ts +257 -163
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
- package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
- package/dist/public/operations/symbol-repair-plan.js +121 -4
- package/dist/public/operations/types.d.ts +6 -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 +21 -7
- package/dist/public/skills/kibi-freshness/SKILL.md +1 -1
- package/dist/public/skills/kibi-usage/SKILL.md +44 -12
- package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
- package/dist/public/skills/kibi-usage/resources/proof.md +150 -0
- package/dist/public/skills/kibi-usage/resources/workflows.md +6 -6
- 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 +53 -0
- package/dist/public/symbol-granularity.js +6 -47
- package/dist/public/telemetry-acceptance.d.ts +3 -77
- package/dist/public/telemetry-acceptance.d.ts.map +1 -1
- package/dist/public/telemetry-acceptance.js +4 -2
- package/dist/public/telemetry-remediation.js +1 -1
- package/dist/report/html-report.css +1240 -0
- package/dist/report/html-report.d.ts +4 -2
- package/dist/report/html-report.d.ts.map +1 -1
- package/dist/report/html-report.js +37 -300
- 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 +32 -7
- package/dist/schemas/entity.schema.json +355 -215
- 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 +28 -0
- package/dist/traceability/evidence-model.d.ts.map +1 -1
- 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 +145 -1
- 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.js +4 -4
- 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 +138 -27
- package/dist/traceability/symbol-extract.d.ts +24 -2
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +64 -208
- 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 +13 -4
- package/dist/types/entities.d.ts +5 -3
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/branch-resolver.d.ts +1 -0
- package/dist/utils/branch-resolver.d.ts.map +1 -1
- package/dist/utils/branch-resolver.js +7 -4
- package/dist/utils/branch-store.d.ts +6 -0
- package/dist/utils/branch-store.d.ts.map +1 -1
- package/dist/utils/branch-store.js +27 -0
- package/dist/utils/kb-paths.d.ts +1 -1
- package/dist/utils/kb-paths.d.ts.map +1 -1
- package/dist/utils/kb-paths.js +1 -1
- package/dist/utils/rule-registry.d.ts +1 -11
- package/dist/utils/rule-registry.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.d.ts +102 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -0
- package/dist/utils/rule-registry.generated.js +131 -0
- package/dist/utils/rule-registry.js +12 -113
- package/dist/utils/strict-modeling.d.ts +1 -0
- package/dist/utils/strict-modeling.d.ts.map +1 -1
- package/dist/utils/strict-modeling.js +1 -1
- package/package.json +20 -20
- package/src/public/diagnostic-usage.ts +6 -6
- package/src/public/distribution-parity.ts +17 -10
- package/src/public/extractors/symbols-coordinator.ts +1 -0
- package/src/public/impact/analyzer.ts +15 -12
- package/src/public/impact/coverage-depth-quality.ts +1 -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 +463 -72
- package/src/public/operations/catalog.ts +10 -4
- package/src/public/operations/check-executor.ts +4 -8
- package/src/public/operations/check-helpers.ts +2 -2
- package/src/public/operations/contracts.ts +78 -34
- package/src/public/operations/discovery-entities.ts +53 -0
- package/src/public/operations/discovery-executors.ts +64 -48
- package/src/public/operations/index.ts +1 -1
- package/src/public/operations/migration-plan.ts +32 -25
- package/src/public/operations/node-ports.ts +6 -6
- package/src/public/operations/prolog-json.ts +13 -5
- package/src/public/operations/repair-plan.ts +60 -23
- package/src/public/operations/result-envelope.ts +15 -10
- package/src/public/operations/runtime-types.ts +26 -2
- package/src/public/operations/specs/check-rules.generated.ts +38 -0
- package/src/public/operations/specs/check.ts +12 -21
- package/src/public/operations/specs/discovery.ts +3 -0
- package/src/public/operations/specs/mutation-schemas.ts +22 -9
- package/src/public/operations/specs/planning.ts +7 -0
- package/src/public/operations/specs/proof.ts +43 -0
- package/src/public/operations/specs/reporting.ts +140 -13
- package/src/public/operations/specs/semantic.ts +79 -17
- package/src/public/operations/symbol-repair-plan.ts +166 -7
- package/src/public/operations/types.ts +6 -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 +26 -10
- package/src/public/skills/kibi-freshness/SKILL.md +1 -1
- package/src/public/skills/kibi-usage/SKILL.md +44 -12
- package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
- package/src/public/skills/kibi-usage/resources/proof.md +150 -0
- package/src/public/skills/kibi-usage/resources/workflows.md +6 -6
- package/src/public/symbol-granularity.generated.ts +74 -0
- package/src/public/symbol-granularity.ts +34 -59
- package/src/public/telemetry-acceptance-types.d.ts +98 -0
- package/src/public/telemetry-acceptance.ts +22 -100
- package/src/public/telemetry-remediation.ts +1 -1
- package/src/schemas/entity.schema.json +355 -215
- package/dist/cli-register-verification.d.ts +0 -3
- package/dist/cli-register-verification.d.ts.map +0 -1
- package/dist/cli-register-verification.js +0 -16
- package/dist/commands/verify.d.ts +0 -10
- package/dist/commands/verify.d.ts.map +0 -1
- package/dist/commands/verify.js +0 -126
- package/dist/operations/verification/ingest-verification.d.ts +0 -29
- package/dist/operations/verification/ingest-verification.d.ts.map +0 -1
- package/dist/operations/verification/ingest-verification.js +0 -192
- package/dist/public/operations/specs/verification.d.ts +0 -78
- package/dist/public/operations/specs/verification.d.ts.map +0 -1
- package/dist/public/operations/specs/verification.js +0 -62
- package/dist/public/playwright-case-id.d.ts.map +0 -1
- package/dist/public/verification-receipt.d.ts +0 -242
- package/dist/public/verification-receipt.d.ts.map +0 -1
- package/dist/public/verification-receipt.js +0 -296
- package/dist/verification/playwright-reporter.d.ts +0 -21
- package/dist/verification/playwright-reporter.d.ts.map +0 -1
- package/dist/verification/playwright-reporter.js +0 -114
- package/src/public/operations/specs/verification.ts +0 -78
- package/src/public/playwright-case-id.ts +0 -35
- package/src/public/verification-receipt.ts +0 -412
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
export function isTrailingCommaBeforeCloser(
|
|
2
|
+
character: string,
|
|
3
|
+
nextCharacter: string | undefined,
|
|
4
|
+
): boolean {
|
|
5
|
+
return (
|
|
6
|
+
character === "," &&
|
|
7
|
+
(nextCharacter === ")" || nextCharacter === "]" || nextCharacter === "}")
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
|
|
1
11
|
function normalizeDiffContent(line: string): string {
|
|
2
12
|
let normalized = "";
|
|
3
13
|
let quote: '"' | "'" | "`" | null = null;
|
|
@@ -62,10 +72,7 @@ function removeSyntacticTrailingCommas(content: string): string {
|
|
|
62
72
|
}
|
|
63
73
|
|
|
64
74
|
const nextCharacter = content[index + 1];
|
|
65
|
-
if (
|
|
66
|
-
character === "," &&
|
|
67
|
-
(nextCharacter === ")" || nextCharacter === "]" || nextCharacter === "}")
|
|
68
|
-
) {
|
|
75
|
+
if (isTrailingCommaBeforeCloser(character, nextCharacter)) {
|
|
69
76
|
continue;
|
|
70
77
|
}
|
|
71
78
|
|
|
@@ -5,6 +5,8 @@ import type {
|
|
|
5
5
|
ExtractionResult,
|
|
6
6
|
} from "../../extractors/markdown.js";
|
|
7
7
|
import {
|
|
8
|
+
normalizeEntityId,
|
|
9
|
+
parseAtomList,
|
|
8
10
|
parseEntityFromList,
|
|
9
11
|
parseListOfLists,
|
|
10
12
|
parseTriples,
|
|
@@ -15,47 +17,36 @@ import {
|
|
|
15
17
|
toPrologList,
|
|
16
18
|
} from "../operations/prolog-json.js";
|
|
17
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";
|
|
18
22
|
import {
|
|
19
23
|
analyzeTelemetryAcceptance,
|
|
20
24
|
createTelemetryAcceptanceDiagnostics,
|
|
21
25
|
parseTelemetryUsageLog,
|
|
22
26
|
} from "../telemetry-acceptance.js";
|
|
23
|
-
import { VERIFICATION_RECEIPT_MAX_AGE_SECONDS } from "../verification-receipt.js";
|
|
24
27
|
import { createCoverageDepthQualityDiagnostics } from "./coverage-depth-quality.js";
|
|
25
28
|
import { createRequirementQualityDiagnostics } from "./requirement-quality.js";
|
|
26
29
|
import { createSymbolQualityDiagnostics } from "./symbol-quality.js";
|
|
27
30
|
import type { QualityDiagnostic } from "./types.js";
|
|
28
31
|
|
|
29
|
-
const RELATIONSHIP_TYPES
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
"implements",
|
|
36
|
-
"covered_by",
|
|
37
|
-
"constrained_by",
|
|
38
|
-
"constrains",
|
|
39
|
-
"requires_property",
|
|
40
|
-
"requires_predicate",
|
|
41
|
-
"guards",
|
|
42
|
-
"publishes",
|
|
43
|
-
"consumes",
|
|
44
|
-
"supersedes",
|
|
45
|
-
"relates_to",
|
|
46
|
-
] 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)";
|
|
47
38
|
|
|
48
39
|
type FullKbQualityDiagnosticsOptions = {
|
|
49
|
-
readonly prolog: Pick<PrologPort, "query">;
|
|
40
|
+
readonly prolog: Pick<PrologPort, "query" | "queryEntities">;
|
|
50
41
|
readonly hardViolationEntityIds?: ReadonlySet<string>;
|
|
51
42
|
readonly maxDiagnostics?: number;
|
|
52
43
|
readonly workspaceRoot?: string;
|
|
53
44
|
readonly now?: Date;
|
|
54
|
-
readonly
|
|
45
|
+
readonly proofSnapshot?: string;
|
|
55
46
|
readonly checkedAt?: string;
|
|
56
47
|
};
|
|
57
48
|
|
|
58
|
-
type
|
|
49
|
+
type CoverageEvidencePayload = Readonly<{
|
|
59
50
|
readonly rows?: readonly Readonly<Record<string, unknown>>[];
|
|
60
51
|
}>;
|
|
61
52
|
|
|
@@ -89,6 +80,24 @@ function optionalStringArrayField(
|
|
|
89
80
|
return value.map((item) => String(item));
|
|
90
81
|
}
|
|
91
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
|
+
|
|
92
101
|
function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
|
|
93
102
|
const extracted: ExtractedEntity = {
|
|
94
103
|
id: stringField(entity, "id"),
|
|
@@ -113,6 +122,41 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
|
|
|
113
122
|
if (semanticText !== undefined) extracted.semantic_text = semanticText;
|
|
114
123
|
const logicClaims = optionalStringArrayField(entity, "logic_claims");
|
|
115
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
|
+
}
|
|
116
160
|
const granularityReason = optionalStringField(entity, "granularity_reason");
|
|
117
161
|
if (granularityReason !== undefined) {
|
|
118
162
|
extracted.granularity_reason = granularityReason;
|
|
@@ -129,6 +173,34 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
|
|
|
129
173
|
) {
|
|
130
174
|
extracted.verification_scope = verificationScope;
|
|
131
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
|
+
}
|
|
132
204
|
const sourceLine = optionalNumberField(entity, "sourceLine");
|
|
133
205
|
if (sourceLine !== undefined) extracted.sourceLine = sourceLine;
|
|
134
206
|
const sourceColumn = optionalNumberField(entity, "sourceColumn");
|
|
@@ -145,22 +217,78 @@ function toExtractedEntity(entity: Record<string, unknown>): ExtractedEntity {
|
|
|
145
217
|
factKind === "observation" ||
|
|
146
218
|
factKind === "meta" ||
|
|
147
219
|
factKind === "predicate_schema" ||
|
|
148
|
-
factKind === "predicate"
|
|
220
|
+
factKind === "predicate" ||
|
|
221
|
+
factKind === "rule_schema" ||
|
|
222
|
+
factKind === "rule"
|
|
149
223
|
) {
|
|
150
224
|
extracted.fact_kind = factKind;
|
|
151
225
|
}
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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;
|
|
161
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;
|
|
162
280
|
const predicateArity = optionalNumberField(entity, "predicate_arity");
|
|
163
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;
|
|
164
292
|
for (const field of [
|
|
165
293
|
"argument_names",
|
|
166
294
|
"argument_types",
|
|
@@ -182,25 +310,298 @@ function sourceFileFor(entity: Record<string, unknown>): string | undefined {
|
|
|
182
310
|
);
|
|
183
311
|
}
|
|
184
312
|
|
|
185
|
-
|
|
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),
|
|
410
|
+
);
|
|
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(
|
|
186
482
|
prolog: Pick<PrologPort, "query">,
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
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),
|
|
190
508
|
);
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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
|
+
}
|
|
194
588
|
const relationships = new Map<string, ExtractionResult["relationships"]>();
|
|
195
589
|
|
|
196
590
|
for (const relationshipType of RELATIONSHIP_TYPES) {
|
|
197
591
|
const relResult = await prolog.query(
|
|
198
592
|
`findall([From,To,'${relationshipType}'], kb_relationship(${relationshipType}, From, To), Rels)`,
|
|
199
593
|
);
|
|
594
|
+
if (!relResult.success) {
|
|
595
|
+
throw new Error(
|
|
596
|
+
`Full KB relationship projection query failed for ${relationshipType}: ${relResult.error ?? "Unknown error"}`,
|
|
597
|
+
);
|
|
598
|
+
}
|
|
200
599
|
const rows = relResult.bindings.Rels
|
|
201
600
|
? parseTriples(relResult.bindings.Rels)
|
|
202
601
|
: [];
|
|
203
|
-
for (const [
|
|
602
|
+
for (const [rawFrom, rawTo, type] of rows) {
|
|
603
|
+
const from = normalizeEntityId(rawFrom);
|
|
604
|
+
const to = normalizeEntityId(rawTo);
|
|
204
605
|
const current = relationships.get(from) ?? [];
|
|
205
606
|
current.push({ from, to, type });
|
|
206
607
|
relationships.set(from, current);
|
|
@@ -220,18 +621,9 @@ async function loadKbExtractionResults(
|
|
|
220
621
|
});
|
|
221
622
|
}
|
|
222
623
|
|
|
223
|
-
function
|
|
224
|
-
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
function proofStage(
|
|
228
|
-
row: Readonly<Record<string, unknown>>,
|
|
624
|
+
export function passingE2eStage(
|
|
625
|
+
passingE2e: unknown,
|
|
229
626
|
): Readonly<Record<string, unknown>> | undefined {
|
|
230
|
-
const stages = row.proofStages;
|
|
231
|
-
if (!stages || typeof stages !== "object" || Array.isArray(stages)) {
|
|
232
|
-
return undefined;
|
|
233
|
-
}
|
|
234
|
-
const passingE2e = (stages as Record<string, unknown>).passingE2e;
|
|
235
627
|
return passingE2e &&
|
|
236
628
|
typeof passingE2e === "object" &&
|
|
237
629
|
!Array.isArray(passingE2e)
|
|
@@ -239,10 +631,14 @@ function proofStage(
|
|
|
239
631
|
: undefined;
|
|
240
632
|
}
|
|
241
633
|
|
|
634
|
+
function stringArrayField(value: unknown): readonly string[] | undefined {
|
|
635
|
+
return Array.isArray(value) ? value.map(String) : undefined;
|
|
636
|
+
}
|
|
637
|
+
|
|
242
638
|
async function loadCoverageProofEvidence(
|
|
243
639
|
prolog: Pick<PrologPort, "query">,
|
|
244
640
|
requirementCount: number,
|
|
245
|
-
|
|
641
|
+
proofSnapshot: string | undefined,
|
|
246
642
|
checkedAt: string | undefined,
|
|
247
643
|
): Promise<
|
|
248
644
|
ReadonlyMap<
|
|
@@ -256,18 +652,22 @@ async function loadCoverageProofEvidence(
|
|
|
256
652
|
>
|
|
257
653
|
> {
|
|
258
654
|
if (
|
|
259
|
-
|
|
655
|
+
proofSnapshot === undefined ||
|
|
260
656
|
checkedAt === undefined ||
|
|
261
657
|
requirementCount === 0
|
|
262
658
|
) {
|
|
263
659
|
return new Map();
|
|
264
660
|
}
|
|
265
|
-
let payload:
|
|
661
|
+
let payload: CoverageEvidencePayload;
|
|
266
662
|
try {
|
|
267
|
-
|
|
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>(
|
|
268
668
|
prolog as PrologPort,
|
|
269
669
|
"discovery.pl",
|
|
270
|
-
`discovery:
|
|
670
|
+
`discovery:coverage_evidence_json(${toPrologList([])}, ${toPrologAtom(proofSnapshot)}, ${toPrologAtom(checkedAt)}, ${PROOF_RECEIPT_MAX_AGE_SECONDS}, JsonString)`,
|
|
271
671
|
"Quality diagnostic coverage evidence",
|
|
272
672
|
);
|
|
273
673
|
} catch {
|
|
@@ -287,26 +687,17 @@ async function loadCoverageProofEvidence(
|
|
|
287
687
|
for (const row of payload.rows ?? []) {
|
|
288
688
|
const id = typeof row.id === "string" ? row.id : undefined;
|
|
289
689
|
if (id === undefined) continue;
|
|
290
|
-
const
|
|
291
|
-
const proofGaps = stringArrayField(row.proofGaps);
|
|
292
|
-
const passingE2eTests = stringArrayField(passingE2e?.tests);
|
|
690
|
+
const passingE2eTests = stringArrayField(row.passingE2eTests) ?? [];
|
|
293
691
|
evidence.set(id, {
|
|
294
692
|
...(typeof row.proofStatus === "string"
|
|
295
693
|
? { proofStatus: row.proofStatus }
|
|
296
694
|
: {}),
|
|
297
|
-
...(typeof
|
|
298
|
-
? { passingE2eStatus:
|
|
695
|
+
...(typeof row.passingE2eStatus === "string"
|
|
696
|
+
? { passingE2eStatus: row.passingE2eStatus }
|
|
299
697
|
: {}),
|
|
300
|
-
|
|
301
|
-
...(
|
|
302
|
-
? {
|
|
303
|
-
receiptGapCodes: proofGaps.filter(
|
|
304
|
-
(gap) =>
|
|
305
|
-
gap.includes("verification_receipt") ||
|
|
306
|
-
gap.includes("verification_contract") ||
|
|
307
|
-
gap.includes("verification_snapshot"),
|
|
308
|
-
),
|
|
309
|
-
}
|
|
698
|
+
passingE2eTests,
|
|
699
|
+
...(Array.isArray(row.receiptGapCodes)
|
|
700
|
+
? { receiptGapCodes: row.receiptGapCodes.map(String) }
|
|
310
701
|
: {}),
|
|
311
702
|
});
|
|
312
703
|
}
|
|
@@ -390,7 +781,7 @@ export async function collectFullKbQualityDiagnostics(
|
|
|
390
781
|
const proofEvidence = await loadCoverageProofEvidence(
|
|
391
782
|
options.prolog,
|
|
392
783
|
manifestResults.filter((result) => result.entity.type === "req").length,
|
|
393
|
-
options.
|
|
784
|
+
options.proofSnapshot,
|
|
394
785
|
options.checkedAt,
|
|
395
786
|
);
|
|
396
787
|
const coverageDepthDiagnostics = createCoverageDepthQualityDiagnostics(
|