kibi-cli 2.38.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-json-command.d.ts.map +1 -1
- package/dist/cli-json-command.js +4 -0
- package/dist/cli-register-foundation.js +2 -2
- package/dist/cli-register-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +33 -9
- package/dist/commands/coverage.d.ts +1 -0
- package/dist/commands/coverage.d.ts.map +1 -1
- package/dist/commands/coverage.js +40 -0
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +29 -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 +60 -8
- 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/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +6 -0
- 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/markdown.d.ts +6 -0
- package/dist/extractors/markdown.d.ts.map +1 -1
- package/dist/extractors/markdown.js +21 -0
- 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.d.ts.map +1 -1
- package/dist/operations/bootstrap/discovery-evidence.js +44 -2
- package/dist/operations/bootstrap/discovery.d.ts.map +1 -1
- package/dist/operations/bootstrap/discovery.js +1 -0
- 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 +76 -0
- package/dist/operations/proof/explain.d.ts.map +1 -1
- package/dist/operations/proof/explain.js +228 -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/operations/semantic-advisor/analyze-prose.d.ts +9 -1
- package/dist/operations/semantic-advisor/analyze-prose.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/analyze-prose.js +21 -0
- package/dist/operations/semantic-advisor/case-preview.d.ts +24 -0
- package/dist/operations/semantic-advisor/case-preview.d.ts.map +1 -0
- package/dist/operations/semantic-advisor/case-preview.js +216 -0
- package/dist/operations/semantic-advisor/shared.d.ts.map +1 -1
- package/dist/operations/semantic-advisor/shared.js +3 -0
- package/dist/operations/semantic-advisor/types.d.ts +23 -0
- package/dist/operations/semantic-advisor/types.d.ts.map +1 -1
- package/dist/plugins/approved-source-analyzers.generated.d.ts +15 -34
- package/dist/plugins/approved-source-analyzers.generated.d.ts.map +1 -1
- package/dist/plugins/approved-source-analyzers.generated.js +15 -34
- 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 +2 -2
- package/dist/plugins/source-classification.d.ts.map +1 -1
- package/dist/plugins/source-classification.js +45 -1
- package/dist/public/operations/catalog.d.ts +62 -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/repair-plan.d.ts +46 -0
- package/dist/public/operations/repair-plan.d.ts.map +1 -1
- package/dist/public/operations/repair-plan.js +110 -1
- package/dist/public/operations/schema6-check-actions.js +1 -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 +3 -1
- package/dist/public/operations/specs/check.d.ts +1 -1
- package/dist/public/operations/specs/mutation-schemas.d.ts +61 -6
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/mutation-schemas.js +30 -0
- 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 +61 -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/schemas/entity.d.ts.map +1 -1
- package/dist/public/schemas/entity.js +59 -0
- package/dist/public/skills/kibi-commit-review/SKILL.md +6 -2
- package/dist/public/skills/kibi-decisions/SKILL.md +7 -2
- package/dist/public/skills/kibi-decisions/resources/signoff-views.md +3 -1
- package/dist/public/skills/kibi-usage/SKILL.md +14 -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 +126 -6
- package/dist/search-answer.d.ts +3 -2
- package/dist/search-answer.d.ts.map +1 -1
- package/dist/search-answer.js +56 -3
- 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/impact-knowledge.d.ts.map +1 -1
- package/dist/traceability/impact-knowledge.js +2 -0
- 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/temp-kb.d.ts.map +1 -1
- package/dist/traceability/temp-kb.js +11 -1
- package/dist/traceability/validate.d.ts.map +1 -1
- package/dist/traceability/validate.js +5 -7
- package/dist/types/entities.d.ts +12 -0
- package/dist/types/entities.d.ts.map +1 -1
- package/dist/usage-telemetry.d.ts +9 -0
- package/dist/usage-telemetry.d.ts.map +1 -1
- package/dist/usage-telemetry.js +50 -4
- 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 +11 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.js +13 -0
- package/package.json +5 -5
- package/schema/entities.pl +12 -0
- package/src/public/operations/check-executor.ts +8 -0
- package/src/public/operations/evidence-floor.ts +29 -1
- package/src/public/operations/repair-plan.ts +152 -1
- package/src/public/operations/schema6-check-actions.ts +1 -1
- package/src/public/operations/specs/check-rules.generated.ts +3 -1
- package/src/public/operations/specs/mutation-schemas.ts +34 -0
- 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/schemas/entity.ts +65 -0
- package/src/public/skills/kibi-commit-review/SKILL.md +6 -2
- package/src/public/skills/kibi-decisions/SKILL.md +7 -2
- package/src/public/skills/kibi-decisions/resources/signoff-views.md +3 -1
- package/src/public/skills/kibi-usage/SKILL.md +14 -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 +126 -6
package/dist/commands/migrate.js
CHANGED
|
@@ -27,6 +27,7 @@ import { applySourcePathRepairs, findSourceRepairs, } from "../operations/migrat
|
|
|
27
27
|
import { applySupersededClosures, planSupersededClosures, } from "../operations/migration/superseded-closure.js";
|
|
28
28
|
import { coordinateRefreshFailureMessage, readGeneratedManifestBytes, refreshCoordinatesAfterMigration, } from "../operations/migration/symbol-coordinates-refresh.js";
|
|
29
29
|
import { applySymbolLegacyLinks, planSymbolLegacyLinks, } from "../operations/migration/symbol-legacy-links.js";
|
|
30
|
+
import { noteCliErrorCategory } from "../usage-telemetry.js";
|
|
30
31
|
import { resolveBranchAttachment } from "../utils/branch-resolver.js";
|
|
31
32
|
import { defaultKbManifest, readKbManifest, readKbManifestStatus, writeKbManifest, } from "../utils/kb-manifest.js";
|
|
32
33
|
import { CANONICAL_ENTITY_PATHS, KB_PATHS } from "../utils/kb-paths.js";
|
|
@@ -34,6 +35,7 @@ import { manifestMergeDriverGaps, mergeDriverSetup, } from "../utils/merge-drive
|
|
|
34
35
|
import { LATEST_KB_SCHEMA_VERSION, getSchemaVersionStatus, normalizeSchemaVersion, } from "../utils/schema-version.js";
|
|
35
36
|
import { updateGitIgnore } from "./init-helpers.js";
|
|
36
37
|
import { applyLegacyStorageMigration, planLegacyStorageMigration, } from "./legacy-storage-migration.js";
|
|
38
|
+
import { describePlanChange, findPrintedPlan, recordPrintedPlan, } from "./migrate-plan-record.js";
|
|
37
39
|
const MIGRATION_AUDIT_VERSION = 1;
|
|
38
40
|
const SCHEMA_MIGRATION_STEPS = [
|
|
39
41
|
{
|
|
@@ -440,7 +442,7 @@ export function warnMigrationRequiredWithoutYes() {
|
|
|
440
442
|
}
|
|
441
443
|
// implements REQ-003
|
|
442
444
|
export async function migrateCommand(options = {}) {
|
|
443
|
-
if (options
|
|
445
|
+
if (applySafeRequested(options) ||
|
|
444
446
|
options.format === "json" ||
|
|
445
447
|
(options.yes !== true && options.dryRun !== true)) {
|
|
446
448
|
return migratePlanCommand(options);
|
|
@@ -1053,25 +1055,68 @@ function printApplySummary(content) {
|
|
|
1053
1055
|
}
|
|
1054
1056
|
console.log("Run 'kibi migrate' for the remaining actions, or add --format json for the full result.");
|
|
1055
1057
|
}
|
|
1058
|
+
/** True for `--apply-safe`, with or without the hash it may carry. */
|
|
1059
|
+
function applySafeRequested(options) {
|
|
1060
|
+
return (options.applySafe === true ||
|
|
1061
|
+
(typeof options.applySafe === "string" && options.applySafe !== ""));
|
|
1062
|
+
}
|
|
1063
|
+
/** The exact command that applies the plan with this hash. */
|
|
1064
|
+
// implements REQ-cli-schema-migration
|
|
1065
|
+
export function applyPlanCommand(planHash) {
|
|
1066
|
+
return `kibi migrate --apply-safe ${planHash}`;
|
|
1067
|
+
}
|
|
1068
|
+
/**
|
|
1069
|
+
* Why an approved hash is not the current plan's: what changed since that
|
|
1070
|
+
* plan was printed here, when Kibi recorded it, and the command for the
|
|
1071
|
+
* current plan.
|
|
1072
|
+
*/
|
|
1073
|
+
// implements REQ-cli-schema-migration
|
|
1074
|
+
export function planChangedMessage(workspaceRoot, approvedPlanHash, plan) {
|
|
1075
|
+
const printed = findPrintedPlan(workspaceRoot, approvedPlanHash);
|
|
1076
|
+
const changes = printed ? describePlanChange(printed, plan) : [];
|
|
1077
|
+
const lines = [
|
|
1078
|
+
printed
|
|
1079
|
+
? `The migration plan changed since ${approvedPlanHash} was printed (${printed.printedAt}); its hash is now ${plan.planHash}. Nothing was applied.`
|
|
1080
|
+
: `${approvedPlanHash} is not the current migration plan; its hash is now ${plan.planHash}. Kibi has no record of printing ${approvedPlanHash} here, so it cannot say what changed. Nothing was applied.`,
|
|
1081
|
+
...(printed
|
|
1082
|
+
? changes.length > 0
|
|
1083
|
+
? ["What changed:", ...changes.map((change) => `- ${change}`)]
|
|
1084
|
+
: ["Its actions and inputs are the same; only their details changed."]
|
|
1085
|
+
: []),
|
|
1086
|
+
`Review the current plan with 'kibi migrate', then apply it with: ${applyPlanCommand(plan.planHash)}`,
|
|
1087
|
+
];
|
|
1088
|
+
return lines.join("\n");
|
|
1089
|
+
}
|
|
1056
1090
|
async function migratePlanCommand(options) {
|
|
1057
1091
|
const workspaceRoot = path.resolve(options.workspaceRoot ?? process.cwd());
|
|
1058
1092
|
const plan = await buildWorkspaceMigrationPlan(workspaceRoot);
|
|
1093
|
+
const applySafe = applySafeRequested(options);
|
|
1059
1094
|
// `--yes` with JSON output applies every ready automatic action of the plan
|
|
1060
1095
|
// it would otherwise only print; `--dry-run` still only prints it.
|
|
1061
|
-
const approveWholePlan =
|
|
1096
|
+
const approveWholePlan = !applySafe &&
|
|
1062
1097
|
options.yes === true &&
|
|
1063
1098
|
options.dryRun !== true &&
|
|
1064
1099
|
options.format === "json";
|
|
1065
|
-
if (
|
|
1100
|
+
if (applySafe || approveWholePlan) {
|
|
1101
|
+
const inlineHash = typeof options.applySafe === "string" ? options.applySafe : undefined;
|
|
1102
|
+
if (inlineHash !== undefined &&
|
|
1103
|
+
options.approvedPlanHash !== undefined &&
|
|
1104
|
+
inlineHash !== options.approvedPlanHash) {
|
|
1105
|
+
noteCliErrorCategory("migrate:approved_plan_hash_conflict");
|
|
1106
|
+
console.error(`--apply-safe ${inlineHash} and --approved-plan-hash ${options.approvedPlanHash} name different plans; give one hash. The current plan applies with: ${applyPlanCommand(plan.planHash)}`);
|
|
1107
|
+
return { exitCode: 2 };
|
|
1108
|
+
}
|
|
1066
1109
|
const approvedPlanHash = approveWholePlan
|
|
1067
1110
|
? plan.planHash
|
|
1068
|
-
: options.approvedPlanHash;
|
|
1111
|
+
: (inlineHash ?? options.approvedPlanHash);
|
|
1069
1112
|
if (!approvedPlanHash) {
|
|
1070
|
-
|
|
1113
|
+
noteCliErrorCategory("migrate:approved_plan_hash_missing");
|
|
1114
|
+
console.error(`--apply-safe needs the hash of the plan you reviewed. Review the plan with 'kibi migrate', then apply its current hash: ${applyPlanCommand(plan.planHash)}`);
|
|
1071
1115
|
return { exitCode: 2 };
|
|
1072
1116
|
}
|
|
1073
1117
|
if (approvedPlanHash !== plan.planHash) {
|
|
1074
|
-
|
|
1118
|
+
noteCliErrorCategory("migrate:plan_hash_changed");
|
|
1119
|
+
console.error(planChangedMessage(workspaceRoot, approvedPlanHash, plan));
|
|
1075
1120
|
return { exitCode: 2 };
|
|
1076
1121
|
}
|
|
1077
1122
|
const explicitActionIds = approveWholePlan
|
|
@@ -1109,8 +1154,11 @@ async function migratePlanCommand(options) {
|
|
|
1109
1154
|
console.log(result.content[0]?.text ?? "Migration applied.");
|
|
1110
1155
|
printApplySummary(result.structuredContent);
|
|
1111
1156
|
}
|
|
1157
|
+
const outcome = result.structuredContent?.outcome;
|
|
1158
|
+
if (outcome !== "applied")
|
|
1159
|
+
noteCliErrorCategory(`migrate:${outcome}`);
|
|
1112
1160
|
return {
|
|
1113
|
-
exitCode:
|
|
1161
|
+
exitCode: outcome === "applied" ? 0 : 1,
|
|
1114
1162
|
};
|
|
1115
1163
|
}
|
|
1116
1164
|
if (options.format === "json") {
|
|
@@ -1119,6 +1167,8 @@ async function migratePlanCommand(options) {
|
|
|
1119
1167
|
else {
|
|
1120
1168
|
printPlanText(plan, options.backlog === true);
|
|
1121
1169
|
}
|
|
1170
|
+
if (options.dryRun !== true)
|
|
1171
|
+
recordPrintedPlan(workspaceRoot, plan);
|
|
1122
1172
|
return { exitCode: 0 };
|
|
1123
1173
|
}
|
|
1124
1174
|
/**
|
|
@@ -1168,5 +1218,7 @@ function printPlanText(plan, listBacklog) {
|
|
|
1168
1218
|
console.log(" List each item with --backlog.");
|
|
1169
1219
|
}
|
|
1170
1220
|
}
|
|
1171
|
-
console.log(`Plan status: ${plan.status} (covers both sections). Use --format json for structured actions
|
|
1221
|
+
console.log(`Plan status: ${plan.status} (covers both sections). Use --format json for structured actions.`);
|
|
1222
|
+
if (automaticReady > 0)
|
|
1223
|
+
console.log(`Apply the ${automaticReady} ready automatic action(s) of this plan: ${applyPlanCommand(plan.planHash)}`);
|
|
1172
1224
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prove.d.ts","sourceRoot":"","sources":["../../src/commands/prove.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"prove.d.ts","sourceRoot":"","sources":["../../src/commands/prove.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/prove.js
CHANGED
|
@@ -373,7 +373,7 @@ async function selectTestsBySelector(context, options) {
|
|
|
373
373
|
// One line per claim a certificate test names in proves: derived (with its
|
|
374
374
|
// scope), attested, or rejected with the reason.
|
|
375
375
|
function claimBindingLines(result) {
|
|
376
|
-
return result.results.flatMap((row) => (row.claimBindings ?? []).map((binding) => `${row.testId} ${binding.claim_key}${binding.requirement_id ? ` (${binding.requirement_id})` : ""}: ${binding.binding}${binding.binding === "derived" && binding.scope ? `, ${binding.scope} scope` : ""}${binding.reason ? `: ${binding.reason}` : ""}`));
|
|
376
|
+
return result.results.flatMap((row) => (row.claimBindings ?? []).map((binding) => `${row.testId} ${binding.claim_key}${binding.requirement_id ? ` (${binding.requirement_id})` : ""}: ${binding.binding}${binding.binding === "derived" && binding.scope ? `, ${binding.scope} scope` : ""}${binding.reason ? `: ${binding.reason}` : ""}${binding.binding === "derived" && row.scope !== undefined && row.scope !== "end_to_end" ? `; the receipt's verification_scope is ${row.scope}, and a claim is proved only once its requirement is tested end to end, so kibi proof explain keeps it unproved until an end_to_end receipt covers the scenario` : ""}`));
|
|
377
377
|
}
|
|
378
378
|
// implements REQ-kibi-code-proof-kinds
|
|
379
379
|
// One line per certificate test whose certificate did not re-check: the test
|
|
@@ -385,8 +385,21 @@ function certificateRejectionLines(result) {
|
|
|
385
385
|
`${row.testId} ${row.kind ?? "certificate"}: certificate rejected, ${row.certificateRejection}`,
|
|
386
386
|
]);
|
|
387
387
|
}
|
|
388
|
+
// implements REQ-kibi-code-proof-kinds
|
|
389
|
+
// A test whose run passed but whose certificate or claim binding Kibi
|
|
390
|
+
// rejected is refused, not passed: it proves nothing about the code.
|
|
391
|
+
function refusedCount(result) {
|
|
392
|
+
return result.results.filter((row) => row.outcome === "passed" &&
|
|
393
|
+
(row.certificateRejection !== undefined ||
|
|
394
|
+
(row.claimBindings ?? []).some((binding) => binding.binding === "rejected"))).length;
|
|
395
|
+
}
|
|
388
396
|
function summarize(result) {
|
|
389
|
-
const
|
|
397
|
+
const refused = refusedCount(result);
|
|
398
|
+
const parts = [
|
|
399
|
+
`passed ${result.passed - refused}`,
|
|
400
|
+
...(refused > 0 ? [`refused ${refused}`] : []),
|
|
401
|
+
`failed ${result.failed}`,
|
|
402
|
+
];
|
|
390
403
|
if (result.unchanged > 0)
|
|
391
404
|
parts.push(`unchanged ${result.unchanged}`);
|
|
392
405
|
return parts.join(", ");
|
|
@@ -599,7 +612,8 @@ export async function proveCommand(options, deps = {}) {
|
|
|
599
612
|
failures.push(`the tracked workspace changed while receipts were applied; re-run kibi prove${describeWorkspaceDrift(afterIngest)}`);
|
|
600
613
|
}
|
|
601
614
|
}
|
|
602
|
-
const
|
|
615
|
+
const refused = ingestResults.reduce((sum, result) => sum + refusedCount(result), 0);
|
|
616
|
+
const passed = ingestResults.reduce((sum, result) => sum + result.passed, 0) - refused;
|
|
603
617
|
const failed = ingestResults.reduce((sum, result) => sum + result.failed, 0);
|
|
604
618
|
const unchanged = ingestResults.reduce((sum, result) => sum + result.unchanged, 0);
|
|
605
619
|
// implements REQ-kibi-code-proof-kinds
|
|
@@ -609,6 +623,7 @@ export async function proveCommand(options, deps = {}) {
|
|
|
609
623
|
result.results.filter((row) => row.outcome === "passed" && row.evidenceLevel === "proved").length, 0);
|
|
610
624
|
const summary = {
|
|
611
625
|
passed,
|
|
626
|
+
...(refused > 0 ? { refused } : {}),
|
|
612
627
|
certified,
|
|
613
628
|
failed,
|
|
614
629
|
unchanged,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/manifest.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAML,uBAAuB,EACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,EACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,0BAA0B,EAG3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAI5E,UAAU,YAAY;IACpB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,2BAA2B,EAAE,OAAO,2BAA2B,CAAC;CACjE;AAkBD,eAAO,MAAM,8BAA8B,QAc1C,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/manifest.ts"],"names":[],"mappings":"AAkBA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,EAML,uBAAuB,EACxB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,EACxB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACL,0BAA0B,EAG3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAI5E,UAAU,YAAY;IACpB,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,aAAa,EAAE,OAAO,aAAa,CAAC;IACpC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,2BAA2B,EAAE,OAAO,2BAA2B,CAAC;CACjE;AAkBD,eAAO,MAAM,8BAA8B,QAc1C,CAAC;AAqCF;;;;;;;;;GASG;AACH,OAAO,EAAE,0BAA0B,EAAE,CAAC;AAEtC,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAG7E;AA2HD,wBAAsB,0BAA0B,CAE9C,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;IAC7B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,OAAO,CAAC;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CA+SvC;AAED;;;;;;;;GAQG;AAEH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3B,MAAM,GAAG,IAAI,CAWf;AAED,wBAAgB,0BAA0B,CAExC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAOT;AAED,wBAAgB,8BAA8B,CAE5C,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAC3B,OAAO,CAST"}
|
|
@@ -66,6 +66,12 @@ const GENERATED_COORD_FIELDS = [
|
|
|
66
66
|
"sourceEndLine",
|
|
67
67
|
"sourceEndColumn",
|
|
68
68
|
];
|
|
69
|
+
const INACTIVE_SYMBOL_STATUSES = new Set([
|
|
70
|
+
"deprecated",
|
|
71
|
+
"removed",
|
|
72
|
+
"retired",
|
|
73
|
+
"superseded",
|
|
74
|
+
]);
|
|
69
75
|
const GENERATED_MANIFEST_FIELDS = new Set([
|
|
70
76
|
...GENERATED_COORD_FIELDS,
|
|
71
77
|
"coordinatesGeneratedAt",
|
|
@@ -173,11 +179,12 @@ function coarseAnchorFailureReason(entry) {
|
|
|
173
179
|
if (typeof entry.coordinateRefreshFailure === "string") {
|
|
174
180
|
return entry.coordinateRefreshFailure;
|
|
175
181
|
}
|
|
182
|
+
const missed = `no unique declaration titled '${String(entry.title ?? "")}' was found in ${String(entry.sourceFile ?? "its source file")}`;
|
|
176
183
|
const reason = entry.granularity_reason;
|
|
177
184
|
if (!isCoarseGranularityReason(reason)) {
|
|
178
|
-
return
|
|
185
|
+
return `${missed}; use the name the extractor gives the declaration`;
|
|
179
186
|
}
|
|
180
|
-
return
|
|
187
|
+
return `${missed} and the whole-file coarse fallback found no span for this symbol`;
|
|
181
188
|
}
|
|
182
189
|
// implements REQ-symbol-coordinates-derived-locally
|
|
183
190
|
export async function refreshManifestCoordinates(
|
|
@@ -333,7 +340,13 @@ manifestPath, workspaceRoot, deps) {
|
|
|
333
340
|
: typeof previous.sourceFile === "string"
|
|
334
341
|
? previous.sourceFile
|
|
335
342
|
: undefined, workspaceRoot, resolved);
|
|
336
|
-
|
|
343
|
+
// A missing source file is no refresh candidate, but an active symbol
|
|
344
|
+
// that names one still gets no coordinates, so it is reported.
|
|
345
|
+
const unreadable = !coarseAnchor &&
|
|
346
|
+
!eligible &&
|
|
347
|
+
typeof current.coordinateRefreshFailure === "string" &&
|
|
348
|
+
!INACTIVE_SYMBOL_STATUSES.has(String(current.status ?? ""));
|
|
349
|
+
if ((eligible || unreadable) && !hasAllGeneratedCoordinates(current)) {
|
|
337
350
|
failures.push({
|
|
338
351
|
id: typeof current.id === "string" ? current.id : `#${i}`,
|
|
339
352
|
reason: coarseAnchorFailureReason(current),
|
|
@@ -401,7 +414,7 @@ manifestPath, workspaceRoot, deps) {
|
|
|
401
414
|
console.log(` ... and ${failures.length - maxReportedFailures} more failed symbol(s)`);
|
|
402
415
|
}
|
|
403
416
|
if (failures.length > 0) {
|
|
404
|
-
console.log(
|
|
417
|
+
console.log(` Symbols without a published coordinate entry are dropped from coverage until they succeed. To link a whole file instead, add symbol_role and granularity_reason ${COARSE_GRANULARITY_REASONS_PARENTHESIZED} to the symbol.`);
|
|
405
418
|
}
|
|
406
419
|
}
|
|
407
420
|
return { artifactChanged };
|
|
@@ -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;AAgIrD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACrB;AA0HD,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,CA2RvD;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,CA4P7D"}
|
|
@@ -41,6 +41,10 @@ const STRING_FIELDS = new Set([
|
|
|
41
41
|
"canonical_key",
|
|
42
42
|
"claim_key",
|
|
43
43
|
"claim_text",
|
|
44
|
+
"dimension_waiver",
|
|
45
|
+
"dimension_waiver_approved_by",
|
|
46
|
+
"case_waiver",
|
|
47
|
+
"case_waiver_approved_by",
|
|
44
48
|
"predicate_name",
|
|
45
49
|
"predicate_namespace",
|
|
46
50
|
"rule_hash",
|
|
@@ -442,6 +446,8 @@ prolog, results, entityIds, options = {}) {
|
|
|
442
446
|
for (const field of [
|
|
443
447
|
"approved_by",
|
|
444
448
|
"approval_ref",
|
|
449
|
+
"failure_side_waiver",
|
|
450
|
+
"failure_side_waiver_approved_by",
|
|
445
451
|
"rationale",
|
|
446
452
|
]) {
|
|
447
453
|
const value = entity.type === "req" ? entity[field] : undefined;
|
|
@@ -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;
|
|
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
|
@@ -27,6 +27,7 @@ import { extractRelationshipShard, validateRelationships, } from "../extractors/
|
|
|
27
27
|
import { acquireSymbolCompilerLock, releaseSymbolCompilerLock, } from "../operations/mutation/symbol-compiler-lock.js";
|
|
28
28
|
import { analyzeSemanticAdvisorInput } from "../operations/semantic-advisor/analyze-prose.js";
|
|
29
29
|
import { validateSemanticInventoryBoundary } from "../operations/semantic-advisor/ingestion-boundary.js";
|
|
30
|
+
import { sourceAnalyzerInstallProblems } from "../plugins/plugin-install-check.js";
|
|
30
31
|
import { PrologProcess } from "../prolog.js";
|
|
31
32
|
import { detachedHeadWriteRefusal, resolveBranchAttachment, } from "../utils/branch-resolver.js";
|
|
32
33
|
import { branchStoreManifestPath, branchStorePath, branchStoresRoot, ensureBranchStoreManifest, expectedBranchStoreManifest, } from "../utils/branch-store-locator.js";
|
|
@@ -573,6 +574,13 @@ export async function syncCommand(options = {}, runtime = {}) {
|
|
|
573
574
|
// on a partially published compiler dependency.
|
|
574
575
|
const refreshedManifestKeys = new Set();
|
|
575
576
|
if (!validateOnly && options.refreshSymbolCoordinates) {
|
|
577
|
+
// A declared source analyzer that is missing or not the qualified
|
|
578
|
+
// build would drop every coordinate it places; refuse the refresh and
|
|
579
|
+
// keep the stored coordinates instead of reporting success.
|
|
580
|
+
// implements REQ-symbol-coordinates-derived-locally
|
|
581
|
+
const installProblems = sourceAnalyzerInstallProblems(workspaceRoot);
|
|
582
|
+
if (installProblems.length > 0)
|
|
583
|
+
throw new Error(`Symbol coordinate refresh refused: ${installProblems.map((row) => row.problem).join("; ")}. ${installProblems.map((row) => row.fix).join(" ")} The stored coordinates were kept.`);
|
|
576
584
|
for (const file of manifestFiles) {
|
|
577
585
|
await refreshManifestCoordinates(file, workspaceRoot, {
|
|
578
586
|
refreshSymbolCoordinates: options.refreshSymbolCoordinates,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/commands/telemetry.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAU9D,4EAA4E;AAC5E,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAO,EAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,aAAa,CAAC,CA4BxB"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
// implements REQ-kibi-anonymous-usage-telemetry
|
|
2
|
-
import { TELEMETRY_DOCS_URL, setTelemetryPreference, telemetryStatus, } from "kibi-agent-core/usage-telemetry";
|
|
2
|
+
import { TELEMETRY_DOCS_URL, detectTelemetryHost, setTelemetryPreference, telemetryStatus, } from "kibi-agent-core/usage-telemetry";
|
|
3
|
+
/** Where the channel in effect comes from, in words. */
|
|
4
|
+
const CHANNEL_SOURCE_TEXT = {
|
|
5
|
+
KIBI_TELEMETRY_CHANNEL: "set by KIBI_TELEMETRY_CHANNEL",
|
|
6
|
+
checkout: "Kibi runs from a checkout of its own repository",
|
|
7
|
+
installed: "Kibi runs from an installed package",
|
|
8
|
+
};
|
|
3
9
|
// implements REQ-kibi-anonymous-usage-telemetry
|
|
4
10
|
/** `kibi telemetry [status|enable|disable]`: show or persist the choice. */
|
|
5
11
|
export async function telemetryCommand(action, options = {}, env = process.env) {
|
|
@@ -12,11 +18,15 @@ export async function telemetryCommand(action, options = {}, env = process.env)
|
|
|
12
18
|
setTelemetryPreference(chosen === "enable" ? "enabled" : "disabled", env);
|
|
13
19
|
}
|
|
14
20
|
const status = telemetryStatus(env);
|
|
21
|
+
// The host this shell's events carry comes from KIBI_HOST or the
|
|
22
|
+
// variables an agent host set for the processes it starts.
|
|
23
|
+
const host = detectTelemetryHost(env) ?? "unknown";
|
|
15
24
|
if (options.format === "json") {
|
|
16
|
-
console.log(JSON.stringify({ ...status, docs: TELEMETRY_DOCS_URL }));
|
|
25
|
+
console.log(JSON.stringify({ ...status, host, docs: TELEMETRY_DOCS_URL }));
|
|
17
26
|
return { exitCode: 0 };
|
|
18
27
|
}
|
|
19
28
|
console.log(`Anonymous usage telemetry is ${status.enabled ? "on" : "off"} (${status.reason}).`);
|
|
29
|
+
console.log(`Channel: ${status.channel} (${CHANNEL_SOURCE_TEXT[status.channelSource]}). Host: ${host} (set KIBI_HOST to override).`);
|
|
20
30
|
console.log(`Settings and queue: ${status.directory}`);
|
|
21
31
|
console.log(`What is collected: ${TELEMETRY_DOCS_URL}`);
|
|
22
32
|
return { exitCode: 0 };
|
|
@@ -37,6 +37,8 @@ export interface ExtractedEntity {
|
|
|
37
37
|
proof_exempt_reason?: string;
|
|
38
38
|
approved_by?: string;
|
|
39
39
|
approval_ref?: string;
|
|
40
|
+
failure_side_waiver?: string;
|
|
41
|
+
failure_side_waiver_approved_by?: string;
|
|
40
42
|
rationale?: string;
|
|
41
43
|
exempts_claims?: string[];
|
|
42
44
|
expects?: "success" | "rejection" | "error";
|
|
@@ -62,6 +64,10 @@ export interface ExtractedEntity {
|
|
|
62
64
|
canonical_key?: string;
|
|
63
65
|
claim_key?: string;
|
|
64
66
|
claim_text?: string;
|
|
67
|
+
dimension_waiver?: string;
|
|
68
|
+
dimension_waiver_approved_by?: string;
|
|
69
|
+
case_waiver?: string;
|
|
70
|
+
case_waiver_approved_by?: string;
|
|
65
71
|
predicate_name?: string;
|
|
66
72
|
predicate_namespace?: string;
|
|
67
73
|
predicate_arity?: number;
|
|
@@ -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;AAEpC,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,6BAA6B,CAAC;AACrC,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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"}
|
|
@@ -43,6 +43,10 @@ const FACT_STRING_FIELDS = [
|
|
|
43
43
|
"canonical_key",
|
|
44
44
|
"claim_key",
|
|
45
45
|
"claim_text",
|
|
46
|
+
"dimension_waiver",
|
|
47
|
+
"dimension_waiver_approved_by",
|
|
48
|
+
"case_waiver",
|
|
49
|
+
"case_waiver_approved_by",
|
|
46
50
|
"predicate_name",
|
|
47
51
|
"predicate_namespace",
|
|
48
52
|
"rule_ir",
|
|
@@ -511,6 +515,23 @@ function extractFromMarkdownContent(content, filePath) {
|
|
|
511
515
|
}
|
|
512
516
|
entity[field] = data[field];
|
|
513
517
|
}
|
|
518
|
+
// implements REQ-kibi-happy-path-gap
|
|
519
|
+
// A requirement with no failure side to test records why, and who
|
|
520
|
+
// accepted it; the waiver counts only once approved.
|
|
521
|
+
for (const field of [
|
|
522
|
+
"failure_side_waiver",
|
|
523
|
+
"failure_side_waiver_approved_by",
|
|
524
|
+
]) {
|
|
525
|
+
if (type !== "req" || data[field] === undefined)
|
|
526
|
+
continue;
|
|
527
|
+
if (typeof data[field] !== "string" || data[field].trim() === "") {
|
|
528
|
+
throw new FrontmatterError(`Invalid ${field}; expected a non-empty string`, filePath, {
|
|
529
|
+
classification: "Invalid Failure Side Waiver",
|
|
530
|
+
hint: "Set failure_side_waiver to why the requirement has no input or attempt to refuse, and failure_side_waiver_approved_by to the person who accepted it.",
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
entity[field] = data[field];
|
|
534
|
+
}
|
|
514
535
|
// implements REQ-core-validation-rules
|
|
515
536
|
// Why the requirement exists; requirement-rationale-missing reads it.
|
|
516
537
|
if (type === "req" && data.rationale !== undefined) {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** The declaration fields a symbol title is matched against. */
|
|
2
|
+
export type TitledDeclaration = {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly qualifiedName?: string;
|
|
5
|
+
readonly kind?: string;
|
|
6
|
+
readonly containerName?: string;
|
|
7
|
+
readonly startLine: number;
|
|
8
|
+
readonly startColumn: number;
|
|
9
|
+
readonly endLine: number;
|
|
10
|
+
readonly endColumn: number;
|
|
11
|
+
};
|
|
12
|
+
export type TitleMatch<T> = {
|
|
13
|
+
readonly symbol: T;
|
|
14
|
+
} | {
|
|
15
|
+
readonly failure: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Titles that name a declaration besides its qualified name and name: the
|
|
19
|
+
* Terraform address of a block (`aws_s3_bucket.this`, `data.x.y`,
|
|
20
|
+
* `module.m`, `var.v`, `output.o`, `local.l`) and the dotted labels of a
|
|
21
|
+
* generic HCL block (`source.amazon-ebs.ubuntu`).
|
|
22
|
+
*/
|
|
23
|
+
export declare function declarationTitleAliases(symbol: Pick<TitledDeclaration, "qualifiedName">): string[];
|
|
24
|
+
/**
|
|
25
|
+
* Place a symbol title: a qualified name first, then a declaration alias,
|
|
26
|
+
* then a bare name. A bare type name shared with its constructors (a Java
|
|
27
|
+
* class `OS` and `OS()`) names the type.
|
|
28
|
+
* Anything else that is not exactly one declaration fails with the reason.
|
|
29
|
+
*/
|
|
30
|
+
export declare function matchDeclarationTitle<T extends TitledDeclaration>(title: string, declared: readonly T[], sourceFile: string, all?: readonly TitledDeclaration[]): TitleMatch<T>;
|
|
31
|
+
//# sourceMappingURL=symbol-title-match.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbol-title-match.d.ts","sourceRoot":"","sources":["../../src/extractors/symbol-title-match.ts"],"names":[],"mappings":"AAkBA,gEAAgE;AAChE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,IACpB;IAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBjC;;;;;GAKG;AAEH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,eAAe,CAAC,GAC/C,MAAM,EAAE,CA2BV;AAsCD;;;;;GAKG;AAEH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,iBAAiB,EAC/D,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,CAAC,EAAE,EACtB,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,SAAS,iBAAiB,EAAa,GAC3C,UAAU,CAAC,CAAC,CAAC,CA2Cf"}
|
|
@@ -0,0 +1,133 @@
|
|
|
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
|
+
const TERRAFORM_LOCATOR = /^terraform:(resource|data|module|variable|output|local)\[(.*)\]$/;
|
|
19
|
+
const HCL_LOCATOR = /^hcl:(\[.*\])$/;
|
|
20
|
+
function jsonStrings(text) {
|
|
21
|
+
try {
|
|
22
|
+
const value = JSON.parse(text);
|
|
23
|
+
return Array.isArray(value) &&
|
|
24
|
+
value.length > 0 &&
|
|
25
|
+
value.every((item) => typeof item === "string")
|
|
26
|
+
? value
|
|
27
|
+
: null;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Titles that name a declaration besides its qualified name and name: the
|
|
35
|
+
* Terraform address of a block (`aws_s3_bucket.this`, `data.x.y`,
|
|
36
|
+
* `module.m`, `var.v`, `output.o`, `local.l`) and the dotted labels of a
|
|
37
|
+
* generic HCL block (`source.amazon-ebs.ubuntu`).
|
|
38
|
+
*/
|
|
39
|
+
// implements REQ-symbol-coordinates-derived-locally
|
|
40
|
+
export function declarationTitleAliases(symbol) {
|
|
41
|
+
const locator = symbol.qualifiedName ?? "";
|
|
42
|
+
const terraform = TERRAFORM_LOCATOR.exec(locator);
|
|
43
|
+
if (terraform) {
|
|
44
|
+
const kind = terraform[1];
|
|
45
|
+
const labels = jsonStrings(`[${terraform[2]}]`);
|
|
46
|
+
if (labels === null)
|
|
47
|
+
return [];
|
|
48
|
+
const dotted = labels.join(".");
|
|
49
|
+
switch (kind) {
|
|
50
|
+
case "resource":
|
|
51
|
+
return labels.length === 2 ? [dotted, `resource.${dotted}`] : [];
|
|
52
|
+
case "data":
|
|
53
|
+
return labels.length === 2 ? [`data.${dotted}`] : [];
|
|
54
|
+
case "variable":
|
|
55
|
+
return labels.length === 1
|
|
56
|
+
? [`var.${dotted}`, `variable.${dotted}`]
|
|
57
|
+
: [];
|
|
58
|
+
default:
|
|
59
|
+
return labels.length === 1 ? [`${kind}.${dotted}`] : [];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const hcl = HCL_LOCATOR.exec(locator);
|
|
63
|
+
if (hcl?.[1] !== undefined) {
|
|
64
|
+
const parts = jsonStrings(hcl[1]);
|
|
65
|
+
return parts !== null && parts.length > 1 ? [parts.join(".")] : [];
|
|
66
|
+
}
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
/** A constructor: a method named like the type that holds it. */
|
|
70
|
+
function isConstructorOf(member, type) {
|
|
71
|
+
return (member !== type &&
|
|
72
|
+
member.kind === "method" &&
|
|
73
|
+
member.containerName === member.name &&
|
|
74
|
+
type.name === member.name &&
|
|
75
|
+
type.kind !== "method" &&
|
|
76
|
+
type.kind !== "function");
|
|
77
|
+
}
|
|
78
|
+
function lines(symbol) {
|
|
79
|
+
return symbol.startLine === symbol.endLine
|
|
80
|
+
? `line ${symbol.startLine}`
|
|
81
|
+
: `lines ${symbol.startLine}-${symbol.endLine}`;
|
|
82
|
+
}
|
|
83
|
+
/** The title that places this declaration and no other in the file. */
|
|
84
|
+
function uniqueTitle(symbol, all) {
|
|
85
|
+
const alias = declarationTitleAliases(symbol)[0];
|
|
86
|
+
if (alias !== undefined)
|
|
87
|
+
return alias;
|
|
88
|
+
const sameName = all.filter((other) => other.name === symbol.name);
|
|
89
|
+
return sameName.length > 1 && symbol.qualifiedName !== undefined
|
|
90
|
+
? symbol.qualifiedName
|
|
91
|
+
: symbol.name;
|
|
92
|
+
}
|
|
93
|
+
const LISTED_DECLARATIONS = 8;
|
|
94
|
+
/**
|
|
95
|
+
* Place a symbol title: a qualified name first, then a declaration alias,
|
|
96
|
+
* then a bare name. A bare type name shared with its constructors (a Java
|
|
97
|
+
* class `OS` and `OS()`) names the type.
|
|
98
|
+
* Anything else that is not exactly one declaration fails with the reason.
|
|
99
|
+
*/
|
|
100
|
+
// implements REQ-symbol-coordinates-derived-locally
|
|
101
|
+
export function matchDeclarationTitle(title, declared, sourceFile, all = declared) {
|
|
102
|
+
const byQualifiedName = declared.filter((symbol) => (symbol.qualifiedName ?? symbol.name) === title);
|
|
103
|
+
const byAlias = byQualifiedName.length
|
|
104
|
+
? byQualifiedName
|
|
105
|
+
: declared.filter((symbol) => declarationTitleAliases(symbol).includes(title));
|
|
106
|
+
const byName = byAlias.length
|
|
107
|
+
? byAlias
|
|
108
|
+
: declared.filter((symbol) => symbol.name === title);
|
|
109
|
+
const candidates = byName.filter((symbol) => !byName.some((other) => isConstructorOf(symbol, other)));
|
|
110
|
+
const [only] = candidates;
|
|
111
|
+
if (candidates.length === 1 && only !== undefined)
|
|
112
|
+
return { symbol: only };
|
|
113
|
+
if (candidates.length > 1) {
|
|
114
|
+
const titles = candidates.map((symbol) => uniqueTitle(symbol, all));
|
|
115
|
+
const distinct = new Set(titles).size === titles.length;
|
|
116
|
+
return {
|
|
117
|
+
failure: `'${title}' matches ${candidates.length} declarations in ${sourceFile} (${candidates.map((symbol, index) => `${titles[index]} on ${lines(symbol)}`).join(", ")}); ${distinct ? "use one of those titles" : "no title tells them apart"}`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (all.some((symbol) => symbol.name === title ||
|
|
121
|
+
symbol.qualifiedName === title ||
|
|
122
|
+
declarationTitleAliases(symbol).includes(title)))
|
|
123
|
+
return {
|
|
124
|
+
failure: `'${title}' is declared in a part of ${sourceFile} the source analysis could not read`,
|
|
125
|
+
};
|
|
126
|
+
const titles = [...new Set(all.map((symbol) => uniqueTitle(symbol, all)))];
|
|
127
|
+
const listed = titles.length === 0
|
|
128
|
+
? "the extractor found no declarations there"
|
|
129
|
+
: `declarations there: ${titles.slice(0, LISTED_DECLARATIONS).join(", ")}${titles.length > LISTED_DECLARATIONS ? `, and ${titles.length - LISTED_DECLARATIONS} more` : ""}`;
|
|
130
|
+
return {
|
|
131
|
+
failure: `no declaration titled '${title}' found in ${sourceFile} (${listed})`,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAYnF,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;AA0FD,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,CAqJhC"}
|