kibi-cli 2.31.1 → 2.35.1
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-register-proof.d.ts.map +1 -1
- package/dist/cli-register-proof.js +19 -7
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +5 -1
- package/dist/commands/check-generated.d.ts +5 -1
- package/dist/commands/check-generated.d.ts.map +1 -1
- package/dist/commands/check-generated.js +24 -35
- package/dist/commands/check.d.ts +1 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +14 -5
- package/dist/commands/discovery-table.d.ts.map +1 -1
- package/dist/commands/discovery-table.js +51 -4
- package/dist/commands/doctor.js +19 -4
- package/dist/commands/init-helpers.d.ts.map +1 -1
- package/dist/commands/init-helpers.js +8 -5
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +109 -5
- package/dist/commands/prove.d.ts +48 -1
- package/dist/commands/prove.d.ts.map +1 -1
- package/dist/commands/prove.js +293 -8
- package/dist/commands/report.d.ts +1 -0
- package/dist/commands/report.d.ts.map +1 -1
- package/dist/commands/report.js +70 -5
- package/dist/commands/signoff.d.ts.map +1 -1
- package/dist/commands/signoff.js +20 -1
- package/dist/commands/sync/manifest.d.ts +10 -1
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +106 -17
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +16 -5
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +19 -0
- package/dist/diagnostics.js +1 -1
- package/dist/engine.js +1 -1
- package/dist/extractors/markdown.d.ts +4 -2
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +17 -0
- package/dist/extractors/symbol-coordinates.js +2 -2
- package/dist/extractors/symbols-coordinator.d.ts +2 -4
- package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/extractors/symbols-coordinator.js +1 -2
- package/dist/operations/bootstrap/candidate-helpers.d.ts +3 -0
- package/dist/operations/bootstrap/candidate-helpers.d.ts.map +1 -1
- package/dist/operations/bootstrap/candidate-helpers.js +4 -0
- package/dist/operations/migration/evidence-floor.d.ts +41 -0
- package/dist/operations/migration/evidence-floor.d.ts.map +1 -0
- package/dist/operations/migration/evidence-floor.js +230 -0
- package/dist/operations/migration/proof-contract-claims.d.ts +72 -0
- package/dist/operations/migration/proof-contract-claims.d.ts.map +1 -0
- package/dist/operations/migration/proof-contract-claims.js +215 -0
- package/dist/operations/migration/schema6.d.ts +6 -0
- package/dist/operations/migration/schema6.d.ts.map +1 -1
- package/dist/operations/migration/schema6.js +92 -0
- package/dist/operations/migration/symbol-coordinates-refresh.d.ts +3 -2
- package/dist/operations/migration/symbol-coordinates-refresh.d.ts.map +1 -1
- package/dist/operations/migration/symbol-coordinates-refresh.js +4 -3
- package/dist/operations/migration/untrack-symbol-coordinates.d.ts +23 -0
- package/dist/operations/migration/untrack-symbol-coordinates.d.ts.map +1 -0
- package/dist/operations/migration/untrack-symbol-coordinates.js +67 -0
- package/dist/operations/modeling/requirement-modeler.d.ts.map +1 -1
- package/dist/operations/modeling/requirement-modeler.js +48 -1
- package/dist/operations/modeling/requirement-types.d.ts +2 -1
- package/dist/operations/modeling/requirement-types.d.ts.map +1 -1
- package/dist/operations/modeling/requirement-utils.d.ts +1 -1
- package/dist/operations/modeling/requirement-utils.d.ts.map +1 -1
- package/dist/operations/modeling/requirement-utils.js +8 -1
- package/dist/operations/mutation/omitted-properties.d.ts +11 -0
- package/dist/operations/mutation/omitted-properties.d.ts.map +1 -0
- package/dist/operations/mutation/omitted-properties.js +76 -0
- package/dist/operations/mutation/serialization.d.ts.map +1 -1
- package/dist/operations/mutation/serialization.js +1 -0
- package/dist/operations/mutation/source-authoring.d.ts.map +1 -1
- package/dist/operations/mutation/source-authoring.js +39 -20
- package/dist/operations/mutation/strict-fact.d.ts.map +1 -1
- package/dist/operations/mutation/strict-fact.js +6 -2
- package/dist/operations/mutation/symbol-granularity.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-granularity.js +5 -3
- package/dist/operations/mutation/upsert.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.js +7 -1
- package/dist/operations/mutation/validation.d.ts +2 -0
- package/dist/operations/mutation/validation.d.ts.map +1 -1
- package/dist/operations/mutation/validation.js +4 -0
- package/dist/operations/proof/claim-bindings.d.ts +41 -0
- package/dist/operations/proof/claim-bindings.d.ts.map +1 -0
- package/dist/operations/proof/claim-bindings.js +364 -0
- package/dist/operations/proof/code-certificates.d.ts +155 -0
- package/dist/operations/proof/code-certificates.d.ts.map +1 -0
- package/dist/operations/proof/code-certificates.js +894 -0
- package/dist/operations/proof/code-models.d.ts +96 -0
- package/dist/operations/proof/code-models.d.ts.map +1 -0
- package/dist/operations/proof/code-models.js +601 -0
- package/dist/operations/proof/code-runner.d.ts +40 -0
- package/dist/operations/proof/code-runner.d.ts.map +1 -0
- package/dist/operations/proof/code-runner.js +164 -0
- package/dist/operations/proof/code-scope.d.ts +14 -1
- package/dist/operations/proof/code-scope.d.ts.map +1 -1
- package/dist/operations/proof/code-scope.js +44 -2
- package/dist/operations/proof/compact-receipts.d.ts.map +1 -1
- package/dist/operations/proof/compact-receipts.js +4 -3
- package/dist/operations/proof/explain.d.ts +32 -0
- package/dist/operations/proof/explain.d.ts.map +1 -1
- package/dist/operations/proof/explain.js +91 -0
- package/dist/operations/proof/ingest-proof.d.ts +9 -1
- package/dist/operations/proof/ingest-proof.d.ts.map +1 -1
- package/dist/operations/proof/ingest-proof.js +42 -2
- package/dist/operations/proof/receipt-compaction.d.ts +2 -0
- package/dist/operations/proof/receipt-compaction.d.ts.map +1 -1
- package/dist/operations/proof/receipt-compaction.js +6 -2
- package/dist/operations/proof/regular-language.d.ts +89 -0
- package/dist/operations/proof/regular-language.d.ts.map +1 -0
- package/dist/operations/proof/regular-language.js +943 -0
- package/dist/operations/proof/source-code-readers.d.ts +12 -0
- package/dist/operations/proof/source-code-readers.d.ts.map +1 -0
- package/dist/operations/proof/source-code-readers.js +699 -0
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +2 -1
- package/dist/operations/semantic-advisor/shared.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/shared.js +4 -0
- package/dist/operations/semantic-advisor/strict-count-rules.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/strict-count-rules.js +8 -2
- package/dist/operations/semantic-advisor/strict-rules.d.ts +8 -0
- package/dist/operations/semantic-advisor/strict-rules.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/strict-rules.js +234 -4
- package/dist/operations/semantic-advisor/types.d.ts +3 -2
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/plugins/approved-source-analyzers.generated.d.ts +6 -6
- package/dist/plugins/approved-source-analyzers.generated.js +6 -6
- package/dist/prolog.d.ts.map +1 -1
- package/dist/prolog.js +13 -3
- package/dist/proof/command-test-report.d.ts +4 -3
- package/dist/proof/command-test-report.d.ts.map +1 -1
- package/dist/proof/command-test-report.js +4 -10
- package/dist/proof/evaluate.d.ts.map +1 -1
- package/dist/proof/evaluate.js +18 -2
- package/dist/proof/inspect.d.ts.map +1 -1
- package/dist/proof/inspect.js +58 -0
- package/dist/proof/producers/playwright-reporter.d.ts +3 -0
- package/dist/proof/producers/playwright-reporter.d.ts.map +1 -1
- package/dist/proof/producers/playwright-reporter.js +25 -2
- package/dist/proof/step-runner.d.ts +36 -0
- package/dist/proof/step-runner.d.ts.map +1 -0
- package/dist/proof/step-runner.js +234 -0
- package/dist/public/evidence-levels.d.ts +12 -0
- package/dist/public/evidence-levels.d.ts.map +1 -0
- package/dist/public/evidence-levels.js +19 -0
- package/dist/public/impact/coverage-depth-quality.d.ts +7 -0
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +59 -0
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +3 -1
- package/dist/public/operations/catalog.d.ts +315 -11
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/check-executor.d.ts +2 -0
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +6 -0
- package/dist/public/operations/evidence-floor.d.ts +48 -0
- package/dist/public/operations/evidence-floor.d.ts.map +1 -0
- package/dist/public/operations/evidence-floor.js +143 -0
- package/dist/public/operations/migration-plan.d.ts +19 -5
- package/dist/public/operations/migration-plan.d.ts.map +1 -1
- package/dist/public/operations/migration-plan.js +22 -5
- package/dist/public/operations/node-ports.d.ts.map +1 -1
- package/dist/public/operations/node-ports.js +4 -1
- package/dist/public/operations/proof-contract-claims.d.ts +26 -0
- package/dist/public/operations/proof-contract-claims.d.ts.map +1 -0
- package/dist/public/operations/proof-contract-claims.js +71 -0
- package/dist/public/operations/specs/check-rules.generated.d.ts +1 -1
- package/dist/public/operations/specs/check-rules.generated.d.ts.map +1 -1
- package/dist/public/operations/specs/check-rules.generated.js +3 -1
- package/dist/public/operations/specs/check.d.ts +1 -1
- package/dist/public/operations/specs/composite.d.ts +16 -3
- package/dist/public/operations/specs/composite.d.ts.map +1 -1
- package/dist/public/operations/specs/modeling.d.ts +16 -3
- package/dist/public/operations/specs/modeling.d.ts.map +1 -1
- package/dist/public/operations/specs/modeling.js +22 -3
- package/dist/public/operations/specs/mutation-schemas.d.ts +289 -7
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +28 -4
- package/dist/public/operations/specs/proof.d.ts +9 -0
- package/dist/public/operations/specs/proof.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +19 -10
- package/dist/public/operations/specs/upsert.d.ts +289 -7
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/proof-certificates.d.ts +163 -0
- package/dist/public/proof-certificates.d.ts.map +1 -0
- package/dist/public/proof-certificates.js +419 -0
- package/dist/public/proof-protocol.d.ts +259 -3
- package/dist/public/proof-protocol.d.ts.map +1 -1
- package/dist/public/proof-protocol.js +524 -3
- package/dist/public/proof-receipt.d.ts +90 -6
- package/dist/public/proof-receipt.d.ts.map +1 -1
- package/dist/public/proof-receipt.js +88 -7
- package/dist/public/proof-sources.d.ts +102 -0
- package/dist/public/proof-sources.d.ts.map +1 -0
- package/dist/public/proof-sources.js +1292 -0
- package/dist/public/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +39 -2
- package/dist/public/skills/kibi-bootstrap/SKILL.md +2 -2
- package/dist/public/skills/kibi-commit-review/SKILL.md +8 -8
- package/dist/public/skills/kibi-commit-review/resources/staged-gate.md +12 -7
- package/dist/public/skills/kibi-decisions/SKILL.md +13 -2
- package/dist/public/skills/kibi-decisions/resources/decision-records.md +9 -1
- package/dist/public/skills/kibi-freshness/SKILL.md +5 -1
- package/dist/public/skills/kibi-traceability/SKILL.md +12 -1
- package/dist/public/skills/kibi-usage/SKILL.md +8 -4
- package/dist/public/skills/kibi-usage/resources/proof.md +221 -20
- package/dist/public/skills/kibi-usage/resources/workflows.md +4 -4
- package/dist/report/html-report.css +83 -11
- package/dist/report/html-report.d.ts +8 -0
- package/dist/report/html-report.d.ts.map +1 -1
- package/dist/report/html-report.js +214 -22
- package/dist/report/report-view.d.ts +2 -2
- package/dist/report/report-view.d.ts.map +1 -1
- package/dist/report/report-view.js +8 -0
- package/dist/schemas/entity.schema.json +404 -5
- package/dist/search-answer.d.ts.map +1 -1
- package/dist/search-answer.js +1 -0
- package/dist/signoff/html.d.ts.map +1 -1
- package/dist/signoff/html.js +3 -0
- package/dist/signoff/markdown.d.ts.map +1 -1
- package/dist/signoff/markdown.js +3 -0
- package/dist/signoff/model.d.ts +20 -0
- package/dist/signoff/model.d.ts.map +1 -1
- package/dist/signoff/model.js +20 -1
- package/dist/traceability/evidence-model.d.ts +13 -12
- package/dist/traceability/evidence-model.d.ts.map +1 -1
- package/dist/traceability/evidence-model.js +1 -1
- package/dist/traceability/impact-knowledge.d.ts.map +1 -1
- package/dist/traceability/impact-knowledge.js +1 -0
- package/dist/traceability/staged-diagnostics.d.ts.map +1 -1
- package/dist/traceability/staged-diagnostics.js +24 -20
- package/dist/traceability/staged-impact-contract.d.ts +4 -4
- package/dist/traceability/staged-impact-contract.js +9 -9
- package/dist/traceability/staged-symbols-manifest.d.ts +11 -3
- package/dist/traceability/staged-symbols-manifest.d.ts.map +1 -1
- package/dist/traceability/staged-symbols-manifest.js +47 -140
- package/dist/traceability/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +1 -0
- package/dist/types/entities.d.ts +5 -2
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/utils/merge-driver-setup.d.ts +8 -1
- package/dist/utils/merge-driver-setup.d.ts.map +1 -1
- package/dist/utils/merge-driver-setup.js +23 -2
- package/dist/utils/rule-registry.generated.d.ts +10 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.js +12 -0
- package/dist/utils/schema-version.d.ts +1 -1
- package/dist/utils/schema-version.d.ts.map +1 -1
- package/dist/utils/schema-version.js +7 -1
- package/dist/utils/strict-modeling.d.ts +3 -2
- package/dist/utils/strict-modeling.d.ts.map +1 -1
- package/dist/utils/strict-modeling.js +37 -4
- package/dist/workspace-cwd.d.ts +15 -0
- package/dist/workspace-cwd.d.ts.map +1 -0
- package/dist/workspace-cwd.js +86 -0
- package/package.json +6 -2
- package/schema/entities.pl +6 -0
- package/schema/validation.pl +7 -2
- package/src/public/evidence-levels.ts +23 -0
- package/src/public/impact/coverage-depth-quality.ts +73 -0
- package/src/public/impact/full-kb-quality.ts +6 -1
- package/src/public/operations/check-executor.ts +13 -0
- package/src/public/operations/evidence-floor.ts +203 -0
- package/src/public/operations/migration-plan.ts +39 -6
- package/src/public/operations/node-ports.ts +3 -1
- package/src/public/operations/proof-contract-claims.ts +103 -0
- package/src/public/operations/specs/check-rules.generated.ts +3 -1
- package/src/public/operations/specs/modeling.ts +24 -5
- package/src/public/operations/specs/mutation-schemas.ts +30 -4
- package/src/public/operations/specs/reporting.ts +20 -10
- package/src/public/proof-certificates.ts +566 -0
- package/src/public/proof-protocol-types.d.ts +69 -1
- package/src/public/proof-protocol.ts +694 -3
- package/src/public/proof-receipt.ts +133 -7
- package/src/public/proof-sources.ts +1656 -0
- package/src/public/schemas/entity.ts +51 -3
- package/src/public/skills/kibi-bootstrap/SKILL.md +2 -2
- package/src/public/skills/kibi-commit-review/SKILL.md +8 -8
- package/src/public/skills/kibi-commit-review/resources/staged-gate.md +12 -7
- package/src/public/skills/kibi-decisions/SKILL.md +13 -2
- package/src/public/skills/kibi-decisions/resources/decision-records.md +9 -1
- package/src/public/skills/kibi-freshness/SKILL.md +5 -1
- package/src/public/skills/kibi-traceability/SKILL.md +12 -1
- package/src/public/skills/kibi-usage/SKILL.md +8 -4
- package/src/public/skills/kibi-usage/resources/proof.md +221 -20
- package/src/public/skills/kibi-usage/resources/workflows.md +4 -4
- package/src/schemas/entity.schema.json +404 -5
- package/dist/commands/proof-impact.d.ts +0 -7
- package/dist/commands/proof-impact.d.ts.map +0 -1
- package/dist/commands/proof-impact.js +0 -39
- package/dist/operations/proof/baseline-diff.d.ts +0 -41
- package/dist/operations/proof/baseline-diff.d.ts.map +0 -1
- package/dist/operations/proof/baseline-diff.js +0 -153
- package/dist/operations/proof/impact.d.ts +0 -51
- package/dist/operations/proof/impact.d.ts.map +0 -1
- package/dist/operations/proof/impact.js +0 -138
- package/dist/traceability/reviewed-coordinate-refresh.d.ts +0 -10
- package/dist/traceability/reviewed-coordinate-refresh.d.ts.map +0 -1
- package/dist/traceability/reviewed-coordinate-refresh.js +0 -49
|
@@ -21,9 +21,9 @@ import { dump as dumpYAML, load as parseYAML } from "js-yaml";
|
|
|
21
21
|
import { isSeq, parseDocument } from "yaml";
|
|
22
22
|
import { coarseCoordinateSpan, coordinateIdentityHash, coordinateSourceHash, parseCoordinateArtifact, writeCoordinateArtifact, } from "../../extractors/symbol-coordinates.js";
|
|
23
23
|
import { enrichSymbolCoordinates, } from "../../extractors/symbols-coordinator.js";
|
|
24
|
-
import { resolveWorkspaceSourceAbsolute } from "../../utils/repo-relative-path.js";
|
|
25
24
|
import { COARSE_GRANULARITY_REASONS, COARSE_GRANULARITY_REASONS_PARENTHESIZED, isCoarseGranularityReason, } from "../../public/symbol-granularity.js";
|
|
26
25
|
import { resolveSymbolsManifestPaths } from "../../utils/manifest-paths.js";
|
|
26
|
+
import { resolveWorkspaceSourceAbsolute } from "../../utils/repo-relative-path.js";
|
|
27
27
|
import { blockifySymbolManifest } from "../../utils/symbol-manifest-layout.js";
|
|
28
28
|
function resolveDeps(overrides) {
|
|
29
29
|
return {
|
|
@@ -43,8 +43,8 @@ function resolveDeps(overrides) {
|
|
|
43
43
|
export const SYMBOLS_MANIFEST_COMMENT_BLOCK = `# symbols.yaml
|
|
44
44
|
# AUTHORED fields (edit freely):
|
|
45
45
|
# id, title, sourceFile, links, status, tags, owner, priority
|
|
46
|
-
#
|
|
47
|
-
#
|
|
46
|
+
# Coordinates are derived from source by every \`kibi sync\` into the
|
|
47
|
+
# gitignored symbol-coordinates.yaml; they are never authored or committed.
|
|
48
48
|
#
|
|
49
49
|
# Coordinate refresh granularity gate:
|
|
50
50
|
# The AST extractor locates per-declaration spans for code files. When it
|
|
@@ -55,6 +55,11 @@ export const SYMBOLS_MANIFEST_COMMENT_BLOCK = `# symbols.yaml
|
|
|
55
55
|
# coordinate entry at all and is reported as failed; add symbol_role and
|
|
56
56
|
# granularity_reason to opt it into the coarse fallback.
|
|
57
57
|
`;
|
|
58
|
+
function sameCoordinateSpan(stored, next) {
|
|
59
|
+
return (stored !== undefined &&
|
|
60
|
+
stored.sourceFile === next.sourceFile &&
|
|
61
|
+
GENERATED_COORD_FIELDS.every((field) => stored[field] === next[field]));
|
|
62
|
+
}
|
|
58
63
|
const GENERATED_COORD_FIELDS = [
|
|
59
64
|
"sourceLine",
|
|
60
65
|
"sourceColumn",
|
|
@@ -174,11 +179,13 @@ function coarseAnchorFailureReason(entry) {
|
|
|
174
179
|
}
|
|
175
180
|
return "extractor produced no coordinates and the whole-file coarse fallback found no span for this symbol";
|
|
176
181
|
}
|
|
182
|
+
// implements REQ-symbol-coordinates-derived-locally
|
|
177
183
|
export async function refreshManifestCoordinates(
|
|
178
184
|
// implements REQ-003
|
|
179
185
|
manifestPath, workspaceRoot, deps) {
|
|
180
186
|
const resolved = resolveDeps(deps);
|
|
181
|
-
const
|
|
187
|
+
const incremental = deps?.incremental === true;
|
|
188
|
+
const shouldRefreshCoordinates = incremental || (deps?.refreshSymbolCoordinates ?? false);
|
|
182
189
|
const rawContent = resolved.readFileSync(manifestPath, "utf8");
|
|
183
190
|
const parsed = resolved.parseYAML(rawContent);
|
|
184
191
|
if (!isRecord(parsed)) {
|
|
@@ -192,30 +199,97 @@ manifestPath, workspaceRoot, deps) {
|
|
|
192
199
|
? { ...entry }
|
|
193
200
|
: {});
|
|
194
201
|
let coordinatesPath = null;
|
|
202
|
+
// The stored artifact is the baseline a refresh is counted against: the
|
|
203
|
+
// authored manifest never holds coordinates, so comparing against it would
|
|
204
|
+
// report every symbol as refreshed.
|
|
205
|
+
let storedCoordinates = null;
|
|
206
|
+
let storedArtifactBytes = null;
|
|
195
207
|
if (shouldRefreshCoordinates) {
|
|
196
208
|
coordinatesPath =
|
|
197
209
|
resolved.resolveSymbolsManifestPaths(workspaceRoot).coordinatesPath;
|
|
210
|
+
storedCoordinates = {};
|
|
198
211
|
if (resolved.existsSync(coordinatesPath)) {
|
|
199
|
-
|
|
212
|
+
storedArtifactBytes = String(resolved.readFileSync(coordinatesPath, "utf8"));
|
|
213
|
+
const existing = parseCoordinateArtifact(storedArtifactBytes);
|
|
200
214
|
if (existing.status === "invalid") {
|
|
201
|
-
|
|
215
|
+
// The artifact is a local cache: an incremental refresh rebuilds a
|
|
216
|
+
// damaged one instead of refusing.
|
|
217
|
+
if (!incremental) {
|
|
218
|
+
throw new Error(`Failed to parse coordinate artifact ${coordinatesPath}: ${existing.reason}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
storedCoordinates = existing.coordinates;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Records still bound to the symbol's identity and its current source
|
|
227
|
+
// bytes are exactly what a fresh extraction would produce, so an
|
|
228
|
+
// incremental refresh keeps them and extracts only the remaining symbols.
|
|
229
|
+
const reused = new Map();
|
|
230
|
+
if (incremental && storedCoordinates !== null) {
|
|
231
|
+
const sourceHashes = new Map();
|
|
232
|
+
const currentSourceHash = (sourceFile) => {
|
|
233
|
+
if (!sourceHashes.has(sourceFile)) {
|
|
234
|
+
const text = readSourceText(sourceFile, workspaceRoot, resolved);
|
|
235
|
+
sourceHashes.set(sourceFile, text === null ? null : coordinateSourceHash(text));
|
|
202
236
|
}
|
|
237
|
+
return sourceHashes.get(sourceFile) ?? null;
|
|
238
|
+
};
|
|
239
|
+
for (let index = 0; index < before.length; index++) {
|
|
240
|
+
const entry = before[index];
|
|
241
|
+
const id = typeof entry?.id === "string" ? entry.id : undefined;
|
|
242
|
+
if (!entry || !id)
|
|
243
|
+
continue;
|
|
244
|
+
const stored = storedCoordinates[id];
|
|
245
|
+
if (stored === undefined ||
|
|
246
|
+
typeof stored.identityHash !== "string" ||
|
|
247
|
+
typeof stored.sourceHash !== "string" ||
|
|
248
|
+
typeof stored.sourceFile !== "string" ||
|
|
249
|
+
stored.identityHash !==
|
|
250
|
+
coordinateIdentityHash(manifestEntryIdentity(entry)) ||
|
|
251
|
+
stored.sourceHash !== currentSourceHash(stored.sourceFile)) {
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
reused.set(index, stored);
|
|
203
255
|
}
|
|
204
256
|
}
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
|
|
257
|
+
const pendingIndices = before
|
|
258
|
+
.map((_, index) => index)
|
|
259
|
+
.filter((index) => !reused.has(index));
|
|
260
|
+
const extracted = incremental && pendingIndices.length === 0
|
|
261
|
+
? []
|
|
262
|
+
: await resolved.enrichSymbolCoordinates(pendingIndices.map((index) => before[index]), workspaceRoot, shouldRefreshCoordinates
|
|
263
|
+
? { allowPythonDecoratorCoordinates: true }
|
|
264
|
+
: undefined);
|
|
265
|
+
const enriched = before.map((entry, index) => {
|
|
266
|
+
const kept = reused.get(index);
|
|
267
|
+
if (kept === undefined)
|
|
268
|
+
return entry;
|
|
269
|
+
const { identityHash: _identity, sourceHash: _source, ...span } = kept;
|
|
270
|
+
return { ...entry, ...span };
|
|
271
|
+
});
|
|
272
|
+
pendingIndices.forEach((index, position) => {
|
|
273
|
+
const entry = extracted[position];
|
|
274
|
+
if (entry !== undefined)
|
|
275
|
+
enriched[index] = entry;
|
|
276
|
+
});
|
|
208
277
|
// Publish the generated coordinate artifact when explicitly requested.
|
|
209
278
|
// Parse and I/O failures are fatal so sync never advances cache state on a
|
|
210
279
|
// partially published compiler dependency. Symbols without extractable
|
|
211
280
|
// coordinates stay absent from the artifact; coverage keeps their gap visible.
|
|
212
281
|
let refreshedArtifactBytes = null;
|
|
282
|
+
const boundEntries = {};
|
|
213
283
|
if (shouldRefreshCoordinates) {
|
|
214
|
-
const
|
|
215
|
-
for (const entry of enriched) {
|
|
284
|
+
for (const [index, entry] of enriched.entries()) {
|
|
216
285
|
const id = typeof entry?.id === "string" ? entry.id : undefined;
|
|
217
286
|
if (!id)
|
|
218
287
|
continue;
|
|
288
|
+
const kept = reused.get(index);
|
|
289
|
+
if (kept !== undefined) {
|
|
290
|
+
boundEntries[id] = kept;
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
219
293
|
const span = extractedCoordinates(entry) ??
|
|
220
294
|
fallbackCoarseCoordinates(entry, workspaceRoot, resolved);
|
|
221
295
|
if (span === null)
|
|
@@ -241,8 +315,13 @@ manifestPath, workspaceRoot, deps) {
|
|
|
241
315
|
for (let i = 0; i < before.length; i++) {
|
|
242
316
|
const previous = before[i] ?? {};
|
|
243
317
|
const current = enriched[i] ?? previous;
|
|
244
|
-
const
|
|
245
|
-
|
|
318
|
+
const id = typeof current.id === "string" ? current.id : undefined;
|
|
319
|
+
const changed = storedCoordinates === null
|
|
320
|
+
? GENERATED_COORD_FIELDS.some((field) => previous[field] !==
|
|
321
|
+
current[field])
|
|
322
|
+
: id !== undefined &&
|
|
323
|
+
boundEntries[id] !== undefined &&
|
|
324
|
+
!sameCoordinateSpan(storedCoordinates[id], boundEntries[id]);
|
|
246
325
|
if (changed) {
|
|
247
326
|
refreshed++;
|
|
248
327
|
continue;
|
|
@@ -270,12 +349,17 @@ manifestPath, workspaceRoot, deps) {
|
|
|
270
349
|
});
|
|
271
350
|
const nextContent = `${SYMBOLS_MANIFEST_COMMENT_BLOCK}${dumped}`;
|
|
272
351
|
let manifestPublished = false;
|
|
352
|
+
const artifactChanged = refreshedArtifactBytes !== null &&
|
|
353
|
+
coordinatesPath !== null &&
|
|
354
|
+
refreshedArtifactBytes !== storedArtifactBytes;
|
|
273
355
|
try {
|
|
274
|
-
if (rawContent !== nextContent) {
|
|
356
|
+
if (!incremental && rawContent !== nextContent) {
|
|
275
357
|
publishAtomically(manifestPath, nextContent, resolved);
|
|
276
358
|
manifestPublished = true;
|
|
277
359
|
}
|
|
278
|
-
if (
|
|
360
|
+
if (artifactChanged &&
|
|
361
|
+
refreshedArtifactBytes !== null &&
|
|
362
|
+
coordinatesPath !== null) {
|
|
279
363
|
publishAtomically(coordinatesPath, refreshedArtifactBytes, resolved);
|
|
280
364
|
}
|
|
281
365
|
}
|
|
@@ -297,7 +381,11 @@ manifestPath, workspaceRoot, deps) {
|
|
|
297
381
|
// The generated coordinates live in the artifact beside the manifest, not
|
|
298
382
|
// in the authored symbols.yaml this command also rewrites; naming the
|
|
299
383
|
// artifact keeps diff audits pointed at the file that actually changed.
|
|
300
|
-
|
|
384
|
+
// An incremental refresh that changed nothing stays silent: plain sync
|
|
385
|
+
// runs it every time.
|
|
386
|
+
const quiet = deps?.quiet === true ||
|
|
387
|
+
(incremental && !artifactChanged && failures.length === 0);
|
|
388
|
+
if (!quiet) {
|
|
301
389
|
const counts = `(refreshed=${refreshed}, unchanged=${unchanged}, failed=${failures.length})`;
|
|
302
390
|
if (coordinatesPath !== null) {
|
|
303
391
|
console.log(`\u2713 Refreshed symbol coordinates in ${path.relative(workspaceRoot, coordinatesPath)} ${counts}`);
|
|
@@ -313,9 +401,10 @@ manifestPath, workspaceRoot, deps) {
|
|
|
313
401
|
console.log(` ... and ${failures.length - maxReportedFailures} more failed symbol(s)`);
|
|
314
402
|
}
|
|
315
403
|
if (failures.length > 0) {
|
|
316
|
-
console.log(" Symbols without a published coordinate entry are dropped from coverage
|
|
404
|
+
console.log(" Symbols without a published coordinate entry are dropped from coverage until they succeed.");
|
|
317
405
|
}
|
|
318
406
|
}
|
|
407
|
+
return { artifactChanged };
|
|
319
408
|
}
|
|
320
409
|
/**
|
|
321
410
|
* Rewrite a symbol manifest whose `symbols` sequence is in YAML flow layout
|
|
@@ -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;AA4HrD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AAuFD,iFAAiF;AACjF,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,OAAO,CAAC,MAAM,CAAC,CA+BjB;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,6EAA6E;AAE7E,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAEH;;;GAGG;AAEH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAmBlC;AAED,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,CAyRvD;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,CA0O7D"}
|
|
@@ -64,6 +64,7 @@ const STRING_ARRAY_FIELDS = new Set([
|
|
|
64
64
|
"aliases",
|
|
65
65
|
"examples",
|
|
66
66
|
"predicate_args",
|
|
67
|
+
"value_set",
|
|
67
68
|
]);
|
|
68
69
|
function getEntityField(entity, field) {
|
|
69
70
|
// ExtractedEntity declares all fact fields as optional properties, so indexing
|
|
@@ -405,6 +406,9 @@ prolog, results, entityIds, options = {}) {
|
|
|
405
406
|
entity.firmness !== undefined) {
|
|
406
407
|
props.push(`firmness=${toPrologAtom(entity.firmness)}`);
|
|
407
408
|
}
|
|
409
|
+
if (entity.type === "req" && entity.required_evidence !== undefined) {
|
|
410
|
+
props.push(`required_evidence=${toPrologAtom(entity.required_evidence)}`);
|
|
411
|
+
}
|
|
408
412
|
if (entity.type === "scenario" && entity.expects !== undefined) {
|
|
409
413
|
props.push(`expects=${toPrologAtom(entity.expects)}`);
|
|
410
414
|
}
|
|
@@ -546,7 +550,13 @@ export function relationshipFailureMessage(singleError, batchError) {
|
|
|
546
550
|
}
|
|
547
551
|
// implements REQ-core-persistence
|
|
548
552
|
export async function persistRelationships(prolog, results, shardRelationships, options = {}) {
|
|
549
|
-
|
|
553
|
+
// Distinct edges asserted: an edge stated in an entity's front matter and in
|
|
554
|
+
// a relationship shard, or extracted twice, is asserted more than once but
|
|
555
|
+
// stored once, so counting assert calls overstates what this sync added.
|
|
556
|
+
const assertedEdges = new Set();
|
|
557
|
+
const countEdge = (type, fromId, toId) => {
|
|
558
|
+
assertedEdges.add(`${type}|${fromId}|${toId}`);
|
|
559
|
+
};
|
|
550
560
|
let kbModified = false;
|
|
551
561
|
// Build ID lookup for relationship resolution
|
|
552
562
|
const idLookup = new Map();
|
|
@@ -603,7 +613,8 @@ export async function persistRelationships(prolog, results, shardRelationships,
|
|
|
603
613
|
? await relationshipBatchRunner(chunk.map(({ goal }) => goal))
|
|
604
614
|
: { success: false, error: "batch unsupported" };
|
|
605
615
|
if (batch.success) {
|
|
606
|
-
|
|
616
|
+
for (const item of chunk)
|
|
617
|
+
countEdge(item.rel.type, item.fromId, item.toId);
|
|
607
618
|
kbModified = true;
|
|
608
619
|
continue;
|
|
609
620
|
}
|
|
@@ -611,7 +622,7 @@ export async function persistRelationships(prolog, results, shardRelationships,
|
|
|
611
622
|
try {
|
|
612
623
|
const single = await prolog.query(item.goal);
|
|
613
624
|
if (single.success) {
|
|
614
|
-
|
|
625
|
+
countEdge(item.rel.type, item.fromId, item.toId);
|
|
615
626
|
kbModified = true;
|
|
616
627
|
}
|
|
617
628
|
else {
|
|
@@ -643,7 +654,7 @@ export async function persistRelationships(prolog, results, shardRelationships,
|
|
|
643
654
|
const goal = `kb_assert_relationship(${toPrologAtom(rel.type)}, ${toPrologAtom(fromId)}, ${toPrologAtom(toId)}, [])`;
|
|
644
655
|
const result = await prolog.query(goal);
|
|
645
656
|
if (result.success) {
|
|
646
|
-
|
|
657
|
+
countEdge(rel.type, fromId, toId);
|
|
647
658
|
kbModified = true;
|
|
648
659
|
}
|
|
649
660
|
else {
|
|
@@ -715,5 +726,5 @@ export async function persistRelationships(prolog, results, shardRelationships,
|
|
|
715
726
|
console.warn("\nTip: Ensure target entities exist before creating relationships.");
|
|
716
727
|
}
|
|
717
728
|
}
|
|
718
|
-
return { relationshipCount:
|
|
729
|
+
return { relationshipCount: assertedEdges.size, kbModified };
|
|
719
730
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA6BjE,OAAO,EAEL,yBAAyB,EAE1B,MAAM,gDAAgD,CAAC;AAGxD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,6BAA6B,CAAC;AA2BrC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAmCxE,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAmCD;;;;;;;;GAQG;AAEH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAqBtE;AAkCD,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,EACxB,4BAA4B,UAAQ,EACpC,4BAA4B,GAAE,4BAA4B,EAAO,GAChE,MAAM,EAAE,CAuGV;AAiFD,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,yBAAyB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,kBAAkB;IAC1B,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3E,UAAU,CAAC,EAAE,CACX,OAAO,EAAE,yBAAyB,GAAG;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,KACzD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,aAAa,CAAC;IAC/D,yBAAyB,CAAC,EAAE,OAAO,yBAAyB,CAAC;CAC9D;AA+FD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAGvE;AAGD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,IAAI,GAChB,IAAI,CAMN;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,IAAI,CAIN;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAMP;AAED,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,UAAU,EAAE,EACzB,oBAAoB,EAAE,OAAO,EAC7B,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,MAAM,GAClB,IAAI,CAUN;AAGD,wBAAsB,WAAW,CAC/B,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,2EAA2E;IAC3E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,EACN,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/sync.js
CHANGED
|
@@ -519,6 +519,25 @@ export async function syncCommand(options = {}, runtime = {}) {
|
|
|
519
519
|
}
|
|
520
520
|
}
|
|
521
521
|
}
|
|
522
|
+
// Symbol coordinates are derived from the source tree and kept in a
|
|
523
|
+
// gitignored artifact. Bring it up to date before anything hashes it, so
|
|
524
|
+
// a source edit that moved a declaration recompiles the manifest. Only
|
|
525
|
+
// symbols whose identity or source bytes changed are extracted again.
|
|
526
|
+
// An explicit --refresh-symbol-coordinates run re-extracts everything
|
|
527
|
+
// below instead.
|
|
528
|
+
if (!validateOnly && !options.refreshSymbolCoordinates) {
|
|
529
|
+
for (const file of manifestFiles) {
|
|
530
|
+
try {
|
|
531
|
+
await refreshManifestCoordinates(file, workspaceRoot, {
|
|
532
|
+
incremental: true,
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
catch (error) {
|
|
536
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
537
|
+
console.warn(`Warning: could not update symbol coordinates for ${path.relative(workspaceRoot, file)}: ${message}`);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
522
541
|
// No-op is a first-class compiler result. Hashing the configured inputs is
|
|
523
542
|
// sufficient when normalized entity/shard inventories are already fresh;
|
|
524
543
|
// avoid rebuilding maps and rediscovering RDF state for the common path.
|
package/dist/diagnostics.js
CHANGED
|
@@ -82,7 +82,7 @@ export function formatSyncSummary(summary) {
|
|
|
82
82
|
lines.push(`KB Totals: ${entityTotal} entities`);
|
|
83
83
|
pushCounts(lines, totals.entities);
|
|
84
84
|
lines.push(`KB Relationships: ${totals.relationships}`);
|
|
85
|
-
lines.push(`Imported This Sync (changed sources only): ${imported} entities, ${summary.relationshipCount}
|
|
85
|
+
lines.push(`Imported This Sync (changed sources only): ${imported} entities, ${summary.relationshipCount} distinct relationships`);
|
|
86
86
|
pushCounts(lines, summary.entityCounts);
|
|
87
87
|
}
|
|
88
88
|
lines.push("");
|
package/dist/engine.js
CHANGED
|
@@ -250,7 +250,7 @@ function safeEngineGoal(goal) {
|
|
|
250
250
|
if (/\b(?:halt|abort|shell|system|process_create|consult|load_files|open|close|delete_file|rename_file|make_directory|thread_create|rdf_attach_db|rdf_load|rdf_save|assertz|asserta|retractall|set_prolog_flag)\s*\(/.test(executable)) {
|
|
251
251
|
return false;
|
|
252
252
|
}
|
|
253
|
-
return /(?:^|[(:,\s])(?:kb_|checks:|status:|discovery:|requirement_proof:|findall\(|aggregate_all\(|rdf_transaction\(|use_module\(|atom_json_dict\(|member\(|once\(|true\b|fail\b)/.test(goal.trim());
|
|
253
|
+
return /(?:^|[(:,\s])(?:kb_|checks:|status:|discovery:|requirement_proof:|code_certificates:|claim_obligations:|findall\(|aggregate_all\(|rdf_transaction\(|use_module\(|atom_json_dict\(|member\(|once\(|true\b|fail\b)/.test(goal.trim());
|
|
254
254
|
}
|
|
255
255
|
function frame(value) {
|
|
256
256
|
const payload = Buffer.from(JSON.stringify(value), "utf8");
|
|
@@ -17,6 +17,7 @@ export interface ExtractedEntity {
|
|
|
17
17
|
text_ref?: string;
|
|
18
18
|
origin?: EntityOrigin;
|
|
19
19
|
firmness?: Firmness;
|
|
20
|
+
required_evidence?: "proved" | "tested" | "asserted" | "unverified";
|
|
20
21
|
semantic_text?: string;
|
|
21
22
|
logic_claims?: string[];
|
|
22
23
|
semantic_clauses?: string[];
|
|
@@ -45,9 +46,10 @@ export interface ExtractedEntity {
|
|
|
45
46
|
fact_kind?: "subject" | "property_value" | "observation" | "meta" | "predicate_schema" | "predicate" | "rule_schema" | "rule";
|
|
46
47
|
subject_key?: string;
|
|
47
48
|
property_key?: string;
|
|
48
|
-
operator?: "eq" | "neq" | "lt" | "lte" | "gt" | "gte";
|
|
49
|
-
value_type?: "string" | "int" | "number" | "bool";
|
|
49
|
+
operator?: "eq" | "neq" | "lt" | "lte" | "gt" | "gte" | "matches" | "includes" | "subset_of" | "excludes";
|
|
50
|
+
value_type?: "string" | "int" | "number" | "bool" | "set";
|
|
50
51
|
value_string?: string;
|
|
52
|
+
value_set?: string[];
|
|
51
53
|
value_int?: number;
|
|
52
54
|
value_number?: number;
|
|
53
55
|
value_bool?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/extractors/markdown.ts"],"names":[],"mappings":"AAsBA,OAAO,EAEL,KAAK,QAAQ,EAGd,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/extractors/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ import { FIRMNESS_VALUES, carriesFirmness, isFirmness, } from "../decision-firmn
|
|
|
23
23
|
import { withoutContextSections } from "../entity-body-context.js";
|
|
24
24
|
import { deriveFactClaimKey, semanticClaimKey, } from "../operations/semantic-advisor/clauses.js";
|
|
25
25
|
import { normalizeEntityOrigin, } from "../public/entity-origin.js";
|
|
26
|
+
import { EVIDENCE_LEVELS } from "../public/evidence-levels.js";
|
|
26
27
|
import { PROOF_BINDINGS_SCHEMA, PROOF_CONTRACT_SCHEMA, } from "../public/proof-protocol.js";
|
|
27
28
|
import { proofReceiptHistoryErrors, } from "../public/proof-receipt.js";
|
|
28
29
|
import entitySchema from "../schemas/entity.schema.json" with { type: "json" };
|
|
@@ -68,6 +69,7 @@ const FACT_STRING_ARRAY_FIELDS = [
|
|
|
68
69
|
"aliases",
|
|
69
70
|
"examples",
|
|
70
71
|
"predicate_args",
|
|
72
|
+
"value_set",
|
|
71
73
|
];
|
|
72
74
|
const FACT_ONLY_FIELDS = [
|
|
73
75
|
...FACT_STRING_FIELDS,
|
|
@@ -534,6 +536,21 @@ function extractFromMarkdownContent(content, filePath) {
|
|
|
534
536
|
}
|
|
535
537
|
entity.firmness = data.firmness;
|
|
536
538
|
}
|
|
539
|
+
// implements REQ-kibi-evidence-floors
|
|
540
|
+
// The weakest evidence level the requirement accepts; the evidence-floor
|
|
541
|
+
// rule reads it, and derives it from firmness when absent.
|
|
542
|
+
if (data.required_evidence !== undefined) {
|
|
543
|
+
if (type !== "req" ||
|
|
544
|
+
!EVIDENCE_LEVELS.includes(data.required_evidence)) {
|
|
545
|
+
throw new FrontmatterError(type === "req"
|
|
546
|
+
? "Invalid required_evidence; expected one of proved, tested, asserted, unverified"
|
|
547
|
+
: "required_evidence is only allowed on type: req", filePath, {
|
|
548
|
+
classification: "Invalid Required Evidence",
|
|
549
|
+
hint: "Set required_evidence to the weakest evidence level the requirement accepts (proved, tested, asserted or unverified), or remove the field to derive it from firmness.",
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
entity.required_evidence = data.required_evidence;
|
|
553
|
+
}
|
|
537
554
|
if (type === "req" && Array.isArray(data.exempts_claims)) {
|
|
538
555
|
entity.exempts_claims = data.exempts_claims.filter((value) => typeof value === "string");
|
|
539
556
|
}
|
|
@@ -14,8 +14,8 @@ export class CoordinateArtifactError extends Error {
|
|
|
14
14
|
name = "CoordinateArtifactError";
|
|
15
15
|
}
|
|
16
16
|
const SYMBOL_COORDINATES_COMMENT_BLOCK = `# symbol-coordinates.yaml
|
|
17
|
-
# GENERATED
|
|
18
|
-
#
|
|
17
|
+
# GENERATED local cache — do not edit or commit (it is gitignored).
|
|
18
|
+
# Every \`kibi sync\` keeps it current; \`kibi sync --refresh-symbol-coordinates\` rebuilds it.
|
|
19
19
|
`;
|
|
20
20
|
function isRecord(value) {
|
|
21
21
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -39,11 +39,9 @@ export interface AnalyzeSourceTextOptions {
|
|
|
39
39
|
interface EnrichSymbolCoordinatesDeps {
|
|
40
40
|
sourceAnalysisService: SourceAnalysisService;
|
|
41
41
|
enrichTsCoordinates: typeof enrichSymbolCoordinatesWithTsMorph;
|
|
42
|
-
/** Coordinate-only sync may locate explicit declarations in decorated
|
|
43
|
-
*
|
|
42
|
+
/** Coordinate-only sync may locate explicit declarations in decorated
|
|
43
|
+
* Python. The coordinates stay a local cache, so no review authorizes them. */
|
|
44
44
|
allowPythonDecoratorCoordinates?: boolean;
|
|
45
|
-
/** Additional snapshot/policy authorization for completeness-sensitive gates. */
|
|
46
|
-
verifyPythonDecoratorCoordinates?: (logicalPath: string, analysis: Awaited<ReturnType<SourceAnalysisService["analyzeTextV2"]>>) => Promise<void>;
|
|
47
45
|
}
|
|
48
46
|
export declare function analyzeSourceText(entries: ManifestSymbolEntry[], workspaceRoot: string, deps?: Partial<EnrichSymbolCoordinatesDeps>): Promise<ManifestSymbolEntry[]>;
|
|
49
47
|
export declare function analyzeSourceText(filePath: string, content: string, options?: AnalyzeSourceTextOptions): SourceAnalysisResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols-coordinator.d.ts","sourceRoot":"","sources":["../../src/extractors/symbols-coordinator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"symbols-coordinator.d.ts","sourceRoot":"","sources":["../../src/extractors/symbols-coordinator.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAUnF,OAAO,EACL,KAAK,mBAAmB,EAExB,kCAAkC,EACnC,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,OAAO,GACP,QAAQ,GACR,UAAU,GACV,UAAU,GACV,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,kBAAkB,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAAC;CACtE;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,UAAU,2BAA2B;IACnC,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,mBAAmB,EAAE,OAAO,kCAAkC,CAAC;IAC/D;mFAC+E;IAC/E,+BAA+B,CAAC,EAAE,OAAO,CAAC;CAC3C;AAMD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAAE,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAClC,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,wBAAwB,GACjC,oBAAoB,CAAC;AA8DxB;;;GAGG;AAEH,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAO/B;AA+CD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,mBAAmB,EAAE,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC1C,OAAO,CAAC,mBAAmB,EAAE,CAAC,CA4FhC"}
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
import * as fs from "node:fs";
|
|
19
19
|
import * as path from "node:path";
|
|
20
20
|
import { createMaintenanceSourceAnalysisService } from "../plugins/maintenance-source-analysis.js";
|
|
21
|
-
import { resolveWorkspaceSourceAbsolute } from "../utils/repo-relative-path.js";
|
|
22
21
|
import { createSourceAnalysisService, } from "../plugins/source-analysis-service.js";
|
|
23
22
|
import { extensionLanguage, isTsJsSourcePath, } from "../plugins/source-classification.js";
|
|
23
|
+
import { resolveWorkspaceSourceAbsolute } from "../utils/repo-relative-path.js";
|
|
24
24
|
import { createTsMorphSourceAnalysisProvider, enrichSymbolCoordinatesWithTsMorph, } from "./symbols-ts.js";
|
|
25
25
|
const DEFAULT_SOURCE_ANALYSIS_PROVIDERS = [
|
|
26
26
|
createTsMorphSourceAnalysisProvider(),
|
|
@@ -147,7 +147,6 @@ export async function enrichSymbolCoordinates(entries, workspaceRoot, deps) {
|
|
|
147
147
|
(analysis.status === "partial" && !coordinateOnlyPartial))
|
|
148
148
|
throw new Error(`Cannot refresh incomplete source analysis for ${logicalPath}: ${analysis.diagnostics.map((d) => d.message).join("; ")}`);
|
|
149
149
|
if (coordinateOnlyPartial && firstAnalysis) {
|
|
150
|
-
await deps?.verifyPythonDecoratorCoordinates?.(logicalPath, analysis);
|
|
151
150
|
console.warn(`[kibi] Coordinate-only refresh for ${logicalPath}; source analysis remains partial: ${analysis.diagnostics.map((diagnostic) => diagnostic.message).join("; ")}`);
|
|
152
151
|
}
|
|
153
152
|
if (analysis.status === "unsupported") {
|
|
@@ -19,6 +19,9 @@ export declare function withDocumentBody(step: Readonly<Record<string, unknown>>
|
|
|
19
19
|
* Record a requirement bootstrap read from a person's document as theirs: an
|
|
20
20
|
* import with a reference to the passage, and `firmness: firm`, so an agent
|
|
21
21
|
* asks before changing it instead of treating it as its own default choice.
|
|
22
|
+
* Nothing tests it yet, so its evidence floor is `asserted` (the document
|
|
23
|
+
* stands behind it), as `kibi migrate` sets for untested firm requirements;
|
|
24
|
+
* a freshly bootstrapped knowledge base passes `kibi check`.
|
|
22
25
|
*/
|
|
23
26
|
export declare function asImportedRule(step: Readonly<Record<string, unknown>>, ref: string): Readonly<Record<string, unknown>>;
|
|
24
27
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"candidate-helpers.d.ts","sourceRoot":"","sources":["../../../src/operations/bootstrap/candidate-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIrE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAMtD;AAED,wBAAgB,MAAM,CACpB,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,EAE5D,MAAM,EAAE,CAAC,EACT,aAAa,GAAE,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,EAAO,GACP,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQnC;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,cAAc,GACvB,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CA0C9C;AAED;;;GAGG;AAEH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,IAAI,EAAE,MAAM,GACX,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEnC;AAED
|
|
1
|
+
{"version":3,"file":"candidate-helpers.d.ts","sourceRoot":"","sources":["../../../src/operations/bootstrap/candidate-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIrE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAMtD;AAED,wBAAgB,MAAM,CACpB,CAAC,SAAS;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAA;CAAE,EAE5D,MAAM,EAAE,CAAC,EACT,aAAa,GAAE,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB,EAAO,GACP,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAQnC;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,cAAc,GACvB,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CA0C9C;AAED;;;GAGG;AAEH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,IAAI,EAAE,MAAM,GACX,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAEnC;AAED;;;;;;;GAOG;AAEH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,GAAG,EAAE,MAAM,GACV,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAcnC;AAED;;;;GAIG;AAEH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAED,yEAAyE;AAEzE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;GAGG;AAEH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED;;;GAGG;AAEH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,CAMR"}
|
|
@@ -73,6 +73,9 @@ export function withDocumentBody(step, body) {
|
|
|
73
73
|
* Record a requirement bootstrap read from a person's document as theirs: an
|
|
74
74
|
* import with a reference to the passage, and `firmness: firm`, so an agent
|
|
75
75
|
* asks before changing it instead of treating it as its own default choice.
|
|
76
|
+
* Nothing tests it yet, so its evidence floor is `asserted` (the document
|
|
77
|
+
* stands behind it), as `kibi migrate` sets for untested firm requirements;
|
|
78
|
+
* a freshly bootstrapped knowledge base passes `kibi check`.
|
|
76
79
|
*/
|
|
77
80
|
// implements REQ-kb-decision-firmness
|
|
78
81
|
export function asImportedRule(step, ref) {
|
|
@@ -85,6 +88,7 @@ export function asImportedRule(step, ref) {
|
|
|
85
88
|
...properties,
|
|
86
89
|
origin: { kind: "import", ref },
|
|
87
90
|
firmness: "firm",
|
|
91
|
+
required_evidence: "asserted",
|
|
88
92
|
},
|
|
89
93
|
};
|
|
90
94
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { BodyContextPlan } from "./entity-body-context.js";
|
|
2
|
+
/** Schema 11: record the floor of firm requirements that had no proof path. */
|
|
3
|
+
export declare const EVIDENCE_FLOOR_PIN_CODE = "evidence_floor_pin";
|
|
4
|
+
/** Pins to write, plus the firm requirements that keep the tested floor. */
|
|
5
|
+
export type EvidenceFloorPlan = BodyContextPlan & Readonly<{
|
|
6
|
+
kept: readonly string[];
|
|
7
|
+
/**
|
|
8
|
+
* Whether the floors were decided by the evidence ladder on the compiled
|
|
9
|
+
* store (`ladder`) or only from authored receipts (`authored`), because
|
|
10
|
+
* no synced store could be read.
|
|
11
|
+
*/
|
|
12
|
+
decidedBy: "ladder" | "authored";
|
|
13
|
+
}>;
|
|
14
|
+
/**
|
|
15
|
+
* The evidence ladder's verdict on the current store: requirement id to the
|
|
16
|
+
* evidence-floor status of every requirement below a tested floor
|
|
17
|
+
* (`below`, or `pending_reproof` when only receipts older than the code
|
|
18
|
+
* stand in the way). Requirements absent from the map meet the floor.
|
|
19
|
+
*/
|
|
20
|
+
export type LadderFloorVerdicts = ReadonlyMap<string, "below" | "pending_reproof">;
|
|
21
|
+
/**
|
|
22
|
+
* Current firm requirements without required_evidence and without a proof
|
|
23
|
+
* path that has passed. From schema 11 a firm requirement needs tested
|
|
24
|
+
* evidence, which these have not reached, so the migration records their
|
|
25
|
+
* floor as asserted in the requirement itself, where a reviewer sees it and
|
|
26
|
+
* can raise it later. Requirements with a passing proof path keep the tested
|
|
27
|
+
* floor; `kept` lists them, since remaining gaps (a stale receipt, a missing
|
|
28
|
+
* covered_by) still show in kibi check. Read-only.
|
|
29
|
+
*/
|
|
30
|
+
export declare function planEvidenceFloorPins(workspaceRoot: string, ladder?: LadderFloorVerdicts | null): EvidenceFloorPlan;
|
|
31
|
+
/** Write the planned floors; returns how many requirements were rewritten. */
|
|
32
|
+
export declare function applyEvidenceFloorPins(workspaceRoot: string, ladder?: LadderFloorVerdicts | null): number;
|
|
33
|
+
/**
|
|
34
|
+
* Read the evidence ladder's floor verdicts from the branch's compiled store,
|
|
35
|
+
* so the migration keeps the tested floor only where kibi check will accept
|
|
36
|
+
* it. Returns null when no healthy, synced store is attached (never synced,
|
|
37
|
+
* damaged, another branch's store) or the evaluation fails; the migration
|
|
38
|
+
* then decides from authored receipts alone and says so.
|
|
39
|
+
*/
|
|
40
|
+
export declare function readLadderFloorVerdicts(workspaceRoot: string): Promise<LadderFloorVerdicts | null>;
|
|
41
|
+
//# sourceMappingURL=evidence-floor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evidence-floor.d.ts","sourceRoot":"","sources":["../../../src/operations/migration/evidence-floor.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,0BAA0B,CAAC;AAQlC,+EAA+E;AAE/E,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAE5D,4EAA4E;AAC5E,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAC7C,QAAQ,CAAC;IACP,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,SAAS,EAAE,QAAQ,GAAG,UAAU,CAAC;CAClC,CAAC,CAAC;AAEL;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAC3C,MAAM,EACN,OAAO,GAAG,iBAAiB,CAC5B,CAAC;AA+GF;;;;;;;;GAQG;AAEH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAClC,iBAAiB,CAsDnB;AAED,8EAA8E;AAE9E,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAClC,MAAM,CAKR;AAED;;;;;;GAMG;AAEH,wBAAsB,uBAAuB,CAC3C,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAuCrC"}
|