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
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** Preferred project-local Kibi env file (harness-independent). */
|
|
2
|
+
export declare const KIBI_PROJECT_ENV_FILE = ".env.kibi";
|
|
3
|
+
/** Legacy generic dotenv still loaded for compatibility only. */
|
|
4
|
+
export declare const KIBI_LEGACY_ENV_FILE = ".env";
|
|
5
|
+
export type EnvValueSource = "process" | "project_env" | "user_env" | "legacy_env" | "missing";
|
|
6
|
+
export type BootstrapKibiEnvironmentResult = Readonly<{
|
|
7
|
+
workspaceRoot: string;
|
|
8
|
+
userEnvPath: string;
|
|
9
|
+
projectEnvPath: string;
|
|
10
|
+
legacyEnvPath: string;
|
|
11
|
+
/** Attribution for keys present after bootstrap (never includes secret values). */
|
|
12
|
+
sources: Readonly<Record<string, EnvValueSource>>;
|
|
13
|
+
keysLoadedFromUser: readonly string[];
|
|
14
|
+
keysLoadedFromProject: readonly string[];
|
|
15
|
+
keysLoadedFromLegacy: readonly string[];
|
|
16
|
+
}>;
|
|
17
|
+
export type BootstrapKibiEnvironmentOptions = Readonly<{
|
|
18
|
+
env?: NodeJS.ProcessEnv;
|
|
19
|
+
startDir?: string;
|
|
20
|
+
homedir?: string;
|
|
21
|
+
/** Override XDG config home (defaults to env.XDG_CONFIG_HOME). */
|
|
22
|
+
xdgConfigHome?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Keys that were non-empty on the real process before any Kibi file load.
|
|
25
|
+
* Callers normally omit this; the first default-env bootstrap remembers it.
|
|
26
|
+
*/
|
|
27
|
+
initialNonEmptyProcessKeys?: ReadonlySet<string>;
|
|
28
|
+
}>;
|
|
29
|
+
type EnvEntry = Readonly<{
|
|
30
|
+
key: string;
|
|
31
|
+
value: string;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Test-only: clear remembered process-key snapshot and last bootstrap result.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resetKibiEnvironmentBootstrapStateForTests(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Last bootstrap against the real `process.env`, if any.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getLastBootstrapResult(): BootstrapKibiEnvironmentResult | null;
|
|
41
|
+
/**
|
|
42
|
+
* Canonical workspace root for Kibi env files and KB attachment.
|
|
43
|
+
* Uses KIBI_WORKSPACE / KIBI_PROJECT_ROOT / KIBI_ROOT, then .kb / .git discovery.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveKibiWorkspaceRoot(startDir?: string, env?: NodeJS.ProcessEnv): string;
|
|
46
|
+
export declare function resolveEnvFilePath(envFileName: string, workspaceRoot: string): string;
|
|
47
|
+
/** User-wide Kibi env file: $XDG_CONFIG_HOME/kibi/env or ~/.config/kibi/env. */
|
|
48
|
+
export declare function resolveKibiUserEnvPath(options?: Readonly<{
|
|
49
|
+
homedir?: string;
|
|
50
|
+
xdgConfigHome?: string;
|
|
51
|
+
env?: NodeJS.ProcessEnv;
|
|
52
|
+
}>): string;
|
|
53
|
+
export declare function resolveKibiProjectEnvPath(workspaceRoot: string, env?: NodeJS.ProcessEnv): string;
|
|
54
|
+
export declare function parseEnvContent(content: string): EnvEntry[];
|
|
55
|
+
/**
|
|
56
|
+
* Load Kibi-owned env files into `process.env` (or an injectable env object).
|
|
57
|
+
* Blank values are treated as unset (never applied, never overwrite).
|
|
58
|
+
* Existing non-empty process keys are never overwritten. Project overrides user.
|
|
59
|
+
* Legacy `.env` only gap-fills and is attributed as `legacy_env`.
|
|
60
|
+
* Call only from CLI/MCP entrypoints — not on library import.
|
|
61
|
+
*/
|
|
62
|
+
export declare function bootstrapKibiEnvironment(options?: BootstrapKibiEnvironmentOptions): BootstrapKibiEnvironmentResult;
|
|
63
|
+
/**
|
|
64
|
+
* Resolve a secret source label from an actual bootstrap result.
|
|
65
|
+
* Never reconstructs attribution by re-reading files alone.
|
|
66
|
+
*/
|
|
67
|
+
export declare function secretSourceFromBootstrap(key: string, bootstrap: BootstrapKibiEnvironmentResult, env?: NodeJS.ProcessEnv): EnvValueSource;
|
|
68
|
+
export type InspectSecretSourceOptions = BootstrapKibiEnvironmentOptions & Readonly<{
|
|
69
|
+
/** @deprecated Prefer bootstrap result sources; kept for targeted tests. */
|
|
70
|
+
initialProcessKeys?: ReadonlySet<string>;
|
|
71
|
+
}>;
|
|
72
|
+
/**
|
|
73
|
+
* Read-only secret attribution via a dry bootstrap on an env snapshot.
|
|
74
|
+
* Prefer `secretSourceFromBootstrap` with the real entrypoint bootstrap result.
|
|
75
|
+
* Never returns secret values.
|
|
76
|
+
*/
|
|
77
|
+
export declare function inspectSecretSource(key: string, options?: InspectSecretSourceOptions): EnvValueSource;
|
|
78
|
+
/**
|
|
79
|
+
* Whether a secret is available for provider use (non-empty after resolution).
|
|
80
|
+
* Blank values are unset.
|
|
81
|
+
*/
|
|
82
|
+
export declare function isSecretAvailable(key: string, options?: InspectSecretSourceOptions): boolean;
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/env/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Kibi — repo-local, per-branch, queryable long-term memory for software projects
|
|
3
|
+
Copyright (C) 2026 Piotr Franczyk
|
|
4
|
+
|
|
5
|
+
This program is free software: you can redistribute it and/or modify
|
|
6
|
+
it under the terms of the GNU Affero General Public License as published by
|
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
(at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This program is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Affero General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import fs from "node:fs";
|
|
19
|
+
import os from "node:os";
|
|
20
|
+
import path from "node:path";
|
|
21
|
+
const WORKSPACE_ENV_KEYS = [
|
|
22
|
+
"KIBI_WORKSPACE",
|
|
23
|
+
"KIBI_PROJECT_ROOT",
|
|
24
|
+
"KIBI_ROOT",
|
|
25
|
+
];
|
|
26
|
+
/** Preferred project-local Kibi env file (harness-independent). */
|
|
27
|
+
// implements REQ-kibi-env-bootstrap
|
|
28
|
+
export const KIBI_PROJECT_ENV_FILE = ".env.kibi";
|
|
29
|
+
/** Legacy generic dotenv still loaded for compatibility only. */
|
|
30
|
+
// implements REQ-kibi-env-bootstrap
|
|
31
|
+
export const KIBI_LEGACY_ENV_FILE = ".env";
|
|
32
|
+
/** Remembered pre-bootstrap non-empty process keys for default `process.env`. */
|
|
33
|
+
let rememberedInitialNonEmptyKeys = null;
|
|
34
|
+
/** Last bootstrap result for default `process.env` (doctor attribution). */
|
|
35
|
+
let lastDefaultBootstrap = null;
|
|
36
|
+
/**
|
|
37
|
+
* Test-only: clear remembered process-key snapshot and last bootstrap result.
|
|
38
|
+
*/
|
|
39
|
+
// implements REQ-kibi-env-bootstrap
|
|
40
|
+
export function resetKibiEnvironmentBootstrapStateForTests() {
|
|
41
|
+
rememberedInitialNonEmptyKeys = null;
|
|
42
|
+
lastDefaultBootstrap = null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Last bootstrap against the real `process.env`, if any.
|
|
46
|
+
*/
|
|
47
|
+
// implements REQ-kibi-env-bootstrap
|
|
48
|
+
export function getLastBootstrapResult() {
|
|
49
|
+
return lastDefaultBootstrap;
|
|
50
|
+
}
|
|
51
|
+
function readFirstEnv(env, keys) {
|
|
52
|
+
for (const key of keys) {
|
|
53
|
+
const value = env[key]?.trim();
|
|
54
|
+
if (value)
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
function nextAncestorDirectory(current) {
|
|
60
|
+
const parent = path.dirname(current);
|
|
61
|
+
return parent === current ? undefined : parent;
|
|
62
|
+
}
|
|
63
|
+
function findUpwards(startDir, marker) {
|
|
64
|
+
let current = path.resolve(startDir);
|
|
65
|
+
while (current !== undefined) {
|
|
66
|
+
if (fs.existsSync(path.join(current, marker))) {
|
|
67
|
+
return current;
|
|
68
|
+
}
|
|
69
|
+
current = nextAncestorDirectory(current);
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Canonical workspace root for Kibi env files and KB attachment.
|
|
75
|
+
* Uses KIBI_WORKSPACE / KIBI_PROJECT_ROOT / KIBI_ROOT, then .kb / .git discovery.
|
|
76
|
+
*/
|
|
77
|
+
// implements REQ-kibi-env-bootstrap
|
|
78
|
+
export function resolveKibiWorkspaceRoot(startDir = process.cwd(), env = process.env) {
|
|
79
|
+
const envRoot = readFirstEnv(env, WORKSPACE_ENV_KEYS);
|
|
80
|
+
if (envRoot)
|
|
81
|
+
return path.resolve(envRoot);
|
|
82
|
+
const kbRoot = findUpwards(startDir, ".kb");
|
|
83
|
+
if (kbRoot)
|
|
84
|
+
return kbRoot;
|
|
85
|
+
const gitRoot = findUpwards(startDir, ".git");
|
|
86
|
+
if (gitRoot)
|
|
87
|
+
return gitRoot;
|
|
88
|
+
return path.resolve(startDir);
|
|
89
|
+
}
|
|
90
|
+
// implements REQ-kibi-env-bootstrap
|
|
91
|
+
export function resolveEnvFilePath(envFileName, workspaceRoot) {
|
|
92
|
+
if (path.isAbsolute(envFileName))
|
|
93
|
+
return envFileName;
|
|
94
|
+
return path.resolve(workspaceRoot, envFileName);
|
|
95
|
+
}
|
|
96
|
+
/** User-wide Kibi env file: $XDG_CONFIG_HOME/kibi/env or ~/.config/kibi/env. */
|
|
97
|
+
// implements REQ-kibi-env-bootstrap
|
|
98
|
+
export function resolveKibiUserEnvPath(options = {}) {
|
|
99
|
+
const env = options.env ?? process.env;
|
|
100
|
+
const xdg = options.xdgConfigHome?.trim() ||
|
|
101
|
+
env.XDG_CONFIG_HOME?.trim() ||
|
|
102
|
+
path.join(options.homedir ?? os.homedir(), ".config");
|
|
103
|
+
return path.join(xdg, "kibi", "env");
|
|
104
|
+
}
|
|
105
|
+
// implements REQ-kibi-env-bootstrap
|
|
106
|
+
export function resolveKibiProjectEnvPath(workspaceRoot, env = process.env) {
|
|
107
|
+
const override = env.KIBI_ENV_FILE?.trim();
|
|
108
|
+
if (override)
|
|
109
|
+
return resolveEnvFilePath(override, workspaceRoot);
|
|
110
|
+
return resolveEnvFilePath(KIBI_PROJECT_ENV_FILE, workspaceRoot);
|
|
111
|
+
}
|
|
112
|
+
// implements REQ-kibi-env-bootstrap
|
|
113
|
+
export function parseEnvContent(content) {
|
|
114
|
+
const entries = [];
|
|
115
|
+
for (const rawLine of content.split(/\r?\n/)) {
|
|
116
|
+
const line = rawLine.trim();
|
|
117
|
+
if (!line || line.startsWith("#"))
|
|
118
|
+
continue;
|
|
119
|
+
const eqIndex = line.indexOf("=");
|
|
120
|
+
if (eqIndex <= 0)
|
|
121
|
+
continue;
|
|
122
|
+
const key = line.slice(0, eqIndex).trim();
|
|
123
|
+
let value = line.slice(eqIndex + 1).trim();
|
|
124
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
125
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
126
|
+
value = value.slice(1, -1);
|
|
127
|
+
}
|
|
128
|
+
if (!key)
|
|
129
|
+
continue;
|
|
130
|
+
entries.push({ key, value });
|
|
131
|
+
}
|
|
132
|
+
return entries;
|
|
133
|
+
}
|
|
134
|
+
function readEnvFileEntries(filePath) {
|
|
135
|
+
const map = new Map();
|
|
136
|
+
if (!fs.existsSync(filePath))
|
|
137
|
+
return map;
|
|
138
|
+
try {
|
|
139
|
+
for (const { key, value } of parseEnvContent(fs.readFileSync(filePath, "utf8"))) {
|
|
140
|
+
map.set(key, value);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Unreadable files are treated as absent for bootstrap/inspect.
|
|
145
|
+
}
|
|
146
|
+
return map;
|
|
147
|
+
}
|
|
148
|
+
function nonEmpty(value) {
|
|
149
|
+
return typeof value === "string" && value.trim() !== "";
|
|
150
|
+
}
|
|
151
|
+
function snapshotNonEmptyKeys(env) {
|
|
152
|
+
return new Set(Object.keys(env).filter((key) => nonEmpty(env[key])));
|
|
153
|
+
}
|
|
154
|
+
function resolveInitialNonEmptyKeys(env, options, isDefaultEnv) {
|
|
155
|
+
if (options.initialNonEmptyProcessKeys) {
|
|
156
|
+
return new Set([...options.initialNonEmptyProcessKeys].filter((key) => nonEmpty(env[key])));
|
|
157
|
+
}
|
|
158
|
+
if (isDefaultEnv && rememberedInitialNonEmptyKeys) {
|
|
159
|
+
// Only keys that remain non-empty stay process-owned across re-entry.
|
|
160
|
+
return new Set([...rememberedInitialNonEmptyKeys].filter((key) => nonEmpty(env[key])));
|
|
161
|
+
}
|
|
162
|
+
const snapshot = snapshotNonEmptyKeys(env);
|
|
163
|
+
if (isDefaultEnv) {
|
|
164
|
+
rememberedInitialNonEmptyKeys = new Set(snapshot);
|
|
165
|
+
}
|
|
166
|
+
return snapshot;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Load Kibi-owned env files into `process.env` (or an injectable env object).
|
|
170
|
+
* Blank values are treated as unset (never applied, never overwrite).
|
|
171
|
+
* Existing non-empty process keys are never overwritten. Project overrides user.
|
|
172
|
+
* Legacy `.env` only gap-fills and is attributed as `legacy_env`.
|
|
173
|
+
* Call only from CLI/MCP entrypoints — not on library import.
|
|
174
|
+
*/
|
|
175
|
+
// implements REQ-kibi-env-bootstrap
|
|
176
|
+
export function bootstrapKibiEnvironment(options = {}) {
|
|
177
|
+
const env = options.env ?? process.env;
|
|
178
|
+
const isDefaultEnv = options.env === undefined;
|
|
179
|
+
const workspaceRoot = resolveKibiWorkspaceRoot(options.startDir, env);
|
|
180
|
+
if (isDefaultEnv &&
|
|
181
|
+
lastDefaultBootstrap &&
|
|
182
|
+
lastDefaultBootstrap.workspaceRoot !== workspaceRoot) {
|
|
183
|
+
// New workspace (e.g. doctor under KIBI_WORKSPACE): re-snapshot process keys.
|
|
184
|
+
rememberedInitialNonEmptyKeys = null;
|
|
185
|
+
}
|
|
186
|
+
const userEnvPath = resolveKibiUserEnvPath({
|
|
187
|
+
...(options.homedir !== undefined ? { homedir: options.homedir } : {}),
|
|
188
|
+
...(options.xdgConfigHome !== undefined
|
|
189
|
+
? { xdgConfigHome: options.xdgConfigHome }
|
|
190
|
+
: {}),
|
|
191
|
+
env,
|
|
192
|
+
});
|
|
193
|
+
const projectEnvPath = resolveKibiProjectEnvPath(workspaceRoot, env);
|
|
194
|
+
const legacyEnvPath = resolveEnvFilePath(KIBI_LEGACY_ENV_FILE, workspaceRoot);
|
|
195
|
+
const initialNonEmpty = resolveInitialNonEmptyKeys(env, options, isDefaultEnv);
|
|
196
|
+
const sources = {};
|
|
197
|
+
for (const key of initialNonEmpty) {
|
|
198
|
+
sources[key] = "process";
|
|
199
|
+
}
|
|
200
|
+
const keysLoadedFromUser = [];
|
|
201
|
+
const keysLoadedFromProject = [];
|
|
202
|
+
const keysLoadedFromLegacy = [];
|
|
203
|
+
const userEntries = readEnvFileEntries(userEnvPath);
|
|
204
|
+
const projectEntries = readEnvFileEntries(projectEnvPath);
|
|
205
|
+
const legacyEntries = readEnvFileEntries(legacyEnvPath);
|
|
206
|
+
// User first, then project (project may overwrite user-sourced keys).
|
|
207
|
+
// Blank file values are unset — never applied, never overwrite.
|
|
208
|
+
for (const [key, value] of userEntries) {
|
|
209
|
+
if (!nonEmpty(value))
|
|
210
|
+
continue;
|
|
211
|
+
if (initialNonEmpty.has(key))
|
|
212
|
+
continue;
|
|
213
|
+
if (!nonEmpty(env[key])) {
|
|
214
|
+
env[key] = value;
|
|
215
|
+
keysLoadedFromUser.push(key);
|
|
216
|
+
}
|
|
217
|
+
sources[key] = "user_env";
|
|
218
|
+
}
|
|
219
|
+
for (const [key, value] of projectEntries) {
|
|
220
|
+
if (!nonEmpty(value))
|
|
221
|
+
continue;
|
|
222
|
+
if (initialNonEmpty.has(key))
|
|
223
|
+
continue;
|
|
224
|
+
const previousSource = sources[key];
|
|
225
|
+
env[key] = value;
|
|
226
|
+
if (previousSource !== "project_env" &&
|
|
227
|
+
!keysLoadedFromProject.includes(key)) {
|
|
228
|
+
keysLoadedFromProject.push(key);
|
|
229
|
+
}
|
|
230
|
+
sources[key] = "project_env";
|
|
231
|
+
}
|
|
232
|
+
// Legacy .env fills only keys still unset (compatibility; not preferred).
|
|
233
|
+
for (const [key, value] of legacyEntries) {
|
|
234
|
+
if (!nonEmpty(value))
|
|
235
|
+
continue;
|
|
236
|
+
if (initialNonEmpty.has(key))
|
|
237
|
+
continue;
|
|
238
|
+
if (sources[key] === "user_env" || sources[key] === "project_env") {
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
if (!nonEmpty(env[key])) {
|
|
242
|
+
env[key] = value;
|
|
243
|
+
keysLoadedFromLegacy.push(key);
|
|
244
|
+
}
|
|
245
|
+
sources[key] = "legacy_env";
|
|
246
|
+
}
|
|
247
|
+
const result = {
|
|
248
|
+
workspaceRoot,
|
|
249
|
+
userEnvPath,
|
|
250
|
+
projectEnvPath,
|
|
251
|
+
legacyEnvPath,
|
|
252
|
+
sources,
|
|
253
|
+
keysLoadedFromUser,
|
|
254
|
+
keysLoadedFromProject,
|
|
255
|
+
keysLoadedFromLegacy,
|
|
256
|
+
};
|
|
257
|
+
if (isDefaultEnv) {
|
|
258
|
+
lastDefaultBootstrap = result;
|
|
259
|
+
}
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Resolve a secret source label from an actual bootstrap result.
|
|
264
|
+
* Never reconstructs attribution by re-reading files alone.
|
|
265
|
+
*/
|
|
266
|
+
// implements REQ-kibi-env-bootstrap
|
|
267
|
+
export function secretSourceFromBootstrap(key, bootstrap, env = process.env) {
|
|
268
|
+
const attributed = bootstrap.sources[key];
|
|
269
|
+
if (attributed) {
|
|
270
|
+
return nonEmpty(env[key]) ? attributed : "missing";
|
|
271
|
+
}
|
|
272
|
+
return nonEmpty(env[key]) ? "process" : "missing";
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Read-only secret attribution via a dry bootstrap on an env snapshot.
|
|
276
|
+
* Prefer `secretSourceFromBootstrap` with the real entrypoint bootstrap result.
|
|
277
|
+
* Never returns secret values.
|
|
278
|
+
*/
|
|
279
|
+
// implements REQ-kibi-env-bootstrap
|
|
280
|
+
export function inspectSecretSource(key, options = {}) {
|
|
281
|
+
if (options.env === undefined &&
|
|
282
|
+
lastDefaultBootstrap &&
|
|
283
|
+
!options.startDir &&
|
|
284
|
+
!options.xdgConfigHome &&
|
|
285
|
+
!options.homedir &&
|
|
286
|
+
!options.initialNonEmptyProcessKeys &&
|
|
287
|
+
!options.initialProcessKeys) {
|
|
288
|
+
return secretSourceFromBootstrap(key, lastDefaultBootstrap);
|
|
289
|
+
}
|
|
290
|
+
const envCopy = { ...(options.env ?? process.env) };
|
|
291
|
+
const initial = options.initialNonEmptyProcessKeys ??
|
|
292
|
+
options.initialProcessKeys ??
|
|
293
|
+
(options.env === undefined && rememberedInitialNonEmptyKeys
|
|
294
|
+
? new Set([...rememberedInitialNonEmptyKeys].filter((key) => nonEmpty(envCopy[key])))
|
|
295
|
+
: snapshotNonEmptyKeys(envCopy));
|
|
296
|
+
const result = bootstrapKibiEnvironment({
|
|
297
|
+
...options,
|
|
298
|
+
env: envCopy,
|
|
299
|
+
initialNonEmptyProcessKeys: initial,
|
|
300
|
+
});
|
|
301
|
+
return secretSourceFromBootstrap(key, result, envCopy);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Whether a secret is available for provider use (non-empty after resolution).
|
|
305
|
+
* Blank values are unset.
|
|
306
|
+
*/
|
|
307
|
+
// implements REQ-kibi-env-bootstrap
|
|
308
|
+
export function isSecretAvailable(key, options = {}) {
|
|
309
|
+
return inspectSecretSource(key, options) !== "missing";
|
|
310
|
+
}
|
|
@@ -67,4 +67,9 @@ export declare function extractFromManifestString(content: string, filePath: str
|
|
|
67
67
|
export declare function extractManifestSymbolRecordsString(content: string, filePath: string): ManifestSymbolRecord[];
|
|
68
68
|
export declare function extractFromManifest(filePath: string): ExtractionResult[];
|
|
69
69
|
export declare function readManifestWithCoordinateOverlay(manifestPath: string, coordinatesPath?: string): ManifestSymbolRecord[];
|
|
70
|
+
export interface ReceiptCodeScopeEntry {
|
|
71
|
+
readonly symbolId: string;
|
|
72
|
+
readonly sourceHash: string;
|
|
73
|
+
}
|
|
74
|
+
export declare function resolveBoundSymbolScope(manifestPath: string, symbolIds: readonly string[]): ReceiptCodeScopeEntry[];
|
|
70
75
|
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/extractors/manifest.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/extractors/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
18
|
import { createHash } from "node:crypto";
|
|
19
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
19
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
20
20
|
import * as path from "node:path";
|
|
21
21
|
import { load as parseYAML } from "js-yaml";
|
|
22
22
|
import { DEFAULT_COORDINATES_PATH } from "../utils/manifest-paths.js";
|
|
@@ -324,6 +324,51 @@ export function readManifestWithCoordinateOverlay(manifestPath, coordinatesPath)
|
|
|
324
324
|
resolveSourceText: sourceTextResolver(manifestPath),
|
|
325
325
|
});
|
|
326
326
|
}
|
|
327
|
+
/**
|
|
328
|
+
* Resolve the code scope of a receipt binding: for each proof-bound symbol,
|
|
329
|
+
* its coordinate-recorded source hash. A receipt's binding covers these, so
|
|
330
|
+
* editing the production code behind a test stales only that test's receipts
|
|
331
|
+
* (per-contract binding mode).
|
|
332
|
+
*/
|
|
333
|
+
// implements REQ-kibi-verification-evidence-contract
|
|
334
|
+
// Receipt-binding scope reads run once per proof-bearing test; a campaign
|
|
335
|
+
// touches dozens-to-hundreds of tests, so the parsed overlay is memoized per
|
|
336
|
+
// manifest state (path + mtime + size) and invalidated when the file changes.
|
|
337
|
+
const boundSymbolScopeCache = new Map();
|
|
338
|
+
function boundSymbolScopeRecords(manifestPath) {
|
|
339
|
+
let stamp = "";
|
|
340
|
+
try {
|
|
341
|
+
const stats = statSync(manifestPath);
|
|
342
|
+
stamp = `${stats.mtimeMs}:${stats.size}`;
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
stamp = "missing";
|
|
346
|
+
}
|
|
347
|
+
const hit = boundSymbolScopeCache.get(manifestPath);
|
|
348
|
+
if (hit && hit.stamp === stamp)
|
|
349
|
+
return hit.records;
|
|
350
|
+
const records = readManifestWithCoordinateOverlay(manifestPath);
|
|
351
|
+
boundSymbolScopeCache.set(manifestPath, { stamp, records });
|
|
352
|
+
return records;
|
|
353
|
+
}
|
|
354
|
+
export function resolveBoundSymbolScope(manifestPath, symbolIds) {
|
|
355
|
+
const wanted = new Set(symbolIds);
|
|
356
|
+
if (wanted.size === 0)
|
|
357
|
+
return [];
|
|
358
|
+
const records = boundSymbolScopeRecords(manifestPath);
|
|
359
|
+
const scope = [];
|
|
360
|
+
for (const record of records) {
|
|
361
|
+
const symbolId = typeof record.id === "string" ? record.id : undefined;
|
|
362
|
+
if (symbolId === undefined || !wanted.has(symbolId))
|
|
363
|
+
continue;
|
|
364
|
+
const sourceHash = record.sourceHash;
|
|
365
|
+
if (typeof sourceHash === "string" && sourceHash !== "") {
|
|
366
|
+
scope.push({ symbolId, sourceHash });
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
scope.sort((left, right) => left.symbolId.localeCompare(right.symbolId));
|
|
370
|
+
return scope;
|
|
371
|
+
}
|
|
327
372
|
function generateId(filePath, title) {
|
|
328
373
|
const hash = createHash("sha256");
|
|
329
374
|
hash.update(`${filePath}:${title}`);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ProofBinding, type ProofContract } from "../public/proof-protocol.js";
|
|
2
|
+
import { type ProofReceipt } from "../public/proof-receipt.js";
|
|
2
3
|
export interface ExtractedEntity {
|
|
3
4
|
id: string;
|
|
4
5
|
type: string;
|
|
@@ -27,8 +28,11 @@ export interface ExtractedEntity {
|
|
|
27
28
|
sourceEndColumn?: number;
|
|
28
29
|
verification_scope?: "unit" | "integration" | "end_to_end";
|
|
29
30
|
verification_perspective?: "internal" | "consumer";
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
proof_exempt?: boolean;
|
|
32
|
+
proof_exempt_reason?: string;
|
|
33
|
+
proof_contract?: ProofContract;
|
|
34
|
+
proof_bindings?: readonly ProofBinding[];
|
|
35
|
+
proof_receipts?: readonly ProofReceipt[];
|
|
32
36
|
fact_kind?: "subject" | "property_value" | "observation" | "meta" | "predicate_schema" | "predicate" | "rule_schema" | "rule";
|
|
33
37
|
subject_key?: string;
|
|
34
38
|
property_key?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/extractors/markdown.ts"],"names":[],"mappings":"AAuBA,OAAO,
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/extractors/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,8 @@ import { readFileSync } from "node:fs";
|
|
|
20
20
|
import Ajv from "ajv";
|
|
21
21
|
import { load as yamlLoad } from "js-yaml";
|
|
22
22
|
import { semanticClaimKey } from "../operations/semantic-advisor/clauses.js";
|
|
23
|
-
import {
|
|
23
|
+
import { PROOF_BINDINGS_SCHEMA, PROOF_CONTRACT_SCHEMA, } from "../public/proof-protocol.js";
|
|
24
|
+
import { proofReceiptHistoryErrors, } from "../public/proof-receipt.js";
|
|
24
25
|
import entitySchema from "../schemas/entity.schema.json" with { type: "json" };
|
|
25
26
|
// Typed fact field constants for extraction
|
|
26
27
|
const FACT_STRING_FIELDS = [
|
|
@@ -71,8 +72,9 @@ const FACT_ONLY_FIELDS = [
|
|
|
71
72
|
const TEST_ENUM_FIELDS = [
|
|
72
73
|
"verification_scope",
|
|
73
74
|
"verification_perspective",
|
|
74
|
-
"
|
|
75
|
-
"
|
|
75
|
+
"proof_contract",
|
|
76
|
+
"proof_bindings",
|
|
77
|
+
"proof_receipts",
|
|
76
78
|
];
|
|
77
79
|
const ajv = new Ajv({ strict: false, allErrors: true });
|
|
78
80
|
const validateExtractedEntity = ajv.compile(entitySchema);
|
|
@@ -409,6 +411,25 @@ function extractFromMarkdownContent(content, filePath) {
|
|
|
409
411
|
if (type === "req" && data.semantic_source_hash !== undefined) {
|
|
410
412
|
entity.semantic_source_hash = data.semantic_source_hash;
|
|
411
413
|
}
|
|
414
|
+
if (type === "req" && data.proof_exempt !== undefined) {
|
|
415
|
+
if (typeof data.proof_exempt !== "boolean") {
|
|
416
|
+
throw new FrontmatterError("Invalid proof_exempt; expected true or false", filePath, {
|
|
417
|
+
classification: "Invalid Proof Exemption Flag",
|
|
418
|
+
hint: "Set proof_exempt: true with a non-empty proof_exempt_reason.",
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
entity.proof_exempt = data.proof_exempt;
|
|
422
|
+
}
|
|
423
|
+
if (type === "req" && data.proof_exempt_reason !== undefined) {
|
|
424
|
+
if (typeof data.proof_exempt_reason !== "string" ||
|
|
425
|
+
data.proof_exempt_reason.trim() === "") {
|
|
426
|
+
throw new FrontmatterError("Invalid proof_exempt_reason; expected a non-empty string", filePath, {
|
|
427
|
+
classification: "Invalid Proof Exemption Reason",
|
|
428
|
+
hint: "proof_exempt requires a non-empty proof_exempt_reason explaining why the requirement is outside E2E-proof scope.",
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
entity.proof_exempt_reason = data.proof_exempt_reason;
|
|
432
|
+
}
|
|
412
433
|
if (type !== "fact") {
|
|
413
434
|
const invalidFactField = FACT_ONLY_FIELDS.find((field) => data[field] !== undefined);
|
|
414
435
|
if (invalidFactField) {
|
|
@@ -446,31 +467,46 @@ function extractFromMarkdownContent(content, filePath) {
|
|
|
446
467
|
}
|
|
447
468
|
entity.verification_perspective = data.verification_perspective;
|
|
448
469
|
}
|
|
449
|
-
if (data.
|
|
450
|
-
if (!isObjectRecord(data.
|
|
451
|
-
throw new FrontmatterError("Invalid
|
|
452
|
-
classification: "Invalid Test
|
|
453
|
-
hint: "Use the kibi.
|
|
470
|
+
if (data.proof_contract !== undefined) {
|
|
471
|
+
if (!isObjectRecord(data.proof_contract)) {
|
|
472
|
+
throw new FrontmatterError("Invalid proof_contract; expected an object", filePath, {
|
|
473
|
+
classification: "Invalid Test Proof Contract",
|
|
474
|
+
hint: "Use the kibi.proof-contract.v1 object shape.",
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
const validateContract = ajv.compile(PROOF_CONTRACT_SCHEMA);
|
|
478
|
+
if (!validateContract(data.proof_contract)) {
|
|
479
|
+
throw new FrontmatterError(`Invalid proof_contract: ${ajv.errorsText(validateContract.errors)}`, filePath, {
|
|
480
|
+
classification: "Invalid Test Proof Contract",
|
|
481
|
+
hint: "Use the kibi.proof-contract.v1 object shape with explicit required_proofs obligations.",
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
entity.proof_contract = data.proof_contract;
|
|
485
|
+
}
|
|
486
|
+
if (data.proof_bindings !== undefined) {
|
|
487
|
+
if (!Array.isArray(data.proof_bindings)) {
|
|
488
|
+
throw new FrontmatterError("Invalid proof_bindings; expected an array", filePath, {
|
|
489
|
+
classification: "Invalid Test Proof Bindings",
|
|
490
|
+
hint: "Each binding requires symbol_id and target; native_id, aliases, source_file, and line are optional.",
|
|
454
491
|
});
|
|
455
492
|
}
|
|
456
|
-
const
|
|
457
|
-
if (!
|
|
458
|
-
throw new FrontmatterError(`Invalid
|
|
459
|
-
classification: "Invalid Test
|
|
460
|
-
hint: "
|
|
493
|
+
const validateBindings = ajv.compile(PROOF_BINDINGS_SCHEMA);
|
|
494
|
+
if (!validateBindings(data.proof_bindings)) {
|
|
495
|
+
throw new FrontmatterError(`Invalid proof_bindings: ${ajv.errorsText(validateBindings.errors)}`, filePath, {
|
|
496
|
+
classification: "Invalid Test Proof Bindings",
|
|
497
|
+
hint: "Each binding requires symbol_id and target; native_id, aliases, source_file, and line are optional.",
|
|
461
498
|
});
|
|
462
499
|
}
|
|
463
|
-
entity.
|
|
464
|
-
data.verification_contract;
|
|
500
|
+
entity.proof_bindings = data.proof_bindings;
|
|
465
501
|
}
|
|
466
|
-
if (data.
|
|
467
|
-
if (!Array.isArray(data.
|
|
468
|
-
throw new FrontmatterError("Invalid
|
|
469
|
-
classification: "Invalid Test
|
|
470
|
-
hint: "Use kibi
|
|
502
|
+
if (data.proof_receipts !== undefined) {
|
|
503
|
+
if (!Array.isArray(data.proof_receipts)) {
|
|
504
|
+
throw new FrontmatterError("Invalid proof_receipts; expected an array", filePath, {
|
|
505
|
+
classification: "Invalid Test Proof Receipts",
|
|
506
|
+
hint: "Use kibi prove to append kibi.proof-receipt.v1 objects; receipts are engine-derived, never hand-authored.",
|
|
471
507
|
});
|
|
472
508
|
}
|
|
473
|
-
const normalizedReceipts = data.
|
|
509
|
+
const normalizedReceipts = data.proof_receipts.map((value) => {
|
|
474
510
|
if (typeof value !== "object" ||
|
|
475
511
|
value === null ||
|
|
476
512
|
Array.isArray(value)) {
|
|
@@ -486,13 +522,13 @@ function extractFromMarkdownContent(content, filePath) {
|
|
|
486
522
|
: {}),
|
|
487
523
|
};
|
|
488
524
|
});
|
|
489
|
-
entity.
|
|
490
|
-
const errors =
|
|
525
|
+
entity.proof_receipts = normalizedReceipts;
|
|
526
|
+
const errors = proofReceiptHistoryErrors(entity.id, entity.verification_scope, normalizedReceipts.filter((value) => typeof value === "object" &&
|
|
491
527
|
value !== null &&
|
|
492
528
|
!Array.isArray(value)));
|
|
493
529
|
if (errors.length > 0) {
|
|
494
530
|
throw new FrontmatterError(errors.join("; "), filePath, {
|
|
495
|
-
classification: "Invalid Test
|
|
531
|
+
classification: "Invalid Test Proof Receipts",
|
|
496
532
|
hint: "Bind every receipt to this test and its typed verification_scope, with unique IDs and ordered ISO-8601 timestamps.",
|
|
497
533
|
});
|
|
498
534
|
}
|