Evidence grades
A record may say how much evidence stands behind it; a verifier works that out again from the record's own bytes and the proofs it can check, and reports any claim they do not support.
1What it is
The evidence layer names three levels of assurance a record can reach, self-attested (signed only by its producer, with neither a witness nor a countersignature), witnessed and countersigned, but defines no rule for a verifier to re-derive them.
The Agent Action Capsule draft does define such a rule for its own assurance fields: a verifier re-derives each one from what it can check, for cross_party_rung from the record's own cross_party block, and reports the derived value.
When a record claims more than that, the verifier reports the claim as an overclaim beside the derived value, and no draft turns any of this into a reputation number.
2Design choices
cross_party_rung.countersigned value into attestation_mode, which would make "both sides signed, not yet anchored" impossible to express. (AAC -05 §5.4.1)time_rung: "witnessed" on a backfilled record fails verification, because the claim is unsupported and "falsifiable from the record's own bytes". (AAC -05 §6 checks 7 and 9)epistemic_type (how its content came to be known) is fixed at commit and never upgraded.3What it shows / what it does not
Shows
- For each
assurancefield, the value the verifier can support:chainedfrom an intact chain block,anchoredonly after it verifies an inclusion proof against a trusted log key. - For
cross_party_rung, what the record's owncross_partyblock contains: aninitiator_refdigest, acounterparty_refdigest andcorrelator, and asubstantiveflag. - Where a record claimed more than that, as a named finding with the claimed and the derived value.
Does not show
- That the record's content is true; a grade says who signed and how it was committed, not how its content was known.
- More than inclusion, from a Receipt: it shows a statement is in a log. Checking that each checkpoint extends the one before is a witness's job, a separate party (evidence layer -00 §3).
- That a witness or countersigner is independent of the producer; that is a claim about who runs it.
- That the other side signed anything:
cross_party_rungis derived from the block's own bytes, without opening the digests it cites or checking the counterparty's signature;substantive: trueis the producer's word. - Anything about a party's other records. There is no reputation number anywhere in these drafts.
4Example
A test vector for exactly this case: a record claims full_bilateral (both parties' evidence bound in) but its cross_party block holds only initiator_ref, a digest of the initiator's own signed half, and no counterparty_ref. The input, then the verifier's expected result.
// input.json
{
"action_id": "cp-overclaim",
"action_type": "decide",
"assurance": {
"attestation_mode": "self_attested",
"cross_party_rung": "full_bilateral",
"effect_mode": "not_applicable",
"ledger_mode": "standalone"
},
"capsule_id": "6bddc7510b73ee2b0a3b3d4cea9e8aceb3c6786fa6f5a58d56b11723d14bb1e4",
"cross_party": {
"initiator_ref": "1111111111111111111111111111111111111111111111111111111111111111"
},
…
}
// expected.json
{
"capsule_id_recomputed": "6bddc7510b73ee2b0a3b3d4cea9e8aceb3c6786fa6f5a58d56b11723d14bb1e4",
"derived": {
"attestation_mode": "self_attested",
"cross_party_rung": "unilateral_fallback",
"effect_mode": "not_applicable",
"ledger_mode": "standalone"
},
…
"findings": [
{
"check": 7,
"code": "assurance_overclaim",
"detail": "claimed cross_party_rung 'full_bilateral' but verifier derived 'unilateral_fallback' (§5.3 Cross-party assurance)",
"severity": "info"
}
],
"kind": "overclaim",
"ok": true,
…
}
| Field | Type | Meaning |
|---|---|---|
| assurance.cross_party_rung | tstr | The producer's claim: full_bilateral, both sides' evidence bound in. |
| cross_party.initiator_ref | hex tstr | Digest of the initiator's own signed half; the only half present. |
| cross_party.counterparty_ref | (absent) | No other-side half is referenced, so the claim cannot hold. |
| derived.cross_party_rung | tstr | What the verifier derives: unilateral_fallback. |
| findings[].code | tstr | assurance_overclaim: claimed above derived. |
| findings[].severity | tstr | info: reported, does not fail the record. |
| ok | bool | True: no failing check; the overclaim is reported and the derived value stands. |
The section number inside detail is the vector's own text; in the -05 draft the subsection is §5.4.1.
Source: action-state-group/agent-action-capsule:vectors/capsule/neg-cross-party-overclaim/input.json and expected.json @ 2ef8aeb49e2334e24c404bd62d3fdb161770873c
5Specs
- Internet-Draft draft-mih-agent-evidence-layer-00 — defines self-attested, witness and countersignature, and fixes
epistemic_typeat commit. - Internet-Draft draft-mih-scitt-agent-action-capsule-05 — the
assurancemodes,cross_party_rung,time_rung, and the verifier's re-derivation. - Internet-Draft draft-mih-agent-bilateral-attestation-02 — the two signed halves a cross-party grade summarizes; degraded records are always marked.
- Internet-Draft draft-mih-agent-settlement-records-00 — records both sides of a payment; does not rank or rate the parties.
- RFC RFC 9943 — SCITT architecture: Transparency Service, Receipt, Auditor.
- RFC RFC 9942 — COSE Receipts.