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
|
@@ -1,14 +1,26 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync, readFileSync, realpathSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { OperationError } from "../../cli-errors.js";
|
|
5
|
+
import { readManifestWithCoordinateOverlay } from "../../extractors/manifest.js";
|
|
6
|
+
import { extractManifestSymbolRecords } from "../../extractors/manifest.js";
|
|
1
7
|
import { escapeAtom } from "../../prolog/codec.js";
|
|
2
8
|
import { loadEntities } from "../../public/operations/discovery-entities.js";
|
|
3
|
-
import {
|
|
9
|
+
import { appendOnlyProofReceiptHistoryErrors } from "../../public/proof-receipt.js";
|
|
10
|
+
import { appendRelationship, computeShardPath, } from "../../relationships/shards.js";
|
|
11
|
+
import { resolveBranchAttachment } from "../../utils/branch-resolver.js";
|
|
4
12
|
import { analyzeSemanticAdvisorInput } from "../semantic-advisor/analyze-prose.js";
|
|
5
13
|
import { assertLogicalGroundingClaimKeys, assertSemanticInventoryBoundary, } from "../semantic-advisor/ingestion-boundary.js";
|
|
6
14
|
import { buildUpsertCommitGoal, formatUpsertError } from "./contradictions.js";
|
|
7
|
-
import { existingRelationships, validateLiveRelationshipTargets, validateRelationshipSources, validateStrictLanePairing, } from "./relationships.js";
|
|
15
|
+
import { existingRelationships, validateLiveRelationshipTargets, validateRelationshipSources, validateStrictLanePairing, validateSupersedesSourceHistory, } from "./relationships.js";
|
|
16
|
+
import { MutationSaga } from "./saga.js";
|
|
17
|
+
import { writePendingSourceReceipt, writeSourceForUpsert, } from "./source-authoring.js";
|
|
18
|
+
import { acquireSymbolCompilerLock, releaseSymbolCompilerLock, } from "./symbol-compiler-lock.js";
|
|
8
19
|
import { validateSymbolGranularity } from "./symbol-granularity.js";
|
|
9
|
-
import {
|
|
20
|
+
import { refreshSymbolCoordinatesForManifest } from "./symbol-refresh.js";
|
|
10
21
|
import { validateUpsertInput } from "./validation.js";
|
|
11
22
|
import { scenarioCoverageWarnings } from "./warnings.js";
|
|
23
|
+
import { acquireWorkspaceMutationLock, releaseWorkspaceMutationLock, } from "./workspace-mutation-lock.js";
|
|
12
24
|
function requireProlog(context) {
|
|
13
25
|
if (context.prolog === undefined) {
|
|
14
26
|
throw new Error("Upsert operation requires a Prolog runtime");
|
|
@@ -28,33 +40,92 @@ function parseChangeKind(value) {
|
|
|
28
40
|
? normalized
|
|
29
41
|
: null;
|
|
30
42
|
}
|
|
31
|
-
|
|
43
|
+
function fileHash(pathname) {
|
|
44
|
+
if (!existsSync(pathname))
|
|
45
|
+
return null;
|
|
46
|
+
return createHash("sha256").update(readFileSync(pathname)).digest("hex");
|
|
47
|
+
}
|
|
48
|
+
function textHash(value) {
|
|
49
|
+
return createHash("sha256").update(value).digest("hex");
|
|
50
|
+
}
|
|
51
|
+
function assertRelationshipShardContained(workspaceRoot, shardPath) {
|
|
52
|
+
const root = path.resolve(workspaceRoot);
|
|
53
|
+
const relationshipRoot = path.resolve(root, ".kb", "relationships");
|
|
54
|
+
const absolute = path.resolve(shardPath);
|
|
55
|
+
if (!absolute.startsWith(`${relationshipRoot}${path.sep}`)) {
|
|
56
|
+
throw new OperationError("SOURCE_PATH_INVALID", `Relationship shard escapes the canonical workspace lane: ${shardPath}`);
|
|
57
|
+
}
|
|
58
|
+
let existing = absolute;
|
|
59
|
+
while (!existsSync(existing) && path.dirname(existing) !== existing) {
|
|
60
|
+
existing = path.dirname(existing);
|
|
61
|
+
}
|
|
62
|
+
const real = realpathSync.native(existing);
|
|
63
|
+
if (real !== root && !real.startsWith(`${root}${path.sep}`)) {
|
|
64
|
+
throw new OperationError("SOURCE_PATH_INVALID", `Relationship shard follows a symlink outside the workspace: ${shardPath}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function restoreRelationshipShard(shardPath, before, expectedAfterHash) {
|
|
68
|
+
// Compare before restore: a concurrent writer may have replaced the shard
|
|
69
|
+
// after our append. Never clobber newer bytes; the next check/sync reports
|
|
70
|
+
// any canonical source path that needs reconciliation.
|
|
71
|
+
if (expectedAfterHash !== null) {
|
|
72
|
+
let currentHash = null;
|
|
73
|
+
try {
|
|
74
|
+
currentHash = fileHash(shardPath);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
currentHash = null;
|
|
78
|
+
}
|
|
79
|
+
if (currentHash !== expectedAfterHash) {
|
|
80
|
+
console.warn(`Skipped relationship shard rollback for ${path.relative(process.cwd(), shardPath)}: shard changed after the Kibi write.`);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (before === null) {
|
|
85
|
+
try {
|
|
86
|
+
unlinkSync(shardPath);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// The file may already be absent after an interrupted atomic replace.
|
|
90
|
+
}
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
writeFileSync(shardPath, before, "utf8");
|
|
94
|
+
}
|
|
95
|
+
export async function validateAppendOnlyProofReceipts(entity, context) {
|
|
32
96
|
if (entity.type !== "test")
|
|
33
97
|
return;
|
|
34
98
|
const existing = await loadEntities(requireProlog(context), {
|
|
35
99
|
id: String(entity.id),
|
|
36
100
|
type: "test",
|
|
37
101
|
});
|
|
38
|
-
const previous = receiptRecords(existing[0]?.
|
|
102
|
+
const previous = receiptRecords(existing[0]?.proof_receipts);
|
|
39
103
|
if (!previous || previous.length === 0)
|
|
40
104
|
return;
|
|
41
|
-
const next = receiptRecords(entity.
|
|
42
|
-
const errors =
|
|
105
|
+
const next = receiptRecords(entity.proof_receipts);
|
|
106
|
+
const errors = appendOnlyProofReceiptHistoryErrors(previous, next);
|
|
43
107
|
if (errors.length > 0) {
|
|
44
108
|
throw new Error(`Entity validation failed: ${errors.join("; ")}`);
|
|
45
109
|
}
|
|
46
110
|
}
|
|
47
111
|
export async function effectiveRelationships(input, entity, relationships, context) {
|
|
48
|
-
if (input.relationships !== undefined && input.relationships.length > 0) {
|
|
49
|
-
return relationships;
|
|
50
|
-
}
|
|
51
112
|
const prolog = requireProlog(context);
|
|
52
113
|
const exists = await prolog.query(`once(kb_entity('${escapeAtom(input.id)}', _, _))`);
|
|
53
114
|
if (!exists.success)
|
|
54
115
|
return relationships;
|
|
55
116
|
try {
|
|
56
|
-
const current = await existingRelationships(prolog, String(entity.id))
|
|
57
|
-
|
|
117
|
+
const current = (await existingRelationships(prolog, String(entity.id)))
|
|
118
|
+
// An upsert owns only relationships whose source is the upserted entity.
|
|
119
|
+
// Incoming relationships must not be copied into its validation or
|
|
120
|
+
// canonical source projection.
|
|
121
|
+
.filter((relationship) => relationship.from === input.id);
|
|
122
|
+
const merged = new Map();
|
|
123
|
+
for (const relationship of [...current, ...relationships]) {
|
|
124
|
+
const key = `${String(relationship.type)}\u0000${String(relationship.from)}\u0000${String(relationship.to)}`;
|
|
125
|
+
// The explicit input wins so any supplied metadata is retained.
|
|
126
|
+
merged.set(key, relationship);
|
|
127
|
+
}
|
|
128
|
+
return [...merged.values()];
|
|
58
129
|
}
|
|
59
130
|
catch (error) {
|
|
60
131
|
if (error instanceof Error)
|
|
@@ -62,55 +133,283 @@ export async function effectiveRelationships(input, entity, relationships, conte
|
|
|
62
133
|
throw error;
|
|
63
134
|
}
|
|
64
135
|
}
|
|
65
|
-
|
|
136
|
+
/**
|
|
137
|
+
* Re-extract one complete canonical symbol entity from the authored manifest
|
|
138
|
+
* plus the freshly published generated coordinate artifact. Source-first
|
|
139
|
+
* commits must match exactly what the next sync would compile, instead of
|
|
140
|
+
* hand-merging generated fields into the caller's partial payload.
|
|
141
|
+
*/
|
|
142
|
+
function reextractCanonicalSymbolEntity(symbolId, authoredRelativePath, workspaceRoot) {
|
|
143
|
+
const absoluteManifest = path.resolve(workspaceRoot, authoredRelativePath);
|
|
144
|
+
let records;
|
|
145
|
+
try {
|
|
146
|
+
records = readManifestWithCoordinateOverlay(absoluteManifest);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
throw new Error(`Canonical symbol manifest ${authoredRelativePath} could not be compiled after coordinate refresh: ${error instanceof Error ? error.message : String(error)}`);
|
|
150
|
+
}
|
|
151
|
+
const mine = records.find((candidate) => candidate.id === symbolId);
|
|
152
|
+
if (mine === undefined)
|
|
153
|
+
return null;
|
|
154
|
+
const [result] = extractManifestSymbolRecords([mine], absoluteManifest);
|
|
155
|
+
if (result === undefined)
|
|
156
|
+
return null;
|
|
157
|
+
return {
|
|
158
|
+
...result.entity,
|
|
159
|
+
...(result.sourceFile === undefined
|
|
160
|
+
? {}
|
|
161
|
+
: { sourceFile: result.sourceFile }),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
export async function executeUpsert(input, context, options = {}) {
|
|
165
|
+
const branchAttachment = context.branchAttachment ?? resolveBranchAttachment(context.workspaceRoot);
|
|
166
|
+
if ("error" in branchAttachment) {
|
|
167
|
+
throw new Error(`Unable to resolve KB branch: ${branchAttachment.error}`);
|
|
168
|
+
}
|
|
169
|
+
if (branchAttachment.migrationRequired &&
|
|
170
|
+
(context.branchAttachment !== undefined || context.fs !== undefined)) {
|
|
171
|
+
throw new Error(`Upsert blocked: KB is attached through legacy branch storage (${branchAttachment.gitBranch} -> ${branchAttachment.kbBranch}). Run 'kibi branch migrate --from ${branchAttachment.kbBranch} --to ${branchAttachment.gitBranch} --apply' first.`);
|
|
172
|
+
}
|
|
66
173
|
const prolog = requireProlog(context);
|
|
174
|
+
// Declared compensation list for the multi-surface mutation. Steps register
|
|
175
|
+
// as they succeed (authored source -> relationship shards -> coordinates);
|
|
176
|
+
// a failure rolls them back in reverse under the symbol compiler lock, and
|
|
177
|
+
// the compiled commit marks the point of no return.
|
|
178
|
+
const saga = new MutationSaga();
|
|
179
|
+
let sourceWrite = null;
|
|
180
|
+
let commitEntity;
|
|
181
|
+
let relationshipCount = 0;
|
|
182
|
+
let changeKind = null;
|
|
183
|
+
let semanticAdvisor;
|
|
184
|
+
let compilerLock;
|
|
185
|
+
let sourceMutationLock;
|
|
186
|
+
let operationFailure;
|
|
187
|
+
const relationshipShardBefore = new Map();
|
|
188
|
+
const relationshipShardAfterHash = new Map();
|
|
189
|
+
const holdsSymbolCompilerLock = input.type === "symbol" &&
|
|
190
|
+
context.fs !== undefined &&
|
|
191
|
+
context.sourceFirst !== false;
|
|
192
|
+
const holdsSourceMutationLock = context.fs !== undefined &&
|
|
193
|
+
context.sourceFirst !== false &&
|
|
194
|
+
context.sourceMutationLockHeld !== true;
|
|
67
195
|
try {
|
|
196
|
+
if (holdsSourceMutationLock) {
|
|
197
|
+
sourceMutationLock = await acquireWorkspaceMutationLock(context.workspaceRoot);
|
|
198
|
+
}
|
|
199
|
+
if (holdsSymbolCompilerLock) {
|
|
200
|
+
// Symbol source publication, coordinate refresh, canonical
|
|
201
|
+
// re-extraction, and the RDF commit form one read-modify-write cycle.
|
|
202
|
+
// Serialize the whole cycle so concurrent full refreshes or sibling
|
|
203
|
+
// upserts cannot lose updates.
|
|
204
|
+
compilerLock = await acquireSymbolCompilerLock(context.workspaceRoot);
|
|
205
|
+
}
|
|
68
206
|
const validated = validateUpsertInput(input, context.clock());
|
|
69
|
-
|
|
207
|
+
if (options.allowReceiptsPrune !== true) {
|
|
208
|
+
await validateAppendOnlyProofReceipts(validated.entity, context);
|
|
209
|
+
}
|
|
70
210
|
validateRelationshipSources(input.id, validated.relationships);
|
|
71
211
|
await validateSymbolGranularity(validated.entity, validated.relationships, context);
|
|
72
212
|
const relationships = await effectiveRelationships(input, validated.entity, validated.relationships, context);
|
|
73
|
-
|
|
74
|
-
await
|
|
213
|
+
relationshipCount = validated.relationships.length;
|
|
214
|
+
await validateStrictLanePairing(prolog, validated.relationships);
|
|
215
|
+
await validateLiveRelationshipTargets(prolog, validated.entity, validated.relationships);
|
|
216
|
+
await validateSupersedesSourceHistory(prolog, validated.entity, validated.relationships, context.workspaceRoot);
|
|
75
217
|
const semantic = analyzeSemanticAdvisorInput({
|
|
76
218
|
payload: { ...input, relationships },
|
|
77
219
|
});
|
|
220
|
+
semanticAdvisor = semantic.receipt;
|
|
78
221
|
assertSemanticInventoryBoundary({ ...input, relationships }, relationships, semantic.receipt);
|
|
79
222
|
await assertLogicalGroundingClaimKeys(prolog, { ...input, relationships }, relationships);
|
|
223
|
+
if (context.fs !== undefined && context.sourceFirst !== false) {
|
|
224
|
+
const existingRows = await loadEntities(prolog, {
|
|
225
|
+
id: input.id,
|
|
226
|
+
type: input.type,
|
|
227
|
+
});
|
|
228
|
+
const existing = existingRows[0];
|
|
229
|
+
const existingSource = existing !== undefined && typeof existing.source === "string"
|
|
230
|
+
? existing.source
|
|
231
|
+
: undefined;
|
|
232
|
+
// Existing non-authored runtime sources (mcp://, test://, etc.) have no
|
|
233
|
+
// tracked document to update unless the caller explicitly supplies one;
|
|
234
|
+
// new entities are required to choose a source target in this
|
|
235
|
+
// filesystem-capable context.
|
|
236
|
+
if (input.document !== undefined ||
|
|
237
|
+
existingSource?.match(/\.(?:md|mdx|ya?ml|json)$/i) ||
|
|
238
|
+
// A filesystem-capable runtime is source-first for every new entity.
|
|
239
|
+
// writeSourceForUpsert emits the typed DOCUMENT_PATH_REQUIRED request
|
|
240
|
+
// when configuration has zero or multiple writable targets, rather
|
|
241
|
+
// than silently creating compiled-only state.
|
|
242
|
+
existing === undefined) {
|
|
243
|
+
sourceWrite = await writeSourceForUpsert(input, validated.entity, existing, context, options.sourceDocumentOverride);
|
|
244
|
+
if (sourceWrite !== null) {
|
|
245
|
+
const sourceStep = sourceWrite;
|
|
246
|
+
saga.add({
|
|
247
|
+
name: "authored-source",
|
|
248
|
+
rollback: () => sourceStep.rollback(),
|
|
249
|
+
onError: "capture",
|
|
250
|
+
});
|
|
251
|
+
// The authored path is the entity's canonical identity. Runtime
|
|
252
|
+
// transport provenance (mcp://...) must never survive a source-first
|
|
253
|
+
// write or a later delete/sync cycle.
|
|
254
|
+
commitEntity = {
|
|
255
|
+
...validated.entity,
|
|
256
|
+
source: sourceWrite.receipt.path,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Relationship shards are canonical source artifacts. Patch them before
|
|
262
|
+
// the compiled transaction so a failed commit can restore exact bytes and
|
|
263
|
+
// a successful commit never leaves a compiled-only relationship behind.
|
|
264
|
+
if (context.fs !== undefined && validated.relationships.length > 0) {
|
|
265
|
+
// Register the rollback before appending so a failure on any shard (for
|
|
266
|
+
// example the second write of a multi-shard batch) unwinds the shards
|
|
267
|
+
// that were already appended.
|
|
268
|
+
saga.add({
|
|
269
|
+
name: "relationship-shards",
|
|
270
|
+
rollback: () => {
|
|
271
|
+
for (const [shardPath, before] of relationshipShardBefore) {
|
|
272
|
+
restoreRelationshipShard(shardPath, before, relationshipShardAfterHash.get(shardPath) ?? null);
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
for (const relationship of validated.relationships) {
|
|
277
|
+
const type = typeof relationship.type === "string" ? relationship.type : "";
|
|
278
|
+
const from = typeof relationship.from === "string" ? relationship.from : input.id;
|
|
279
|
+
const to = typeof relationship.to === "string" ? relationship.to : "";
|
|
280
|
+
if (!type || !from || !to)
|
|
281
|
+
continue;
|
|
282
|
+
const shardPath = computeShardPath(path.join(context.workspaceRoot, ".kb"), from);
|
|
283
|
+
assertRelationshipShardContained(context.workspaceRoot, shardPath);
|
|
284
|
+
if (!relationshipShardBefore.has(shardPath)) {
|
|
285
|
+
relationshipShardBefore.set(shardPath, existsSync(shardPath) ? readFileSync(shardPath, "utf8") : null);
|
|
286
|
+
}
|
|
287
|
+
appendRelationship(path.join(context.workspaceRoot, ".kb"), {
|
|
288
|
+
type,
|
|
289
|
+
from,
|
|
290
|
+
to,
|
|
291
|
+
created_at: context.clock().toISOString(),
|
|
292
|
+
created_by: "kibi/upsert",
|
|
293
|
+
source: "mcp://kibi/upsert",
|
|
294
|
+
});
|
|
295
|
+
relationshipShardAfterHash.set(shardPath, fileHash(shardPath));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// Coordinates are generated compiler state owned by
|
|
299
|
+
// `.kb/symbol-coordinates.yaml`. Refresh the target's generated record
|
|
300
|
+
// from current extraction (we hold the symbol compiler lock), then commit
|
|
301
|
+
// the complete canonical entity the next sync would compile. Failures
|
|
302
|
+
// abort before the RDF transaction so source and shard rollbacks keep all
|
|
303
|
+
// surfaces consistent; stale coordinates are never reused as a fallback.
|
|
304
|
+
if (input.type === "symbol" &&
|
|
305
|
+
context.fs !== undefined &&
|
|
306
|
+
context.sourceFirst !== false &&
|
|
307
|
+
sourceWrite !== null) {
|
|
308
|
+
const refresh = await refreshSymbolCoordinatesForManifest(input.id, path.resolve(context.workspaceRoot, sourceWrite.receipt.path), context);
|
|
309
|
+
const coordinatePublication = refresh.publication;
|
|
310
|
+
if (coordinatePublication !== undefined) {
|
|
311
|
+
saga.add({
|
|
312
|
+
name: "symbol-coordinates",
|
|
313
|
+
rollback: () => coordinatePublication.rollback(),
|
|
314
|
+
onError: "capture",
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
if (!refresh.found || refresh.outcome === "removed") {
|
|
318
|
+
throw new Error(`Coordinate refresh could not find ${input.id} in the authored symbol manifest`);
|
|
319
|
+
}
|
|
320
|
+
const canonical = reextractCanonicalSymbolEntity(input.id, sourceWrite.receipt.path, context.workspaceRoot);
|
|
321
|
+
if (canonical === null) {
|
|
322
|
+
throw new Error(`Canonical symbol manifest ${sourceWrite.receipt.path} no longer contains ${input.id} after coordinate refresh`);
|
|
323
|
+
}
|
|
324
|
+
// The authored path is the entity's canonical identity. Runtime
|
|
325
|
+
// transport provenance (mcp://...) must never survive a source-first
|
|
326
|
+
// write or a later delete/sync cycle.
|
|
327
|
+
commitEntity = {
|
|
328
|
+
...canonical,
|
|
329
|
+
source: sourceWrite.receipt.path,
|
|
330
|
+
};
|
|
331
|
+
}
|
|
80
332
|
const transaction = buildUpsertCommitGoal({
|
|
81
|
-
entity: validated.entity,
|
|
82
|
-
relationships,
|
|
333
|
+
entity: commitEntity ?? validated.entity,
|
|
334
|
+
relationships: validated.relationships,
|
|
83
335
|
skipContradictionCheck: input._skipContradictionCheck === true,
|
|
84
336
|
});
|
|
85
337
|
const written = await prolog.query(transaction);
|
|
86
338
|
if (!written.success) {
|
|
87
|
-
throw new Error(formatUpsertError(input.id, written.error));
|
|
339
|
+
throw new Error(formatUpsertError(input.id, written.error, written.errorRecord));
|
|
88
340
|
}
|
|
341
|
+
saga.markCommitted();
|
|
89
342
|
// The combined commit is the sole mutation boundary. Invalidate reads only
|
|
90
343
|
// after Prolog reports success so a failed/rolled-back commit does not
|
|
91
344
|
// disturb callers' view of the current snapshot.
|
|
92
345
|
prolog.invalidateCache?.();
|
|
93
|
-
|
|
346
|
+
changeKind = parseChangeKind(written.bindings.ChangeKind);
|
|
94
347
|
if (changeKind === null) {
|
|
95
348
|
throw new Error(`Upsert commit completed without a created/updated result for ${input.id}`);
|
|
96
349
|
}
|
|
97
|
-
if (input.type === "symbol") {
|
|
98
|
-
try {
|
|
99
|
-
await refreshSymbolCoordinates(input.id, context);
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
if (!(error instanceof Error))
|
|
103
|
-
throw error;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
350
|
const coverage = await scenarioCoverageWarnings(prolog, validated.relationships, input.type, input.id);
|
|
107
351
|
const created = changeKind === "created" ? 1 : 0;
|
|
352
|
+
const shardWarnings = [];
|
|
353
|
+
const relationshipSourceWrites = [];
|
|
354
|
+
for (const [shardPath, before] of relationshipShardBefore) {
|
|
355
|
+
const afterHash = fileHash(shardPath);
|
|
356
|
+
const beforeHash = before === null ? null : textHash(before);
|
|
357
|
+
const expectedAfterHash = relationshipShardAfterHash.get(shardPath) ?? null;
|
|
358
|
+
if (afterHash === null) {
|
|
359
|
+
if (expectedAfterHash !== null) {
|
|
360
|
+
const relative = path
|
|
361
|
+
.relative(context.workspaceRoot, shardPath)
|
|
362
|
+
.replaceAll("\\", "/");
|
|
363
|
+
shardWarnings.push(`Relationship shard vanished after write: ${relative}`);
|
|
364
|
+
}
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
if (afterHash === beforeHash)
|
|
368
|
+
continue;
|
|
369
|
+
const relative = path
|
|
370
|
+
.relative(context.workspaceRoot, shardPath)
|
|
371
|
+
.replaceAll("\\", "/");
|
|
372
|
+
writePendingSourceReceipt(context.workspaceRoot, relative, afterHash);
|
|
373
|
+
relationshipSourceWrites.push({
|
|
374
|
+
path: relative,
|
|
375
|
+
mode: "write",
|
|
376
|
+
beforeHash,
|
|
377
|
+
afterHash,
|
|
378
|
+
created: before === null,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
108
381
|
const payload = {
|
|
109
382
|
created,
|
|
110
383
|
updated: changeKind === "updated" ? 1 : 0,
|
|
111
|
-
relationships_created: relationships.length,
|
|
112
|
-
warnings: [...semantic.warnings, ...coverage],
|
|
384
|
+
relationships_created: validated.relationships.length,
|
|
385
|
+
warnings: [...semantic.warnings, ...coverage, ...shardWarnings],
|
|
113
386
|
semanticAdvisor: semantic.receipt,
|
|
387
|
+
...(shardWarnings.length > 0
|
|
388
|
+
? {
|
|
389
|
+
status: "committed_with_repairs",
|
|
390
|
+
effectFailures: shardWarnings.map((detail) => ({
|
|
391
|
+
kind: "workspace-write",
|
|
392
|
+
errorCode: "RELATIONSHIP_SHARD_WRITE_FAILED",
|
|
393
|
+
detail,
|
|
394
|
+
})),
|
|
395
|
+
nextActions: [
|
|
396
|
+
{
|
|
397
|
+
operation: "kb_check",
|
|
398
|
+
reason: "Relationship shard publication failed after the KB commit; inspect the shard diagnostics and repair the canonical YAML before syncing.",
|
|
399
|
+
required: true,
|
|
400
|
+
},
|
|
401
|
+
],
|
|
402
|
+
}
|
|
403
|
+
: {}),
|
|
404
|
+
...(sourceWrite ? { sourceWrites: [sourceWrite.receipt] } : {}),
|
|
405
|
+
...(relationshipSourceWrites.length > 0
|
|
406
|
+
? {
|
|
407
|
+
sourceWrites: [
|
|
408
|
+
...(sourceWrite ? [sourceWrite.receipt] : []),
|
|
409
|
+
...relationshipSourceWrites,
|
|
410
|
+
],
|
|
411
|
+
}
|
|
412
|
+
: {}),
|
|
114
413
|
...(input.type === "req"
|
|
115
414
|
? {
|
|
116
415
|
contradictionCheck: {
|
|
@@ -136,7 +435,79 @@ export async function executeUpsert(input, context) {
|
|
|
136
435
|
};
|
|
137
436
|
}
|
|
138
437
|
catch (error) {
|
|
438
|
+
// Roll back every completed pre-commit surface in reverse order, exactly
|
|
439
|
+
// once. After the compiled commit this is a no-op: post-commit failures
|
|
440
|
+
// return committed-with-repairs results instead of undoing committed
|
|
441
|
+
// state.
|
|
442
|
+
const rollbackFailures = await saga.rollback();
|
|
443
|
+
if (saga.committed) {
|
|
444
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
445
|
+
return {
|
|
446
|
+
content: [
|
|
447
|
+
{
|
|
448
|
+
type: "text",
|
|
449
|
+
text: `Upserted ${input.id}, but a derived effect requires repair.`,
|
|
450
|
+
},
|
|
451
|
+
],
|
|
452
|
+
structuredContent: {
|
|
453
|
+
created: changeKind === "created" ? 1 : 0,
|
|
454
|
+
updated: changeKind === "updated" ? 1 : 0,
|
|
455
|
+
relationships_created: relationshipCount,
|
|
456
|
+
warnings: [detail],
|
|
457
|
+
semanticAdvisor: semanticAdvisor,
|
|
458
|
+
status: "committed_with_repairs",
|
|
459
|
+
effectFailures: [
|
|
460
|
+
{
|
|
461
|
+
kind: "derived-effect",
|
|
462
|
+
errorCode: "POST_COMMIT_EFFECT_FAILED",
|
|
463
|
+
detail,
|
|
464
|
+
},
|
|
465
|
+
],
|
|
466
|
+
nextActions: [
|
|
467
|
+
{
|
|
468
|
+
operation: "kb_status",
|
|
469
|
+
reason: "The compiled mutation committed; inspect the authoritative source and derived status before repairing.",
|
|
470
|
+
required: true,
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
operation: "kb_sync",
|
|
474
|
+
reason: "Recompile canonical source files after the committed derived effect failure; do not retry the original upsert.",
|
|
475
|
+
required: true,
|
|
476
|
+
},
|
|
477
|
+
],
|
|
478
|
+
},
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
const coordinateFailure = rollbackFailures.find((failure) => failure.step === "symbol-coordinates");
|
|
482
|
+
if (coordinateFailure !== undefined) {
|
|
483
|
+
const failure = new AggregateError([error, coordinateFailure.error], `Upsert failed and coordinate artifact rollback failed for ${input.id}`);
|
|
484
|
+
operationFailure = { error: failure };
|
|
485
|
+
throw failure;
|
|
486
|
+
}
|
|
487
|
+
const sourceFailure = rollbackFailures.find((failure) => failure.step === "authored-source");
|
|
488
|
+
if (sourceFailure !== undefined) {
|
|
489
|
+
const rollbackMessage = sourceFailure.error instanceof Error
|
|
490
|
+
? sourceFailure.error.message
|
|
491
|
+
: String(sourceFailure.error);
|
|
492
|
+
const failure = new AggregateError([error, sourceFailure.error], `Upsert failed and authored source rollback failed for ${input.id}: ${rollbackMessage}`);
|
|
493
|
+
operationFailure = { error: failure };
|
|
494
|
+
throw failure;
|
|
495
|
+
}
|
|
496
|
+
if (error instanceof OperationError) {
|
|
497
|
+
operationFailure = { error };
|
|
498
|
+
throw error;
|
|
499
|
+
}
|
|
139
500
|
const message = error instanceof Error ? error.message : String(error);
|
|
140
|
-
|
|
501
|
+
const failure = new Error(`Upsert execution failed: ${message}`);
|
|
502
|
+
operationFailure = { error: failure };
|
|
503
|
+
throw failure;
|
|
504
|
+
}
|
|
505
|
+
finally {
|
|
506
|
+
try {
|
|
507
|
+
releaseSymbolCompilerLock(compilerLock, operationFailure, saga.committed);
|
|
508
|
+
}
|
|
509
|
+
finally {
|
|
510
|
+
releaseWorkspaceMutationLock(sourceMutationLock, operationFailure, saga.committed);
|
|
511
|
+
}
|
|
141
512
|
}
|
|
142
513
|
}
|
|
@@ -2,12 +2,12 @@ import { analyzeSemanticAdvisorInput } from "../semantic-advisor/analyze-prose.j
|
|
|
2
2
|
import { assertLogicalGroundingClaimKeys, assertSemanticInventoryBoundary, validateSemanticInventoryBoundary, } from "../semantic-advisor/ingestion-boundary.js";
|
|
3
3
|
import { validateLiveRelationshipTargets, validateRelationshipSources, } from "./relationships.js";
|
|
4
4
|
import { validateSymbolGranularity } from "./symbol-granularity.js";
|
|
5
|
-
import { effectiveRelationships,
|
|
5
|
+
import { effectiveRelationships, validateAppendOnlyProofReceipts, } from "./upsert.js";
|
|
6
6
|
import { validateUpsertInput } from "./validation.js";
|
|
7
7
|
export async function executeValidateUpsert(input, context) {
|
|
8
8
|
try {
|
|
9
9
|
const validated = validateUpsertInput(input, context.clock());
|
|
10
|
-
await
|
|
10
|
+
await validateAppendOnlyProofReceipts(validated.entity, context);
|
|
11
11
|
validateRelationshipSources(input.id, validated.relationships);
|
|
12
12
|
await validateSymbolGranularity(validated.entity, validated.relationships, context);
|
|
13
13
|
const previewSemantic = analyzeSemanticAdvisorInput({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/validation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/validation.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,0BAA0B,EAC3B,MAAM,oCAAoC,CAAC;AAO5C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAkF/D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,WAAW,EAClB,GAAG,EAAE,IAAI,GACR,eAAe,CA0DjB;AAED,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import Ajv from "ajv";
|
|
2
|
+
import { proofReceiptHistoryErrors } from "../../public/proof-receipt.js";
|
|
2
3
|
import entitySchema from "../../public/schemas/entity.js";
|
|
3
4
|
import relationshipSchema from "../../public/schemas/relationship.js";
|
|
4
5
|
// implements REQ-kibi-operation-interface-parity
|
|
5
6
|
import { SYMBOL_ROLES, isAllowedGranularityReason, } from "../../public/symbol-granularity.js";
|
|
6
|
-
import { verificationReceiptHistoryErrors } from "../../public/verification-receipt.js";
|
|
7
7
|
import { semanticClaimKey } from "../semantic-advisor/clauses.js";
|
|
8
8
|
import { factKindShapeHints, validateFactModelingShape, valueFieldHint, } from "./strict-fact.js";
|
|
9
9
|
const ajv = new Ajv({ strict: false });
|
|
@@ -22,6 +22,7 @@ const validateEntity = ajv.compile({
|
|
|
22
22
|
"module-level-behavior",
|
|
23
23
|
"extractor-miss",
|
|
24
24
|
"legacy-link",
|
|
25
|
+
"test-suite",
|
|
25
26
|
],
|
|
26
27
|
},
|
|
27
28
|
symbol_role: { type: "string", enum: [...SYMBOL_ROLES] },
|
|
@@ -85,9 +86,11 @@ export function validateUpsertInput(input, now) {
|
|
|
85
86
|
if (!validateEntity(entity)) {
|
|
86
87
|
throw new Error(`Entity validation failed: ${formatEntityErrors(entity, validateEntity.errors ?? [])}`);
|
|
87
88
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
validateSymbolSourceFile(entity);
|
|
90
|
+
validateProofExemptionPairing(entity);
|
|
91
|
+
if (entity.type === "test" && Array.isArray(entity.proof_receipts)) {
|
|
92
|
+
const receipts = entity.proof_receipts.filter((value) => typeof value === "object" && value !== null && !Array.isArray(value));
|
|
93
|
+
const receiptErrors = proofReceiptHistoryErrors(input.id, entity.verification_scope, receipts);
|
|
91
94
|
if (receiptErrors.length > 0) {
|
|
92
95
|
throw new Error(`Entity validation failed: ${receiptErrors.join("; ")}`);
|
|
93
96
|
}
|
|
@@ -113,3 +116,43 @@ export function validateUpsertInput(input, now) {
|
|
|
113
116
|
return { entity, relationships };
|
|
114
117
|
}
|
|
115
118
|
export { isAllowedGranularityReason };
|
|
119
|
+
/**
|
|
120
|
+
* A symbol whose sourceFile points into .kb/ can publish coordinates to the
|
|
121
|
+
* artifact, but the engine never merges coordinates for KB-internal paths —
|
|
122
|
+
* coverage then reports missing_symbol_coordinates forever with no signal.
|
|
123
|
+
* Reject the configuration at upsert time instead.
|
|
124
|
+
*/
|
|
125
|
+
function validateSymbolSourceFile(entity) {
|
|
126
|
+
if (entity.type !== "symbol")
|
|
127
|
+
return;
|
|
128
|
+
const sourceFile = entity.sourceFile;
|
|
129
|
+
if (typeof sourceFile !== "string" || sourceFile.trim() === "")
|
|
130
|
+
return;
|
|
131
|
+
const normalized = sourceFile.replaceAll("\\", "/").trim();
|
|
132
|
+
if (normalized === ".kb" || normalized.startsWith(".kb/")) {
|
|
133
|
+
throw new Error(`Entity validation failed: symbol sourceFile must point at a real code file in the workspace, not into the knowledge base ('${sourceFile}'). Coordinates for .kb/ paths are never merged into the engine, so coverage would report missing_symbol_coordinates permanently. Point the symbol at the implementing or verifying code file instead.`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* proof_exempt parks a current requirement outside E2E-proof scope. Without a
|
|
138
|
+
* reason the requirement would disappear from the proof ladder silently, so
|
|
139
|
+
* the exemption only exists with its justification attached (mirrored in
|
|
140
|
+
* requirement_proof.pl, which ignores an exemption without a reason).
|
|
141
|
+
*/
|
|
142
|
+
function validateProofExemptionPairing(entity) {
|
|
143
|
+
if (entity.type !== "req")
|
|
144
|
+
return;
|
|
145
|
+
const flag = entity.proof_exempt;
|
|
146
|
+
const isExempt = flag === true ||
|
|
147
|
+
flag === "true" ||
|
|
148
|
+
flag === "yes" ||
|
|
149
|
+
flag === "on" ||
|
|
150
|
+
flag === 1 ||
|
|
151
|
+
flag === "1";
|
|
152
|
+
if (!isExempt)
|
|
153
|
+
return;
|
|
154
|
+
const reason = entity.proof_exempt_reason;
|
|
155
|
+
if (typeof reason !== "string" || reason.trim() === "") {
|
|
156
|
+
throw new Error("Entity validation failed: proof_exempt requires a non-empty proof_exempt_reason explaining why the requirement is outside E2E-proof scope");
|
|
157
|
+
}
|
|
158
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PrologPort } from "../../public/operations/runtime-types.js";
|
|
2
2
|
import type { RelationshipInput } from "./types.js";
|
|
3
|
+
export declare function scenarioCoverageWarning(entityId: string): readonly string[];
|
|
3
4
|
export declare function scenarioCoverageWarnings(prolog: PrologPort, relationships: readonly RelationshipInput[], entityType: string, entityId: string): Promise<readonly string[]>;
|
|
4
5
|
//# sourceMappingURL=warnings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warnings.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/warnings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"warnings.d.ts","sourceRoot":"","sources":["../../../src/operations/mutation/warnings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAI3E;AAGD,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,UAAU,EAClB,aAAa,EAAE,SAAS,iBAAiB,EAAE,EAC3C,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAU5B"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { escapeAtom } from "../../prolog/codec.js";
|
|
2
|
+
export function scenarioCoverageWarning(entityId) {
|
|
3
|
+
return [
|
|
4
|
+
`Scenario-backed coverage: verified_by(${entityId},test) is valid but will not satisfy symbol-coverage because ${entityId} has specified_by a scenario. Use verified_by(scenario,test) or validates(test,scenario) instead.`,
|
|
5
|
+
];
|
|
6
|
+
}
|
|
2
7
|
// implements REQ-kibi-operation-interface-parity
|
|
3
8
|
export async function scenarioCoverageWarnings(prolog, relationships, entityType, entityId) {
|
|
4
9
|
if (entityType !== "req")
|
|
@@ -7,11 +12,8 @@ export async function scenarioCoverageWarnings(prolog, relationships, entityType
|
|
|
7
12
|
if (relationship.type !== "verified_by")
|
|
8
13
|
continue;
|
|
9
14
|
const result = await prolog.query(`once(kb_relationship(specified_by, '${escapeAtom(entityId)}', ScenarioId))`);
|
|
10
|
-
if (result.success)
|
|
11
|
-
return
|
|
12
|
-
`Scenario-backed coverage: verified_by(${entityId},test) is valid but will not satisfy symbol-coverage because ${entityId} has specified_by a scenario. Use verified_by(scenario,test) or validates(test,scenario) instead.`,
|
|
13
|
-
];
|
|
14
|
-
}
|
|
15
|
+
if (result.success)
|
|
16
|
+
return scenarioCoverageWarning(entityId);
|
|
15
17
|
}
|
|
16
18
|
return [];
|
|
17
19
|
}
|