Full name: pub.techne.draft.credential
A verifiable credential: an issuer's statement about one record in its subject's repo.
Field names follow community.lexicon.attestation and badge.blue: subject, record, issuer, notBefore, notAfter, signature. There is no kind field: the attested record's collection is the kind. With fields, digest is the CID of the canonical DAG-CBOR map of exactly those fields of the attested record, so an edit to any other field (a label) leaves the credential valid; without fields, cid pins the whole record. It binds in exactly two forms. Stored by its subject and signed (author = subject, author ≠ signer): it must carry signature, which covers dagcbor({$type, issuer, subject, record, fields?, digest?, cid?, notBefore, notAfter, revocation}) (ES256K, low-S, over sha256, 64-byte r||s, base64url without padding), never createdAt or where the credential is stored, and verifies under signature.key in the issuer's DID document; it counts only when the issuer's pub.techne.draft.publisher issues covers the attested record's collection and fields and the commons root vouches for that declaration, no record exists at revocation, and digest or cid match the attested record now; it is placed only in its subject's pub.techne.draft.space.credential at skey = the record key. Published by the commons root (COMMONS_ROOT_DID) in its own repo and unsigned (author = issuer = the root; the repo commit is the proof): record is an account's pub.techne.draft.publisher at rkey self and cid that record's current CID; revocation must be an address in the root's own repo under pub.techne.draft.credentialRevocation, and it counts while no record exists there; it is PUBLIC. Nothing else binds: an unsigned credential from any other issuer, or a copy in any other repo, counts for nothing. notAfter is metadata: a credential past it is not void by that alone. An issuer's own identity index is its operational binding ledger, kept from its issuance log; it is not derived from wallet records.