kibi-cli 1.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-errors.d.ts +3 -1
- package/dist/cli-errors.d.ts.map +1 -1
- package/dist/cli-errors.js +4 -1
- package/dist/cli-json-command.d.ts +1 -0
- package/dist/cli-json-command.d.ts.map +1 -1
- package/dist/cli-json-command.js +13 -4
- package/dist/cli-operation-loader.js +3 -3
- package/dist/cli-operation-metadata.d.ts +4 -3
- package/dist/cli-operation-metadata.d.ts.map +1 -1
- package/dist/cli-operation-metadata.js +7 -5
- package/dist/cli-protocol.js +1 -1
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +7 -0
- package/dist/cli-register-proof.d.ts +3 -0
- package/dist/cli-register-proof.d.ts.map +1 -0
- package/dist/cli-register-proof.js +127 -0
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +7 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -10
- package/dist/commands/branch.d.ts +1 -0
- package/dist/commands/branch.d.ts.map +1 -1
- package/dist/commands/branch.js +8 -4
- package/dist/commands/check-generated.d.ts +7 -0
- package/dist/commands/check-generated.d.ts.map +1 -0
- package/dist/commands/check-generated.js +192 -0
- package/dist/commands/check.d.ts +14 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +193 -46
- package/dist/commands/coverage.d.ts +1 -0
- package/dist/commands/coverage.d.ts.map +1 -1
- package/dist/commands/coverage.js +6 -0
- package/dist/commands/doctor.d.ts +22 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +170 -23
- package/dist/commands/engine.d.ts +12 -0
- package/dist/commands/engine.d.ts.map +1 -1
- package/dist/commands/engine.js +42 -0
- package/dist/commands/github-init.d.ts +1 -0
- package/dist/commands/github-init.d.ts.map +1 -1
- package/dist/commands/github-init.js +9 -5
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +49 -10
- package/dist/commands/migrate.d.ts +4 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +7 -7
- package/dist/commands/proof-explain.d.ts +10 -0
- package/dist/commands/proof-explain.d.ts.map +1 -0
- package/dist/commands/proof-explain.js +45 -0
- package/dist/commands/proof-impact.d.ts +7 -0
- package/dist/commands/proof-impact.d.ts.map +1 -0
- package/dist/commands/proof-impact.js +39 -0
- package/dist/commands/proof-migrate-legacy.d.ts +7 -0
- package/dist/commands/proof-migrate-legacy.d.ts.map +1 -0
- package/dist/commands/proof-migrate-legacy.js +45 -0
- package/dist/commands/proof-prune.d.ts +8 -0
- package/dist/commands/proof-prune.d.ts.map +1 -0
- package/dist/commands/proof-prune.js +53 -0
- package/dist/commands/prove.d.ts +37 -0
- package/dist/commands/prove.d.ts.map +1 -0
- package/dist/commands/prove.js +470 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +18 -3
- package/dist/commands/sync/discovery.d.ts +3 -0
- package/dist/commands/sync/discovery.d.ts.map +1 -1
- package/dist/commands/sync/discovery.js +36 -28
- package/dist/commands/sync/manifest.d.ts +2 -1
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +55 -21
- package/dist/commands/sync/persistence.d.ts +4 -1
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +31 -14
- package/dist/commands/sync/staging.d.ts +1 -0
- package/dist/commands/sync/staging.d.ts.map +1 -1
- package/dist/commands/sync/staging.js +5 -2
- package/dist/commands/sync/untracked-targets.d.ts +24 -0
- package/dist/commands/sync/untracked-targets.d.ts.map +1 -0
- package/dist/commands/sync/untracked-targets.js +108 -0
- package/dist/commands/sync.d.ts +11 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +74 -30
- package/dist/engine-daemon.d.ts +3 -1
- package/dist/engine-daemon.d.ts.map +1 -1
- package/dist/engine-daemon.js +49 -20
- package/dist/engine.d.ts +17 -77
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +331 -91
- package/dist/env/bootstrap.d.ts +84 -0
- package/dist/env/bootstrap.d.ts.map +1 -0
- package/dist/env/bootstrap.js +310 -0
- package/dist/extractors/manifest.d.ts +5 -0
- package/dist/extractors/manifest.d.ts.map +1 -1
- package/dist/extractors/manifest.js +46 -1
- package/dist/extractors/markdown.d.ts +7 -3
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +60 -24
- package/dist/extractors/playwright-cases.js +1 -1
- package/dist/extractors/relationships.d.ts +6 -0
- package/dist/extractors/relationships.d.ts.map +1 -1
- package/dist/extractors/relationships.js +1 -1
- package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
- package/dist/extractors/symbols-coordinator.d.ts +8 -0
- package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/extractors/symbols-coordinator.js +40 -0
- package/dist/extractors/symbols-ts.d.ts +9 -19
- package/dist/extractors/symbols-ts.d.ts.map +1 -1
- package/dist/extractors/symbols-ts.js +34 -429
- package/dist/intent-search.d.ts +1 -0
- package/dist/intent-search.d.ts.map +1 -1
- package/dist/intent-search.js +11 -8
- package/dist/logic/ir.d.ts +1 -0
- package/dist/logic/ir.d.ts.map +1 -1
- package/dist/logic/ir.js +1 -1
- package/dist/operations/bootstrap/activation.d.ts +2 -1
- package/dist/operations/bootstrap/activation.d.ts.map +1 -1
- package/dist/operations/bootstrap/activation.js +11 -3
- package/dist/operations/bootstrap/generate.d.ts +2 -1
- package/dist/operations/bootstrap/generate.d.ts.map +1 -1
- package/dist/operations/bootstrap/generate.js +6 -3
- package/dist/operations/bootstrap/guidance.d.ts +1 -0
- package/dist/operations/bootstrap/guidance.d.ts.map +1 -1
- package/dist/operations/bootstrap/guidance.js +1 -1
- package/dist/operations/modeling/model-requirement.d.ts +5 -0
- package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
- package/dist/operations/modeling/model-requirement.js +57 -46
- package/dist/operations/modeling/predicate-applicability.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-applicability.js +103 -4
- package/dist/operations/modeling/predicate-catalog-2.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-2.js +18 -2
- package/dist/operations/modeling/predicate-catalog-3.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog-3.js +17 -1
- package/dist/operations/modeling/predicate-catalog-5.d.ts +10 -0
- package/dist/operations/modeling/predicate-catalog-5.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-catalog-5.js +291 -0
- package/dist/operations/modeling/predicate-catalog.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-catalog.js +4 -0
- package/dist/operations/modeling/predicate-loader.d.ts +1 -0
- package/dist/operations/modeling/predicate-loader.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-loader.js +4 -3
- package/dist/operations/modeling/predicate-ranker.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-ranker.js +4 -1
- package/dist/operations/modeling/predicate-types.d.ts +1 -1
- package/dist/operations/modeling/predicate-types.d.ts.map +1 -1
- package/dist/operations/modeling/predicate-usage-hints-4.d.ts +3 -0
- package/dist/operations/modeling/predicate-usage-hints-4.d.ts.map +1 -0
- package/dist/operations/modeling/predicate-usage-hints-4.js +84 -0
- package/dist/operations/modeling/suggest-predicates.d.ts +4 -2
- package/dist/operations/modeling/suggest-predicates.d.ts.map +1 -1
- package/dist/operations/modeling/suggest-predicates.js +82 -22
- package/dist/operations/mutation/contradictions.d.ts +2 -1
- package/dist/operations/mutation/contradictions.d.ts.map +1 -1
- package/dist/operations/mutation/contradictions.js +26 -5
- package/dist/operations/mutation/delete.d.ts +3 -0
- package/dist/operations/mutation/delete.d.ts.map +1 -1
- package/dist/operations/mutation/delete.js +100 -32
- package/dist/operations/mutation/relationships.d.ts +1 -0
- package/dist/operations/mutation/relationships.d.ts.map +1 -1
- package/dist/operations/mutation/relationships.js +6 -4
- package/dist/operations/mutation/saga.d.ts +51 -0
- package/dist/operations/mutation/saga.d.ts.map +1 -0
- package/dist/operations/mutation/saga.js +67 -0
- package/dist/operations/mutation/serialization.d.ts.map +1 -1
- package/dist/operations/mutation/serialization.js +3 -2
- package/dist/operations/mutation/source-authoring.d.ts +5 -1
- package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
- package/dist/operations/mutation/source-authoring.js +79 -46
- package/dist/operations/mutation/strict-fact.d.ts +1 -0
- package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
- package/dist/operations/mutation/strict-fact.js +8 -5
- package/dist/operations/mutation/symbol-compiler-lock.d.ts +5 -2
- package/dist/operations/mutation/symbol-compiler-lock.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-compiler-lock.js +65 -2
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-granularity.js +11 -89
- package/dist/operations/mutation/symbol-refresh.d.ts +1 -0
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-refresh.js +10 -8
- package/dist/operations/mutation/upsert.d.ts +18 -2
- package/dist/operations/mutation/upsert.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.js +86 -54
- package/dist/operations/mutation/validate-upsert.js +2 -2
- package/dist/operations/mutation/validation.d.ts.map +1 -1
- package/dist/operations/mutation/validation.js +46 -4
- package/dist/operations/mutation/warnings.d.ts +1 -0
- package/dist/operations/mutation/warnings.d.ts.map +1 -1
- package/dist/operations/mutation/warnings.js +7 -5
- package/dist/operations/mutation/workspace-mutation-lock.d.ts +60 -0
- package/dist/operations/mutation/workspace-mutation-lock.d.ts.map +1 -0
- package/dist/operations/mutation/workspace-mutation-lock.js +362 -0
- package/dist/operations/planning/apply-plan.d.ts +8 -106
- package/dist/operations/planning/apply-plan.d.ts.map +1 -1
- package/dist/operations/planning/apply-plan.js +113 -36
- package/dist/operations/planning/compile-intent.d.ts +51 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -1
- package/dist/operations/planning/compile-intent.js +133 -17
- package/dist/operations/proof/baseline-diff.d.ts +41 -0
- package/dist/operations/proof/baseline-diff.d.ts.map +1 -0
- package/dist/operations/proof/baseline-diff.js +153 -0
- package/dist/operations/proof/explain.d.ts +75 -0
- package/dist/operations/proof/explain.d.ts.map +1 -0
- package/dist/operations/proof/explain.js +294 -0
- package/dist/operations/proof/impact.d.ts +45 -0
- package/dist/operations/proof/impact.d.ts.map +1 -0
- package/dist/operations/proof/impact.js +118 -0
- package/dist/operations/proof/ingest-proof.d.ts +34 -0
- package/dist/operations/proof/ingest-proof.d.ts.map +1 -0
- package/dist/operations/proof/ingest-proof.js +348 -0
- package/dist/operations/proof/migrate-legacy-receipts.d.ts +30 -0
- package/dist/operations/proof/migrate-legacy-receipts.d.ts.map +1 -0
- package/dist/operations/proof/migrate-legacy-receipts.js +92 -0
- package/dist/operations/proof/prune-receipts.d.ts +35 -0
- package/dist/operations/proof/prune-receipts.d.ts.map +1 -0
- package/dist/operations/proof/prune-receipts.js +91 -0
- package/dist/operations/proof/receipt-document.d.ts +29 -0
- package/dist/operations/proof/receipt-document.d.ts.map +1 -0
- package/dist/operations/proof/receipt-document.js +117 -0
- package/dist/operations/semantic-advisor/analysis-receipt.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analysis-receipt.js +3 -9
- package/dist/operations/semantic-advisor/analyze-prose.d.ts +1 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +64 -93
- package/dist/operations/semantic-advisor/clauses.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/clauses.js +20 -7
- package/dist/operations/semantic-advisor/plugin-orchestration.d.ts +63 -0
- package/dist/operations/semantic-advisor/plugin-orchestration.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/plugin-orchestration.js +489 -0
- package/dist/operations/semantic-advisor/predicate-rules-core.d.ts +15 -2
- package/dist/operations/semantic-advisor/predicate-rules-core.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-core.js +7 -140
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts +11 -12
- package/dist/operations/semantic-advisor/predicate-rules-launcher.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-launcher.js +6 -94
- package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts +16 -0
- package/dist/operations/semantic-advisor/predicate-rules-policy.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-policy.js +7 -150
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts +9 -0
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-product-tail.js +7 -102
- package/dist/operations/semantic-advisor/predicate-rules-product.d.ts +13 -0
- package/dist/operations/semantic-advisor/predicate-rules-product.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/predicate-rules-product.js +7 -133
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts +2 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/strict-count-rules.js +40 -25
- package/dist/operations/semantic-advisor/types.d.ts +1 -0
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/plugins/compose-ontology-packs.d.ts +51 -0
- package/dist/plugins/compose-ontology-packs.d.ts.map +1 -0
- package/dist/plugins/compose-ontology-packs.js +257 -0
- package/dist/plugins/compose-semantic-classifier.d.ts +42 -0
- package/dist/plugins/compose-semantic-classifier.d.ts.map +1 -0
- package/dist/plugins/compose-semantic-classifier.js +211 -0
- package/dist/plugins/external-allowlist.d.ts +10 -0
- package/dist/plugins/external-allowlist.d.ts.map +1 -0
- package/dist/plugins/external-allowlist.js +16 -0
- package/dist/plugins/index.d.ts +9 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +33 -0
- package/dist/plugins/load-plugin.d.ts +19 -0
- package/dist/plugins/load-plugin.d.ts.map +1 -0
- package/dist/plugins/load-plugin.js +59 -0
- package/dist/plugins/project-config.d.ts +28 -0
- package/dist/plugins/project-config.d.ts.map +1 -0
- package/dist/plugins/project-config.js +90 -0
- package/dist/plugins/registry.d.ts +93 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +338 -0
- package/dist/plugins/resolve-package.d.ts +47 -0
- package/dist/plugins/resolve-package.d.ts.map +1 -0
- package/dist/plugins/resolve-package.js +262 -0
- package/dist/plugins/source-analysis-service.d.ts +44 -0
- package/dist/plugins/source-analysis-service.d.ts.map +1 -0
- package/dist/plugins/source-analysis-service.js +232 -0
- package/dist/prolog/codec.d.ts +13 -1
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +269 -154
- package/dist/prolog/error-terms.d.ts +47 -0
- package/dist/prolog/error-terms.d.ts.map +1 -0
- package/dist/prolog/error-terms.js +334 -0
- package/dist/prolog/janitor.d.ts +50 -0
- package/dist/prolog/janitor.d.ts.map +1 -0
- package/dist/prolog/janitor.js +154 -0
- package/dist/prolog/store-lock.d.ts +45 -0
- package/dist/prolog/store-lock.d.ts.map +1 -0
- package/dist/prolog/store-lock.js +195 -0
- package/dist/prolog.d.ts +7 -0
- package/dist/prolog.d.ts.map +1 -1
- package/dist/prolog.js +55 -17
- package/dist/proof/evaluate.d.ts +27 -0
- package/dist/proof/evaluate.d.ts.map +1 -0
- package/dist/proof/evaluate.js +151 -0
- package/dist/proof/inspect.d.ts +12 -0
- package/dist/proof/inspect.d.ts.map +1 -0
- package/dist/proof/inspect.js +236 -0
- package/dist/proof/integrations.d.ts +35 -0
- package/dist/proof/integrations.d.ts.map +1 -0
- package/dist/proof/integrations.js +123 -0
- package/dist/proof/producers/junit-adapter.d.ts +26 -0
- package/dist/proof/producers/junit-adapter.d.ts.map +1 -0
- package/dist/proof/producers/junit-adapter.js +186 -0
- package/dist/{public → proof/producers}/playwright-case-id.d.ts +1 -1
- package/dist/proof/producers/playwright-case-id.d.ts.map +1 -0
- package/dist/{public → proof/producers}/playwright-case-id.js +1 -1
- package/dist/proof/producers/playwright-reporter.d.ts +27 -0
- package/dist/proof/producers/playwright-reporter.d.ts.map +1 -0
- package/dist/proof/producers/playwright-reporter.js +138 -0
- package/dist/proof/producers/tap-adapter.d.ts +10 -0
- package/dist/proof/producers/tap-adapter.d.ts.map +1 -0
- package/dist/proof/producers/tap-adapter.js +200 -0
- package/dist/proof/receipt-outcome.d.ts +2 -0
- package/dist/proof/receipt-outcome.d.ts.map +1 -0
- package/dist/proof/receipt-outcome.js +1 -0
- package/dist/public/diagnostic-usage.js +6 -6
- package/dist/public/distribution-parity.d.ts +7 -1
- package/dist/public/distribution-parity.d.ts.map +1 -1
- package/dist/public/distribution-parity.js +15 -10
- package/dist/public/extractors/symbols-coordinator.d.ts +1 -1
- package/dist/public/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/public/extractors/symbols-coordinator.js +1 -1
- package/dist/public/impact/analyzer.d.ts +1 -1
- package/dist/public/impact/analyzer.d.ts.map +1 -1
- package/dist/public/impact/analyzer.js +6 -4
- package/dist/public/impact/coverage-depth-quality.d.ts +1 -0
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +1 -1
- package/dist/public/impact/diagnostics.d.ts.map +1 -1
- package/dist/public/impact/diagnostics.js +2 -2
- package/dist/public/impact/diff-meaning.d.ts +1 -0
- package/dist/public/impact/diff-meaning.d.ts.map +1 -1
- package/dist/public/impact/diff-meaning.js +5 -2
- package/dist/public/impact/full-kb-quality.d.ts +5 -2
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +329 -64
- package/dist/public/operations/catalog.d.ts +450 -196
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/catalog.js +6 -4
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +4 -8
- package/dist/public/operations/check-helpers.d.ts +1 -1
- package/dist/public/operations/check-helpers.d.ts.map +1 -1
- package/dist/public/operations/check-helpers.js +1 -1
- package/dist/public/operations/contracts.d.ts +7 -0
- package/dist/public/operations/contracts.d.ts.map +1 -1
- package/dist/public/operations/contracts.js +66 -34
- package/dist/public/operations/discovery-entities.d.ts +15 -0
- package/dist/public/operations/discovery-entities.d.ts.map +1 -1
- package/dist/public/operations/discovery-entities.js +38 -0
- package/dist/public/operations/discovery-executors.d.ts +9 -9
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +39 -31
- package/dist/public/operations/index.d.ts +1 -1
- package/dist/public/operations/index.d.ts.map +1 -1
- package/dist/public/operations/index.js +1 -1
- package/dist/public/operations/migration-plan.d.ts +4 -3
- package/dist/public/operations/migration-plan.d.ts.map +1 -1
- package/dist/public/operations/migration-plan.js +23 -21
- package/dist/public/operations/node-ports.js +6 -6
- package/dist/public/operations/prolog-json.d.ts +1 -1
- package/dist/public/operations/prolog-json.d.ts.map +1 -1
- package/dist/public/operations/prolog-json.js +7 -7
- package/dist/public/operations/repair-plan.d.ts +3 -3
- package/dist/public/operations/repair-plan.d.ts.map +1 -1
- package/dist/public/operations/repair-plan.js +49 -19
- package/dist/public/operations/result-envelope.d.ts +1 -0
- package/dist/public/operations/result-envelope.d.ts.map +1 -1
- package/dist/public/operations/result-envelope.js +12 -10
- package/dist/public/operations/runtime-types.d.ts +21 -1
- package/dist/public/operations/runtime-types.d.ts.map +1 -1
- package/dist/public/operations/specs/check-rules.generated.d.ts +5 -0
- package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -0
- package/dist/public/operations/specs/check-rules.generated.js +35 -0
- package/dist/public/operations/specs/check.d.ts +7 -2
- package/dist/public/operations/specs/check.d.ts.map +1 -1
- package/dist/public/operations/specs/check.js +8 -20
- package/dist/public/operations/specs/discovery.d.ts +3 -0
- package/dist/public/operations/specs/discovery.d.ts.map +1 -1
- package/dist/public/operations/specs/discovery.js +3 -0
- package/dist/public/operations/specs/mutation-schemas.d.ts +257 -163
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +15 -7
- package/dist/public/operations/specs/planning.d.ts +9 -0
- package/dist/public/operations/specs/planning.d.ts.map +1 -1
- package/dist/public/operations/specs/planning.js +6 -0
- package/dist/public/operations/specs/proof.d.ts +212 -0
- package/dist/public/operations/specs/proof.d.ts.map +1 -0
- package/dist/public/operations/specs/proof.js +30 -0
- package/dist/public/operations/specs/reporting.d.ts +20 -0
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +112 -12
- package/dist/public/operations/specs/semantic.d.ts +1 -1
- package/dist/public/operations/specs/semantic.d.ts.map +1 -1
- package/dist/public/operations/specs/semantic.js +54 -4
- package/dist/public/operations/specs/upsert.d.ts +257 -163
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/symbol-repair-plan.d.ts +11 -0
- package/dist/public/operations/symbol-repair-plan.d.ts.map +1 -1
- package/dist/public/operations/symbol-repair-plan.js +121 -4
- package/dist/public/operations/types.d.ts +6 -1
- package/dist/public/operations/types.d.ts.map +1 -1
- package/dist/public/proof-fingerprint.d.ts +54 -0
- package/dist/public/proof-fingerprint.d.ts.map +1 -0
- package/dist/public/proof-fingerprint.js +141 -0
- package/dist/public/proof-protocol.d.ts +354 -0
- package/dist/public/proof-protocol.d.ts.map +1 -0
- package/dist/public/proof-protocol.js +454 -0
- package/dist/public/proof-receipt.d.ts +279 -0
- package/dist/public/proof-receipt.d.ts.map +1 -0
- package/dist/public/proof-receipt.js +377 -0
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +21 -7
- package/dist/public/skills/kibi-freshness/SKILL.md +1 -1
- package/dist/public/skills/kibi-usage/SKILL.md +44 -12
- package/dist/public/skills/kibi-usage/resources/operation-access.md +1 -1
- package/dist/public/skills/kibi-usage/resources/proof.md +150 -0
- package/dist/public/skills/kibi-usage/resources/workflows.md +6 -6
- package/dist/public/symbol-granularity.d.ts +3 -14
- package/dist/public/symbol-granularity.d.ts.map +1 -1
- package/dist/public/symbol-granularity.generated.d.ts +16 -0
- package/dist/public/symbol-granularity.generated.d.ts.map +1 -0
- package/dist/public/symbol-granularity.generated.js +53 -0
- package/dist/public/symbol-granularity.js +6 -47
- package/dist/public/telemetry-acceptance.d.ts +3 -77
- package/dist/public/telemetry-acceptance.d.ts.map +1 -1
- package/dist/public/telemetry-acceptance.js +4 -2
- package/dist/public/telemetry-remediation.js +1 -1
- package/dist/report/html-report.css +1240 -0
- package/dist/report/html-report.d.ts +4 -2
- package/dist/report/html-report.d.ts.map +1 -1
- package/dist/report/html-report.js +37 -300
- package/dist/runtime/cli-runtime.d.ts +2 -0
- package/dist/runtime/cli-runtime.d.ts.map +1 -1
- package/dist/runtime/cli-runtime.js +32 -7
- package/dist/schemas/entity.schema.json +355 -215
- package/dist/search-ranking.d.ts +1 -0
- package/dist/search-ranking.d.ts.map +1 -1
- package/dist/search-ranking.js +3 -0
- package/dist/traceability/evidence-model.d.ts +28 -0
- package/dist/traceability/evidence-model.d.ts.map +1 -1
- package/dist/traceability/git-staged.d.ts +20 -0
- package/dist/traceability/git-staged.d.ts.map +1 -1
- package/dist/traceability/git-staged.js +145 -1
- package/dist/traceability/staged-diagnostics.d.ts +7 -0
- package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
- package/dist/traceability/staged-diagnostics.js +78 -7
- package/dist/traceability/staged-file-coverage.d.ts +33 -0
- package/dist/traceability/staged-file-coverage.d.ts.map +1 -0
- package/dist/traceability/staged-file-coverage.js +284 -0
- package/dist/traceability/staged-impact-contract.js +4 -4
- package/dist/traceability/staged-symbols-manifest.d.ts +13 -0
- package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
- package/dist/traceability/staged-symbols-manifest.js +138 -27
- package/dist/traceability/symbol-extract.d.ts +24 -2
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +64 -208
- package/dist/traceability/temp-kb.d.ts +2 -0
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +13 -4
- package/dist/types/entities.d.ts +5 -3
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/branch-resolver.d.ts +1 -0
- package/dist/utils/branch-resolver.d.ts.map +1 -1
- package/dist/utils/branch-resolver.js +7 -4
- package/dist/utils/branch-store.d.ts +6 -0
- package/dist/utils/branch-store.d.ts.map +1 -1
- package/dist/utils/branch-store.js +27 -0
- package/dist/utils/kb-paths.d.ts +1 -1
- package/dist/utils/kb-paths.d.ts.map +1 -1
- package/dist/utils/kb-paths.js +1 -1
- package/dist/utils/rule-registry.d.ts +1 -11
- package/dist/utils/rule-registry.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.d.ts +102 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -0
- package/dist/utils/rule-registry.generated.js +131 -0
- package/dist/utils/rule-registry.js +12 -113
- package/dist/utils/strict-modeling.d.ts +1 -0
- package/dist/utils/strict-modeling.d.ts.map +1 -1
- package/dist/utils/strict-modeling.js +1 -1
- package/package.json +20 -20
- package/src/public/diagnostic-usage.ts +6 -6
- package/src/public/distribution-parity.ts +17 -10
- package/src/public/extractors/symbols-coordinator.ts +1 -0
- package/src/public/impact/analyzer.ts +15 -12
- package/src/public/impact/coverage-depth-quality.ts +1 -1
- package/src/public/impact/diagnostics.ts +2 -1
- package/src/public/impact/diff-meaning.ts +11 -4
- package/src/public/impact/full-kb-quality.ts +463 -72
- package/src/public/operations/catalog.ts +10 -4
- package/src/public/operations/check-executor.ts +4 -8
- package/src/public/operations/check-helpers.ts +2 -2
- package/src/public/operations/contracts.ts +78 -34
- package/src/public/operations/discovery-entities.ts +53 -0
- package/src/public/operations/discovery-executors.ts +64 -48
- package/src/public/operations/index.ts +1 -1
- package/src/public/operations/migration-plan.ts +32 -25
- package/src/public/operations/node-ports.ts +6 -6
- package/src/public/operations/prolog-json.ts +13 -5
- package/src/public/operations/repair-plan.ts +60 -23
- package/src/public/operations/result-envelope.ts +15 -10
- package/src/public/operations/runtime-types.ts +26 -2
- package/src/public/operations/specs/check-rules.generated.ts +38 -0
- package/src/public/operations/specs/check.ts +12 -21
- package/src/public/operations/specs/discovery.ts +3 -0
- package/src/public/operations/specs/mutation-schemas.ts +22 -9
- package/src/public/operations/specs/planning.ts +7 -0
- package/src/public/operations/specs/proof.ts +43 -0
- package/src/public/operations/specs/reporting.ts +140 -13
- package/src/public/operations/specs/semantic.ts +79 -17
- package/src/public/operations/symbol-repair-plan.ts +166 -7
- package/src/public/operations/types.ts +6 -1
- package/src/public/proof-fingerprint.ts +216 -0
- package/src/public/proof-protocol-types.d.ts +96 -0
- package/src/public/proof-protocol.ts +589 -0
- package/src/public/proof-receipt.ts +499 -0
- package/src/public/schemas/entity.ts +26 -10
- package/src/public/skills/kibi-freshness/SKILL.md +1 -1
- package/src/public/skills/kibi-usage/SKILL.md +44 -12
- package/src/public/skills/kibi-usage/resources/operation-access.md +1 -1
- package/src/public/skills/kibi-usage/resources/proof.md +150 -0
- package/src/public/skills/kibi-usage/resources/workflows.md +6 -6
- package/src/public/symbol-granularity.generated.ts +74 -0
- package/src/public/symbol-granularity.ts +34 -59
- package/src/public/telemetry-acceptance-types.d.ts +98 -0
- package/src/public/telemetry-acceptance.ts +22 -100
- package/src/public/telemetry-remediation.ts +1 -1
- package/src/schemas/entity.schema.json +355 -215
- package/dist/cli-register-verification.d.ts +0 -3
- package/dist/cli-register-verification.d.ts.map +0 -1
- package/dist/cli-register-verification.js +0 -16
- package/dist/commands/verify.d.ts +0 -10
- package/dist/commands/verify.d.ts.map +0 -1
- package/dist/commands/verify.js +0 -126
- package/dist/operations/verification/ingest-verification.d.ts +0 -29
- package/dist/operations/verification/ingest-verification.d.ts.map +0 -1
- package/dist/operations/verification/ingest-verification.js +0 -192
- package/dist/public/operations/specs/verification.d.ts +0 -78
- package/dist/public/operations/specs/verification.d.ts.map +0 -1
- package/dist/public/operations/specs/verification.js +0 -62
- package/dist/public/playwright-case-id.d.ts.map +0 -1
- package/dist/public/verification-receipt.d.ts +0 -242
- package/dist/public/verification-receipt.d.ts.map +0 -1
- package/dist/public/verification-receipt.js +0 -296
- package/dist/verification/playwright-reporter.d.ts +0 -21
- package/dist/verification/playwright-reporter.d.ts.map +0 -1
- package/dist/verification/playwright-reporter.js +0 -114
- package/src/public/operations/specs/verification.ts +0 -78
- package/src/public/playwright-case-id.ts +0 -35
- package/src/public/verification-receipt.ts +0 -412
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,gBAAgB,EAEtB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,KAAK,cAAc,GAAG,QAAQ,CAAC;IAC7B,YAAY,EAAE,kBAAkB,CAAC;IACjC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B,CAAC,CAAC;AA+HH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChE;AAeD,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAyEjB"}
|
package/dist/commands/report.js
CHANGED
|
@@ -7,7 +7,6 @@ import { coverageSpec } from "../public/operations/specs/reporting.js";
|
|
|
7
7
|
import { KIBI_BRAND, renderKibiBadge } from "../report/brand.js";
|
|
8
8
|
import { renderHtmlReport, } from "../report/html-report.js";
|
|
9
9
|
import { resolveReportRepository, } from "../report/repository.js";
|
|
10
|
-
import { createCliRuntime } from "../runtime/cli-runtime.js";
|
|
11
10
|
import { listGitRemotes } from "./github-init.js";
|
|
12
11
|
function gitCommitSha(cwd) {
|
|
13
12
|
try {
|
|
@@ -79,6 +78,9 @@ async function executeCoverageInContext(context, tags, limit) {
|
|
|
79
78
|
};
|
|
80
79
|
}
|
|
81
80
|
async function loadCoverage(tags, limit) {
|
|
81
|
+
// Lazy-load the CLI runtime so coverage suites that inject loadCoverage do
|
|
82
|
+
// not pull the engine/plugin graph into every reportCommand import.
|
|
83
|
+
const { createCliRuntime } = await import("../runtime/cli-runtime.js");
|
|
82
84
|
const runtime = createCliRuntime();
|
|
83
85
|
const runtimeSpec = coverageSpec;
|
|
84
86
|
const context = await runtime.open(runtimeSpec);
|
|
@@ -118,8 +120,21 @@ export async function openReport(filePath) {
|
|
|
118
120
|
detached: true,
|
|
119
121
|
stdio: "ignore",
|
|
120
122
|
});
|
|
121
|
-
|
|
123
|
+
const timer = setTimeout(() => {
|
|
124
|
+
try {
|
|
125
|
+
child.unref();
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Best-effort unref if the child never spawned.
|
|
129
|
+
}
|
|
130
|
+
reject(new Error(`Timed out opening report via ${command}`));
|
|
131
|
+
}, 5_000);
|
|
132
|
+
child.once("error", (error) => {
|
|
133
|
+
clearTimeout(timer);
|
|
134
|
+
reject(error);
|
|
135
|
+
});
|
|
122
136
|
child.once("spawn", () => {
|
|
137
|
+
clearTimeout(timer);
|
|
123
138
|
child.unref();
|
|
124
139
|
resolve();
|
|
125
140
|
});
|
|
@@ -163,7 +178,7 @@ export async function reportCommand(options, deps = {}) {
|
|
|
163
178
|
const hasContradiction = coverage.requirements.rows.some((row) => Array.isArray(row.proofGaps) &&
|
|
164
179
|
row.proofGaps.includes("blocking_contradiction"));
|
|
165
180
|
const snapshotStale = coverage.requirements.meta?.dirty === true ||
|
|
166
|
-
coverage.requirements.meta?.
|
|
181
|
+
coverage.requirements.meta?.proofSnapshotDirty === true;
|
|
167
182
|
const badgeMessage = currentRequirements === 0 ? "no requirements" : `${proofPercent}% proven`;
|
|
168
183
|
const badgeColor = currentRequirements === 0
|
|
169
184
|
? KIBI_BRAND.rail
|
|
@@ -18,6 +18,9 @@ export type PendingSourceReceiptSnapshot = Readonly<{
|
|
|
18
18
|
afterHash: string;
|
|
19
19
|
rawHash: string;
|
|
20
20
|
}>;
|
|
21
|
+
export declare function isFsEnoent(error: unknown): boolean;
|
|
22
|
+
export declare function readTextOrEnoent(absolute: string): string | null;
|
|
23
|
+
export declare function unlinkOrEnoent(absolute: string): boolean;
|
|
21
24
|
export declare function clearRecoveredPendingSourceReceipts(cwd: string, receipts: readonly PendingSourceReceiptSnapshot[]): void;
|
|
22
25
|
export declare function normalizeMarkdownPath(pattern: string | undefined): string | null;
|
|
23
26
|
export declare function discoverSourceFiles(cwd: string, options?: DiscoveryOptions): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/discovery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/discovery.ts"],"names":[],"mappings":"AAkCA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,+EAA+E;IAC/E,6BAA6B,CAAC,EAAE,OAAO,CAAC;CACzC,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAyFH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOlD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAShE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAUxD;AAED,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,SAAS,4BAA4B,EAAE,GAChD,IAAI,CA6CN;AAsBD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,MAAM,GAAG,IAAI,CAIf;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC;IACT,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,4BAA4B,EAAE,4BAA4B,EAAE,CAAC;CAC9D,CAAC,CA+FD"}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { execFile } from "node:child_process";
|
|
19
19
|
import { createHash } from "node:crypto";
|
|
20
|
+
import * as fs from "node:fs";
|
|
20
21
|
import { existsSync, readFileSync, readdirSync, unlinkSync } from "node:fs";
|
|
21
22
|
import * as path from "node:path";
|
|
22
23
|
import { promisify } from "node:util";
|
|
@@ -89,6 +90,33 @@ function pendingSourcePaths(cwd, recoverMissing) {
|
|
|
89
90
|
}
|
|
90
91
|
return { paths, recoveredReceipts };
|
|
91
92
|
}
|
|
93
|
+
export function isFsEnoent(error) {
|
|
94
|
+
return (error !== null &&
|
|
95
|
+
typeof error === "object" &&
|
|
96
|
+
"code" in error &&
|
|
97
|
+
error.code === "ENOENT");
|
|
98
|
+
}
|
|
99
|
+
export function readTextOrEnoent(absolute) {
|
|
100
|
+
try {
|
|
101
|
+
return fs.readFileSync(absolute, "utf8");
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (isFsEnoent(error))
|
|
105
|
+
return null;
|
|
106
|
+
throw new Error(`Failed to inspect pending source receipt for ${absolute}: ${error instanceof Error ? error.message : String(error)}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export function unlinkOrEnoent(absolute) {
|
|
110
|
+
try {
|
|
111
|
+
fs.unlinkSync(absolute);
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
if (isFsEnoent(error))
|
|
116
|
+
return false;
|
|
117
|
+
throw new Error(`Failed to retire pending source receipt for ${absolute}: ${error instanceof Error ? error.message : String(error)}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
92
120
|
export function clearRecoveredPendingSourceReceipts(cwd, receipts) {
|
|
93
121
|
const root = path.resolve(cwd, ".kb", "recovery", "pending-sources");
|
|
94
122
|
for (const receipt of receipts) {
|
|
@@ -103,19 +131,9 @@ export function clearRecoveredPendingSourceReceipts(cwd, receipts) {
|
|
|
103
131
|
// because it has the same receipt filename. Failing closed here is
|
|
104
132
|
// important: publication may have completed, but recovery must not claim
|
|
105
133
|
// that pending intent was retired when a newer intent remains.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
if (error !== null &&
|
|
112
|
-
typeof error === "object" &&
|
|
113
|
-
"code" in error &&
|
|
114
|
-
error.code === "ENOENT") {
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
throw new Error(`Failed to inspect pending source receipt for ${receipt.path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
118
|
-
}
|
|
134
|
+
const raw = readTextOrEnoent(absolute);
|
|
135
|
+
if (raw === null)
|
|
136
|
+
continue;
|
|
119
137
|
const rawHash = createHash("sha256").update(raw).digest("hex");
|
|
120
138
|
if (rawHash !== receipt.rawHash) {
|
|
121
139
|
throw new Error(`Pending source receipt changed during recovery for ${receipt.path}; refusing to retire newer receipt`);
|
|
@@ -131,20 +149,7 @@ export function clearRecoveredPendingSourceReceipts(cwd, receipts) {
|
|
|
131
149
|
current.afterHash !== receipt.afterHash) {
|
|
132
150
|
throw new Error(`Pending source receipt changed during recovery for ${receipt.path}; refusing to retire newer receipt`);
|
|
133
151
|
}
|
|
134
|
-
|
|
135
|
-
unlinkSync(absolute);
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
if (error !== null &&
|
|
139
|
-
typeof error === "object" &&
|
|
140
|
-
"code" in error &&
|
|
141
|
-
error.code === "ENOENT") {
|
|
142
|
-
// Another recovery or source publication may have consumed it
|
|
143
|
-
// already; cleanup is idempotent for that case.
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
throw new Error(`Failed to retire pending source receipt for ${receipt.path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
147
|
-
}
|
|
152
|
+
unlinkOrEnoent(absolute);
|
|
148
153
|
}
|
|
149
154
|
}
|
|
150
155
|
function filterTracked(cwd, files, tracked, pending) {
|
|
@@ -183,11 +188,14 @@ export async function discoverSourceFiles(cwd, options = {}) {
|
|
|
183
188
|
absolute: true,
|
|
184
189
|
ignore: [...MARKDOWN_DISCOVERY_IGNORE],
|
|
185
190
|
});
|
|
186
|
-
let entityMarkdownFiles = markdownFiles.filter((file) => !file.endsWith("/README.md"));
|
|
191
|
+
let entityMarkdownFiles = (Array.isArray(markdownFiles) ? markdownFiles : []).filter((file) => !file.endsWith("/README.md"));
|
|
187
192
|
let manifestFiles = await fg(CANONICAL_ENTITY_PATHS.symbols, {
|
|
188
193
|
cwd,
|
|
189
194
|
absolute: true,
|
|
190
195
|
});
|
|
196
|
+
if (!Array.isArray(manifestFiles)) {
|
|
197
|
+
manifestFiles = [];
|
|
198
|
+
}
|
|
191
199
|
const recoveredPendingReceiptPaths = [];
|
|
192
200
|
if (options.trackedOnly) {
|
|
193
201
|
const tracked = await gitTrackedPaths(cwd);
|
|
@@ -16,7 +16,7 @@ interface ManifestDeps {
|
|
|
16
16
|
writeCoordinateArtifact: typeof writeCoordinateArtifact;
|
|
17
17
|
resolveSymbolsManifestPaths: typeof resolveSymbolsManifestPaths;
|
|
18
18
|
}
|
|
19
|
-
export declare const SYMBOLS_MANIFEST_COMMENT_BLOCK
|
|
19
|
+
export declare const SYMBOLS_MANIFEST_COMMENT_BLOCK: string;
|
|
20
20
|
/**
|
|
21
21
|
* Coarse symbol anchors for which AST per-declaration coordinates are not
|
|
22
22
|
* expected.
|
|
@@ -31,6 +31,7 @@ export { COARSE_GRANULARITY_REASONS };
|
|
|
31
31
|
export declare function isCoarseGranularityAnchor(entry: ManifestSymbolEntry): boolean;
|
|
32
32
|
export declare function refreshManifestCoordinates(manifestPath: string, workspaceRoot: string, deps?: Partial<ManifestDeps> & {
|
|
33
33
|
refreshSymbolCoordinates?: boolean;
|
|
34
|
+
quiet?: boolean;
|
|
34
35
|
}): Promise<void>;
|
|
35
36
|
export declare function hasAllGeneratedCoordinates(entry: ManifestSymbolEntry): boolean;
|
|
36
37
|
export declare function isEligibleForCoordinateRefresh(sourceFile: string | undefined, workspaceRoot: string, deps?: Partial<ManifestDeps>): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/manifest.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAML,uBAAuB,EACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,EACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,0BAA0B,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/manifest.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAML,uBAAuB,EACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,EACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,0BAA0B,EAG3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,UAAU,YAAY;IACpB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,2BAA2B,EAAE,OAAO,2BAA2B,CAAC;CACjE;AAkBD,eAAO,MAAM,8BAA8B,QAc1C,CAAC;AAaF;;;;;;;;;GASG;AACH,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAEtC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAG7E;AAoHD,wBAAsB,0BAA0B,CAE9C,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAuMf;AAED,wBAAgB,0BAA0B,CAExC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAOT;AAED,wBAAgB,8BAA8B,CAE5C,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3B,OAAO,CAUT"}
|
|
@@ -20,7 +20,7 @@ import * as path from "node:path";
|
|
|
20
20
|
import { dump as dumpYAML, load as parseYAML } from "js-yaml";
|
|
21
21
|
import { coarseCoordinateSpan, coordinateIdentityHash, coordinateSourceHash, parseCoordinateArtifact, writeCoordinateArtifact, } from "../../extractors/symbol-coordinates.js";
|
|
22
22
|
import { enrichSymbolCoordinates, } from "../../extractors/symbols-coordinator.js";
|
|
23
|
-
import { COARSE_GRANULARITY_REASONS, isCoarseGranularityReason, } from "../../public/symbol-granularity.js";
|
|
23
|
+
import { COARSE_GRANULARITY_REASONS, COARSE_GRANULARITY_REASONS_PARENTHESIZED, isCoarseGranularityReason, } from "../../public/symbol-granularity.js";
|
|
24
24
|
import { resolveSymbolsManifestPaths } from "../../utils/manifest-paths.js";
|
|
25
25
|
function resolveDeps(overrides) {
|
|
26
26
|
return {
|
|
@@ -42,17 +42,16 @@ export const SYMBOLS_MANIFEST_COMMENT_BLOCK = `# symbols.yaml
|
|
|
42
42
|
# id, title, sourceFile, links, status, tags, owner, priority
|
|
43
43
|
# Generated coordinates are stored separately in symbol-coordinates.yaml.
|
|
44
44
|
# Run \`kibi sync --refresh-symbol-coordinates\` to refresh them.
|
|
45
|
+
#
|
|
46
|
+
# Coordinate refresh granularity gate:
|
|
47
|
+
# The AST extractor locates per-declaration spans for code files. When it
|
|
48
|
+
# cannot find a declaration, a title-match or whole-file coarse span is
|
|
49
|
+
# published ONLY for symbols that declare a coarse granularity_reason
|
|
50
|
+
# (${COARSE_GRANULARITY_REASONS.join(", ")}).
|
|
51
|
+
# A symbol without granularity_reason whose extraction misses gets no
|
|
52
|
+
# coordinate entry at all and is reported as failed; add symbol_role and
|
|
53
|
+
# granularity_reason to opt it into the coarse fallback.
|
|
45
54
|
`;
|
|
46
|
-
const SYMBOL_COORD_EXTENSIONS = new Set([
|
|
47
|
-
".ts",
|
|
48
|
-
".tsx",
|
|
49
|
-
".js",
|
|
50
|
-
".jsx",
|
|
51
|
-
".mts",
|
|
52
|
-
".cts",
|
|
53
|
-
".mjs",
|
|
54
|
-
".cjs",
|
|
55
|
-
]);
|
|
56
55
|
const GENERATED_COORD_FIELDS = [
|
|
57
56
|
"sourceLine",
|
|
58
57
|
"sourceColumn",
|
|
@@ -152,6 +151,19 @@ function manifestEntryIdentity(entry) {
|
|
|
152
151
|
: { granularity_reason: granularityReason }),
|
|
153
152
|
};
|
|
154
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Typed reason an eligible (code-file) symbol still has no coordinates after
|
|
156
|
+
* enrichment: the AST extractor missed and the symbol either lacks a coarse
|
|
157
|
+
* granularity_reason (so the whole-file fallback is gated off) or the
|
|
158
|
+
* fallback itself produced no span.
|
|
159
|
+
*/
|
|
160
|
+
function coarseAnchorFailureReason(entry) {
|
|
161
|
+
const reason = entry.granularity_reason;
|
|
162
|
+
if (!isCoarseGranularityReason(reason)) {
|
|
163
|
+
return `extractor produced no coordinates; add symbol_role and granularity_reason ${COARSE_GRANULARITY_REASONS_PARENTHESIZED} to enable the whole-file coarse fallback`;
|
|
164
|
+
}
|
|
165
|
+
return "extractor produced no coordinates and the whole-file coarse fallback found no span for this symbol";
|
|
166
|
+
}
|
|
155
167
|
export async function refreshManifestCoordinates(
|
|
156
168
|
// implements REQ-003
|
|
157
169
|
manifestPath, workspaceRoot, deps) {
|
|
@@ -212,8 +224,8 @@ manifestPath, workspaceRoot, deps) {
|
|
|
212
224
|
const strippedEnriched = enriched.map((current) => Object.fromEntries(Object.entries(current).filter(([field]) => !GENERATED_MANIFEST_FIELDS.has(field))));
|
|
213
225
|
parsed.symbols = strippedEnriched;
|
|
214
226
|
let refreshed = 0;
|
|
215
|
-
let failed = 0;
|
|
216
227
|
let unchanged = 0;
|
|
228
|
+
const failures = [];
|
|
217
229
|
for (let i = 0; i < before.length; i++) {
|
|
218
230
|
const previous = before[i] ?? {};
|
|
219
231
|
const current = enriched[i] ?? previous;
|
|
@@ -231,11 +243,13 @@ manifestPath, workspaceRoot, deps) {
|
|
|
231
243
|
? previous.sourceFile
|
|
232
244
|
: undefined, workspaceRoot, resolved);
|
|
233
245
|
if (eligible && !hasAllGeneratedCoordinates(current)) {
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
246
|
+
failures.push({
|
|
247
|
+
id: typeof current.id === "string" ? current.id : `#${i}`,
|
|
248
|
+
reason: coarseAnchorFailureReason(current),
|
|
249
|
+
});
|
|
250
|
+
continue;
|
|
238
251
|
}
|
|
252
|
+
unchanged++;
|
|
239
253
|
}
|
|
240
254
|
const dumped = resolved.dumpYAML(parsed, {
|
|
241
255
|
lineWidth: -1,
|
|
@@ -268,7 +282,28 @@ manifestPath, workspaceRoot, deps) {
|
|
|
268
282
|
}
|
|
269
283
|
throw error;
|
|
270
284
|
}
|
|
271
|
-
|
|
285
|
+
// The generated coordinates live in the artifact beside the manifest, not
|
|
286
|
+
// in the authored symbols.yaml this command also rewrites; naming the
|
|
287
|
+
// artifact keeps diff audits pointed at the file that actually changed.
|
|
288
|
+
if (!deps?.quiet) {
|
|
289
|
+
const counts = `(refreshed=${refreshed}, unchanged=${unchanged}, failed=${failures.length})`;
|
|
290
|
+
if (coordinatesPath !== null) {
|
|
291
|
+
console.log(`\u2713 Refreshed symbol coordinates in ${path.relative(workspaceRoot, coordinatesPath)} ${counts}`);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
console.log(`\u2713 Normalized symbol manifest ${path.relative(workspaceRoot, manifestPath)} ${counts}`);
|
|
295
|
+
}
|
|
296
|
+
const maxReportedFailures = 10;
|
|
297
|
+
for (const failure of failures.slice(0, maxReportedFailures)) {
|
|
298
|
+
console.log(` failed ${failure.id}: ${failure.reason}`);
|
|
299
|
+
}
|
|
300
|
+
if (failures.length > maxReportedFailures) {
|
|
301
|
+
console.log(` ... and ${failures.length - maxReportedFailures} more failed symbol(s)`);
|
|
302
|
+
}
|
|
303
|
+
if (failures.length > 0) {
|
|
304
|
+
console.log(" Symbols without a published coordinate entry are dropped from coverage on the next plain sync until they succeed.");
|
|
305
|
+
}
|
|
306
|
+
}
|
|
272
307
|
}
|
|
273
308
|
export function hasAllGeneratedCoordinates(
|
|
274
309
|
// implements REQ-003
|
|
@@ -287,10 +322,9 @@ sourceFile, workspaceRoot, deps) {
|
|
|
287
322
|
const absolute = path.isAbsolute(sourceFile)
|
|
288
323
|
? sourceFile
|
|
289
324
|
: path.resolve(workspaceRoot, sourceFile);
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
return SYMBOL_COORD_EXTENSIONS.has(ext);
|
|
325
|
+
// Non-JS/TS files also undergo coordinate extraction through the text
|
|
326
|
+
// heuristic. A miss there must be reported just like an AST extraction miss.
|
|
327
|
+
return resolved.existsSync(absolute);
|
|
294
328
|
}
|
|
295
329
|
function isRecord(value) {
|
|
296
330
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -18,7 +18,10 @@ export declare function persistEntities(prolog: PrologProcess, results: Extracti
|
|
|
18
18
|
entityCount: number;
|
|
19
19
|
kbModified: boolean;
|
|
20
20
|
}>;
|
|
21
|
-
export declare function
|
|
21
|
+
export declare function relationshipFailureMessage(singleError: string | undefined, batchError: string | undefined): string;
|
|
22
|
+
export declare function persistRelationships(prolog: PrologProcess, results: ExtractionResult[], shardRelationships: ExtractedRelationship[], options?: {
|
|
23
|
+
workspaceRoot?: string;
|
|
24
|
+
}): Promise<{
|
|
22
25
|
relationshipCount: number;
|
|
23
26
|
kbModified: boolean;
|
|
24
27
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/persistence.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/persistence.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAiHrD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AA8CD,iFAAiF;AACjF,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,OAAO,CAAC,MAAM,CAAC,CAkCjB;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,8EAA8E;AAC9E,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,SAAS,qBAAqB,EAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAmCD,wBAAsB,eAAe,CAEnC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,OAAO,GAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAO,GAChD,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAyPvD;AA4BD,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,MAAM,CAER;AAGD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,kBAAkB,EAAE,qBAAqB,EAAE,EAC3C,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GACvC,OAAO,CAAC;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAmO7D"}
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
import * as path from "node:path";
|
|
19
19
|
import { toPrologAtom, toPrologString } from "../../prolog/codec.js";
|
|
20
20
|
import { loadEntities } from "../../public/operations/discovery-entities.js";
|
|
21
|
-
import {
|
|
21
|
+
import { appendOnlyProofReceiptHistoryErrors } from "../../public/proof-receipt.js";
|
|
22
|
+
import { findUntrackedDocumentMatches } from "./untracked-targets.js";
|
|
22
23
|
// Field categorization for typed fact serialization
|
|
23
24
|
// NOTE: base entity fields (status, owner, priority, severity) are NOT listed here —
|
|
24
25
|
// they are emitted in the base props block above. Only fact-specific atom fields go here.
|
|
@@ -285,15 +286,15 @@ prolog, results, entityIds, options = {}) {
|
|
|
285
286
|
id: entity.id,
|
|
286
287
|
type: "test",
|
|
287
288
|
});
|
|
288
|
-
const previous = Array.isArray(existing[0]?.
|
|
289
|
-
? existing[0].
|
|
289
|
+
const previous = Array.isArray(existing[0]?.proof_receipts)
|
|
290
|
+
? existing[0].proof_receipts.filter((receipt) => receipt !== null &&
|
|
290
291
|
typeof receipt === "object" &&
|
|
291
292
|
!Array.isArray(receipt))
|
|
292
293
|
: [];
|
|
293
|
-
const next = Array.isArray(entity.
|
|
294
|
-
? entity.
|
|
294
|
+
const next = Array.isArray(entity.proof_receipts)
|
|
295
|
+
? entity.proof_receipts
|
|
295
296
|
: undefined;
|
|
296
|
-
const receiptErrors =
|
|
297
|
+
const receiptErrors = appendOnlyProofReceiptHistoryErrors(previous, next);
|
|
297
298
|
if (receiptErrors.length > 0) {
|
|
298
299
|
throw new Error(receiptErrors.join("; "));
|
|
299
300
|
}
|
|
@@ -339,6 +340,12 @@ prolog, results, entityIds, options = {}) {
|
|
|
339
340
|
if (entity.type === "req" && entity.semantic_inventory) {
|
|
340
341
|
props.push(`semantic_inventory=${toPrologString(JSON.stringify(entity.semantic_inventory))}`);
|
|
341
342
|
}
|
|
343
|
+
if (entity.type === "req" && entity.proof_exempt !== undefined) {
|
|
344
|
+
props.push(`proof_exempt=${entity.proof_exempt}`);
|
|
345
|
+
}
|
|
346
|
+
if (entity.type === "req" && entity.proof_exempt_reason !== undefined) {
|
|
347
|
+
props.push(`proof_exempt_reason=${toPrologString(entity.proof_exempt_reason)}`);
|
|
348
|
+
}
|
|
342
349
|
if (sourceFile)
|
|
343
350
|
props.push(`sourceFile=${toPrologString(sourceFile)}`);
|
|
344
351
|
if (entity.type === "symbol") {
|
|
@@ -369,11 +376,14 @@ prolog, results, entityIds, options = {}) {
|
|
|
369
376
|
if (entity.verification_perspective !== undefined) {
|
|
370
377
|
props.push(`verification_perspective=${toPrologAtom(entity.verification_perspective)}`);
|
|
371
378
|
}
|
|
372
|
-
if (entity.
|
|
373
|
-
props.push(`
|
|
379
|
+
if (entity.proof_contract !== undefined) {
|
|
380
|
+
props.push(`proof_contract=${toPrologString(JSON.stringify(entity.proof_contract))}`);
|
|
381
|
+
}
|
|
382
|
+
if (entity.proof_bindings !== undefined) {
|
|
383
|
+
props.push(`proof_bindings=${toPrologString(JSON.stringify(entity.proof_bindings))}`);
|
|
374
384
|
}
|
|
375
|
-
if (entity.
|
|
376
|
-
props.push(`
|
|
385
|
+
if (entity.proof_receipts !== undefined) {
|
|
386
|
+
props.push(`proof_receipts=${toPrologString(JSON.stringify(entity.proof_receipts))}`);
|
|
377
387
|
}
|
|
378
388
|
}
|
|
379
389
|
const propsList = `[${props.join(", ")}]`;
|
|
@@ -450,8 +460,11 @@ function semanticEntityContext(entity, sourceFile) {
|
|
|
450
460
|
}
|
|
451
461
|
return ` (${details.join("; ")})`;
|
|
452
462
|
}
|
|
463
|
+
export function relationshipFailureMessage(singleError, batchError) {
|
|
464
|
+
return singleError || batchError || "Unknown error";
|
|
465
|
+
}
|
|
453
466
|
// implements REQ-core-persistence
|
|
454
|
-
export async function persistRelationships(prolog, results, shardRelationships) {
|
|
467
|
+
export async function persistRelationships(prolog, results, shardRelationships, options = {}) {
|
|
455
468
|
let relCount = 0;
|
|
456
469
|
let kbModified = false;
|
|
457
470
|
// Build ID lookup for relationship resolution
|
|
@@ -525,9 +538,7 @@ export async function persistRelationships(prolog, results, shardRelationships)
|
|
|
525
538
|
rel: item.rel,
|
|
526
539
|
fromId: item.fromId,
|
|
527
540
|
toId: item.toId,
|
|
528
|
-
error: single.error
|
|
529
|
-
(relationshipBatchRunner ? batch.error : undefined) ||
|
|
530
|
-
"Unknown error",
|
|
541
|
+
error: relationshipFailureMessage(single.error, relationshipBatchRunner ? batch.error : undefined),
|
|
531
542
|
});
|
|
532
543
|
}
|
|
533
544
|
}
|
|
@@ -609,6 +620,12 @@ export async function persistRelationships(prolog, results, shardRelationships)
|
|
|
609
620
|
const idList = [...missingIds].sort().join(", ");
|
|
610
621
|
console.warn(`\nTip: ${missingEntities.length} relationship(s) reference ${missingIds.size} missing entity/ies: ${idList}.`);
|
|
611
622
|
console.warn(" Create the missing docs (e.g., docs/requirements/REQ-*.md) or remove stale relationships.");
|
|
623
|
+
const untrackedMatches = options.workspaceRoot !== undefined
|
|
624
|
+
? findUntrackedDocumentMatches(options.workspaceRoot, [...missingIds])
|
|
625
|
+
: new Map();
|
|
626
|
+
for (const [id, docPath] of untrackedMatches) {
|
|
627
|
+
console.warn(` Note: document for ${id} exists at ${docPath} but is untracked, so sync ignores it. Stage it with \`git add ${docPath}\` (staging is enough; no commit required) and sync again.`);
|
|
628
|
+
}
|
|
612
629
|
}
|
|
613
630
|
else if (invalidRels.length > 0) {
|
|
614
631
|
console.warn("\nTip: Check that relationship types and directions match the allowed schema (e.g., implements symbol→req, verified_by req→test).");
|
|
@@ -16,6 +16,7 @@ interface StagingDeps {
|
|
|
16
16
|
writeFileSync: typeof writeFileSync;
|
|
17
17
|
}
|
|
18
18
|
export declare function createUniqueStagingPath(currentBranch: string, rootDir: string, pid?: number, now?: number): string;
|
|
19
|
+
export declare function abandonedStagingBranch(branch: string | undefined): string | undefined;
|
|
19
20
|
export declare function cleanupAbandonedStagingDirectories(stagingPath: string, deps?: Partial<StagingDeps>): Promise<void>;
|
|
20
21
|
export declare function prepareStagingEnvironment(stagingPath: string, livePath: string, rebuild: boolean, deps?: Partial<StagingDeps>): Promise<void>;
|
|
21
22
|
export declare function atomicPublish(stagingPath: string, livePath: string, deps?: Partial<StagingDeps>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/staging.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,UAAU,EACV,SAAS,EACT,UAAU,EACV,MAAM,EACN,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,UAAU,WAAW;IACnB,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,EAAE,EAAE,OAAO,EAAE,CAAC;IACd,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,aAAa,CAAC;CACrC;AA+BD,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,GAAG,SAAc,EACjB,GAAG,SAAa,GACf,MAAM,CAOR;AAGD,wBAAsB,kCAAkC,CACtD,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED,wBAAsB,yBAAyB,CAE7C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CA6Cf;AA0CD,wBAAgB,aAAa,CAE3B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,IAAI,CAeN;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,IAAI,CA6DN;AAED,wBAAgB,cAAc,CAE5B,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,IAAI,CAKN"}
|
|
1
|
+
{"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/staging.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,UAAU,EACV,SAAS,EACT,UAAU,EACV,MAAM,EACN,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,MAAM,WAAW,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,UAAU,WAAW;IACnB,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,EAAE,EAAE,OAAO,EAAE,CAAC;IACd,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,aAAa,CAAC;CACrC;AA+BD,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,GAAG,SAAc,EACjB,GAAG,SAAa,GACf,MAAM,CAOR;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,MAAM,GAAG,SAAS,CAEpB;AAGD,wBAAsB,kCAAkC,CACtD,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED,wBAAsB,yBAAyB,CAE7C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CA6Cf;AA0CD,wBAAgB,aAAa,CAE3B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,IAAI,CAeN;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,IAAI,CA6DN;AAED,wBAAgB,cAAc,CAE5B,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAC1B,IAAI,CAKN"}
|
|
@@ -50,16 +50,19 @@ function resolveDeps(overrides) {
|
|
|
50
50
|
export function createUniqueStagingPath(currentBranch, rootDir, pid = process.pid, now = Date.now()) {
|
|
51
51
|
return path.join(rootDir, ".kb", "branches", `${currentBranch}.staging.${pid}.${now}`);
|
|
52
52
|
}
|
|
53
|
+
export function abandonedStagingBranch(branch) {
|
|
54
|
+
return branch ? branch : undefined;
|
|
55
|
+
}
|
|
53
56
|
// implements REQ-003
|
|
54
57
|
export async function cleanupAbandonedStagingDirectories(stagingPath, deps) {
|
|
55
58
|
const resolved = resolveDeps(deps);
|
|
56
59
|
const stagingDir = path.dirname(stagingPath);
|
|
57
60
|
const stagingBase = path.basename(stagingPath);
|
|
58
|
-
const match = /^(?<branch
|
|
61
|
+
const match = /^(?<branch>.*)\.staging\.(?<pid>\d+)\.(?<timestamp>\d+)$/.exec(stagingBase);
|
|
59
62
|
if (!match?.groups) {
|
|
60
63
|
return;
|
|
61
64
|
}
|
|
62
|
-
const branch = match.groups.branch;
|
|
65
|
+
const branch = abandonedStagingBranch(match.groups.branch);
|
|
63
66
|
if (!branch) {
|
|
64
67
|
return;
|
|
65
68
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface UntrackedTargetsDeps {
|
|
2
|
+
execFileSync: (file: string, args: readonly string[], options: {
|
|
3
|
+
encoding: "utf8";
|
|
4
|
+
maxBuffer: number;
|
|
5
|
+
stdio: "pipe";
|
|
6
|
+
}) => string;
|
|
7
|
+
existsSync: (path: string) => boolean;
|
|
8
|
+
readFileSync: (path: string, encoding: "utf8") => string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Match missing relationship-target ids against untracked `.kb` documents.
|
|
12
|
+
*
|
|
13
|
+
* Sync discovery intentionally enumerates only git-tracked (or
|
|
14
|
+
* pending-receipt) documents, so a freshly authored but unstaged `.kb` doc is
|
|
15
|
+
* invisible to sync while relationships that reference it fail with a
|
|
16
|
+
* misleading "Target entity does not exist". This helper powers the sync
|
|
17
|
+
* warning that tells the author to stage the document instead.
|
|
18
|
+
*
|
|
19
|
+
* Best effort by design: any git or filesystem failure yields no matches so
|
|
20
|
+
* the diagnostic can never break a sync run.
|
|
21
|
+
*/
|
|
22
|
+
export declare function findUntrackedDocumentMatches(workspaceRoot: string, missingIds: readonly string[], deps?: Partial<UntrackedTargetsDeps>): Map<string, string>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=untracked-targets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"untracked-targets.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/untracked-targets.ts"],"names":[],"mappings":"AAsBA,UAAU,oBAAoB;IAC5B,YAAY,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAC5D,MAAM,CAAC;IACZ,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CAC1D;AAQD;;;;;;;;;;;GAWG;AAEH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,IAAI,GAAE,OAAO,CAAC,oBAAoB,CAAM,GACvC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAiDrB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
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 { execFileSync } from "node:child_process";
|
|
19
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
20
|
+
import * as path from "node:path";
|
|
21
|
+
const defaultDeps = {
|
|
22
|
+
execFileSync: (file, args, options) => execFileSync(file, args, options),
|
|
23
|
+
existsSync,
|
|
24
|
+
readFileSync,
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Match missing relationship-target ids against untracked `.kb` documents.
|
|
28
|
+
*
|
|
29
|
+
* Sync discovery intentionally enumerates only git-tracked (or
|
|
30
|
+
* pending-receipt) documents, so a freshly authored but unstaged `.kb` doc is
|
|
31
|
+
* invisible to sync while relationships that reference it fail with a
|
|
32
|
+
* misleading "Target entity does not exist". This helper powers the sync
|
|
33
|
+
* warning that tells the author to stage the document instead.
|
|
34
|
+
*
|
|
35
|
+
* Best effort by design: any git or filesystem failure yields no matches so
|
|
36
|
+
* the diagnostic can never break a sync run.
|
|
37
|
+
*/
|
|
38
|
+
// implements REQ-core-persistence
|
|
39
|
+
export function findUntrackedDocumentMatches(workspaceRoot, missingIds, deps = {}) {
|
|
40
|
+
const resolved = { ...defaultDeps, ...deps };
|
|
41
|
+
const matches = new Map();
|
|
42
|
+
if (missingIds.length === 0)
|
|
43
|
+
return matches;
|
|
44
|
+
let untracked;
|
|
45
|
+
try {
|
|
46
|
+
const output = resolved.execFileSync("git", [
|
|
47
|
+
"-C",
|
|
48
|
+
workspaceRoot,
|
|
49
|
+
"ls-files",
|
|
50
|
+
"--others",
|
|
51
|
+
"--exclude-standard",
|
|
52
|
+
"-z",
|
|
53
|
+
"--",
|
|
54
|
+
".kb",
|
|
55
|
+
], { encoding: "utf8", maxBuffer: 16 * 1024 * 1024, stdio: "pipe" });
|
|
56
|
+
untracked = output.split("\0").filter(Boolean);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return matches;
|
|
60
|
+
}
|
|
61
|
+
const remaining = new Set(missingIds);
|
|
62
|
+
for (const relative of untracked) {
|
|
63
|
+
if (remaining.size === 0)
|
|
64
|
+
break;
|
|
65
|
+
if (!relative.endsWith(".md"))
|
|
66
|
+
continue;
|
|
67
|
+
const absolute = path.resolve(workspaceRoot, relative.replaceAll("\\", "/"));
|
|
68
|
+
if (!resolved.existsSync(absolute))
|
|
69
|
+
continue;
|
|
70
|
+
let content;
|
|
71
|
+
try {
|
|
72
|
+
content = resolved.readFileSync(absolute, "utf8");
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const id = frontmatterId(content);
|
|
78
|
+
if (id !== null && remaining.has(id)) {
|
|
79
|
+
const workspaceRelative = path
|
|
80
|
+
.relative(workspaceRoot, absolute)
|
|
81
|
+
.replaceAll("\\", "/");
|
|
82
|
+
matches.set(id, workspaceRelative);
|
|
83
|
+
remaining.delete(id);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return matches;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Extract `id:` from a markdown document's YAML frontmatter (the first
|
|
90
|
+
* `---` block). Documents whose id never appears in the frontmatter region
|
|
91
|
+
* are not entity candidates.
|
|
92
|
+
*/
|
|
93
|
+
function frontmatterId(content) {
|
|
94
|
+
const lines = content.match(/[^\n]*\n|[^\n]+$/g) ?? [];
|
|
95
|
+
if (lines[0]?.trim() !== "---")
|
|
96
|
+
return null;
|
|
97
|
+
for (let index = 1; index < lines.length && index < 64; index++) {
|
|
98
|
+
const line = lines[index] ?? "";
|
|
99
|
+
if (line.trim() === "---")
|
|
100
|
+
return null;
|
|
101
|
+
const match = line.match(/^id:\s*(?:"([^"]+)"|'([^']+)'|(\S+))/);
|
|
102
|
+
if (match) {
|
|
103
|
+
const id = (match[1] ?? match[2] ?? match[3])?.trim();
|
|
104
|
+
return id && id.length > 0 ? id : null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|