# description
The payload of a did:dfos:credit-claim JWS — a claimant's own signed assertion that it holds a named role on a content chain. Unlike post/v1, profile/v1, and index/v1, this is NOT a document committed to a chain by CID: it is an envelope payload carried inside document bytes, in the claim field of a credits entry (see $defs/creditEntry). Attribution, not authorization — a credit claim grants nothing. Unknown top-level fields are deliberately NOT rejected here (no additionalProperties: false, unlike the document schemas): this is a wire payload under the protocol's MUST-ignore-unknown rule, and the CID commits to the exact bytes, so a verifier that stripped unknown keys would fail its own CID check. Full semantics, the two-way bind, and the four verification states: https://protocol.dfos.com/credits

# properties.contentId.description
The content chain this claim binds to — the binder. A 31-char content chain id, never a documentCID and never a chain head CID: binding the chain is what lets a claim survive edits verbatim and avoids circularity with the document that embeds it. Naming the chain in the signed bytes is also what makes a claim anti-replay — it cannot be lifted into another chain's document.

# properties.did.description
The claimant DID. MUST equal the DID portion of the JWS header's kid — only the claimant can claim its own credit.

# properties.role.description
The claimed role — open vocabulary, compared by exact, case-sensitive byte equality with no normalization of any kind (not case folding, not Unicode normalization, not whitespace trimming). One component of the bind, so any normalization would let implementations disagree about whether an entry is claimed.

# properties.createdAt.description
When the claimant signed (ISO 8601, millisecond precision, UTC). Provenance metadata only — unlike an operation's createdAt it orders nothing and gates nothing, and a claim has no expiry.

# properties.asOfDocumentCID.description
Optional content-strength flavor — the document state the claimant pins its credit to. When the key IS present it MUST be a non-empty string: an empty string is a distinct, CID-changing encoding from an absent field, so accepting it would mean two claim CIDs for the same statement. NOT part of the bind; consumers that ignore it are conformant. Omission is the default and is CID-neutral.

# $defs.creditEntry.description
The canonical credits[] entry shape — the document-plane site that hosts a credit claim. Schemas carrying credits inline this shape (post/v1 does). Array order is display order; the first entry is the primary author.

# $defs.creditEntry.properties.role.description
Free-text role — open vocabulary, not an enum (e.g. "author", "editor", "photography"). Compared byte-exact against the claim payload's role, so it is REQUIRED whenever claim is present: an entry with a claim but no role — or an empty role, which can never equal the payload's non-empty one — has nothing to bind to and is invalid, not unclaimed.

# $defs.creditEntry.properties.name.description
Credited party's display name at time of publication — a rendering convenience so a document reads without resolving every credited DID. Never authoritative (the credited DID's profile is) and never compared during verification.

# $defs.creditEntry.properties.claim.description
A did:dfos:credit-claim JWS asserting this same credit, bound to the entry by exact match of (contentId, did, role). Absent is the ordinary "unclaimed" state, not a defect — the credited party may hold no keys. A claim present but failing verification or the bind is "invalid" and MUST NOT be rendered as unclaimed.