Skip to main content

Concepts · 3 of 5

Evidence bound to revisions

A protocol declares artifacts, the things evidence is about. Evidence is bound to the artifact revision it was observed on. When the artifact moves on, that evidence no longer applies to the current revision.

Shippedcrates/canon/src/eval/, binding, freshness and invalidation

Evidence bound to revisions

Claims are evaluated as if evidence bound to an earlier revision had not been given. A claim decided by an evidence match on it goes back to UNKNOWN, not to FALSE. A claim that tests whether another claim is UNKNOWN is decided by that UNKNOWN, so it can become TRUE or FALSE.

Revision R1Revision R2
EvidenceA check passes; the record names the artifact and R1.The R1 record still exists but no longer applies.
ClaimTRUEUNKNOWN until evidence about R2 arrives.

The same applies to anything that concerns a particular version: approvals, reviews, datasets, deployments, inspection records.

Evidence about one artifact​

A protocol with several artifacts often needs a claim that only evidence about one of them can decide. An evidence match that names a subject reads only records about that artifact. A record about another declared artifact does not match it, even when that record is bound to the other artifact's current revision: it neither establishes the claim nor contradicts it. A match that names no subject reads records about any declared artifact.

RecordsMatch with subject: explanationMatch without a subject
An attempt about the explanation survivedTRUETRUE
An attempt about the dataset survivedUNKNOWNTRUE
An attempt about the explanation was refuted, one about the dataset survivedFALSEUNKNOWN

A record about another artifact is not listed as excluded under a claim whose match is bound to a subject, because it does not match. That holds even when revision binding excludes it: the record is listed only under the claims with a match that would read it.

Freshness​

Evidence can also expire. An observation older than the protocol allows becomes inapplicable, and expiry alone never implies FALSE.

Invalidation​

When an upstream artifact changes, claims whose only support was bound to its previous revision are invalidated. A protocol says which claims depend on which upstream artifact with invalidation rules:

invalidation:
dataset.revised:
upstream: dataset
invalidates:
- explanation.supported

An evidence record says which upstream revisions it was observed against:

upstream_revisions:
dataset: d1

Once the case snapshot's revision of dataset is no longer d1, the record no longer supports explanation.supported, nor any claim built on it. Exclusion is per claim: a claim the rule does not name, and that is not built on one it names, still reads the record, even when it reads the same kind of evidence. A record that records no revision of the upstream artifact is never invalidated.

ShippedRevision binding

Artifacts are declared in protocol/1, a canon-case/1 snapshot records each artifact's current revision, and every canon-evidence/1 record names its subject artifact and revision (evaluation documents). canon evaluate refuses a record whose subject the protocol does not declare (undeclared-artifact), and leaves a record bound to any other revision of its subject out of claim evaluation: the decision lists it as excluded under each claim with a match that would read it, in excluded_evidence, with the reason revision_mismatch. Conformance scenario CANON-EVIDENCE-001 holds the table above.

ShippedSubject-bound evidence matches

An evidence match in protocol/1 may name a subject, which must be a declared artifact (canon validate refuses another as undeclared-artifact). Conformance scenario CANON-EVIDENCE-003 holds the table under evidence about one artifact.

ShippedFreshness

An evidence kind may declare a max_age, and a canon-evidence/1 record may give its observed_at. Given an evaluation instant (canon evaluate --at), a record older than its kind's max_age at that instant is left out of claim evaluation and listed as excluded with the reason expired: an evidence match it alone decided is UNKNOWN rather than FALSE, and claims follow their predicates. Without an instant, or without observed_at, nothing expires: Canon reads no clock. Conformance scenario CANON-EVIDENCE-002 holds this.

ShippedInvalidation

A protocol/1 document may declare invalidation: rules, and a canon-evidence/1 record may give its upstream_revisions (evaluation documents). canon validate refuses a rule whose upstream artifact or invalidated claim the protocol does not declare (undeclared-artifact, undeclared-claim), and one that names a claim reaching no evidence match (inert-invalidation). canon evaluate evaluates each claim the rule names, and every claim built on them, without an invalidated record anywhere in its evaluation, including in the claims it tests, and lists the record in its excluded_evidence, with the reason invalidated, when a match it reaches reads it. A named claim loses the support the record gave, and claims built on it follow their predicates; every other claim keeps the record. canon check checks records observed before an upstream move and after it, alone and together. Conformance scenario CANON-INVALIDATION-001 holds this.