Derived from docs/problem.md, schema/claim.schema.json, and the ADR
log. Every entity here traces to a requirement; every relationship
traces to a constraint.
Context Responsibility Key entity
Claim Emission Create, sign, and store claims in the store Claim
Claim Evaluation Compute status by folding the log ClaimStatus
Anchor Resolution Resolve anchors to code spans within a tree Anchor
Release Gating Evaluate release policy against claims Verdict
Predicate Evaluation Execute predicate expressions (GATED by E0) Expression
Git Projection Synthesize git objects from the claim log GitCommit
elench Store Content-addressed storage: blobs, trees, claims Store
Envelope Verification DSSE envelope signing and verification Envelope
A signed assertion about a tree. The aggregate root of the claim log.
Identity is the content address at creation; stable across status
changes.
Field Type Required Notes
idstring ^cl_[0-9a-f]{64}$ yes Content address, never reassigned
kindenum: assertion, falsification, verification, supersession, residue-acceptance yes falsification/verification/supersession require target
targetarray of claim ids no Claims this record acts upon
assertionobject yes Contains form (predicate/annotation), optional expression, optional text
originobject yes Contains kind and producer
anchorobject yes Contains tree (elench OID) and strategy
timestamp integer (Unix epoch) yes Set by producer at emission. Used by ADR-0007 for deterministic commit synthesis.
evidencearray no Empty for agent-asserted claims by default
dependsOnarray of claim ids no Premises. Transitive closure IS the blast radius.
The append-only set of claims that IS the primary history (ADR-0001).
No aggregate owns individual claims; the log is the aggregate that
collects them. Status is computed by folding, never stored.
Append-only. No record is ever modified or deleted.
The git projection is derived from the claim log, not the other way
around (ADR-0002).
No daemon. Everything is derivable from the store by a client-side
binary.
The content-addressed substrate (ADR-0001). Holds blobs, trees, and
claims. There is no separate git repository.
Content-addressed: blobs by content hash, trees by content hash,
claims by content hash.
The store IS the history. There is no parallel ref namespace, no
sidecar database.
The git projection reads from the store and synthesizes git objects
on demand (ADR-0002).
Field Type Required Notes
formenum: predicate, annotation yes predicate can gate; annotation cannot
expressionobject: { language, source, digest? } required when form=predicate executable, deterministic, sandboxable
textstring, max 2000 chars no Human-readable. Never load-bearing.
Field Type Required Notes
kindenum: harness-observed, agent-asserted, human-asserted yes R2. Agents cannot emit harness-observed.
producerobject: { id, sessionId?, hermeticity? } yes Distinct from signer (envelope).
Field Type Required Notes
treestring (elench tree OID) yes Content address of the tree state in the store. NOT a git commit OID.
strategyenum: path-range, symbol, content-digest, multi yes UNRESOLVED — E1 decides.
pathstring no For path-range strategy.
range[int, int] no For path-range strategy.
symbolstring no For symbol strategy.
contentDigeststring no For content-digest strategy.
Field Type Required Notes
kindenum: process-exit, test-report, artifact-digest, external-attestation yes
digeststring no
exitCodeinteger no For process-exit.
uristring no
Value Meaning
unevaluatedNo verification or falsification record targets this claim. Default.
passedA verification record exists and no falsification has invalidated it.
falsifiedA falsification record has changed this claim’s status.
The result of evaluating a release policy against a claim log for a
given tree. Not stored — computed at evaluation time.
Field Type Notes
resultenum: pass, fail
reasonsarray of strings Which conditions failed and why.
treestring The elench tree OID evaluated.
policystring The policy evaluated against.
A git commit object synthesized from the claim log by the git
projection (ADR-0002, ADR-0007). Not stored in the elench store —
generated on demand.
Field Type Notes
oidstring Deterministic function of (tree, parents, author, committer, message, timestamps).
treestring elench tree OID, mapped to a git tree OID.
parentsarray of git commit OIDs Derived from the claim log.
authorstring Derived from the claim’s producer.id.
committerstring Same as author (no separate committer).
messagestring Derived from an annotation claim, if present.
Field Type Required Notes
oid string [0-9a-f]{64} yes SHA-256 content hash. Identical to git SHA-256 blob OID.
data bytes yes Content.
Field Type Required Notes
name string yes Entry name within the parent tree (e.g., “lib.rs”, “src”). NOT a full path — git-compatible.
mode integer yes File mode (0o100644 regular file, 0o100755 executable, 0o120000 symlink, 0o040000 directory).
oid string [0-9a-f]{64} yes SHA-256 content hash. For files: blob OID. For directories: tree OID.
kind enum: blob, tree yes Whether this entry is a blob (file) or a tree (directory).
Field Type Required Notes
oid string [0-9a-f]{64} yes SHA-256 content hash of the canonical serialization (git tree object format: mode space name null oid, sorted by name with trailing ‘/’ for directories). Identical to a git SHA-256 tree OID.
entries array of TreeEntry yes Sorted by name. Directory names sort as if they have a trailing ‘/’.
Claim
├── 1..* ──→ Claim (via dependsOn: premises)
├── 1..* ──→ Claim (via target: falsification/verification/supersession)
├── 1..* ──→ Evidence
└── 1 ──→ Anchor
elench Store
├── 0..* ──→ Claim
└── 0..* ──→ Tree (content-addressed)
GitCommit
└── projected from ──→ Claim Log + elench Store
Verdict
└── computed from ──→ Claim Log + Release Policy
┌───────────┐ falsification ┌──────────┐
(default) │unevaluated│ ──────────────────▶ │falsified │
└───────────┘ supersession └──────────┘
│ ▲ ▲ │
verification │ falsification │ │
▼ │ of verification │ │
┌───────────┐ falsification │ │
│ passed │ ──────────────────────▶ │ │
└───────────┘ supersession │ │
│ ▲ │ │
falsification │ │ falsification │ │
of verification │ │ of falsification │ │
▼ │ ▼ │
┌───────────┐ ┌──────────┐
│unevaluated│ ◀────────────────────│falsified │
└───────────┘ (revert to previous) └──────────┘
Status is computed by folding the log, not stored. A claim’s status at
any point in time is a pure function of the claims that target it.
Falsification and supersession both change the target’s status to
falsified. If a verification record is itself falsified, the target
reverts to unevaluated (no valid verification remains). If a
falsification record is itself falsified, the target reverts to its
previous status (the falsification is void). This recursive fold — a
claim’s status depends on the status of claims that target it — must
be computed with cycle detection (INV-29).