kibi-cli 2.30.0 → 2.31.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-reporting.d.ts.map +1 -1
- package/dist/cli-register-reporting.js +23 -2
- package/dist/commands/check-certificates.d.ts +52 -0
- package/dist/commands/check-certificates.d.ts.map +1 -0
- package/dist/commands/check-certificates.js +163 -0
- package/dist/commands/discovery-table.d.ts.map +1 -1
- package/dist/commands/discovery-table.js +14 -2
- package/dist/commands/report.js +3 -3
- package/dist/commands/signoff.d.ts.map +1 -1
- package/dist/commands/signoff.js +3 -0
- package/dist/operations/planning/apply-plan.js +5 -5
- package/dist/operations/proof/baseline-diff.d.ts +1 -1
- package/dist/operations/proof/baseline-diff.js +1 -1
- package/dist/operations/proof/impact.d.ts +10 -4
- package/dist/operations/proof/impact.d.ts.map +1 -1
- package/dist/operations/proof/impact.js +27 -7
- package/dist/public/diagnostic-usage.js +2 -2
- package/dist/public/operations/catalog.d.ts +4 -4
- 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/reporting.d.ts +4 -4
- package/dist/public/operations/specs/reporting.js +7 -7
- package/dist/public/skills/kibi-freshness/SKILL.md +2 -2
- package/dist/public/skills/kibi-usage/SKILL.md +2 -2
- package/dist/public/skills/kibi-usage/resources/proof.md +36 -4
- package/dist/public/skills/kibi-usage/resources/workflows.md +1 -1
- package/dist/report/html-report.css +11 -4
- package/dist/report/html-report.d.ts +2 -2
- package/dist/report/html-report.d.ts.map +1 -1
- package/dist/report/html-report.js +27 -21
- package/dist/report/report-view.d.ts +2 -2
- package/dist/report/report-view.js +2 -2
- package/dist/signoff/collect.d.ts.map +1 -1
- package/dist/signoff/collect.js +5 -1
- package/dist/signoff/html.js +3 -3
- package/dist/signoff/model.d.ts +7 -2
- package/dist/signoff/model.d.ts.map +1 -1
- package/dist/signoff/model.js +6 -2
- package/dist/traceability/staged-consistency.d.ts.map +1 -1
- package/dist/traceability/staged-consistency.js +3 -1
- package/dist/utils/rule-registry.generated.d.ts +10 -0
- package/dist/utils/rule-registry.generated.d.ts.map +1 -1
- package/dist/utils/rule-registry.generated.js +12 -0
- package/package.json +2 -2
- package/src/public/diagnostic-usage.ts +3 -3
- package/src/public/operations/specs/check-rules.generated.ts +3 -1
- package/src/public/operations/specs/reporting.ts +7 -7
- package/src/public/skills/kibi-freshness/SKILL.md +2 -2
- package/src/public/skills/kibi-usage/SKILL.md +2 -2
- package/src/public/skills/kibi-usage/resources/proof.md +36 -4
- package/src/public/skills/kibi-usage/resources/workflows.md +1 -1
- package/templates/github/kibi-badge.yml +1 -1
|
@@ -4,7 +4,8 @@ import { readSnapshotKnowledge } from "./snapshot-knowledge.js";
|
|
|
4
4
|
import { cleanupTempKb, createTempKb, projectStagedEntities, } from "./temp-kb.js";
|
|
5
5
|
/**
|
|
6
6
|
* Canonical rules that decide whether the staged knowledge is consistent:
|
|
7
|
-
* requirement contradictions,
|
|
7
|
+
* requirement contradictions (pairwise, and joint ones whose certificate the
|
|
8
|
+
* independent checker re-verifies), success scenarios a current requirement
|
|
8
9
|
* forbids, and exceptions that name claims they cannot waive. They read only
|
|
9
10
|
* authored knowledge, so the staged tree alone decides them.
|
|
10
11
|
*/
|
|
@@ -13,6 +14,7 @@ const STAGED_CONSISTENCY_RULES = [
|
|
|
13
14
|
"domain-contradictions",
|
|
14
15
|
"scenario-feasibility",
|
|
15
16
|
"exception-claim-keys",
|
|
17
|
+
"kb-consistency",
|
|
16
18
|
];
|
|
17
19
|
/**
|
|
18
20
|
* True when the staged change set touches entity documents or relationship
|
|
@@ -269,5 +269,15 @@ export declare const GENERATED_RULES: readonly [{
|
|
|
269
269
|
readonly description: "When a plugin activated for kibi.check-policy.v1 declares marker rules, every file implementing a requirement grounded in the rule's pattern predicate (with its declared sibling files) must contain each marker the KB declares for that pattern";
|
|
270
270
|
readonly enforcementClass: "canonical";
|
|
271
271
|
readonly category: "traceability";
|
|
272
|
+
}, {
|
|
273
|
+
readonly name: "kb-consistency";
|
|
274
|
+
readonly description: "The facts current requirements name must hold together, jointly and not only pairwise: every property context needs a value that satisfies all its facts, every atom and decision key one truth value, and stored rules a stratification. Each finding is a contradiction certificate (an irreducible core, two disagreeing facts or a negation cycle) re-verified by the independent checker, or a certificate that checker rejects";
|
|
275
|
+
readonly enforcementClass: "canonical";
|
|
276
|
+
readonly category: "integrity";
|
|
277
|
+
}, {
|
|
278
|
+
readonly name: "kb-consistency-unresolved";
|
|
279
|
+
readonly description: "Advisory: a property context, atom or decision key whose facts the consistency checker cannot compare (mixed value types or units, an unsupported operator or polarity, or a contradiction whose validity windows never overlap); it never counts as consistent";
|
|
280
|
+
readonly enforcementClass: "advisory";
|
|
281
|
+
readonly category: "integrity";
|
|
272
282
|
}];
|
|
273
283
|
//# sourceMappingURL=rule-registry.generated.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-registry.generated.d.ts","sourceRoot":"","sources":["../../src/utils/rule-registry.generated.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"rule-registry.generated.d.ts","sourceRoot":"","sources":["../../src/utils/rule-registry.generated.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqYlB,CAAC"}
|
|
@@ -332,4 +332,16 @@ export const GENERATED_RULES = [
|
|
|
332
332
|
enforcementClass: "canonical",
|
|
333
333
|
category: "traceability",
|
|
334
334
|
},
|
|
335
|
+
{
|
|
336
|
+
name: "kb-consistency",
|
|
337
|
+
description: "The facts current requirements name must hold together, jointly and not only pairwise: every property context needs a value that satisfies all its facts, every atom and decision key one truth value, and stored rules a stratification. Each finding is a contradiction certificate (an irreducible core, two disagreeing facts or a negation cycle) re-verified by the independent checker, or a certificate that checker rejects",
|
|
338
|
+
enforcementClass: "canonical",
|
|
339
|
+
category: "integrity",
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
name: "kb-consistency-unresolved",
|
|
343
|
+
description: "Advisory: a property context, atom or decision key whose facts the consistency checker cannot compare (mixed value types or units, an unsupported operator or polarity, or a contradiction whose validity windows never overlap); it never counts as consistent",
|
|
344
|
+
enforcementClass: "advisory",
|
|
345
|
+
category: "integrity",
|
|
346
|
+
},
|
|
335
347
|
];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kibi-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.31.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Kibi CLI for knowledge base management",
|
|
6
6
|
"engines": {
|
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
"fast-glob": "^3.2.12",
|
|
236
236
|
"gray-matter": "^4.0.3",
|
|
237
237
|
"js-yaml": "^4.1.0",
|
|
238
|
-
"kibi-core": "^0.
|
|
238
|
+
"kibi-core": "^0.23.0",
|
|
239
239
|
"kibi-plugin-builtin": "^0.5.3",
|
|
240
240
|
"kibi-plugin-sdk": "^0.5.0",
|
|
241
241
|
"kibi-swipl": "^1.0.1",
|
|
@@ -147,7 +147,7 @@ function appendCoverageFields(
|
|
|
147
147
|
const scope = isRecord(repairPlan?.scope) ? repairPlan.scope : undefined;
|
|
148
148
|
fields.coverage_by = typeof args.by === "string" ? args.by : "req";
|
|
149
149
|
fields.coverage_requirement_count = Number(summary.total ?? rows.length);
|
|
150
|
-
fields.
|
|
150
|
+
fields.coverage_tested_count = Number(summary.proofTested ?? 0);
|
|
151
151
|
fields.coverage_proof_missing_count = Number(summary.proofMissing ?? 0);
|
|
152
152
|
fields.coverage_proof_gap_count = gapCodes.length;
|
|
153
153
|
fields.coverage_gap_codes = [...new Set(gapCodes)].sort();
|
|
@@ -223,8 +223,8 @@ export function deriveDiagnosticUsageFields(
|
|
|
223
223
|
if (tool === "kb_coverage" && structured) {
|
|
224
224
|
appendCoverageFields(fields, args, structured);
|
|
225
225
|
fields.result_summary = `${String(
|
|
226
|
-
fields.
|
|
227
|
-
)}
|
|
226
|
+
fields.coverage_tested_count,
|
|
227
|
+
)} tested; ${String(fields.coverage_proof_gap_count)} proof gaps`;
|
|
228
228
|
}
|
|
229
229
|
if (tool === "kb_semantic_advisor" && structured) {
|
|
230
230
|
appendSemanticFields(fields, structured.receipt);
|
|
@@ -63,9 +63,11 @@ export const SELECTABLE_RULE_NAMES: readonly string[] = [
|
|
|
63
63
|
"supersedes-reason-acknowledged",
|
|
64
64
|
"policy-ownership",
|
|
65
65
|
"policy-markers",
|
|
66
|
+
"kb-consistency",
|
|
67
|
+
"kb-consistency-unresolved",
|
|
66
68
|
];
|
|
67
69
|
|
|
68
70
|
// implements REQ-006
|
|
69
71
|
/** Comma-separated "Allowed:" fragment for the kb_check rules description. */
|
|
70
72
|
export const SELECTABLE_RULES_ALLOWED =
|
|
71
|
-
"must-priority-coverage, symbol-coverage, symbol-traceability, symbol-granularity, no-dangling-refs, source-relationship-parity, branch-store-not-compiled, source-path-dangling, no-cycles, required-fields, deprecated-adr-no-successor, superseded-requirement-open, scenario-feasibility, scenario-feasibility-unknown, exception-claim-keys, numeric-string-value, rule-key-arguments-missing, domain-contradictions, logic-coverage, rule-safety, rule-verifiability, query-plan-safety, req-status-vocabulary, strict-fact-shape, strict-req-fact-pairing, predicate-verifiability, strict-readiness, semantic-completeness, related-requirement-unmodeled, proof-contract-symbols, entity-id-style, domain-redundancy, domain-implication, subject-key-identity, subject-key-shape, ontology-quality, exception-unapproved, exception-approval-self-attested, agent-requirement-unapproved, requirement-rationale-missing, symbol-owner-superseded, adr-unlinked, adr-proposed, predicate-schema-conformance, entity-context-missing, entity-context-acknowledged, decision-firm-unreferenced, decision-firm-superseded, decision-firm-edited, supersedes-reason-missing, supersedes-reason-acknowledged, policy-ownership, policy-markers";
|
|
73
|
+
"must-priority-coverage, symbol-coverage, symbol-traceability, symbol-granularity, no-dangling-refs, source-relationship-parity, branch-store-not-compiled, source-path-dangling, no-cycles, required-fields, deprecated-adr-no-successor, superseded-requirement-open, scenario-feasibility, scenario-feasibility-unknown, exception-claim-keys, numeric-string-value, rule-key-arguments-missing, domain-contradictions, logic-coverage, rule-safety, rule-verifiability, query-plan-safety, req-status-vocabulary, strict-fact-shape, strict-req-fact-pairing, predicate-verifiability, strict-readiness, semantic-completeness, related-requirement-unmodeled, proof-contract-symbols, entity-id-style, domain-redundancy, domain-implication, subject-key-identity, subject-key-shape, ontology-quality, exception-unapproved, exception-approval-self-attested, agent-requirement-unapproved, requirement-rationale-missing, symbol-owner-superseded, adr-unlinked, adr-proposed, predicate-schema-conformance, entity-context-missing, entity-context-acknowledged, decision-firm-unreferenced, decision-firm-superseded, decision-firm-edited, supersedes-reason-missing, supersedes-reason-acknowledged, policy-ownership, policy-markers, kb-consistency, kb-consistency-unresolved";
|
|
@@ -118,7 +118,7 @@ function validateEntityType(type?: string): void {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
const COVERAGE_PROOF_STATUSES: ReadonlySet<string> = new Set([
|
|
121
|
-
"
|
|
121
|
+
"tested",
|
|
122
122
|
"missing",
|
|
123
123
|
"unresolved",
|
|
124
124
|
"not_applicable",
|
|
@@ -227,7 +227,7 @@ export const findGapsSpec = {
|
|
|
227
227
|
* + bound-symbol code scope) and hand the Prolog coverage stage a
|
|
228
228
|
* TestId -> BindingHash dict. This is the default binding mode since slice 3;
|
|
229
229
|
* KIBI_PROOF_BINDING_MODE=strict-snapshot opts out (receipts then match only
|
|
230
|
-
* against the whole-workspace snapshot they were
|
|
230
|
+
* against the whole-workspace snapshot they were produced on).
|
|
231
231
|
*/
|
|
232
232
|
// implements REQ-kibi-verification-evidence-contract
|
|
233
233
|
export function currentProofBindingMode(): "per_contract" | "strict_snapshot" {
|
|
@@ -431,13 +431,13 @@ export async function executeCoverage(
|
|
|
431
431
|
},
|
|
432
432
|
};
|
|
433
433
|
const fullyCovered = Number(enrichedPayload.summary?.fullyCovered ?? 0);
|
|
434
|
-
const
|
|
434
|
+
const proofTested = Number(enrichedPayload.summary?.proofTested ?? 0);
|
|
435
435
|
const total = Number(enrichedPayload.summary?.total ?? 0);
|
|
436
436
|
return {
|
|
437
437
|
content: [
|
|
438
438
|
{
|
|
439
439
|
type: "text",
|
|
440
|
-
text: `Coverage summary: ${fullyCovered} structurally covered and ${
|
|
440
|
+
text: `Coverage summary: ${fullyCovered} structurally covered and ${proofTested} tested end to end out of ${total}.`,
|
|
441
441
|
},
|
|
442
442
|
],
|
|
443
443
|
structuredContent: enrichedPayload,
|
|
@@ -452,7 +452,7 @@ export const coverageSpec = {
|
|
|
452
452
|
name: "kb_coverage",
|
|
453
453
|
cliName: "coverage",
|
|
454
454
|
description:
|
|
455
|
-
"Generate curated structural coverage and conservative end-to-end requirement proof reports for requirements, symbols, or grouped types. Use it to ask which requirements are
|
|
455
|
+
"Generate curated structural coverage and conservative end-to-end requirement proof reports for requirements, symbols, or grouped types. Use it to ask which requirements are tested end to end, how strong each requirement's evidence is (evidenceLevel: proved, tested, asserted or unverified), and what blocks the rest; use kb_find_gaps for a plain list of missing links and kb_check for rule violations. Reports include the compatible repair plan plus typed kibi.migration-plan.v2 actions; semantic and E2E actions remain review/execution work. Paginated plans identify incomplete scope and no mutation occurs.",
|
|
456
456
|
businessInputSchema: {
|
|
457
457
|
type: "object",
|
|
458
458
|
properties: {
|
|
@@ -473,13 +473,13 @@ export const coverageSpec = {
|
|
|
473
473
|
type: "boolean",
|
|
474
474
|
default: false,
|
|
475
475
|
description:
|
|
476
|
-
"Also return rows that are already
|
|
476
|
+
"Also return rows that are already tested or not applicable. By default only rows that still need repair are returned.",
|
|
477
477
|
},
|
|
478
478
|
statuses: {
|
|
479
479
|
type: "array",
|
|
480
480
|
items: {
|
|
481
481
|
type: "string",
|
|
482
|
-
enum: ["
|
|
482
|
+
enum: ["tested", "missing", "unresolved", "not_applicable"],
|
|
483
483
|
},
|
|
484
484
|
description:
|
|
485
485
|
"Requirement proof-status filter (req mode): include only rows whose proofStatus is listed. Selecting statuses implies include-passing; not_applicable rows carry their typed applicability reason in proofStages.applicability.reason. The summary always reflects the whole KB.",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: kibi-freshness
|
|
3
3
|
name: kibi-freshness
|
|
4
4
|
description: Check exact Git attachment, branch migration/quarantine, compiled-store freshness, source linkage, and repair state before decisions or writes.
|
|
5
|
-
version: 2.
|
|
5
|
+
version: 2.1.0
|
|
6
6
|
kibiCompatibility: ">=1.0.0"
|
|
7
7
|
tags:
|
|
8
8
|
- kibi
|
|
@@ -53,7 +53,7 @@ echo '{}' | npx --no-install kibi status --input -
|
|
|
53
53
|
`committed_with_repairs`, follow required typed `nextActions`; never retry the
|
|
54
54
|
original operation.
|
|
55
55
|
|
|
56
|
-
For every freshness, branch, or completion question, call `kb_status` first, then `kb_query` the entities and source files that status names, then `kb_check` as the last Kibi call before answering. Never skip the query step, even when status alone seems to answer the question. If another query or write follows a check, run `kb_check` again before answering. When asked whether requirements are consistent or proven, run `kb_query`, then `kb_check` with the domain-contradictions
|
|
56
|
+
For every freshness, branch, or completion question, call `kb_status` first, then `kb_query` the entities and source files that status names, then `kb_check` as the last Kibi call before answering. Never skip the query step, even when status alone seems to answer the question. If another query or write follows a check, run `kb_check` again before answering. When asked whether requirements are consistent or proven, run `kb_query`, then `kb_check` with the rules `domain-contradictions`, `kb-consistency` and `kb-consistency-unresolved`, then `kb_coverage`, and read whether the analysis was complete. `domain-contradictions` compares facts two at a time; `kb-consistency` checks every fact of a property together, so a clean pairwise result is not proof. Report a `kb-consistency` violation as a conflict, name every requirement it lists, and give superseding or changing one of them as the next step; never edit or delete facts to make the check pass. Report a context `kb-consistency-unresolved` names as unresolved, never as consistent, with the step that would make it comparable. Report any unmodeled or unknown clause as incomplete analysis, not as consistent. Only when every clause is fully modeled and compatible, state plainly that no conflict was found. For authorized knowledge changes, keep the exact supplied target and intended relationship edges, and discover and query those targets first. Validate the payload with `kb_upsert` and `dryRun: true`, then perform the authorized `kb_upsert` with that same payload and read the result back exactly before the final checks. A passing dry run is validation, not completion. Distinct authorized payloads may need several sequential writes, each validated and read back, but never retry a mutation that already committed. If a mutation returns `committed_with_repairs`, follow its typed `nextActions` instead of repeating the original operation.
|
|
57
57
|
|
|
58
58
|
## Guidance
|
|
59
59
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
id: kibi-usage
|
|
3
3
|
name: Kibi Usage
|
|
4
4
|
description: Use Kibi's source-first, exact-Git, migration-aware, proof-aware operations safely across MCP or the trusted local CLI, including partial completion repair.
|
|
5
|
-
version: 2.
|
|
5
|
+
version: 2.24.0
|
|
6
6
|
kibiCompatibility: ">=1.0.0"
|
|
7
7
|
tags:
|
|
8
8
|
- kibi
|
|
@@ -168,7 +168,7 @@ End every task with these five independent fields:
|
|
|
168
168
|
taskOutcome: complete | interim | blocked
|
|
169
169
|
kbState: clean_fresh | stale | dirty | legacy_compat | not_evaluated
|
|
170
170
|
verificationState: fresh | dirty | unavailable | not_evaluated
|
|
171
|
-
proofState:
|
|
171
|
+
proofState: tested | mixed | unresolved | not_evaluated
|
|
172
172
|
limitationDisposition: none | accepted | unaccepted | not_applicable
|
|
173
173
|
```
|
|
174
174
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Proof and Verification Workflow
|
|
2
2
|
|
|
3
|
-
Use this resource when a requirement must be
|
|
3
|
+
Use this resource when a requirement must be tested end to end before handoff, when
|
|
4
4
|
wiring a proof-bearing test, or when `kb_ingest_proof` or `kibi prove`
|
|
5
5
|
rejected evidence.
|
|
6
6
|
|
|
@@ -97,9 +97,9 @@ Cosmetic edits (descriptions, labels) never stale proof. Execution-relevant
|
|
|
97
97
|
edits (command, artifact, targets, options, bindings, contract) change the
|
|
98
98
|
effective fingerprint and do.
|
|
99
99
|
|
|
100
|
-
## What counts toward
|
|
100
|
+
## What counts toward proofTested
|
|
101
101
|
|
|
102
|
-
A requirement
|
|
102
|
+
A requirement reaches `proofStatus: tested` only through its scenarios' tests, and a scenario test
|
|
103
103
|
counts only when it is an **end-to-end** test with a valid, fresh, passing
|
|
104
104
|
receipt for the current snapshot.
|
|
105
105
|
|
|
@@ -109,7 +109,7 @@ receipt for the current snapshot.
|
|
|
109
109
|
`source` path contains `e2e`) counts as end-to-end; anything else is
|
|
110
110
|
`unknown` scope.
|
|
111
111
|
- A `unit` or `integration` receipt is still recorded on the test entity, but
|
|
112
|
-
it does not move `
|
|
112
|
+
it does not move `proofTested` for a behavioural requirement: the
|
|
113
113
|
requirement keeps the `missing_passing_e2e` gap in `proofGaps`. The one
|
|
114
114
|
exception is a scenario whose specifying requirements are all grounded only
|
|
115
115
|
in component-scope UI predicates (`ui_pattern`, `same_pattern`,
|
|
@@ -120,6 +120,38 @@ receipt for the current snapshot.
|
|
|
120
120
|
receipt does not change it, and a `passing` status without a fresh receipt
|
|
121
121
|
proves nothing.
|
|
122
122
|
|
|
123
|
+
## Evidence levels
|
|
124
|
+
|
|
125
|
+
Every requirement row also carries `evidenceLevel`, the strength of what backs
|
|
126
|
+
it, and `evidence`, the entries that earned it (each with `kind`, `scope` and
|
|
127
|
+
`level`):
|
|
128
|
+
|
|
129
|
+
- `proved`: a re-checkable certificate covers every case. No proof kind issues
|
|
130
|
+
certificates yet, so nothing reaches it today.
|
|
131
|
+
- `tested`: `proofStatus` is `tested`; fresh E2E receipts cover every linked
|
|
132
|
+
scenario.
|
|
133
|
+
- `asserted`: a person stands behind the statement (approved, or firm by
|
|
134
|
+
`firmness` or a non-agent origin) but nothing current checks it.
|
|
135
|
+
- `unverified`: an agent wrote it, no person approved it, nothing checks it.
|
|
136
|
+
|
|
137
|
+
Report the level as it is. Never call an `asserted` or `unverified`
|
|
138
|
+
requirement proven or tested, and never call `tested` proved. Firmness is a
|
|
139
|
+
separate axis: it says how sure the person is, not how strong the evidence is.
|
|
140
|
+
|
|
141
|
+
## Knowledge-base certificates
|
|
142
|
+
|
|
143
|
+
`kb_check` (`kibi check`) proves facts about the KB itself in its
|
|
144
|
+
`kb-consistency` rule and re-checks each answer with an independent checker:
|
|
145
|
+
property facts are consistent (a model per subject, property and scope, or an
|
|
146
|
+
irreducible contradiction core), predicate facts and allow/deny decisions are
|
|
147
|
+
consistent, and stored rules are stratified. It catches facts that contradict
|
|
148
|
+
only together, which the pairwise `domain-contradictions` rule misses. A
|
|
149
|
+
`kb-consistency` violation names the core facts and the requirements behind
|
|
150
|
+
them: supersede or change one of those requirements; never edit the facts so
|
|
151
|
+
the check passes. Quote a `kb-consistency-unresolved` diagnostic as
|
|
152
|
+
unresolved, never as consistent. Opposing rule pairs and scenario
|
|
153
|
+
feasibility are not certified yet; their own rules still decide them.
|
|
154
|
+
|
|
123
155
|
## Attempt semantics (factual, never optimistic)
|
|
124
156
|
|
|
125
157
|
- `attempts: {status: "complete", entries: [...]}` — known history; the
|
|
@@ -9,7 +9,7 @@ success flag):
|
|
|
9
9
|
taskOutcome: complete | interim | blocked
|
|
10
10
|
kbState: clean_fresh | stale | dirty | legacy_compat | not_evaluated
|
|
11
11
|
verificationState: fresh | dirty | unavailable | not_evaluated
|
|
12
|
-
proofState:
|
|
12
|
+
proofState: tested | mixed | unresolved | not_evaluated
|
|
13
13
|
limitationDisposition: none | accepted | unaccepted | not_applicable
|
|
14
14
|
```
|
|
15
15
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# explicitly do not want to publish the HTML report.
|
|
6
6
|
# Manual step: Settings → Pages → Source → GitHub Actions
|
|
7
7
|
#
|
|
8
|
-
# Pull requests still generate the report (same snapshot and %
|
|
8
|
+
# Pull requests still generate the report (same snapshot and % tested)
|
|
9
9
|
# and upload it as a workflow artifact. Only the repository default
|
|
10
10
|
# branch (and manual workflow_dispatch) may deploy the canonical badge
|
|
11
11
|
# to GitHub Pages. Use the unprivileged pull_request event so untrusted
|