A signed claim that the issuing repo's DID vouches for `subject` as a trusted publisher of EmDash plugins. The official EmDash identity publishes these as the trust root; trusted issuers may delegate by issuing further verification claims of their own. Clients consume the resulting graph via the standard atproto-accept-labelers mechanism. The record key is a TID. Verification is bound to the subject's handle and displayName at the moment of issuance: a change to either invalidates the verification until the issuer re-attests. This matches Bluesky's app.bsky.graph.verification semantics and defends against handle reuse and identity drift.
tid
Timestamp-based ID
Properties
createdAt
string
datetime
Required
When the verification was issued.
displayName
string
Required
Subject's `displayName` from their `com.emdashcms.experimental.publisher.profile` record (rkey `self`) at the moment of issuance. The verification is only valid if the subject's current publisher profile displayName matches this value byte-for-byte. A subject without a publisher profile cannot be verified: the issuer MUST require the subject to publish a publisher.profile before issuing the claim, and clients MUST reject verifications whose subject has no publisher profile resolvable at issuance check time.
maxLength: 1024 bytesmaxGraphemes: 100 graphemesexpiresAt
string
datetime
Optional
Optional expiration timestamp. If absent, the verification has no automatic expiry. Clients SHOULD treat the verification as not in force after this time, regardless of whether the issuer has revoked it.
handle
string
handle
Required
Handle of the subject at the moment of issuance. The verification is only valid if the subject's current handle (resolved from their DID document) matches this value byte-for-byte. Any handle change invalidates the verification until the issuer re-attests.
subject
string
did
Required
DID of the subject the verification applies to.
View raw schema
{
"description": "A signed claim that the issuing repo's DID vouches for `subject` as a trusted publisher of EmDash plugins. The official EmDash identity publishes these as the trust root; trusted issuers may delegate by issuing further verification claims of their own. Clients consume the resulting graph via the standard atproto-accept-labelers mechanism. The record key is a TID. Verification is bound to the subject's handle and displayName at the moment of issuance: a change to either invalidates the verification until the issuer re-attests. This matches Bluesky's app.bsky.graph.verification semantics and defends against handle reuse and identity drift.",
"key": "tid",
"record": {
"properties": {
"createdAt": {
"description": "When the verification was issued.",
"format": "datetime",
"type": "string"
},
"displayName": {
"description": "Subject's `displayName` from their `com.emdashcms.experimental.publisher.profile` record (rkey `self`) at the moment of issuance. The verification is only valid if the subject's current publisher profile displayName matches this value byte-for-byte. A subject without a publisher profile cannot be verified: the issuer MUST require the subject to publish a publisher.profile before issuing the claim, and clients MUST reject verifications whose subject has no publisher profile resolvable at issuance check time.",
"maxGraphemes": 100,
"maxLength": 1024,
"type": "string"
},
"expiresAt": {
"description": "Optional expiration timestamp. If absent, the verification has no automatic expiry. Clients SHOULD treat the verification as not in force after this time, regardless of whether the issuer has revoked it.",
"format": "datetime",
"type": "string"
},
"handle": {
"description": "Handle of the subject at the moment of issuance. The verification is only valid if the subject's current handle (resolved from their DID document) matches this value byte-for-byte. Any handle change invalidates the verification until the issuer re-attests.",
"format": "handle",
"type": "string"
},
"subject": {
"description": "DID of the subject the verification applies to.",
"format": "did",
"type": "string"
}
},
"required": [
"subject",
"handle",
"displayName",
"createdAt"
],
"type": "object"
},
"type": "record"
}