kibi-cli 0.19.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-errors.d.ts +3 -1
- package/dist/cli-errors.d.ts.map +1 -1
- package/dist/cli-errors.js +4 -1
- package/dist/cli-json-command.d.ts +1 -0
- package/dist/cli-json-command.d.ts.map +1 -1
- package/dist/cli-json-command.js +13 -4
- package/dist/cli-operation-loader.d.ts.map +1 -1
- package/dist/cli-operation-loader.js +53 -20
- package/dist/cli-operation-metadata.d.ts +21 -8
- package/dist/cli-operation-metadata.d.ts.map +1 -1
- package/dist/cli-operation-metadata.js +27 -10
- package/dist/cli-protocol.d.ts.map +1 -1
- package/dist/cli-protocol.js +38 -8
- package/dist/cli-register-foundation.d.ts.map +1 -1
- package/dist/cli-register-foundation.js +14 -2
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +33 -4
- package/dist/cli-register-proof.d.ts +3 -0
- package/dist/cli-register-proof.d.ts.map +1 -0
- package/dist/cli-register-proof.js +103 -0
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +11 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -8
- package/dist/commands/aggregated-checks.d.ts +1 -2
- package/dist/commands/aggregated-checks.d.ts.map +1 -1
- package/dist/commands/aggregated-checks.js +14 -9
- package/dist/commands/branch.d.ts +37 -0
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +375 -40
- package/dist/commands/check.d.ts +14 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +209 -110
- package/dist/commands/coverage.d.ts +1 -0
- package/dist/commands/coverage.d.ts.map +1 -1
- package/dist/commands/coverage.js +6 -0
- package/dist/commands/discovery-shared.d.ts.map +1 -1
- package/dist/commands/discovery-shared.js +10 -19
- package/dist/commands/doctor.d.ts +26 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +291 -30
- package/dist/commands/engine.d.ts +12 -0
- package/dist/commands/engine.d.ts.map +1 -1
- package/dist/commands/engine.js +50 -7
- package/dist/commands/gc.d.ts +5 -2
- package/dist/commands/gc.d.ts.map +1 -1
- package/dist/commands/gc.js +140 -71
- package/dist/commands/github-init.d.ts +57 -0
- package/dist/commands/github-init.d.ts.map +1 -0
- package/dist/commands/github-init.js +314 -0
- package/dist/commands/init-helpers.d.ts +1 -1
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +109 -28
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +79 -24
- package/dist/commands/legacy-storage-migration.d.ts +54 -0
- package/dist/commands/legacy-storage-migration.d.ts.map +1 -0
- package/dist/commands/legacy-storage-migration.js +277 -0
- package/dist/commands/migrate.d.ts +11 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +249 -96
- package/dist/commands/proof-migrate-legacy.d.ts +7 -0
- package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
- package/dist/commands/proof-migrate-legacy.js +45 -0
- package/dist/commands/proof-prune.d.ts +8 -0
- package/dist/commands/proof-prune.d.ts.map +1 -0
- package/dist/commands/proof-prune.js +53 -0
- package/dist/commands/prove.d.ts +37 -0
- package/dist/commands/prove.d.ts.map +1 -0
- package/dist/commands/prove.js +470 -0
- package/dist/commands/report.d.ts +24 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +191 -0
- package/dist/commands/sync/cache.d.ts +16 -3
- package/dist/commands/sync/cache.d.ts.map +1 -1
- package/dist/commands/sync/cache.js +111 -4
- package/dist/commands/sync/discovery.d.ts +26 -2
- package/dist/commands/sync/discovery.d.ts.map +1 -1
- package/dist/commands/sync/discovery.js +204 -15
- package/dist/commands/sync/extraction.d.ts +8 -1
- package/dist/commands/sync/extraction.d.ts.map +1 -1
- package/dist/commands/sync/extraction.js +38 -4
- package/dist/commands/sync/manifest.d.ts +9 -6
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +195 -60
- package/dist/commands/sync/persistence.d.ts +4 -1
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +26 -12
- package/dist/commands/sync/staging.d.ts +1 -0
- package/dist/commands/sync/staging.d.ts.map +1 -1
- package/dist/commands/sync/staging.js +5 -2
- package/dist/commands/sync/untracked-targets.d.ts +24 -0
- package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
- package/dist/commands/sync/untracked-targets.js +108 -0
- package/dist/commands/sync.d.ts +17 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +375 -106
- package/dist/diagnostics.d.ts +1 -1
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/engine-daemon.d.ts +3 -1
- package/dist/engine-daemon.d.ts.map +1 -1
- package/dist/engine-daemon.js +49 -20
- package/dist/engine.d.ts +34 -3
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +578 -42
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +5 -6
- package/dist/extractors/manifest.d.ts +13 -1
- package/dist/extractors/manifest.d.ts.map +1 -1
- package/dist/extractors/manifest.js +97 -10
- package/dist/extractors/markdown.d.ts +5 -2
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +47 -12
- package/dist/extractors/playwright-cases.d.ts +24 -0
- package/dist/extractors/playwright-cases.d.ts.map +1 -0
- package/dist/extractors/playwright-cases.js +126 -0
- package/dist/extractors/relationships.d.ts +6 -0
- package/dist/extractors/relationships.d.ts.map +1 -1
- package/dist/extractors/relationships.js +2 -1
- package/dist/extractors/symbol-coordinates.d.ts +81 -3
- package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
- package/dist/extractors/symbol-coordinates.js +389 -51
- package/dist/extractors/symbols-coordinator.js +11 -1
- package/dist/extractors/symbols-ts.d.ts +1 -0
- package/dist/extractors/symbols-ts.d.ts.map +1 -1
- package/dist/extractors/symbols-ts.js +142 -67
- package/dist/intent-search.d.ts +61 -0
- package/dist/intent-search.d.ts.map +1 -0
- package/dist/intent-search.js +437 -0
- package/dist/logic/ir.d.ts +1 -0
- package/dist/logic/ir.d.ts.map +1 -1
- package/dist/logic/ir.js +1 -1
- package/dist/operations/bootstrap/activation.d.ts +5 -0
- package/dist/operations/bootstrap/activation.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/activation.js +58 -33
- package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts.map +1 -1
- package/dist/operations/bootstrap/candidates.d.ts +4 -0
- package/dist/operations/{autopilot → bootstrap}/candidates.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/candidates.js +22 -8
- package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts +2 -2
- package/dist/operations/{autopilot → bootstrap}/discovery-evidence.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/discovery-evidence.js +46 -6
- package/dist/operations/{autopilot → bootstrap}/discovery.d.ts +1 -1
- package/dist/operations/bootstrap/discovery.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/discovery.js +21 -14
- package/dist/operations/bootstrap/generate.d.ts +9 -0
- package/dist/operations/bootstrap/generate.d.ts.map +1 -0
- package/dist/operations/bootstrap/generate.js +207 -0
- package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts +2 -2
- package/dist/operations/{autopilot → bootstrap}/guidance-actions.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/guidance-actions.js +4 -4
- package/dist/operations/{autopilot → bootstrap}/guidance.d.ts +3 -2
- package/dist/operations/bootstrap/guidance.d.ts.map +1 -0
- package/dist/operations/{autopilot → bootstrap}/guidance.js +3 -1
- package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts +2 -2
- package/dist/operations/{autopilot → bootstrap}/markdown-candidates.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/markdown-candidates.js +4 -3
- package/dist/operations/bootstrap/presentation.d.ts +15 -0
- package/dist/operations/bootstrap/presentation.d.ts.map +1 -0
- package/dist/operations/bootstrap/presentation.js +177 -0
- package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts.map +1 -1
- package/dist/operations/{autopilot → bootstrap}/types.d.ts +63 -21
- package/dist/operations/bootstrap/types.d.ts.map +1 -0
- package/dist/operations/bootstrap/types.js +25 -0
- package/dist/operations/modeling/model-requirement.d.ts +5 -0
- package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
- package/dist/operations/modeling/model-requirement.js +57 -63
- package/dist/operations/modeling/predicate-applicability.d.ts +16 -0
- package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-applicability.js +375 -0
- package/dist/operations/modeling/predicate-applyplan.d.ts +13 -2
- package/dist/operations/modeling/predicate-applyplan.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-applyplan.js +100 -3
- package/dist/operations/modeling/predicate-bindings.d.ts +6 -0
- package/dist/operations/modeling/predicate-bindings.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-bindings.js +122 -0
- package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-2.js +18 -2
- package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-3.js +17 -1
- package/dist/operations/modeling/predicate-catalog-4.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-4.js +155 -0
- package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
- package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-catalog-5.js +291 -0
- package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog.js +4 -0
- package/dist/operations/modeling/predicate-inference-1.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-inference-1.js +8 -0
- package/dist/operations/modeling/predicate-inference-launcher.d.ts +10 -0
- package/dist/operations/modeling/predicate-inference-launcher.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-inference-launcher.js +13 -0
- package/dist/operations/modeling/predicate-inference.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-inference.js +4 -0
- package/dist/operations/modeling/predicate-loader.d.ts +1 -0
- package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-loader.js +11 -3
- package/dist/operations/modeling/predicate-ranker.d.ts +8 -1
- package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-ranker.js +159 -24
- package/dist/operations/modeling/predicate-score-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-score-3.js +6 -0
- package/dist/operations/modeling/predicate-types.d.ts +35 -1
- package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-usage-hints-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-usage-hints-3.js +40 -0
- package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
- package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
- package/dist/operations/modeling/predicate-utils.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-utils.js +2 -0
- package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +203 -32
- package/dist/operations/mutation/contradictions.d.ts +2 -1
- package/dist/operations/mutation/contradictions.d.ts.map +1 -1
- package/dist/operations/mutation/contradictions.js +26 -5
- package/dist/operations/mutation/delete.d.ts +3 -0
- package/dist/operations/mutation/delete.d.ts.map +1 -1
- package/dist/operations/mutation/delete.js +483 -19
- package/dist/operations/mutation/entity-projection.d.ts +11 -0
- package/dist/operations/mutation/entity-projection.d.ts.map +1 -0
- package/dist/operations/mutation/entity-projection.js +14 -0
- package/dist/operations/mutation/relationships.d.ts +11 -0
- package/dist/operations/mutation/relationships.d.ts.map +1 -1
- package/dist/operations/mutation/relationships.js +77 -5
- package/dist/operations/mutation/saga.d.ts +51 -0
- package/dist/operations/mutation/saga.d.ts.map +1 -0
- package/dist/operations/mutation/saga.js +67 -0
- package/dist/operations/mutation/serialization.d.ts.map +1 -1
- package/dist/operations/mutation/serialization.js +3 -1
- package/dist/operations/mutation/source-authoring.d.ts +65 -0
- package/dist/operations/mutation/source-authoring.d.ts.map +1 -0
- package/dist/operations/mutation/source-authoring.js +576 -0
- package/dist/operations/mutation/strict-fact.d.ts +1 -0
- package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
- package/dist/operations/mutation/strict-fact.js +8 -5
- package/dist/operations/mutation/symbol-compiler-lock.d.ts +54 -0
- package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -0
- package/dist/operations/mutation/symbol-compiler-lock.js +337 -0
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-granularity.js +35 -4
- package/dist/operations/mutation/symbol-refresh.d.ts +19 -1
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-refresh.js +227 -63
- package/dist/operations/mutation/types.d.ts +57 -1
- package/dist/operations/mutation/types.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.d.ts +18 -2
- package/dist/operations/mutation/upsert.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.js +403 -32
- package/dist/operations/mutation/validate-upsert.js +2 -2
- package/dist/operations/mutation/validation.d.ts.map +1 -1
- package/dist/operations/mutation/validation.js +47 -4
- package/dist/operations/mutation/warnings.d.ts +1 -0
- package/dist/operations/mutation/warnings.d.ts.map +1 -1
- package/dist/operations/mutation/warnings.js +7 -5
- package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
- package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
- package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
- package/dist/operations/planning/apply-plan.d.ts +19 -0
- package/dist/operations/planning/apply-plan.d.ts.map +1 -0
- package/dist/operations/planning/apply-plan.js +1514 -0
- package/dist/operations/planning/compile-intent.d.ts +108 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -0
- package/dist/operations/planning/compile-intent.js +618 -0
- package/dist/operations/proof/ingest-proof.d.ts +34 -0
- package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
- package/dist/operations/proof/ingest-proof.js +307 -0
- package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
- package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
- package/dist/operations/proof/migrate-legacy-receipts.js +88 -0
- package/dist/operations/proof/prune-receipts.d.ts +35 -0
- package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
- package/dist/operations/proof/prune-receipts.js +91 -0
- package/dist/operations/proof/receipt-document.d.ts +29 -0
- package/dist/operations/proof/receipt-document.d.ts.map +1 -0
- package/dist/operations/proof/receipt-document.js +117 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +52 -28
- package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/clauses.js +35 -9
- package/dist/operations/semantic-advisor/ingestion-boundary.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/ingestion-boundary.js +7 -3
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +51 -0
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/predicate-rules-launcher.js +96 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
- package/dist/operations/semantic-advisor/types.d.ts +13 -5
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/prolog/codec.d.ts +13 -1
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +269 -153
- package/dist/prolog/error-terms.d.ts +47 -0
- package/dist/prolog/error-terms.d.ts.map +1 -0
- package/dist/prolog/error-terms.js +334 -0
- package/dist/prolog/janitor.d.ts +50 -0
- package/dist/prolog/janitor.d.ts.map +1 -0
- package/dist/prolog/janitor.js +154 -0
- package/dist/prolog/store-lock.d.ts +45 -0
- package/dist/prolog/store-lock.d.ts.map +1 -0
- package/dist/prolog/store-lock.js +195 -0
- package/dist/prolog.d.ts +7 -0
- package/dist/prolog.d.ts.map +1 -1
- package/dist/prolog.js +82 -25
- package/dist/proof/evaluate.d.ts +27 -0
- package/dist/proof/evaluate.d.ts.map +1 -0
- package/dist/proof/evaluate.js +151 -0
- package/dist/proof/inspect.d.ts +12 -0
- package/dist/proof/inspect.d.ts.map +1 -0
- package/dist/proof/inspect.js +236 -0
- package/dist/proof/integrations.d.ts +35 -0
- package/dist/proof/integrations.d.ts.map +1 -0
- package/dist/proof/integrations.js +123 -0
- package/dist/proof/producers/junit-adapter.d.ts +26 -0
- package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
- package/dist/proof/producers/junit-adapter.js +186 -0
- package/dist/proof/producers/playwright-case-id.d.ts +8 -0
- package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
- package/dist/proof/producers/playwright-case-id.js +25 -0
- package/dist/proof/producers/playwright-reporter.d.ts +27 -0
- package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
- package/dist/proof/producers/playwright-reporter.js +138 -0
- package/dist/proof/producers/tap-adapter.d.ts +10 -0
- package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
- package/dist/proof/producers/tap-adapter.js +200 -0
- package/dist/proof/receipt-outcome.d.ts +2 -0
- package/dist/proof/receipt-outcome.d.ts.map +1 -0
- package/dist/proof/receipt-outcome.js +1 -0
- package/dist/public/branch-resolver.d.ts +1 -0
- package/dist/public/branch-resolver.d.ts.map +1 -1
- package/dist/public/branch-resolver.js +1 -0
- package/dist/public/check-types.d.ts +2 -2
- package/dist/public/check-types.d.ts.map +1 -1
- package/dist/public/check-types.js +16 -16
- package/dist/public/diagnostic-usage.d.ts.map +1 -1
- package/dist/public/diagnostic-usage.js +74 -6
- package/dist/public/distribution-parity.d.ts +7 -1
- package/dist/public/distribution-parity.d.ts.map +1 -1
- package/dist/public/distribution-parity.js +15 -9
- package/dist/public/ignore-policy.d.ts.map +1 -1
- package/dist/public/ignore-policy.js +16 -4
- package/dist/public/impact/coverage-depth-quality.d.ts +7 -1
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +22 -4
- package/dist/public/impact/diagnostics.d.ts.map +1 -1
- package/dist/public/impact/diagnostics.js +2 -2
- package/dist/public/impact/diff-meaning.d.ts +1 -0
- package/dist/public/impact/diff-meaning.d.ts.map +1 -1
- package/dist/public/impact/diff-meaning.js +5 -2
- package/dist/public/impact/full-kb-quality.d.ts +7 -2
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +364 -39
- package/dist/public/impact/manifest.d.ts.map +1 -1
- package/dist/public/impact/manifest.js +2 -5
- package/dist/public/operational-artifacts.d.ts.map +1 -1
- package/dist/public/operational-artifacts.js +7 -1
- package/dist/public/operations/catalog.d.ts +900 -34
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/catalog.js +130 -6
- package/dist/public/operations/check-executor.d.ts +2 -2
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +68 -13
- package/dist/public/operations/check-format-shared.d.ts +3 -0
- package/dist/public/operations/check-format-shared.d.ts.map +1 -1
- package/dist/public/operations/check-format-shared.js +3 -0
- package/dist/public/operations/check-helpers.d.ts +27 -2
- package/dist/public/operations/check-helpers.d.ts.map +1 -1
- package/dist/public/operations/check-helpers.js +62 -26
- package/dist/public/operations/contracts.d.ts +18 -0
- package/dist/public/operations/contracts.d.ts.map +1 -0
- package/dist/public/operations/contracts.js +334 -0
- package/dist/public/operations/discovery-entities.d.ts +3 -0
- package/dist/public/operations/discovery-entities.d.ts.map +1 -1
- package/dist/public/operations/discovery-entities.js +4 -0
- package/dist/public/operations/discovery-executors.d.ts +43 -7
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +216 -13
- package/dist/public/operations/index.d.ts +9 -4
- package/dist/public/operations/index.d.ts.map +1 -1
- package/dist/public/operations/index.js +8 -3
- package/dist/public/operations/migration-plan.d.ts +102 -0
- package/dist/public/operations/migration-plan.d.ts.map +1 -0
- package/dist/public/operations/migration-plan.js +539 -0
- package/dist/public/operations/node-ports.d.ts.map +1 -1
- package/dist/public/operations/node-ports.js +71 -11
- package/dist/public/operations/prolog-json.d.ts +14 -0
- package/dist/public/operations/prolog-json.d.ts.map +1 -1
- package/dist/public/operations/prolog-json.js +44 -5
- package/dist/public/operations/repair-plan.d.ts +3 -3
- package/dist/public/operations/repair-plan.d.ts.map +1 -1
- package/dist/public/operations/repair-plan.js +49 -18
- package/dist/public/operations/result-envelope.d.ts +14 -0
- package/dist/public/operations/result-envelope.d.ts.map +1 -0
- package/dist/public/operations/result-envelope.js +106 -0
- package/dist/public/operations/runtime-types.d.ts +102 -7
- package/dist/public/operations/runtime-types.d.ts.map +1 -1
- package/dist/public/operations/source-relationship-parity.d.ts +13 -0
- package/dist/public/operations/source-relationship-parity.d.ts.map +1 -0
- package/dist/public/operations/source-relationship-parity.js +162 -0
- package/dist/public/operations/specs/{autopilot.d.ts → bootstrap.d.ts} +9 -9
- package/dist/public/operations/specs/bootstrap.d.ts.map +1 -0
- package/dist/public/operations/specs/{autopilot.js → bootstrap.js} +8 -7
- package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
- package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
- package/dist/public/operations/specs/check-rules.generated.js +34 -0
- package/dist/public/operations/specs/check.d.ts +9 -4
- package/dist/public/operations/specs/check.d.ts.map +1 -1
- package/dist/public/operations/specs/check.js +10 -21
- package/dist/public/operations/specs/discovery.d.ts +87 -3
- package/dist/public/operations/specs/discovery.d.ts.map +1 -1
- package/dist/public/operations/specs/discovery.js +53 -3
- package/dist/public/operations/specs/modeling.d.ts +3 -3
- package/dist/public/operations/specs/modeling.js +3 -3
- package/dist/public/operations/specs/mutation-schemas.d.ts +251 -14
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +16 -6
- package/dist/public/operations/specs/mutation.d.ts +42 -2
- package/dist/public/operations/specs/mutation.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation.js +26 -2
- package/dist/public/operations/specs/planning.d.ts +279 -0
- package/dist/public/operations/specs/planning.d.ts.map +1 -0
- package/dist/public/operations/specs/planning.js +197 -0
- package/dist/public/operations/specs/proof.d.ts +212 -0
- package/dist/public/operations/specs/proof.d.ts.map +1 -0
- package/dist/public/operations/specs/proof.js +30 -0
- package/dist/public/operations/specs/reporting.d.ts +23 -1
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +156 -11
- package/dist/public/operations/specs/upsert.d.ts +265 -14
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/specs/upsert.js +9 -0
- package/dist/public/operations/symbol-repair-plan.d.ts +22 -0
- package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -0
- package/dist/public/operations/symbol-repair-plan.js +238 -0
- package/dist/public/operations/types.d.ts +52 -1
- package/dist/public/operations/types.d.ts.map +1 -1
- package/dist/public/proof-fingerprint.d.ts +54 -0
- package/dist/public/proof-fingerprint.d.ts.map +1 -0
- package/dist/public/proof-fingerprint.js +141 -0
- package/dist/public/proof-protocol.d.ts +354 -0
- package/dist/public/proof-protocol.d.ts.map +1 -0
- package/dist/public/proof-protocol.js +454 -0
- package/dist/public/proof-receipt.d.ts +279 -0
- package/dist/public/proof-receipt.d.ts.map +1 -0
- package/dist/public/proof-receipt.js +377 -0
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +22 -6
- package/dist/public/skills/kibi-bootstrap/SKILL.md +58 -0
- package/dist/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
- package/dist/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
- package/dist/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
- package/dist/public/skills/kibi-freshness/SKILL.md +39 -9
- package/dist/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-freshness/resources/operation-access.md +6 -0
- package/dist/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
- package/dist/public/skills/kibi-traceability/SKILL.md +47 -47
- package/dist/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
- package/dist/public/skills/kibi-traceability/resources/operation-access.md +5 -0
- package/dist/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
- package/dist/public/skills/kibi-traceability/resources/traceability.md +8 -0
- package/dist/public/skills/kibi-usage/SKILL.md +136 -231
- package/dist/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
- package/dist/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
- package/dist/public/skills/kibi-usage/resources/operation-access.md +36 -38
- package/dist/public/skills/kibi-usage/resources/proof.md +105 -0
- package/dist/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
- package/dist/public/skills/kibi-usage/resources/source-authoring.md +31 -0
- package/dist/public/skills/kibi-usage/resources/workflows.md +57 -4
- package/dist/public/symbol-granularity.d.ts +3 -14
- package/dist/public/symbol-granularity.d.ts.map +1 -1
- package/dist/public/symbol-granularity.generated.d.ts +16 -0
- package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
- package/dist/public/symbol-granularity.generated.js +20 -0
- package/dist/public/symbol-granularity.js +6 -46
- package/dist/public/telemetry-acceptance.d.ts +3 -70
- package/dist/public/telemetry-acceptance.d.ts.map +1 -1
- package/dist/public/telemetry-acceptance.js +11 -2
- package/dist/public/telemetry-remediation.js +1 -1
- package/dist/relationships/shards.d.ts +16 -0
- package/dist/relationships/shards.d.ts.map +1 -1
- package/dist/relationships/shards.js +87 -2
- package/dist/report/brand.d.ts +19 -0
- package/dist/report/brand.d.ts.map +1 -0
- package/dist/report/brand.js +112 -0
- package/dist/report/html-report.css +282 -0
- package/dist/report/html-report.d.ts +21 -0
- package/dist/report/html-report.d.ts.map +1 -0
- package/dist/report/html-report.js +700 -0
- package/dist/report/relative-time.d.ts +4 -0
- package/dist/report/relative-time.d.ts.map +1 -0
- package/dist/report/relative-time.js +46 -0
- package/dist/report/report-view.d.ts +17 -0
- package/dist/report/report-view.d.ts.map +1 -0
- package/dist/report/report-view.js +33 -0
- package/dist/report/repository.d.ts +35 -0
- package/dist/report/repository.d.ts.map +1 -0
- package/dist/report/repository.js +151 -0
- package/dist/runtime/cli-runtime.d.ts +2 -0
- package/dist/runtime/cli-runtime.d.ts.map +1 -1
- package/dist/runtime/cli-runtime.js +90 -23
- package/dist/schemas/entity.schema.json +1254 -239
- package/dist/search-ranking.d.ts +1 -0
- package/dist/search-ranking.d.ts.map +1 -1
- package/dist/search-ranking.js +3 -0
- package/dist/traceability/evidence-model.d.ts +30 -2
- package/dist/traceability/evidence-model.d.ts.map +1 -1
- package/dist/traceability/evidence-model.js +2 -2
- package/dist/traceability/git-staged.d.ts +20 -0
- package/dist/traceability/git-staged.d.ts.map +1 -1
- package/dist/traceability/git-staged.js +156 -37
- package/dist/traceability/markdown-validate.d.ts.map +1 -1
- package/dist/traceability/markdown-validate.js +12 -7
- package/dist/traceability/staged-diagnostics.d.ts +7 -0
- package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
- package/dist/traceability/staged-diagnostics.js +78 -7
- package/dist/traceability/staged-file-coverage.d.ts +33 -0
- package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
- package/dist/traceability/staged-file-coverage.js +284 -0
- package/dist/traceability/staged-impact-contract.d.ts +3 -3
- package/dist/traceability/staged-impact-contract.d.ts.map +1 -1
- package/dist/traceability/staged-impact-contract.js +12 -40
- package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
- package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
- package/dist/traceability/staged-symbols-manifest.js +142 -26
- package/dist/traceability/symbol-extract.d.ts +5 -0
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +1 -1
- package/dist/traceability/temp-kb.d.ts +2 -0
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +14 -2
- package/dist/types/entities.d.ts +5 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/branch-resolver.d.ts +25 -10
- package/dist/utils/branch-resolver.d.ts.map +1 -1
- package/dist/utils/branch-resolver.js +124 -38
- package/dist/utils/branch-store-locator.d.ts +23 -0
- package/dist/utils/branch-store-locator.d.ts.map +1 -0
- package/dist/utils/branch-store-locator.js +90 -0
- package/dist/utils/branch-store.d.ts +21 -0
- package/dist/utils/branch-store.d.ts.map +1 -0
- package/dist/utils/branch-store.js +157 -0
- package/dist/utils/config.d.ts +39 -37
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +107 -119
- package/dist/utils/kb-manifest.d.ts +35 -0
- package/dist/utils/kb-manifest.d.ts.map +1 -0
- package/dist/utils/kb-manifest.js +154 -0
- package/dist/utils/kb-paths.d.ts +54 -0
- package/dist/utils/kb-paths.d.ts.map +1 -0
- package/dist/utils/kb-paths.js +125 -0
- package/dist/utils/manifest-paths.d.ts +4 -4
- package/dist/utils/manifest-paths.d.ts.map +1 -1
- package/dist/utils/manifest-paths.js +8 -56
- package/dist/utils/rule-registry.d.ts +42 -24
- package/dist/utils/rule-registry.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.d.ts +97 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -0
- package/dist/utils/rule-registry.generated.js +125 -0
- package/dist/utils/rule-registry.js +52 -148
- package/dist/utils/schema-version.d.ts +5 -5
- package/dist/utils/schema-version.d.ts.map +1 -1
- package/dist/utils/schema-version.js +26 -6
- package/dist/utils/strict-modeling.d.ts +1 -4
- package/dist/utils/strict-modeling.d.ts.map +1 -1
- package/dist/utils/strict-modeling.js +8 -9
- package/package.json +47 -11
- package/schema/config.json +2 -2
- package/schema/manifest.json +26 -0
- package/src/public/branch-resolver.ts +1 -0
- package/src/public/check-types.ts +22 -19
- package/src/public/diagnostic-usage.ts +84 -6
- package/src/public/distribution-parity.ts +17 -9
- package/src/public/ignore-policy.ts +16 -10
- package/src/public/impact/coverage-depth-quality.ts +37 -1
- package/src/public/impact/diagnostics.ts +2 -1
- package/src/public/impact/diff-meaning.ts +11 -4
- package/src/public/impact/full-kb-quality.ts +545 -41
- package/src/public/impact/manifest.ts +2 -4
- package/src/public/operational-artifacts.ts +9 -1
- package/src/public/operations/catalog.ts +153 -10
- package/src/public/operations/check-executor.ts +98 -15
- package/src/public/operations/check-format-shared.ts +6 -0
- package/src/public/operations/check-helpers.ts +74 -35
- package/src/public/operations/contracts.ts +382 -0
- package/src/public/operations/discovery-entities.ts +7 -0
- package/src/public/operations/discovery-executors.ts +315 -25
- package/src/public/operations/index.ts +9 -4
- package/src/public/operations/migration-plan.ts +747 -0
- package/src/public/operations/node-ports.ts +87 -13
- package/src/public/operations/prolog-json.ts +60 -5
- package/src/public/operations/repair-plan.ts +60 -22
- package/src/public/operations/result-envelope.ts +141 -0
- package/src/public/operations/runtime-types.ts +96 -5
- package/src/public/operations/source-relationship-parity.ts +226 -0
- package/src/public/operations/specs/{autopilot.ts → bootstrap.ts} +17 -16
- package/src/public/operations/specs/check-rules.generated.ts +37 -0
- package/src/public/operations/specs/check.ts +14 -22
- package/src/public/operations/specs/discovery.ts +57 -3
- package/src/public/operations/specs/modeling.ts +3 -3
- package/src/public/operations/specs/mutation-schemas.ts +24 -6
- package/src/public/operations/specs/mutation.ts +27 -2
- package/src/public/operations/specs/planning.ts +241 -0
- package/src/public/operations/specs/proof.ts +43 -0
- package/src/public/operations/specs/reporting.ts +193 -12
- package/src/public/operations/specs/upsert.ts +10 -0
- package/src/public/operations/symbol-repair-plan.ts +324 -0
- package/src/public/operations/types.ts +62 -1
- package/src/public/proof-fingerprint.ts +216 -0
- package/src/public/proof-protocol-types.d.ts +96 -0
- package/src/public/proof-protocol.ts +589 -0
- package/src/public/proof-receipt.ts +499 -0
- package/src/public/schemas/entity.ts +27 -6
- package/src/public/skills/kibi-bootstrap/SKILL.md +58 -0
- package/src/public/skills/kibi-bootstrap/resources/bootstrap.md +11 -0
- package/src/public/skills/kibi-bootstrap/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-bootstrap/resources/operation-access.md +5 -0
- package/src/public/skills/kibi-bootstrap/resources/source-authoring.md +8 -0
- package/src/public/skills/kibi-freshness/SKILL.md +39 -9
- package/src/public/skills/kibi-freshness/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-freshness/resources/operation-access.md +6 -0
- package/src/public/skills/kibi-freshness/resources/source-authoring.md +7 -0
- package/src/public/skills/kibi-traceability/SKILL.md +47 -47
- package/src/public/skills/kibi-traceability/resources/branch-lifecycle.md +7 -0
- package/src/public/skills/kibi-traceability/resources/operation-access.md +5 -0
- package/src/public/skills/kibi-traceability/resources/source-authoring.md +6 -0
- package/src/public/skills/kibi-traceability/resources/traceability.md +8 -0
- package/src/public/skills/kibi-usage/SKILL.md +136 -231
- package/src/public/skills/kibi-usage/resources/branch-lifecycle.md +31 -0
- package/src/public/skills/kibi-usage/resources/kb-improvement.md +38 -0
- package/src/public/skills/kibi-usage/resources/operation-access.md +36 -38
- package/src/public/skills/kibi-usage/resources/proof.md +105 -0
- package/src/public/skills/kibi-usage/resources/relationship-directions.md +3 -3
- package/src/public/skills/kibi-usage/resources/source-authoring.md +31 -0
- package/src/public/skills/kibi-usage/resources/workflows.md +57 -4
- package/src/public/symbol-granularity.generated.ts +41 -0
- package/src/public/symbol-granularity.ts +35 -59
- package/src/public/telemetry-acceptance-types.d.ts +98 -0
- package/src/public/telemetry-acceptance.ts +30 -93
- package/src/public/telemetry-remediation.ts +1 -1
- package/src/schemas/entity.schema.json +1254 -239
- package/templates/github/kibi-badge.yml +86 -0
- package/templates/github/kibi-report.yml +84 -0
- package/dist/operations/autopilot/activation.d.ts +0 -4
- package/dist/operations/autopilot/activation.d.ts.map +0 -1
- package/dist/operations/autopilot/candidates.d.ts +0 -4
- package/dist/operations/autopilot/discovery.d.ts.map +0 -1
- package/dist/operations/autopilot/generate.d.ts +0 -8
- package/dist/operations/autopilot/generate.d.ts.map +0 -1
- package/dist/operations/autopilot/generate.js +0 -112
- package/dist/operations/autopilot/guidance.d.ts.map +0 -1
- package/dist/operations/autopilot/presentation.d.ts +0 -13
- package/dist/operations/autopilot/presentation.d.ts.map +0 -1
- package/dist/operations/autopilot/presentation.js +0 -91
- package/dist/operations/autopilot/types.d.ts.map +0 -1
- package/dist/operations/autopilot/types.js +0 -8
- package/dist/public/operations/specs/autopilot.d.ts.map +0 -1
- package/dist/public/skills/init-kibi/SKILL.md +0 -62
- package/dist/public/verification-receipt.d.ts +0 -75
- package/dist/public/verification-receipt.d.ts.map +0 -1
- package/dist/public/verification-receipt.js +0 -129
- package/src/public/skills/init-kibi/SKILL.md +0 -62
- package/src/public/verification-receipt.ts +0 -170
- /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.d.ts +0 -0
- /package/dist/operations/{autopilot → bootstrap}/candidate-helpers.js +0 -0
- /package/dist/operations/{autopilot → bootstrap}/requirement-claims.d.ts +0 -0
- /package/dist/operations/{autopilot → bootstrap}/requirement-claims.js +0 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { evaluateContractAgainstRun, } from "../../proof/evaluate.js";
|
|
2
|
+
import { loadProofIntegrations, resolveIntegration, toExecution, } from "../../proof/integrations.js";
|
|
3
|
+
import { loadEntities } from "../../public/operations/discovery-entities.js";
|
|
4
|
+
import { readWorkspaceSnapshot } from "../../public/operations/workspace-snapshot.js";
|
|
5
|
+
import { environmentHash as canonicalEnvironmentHash, effectiveProofFingerprint, jsonDigest, proofContractHash, receiptBindingHash, } from "../../public/proof-fingerprint.js";
|
|
6
|
+
import { PROOF_CONTRACT_VERSION, PROOF_RECEIPT_VERSION, proofBindingsErrors, proofRunArtifactErrors, } from "../../public/proof-protocol.js";
|
|
7
|
+
import { MAX_PROOF_RECEIPTS, proofReceiptCurrentBindingErrors, proofReceiptHistoryErrors, } from "../../public/proof-receipt.js";
|
|
8
|
+
import { projectEntityProperties } from "../mutation/entity-projection.js";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { resolveBoundSymbolScope } from "../../extractors/manifest.js";
|
|
11
|
+
import { resolveContainedSourcePath } from "../mutation/source-authoring.js";
|
|
12
|
+
import { executeUpsert } from "../mutation/upsert.js";
|
|
13
|
+
import { patchReceiptsIntoDocument, removeFrontmatterBlock, } from "./receipt-document.js";
|
|
14
|
+
function text(value) {
|
|
15
|
+
return typeof value === "string" ? value.trim() : "";
|
|
16
|
+
}
|
|
17
|
+
function record(value) {
|
|
18
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
19
|
+
? value
|
|
20
|
+
: null;
|
|
21
|
+
}
|
|
22
|
+
function requiredString(value, label) {
|
|
23
|
+
const result = text(value);
|
|
24
|
+
if (!result)
|
|
25
|
+
throw new Error(`Proof ingest failed: ${label} must be non-empty`);
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
function parseContract(test) {
|
|
29
|
+
const contract = record(test.proof_contract);
|
|
30
|
+
const candidate = contract ?? {};
|
|
31
|
+
const { version, integration, required_proofs, success_policy } = candidate;
|
|
32
|
+
const normalized = {
|
|
33
|
+
version: version,
|
|
34
|
+
integration: String(integration ?? ""),
|
|
35
|
+
required_proofs: Array.isArray(required_proofs)
|
|
36
|
+
? required_proofs.map((entry) => {
|
|
37
|
+
const row = record(entry);
|
|
38
|
+
return {
|
|
39
|
+
symbol_id: String(row?.symbol_id ?? ""),
|
|
40
|
+
target: String(row?.target ?? ""),
|
|
41
|
+
};
|
|
42
|
+
})
|
|
43
|
+
: [],
|
|
44
|
+
success_policy: success_policy,
|
|
45
|
+
};
|
|
46
|
+
if (!contract || contract.version !== PROOF_CONTRACT_VERSION)
|
|
47
|
+
throw new Error(`Proof ingest failed: test ${String(test.id)} has no proof_contract (${PROOF_CONTRACT_VERSION})`);
|
|
48
|
+
return normalized;
|
|
49
|
+
}
|
|
50
|
+
function parseBindings(test) {
|
|
51
|
+
const raw = test.proof_bindings;
|
|
52
|
+
if (raw === undefined || raw === null)
|
|
53
|
+
return [];
|
|
54
|
+
if (!Array.isArray(raw))
|
|
55
|
+
throw new Error(`Proof ingest failed: test ${String(test.id)} proof_bindings must be an array`);
|
|
56
|
+
const errors = proofBindingsErrors(raw);
|
|
57
|
+
if (errors.length > 0)
|
|
58
|
+
throw new Error(`Proof ingest failed: test ${String(test.id)} ${errors.join("; ")}`);
|
|
59
|
+
return raw.map((entry) => {
|
|
60
|
+
const row = record(entry) ?? {};
|
|
61
|
+
return {
|
|
62
|
+
symbol_id: String(row.symbol_id ?? ""),
|
|
63
|
+
target: String(row.target ?? ""),
|
|
64
|
+
...(row.native_id !== undefined
|
|
65
|
+
? { native_id: String(row.native_id) }
|
|
66
|
+
: {}),
|
|
67
|
+
...(row.aliases !== undefined
|
|
68
|
+
? { aliases: row.aliases.map(String) }
|
|
69
|
+
: {}),
|
|
70
|
+
...(row.source_file !== undefined
|
|
71
|
+
? { source_file: String(row.source_file) }
|
|
72
|
+
: {}),
|
|
73
|
+
...(row.line !== undefined ? { line: Number(row.line) } : {}),
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function existingReceipts(test) {
|
|
78
|
+
return Array.isArray(test.proof_receipts)
|
|
79
|
+
? test.proof_receipts.filter(record).map((value) => ({ ...value }))
|
|
80
|
+
: [];
|
|
81
|
+
}
|
|
82
|
+
// implements REQ-kibi-proof-evidence-protocol
|
|
83
|
+
export async function executeIngestProof(args, context) {
|
|
84
|
+
if (!context.prolog)
|
|
85
|
+
throw new Error("Proof ingest requires a Prolog runtime");
|
|
86
|
+
const snapshot = requiredString(args.snapshot, "snapshot");
|
|
87
|
+
const artifactValue = record(args.artifact);
|
|
88
|
+
if (!artifactValue)
|
|
89
|
+
throw new Error("Proof ingest failed: artifact must be a kibi.proof-run.v1 object with version, producer, command_argv, code_snapshot, environment, run, and proof_results");
|
|
90
|
+
// One generic pipeline: validate, bind, fingerprint, evaluate, derive, apply.
|
|
91
|
+
const artifactErrors = proofRunArtifactErrors(artifactValue);
|
|
92
|
+
if (artifactErrors.length > 0)
|
|
93
|
+
throw new Error(`Proof ingest failed: ${artifactErrors.join("; ")}`);
|
|
94
|
+
const artifact = artifactValue;
|
|
95
|
+
const workspace = await readWorkspaceSnapshot(context);
|
|
96
|
+
if (!workspace.available)
|
|
97
|
+
throw new Error(`Proof ingest failed: ${workspace.error}`);
|
|
98
|
+
if (workspace.snapshot.hash !== snapshot)
|
|
99
|
+
throw new Error("Proof ingest failed: captured snapshot is not the live workspace snapshot");
|
|
100
|
+
if (artifact.code_snapshot !== snapshot)
|
|
101
|
+
throw new Error("Proof ingest failed: artifact code_snapshot does not match captured snapshot");
|
|
102
|
+
const requestedTestIds = args.testIds?.map((id) => requiredString(id, "testIds")) ?? [];
|
|
103
|
+
if (new Set(requestedTestIds).size !== requestedTestIds.length)
|
|
104
|
+
throw new Error("Proof ingest failed: testIds contains duplicates");
|
|
105
|
+
if (requestedTestIds.length === 0 && text(artifact.integration) === "")
|
|
106
|
+
throw new Error("Proof ingest failed: provide testIds, or set artifact.integration to select the contracted tests this artifact is evaluated against");
|
|
107
|
+
const integrationId = text(artifact.integration) || null;
|
|
108
|
+
const integrations = loadProofIntegrations(context.workspaceRoot);
|
|
109
|
+
if (!integrations.available)
|
|
110
|
+
throw new Error(`Proof ingest failed: ${integrations.error}`);
|
|
111
|
+
const tests = [];
|
|
112
|
+
if (requestedTestIds.length > 0) {
|
|
113
|
+
for (const testId of requestedTestIds) {
|
|
114
|
+
const found = await loadEntities(context.prolog, {
|
|
115
|
+
id: testId,
|
|
116
|
+
type: "test",
|
|
117
|
+
});
|
|
118
|
+
const test = found[0];
|
|
119
|
+
if (!test)
|
|
120
|
+
throw new Error(`Proof ingest failed: test ${testId} was not found`);
|
|
121
|
+
tests.push(test);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
const all = await loadEntities(context.prolog, { type: "test" });
|
|
126
|
+
for (const test of all) {
|
|
127
|
+
const contract = record(test.proof_contract);
|
|
128
|
+
if (contract &&
|
|
129
|
+
contract.version === PROOF_CONTRACT_VERSION &&
|
|
130
|
+
text(contract.integration) === integrationId) {
|
|
131
|
+
tests.push(test);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (tests.length === 0)
|
|
135
|
+
throw new Error(`Proof ingest failed: no tests declare proof_contract.integration '${integrationId}'`);
|
|
136
|
+
}
|
|
137
|
+
const prepared = [];
|
|
138
|
+
for (const test of tests) {
|
|
139
|
+
const testId = String(test.id);
|
|
140
|
+
const contract = parseContract(test);
|
|
141
|
+
if (integrationId !== null && contract.integration !== integrationId)
|
|
142
|
+
throw new Error(`Proof ingest failed: test ${testId} binds integration '${contract.integration}' but the artifact was produced by '${integrationId}'`);
|
|
143
|
+
const effectiveIntegrationId = integrationId ?? contract.integration;
|
|
144
|
+
const integration = resolveIntegration(integrations.integrations, effectiveIntegrationId);
|
|
145
|
+
if (!integration)
|
|
146
|
+
throw new Error(`Proof ingest failed: integration '${effectiveIntegrationId}' is not configured in .kb/proof/integrations.json`);
|
|
147
|
+
if (jsonDigest(artifact.command_argv) !== jsonDigest([...integration.command]))
|
|
148
|
+
throw new Error(`Proof ingest failed: artifact command_argv does not match the configured command for integration '${effectiveIntegrationId}'`);
|
|
149
|
+
const bindings = parseBindings(test);
|
|
150
|
+
const { fingerprint, components } = effectiveProofFingerprint({
|
|
151
|
+
contract,
|
|
152
|
+
integration: toExecution(integration),
|
|
153
|
+
bindings,
|
|
154
|
+
});
|
|
155
|
+
const evaluation = evaluateContractAgainstRun(artifact, contract);
|
|
156
|
+
const environmentHash = canonicalEnvironmentHash(artifact.environment);
|
|
157
|
+
const artifactDigest = jsonDigest(artifact);
|
|
158
|
+
// Per-contract receipt binding (W2): hash the receipt-stripped authored
|
|
159
|
+
// document, the contract, and the bound symbols' source hashes so the
|
|
160
|
+
// receipt survives unrelated workspace changes and stales only when its
|
|
161
|
+
// own inputs (contract, document, production code scope) change.
|
|
162
|
+
let bindingHash;
|
|
163
|
+
const source = typeof test.source === "string" ? test.source : "";
|
|
164
|
+
if (context.fs && source !== "" && /\.(md|mdx)$/i.test(source)) {
|
|
165
|
+
try {
|
|
166
|
+
const absolute = resolveContainedSourcePath(context.workspaceRoot, source);
|
|
167
|
+
const authored = await context.fs.readFile(absolute);
|
|
168
|
+
const stripped = removeFrontmatterBlock(authored, "proof_receipts");
|
|
169
|
+
const codeScope = resolveBoundSymbolScope(join(context.workspaceRoot, ".kb", "symbols.yaml"), bindings.map((binding) => binding.symbol_id));
|
|
170
|
+
bindingHash = receiptBindingHash(contract, stripped ?? authored, codeScope);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
bindingHash = undefined;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const receipt = {
|
|
177
|
+
version: PROOF_RECEIPT_VERSION,
|
|
178
|
+
receipt_id: `PR-${jsonDigest({
|
|
179
|
+
artifact_digest: artifactDigest,
|
|
180
|
+
test_id: testId,
|
|
181
|
+
fingerprint,
|
|
182
|
+
}).slice(0, 24)}`,
|
|
183
|
+
test_id: testId,
|
|
184
|
+
scope: (text(test.verification_scope) ||
|
|
185
|
+
"end_to_end"),
|
|
186
|
+
outcome: evaluation.outcome,
|
|
187
|
+
code_snapshot: snapshot,
|
|
188
|
+
environment_hash: environmentHash,
|
|
189
|
+
started_at: artifact.run.started_at,
|
|
190
|
+
finished_at: artifact.run.finished_at,
|
|
191
|
+
artifact_digest: artifactDigest,
|
|
192
|
+
contract_hash: proofContractHash(contract),
|
|
193
|
+
...(bindingHash !== undefined ? { binding_hash: bindingHash } : {}),
|
|
194
|
+
fingerprint,
|
|
195
|
+
fingerprint_components: components,
|
|
196
|
+
integration_id: effectiveIntegrationId,
|
|
197
|
+
producer: artifact.producer,
|
|
198
|
+
command_argv: [...artifact.command_argv],
|
|
199
|
+
run_outcome: artifact.run.outcome,
|
|
200
|
+
proof_results: evaluation.projectedResults.map((result) => ({
|
|
201
|
+
...result,
|
|
202
|
+
})),
|
|
203
|
+
...(evaluation.gaps.length > 0 ? { gaps: evaluation.gaps } : {}),
|
|
204
|
+
};
|
|
205
|
+
prepared.push({
|
|
206
|
+
testId,
|
|
207
|
+
test,
|
|
208
|
+
contract,
|
|
209
|
+
evaluation,
|
|
210
|
+
receipt,
|
|
211
|
+
existing: existingReceipts(test),
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const results = [];
|
|
215
|
+
let passed = 0;
|
|
216
|
+
let failed = 0;
|
|
217
|
+
let unchanged = 0;
|
|
218
|
+
for (const entry of prepared) {
|
|
219
|
+
const { testId, test, contract, evaluation, receipt, existing } = entry;
|
|
220
|
+
// Idempotent re-ingestion: the same artifact against the same effective
|
|
221
|
+
// contract+fingerprint derives the same receipt id and must not re-append.
|
|
222
|
+
if (existing.some((row) => row.receipt_id === receipt.receipt_id)) {
|
|
223
|
+
unchanged += 1;
|
|
224
|
+
if (receipt.outcome === "passed")
|
|
225
|
+
passed += 1;
|
|
226
|
+
else
|
|
227
|
+
failed += 1;
|
|
228
|
+
results.push({
|
|
229
|
+
testId,
|
|
230
|
+
outcome: receipt.outcome,
|
|
231
|
+
receiptId: receipt.receipt_id,
|
|
232
|
+
applied: false,
|
|
233
|
+
duplicate: true,
|
|
234
|
+
receiptCount: existing.length,
|
|
235
|
+
gaps: evaluation.gaps,
|
|
236
|
+
});
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const nextReceipts = [
|
|
240
|
+
...existing,
|
|
241
|
+
receipt,
|
|
242
|
+
].slice(-MAX_PROOF_RECEIPTS);
|
|
243
|
+
const historyErrors = proofReceiptHistoryErrors(testId, test.verification_scope, nextReceipts);
|
|
244
|
+
const bindingErrors = proofReceiptCurrentBindingErrors(testId, test.verification_scope, receipt, contract, receipt.fingerprint);
|
|
245
|
+
const receiptErrors = [...historyErrors, ...bindingErrors];
|
|
246
|
+
if (receiptErrors.length > 0)
|
|
247
|
+
throw new Error(`Proof ingest failed for ${testId}: ${receiptErrors.join("; ")}`);
|
|
248
|
+
const properties = projectEntityProperties(test);
|
|
249
|
+
properties.proof_receipts = undefined;
|
|
250
|
+
// Surgical receipt append: splice only the proof_receipts block into the
|
|
251
|
+
// authored document so unrelated frontmatter keeps its authored form.
|
|
252
|
+
// Canonical re-rendering here would change non-receipt bytes, shift the
|
|
253
|
+
// workspace snapshot hash mid-campaign, and make later integrations in
|
|
254
|
+
// the same `kibi prove --all` refuse with "changed the tracked
|
|
255
|
+
// workspace". Falls back to the canonical render when the document is
|
|
256
|
+
// not a patchable markdown file.
|
|
257
|
+
let sourceDocumentOverride;
|
|
258
|
+
const source = typeof test.source === "string" ? test.source : "";
|
|
259
|
+
if (context.fs && source !== "" && /\.(md|mdx)$/i.test(source)) {
|
|
260
|
+
try {
|
|
261
|
+
const absolute = resolveContainedSourcePath(context.workspaceRoot, source);
|
|
262
|
+
const before = await context.fs.readFile(absolute);
|
|
263
|
+
sourceDocumentOverride =
|
|
264
|
+
patchReceiptsIntoDocument(before, nextReceipts) ?? undefined;
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
sourceDocumentOverride = undefined;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// exactOptionalPropertyTypes: only pass the override when one exists.
|
|
271
|
+
const upsertOptions = sourceDocumentOverride === undefined ? {} : { sourceDocumentOverride };
|
|
272
|
+
const upsert = await executeUpsert({
|
|
273
|
+
type: "test",
|
|
274
|
+
id: testId,
|
|
275
|
+
properties: { ...properties, proof_receipts: nextReceipts },
|
|
276
|
+
}, context, upsertOptions);
|
|
277
|
+
void upsert;
|
|
278
|
+
if (receipt.outcome === "passed")
|
|
279
|
+
passed += 1;
|
|
280
|
+
else
|
|
281
|
+
failed += 1;
|
|
282
|
+
results.push({
|
|
283
|
+
testId,
|
|
284
|
+
outcome: receipt.outcome,
|
|
285
|
+
receiptId: receipt.receipt_id,
|
|
286
|
+
applied: true,
|
|
287
|
+
duplicate: false,
|
|
288
|
+
receiptCount: nextReceipts.length,
|
|
289
|
+
gaps: evaluation.gaps,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
const summary = passed > 0
|
|
293
|
+
? `Proved ${passed} test(s)${failed > 0 ? `, ${failed} failed` : ""}${unchanged > 0 ? `, ${unchanged} unchanged` : ""}.`
|
|
294
|
+
: `No passing proof: ${failed} failed, ${unchanged} unchanged.`;
|
|
295
|
+
return {
|
|
296
|
+
content: [{ type: "text", text: `Ingested proof evidence. ${summary}` }],
|
|
297
|
+
structuredContent: {
|
|
298
|
+
artifactDigest: jsonDigest(artifact),
|
|
299
|
+
environmentHash: canonicalEnvironmentHash(artifact.environment),
|
|
300
|
+
integration: integrationId,
|
|
301
|
+
passed,
|
|
302
|
+
failed,
|
|
303
|
+
unchanged,
|
|
304
|
+
results,
|
|
305
|
+
},
|
|
306
|
+
};
|
|
307
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { OperationContext } from "../../public/operations/runtime-types.js";
|
|
2
|
+
export type MigrateLegacyReceiptsArgs = Readonly<{
|
|
3
|
+
/** Migrate a single test entity only. */
|
|
4
|
+
testId?: string;
|
|
5
|
+
}>;
|
|
6
|
+
export type MigrateLegacyReceiptsResult = Readonly<{
|
|
7
|
+
migrated: number;
|
|
8
|
+
tests: readonly {
|
|
9
|
+
readonly testId: string;
|
|
10
|
+
}[];
|
|
11
|
+
}>;
|
|
12
|
+
/**
|
|
13
|
+
* Drop legacy `verification_receipts` frontmatter blocks from test documents
|
|
14
|
+
* that already carry a `proof_contract`.
|
|
15
|
+
*
|
|
16
|
+
* The proof architecture replaced verification evidence with proof
|
|
17
|
+
* contracts/receipts, but hand-migrated workspaces kept the old blocks (with
|
|
18
|
+
* stale snapshot hashes) in ~dozens of test files, making live-receipt
|
|
19
|
+
* greps error-prone. This maintenance action strips the legacy block from
|
|
20
|
+
* the authored document and the compiled entity — one block splice, no
|
|
21
|
+
* canonical re-render.
|
|
22
|
+
*/
|
|
23
|
+
export declare function executeMigrateLegacyReceipts(args: MigrateLegacyReceiptsArgs, context: OperationContext): Promise<{
|
|
24
|
+
content: Array<{
|
|
25
|
+
type: "text";
|
|
26
|
+
text: string;
|
|
27
|
+
}>;
|
|
28
|
+
structuredContent: MigrateLegacyReceiptsResult;
|
|
29
|
+
}>;
|
|
30
|
+
//# sourceMappingURL=migrate-legacy-receipts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-legacy-receipts.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/migrate-legacy-receipts.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAOjF,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,yCAAyC;IAEzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAGH,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IAEjD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AAEH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,yBAAyB,EAC/B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;IACT,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,iBAAiB,EAAE,2BAA2B,CAAC;CAChD,CAAC,CA6ED"}
|
|
@@ -0,0 +1,88 @@
|
|
|
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 { loadEntities } from "../../public/operations/discovery-entities.js";
|
|
19
|
+
import { projectEntityProperties } from "../mutation/entity-projection.js";
|
|
20
|
+
import { resolveContainedSourcePath } from "../mutation/source-authoring.js";
|
|
21
|
+
import { executeUpsert } from "../mutation/upsert.js";
|
|
22
|
+
import { removeFrontmatterBlock } from "./receipt-document.js";
|
|
23
|
+
/**
|
|
24
|
+
* Drop legacy `verification_receipts` frontmatter blocks from test documents
|
|
25
|
+
* that already carry a `proof_contract`.
|
|
26
|
+
*
|
|
27
|
+
* The proof architecture replaced verification evidence with proof
|
|
28
|
+
* contracts/receipts, but hand-migrated workspaces kept the old blocks (with
|
|
29
|
+
* stale snapshot hashes) in ~dozens of test files, making live-receipt
|
|
30
|
+
* greps error-prone. This maintenance action strips the legacy block from
|
|
31
|
+
* the authored document and the compiled entity — one block splice, no
|
|
32
|
+
* canonical re-render.
|
|
33
|
+
*/
|
|
34
|
+
// implements REQ-kibi-proof-evidence-protocol
|
|
35
|
+
export async function executeMigrateLegacyReceipts(args, context) {
|
|
36
|
+
if (!context.prolog)
|
|
37
|
+
throw new Error("Legacy receipt migration requires a Prolog runtime");
|
|
38
|
+
if (context.fs === undefined)
|
|
39
|
+
throw new Error("Legacy receipt migration failed: this maintenance action rewrites authored test documents and requires a filesystem-capable runtime");
|
|
40
|
+
const tests = await loadEntities(context.prolog, {
|
|
41
|
+
type: "test",
|
|
42
|
+
...(args.testId === undefined ? {} : { id: args.testId }),
|
|
43
|
+
});
|
|
44
|
+
if (args.testId !== undefined && tests.length === 0) {
|
|
45
|
+
throw new Error(`Legacy receipt migration failed: test ${args.testId} was not found`);
|
|
46
|
+
}
|
|
47
|
+
const migratedTests = [];
|
|
48
|
+
for (const test of tests) {
|
|
49
|
+
const testId = String(test.id);
|
|
50
|
+
const hasLegacy = Array.isArray(test.verification_receipts);
|
|
51
|
+
const hasProofContract = test.proof_contract !== null && typeof test.proof_contract === "object";
|
|
52
|
+
if (!hasLegacy || !hasProofContract)
|
|
53
|
+
continue;
|
|
54
|
+
const source = typeof test.source === "string" ? test.source : "";
|
|
55
|
+
let patchedContent;
|
|
56
|
+
if (context.fs && source !== "" && /\.(md|mdx)$/i.test(source)) {
|
|
57
|
+
const absolute = resolveContainedSourcePath(context.workspaceRoot, source);
|
|
58
|
+
const before = await context.fs.readFile(absolute);
|
|
59
|
+
patchedContent =
|
|
60
|
+
removeFrontmatterBlock(before, "verification_receipts") ?? undefined;
|
|
61
|
+
if (patchedContent === undefined) {
|
|
62
|
+
throw new Error(`Legacy receipt migration failed for ${testId}: ${source} is not a patchable frontmatter document`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
throw new Error(`Legacy receipt migration failed for ${testId}: test source '${source || "unknown"}' is not an authored markdown document`);
|
|
67
|
+
}
|
|
68
|
+
const properties = Object.fromEntries(Object.entries(projectEntityProperties(test)).filter(([key]) => key !== "verification_receipts"));
|
|
69
|
+
// Drop the legacy lane from the compiled entity; proof_receipts stay
|
|
70
|
+
// untouched so append-only validation keeps holding.
|
|
71
|
+
const upsertOptions = patchedContent === undefined
|
|
72
|
+
? {}
|
|
73
|
+
: { sourceDocumentOverride: patchedContent };
|
|
74
|
+
await executeUpsert({
|
|
75
|
+
type: "test",
|
|
76
|
+
id: testId,
|
|
77
|
+
properties: { ...properties },
|
|
78
|
+
}, context, upsertOptions);
|
|
79
|
+
migratedTests.push({ testId });
|
|
80
|
+
}
|
|
81
|
+
const summary = migratedTests.length === 0
|
|
82
|
+
? "No test carries a legacy verification_receipts block alongside a proof_contract."
|
|
83
|
+
: `Removed legacy verification_receipts from ${migratedTests.length} test(s).`;
|
|
84
|
+
return {
|
|
85
|
+
content: [{ type: "text", text: `Legacy receipts migrated. ${summary}` }],
|
|
86
|
+
structuredContent: { migrated: migratedTests.length, tests: migratedTests },
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { OperationContext } from "../../public/operations/runtime-types.js";
|
|
2
|
+
export type PruneReceiptsArgs = Readonly<{
|
|
3
|
+
/** Keep the newest N receipts per test (default 1). */
|
|
4
|
+
keep?: number;
|
|
5
|
+
/** Prune a single test entity only. */
|
|
6
|
+
testId?: string;
|
|
7
|
+
}>;
|
|
8
|
+
export type PruneReceiptsTestResult = Readonly<{
|
|
9
|
+
testId: string;
|
|
10
|
+
before: number;
|
|
11
|
+
after: number;
|
|
12
|
+
pruned: number;
|
|
13
|
+
}>;
|
|
14
|
+
export type PruneReceiptsResult = Readonly<{
|
|
15
|
+
pruned: number;
|
|
16
|
+
tests: readonly PruneReceiptsTestResult[];
|
|
17
|
+
}>;
|
|
18
|
+
/**
|
|
19
|
+
* Shrink each test's proof_receipts history to its newest entries.
|
|
20
|
+
*
|
|
21
|
+
* Re-proving the same snapshot appends duplicate passed receipts (one block
|
|
22
|
+
* per run), and consumers previously deduped them by hand. This is the one
|
|
23
|
+
* sanctioned history-shrinking mutation: pruned histories are still ordered,
|
|
24
|
+
* structurally valid evidence, and every shrink goes through the typed upsert
|
|
25
|
+
* with the prune carve-out (append-only validation is skipped for exactly
|
|
26
|
+
* this maintenance action).
|
|
27
|
+
*/
|
|
28
|
+
export declare function executePruneReceipts(args: PruneReceiptsArgs, context: OperationContext): Promise<{
|
|
29
|
+
content: Array<{
|
|
30
|
+
type: "text";
|
|
31
|
+
text: string;
|
|
32
|
+
}>;
|
|
33
|
+
structuredContent: PruneReceiptsResult;
|
|
34
|
+
}>;
|
|
35
|
+
//# sourceMappingURL=prune-receipts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune-receipts.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/prune-receipts.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AASjF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,uDAAuD;IAEvD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAGH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAE7C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAEzC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC3C,CAAC,CAAC;AAYH;;;;;;;;;GASG;AAEH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC;IACT,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,iBAAiB,EAAE,mBAAmB,CAAC;CACxC,CAAC,CAoED"}
|
|
@@ -0,0 +1,91 @@
|
|
|
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 { loadEntities } from "../../public/operations/discovery-entities.js";
|
|
19
|
+
import { proofReceiptHistoryErrors, } from "../../public/proof-receipt.js";
|
|
20
|
+
import { projectEntityProperties } from "../mutation/entity-projection.js";
|
|
21
|
+
import { executeUpsert } from "../mutation/upsert.js";
|
|
22
|
+
function parseKeep(value) {
|
|
23
|
+
if (value === undefined)
|
|
24
|
+
return 1;
|
|
25
|
+
if (!Number.isSafeInteger(value) || value < 1 || value > 50) {
|
|
26
|
+
throw new Error("Proof prune failed: keep must be an integer between 1 and 50");
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Shrink each test's proof_receipts history to its newest entries.
|
|
32
|
+
*
|
|
33
|
+
* Re-proving the same snapshot appends duplicate passed receipts (one block
|
|
34
|
+
* per run), and consumers previously deduped them by hand. This is the one
|
|
35
|
+
* sanctioned history-shrinking mutation: pruned histories are still ordered,
|
|
36
|
+
* structurally valid evidence, and every shrink goes through the typed upsert
|
|
37
|
+
* with the prune carve-out (append-only validation is skipped for exactly
|
|
38
|
+
* this maintenance action).
|
|
39
|
+
*/
|
|
40
|
+
// implements REQ-kibi-proof-evidence-protocol
|
|
41
|
+
export async function executePruneReceipts(args, context) {
|
|
42
|
+
if (!context.prolog)
|
|
43
|
+
throw new Error("Proof prune requires a Prolog runtime");
|
|
44
|
+
if (context.fs === undefined)
|
|
45
|
+
throw new Error("Proof prune failed: this maintenance action rewrites authored test documents and requires a filesystem-capable runtime");
|
|
46
|
+
const keep = parseKeep(args.keep);
|
|
47
|
+
const tests = await loadEntities(context.prolog, {
|
|
48
|
+
type: "test",
|
|
49
|
+
...(args.testId === undefined ? {} : { id: args.testId }),
|
|
50
|
+
});
|
|
51
|
+
if (args.testId !== undefined && tests.length === 0) {
|
|
52
|
+
throw new Error(`Proof prune failed: test ${args.testId} was not found`);
|
|
53
|
+
}
|
|
54
|
+
const results = [];
|
|
55
|
+
for (const test of tests) {
|
|
56
|
+
const testId = String(test.id);
|
|
57
|
+
const receipts = Array.isArray(test.proof_receipts)
|
|
58
|
+
? test.proof_receipts.filter((value) => typeof value === "object" &&
|
|
59
|
+
value !== null &&
|
|
60
|
+
!Array.isArray(value))
|
|
61
|
+
: [];
|
|
62
|
+
if (receipts.length <= keep)
|
|
63
|
+
continue;
|
|
64
|
+
const nextReceipts = receipts.slice(-keep);
|
|
65
|
+
const historyErrors = proofReceiptHistoryErrors(testId, test.verification_scope, nextReceipts);
|
|
66
|
+
if (historyErrors.length > 0) {
|
|
67
|
+
throw new Error(`Proof prune failed for ${testId}: pruned history is invalid: ${historyErrors.join("; ")}`);
|
|
68
|
+
}
|
|
69
|
+
const properties = projectEntityProperties(test);
|
|
70
|
+
properties.proof_receipts = undefined;
|
|
71
|
+
await executeUpsert({
|
|
72
|
+
type: "test",
|
|
73
|
+
id: testId,
|
|
74
|
+
properties: { ...properties, proof_receipts: nextReceipts },
|
|
75
|
+
}, context, { allowReceiptsPrune: true });
|
|
76
|
+
results.push({
|
|
77
|
+
testId,
|
|
78
|
+
before: receipts.length,
|
|
79
|
+
after: nextReceipts.length,
|
|
80
|
+
pruned: receipts.length - nextReceipts.length,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const pruned = results.reduce((sum, row) => sum + row.pruned, 0);
|
|
84
|
+
const summary = results.length === 0
|
|
85
|
+
? "No test had receipts beyond the keep window."
|
|
86
|
+
: `Pruned ${pruned} receipt(s) across ${results.length} test(s).`;
|
|
87
|
+
return {
|
|
88
|
+
content: [{ type: "text", text: `Proof receipts pruned. ${summary}` }],
|
|
89
|
+
structuredContent: { pruned, tests: results },
|
|
90
|
+
};
|
|
91
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove a top-level frontmatter block (`key:` plus its nested lines) from a
|
|
3
|
+
* markdown document, leaving every other byte untouched. Returns the patched
|
|
4
|
+
* content, or null when the content is not a well-formed frontmatter
|
|
5
|
+
* document the remover can safely splice.
|
|
6
|
+
*
|
|
7
|
+
* Used by proof maintenance to drop legacy `verification_receipts` blocks
|
|
8
|
+
* once a `proof_contract` exists, without canonicalizing the document.
|
|
9
|
+
*/
|
|
10
|
+
export declare function removeFrontmatterBlock(content: string, key: string): string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Patch the `proof_receipts` frontmatter block of an authored test document
|
|
13
|
+
* without re-rendering anything else.
|
|
14
|
+
*
|
|
15
|
+
* Receipt ingest used to route every append through the canonical entity
|
|
16
|
+
* renderer, which re-dumps the whole frontmatter: inline tag lists became
|
|
17
|
+
* block lists, timestamps gained milliseconds, and so on. Those non-receipt
|
|
18
|
+
* edits are not stripped by the workspace snapshotter, so the snapshot hash
|
|
19
|
+
* changed on the first ingest that touched a hand-authored document and every
|
|
20
|
+
* later integration in the same `kibi prove --all` run refused with
|
|
21
|
+
* "changed the tracked workspace". This patcher splices ONLY the receipts
|
|
22
|
+
* block, leaving the rest of the document byte-for-byte identical.
|
|
23
|
+
*
|
|
24
|
+
* Returns null when the content is not a well-formed frontmatter document the
|
|
25
|
+
* patcher can safely splice; the caller then falls back to the canonical
|
|
26
|
+
* render.
|
|
27
|
+
*/
|
|
28
|
+
export declare function patchReceiptsIntoDocument(content: string, receipts: readonly Readonly<Record<string, unknown>>[]): string | null;
|
|
29
|
+
//# sourceMappingURL=receipt-document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt-document.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/receipt-document.ts"],"names":[],"mappings":"AAoBA;;;;;;;;GAQG;AAEH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,IAAI,CA4Bf;AAED;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,GACrD,MAAM,GAAG,IAAI,CAyCf"}
|