kibi-cli 2.39.0 → 2.40.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-register-foundation.js +2 -2
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +33 -9
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +15 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +4 -0
- package/dist/commands/migrate-plan-record.d.ts +18 -0
- package/dist/commands/migrate-plan-record.d.ts.map +1 -0
- package/dist/commands/migrate-plan-record.js +112 -0
- package/dist/commands/migrate.d.ts +11 -2
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +53 -7
- package/dist/commands/prove.d.ts.map +1 -1
- package/dist/commands/prove.js +18 -3
- package/dist/commands/sync/manifest.d.ts.map +1 -1
- package/dist/commands/sync/manifest.js +17 -4
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +8 -0
- package/dist/commands/telemetry.d.ts.map +1 -1
- package/dist/commands/telemetry.js +12 -2
- package/dist/extractors/symbol-title-match.d.ts +31 -0
- package/dist/extractors/symbol-title-match.d.ts.map +1 -0
- package/dist/extractors/symbol-title-match.js +133 -0
- package/dist/extractors/symbols-coordinator.d.ts.map +1 -1
- package/dist/extractors/symbols-coordinator.js +81 -12
- package/dist/operations/bootstrap/discovery-evidence.js +2 -2
- package/dist/operations/bootstrap/guidance-actions.d.ts.map +1 -1
- package/dist/operations/bootstrap/guidance-actions.js +12 -1
- package/dist/operations/bootstrap/plugin-offers.d.ts +7 -1
- package/dist/operations/bootstrap/plugin-offers.d.ts.map +1 -1
- package/dist/operations/bootstrap/plugin-offers.js +73 -3
- package/dist/operations/modeling/logic-modeling.d.ts.map +1 -1
- package/dist/operations/modeling/logic-modeling.js +2 -1
- package/dist/operations/modeling/model-requirement.d.ts.map +1 -1
- package/dist/operations/modeling/model-requirement.js +2 -1
- package/dist/operations/mutation/symbol-refresh.d.ts +2 -0
- package/dist/operations/mutation/symbol-refresh.d.ts.map +1 -1
- package/dist/operations/mutation/symbol-refresh.js +6 -1
- package/dist/operations/mutation/upsert.d.ts.map +1 -1
- package/dist/operations/mutation/upsert.js +7 -0
- package/dist/operations/planning/compile-intent.d.ts.map +1 -1
- package/dist/operations/planning/compile-intent.js +2 -1
- package/dist/operations/proof/claim-bindings.d.ts +11 -0
- package/dist/operations/proof/claim-bindings.d.ts.map +1 -1
- package/dist/operations/proof/claim-bindings.js +144 -1
- package/dist/operations/proof/code-certificates.d.ts +10 -3
- package/dist/operations/proof/code-certificates.d.ts.map +1 -1
- package/dist/operations/proof/code-certificates.js +65 -13
- package/dist/operations/proof/code-languages.d.ts +104 -0
- package/dist/operations/proof/code-languages.d.ts.map +1 -0
- package/dist/operations/proof/code-languages.js +119 -0
- package/dist/operations/proof/code-models.d.ts +2 -0
- package/dist/operations/proof/code-models.d.ts.map +1 -1
- package/dist/operations/proof/code-models.js +11 -5
- package/dist/operations/proof/code-runner.d.ts +12 -9
- package/dist/operations/proof/code-runner.d.ts.map +1 -1
- package/dist/operations/proof/code-runner.js +81 -38
- package/dist/operations/proof/code-scope.d.ts +8 -0
- package/dist/operations/proof/code-scope.d.ts.map +1 -1
- package/dist/operations/proof/code-scope.js +30 -1
- package/dist/operations/proof/explain.d.ts +13 -0
- package/dist/operations/proof/explain.d.ts.map +1 -1
- package/dist/operations/proof/explain.js +66 -0
- package/dist/operations/proof/ingest-proof.d.ts +2 -0
- package/dist/operations/proof/ingest-proof.d.ts.map +1 -1
- package/dist/operations/proof/ingest-proof.js +1 -0
- package/dist/operations/proof/java-package-shadow.d.ts +14 -0
- package/dist/operations/proof/java-package-shadow.d.ts.map +1 -0
- package/dist/operations/proof/java-package-shadow.js +389 -0
- package/dist/operations/proof/prolog-evaluator.d.ts +14 -0
- package/dist/operations/proof/prolog-evaluator.d.ts.map +1 -0
- package/dist/operations/proof/prolog-evaluator.js +247 -0
- package/dist/operations/proof/prolog-source-reader.d.ts +20 -0
- package/dist/operations/proof/prolog-source-reader.d.ts.map +1 -0
- package/dist/operations/proof/prolog-source-reader.js +1123 -0
- package/dist/operations/proof/source-code-readers.d.ts +6 -0
- package/dist/operations/proof/source-code-readers.d.ts.map +1 -1
- package/dist/operations/proof/source-code-readers.js +879 -75
- package/dist/plugins/approved-source-analyzers.generated.d.ts +13 -35
- package/dist/plugins/approved-source-analyzers.generated.d.ts.map +1 -1
- package/dist/plugins/approved-source-analyzers.generated.js +13 -35
- package/dist/plugins/plugin-install-check.d.ts +21 -0
- package/dist/plugins/plugin-install-check.d.ts.map +1 -0
- package/dist/plugins/plugin-install-check.js +62 -0
- package/dist/plugins/proof-reference-extractors.d.ts +20 -0
- package/dist/plugins/proof-reference-extractors.d.ts.map +1 -0
- package/dist/plugins/proof-reference-extractors.js +104 -0
- package/dist/plugins/reference-language-suggestion.d.ts +51 -0
- package/dist/plugins/reference-language-suggestion.d.ts.map +1 -0
- package/dist/plugins/reference-language-suggestion.js +277 -0
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +3 -1
- package/dist/plugins/source-analysis-service.d.ts.map +1 -1
- package/dist/plugins/source-analysis-service.js +4 -0
- package/dist/plugins/source-change-analysis.d.ts +26 -1
- package/dist/plugins/source-change-analysis.d.ts.map +1 -1
- package/dist/plugins/source-change-analysis.js +77 -5
- package/dist/plugins/source-classification.d.ts.map +1 -1
- package/dist/plugins/source-classification.js +23 -3
- package/dist/public/operations/catalog.d.ts +32 -7
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +3 -0
- package/dist/public/operations/evidence-floor.d.ts +8 -0
- package/dist/public/operations/evidence-floor.d.ts.map +1 -1
- package/dist/public/operations/evidence-floor.js +19 -1
- 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 +2 -1
- package/dist/public/operations/specs/check.d.ts +1 -1
- package/dist/public/operations/specs/mutation-schemas.d.ts +31 -6
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.d.ts +8 -0
- package/dist/public/operations/specs/reporting.d.ts.map +1 -1
- package/dist/public/operations/specs/reporting.js +26 -3
- package/dist/public/operations/specs/semantic.d.ts.map +1 -1
- package/dist/public/operations/specs/semantic.js +2 -1
- package/dist/public/operations/specs/upsert.d.ts +31 -6
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/symbol-coordinates-check.d.ts +11 -0
- package/dist/public/operations/symbol-coordinates-check.d.ts.map +1 -0
- package/dist/public/operations/symbol-coordinates-check.js +66 -0
- package/dist/public/proof-protocol.d.ts +31 -6
- package/dist/public/proof-protocol.d.ts.map +1 -1
- package/dist/public/proof-protocol.js +45 -15
- package/dist/public/proof-sources.d.ts +4 -2
- package/dist/public/proof-sources.d.ts.map +1 -1
- package/dist/public/proof-sources.js +43 -4
- package/dist/public/skills/kibi-usage/SKILL.md +6 -3
- package/dist/public/skills/kibi-usage/resources/prolog-proofs.md +207 -0
- package/dist/public/skills/kibi-usage/resources/proof.md +44 -3
- package/dist/schemas/entity.schema.json +34 -6
- package/dist/traceability/analysis-gate.d.ts +3 -1
- package/dist/traceability/analysis-gate.d.ts.map +1 -1
- package/dist/traceability/analysis-gate.js +9 -1
- package/dist/traceability/staged-file-coverage.d.ts.map +1 -1
- package/dist/traceability/staged-file-coverage.js +7 -2
- package/dist/traceability/symbol-extract.d.ts +17 -0
- package/dist/traceability/symbol-extract.d.ts.map +1 -1
- package/dist/traceability/symbol-extract.js +69 -15
- package/dist/traceability/validate.d.ts.map +1 -1
- package/dist/traceability/validate.js +5 -7
- package/dist/utils/first-sentence.d.ts +9 -0
- package/dist/utils/first-sentence.d.ts.map +1 -0
- package/dist/utils/first-sentence.js +52 -0
- package/dist/utils/rule-registry.generated.d.ts +6 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.js +7 -0
- package/package.json +5 -5
- package/src/public/operations/check-executor.ts +8 -0
- package/src/public/operations/evidence-floor.ts +29 -1
- package/src/public/operations/specs/check-rules.generated.ts +2 -1
- package/src/public/operations/specs/reporting.ts +38 -3
- package/src/public/operations/specs/semantic.ts +2 -1
- package/src/public/operations/symbol-coordinates-check.ts +79 -0
- package/src/public/proof-protocol-types.d.ts +22 -5
- package/src/public/proof-protocol.ts +78 -19
- package/src/public/proof-sources.ts +51 -3
- package/src/public/skills/kibi-usage/SKILL.md +6 -3
- package/src/public/skills/kibi-usage/resources/prolog-proofs.md +207 -0
- package/src/public/skills/kibi-usage/resources/proof.md +44 -3
- package/src/schemas/entity.schema.json +34 -6
|
@@ -0,0 +1,119 @@
|
|
|
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 path from "node:path";
|
|
19
|
+
const JS_FILE = /\.(?:[cm]?[jt]sx?)$/i;
|
|
20
|
+
const PYTHON_FILE = /\.py$/i;
|
|
21
|
+
// Symbol discovery resolves an ambiguous `.pl` file by its content; one that
|
|
22
|
+
// is Perl fails to load in SWI-Prolog, so the read refuses rather than guess.
|
|
23
|
+
const PROLOG_FILE = /\.(?:pl|plt)$/i;
|
|
24
|
+
/** The language whose evaluator reads `file`, or null for any other file. */
|
|
25
|
+
// implements REQ-kibi-multilingual-code-proofs
|
|
26
|
+
export function codeLanguage(file) {
|
|
27
|
+
if (JS_FILE.test(file))
|
|
28
|
+
return "js";
|
|
29
|
+
if (PYTHON_FILE.test(file))
|
|
30
|
+
return "python";
|
|
31
|
+
if (PROLOG_FILE.test(file))
|
|
32
|
+
return "prolog";
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const PROLOG_LOAD = /\b(?:use_module|ensure_loaded|consult|load_files|reexport|include)\s*\(\s*(?:library\(\s*([^)\s]+)\s*\)|'([^']+)'|"([^"]+)"|([a-z][\w/]*))/g;
|
|
36
|
+
const PROLOG_LOAD_LIST = /:-\s*\[([^\]]+)\]/g;
|
|
37
|
+
/**
|
|
38
|
+
* The files a SWI-Prolog source loads, read from its text: use_module,
|
|
39
|
+
* ensure_loaded, consult, load_files, reexport and include with a quoted or
|
|
40
|
+
* plain path or `library(X)`, and `:- [a, b]` load lists. Nothing runs.
|
|
41
|
+
*/
|
|
42
|
+
// implements REQ-kibi-multilingual-code-proofs
|
|
43
|
+
export function prologLoadSpecs(source) {
|
|
44
|
+
const specs = [];
|
|
45
|
+
for (const match of source.matchAll(PROLOG_LOAD)) {
|
|
46
|
+
if (match[1] !== undefined)
|
|
47
|
+
specs.push({ library: match[1] });
|
|
48
|
+
else {
|
|
49
|
+
const spec = match[2] ?? match[3] ?? match[4] ?? "";
|
|
50
|
+
if (spec !== "")
|
|
51
|
+
specs.push({ path: spec });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
for (const match of source.matchAll(PROLOG_LOAD_LIST))
|
|
55
|
+
for (const item of (match[1] ?? "").split(",")) {
|
|
56
|
+
const spec = item.trim().replace(/^['"]|['"]$/g, "");
|
|
57
|
+
if (spec !== "")
|
|
58
|
+
specs.push({ path: spec });
|
|
59
|
+
}
|
|
60
|
+
return specs;
|
|
61
|
+
}
|
|
62
|
+
export function stripPrologExtension(file) {
|
|
63
|
+
return path.normalize(file).replace(/\.(?:pl|plt|pro)$/i, "");
|
|
64
|
+
}
|
|
65
|
+
/** How a reason names a language. */
|
|
66
|
+
/**
|
|
67
|
+
* Languages whose references a qualified plugin reads (kibi-plugin-treesitter
|
|
68
|
+
* through kibi.reference-extractor.v1). Kibi itself runs nothing for them.
|
|
69
|
+
*/
|
|
70
|
+
// implements REQ-kibi-tree-sitter-references
|
|
71
|
+
export const PLUGIN_REFERENCE_LANGUAGES = [
|
|
72
|
+
{ name: "Go", pattern: /\.go$/i },
|
|
73
|
+
{ name: "Java", pattern: /\.java$/i },
|
|
74
|
+
{ name: "C#", pattern: /\.cs$/i },
|
|
75
|
+
{ name: "Rust", pattern: /\.rs$/i },
|
|
76
|
+
];
|
|
77
|
+
/**
|
|
78
|
+
* The data-only kibi-lang-* packs kibi-plugin-treesitter reads these
|
|
79
|
+
* languages with, by the file extensions its catalog maps to them. Every
|
|
80
|
+
* grammar ships in a pack; `.pl` counts as SWI-Prolog here.
|
|
81
|
+
*/
|
|
82
|
+
// implements REQ-kibi-tree-sitter-language-packs
|
|
83
|
+
export const PLUGIN_LANGUAGE_PACKS = [
|
|
84
|
+
{ pack: "kibi-lang-go", name: "Go", pattern: /\.go$/i },
|
|
85
|
+
{ pack: "kibi-lang-rust", name: "Rust", pattern: /\.rs$/i },
|
|
86
|
+
{ pack: "kibi-lang-java", name: "Java", pattern: /\.java$/i },
|
|
87
|
+
{ pack: "kibi-lang-csharp", name: "C#", pattern: /\.cs$/i },
|
|
88
|
+
{ pack: "kibi-lang-php", name: "PHP", pattern: /\.php$/i },
|
|
89
|
+
{ pack: "kibi-lang-c", name: "C", pattern: /\.c$/i },
|
|
90
|
+
{ pack: "kibi-lang-cpp", name: "C++", pattern: /\.(?:cc|cpp|cxx|hh|hpp|hxx)$/i },
|
|
91
|
+
{ pack: "kibi-lang-bash", name: "Bash", pattern: /\.(?:bash|sh)$/i },
|
|
92
|
+
{ pack: "kibi-lang-ruby", name: "Ruby", pattern: /\.rb$/i },
|
|
93
|
+
{ pack: "kibi-lang-hcl", name: "Terraform/HCL", pattern: /\.(?:tf|hcl)$/i },
|
|
94
|
+
{ pack: "kibi-lang-python", name: "Python", pattern: /\.pyi?$/i },
|
|
95
|
+
{ pack: "kibi-lang-prolog", name: "SWI-Prolog", pattern: /\.(?:pl|plt)$/i },
|
|
96
|
+
];
|
|
97
|
+
export function pluginReferenceLanguage(file) {
|
|
98
|
+
return PLUGIN_REFERENCE_LANGUAGES.find((language) => language.pattern.test(file))?.name ?? null;
|
|
99
|
+
}
|
|
100
|
+
export const CODE_LANGUAGE_NAMES = {
|
|
101
|
+
js: "TypeScript or JavaScript",
|
|
102
|
+
python: "Python",
|
|
103
|
+
prolog: "SWI-Prolog",
|
|
104
|
+
};
|
|
105
|
+
/** How a reason names the language of `file`. */
|
|
106
|
+
export function languageName(file) {
|
|
107
|
+
const language = codeLanguage(file);
|
|
108
|
+
return language === null ? "an unsupported language" : CODE_LANGUAGE_NAMES[language];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* The one refusal for a file whose language a reader cannot read: what reads
|
|
112
|
+
* which languages, and the files it was handed outside them.
|
|
113
|
+
*/
|
|
114
|
+
// implements REQ-kibi-multilingual-code-proofs
|
|
115
|
+
export function unsupportedLanguageReason(reader, supported, files) {
|
|
116
|
+
const names = supported.map((language) => language === "js" ? "TypeScript, JavaScript" : CODE_LANGUAGE_NAMES[language]);
|
|
117
|
+
const listed = names.length > 1 ? `${names.slice(0, -1).join(", ")} and ${names.at(-1)}` : (names[0] ?? "no");
|
|
118
|
+
return `${reader} reads ${listed} files, not ${files.slice(0, 3).join(", ")}${files.length > 3 ? ` and ${files.length - 3} more` : ""}`;
|
|
119
|
+
}
|
|
@@ -3,9 +3,11 @@ import type { ProofContract } from "../../public/proof-protocol.js";
|
|
|
3
3
|
import { type LanguageSpec } from "./regular-language.js";
|
|
4
4
|
/** The most predicate calls one rule certificate may need. */
|
|
5
5
|
export declare const MAX_TABLE_ROWS = 100000;
|
|
6
|
+
/** A code export Kibi reads; `arg` projects a Prolog predicate's solutions. */
|
|
6
7
|
export type Resolved = {
|
|
7
8
|
file: string;
|
|
8
9
|
export: string;
|
|
10
|
+
arg?: number;
|
|
9
11
|
};
|
|
10
12
|
export type TableRow = Readonly<{
|
|
11
13
|
args: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-models.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/code-models.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EACL,KAAK,YAAY,EAKlB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"code-models.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/code-models.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,8 @@ import { languageAccepts, languagesDisjoint, languagesEqual, UnsupportedPattern,
|
|
|
27
27
|
import { loadSymbol } from "./code-certificates.js";
|
|
28
28
|
import { describeSource, readSource } from "../../public/proof-sources.js";
|
|
29
29
|
import { runCodeEvaluator, TS_RESOLVE_HOOKS } from "./code-runner.js";
|
|
30
|
+
import { CODE_LANGUAGE_NAMES, codeLanguage, languageName, } from "./code-languages.js";
|
|
31
|
+
import { PROLOG_EVALUATOR } from "./prolog-evaluator.js";
|
|
30
32
|
import { evaluateSourceCode } from "./source-code-readers.js";
|
|
31
33
|
/** The most predicate calls one rule certificate may need. */
|
|
32
34
|
export const MAX_TABLE_ROWS = 100_000;
|
|
@@ -317,9 +319,13 @@ async function resolveReference(context, reference, label) {
|
|
|
317
319
|
const symbol = await loadSymbol(context, reference.symbol_id);
|
|
318
320
|
if (!symbol || symbol.sourceFile === "")
|
|
319
321
|
return `the ${label} symbol ${reference.symbol_id} has no source file`;
|
|
322
|
+
const file = path.resolve(context.workspaceRoot, symbol.sourceFile);
|
|
323
|
+
if (reference.arg !== undefined && codeLanguage(file) !== "prolog")
|
|
324
|
+
return `${label}.arg applies only to a SWI-Prolog predicate, not to ${languageName(file)} in ${symbol.sourceFile}`;
|
|
320
325
|
return {
|
|
321
|
-
file
|
|
326
|
+
file,
|
|
322
327
|
export: reference.export ?? symbol.title,
|
|
328
|
+
...(reference.arg === undefined ? {} : { arg: reference.arg }),
|
|
323
329
|
};
|
|
324
330
|
}
|
|
325
331
|
/**
|
|
@@ -328,16 +334,16 @@ async function resolveReference(context, reference, label) {
|
|
|
328
334
|
*/
|
|
329
335
|
// implements REQ-kibi-non-numeric-proof-kinds
|
|
330
336
|
export function evaluateCodeModel(workspaceRoot, files, plan) {
|
|
331
|
-
const
|
|
332
|
-
if (
|
|
337
|
+
const languages = [...new Set(files.map((file) => codeLanguage(file.file)))];
|
|
338
|
+
if (languages.length > 1)
|
|
333
339
|
return {
|
|
334
340
|
ok: false,
|
|
335
|
-
reason:
|
|
341
|
+
reason: `the contract's sources mix ${languages.map((language) => (language === null ? "unsupported" : CODE_LANGUAGE_NAMES[language])).join(" and ")} files; one certificate reads one language`,
|
|
336
342
|
};
|
|
337
343
|
const first = files[0];
|
|
338
344
|
if (first === undefined)
|
|
339
345
|
return { ok: false, reason: "the contract names no source" };
|
|
340
|
-
const run = runCodeEvaluator(workspaceRoot, path.relative(workspaceRoot, first.file), { js: jsModelEvaluator(), python: PYTHON_MODEL_EVALUATOR }, [JSON.stringify(plan)], (parsed) => parsed !== null && typeof parsed === "object" && "ok" in parsed);
|
|
346
|
+
const run = runCodeEvaluator(workspaceRoot, path.relative(workspaceRoot, first.file), { js: jsModelEvaluator(), python: PYTHON_MODEL_EVALUATOR, prolog: PROLOG_EVALUATOR }, [JSON.stringify(plan)], (parsed) => parsed !== null && typeof parsed === "object" && "ok" in parsed);
|
|
341
347
|
if (!run.ok)
|
|
342
348
|
return {
|
|
343
349
|
ok: false,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { type CodeLanguage } from "./code-languages.js";
|
|
1
2
|
/**
|
|
2
3
|
* How Kibi runs a small evaluator script against the workspace's own code:
|
|
3
4
|
* the TypeScript and JavaScript runners (bun, the workspace's tsx, node with
|
|
4
|
-
* type stripping)
|
|
5
|
+
* type stripping), the Python interpreters a project uses and the SWI-Prolog
|
|
6
|
+
* Kibi's engine runs on. The proof kinds
|
|
5
7
|
* that read a model from the code (exhaustive domains, rule tables, state
|
|
6
8
|
* machines, patterns, data schemas, route tables) all load code this way.
|
|
7
9
|
*/
|
|
@@ -25,6 +27,7 @@ export declare function spawnSyncThroughFiles(command: string, args: readonly st
|
|
|
25
27
|
cwd?: string;
|
|
26
28
|
input?: string;
|
|
27
29
|
timeout: number;
|
|
30
|
+
env?: NodeJS.ProcessEnv;
|
|
28
31
|
}>): {
|
|
29
32
|
error: Error | undefined;
|
|
30
33
|
status: number | null;
|
|
@@ -36,21 +39,21 @@ export declare function spawnSyncThroughFiles(command: string, args: readonly st
|
|
|
36
39
|
* prints last. A TypeScript or JavaScript file runs with bun when it is on
|
|
37
40
|
* PATH, else the workspace's tsx, else node's type stripping (which retries
|
|
38
41
|
* extensionless relative imports as TypeScript files); a Python file (`.py`)
|
|
39
|
-
* runs with the first interpreter pythonDomainInterpreters finds
|
|
40
|
-
*
|
|
42
|
+
* runs with the first interpreter pythonDomainInterpreters finds; a
|
|
43
|
+
* SWI-Prolog file (`.pl`, `.plt`) runs with the SWI-Prolog Kibi resolves for
|
|
44
|
+
* its engine. A runner whose output `accept` rejects (or that fails to
|
|
45
|
+
* start) yields to the next. A file in a language the caller has no script
|
|
46
|
+
* for refuses.
|
|
41
47
|
*/
|
|
42
|
-
export declare function runCodeEvaluator(workspaceRoot: string, sourceFile: string, scripts: Readonly<{
|
|
43
|
-
js: string;
|
|
44
|
-
python: string;
|
|
45
|
-
}>, args: readonly string[], accept?: (parsed: unknown) => boolean, options?: Readonly<{
|
|
48
|
+
export declare function runCodeEvaluator(workspaceRoot: string, sourceFile: string, scripts: Readonly<Partial<Record<CodeLanguage, string>>>, args: readonly string[], accept?: (parsed: unknown) => boolean, options?: Readonly<{
|
|
46
49
|
runners?: readonly ("bun" | "tsx" | "node")[];
|
|
47
50
|
}>): {
|
|
48
51
|
ok: true;
|
|
49
52
|
value: unknown;
|
|
50
|
-
|
|
53
|
+
language: CodeLanguage;
|
|
51
54
|
} | {
|
|
52
55
|
ok: false;
|
|
53
56
|
failure: string;
|
|
54
|
-
|
|
57
|
+
language: CodeLanguage | null;
|
|
55
58
|
};
|
|
56
59
|
//# sourceMappingURL=code-runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-runner.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/code-runner.ts"],"names":[],"mappings":"AA+BA
|
|
1
|
+
{"version":3,"file":"code-runner.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/code-runner.ts"],"names":[],"mappings":"AA+BA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;GAOG;AAKH,eAAO,MAAM,gBAAgB,8jBAgB5B,CAAC;AAEF,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ/E;AAED;;;;;;GAMG;AAEH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,EAAE,CAwBV;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,QAAQ,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,CAAC,GACD;IAAE,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA4BrF;AAeD;;;;;;;;;;GAUG;AAEH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,EACxD,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,MAAM,GAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAoB,EACjD,OAAO,GAAE,QAAQ,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,CAAC,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAC/C,CAAM,GAEL;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACpD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;CAAE,CAoFhE"}
|
|
@@ -19,10 +19,13 @@ import { spawnSync } from "node:child_process";
|
|
|
19
19
|
import { closeSync, existsSync, mkdtempSync, openSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
|
|
20
20
|
import os from "node:os";
|
|
21
21
|
import path from "node:path";
|
|
22
|
+
import { resolveSwipl, swiplChildEnv } from "../../prolog/swipl-resolver.js";
|
|
23
|
+
import { codeLanguage, unsupportedLanguageReason, } from "./code-languages.js";
|
|
22
24
|
/**
|
|
23
25
|
* How Kibi runs a small evaluator script against the workspace's own code:
|
|
24
26
|
* the TypeScript and JavaScript runners (bun, the workspace's tsx, node with
|
|
25
|
-
* type stripping)
|
|
27
|
+
* type stripping), the Python interpreters a project uses and the SWI-Prolog
|
|
28
|
+
* Kibi's engine runs on. The proof kinds
|
|
26
29
|
* that read a model from the code (exhaustive domains, rule tables, state
|
|
27
30
|
* machines, patterns, data schemas, route tables) all load code this way.
|
|
28
31
|
*/
|
|
@@ -111,6 +114,7 @@ export function spawnSyncThroughFiles(command, args, options) {
|
|
|
111
114
|
try {
|
|
112
115
|
run = spawnSync(command, [...args], {
|
|
113
116
|
cwd: options.cwd,
|
|
117
|
+
...(options.env === undefined ? {} : { env: options.env }),
|
|
114
118
|
stdio: fds,
|
|
115
119
|
timeout: options.timeout,
|
|
116
120
|
});
|
|
@@ -131,70 +135,109 @@ export function spawnSyncThroughFiles(command, args, options) {
|
|
|
131
135
|
}
|
|
132
136
|
}
|
|
133
137
|
/** The line of a runner's stderr that names the failure. */
|
|
134
|
-
function failureLine(stderr,
|
|
138
|
+
function failureLine(stderr, language) {
|
|
135
139
|
const lines = stderr
|
|
136
140
|
.trim()
|
|
137
141
|
.split("\n")
|
|
138
142
|
.map((line) => line.trim())
|
|
139
143
|
.filter((line) => line !== "");
|
|
140
144
|
// A Python traceback names the exception on its last line.
|
|
141
|
-
return (python ? lines.at(-1) : lines[0]) ?? "";
|
|
145
|
+
return (language === "python" ? lines.at(-1) : lines[0]) ?? "";
|
|
142
146
|
}
|
|
143
147
|
/**
|
|
144
148
|
* Run an evaluator script against the workspace code and return the JSON it
|
|
145
149
|
* prints last. A TypeScript or JavaScript file runs with bun when it is on
|
|
146
150
|
* PATH, else the workspace's tsx, else node's type stripping (which retries
|
|
147
151
|
* extensionless relative imports as TypeScript files); a Python file (`.py`)
|
|
148
|
-
* runs with the first interpreter pythonDomainInterpreters finds
|
|
149
|
-
*
|
|
152
|
+
* runs with the first interpreter pythonDomainInterpreters finds; a
|
|
153
|
+
* SWI-Prolog file (`.pl`, `.plt`) runs with the SWI-Prolog Kibi resolves for
|
|
154
|
+
* its engine. A runner whose output `accept` rejects (or that fails to
|
|
155
|
+
* start) yields to the next. A file in a language the caller has no script
|
|
156
|
+
* for refuses.
|
|
150
157
|
*/
|
|
151
|
-
// implements REQ-kibi-non-numeric-proof-kinds
|
|
158
|
+
// implements REQ-kibi-non-numeric-proof-kinds, REQ-kibi-multilingual-code-proofs
|
|
152
159
|
export function runCodeEvaluator(workspaceRoot, sourceFile, scripts, args, accept = () => true, options = {}) {
|
|
153
|
-
const
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
160
|
+
const language = codeLanguage(sourceFile);
|
|
161
|
+
const script = language === null ? undefined : scripts[language];
|
|
162
|
+
if (language === null || script === undefined)
|
|
163
|
+
return {
|
|
164
|
+
ok: false,
|
|
165
|
+
failure: unsupportedLanguageReason("this reader", Object.keys(scripts).filter((key) => scripts[key] !== undefined), [sourceFile]),
|
|
166
|
+
language,
|
|
167
|
+
};
|
|
168
|
+
const fail = (failure) => ({ ok: false, failure, language });
|
|
169
|
+
let scriptDir = null;
|
|
170
|
+
let runners;
|
|
171
|
+
if (language === "prolog") {
|
|
172
|
+
let swipl;
|
|
173
|
+
try {
|
|
174
|
+
swipl = resolveSwipl();
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
return fail(error instanceof Error ? error.message.split("\n")[0] ?? "" : String(error));
|
|
178
|
+
}
|
|
179
|
+
// swipl runs a script from a file, not from an argument.
|
|
180
|
+
scriptDir = mkdtempSync(path.join(os.tmpdir(), "kibi-prolog-"));
|
|
181
|
+
const scriptFile = path.join(scriptDir, "evaluator.pl");
|
|
182
|
+
writeFileSync(scriptFile, script);
|
|
183
|
+
runners = [
|
|
184
|
+
{
|
|
185
|
+
command: swipl.bin,
|
|
186
|
+
argv: [scriptFile, "--"],
|
|
187
|
+
env: { ...process.env, ...swiplChildEnv(swipl) },
|
|
188
|
+
},
|
|
189
|
+
];
|
|
190
|
+
}
|
|
191
|
+
else if (language === "python")
|
|
192
|
+
runners = pythonDomainInterpreters(workspaceRoot, sourceFile).map((interpreter) => ({ command: interpreter, argv: ["-c", script] }));
|
|
193
|
+
else {
|
|
194
|
+
const tsx = workspaceBin(workspaceRoot, "tsx");
|
|
195
|
+
runners = (options.runners ?? ["bun", "tsx", "node"]).flatMap((runner) => {
|
|
161
196
|
if (runner === "bun")
|
|
162
|
-
return [
|
|
197
|
+
return [{ command: "bun", argv: ["-e", script] }];
|
|
163
198
|
if (runner === "tsx")
|
|
164
199
|
return tsx === null
|
|
165
200
|
? []
|
|
166
|
-
: [
|
|
201
|
+
: [{ command: tsx, argv: ["--eval", script, "--"] }];
|
|
167
202
|
return [
|
|
168
|
-
|
|
169
|
-
process.execPath,
|
|
170
|
-
[
|
|
203
|
+
{
|
|
204
|
+
command: process.execPath,
|
|
205
|
+
argv: [
|
|
171
206
|
"--experimental-strip-types",
|
|
172
207
|
"--no-warnings",
|
|
173
208
|
"--input-type=module",
|
|
174
209
|
"-e",
|
|
175
|
-
|
|
210
|
+
script,
|
|
176
211
|
],
|
|
177
|
-
|
|
212
|
+
},
|
|
178
213
|
];
|
|
179
214
|
});
|
|
215
|
+
}
|
|
180
216
|
let failure = "";
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
217
|
+
try {
|
|
218
|
+
for (const { command, argv, env } of runners) {
|
|
219
|
+
const run = spawnSyncThroughFiles(command, [...argv, ...args], {
|
|
220
|
+
cwd: workspaceRoot,
|
|
221
|
+
timeout: 60_000,
|
|
222
|
+
...(env === undefined ? {} : { env }),
|
|
223
|
+
});
|
|
224
|
+
if (run.error)
|
|
225
|
+
continue;
|
|
226
|
+
const line = run.stdout.trim().split("\n").pop() ?? "";
|
|
227
|
+
try {
|
|
228
|
+
const parsed = JSON.parse(line);
|
|
229
|
+
if (accept(parsed))
|
|
230
|
+
return { ok: true, value: parsed, language };
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// Fall through to the next runner.
|
|
234
|
+
}
|
|
235
|
+
failure = failureLine(run.stderr, language);
|
|
196
236
|
}
|
|
197
|
-
failure = failureLine(run.stderr, python);
|
|
198
237
|
}
|
|
199
|
-
|
|
238
|
+
finally {
|
|
239
|
+
if (scriptDir !== null)
|
|
240
|
+
rmSync(scriptDir, { recursive: true, force: true });
|
|
241
|
+
}
|
|
242
|
+
return fail(failure);
|
|
200
243
|
}
|
|
@@ -23,6 +23,14 @@ export declare function loadCoveredBySymbolsByTest(prolog: Pick<PrologPort, "que
|
|
|
23
23
|
* make every receipt of that test silently fall back to snapshot matching.
|
|
24
24
|
*/
|
|
25
25
|
export declare function receiptBindingContract(raw: unknown): ProofContract | null;
|
|
26
|
+
/**
|
|
27
|
+
* The code symbols a certificate contract loads at ingest: its domain, value
|
|
28
|
+
* constants, rule predicates and domains, initial states and pattern. They
|
|
29
|
+
* enter the binding with the test's own scope, so editing the file a domain
|
|
30
|
+
* is read from stales the receipt even when that symbol is not linked
|
|
31
|
+
* covered_by the test. A symbol already in scope binds as before.
|
|
32
|
+
*/
|
|
33
|
+
export declare function contractCodeSymbolIds(contract: ProofContract): string[];
|
|
26
34
|
/** Every project source a contract reads: its source, source counts and source domains. */
|
|
27
35
|
export declare function contractSources(contract: ProofContract): SourceSpec[];
|
|
28
36
|
export type ReceiptBindingInput = Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-scope.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/code-scope.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAE3E,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,+BAA+B,CAAC;AACpF,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,gCAAgC,CAAC;AAKxC;;;;;;;;;;;GAWG;AAEH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,EACjB,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAClC,MAAM,EAAE,CAoBV;AAED,4EAA4E;AAE5E,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAiBjD;AAQD;;;;;GAKG;AAEH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAmBzE;AAED,2FAA2F;AAE3F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,EAAE,CAQrE;AAGD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,2EAA2E;IAC3E,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AAEH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7B;AAED;;;;;;;;GAQG;AAEH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"code-scope.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/code-scope.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAE3E,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,+BAA+B,CAAC;AACpF,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,gCAAgC,CAAC;AAKxC;;;;;;;;;;;GAWG;AAEH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO,EACjB,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAClC,MAAM,EAAE,CAoBV;AAED,4EAA4E;AAE5E,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAiBjD;AAQD;;;;;GAKG;AAEH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAmBzE;AAED;;;;;;GAMG;AAEH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE,CAcvE;AAED,2FAA2F;AAE3F,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU,EAAE,CAQrE;AAGD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,2EAA2E;IAC3E,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AAEH,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7B;AAED;;;;;;;;GAQG;AAEH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC,CA0CxC"}
|
|
@@ -99,6 +99,32 @@ export function receiptBindingContract(raw) {
|
|
|
99
99
|
...optionalProofContractFields(contract),
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* The code symbols a certificate contract loads at ingest: its domain, value
|
|
104
|
+
* constants, rule predicates and domains, initial states and pattern. They
|
|
105
|
+
* enter the binding with the test's own scope, so editing the file a domain
|
|
106
|
+
* is read from stales the receipt even when that symbol is not linked
|
|
107
|
+
* covered_by the test. A symbol already in scope binds as before.
|
|
108
|
+
*/
|
|
109
|
+
// implements REQ-kibi-multilingual-code-proofs
|
|
110
|
+
export function contractCodeSymbolIds(contract) {
|
|
111
|
+
const ids = new Set();
|
|
112
|
+
const add = (entry) => {
|
|
113
|
+
const row = record(entry);
|
|
114
|
+
if (row !== null && typeof row.symbol_id === "string" && row.symbol_id !== "")
|
|
115
|
+
ids.add(row.symbol_id);
|
|
116
|
+
};
|
|
117
|
+
add(contract.domain_source);
|
|
118
|
+
add(contract.initial_source);
|
|
119
|
+
add(contract.pattern_source);
|
|
120
|
+
for (const entry of contract.value_source ?? [])
|
|
121
|
+
add(entry);
|
|
122
|
+
for (const entry of Object.values(contract.domains ?? {}))
|
|
123
|
+
add(entry);
|
|
124
|
+
for (const entry of Object.values(contract.predicate_source ?? {}))
|
|
125
|
+
add(entry);
|
|
126
|
+
return [...ids].sort();
|
|
127
|
+
}
|
|
102
128
|
/** Every project source a contract reads: its source, source counts and source domains. */
|
|
103
129
|
// implements REQ-kibi-source-proof-kinds
|
|
104
130
|
export function contractSources(contract) {
|
|
@@ -154,7 +180,10 @@ export async function currentReceiptBindingHashes(input) {
|
|
|
154
180
|
const authored = await input.readFile(absolute);
|
|
155
181
|
const withoutReceipts = removeFrontmatterBlock(authored, "proof_receipts") ?? authored;
|
|
156
182
|
const withoutLinks = removeFrontmatterBlock(withoutReceipts, "links") ?? withoutReceipts;
|
|
157
|
-
const codeScope = resolveBoundSymbolScope(join(input.workspaceRoot, ".kb", "symbols.yaml"),
|
|
183
|
+
const codeScope = resolveBoundSymbolScope(join(input.workspaceRoot, ".kb", "symbols.yaml"), [
|
|
184
|
+
...receiptCodeScopeSymbolIds(contract, input.test.proof_bindings, input.coveredBySymbols),
|
|
185
|
+
...contractCodeSymbolIds(contract),
|
|
186
|
+
]);
|
|
158
187
|
// A contract that reads project sources stales when what it reads
|
|
159
188
|
// changes: each file's contents and the set of files a glob matches.
|
|
160
189
|
const scope = [
|
|
@@ -43,6 +43,8 @@ export type ClaimExplainEntry = Readonly<{
|
|
|
43
43
|
applicable: boolean;
|
|
44
44
|
level: string | null;
|
|
45
45
|
blocker?: string;
|
|
46
|
+
/** Why a claim with a derived binding is still not proved. */
|
|
47
|
+
notProved?: string;
|
|
46
48
|
bindings: readonly Readonly<{
|
|
47
49
|
test: string;
|
|
48
50
|
kind: string;
|
|
@@ -51,6 +53,11 @@ export type ClaimExplainEntry = Readonly<{
|
|
|
51
53
|
reason?: string;
|
|
52
54
|
}>[];
|
|
53
55
|
}>;
|
|
56
|
+
export type ClaimRefutation = Readonly<{
|
|
57
|
+
test: string;
|
|
58
|
+
claimKey: string;
|
|
59
|
+
reason: string;
|
|
60
|
+
}>;
|
|
54
61
|
export type RequirementProofExplainView = {
|
|
55
62
|
readonly kind: "requirement";
|
|
56
63
|
readonly id: string;
|
|
@@ -63,6 +70,10 @@ export type RequirementProofExplainView = {
|
|
|
63
70
|
test: string;
|
|
64
71
|
reason: string;
|
|
65
72
|
}[];
|
|
73
|
+
/** Claims a proof refuted: the test and what it read that breaks the claim. */
|
|
74
|
+
readonly refutations?: readonly ClaimRefutation[];
|
|
75
|
+
/** Proof-bearing symbols without source coordinates. */
|
|
76
|
+
readonly missingCoordinateSymbols?: readonly string[];
|
|
66
77
|
/** How many applicable claims reach each level, and which are not proved. */
|
|
67
78
|
readonly claimSummary?: ClaimSummary;
|
|
68
79
|
readonly unprovedClaims?: readonly string[];
|
|
@@ -151,6 +162,8 @@ export type SymbolProofExplainView = {
|
|
|
151
162
|
};
|
|
152
163
|
export type ProofExplainView = RequirementProofExplainView | SymbolProofExplainView;
|
|
153
164
|
export declare function projectRequirementExplain(proof: Record<string, unknown>): RequirementProofExplainView;
|
|
165
|
+
/** One plain clause per gap, naming what it is about where Kibi knows. */
|
|
166
|
+
export declare function gapReason(gap: string, view: Pick<RequirementProofExplainView, "missingCoordinateSymbols">): string;
|
|
154
167
|
export declare function projectSymbolExplain(payload: Record<string, unknown>): SymbolProofExplainView;
|
|
155
168
|
export declare function renderProofExplain(view: ProofExplainView): string;
|
|
156
169
|
export declare function classifyExplainTarget(id: string | undefined, options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/explain.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../src/operations/proof/explain.ts"],"names":[],"mappings":"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"}
|