kibi-cli 2.35.1 → 2.38.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-operation-metadata.d.ts +1 -1
- package/dist/cli-operation-metadata.js +1 -1
- package/dist/cli-register-foundation.d.ts.map +1 -1
- package/dist/cli-register-foundation.js +2 -1
- package/dist/cli-register-maintenance.d.ts.map +1 -1
- package/dist/cli-register-maintenance.js +5 -0
- package/dist/cli-validate.d.ts.map +1 -1
- package/dist/cli-validate.js +21 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -1
- package/dist/commands/aggregated-checks.d.ts.map +1 -1
- package/dist/commands/aggregated-checks.js +89 -16
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +56 -35
- package/dist/commands/github-init.d.ts.map +1 -1
- package/dist/commands/github-init.js +4 -2
- package/dist/commands/hook-managers.d.ts +43 -0
- package/dist/commands/hook-managers.d.ts.map +1 -0
- package/dist/commands/hook-managers.js +426 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +40 -5
- package/dist/commands/sync/persistence.d.ts.map +1 -1
- package/dist/commands/sync/persistence.js +43 -1
- package/dist/commands/telemetry.d.ts +7 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +23 -0
- package/dist/decision-firmness.d.ts.map +1 -1
- package/dist/decision-firmness.js +11 -14
- package/dist/engine-limits.d.ts.map +1 -1
- package/dist/engine-limits.js +8 -10
- package/dist/entity-body-context.d.ts.map +1 -1
- package/dist/entity-body-context.js +39 -36
- package/dist/extractors/symbol-coordinates.d.ts.map +1 -1
- package/dist/extractors/symbol-coordinates.js +23 -4
- package/dist/firm-decision-edit.d.ts.map +1 -1
- package/dist/firm-decision-edit.js +1 -3
- package/dist/intent-search.d.ts +5 -1
- package/dist/intent-search.d.ts.map +1 -1
- package/dist/intent-search.js +118 -33
- package/dist/logic/ir.d.ts.map +1 -1
- package/dist/logic/ir.js +82 -108
- package/dist/operations/bootstrap/guidance-actions.d.ts.map +1 -1
- package/dist/operations/bootstrap/guidance-actions.js +2 -1
- package/dist/operations/bootstrap/plugin-offers.d.ts +11 -2
- package/dist/operations/bootstrap/plugin-offers.d.ts.map +1 -1
- package/dist/operations/bootstrap/plugin-offers.js +48 -9
- package/dist/operations/proof/claim-bindings.d.ts.map +1 -1
- package/dist/operations/proof/claim-bindings.js +1 -0
- package/dist/operations/proof/code-certificates.d.ts +2 -0
- package/dist/operations/proof/code-certificates.d.ts.map +1 -1
- package/dist/operations/proof/code-certificates.js +34 -14
- package/dist/operations/proof/code-models.d.ts.map +1 -1
- package/dist/operations/proof/code-models.js +19 -5
- package/dist/operations/proof/code-runner.d.ts +16 -0
- package/dist/operations/proof/code-runner.d.ts.map +1 -1
- package/dist/operations/proof/code-runner.js +42 -6
- package/dist/plugins/compose-search-hints.d.ts +29 -0
- package/dist/plugins/compose-search-hints.d.ts.map +1 -0
- package/dist/plugins/compose-search-hints.js +94 -0
- package/dist/plugins/external-allowlist.d.ts +7 -0
- package/dist/plugins/external-allowlist.d.ts.map +1 -1
- package/dist/plugins/external-allowlist.js +11 -0
- package/dist/plugins/registry.d.ts +8 -1
- package/dist/plugins/registry.d.ts.map +1 -1
- package/dist/plugins/registry.js +22 -3
- package/dist/prolog/codec.d.ts.map +1 -1
- package/dist/prolog/codec.js +10 -20
- package/dist/public/impact/coverage-depth-quality.d.ts.map +1 -1
- package/dist/public/impact/coverage-depth-quality.js +32 -16
- package/dist/public/impact/full-kb-quality.d.ts +6 -0
- package/dist/public/impact/full-kb-quality.d.ts.map +1 -1
- package/dist/public/impact/full-kb-quality.js +8 -3
- package/dist/public/impact/requirement-quality.d.ts.map +1 -1
- package/dist/public/impact/requirement-quality.js +56 -29
- package/dist/public/operations/catalog.d.ts +13 -3
- package/dist/public/operations/catalog.d.ts.map +1 -1
- package/dist/public/operations/check-executor.d.ts +6 -0
- package/dist/public/operations/check-executor.d.ts.map +1 -1
- package/dist/public/operations/check-executor.js +34 -2
- package/dist/public/operations/discovery-executors.d.ts +5 -1
- package/dist/public/operations/discovery-executors.d.ts.map +1 -1
- package/dist/public/operations/discovery-executors.js +65 -4
- package/dist/public/operations/evidence-floor.d.ts +8 -1
- package/dist/public/operations/evidence-floor.d.ts.map +1 -1
- package/dist/public/operations/evidence-floor.js +3 -4
- package/dist/public/operations/migration-plan.d.ts.map +1 -1
- package/dist/public/operations/migration-plan.js +41 -10
- package/dist/public/operations/node-ports.d.ts.map +1 -1
- package/dist/public/operations/node-ports.js +3 -1
- package/dist/public/operations/source-analysis-cache.d.ts +22 -0
- package/dist/public/operations/source-analysis-cache.d.ts.map +1 -0
- package/dist/public/operations/source-analysis-cache.js +157 -0
- package/dist/public/operations/specs/discovery.d.ts +7 -2
- package/dist/public/operations/specs/discovery.d.ts.map +1 -1
- package/dist/public/operations/specs/discovery.js +7 -2
- package/dist/public/operations/specs/mutation-schemas.d.ts +6 -1
- package/dist/public/operations/specs/mutation-schemas.d.ts.map +1 -1
- package/dist/public/operations/specs/upsert.d.ts +6 -1
- package/dist/public/operations/specs/upsert.d.ts.map +1 -1
- package/dist/public/operations/symbol-granularity-check.d.ts +3 -1
- package/dist/public/operations/symbol-granularity-check.d.ts.map +1 -1
- package/dist/public/operations/symbol-granularity-check.js +21 -7
- package/dist/public/proof-protocol.d.ts +6 -1
- package/dist/public/proof-protocol.d.ts.map +1 -1
- package/dist/public/proof-protocol.js +12 -3
- package/dist/public/proof-sources.d.ts +2 -0
- package/dist/public/proof-sources.d.ts.map +1 -1
- package/dist/public/proof-sources.js +32 -6
- package/dist/public/skills/kibi-bootstrap/SKILL.md +2 -2
- package/dist/public/skills/kibi-usage/SKILL.md +42 -3
- package/dist/public/skills/kibi-usage/resources/fact-lanes.md +34 -0
- package/dist/public/skills/kibi-usage/resources/proof.md +13 -5
- package/dist/public/skills/kibi-usage/resources/workflows.md +10 -0
- package/dist/relationships/shards.d.ts +2 -0
- package/dist/relationships/shards.d.ts.map +1 -1
- package/dist/relationships/shards.js +25 -1
- package/dist/schemas/entity.schema.json +6 -1
- package/dist/search-answer.js +1 -1
- package/dist/search-hints.d.ts +58 -0
- package/dist/search-hints.d.ts.map +1 -0
- package/dist/search-hints.js +187 -0
- package/dist/search-ranking.d.ts +7 -0
- package/dist/search-ranking.d.ts.map +1 -1
- package/dist/search-ranking.js +54 -56
- package/dist/search-token-cache.d.ts +30 -0
- package/dist/search-token-cache.d.ts.map +1 -0
- package/dist/search-token-cache.js +86 -0
- package/dist/usage-telemetry.d.ts +11 -0
- package/dist/usage-telemetry.d.ts.map +1 -0
- package/dist/usage-telemetry.js +47 -0
- package/dist/utils/branch-resolver.d.ts.map +1 -1
- package/dist/utils/branch-resolver.js +1 -0
- package/package.json +5 -4
- package/src/public/impact/coverage-depth-quality.ts +59 -21
- package/src/public/impact/full-kb-quality.ts +15 -1
- package/src/public/impact/requirement-quality.ts +95 -38
- package/src/public/operations/check-executor.ts +41 -1
- package/src/public/operations/discovery-executors.ts +92 -4
- package/src/public/operations/evidence-floor.ts +15 -3
- package/src/public/operations/migration-plan.ts +41 -9
- package/src/public/operations/node-ports.ts +3 -1
- package/src/public/operations/source-analysis-cache.ts +196 -0
- package/src/public/operations/specs/discovery.ts +8 -2
- package/src/public/operations/symbol-granularity-check.ts +25 -5
- package/src/public/proof-protocol-types.d.ts +1 -1
- package/src/public/proof-protocol.ts +18 -4
- package/src/public/proof-sources.ts +37 -6
- package/src/public/skills/kibi-bootstrap/SKILL.md +2 -2
- package/src/public/skills/kibi-usage/SKILL.md +42 -3
- package/src/public/skills/kibi-usage/resources/fact-lanes.md +34 -0
- package/src/public/skills/kibi-usage/resources/proof.md +13 -5
- package/src/public/skills/kibi-usage/resources/workflows.md +10 -0
- package/src/schemas/entity.schema.json +6 -1
package/dist/prolog/codec.js
CHANGED
|
@@ -274,27 +274,25 @@ export function splitTopLevelGeneral(str, delimiter) {
|
|
|
274
274
|
// implements REQ-009
|
|
275
275
|
return scanTopLevelGeneral(str, delimiter).parts;
|
|
276
276
|
}
|
|
277
|
+
// Parts are sliced from the input rather than built a character at a time:
|
|
278
|
+
// candidate pages run to megabytes, and per-character concatenation made
|
|
279
|
+
// scanning them most of a search's parsing time.
|
|
277
280
|
function scanTopLevelGeneral(str, delimiter) {
|
|
278
281
|
const results = [];
|
|
279
|
-
let
|
|
282
|
+
let partStart = 0;
|
|
280
283
|
let quote = null;
|
|
281
284
|
const delimiters = [];
|
|
282
285
|
let balanced = true;
|
|
283
286
|
for (let i = 0; i < str.length; i++) {
|
|
284
287
|
const char = str[i];
|
|
285
288
|
if (quote !== null) {
|
|
286
|
-
current += char;
|
|
287
289
|
if (char === "\\") {
|
|
288
|
-
|
|
289
|
-
if (escaped !== undefined) {
|
|
290
|
-
current += escaped;
|
|
290
|
+
if (i + 1 < str.length)
|
|
291
291
|
i++;
|
|
292
|
-
}
|
|
293
292
|
}
|
|
294
293
|
else if (char === quote) {
|
|
295
294
|
const doubledPrologQuote = quote === "'" && str[i + 1] === "'";
|
|
296
295
|
if (doubledPrologQuote) {
|
|
297
|
-
current += str[i + 1] ?? "";
|
|
298
296
|
i++;
|
|
299
297
|
}
|
|
300
298
|
else {
|
|
@@ -305,12 +303,10 @@ function scanTopLevelGeneral(str, delimiter) {
|
|
|
305
303
|
}
|
|
306
304
|
if (char === "'" || char === '"') {
|
|
307
305
|
quote = char;
|
|
308
|
-
current += char;
|
|
309
306
|
continue;
|
|
310
307
|
}
|
|
311
308
|
if (char === "[" || char === "(" || char === "{") {
|
|
312
309
|
delimiters.push(char);
|
|
313
|
-
current += char;
|
|
314
310
|
continue;
|
|
315
311
|
}
|
|
316
312
|
if (char === "]" || char === ")" || char === "}") {
|
|
@@ -321,25 +317,19 @@ function scanTopLevelGeneral(str, delimiter) {
|
|
|
321
317
|
else {
|
|
322
318
|
delimiters.pop();
|
|
323
319
|
}
|
|
324
|
-
current += char;
|
|
325
320
|
continue;
|
|
326
321
|
}
|
|
327
322
|
if (delimiters.length === 0 &&
|
|
328
323
|
delimiter.length > 0 &&
|
|
329
324
|
str.startsWith(delimiter, i)) {
|
|
330
|
-
if (
|
|
331
|
-
results.push(
|
|
332
|
-
current = "";
|
|
333
|
-
}
|
|
325
|
+
if (i > partStart)
|
|
326
|
+
results.push(str.slice(partStart, i));
|
|
334
327
|
i += delimiter.length - 1;
|
|
328
|
+
partStart = i + 1;
|
|
335
329
|
}
|
|
336
|
-
else {
|
|
337
|
-
current += char;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
if (current) {
|
|
341
|
-
results.push(current);
|
|
342
330
|
}
|
|
331
|
+
if (str.length > partStart)
|
|
332
|
+
results.push(str.slice(partStart));
|
|
343
333
|
return {
|
|
344
334
|
parts: results,
|
|
345
335
|
balanced: balanced && quote === null && delimiters.length === 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-depth-quality.d.ts","sourceRoot":"","sources":["../../../src/public/impact/coverage-depth-quality.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage-depth-quality.d.ts","sourceRoot":"","sources":["../../../src/public/impact/coverage-depth-quality.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgLpD,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,CAI1E;AA2KD,wBAAgB,qCAAqC,CACnD,eAAe,EAAE,SAAS,gBAAgB,EAAE,EAC5C,kBAAkB,GAAE,WAAW,CAC7B,MAAM,EACN,QAAQ,CAAC;IACP,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C,CAAC,CACS,GACZ,SAAS,iBAAiB,EAAE,CAoB9B;AAID;;;;;GAKG;AAEH,wBAAgB,oCAAoC,CAClD,eAAe,EAAE,SAAS,gBAAgB,EAAE,GAC3C,SAAS,iBAAiB,EAAE,CA2D9B"}
|
|
@@ -1,4 +1,29 @@
|
|
|
1
1
|
import { COARSE_GRANULARITY_REASONS } from "../symbol-granularity.generated.js";
|
|
2
|
+
function incomingKey(type, relationshipType, targetId) {
|
|
3
|
+
return `${type}\0${relationshipType}\0${targetId}`;
|
|
4
|
+
}
|
|
5
|
+
function coverageIndex(manifestResults) {
|
|
6
|
+
const incomingByTarget = new Map();
|
|
7
|
+
// A result linking the same target twice is listed twice; every reader
|
|
8
|
+
// dedupes by entity id.
|
|
9
|
+
for (const result of manifestResults) {
|
|
10
|
+
for (const relationship of result.relationships) {
|
|
11
|
+
const key = incomingKey(result.entity.type, relationship.type, relationship.to);
|
|
12
|
+
const list = incomingByTarget.get(key);
|
|
13
|
+
if (list === undefined)
|
|
14
|
+
incomingByTarget.set(key, [result.entity]);
|
|
15
|
+
else
|
|
16
|
+
list.push(result.entity);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
resultsById: new Map(manifestResults.map((manifestResult) => [
|
|
21
|
+
manifestResult.entity.id,
|
|
22
|
+
manifestResult,
|
|
23
|
+
])),
|
|
24
|
+
incomingByTarget,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
2
27
|
function entitiesById(manifestResults) {
|
|
3
28
|
return new Map(manifestResults.map((result) => [result.entity.id, result.entity]));
|
|
4
29
|
}
|
|
@@ -11,14 +36,7 @@ function outgoingTargets(lookup) {
|
|
|
11
36
|
});
|
|
12
37
|
}
|
|
13
38
|
function incomingSources(lookup) {
|
|
14
|
-
return lookup.
|
|
15
|
-
if (result.entity.type !== lookup.type)
|
|
16
|
-
return [];
|
|
17
|
-
return result.relationships.some((relationship) => relationship.type === lookup.relationshipType &&
|
|
18
|
-
relationship.to === lookup.targetId)
|
|
19
|
-
? [result.entity]
|
|
20
|
-
: [];
|
|
21
|
-
});
|
|
39
|
+
return (lookup.index.incomingByTarget.get(incomingKey(lookup.type, lookup.relationshipType, lookup.targetId)) ?? []);
|
|
22
40
|
}
|
|
23
41
|
function uniqueEntities(entities) {
|
|
24
42
|
return [
|
|
@@ -129,11 +147,8 @@ function createDiagnostic(coverage, proofEvidence) {
|
|
|
129
147
|
},
|
|
130
148
|
};
|
|
131
149
|
}
|
|
132
|
-
function coverageForRequirement(result,
|
|
133
|
-
const resultsById =
|
|
134
|
-
manifestResult.entity.id,
|
|
135
|
-
manifestResult,
|
|
136
|
-
]));
|
|
150
|
+
function coverageForRequirement(result, index, entities) {
|
|
151
|
+
const resultsById = index.resultsById;
|
|
137
152
|
const scenarios = outgoingTargets({
|
|
138
153
|
result,
|
|
139
154
|
relationshipType: "specified_by",
|
|
@@ -154,7 +169,7 @@ function coverageForRequirement(result, manifestResults, entities) {
|
|
|
154
169
|
entities,
|
|
155
170
|
}),
|
|
156
171
|
...incomingSources({
|
|
157
|
-
|
|
172
|
+
index,
|
|
158
173
|
targetId: result.entity.id,
|
|
159
174
|
relationshipType: "validates",
|
|
160
175
|
type: "test",
|
|
@@ -164,7 +179,7 @@ function coverageForRequirement(result, manifestResults, entities) {
|
|
|
164
179
|
const scenarioResult = resultsById.get(scenario.id);
|
|
165
180
|
return [
|
|
166
181
|
...incomingSources({
|
|
167
|
-
|
|
182
|
+
index,
|
|
168
183
|
targetId: scenario.id,
|
|
169
184
|
relationshipType: "validates",
|
|
170
185
|
type: "test",
|
|
@@ -215,11 +230,12 @@ function isReviewableRequirement(requirement, superseded) {
|
|
|
215
230
|
export function createCoverageDepthQualityDiagnostics(manifestResults, proofByRequirement = new Map()) {
|
|
216
231
|
const entities = entitiesById(manifestResults);
|
|
217
232
|
const superseded = supersededRequirementIds(manifestResults);
|
|
233
|
+
const index = coverageIndex(manifestResults);
|
|
218
234
|
return manifestResults
|
|
219
235
|
.filter((result) => result.entity.type === "req" &&
|
|
220
236
|
isReviewableRequirement(result.entity, superseded))
|
|
221
237
|
.flatMap((result) => {
|
|
222
|
-
const diagnostic = createDiagnostic(coverageForRequirement(result,
|
|
238
|
+
const diagnostic = createDiagnostic(coverageForRequirement(result, index, entities), proofByRequirement.get(result.entity.id));
|
|
223
239
|
return diagnostic === undefined ? [] : [diagnostic];
|
|
224
240
|
})
|
|
225
241
|
.toSorted((left, right) => (left.entityId ?? "").localeCompare(right.entityId ?? ""));
|
|
@@ -9,6 +9,12 @@ type FullKbQualityDiagnosticsOptions = {
|
|
|
9
9
|
readonly now?: Date;
|
|
10
10
|
readonly proofSnapshot?: string;
|
|
11
11
|
readonly checkedAt?: string;
|
|
12
|
+
/**
|
|
13
|
+
* The per-contract receipt bindings kb_coverage uses (a Prolog
|
|
14
|
+
* TestId -> binding hash dict), or null for strict snapshot binding. Read
|
|
15
|
+
* lazily so a check without proof evidence never pays for it.
|
|
16
|
+
*/
|
|
17
|
+
readonly proofTestBindings?: () => Promise<string | null>;
|
|
12
18
|
};
|
|
13
19
|
export declare function loadKbExtractionResults(prolog: Pick<PrologPort, "query" | "queryEntities">): Promise<ExtractionResult[]>;
|
|
14
20
|
export declare function passingE2eStage(passingE2e: unknown): Readonly<Record<string, unknown>> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"full-kb-quality.d.ts","sourceRoot":"","sources":["../../../src/public/impact/full-kb-quality.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAatC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAcjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AASpD,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,eAAe,CAAC,CAAC;IAC7D,QAAQ,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"full-kb-quality.d.ts","sourceRoot":"","sources":["../../../src/public/impact/full-kb-quality.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AAatC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAcjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AASpD,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,eAAe,CAAC,CAAC;IAC7D,QAAQ,CAAC,sBAAsB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3D,CAAC;AAqgBF,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,eAAe,CAAC,GAClD,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA8C7B;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,OAAO,GAClB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAM/C;AAkJD,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC,CAoCvC"}
|
|
@@ -450,7 +450,7 @@ export function passingE2eStage(passingE2e) {
|
|
|
450
450
|
function stringArrayField(value) {
|
|
451
451
|
return Array.isArray(value) ? value.map(String) : undefined;
|
|
452
452
|
}
|
|
453
|
-
async function loadCoverageProofEvidence(prolog, requirementCount, proofSnapshot, checkedAt) {
|
|
453
|
+
async function loadCoverageProofEvidence(prolog, requirementCount, proofSnapshot, checkedAt, proofTestBindings) {
|
|
454
454
|
if (proofSnapshot === undefined ||
|
|
455
455
|
checkedAt === undefined ||
|
|
456
456
|
requirementCount === 0) {
|
|
@@ -458,11 +458,16 @@ async function loadCoverageProofEvidence(prolog, requirementCount, proofSnapshot
|
|
|
458
458
|
}
|
|
459
459
|
let payload;
|
|
460
460
|
try {
|
|
461
|
+
// Judge receipts with the binding kb_coverage uses; under strict snapshot
|
|
462
|
+
// binding any unrelated change since kibi prove would read every receipt
|
|
463
|
+
// as stale and bring back the weak-depth review.
|
|
464
|
+
const bindings = (await proofTestBindings?.()) ?? null;
|
|
465
|
+
const binding = bindings === null ? "strict_snapshot, _{}" : `per_contract, ${bindings}`;
|
|
461
466
|
// W1 push-down: the slim evidence projection returns only the fields the
|
|
462
467
|
// quality diagnostics consume, keeping the response far below the output
|
|
463
468
|
// capacity limit on large KBs (the full coverage report rows were the
|
|
464
469
|
// original ENOBUFS offender).
|
|
465
|
-
payload = await runOperationJsonQuery(prolog, "discovery.pl", `discovery:coverage_evidence_json(${toPrologList([])}, ${toPrologAtom(proofSnapshot)}, ${toPrologAtom(checkedAt)}, ${PROOF_RECEIPT_MAX_AGE_SECONDS}, JsonString)`, "Quality diagnostic coverage evidence");
|
|
470
|
+
payload = await runOperationJsonQuery(prolog, "discovery.pl", `discovery:coverage_evidence_json(${toPrologList([])}, ${binding}, ${toPrologAtom(proofSnapshot)}, ${toPrologAtom(checkedAt)}, ${PROOF_RECEIPT_MAX_AGE_SECONDS}, JsonString)`, "Quality diagnostic coverage evidence");
|
|
466
471
|
}
|
|
467
472
|
catch {
|
|
468
473
|
// Quality diagnostics must fail closed when the optional proof readback is
|
|
@@ -542,7 +547,7 @@ export async function collectFullKbQualityDiagnostics(options) {
|
|
|
542
547
|
loadKbExtractionResults(options.prolog),
|
|
543
548
|
collectTelemetryDiagnostics(options.workspaceRoot, options.now ?? new Date()),
|
|
544
549
|
]);
|
|
545
|
-
const proofEvidence = await loadCoverageProofEvidence(options.prolog, manifestResults.filter((result) => result.entity.type === "req").length, options.proofSnapshot, options.checkedAt);
|
|
550
|
+
const proofEvidence = await loadCoverageProofEvidence(options.prolog, manifestResults.filter((result) => result.entity.type === "req").length, options.proofSnapshot, options.checkedAt, options.proofTestBindings);
|
|
546
551
|
const coverageDepthDiagnostics = createCoverageDepthQualityDiagnostics(manifestResults, proofEvidence);
|
|
547
552
|
const diagnostics = [
|
|
548
553
|
...telemetryDiagnostics,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement-quality.d.ts","sourceRoot":"","sources":["../../../src/public/impact/requirement-quality.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"requirement-quality.d.ts","sourceRoot":"","sources":["../../../src/public/impact/requirement-quality.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAoTvE,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,oCAAoC,GAC5C,oBAAoB,EAAE,CAMxB"}
|
|
@@ -42,41 +42,67 @@ function targetHasType(targetId, type, typesByEntityId) {
|
|
|
42
42
|
const targetType = typesByEntityId.get(targetId);
|
|
43
43
|
return targetType === undefined || targetType === type;
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
const
|
|
45
|
+
/** One pass over every relationship, so each requirement's fanout is a lookup. */
|
|
46
|
+
function fanoutIndex(results) {
|
|
47
|
+
const relationshipsByEntityId = new Map();
|
|
48
|
+
const implementerIdsByRequirementId = new Map();
|
|
49
|
+
const dependentRequirementIdsByRequirementId = new Map();
|
|
50
|
+
const append = (index, key, value) => {
|
|
51
|
+
const list = index.get(key);
|
|
52
|
+
if (list === undefined)
|
|
53
|
+
index.set(key, [value]);
|
|
54
|
+
else
|
|
55
|
+
list.push(value);
|
|
56
|
+
};
|
|
50
57
|
for (const result of results) {
|
|
58
|
+
const relationships = relationshipsByEntityId.get(result.entity.id);
|
|
59
|
+
if (relationships === undefined) {
|
|
60
|
+
relationshipsByEntityId.set(result.entity.id, [...result.relationships]);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
relationships.push(...result.relationships);
|
|
64
|
+
}
|
|
51
65
|
for (const relationship of result.relationships) {
|
|
52
|
-
if (relationship.type === "implements"
|
|
53
|
-
relationship.to
|
|
54
|
-
implementingSymbolIds.push(result.entity.id);
|
|
55
|
-
}
|
|
56
|
-
if (result.entity.id === requirementId &&
|
|
57
|
-
relationship.type === "specified_by" &&
|
|
58
|
-
targetHasType(relationship.to, "scenario", typesByEntityId)) {
|
|
59
|
-
scenarioIds.push(relationship.to);
|
|
66
|
+
if (relationship.type === "implements") {
|
|
67
|
+
append(implementerIdsByRequirementId, relationship.to, result.entity.id);
|
|
60
68
|
}
|
|
61
|
-
if (result.entity.
|
|
62
|
-
(relationship.
|
|
63
|
-
relationship.type === "covered_by") &&
|
|
64
|
-
targetHasType(relationship.to, "test", typesByEntityId)) {
|
|
65
|
-
testIds.push(relationship.to);
|
|
66
|
-
}
|
|
67
|
-
if (relationship.type === "depends_on") {
|
|
68
|
-
if (result.entity.id === requirementId &&
|
|
69
|
-
targetHasType(relationship.to, "req", typesByEntityId)) {
|
|
70
|
-
dependentRequirementIds.push(relationship.to);
|
|
71
|
-
}
|
|
72
|
-
if (relationship.to === requirementId && result.entity.type === "req") {
|
|
73
|
-
dependentRequirementIds.push(result.entity.id);
|
|
74
|
-
}
|
|
69
|
+
if (relationship.type === "depends_on" && result.entity.type === "req") {
|
|
70
|
+
append(dependentRequirementIdsByRequirementId, relationship.to, result.entity.id);
|
|
75
71
|
}
|
|
76
72
|
}
|
|
77
73
|
}
|
|
78
74
|
return {
|
|
79
|
-
|
|
75
|
+
relationshipsByEntityId,
|
|
76
|
+
implementerIdsByRequirementId,
|
|
77
|
+
dependentRequirementIdsByRequirementId,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function collectFanout(requirementId, index, typesByEntityId) {
|
|
81
|
+
const scenarioIds = [];
|
|
82
|
+
const testIds = [];
|
|
83
|
+
const dependentRequirementIds = [];
|
|
84
|
+
// rationale: every requirement this is called for is in the index, so the
|
|
85
|
+
// fallback list is never read.
|
|
86
|
+
// Stryker disable next-line ArrayDeclaration
|
|
87
|
+
const relationships = index.relationshipsByEntityId.get(requirementId) ?? [];
|
|
88
|
+
for (const relationship of relationships) {
|
|
89
|
+
if (relationship.type === "specified_by" &&
|
|
90
|
+
targetHasType(relationship.to, "scenario", typesByEntityId)) {
|
|
91
|
+
scenarioIds.push(relationship.to);
|
|
92
|
+
}
|
|
93
|
+
if ((relationship.type === "verified_by" ||
|
|
94
|
+
relationship.type === "covered_by") &&
|
|
95
|
+
targetHasType(relationship.to, "test", typesByEntityId)) {
|
|
96
|
+
testIds.push(relationship.to);
|
|
97
|
+
}
|
|
98
|
+
if (relationship.type === "depends_on" &&
|
|
99
|
+
targetHasType(relationship.to, "req", typesByEntityId)) {
|
|
100
|
+
dependentRequirementIds.push(relationship.to);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
dependentRequirementIds.push(...(index.dependentRequirementIdsByRequirementId.get(requirementId) ?? []));
|
|
104
|
+
return {
|
|
105
|
+
implementingSymbolIds: sortedUnique(index.implementerIdsByRequirementId.get(requirementId) ?? []),
|
|
80
106
|
scenarioIds: sortedUnique(scenarioIds),
|
|
81
107
|
testIds: sortedUnique(testIds),
|
|
82
108
|
dependentRequirementIds: sortedUnique(dependentRequirementIds),
|
|
@@ -96,10 +122,11 @@ function isUmbrellaRequirement(result) {
|
|
|
96
122
|
}
|
|
97
123
|
function createBroadRequirementDiagnostics(results) {
|
|
98
124
|
const typesByEntityId = entityTypeById(results);
|
|
125
|
+
const index = fanoutIndex(results);
|
|
99
126
|
return results.flatMap((result) => {
|
|
100
127
|
if (!isCurrentRequirement(result))
|
|
101
128
|
return [];
|
|
102
|
-
const fanout = collectFanout(result.entity.id,
|
|
129
|
+
const fanout = collectFanout(result.entity.id, index, typesByEntityId);
|
|
103
130
|
if (!exceedsBroadThreshold(fanout))
|
|
104
131
|
return [];
|
|
105
132
|
if (isUmbrellaRequirement(result))
|
|
@@ -176,7 +176,7 @@ export declare const OPERATION_CATALOG: readonly [{
|
|
|
176
176
|
}, {
|
|
177
177
|
readonly name: "kb_search";
|
|
178
178
|
readonly cliName: "search";
|
|
179
|
-
readonly description: "Ask the KB a question or search it. Default intent-v1 ranking accepts questions, host-agent semantic facets and changed-code source locations, returns evidence, abstains below its confidence threshold and adds an answer layer: the current requirements that govern the topic, what must stay true (linked facts), why (ADRs) and what verifies it (scenarios, tests). Use before changing behavior, then kb_query for exact follow-up. No mutation side effects.";
|
|
179
|
+
readonly description: "Ask the KB a question or search it. Default intent-v1 ranking accepts questions, host-agent semantic facets and changed-code source locations, returns evidence, abstains below its confidence threshold and adds an answer layer: the current requirements that govern the topic, what must stay true (linked facts), why (ADRs) and what verifies it (scenarios, tests). A weak answer may add queryAnalysis.hints from a search-hints plugin: requirements the question may mean, to re-ask with. Use before changing behavior, then kb_query for exact follow-up. No mutation side effects.";
|
|
180
180
|
readonly businessInputSchema: {
|
|
181
181
|
readonly type: "object";
|
|
182
182
|
readonly required: readonly ["query"];
|
|
@@ -215,6 +215,11 @@ export declare const OPERATION_CATALOG: readonly [{
|
|
|
215
215
|
readonly default: true;
|
|
216
216
|
readonly description: "Intent-v1 only, first page only. When true (default) the result includes an answer layer: current governing requirements with their linked facts, scenarios, tests and ADRs, superseded requirements listed separately, and observation facts labelled as notes. Bounded in size; discovery, not proof.";
|
|
217
217
|
};
|
|
218
|
+
readonly hints: {
|
|
219
|
+
readonly type: "boolean";
|
|
220
|
+
readonly default: true;
|
|
221
|
+
readonly description: "Intent-v1 only, first page only. When true (default) and the project activates a kibi.search-hints.v1 plugin, a weak or abstained answer adds queryAnalysis.hints: requirements the question may mean, to re-ask with. Hints never change results or the answer layer.";
|
|
222
|
+
};
|
|
218
223
|
readonly semanticFacets: {
|
|
219
224
|
readonly type: "object";
|
|
220
225
|
readonly additionalProperties: false;
|
|
@@ -255,7 +260,7 @@ export declare const OPERATION_CATALOG: readonly [{
|
|
|
255
260
|
readonly maxItems: 20;
|
|
256
261
|
};
|
|
257
262
|
};
|
|
258
|
-
readonly description: "Optional host-agent semantic interpretation. Kibi uses these strings as deterministic aliases/facets;
|
|
263
|
+
readonly description: "Optional host-agent semantic interpretation. Kibi uses these strings as deterministic aliases/facets; ranking never calls a model.";
|
|
259
264
|
};
|
|
260
265
|
readonly sourceLocations: {
|
|
261
266
|
readonly type: "array";
|
|
@@ -1277,6 +1282,11 @@ export declare const OPERATION_CATALOG: readonly [{
|
|
|
1277
1282
|
readonly minLength: 1;
|
|
1278
1283
|
readonly description: "The name the domain is exported under in the symbol's source file, when the symbol's title is not that name.";
|
|
1279
1284
|
};
|
|
1285
|
+
readonly field: {
|
|
1286
|
+
readonly type: "string";
|
|
1287
|
+
readonly minLength: 1;
|
|
1288
|
+
readonly description: "exhaustive: when the export is a list of records, the field of each record that names a domain member (a catalog's name).";
|
|
1289
|
+
};
|
|
1280
1290
|
};
|
|
1281
1291
|
readonly additionalProperties: false;
|
|
1282
1292
|
};
|
|
@@ -1304,7 +1314,7 @@ export declare const OPERATION_CATALOG: readonly [{
|
|
|
1304
1314
|
};
|
|
1305
1315
|
readonly value_source: {
|
|
1306
1316
|
readonly type: "array";
|
|
1307
|
-
readonly description: "arithmetic and smt: code constants the assumptions read. Kibi evaluates each export at ingest and requires the certificate to assume the variable equals that value, so the proof is about the code and not only the knowledge base. With measure count the value is the size of a list, set, map or object export, so a count claim reads the collection itself. An entry {source, measure: count} counts the members Kibi reads from a project source (routes, tables, environment variables).";
|
|
1317
|
+
readonly description: "arithmetic and smt: code constants the assumptions read. Kibi evaluates each export at ingest and requires the certificate to assume the variable equals that value, so the proof is about the code and not only the knowledge base. With measure count the value is the size of a list, set, map or object export, so a count claim reads the collection itself. A dotted export (POLICY.eventLimit) reads one field of an object export. An entry {source, measure: count} counts the members Kibi reads from a project source (routes, tables, environment variables).";
|
|
1308
1318
|
readonly minItems: 1;
|
|
1309
1319
|
readonly items: {
|
|
1310
1320
|
readonly type: "object";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/public/operations/catalog.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/public/operations/catalog.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBe,CAAC;AAyF9C,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,GAClB,qBAAqB,CA+BvB;AAQD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,qBAAqB,GAAG,SAAS,EACvC,IAAI,EAAE,aAAa,GAClB,qBAAqB,CAKvB;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,qBAAqB,CAElE;AAGD,wBAAgB,SAAS,IAAI,SAAS,qBAAqB,EAAE,CAE5D"}
|
|
@@ -35,5 +35,11 @@ export type CheckExecutionOptions = {
|
|
|
35
35
|
* missing), so kb_check reports this instead of any of them.
|
|
36
36
|
*/
|
|
37
37
|
export declare function uncompiledBranchStoreViolation(context: OperationContext, workspaceRoot: string): Violation | null;
|
|
38
|
+
/**
|
|
39
|
+
* The branch store this check reads, when the engine is known to read it, as
|
|
40
|
+
* the place to keep parsed source analyses. A read-only detached snapshot
|
|
41
|
+
* and an unknown store (an explicit --kb-path) get no cache.
|
|
42
|
+
*/
|
|
43
|
+
export declare function analysisCacheDir(context: OperationContext, workspaceRoot: string, options: CheckExecutionOptions): string | undefined;
|
|
38
44
|
export declare function executeCheck(args: CheckInput, context: OperationContext, options?: CheckExecutionOptions): Promise<OperationResult<CheckPayload>>;
|
|
39
45
|
//# sourceMappingURL=check-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-executor.d.ts","sourceRoot":"","sources":["../../../src/public/operations/check-executor.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,sBAAsB,EACtB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAIL,iBAAiB,EAGjB,iBAAiB,EAGlB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,oBAAoB,CAAC;AAOvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC;AACxE,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,OAAO,CAAC;IACjE;;;;;;OAMG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAoFF;;;;;GAKG;AAEH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,MAAM,GACpB,SAAS,GAAG,IAAI,CAgClB;AAGD,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"check-executor.d.ts","sourceRoot":"","sources":["../../../src/public/operations/check-executor.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC3B,sBAAsB,EACtB,YAAY,EACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAIL,iBAAiB,EAGjB,iBAAiB,EAGlB,MAAM,oBAAoB,CAAC;AAc5B,OAAO,KAAK,EAAE,gBAAgB,EAAc,MAAM,oBAAoB,CAAC;AAOvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAC1C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,6EAA6E;IAC7E,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,sBAAsB,EAAE,CAAC;AACxE,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,OAAO,CAAC;IACjE;;;;;;OAMG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAoFF;;;;;GAKG;AAEH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,MAAM,GACpB,SAAS,GAAG,IAAI,CAgClB;AAED;;;;GAIG;AAEH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,qBAAqB,GAC7B,MAAM,GAAG,SAAS,CAiBpB;AAGD,wBAAsB,YAAY,CAChC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,gBAAgB,EACzB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAmRxC"}
|
|
@@ -120,6 +120,28 @@ export function uncompiledBranchStoreViolation(context, workspaceRoot) {
|
|
|
120
120
|
},
|
|
121
121
|
};
|
|
122
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* The branch store this check reads, when the engine is known to read it, as
|
|
125
|
+
* the place to keep parsed source analyses. A read-only detached snapshot
|
|
126
|
+
* and an unknown store (an explicit --kb-path) get no cache.
|
|
127
|
+
*/
|
|
128
|
+
// implements REQ-cli-check
|
|
129
|
+
export function analysisCacheDir(context, workspaceRoot, options) {
|
|
130
|
+
if (context.branchAttachment === undefined &&
|
|
131
|
+
options.branchStoreAttached !== true) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
const attachment = context.branchAttachment ?? resolveBranchAttachment(workspaceRoot);
|
|
136
|
+
if ("storePath" in attachment && attachment.readOnly === undefined) {
|
|
137
|
+
return attachment.storePath;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// A branch that cannot be resolved gets no cache.
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
123
145
|
// implements REQ-kibi-operation-interface-parity, REQ-002
|
|
124
146
|
export async function executeCheck(args, context, options = {}) {
|
|
125
147
|
try {
|
|
@@ -130,6 +152,10 @@ export async function executeCheck(args, context, options = {}) {
|
|
|
130
152
|
? snapshotEvidence.snapshot.hash
|
|
131
153
|
: undefined;
|
|
132
154
|
const checkedAt = context.clock().toISOString();
|
|
155
|
+
const proofTestBindings = async () => {
|
|
156
|
+
const { perContractTestBindings } = await import("./specs/reporting.js");
|
|
157
|
+
return perContractTestBindings({ ...context, prolog });
|
|
158
|
+
};
|
|
133
159
|
// Enforcement policy is Kibi-owned and deterministic from the installed
|
|
134
160
|
// version. `args.rules` is an invocation-time diagnostic selector only.
|
|
135
161
|
const rulesAllowlist = resolveCheckRules(args);
|
|
@@ -197,6 +223,7 @@ export async function executeCheck(args, context, options = {}) {
|
|
|
197
223
|
workspaceRoot,
|
|
198
224
|
...(proofSnapshot !== undefined ? { proofSnapshot } : {}),
|
|
199
225
|
checkedAt,
|
|
226
|
+
proofTestBindings,
|
|
200
227
|
now: context.clock(),
|
|
201
228
|
...maxDiagnosticsOption,
|
|
202
229
|
});
|
|
@@ -239,12 +266,16 @@ export async function executeCheck(args, context, options = {}) {
|
|
|
239
266
|
const sourcePathFindings = rulesAllowlist.has(SOURCE_PATH_DANGLING_RULE)
|
|
240
267
|
? collectSourcePathDanglingViolations(workspaceRoot)
|
|
241
268
|
: [];
|
|
242
|
-
const symbolGranularityFindings = await collectSymbolGranularityViolations(prolog, workspaceRoot, rulesAllowlist);
|
|
269
|
+
const symbolGranularityFindings = await collectSymbolGranularityViolations(prolog, workspaceRoot, rulesAllowlist, analysisCacheDir(context, workspaceRoot, options));
|
|
243
270
|
const originReviewFindings = await collectOriginReviewViolations(prolog, rulesAllowlist, workspaceRoot);
|
|
244
271
|
const entityContextFindings = collectEntityContextViolations(rulesAllowlist, workspaceRoot);
|
|
245
272
|
const decisionFirmnessFindings = collectDecisionFirmnessViolations(rulesAllowlist, workspaceRoot);
|
|
246
273
|
const checkPolicyFindings = await collectCheckPolicyViolations(prolog, rulesAllowlist, workspaceRoot);
|
|
247
|
-
const evidenceFloorFindings = await collectEvidenceFloorViolations(context, rulesAllowlist, {
|
|
274
|
+
const evidenceFloorFindings = await collectEvidenceFloorViolations(context, rulesAllowlist, {
|
|
275
|
+
freshEvidence: args.freshEvidence === true,
|
|
276
|
+
checkedAt,
|
|
277
|
+
snapshotEvidence,
|
|
278
|
+
});
|
|
248
279
|
const proofContractClaimFindings = await collectProofContractClaimViolations(context, rulesAllowlist);
|
|
249
280
|
const partitioned = partitionCheckFindings([
|
|
250
281
|
...aggregatedFindings,
|
|
@@ -281,6 +312,7 @@ export async function executeCheck(args, context, options = {}) {
|
|
|
281
312
|
workspaceRoot,
|
|
282
313
|
...(proofSnapshot !== undefined ? { proofSnapshot } : {}),
|
|
283
314
|
checkedAt,
|
|
315
|
+
proofTestBindings,
|
|
284
316
|
now: context.clock(),
|
|
285
317
|
...maxDiagnosticsOption,
|
|
286
318
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type IntentSearchAnalysis, type IntentSearchFacets, type IntentSearchMatch, type SourceLocation } from "../../intent-search.js";
|
|
2
2
|
import { type SearchAnswer } from "../../search-answer.js";
|
|
3
|
+
import { type SearchHintsAnalysis } from "../../search-hints.js";
|
|
3
4
|
import type { SearchMatch } from "../../search-ranking.js";
|
|
4
5
|
import { BRANCH_STORE_NOT_COMPILED, type BranchStoreInspection } from "../../utils/branch-store.js";
|
|
5
6
|
import { type MigrationConfigStatus, type MigrationPlan } from "./migration-plan.js";
|
|
@@ -84,6 +85,7 @@ export type SearchInput = {
|
|
|
84
85
|
readonly minScore?: number;
|
|
85
86
|
readonly fields?: "summary" | "full";
|
|
86
87
|
readonly answer?: boolean;
|
|
88
|
+
readonly hints?: boolean;
|
|
87
89
|
};
|
|
88
90
|
export type SearchPayload = {
|
|
89
91
|
readonly results: readonly (SearchMatch | IntentSearchMatch)[];
|
|
@@ -92,7 +94,9 @@ export type SearchPayload = {
|
|
|
92
94
|
/** Rows in `results`: the page this call returned. */
|
|
93
95
|
readonly returned: number;
|
|
94
96
|
readonly truncated?: boolean;
|
|
95
|
-
readonly queryAnalysis?: IntentSearchAnalysis
|
|
97
|
+
readonly queryAnalysis?: IntentSearchAnalysis & {
|
|
98
|
+
readonly hints?: SearchHintsAnalysis;
|
|
99
|
+
};
|
|
96
100
|
readonly answer?: SearchAnswer;
|
|
97
101
|
/** The Kibi branch whose store was searched, when the runtime attached one. */
|
|
98
102
|
readonly branch?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-executors.d.ts","sourceRoot":"","sources":["../../../src/public/operations/discovery-executors.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,
|
|
1
|
+
{"version":3,"file":"discovery-executors.d.ts","sourceRoot":"","sources":["../../../src/public/operations/discovery-executors.ts"],"names":[],"mappings":"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"}
|