dev.malpercio.cards.witness

cards.malpercio.dev

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "An appview's signed observation of a card changing hands, written into the appview's own repo. Triggered by a dev.malpercio.cards.item appearing on the firehose. Accepted witnesses form a prev-linked chain per give; exactly one accepted witness exists per (give, hop). Rejected witnesses explain why a claimant's item is not recognized. The chain is durable against player-side deletions and auditable by replaying the firehose.",
      "key": "tid",
      "record": {
        "properties": {
          "detail": {
            "description": "Rejected only. Human-readable specifics, e.g. the URI of the item that won.",
            "maxLength": 512,
            "type": "string"
          },
          "from": {
            "description": "Sender of the transfer, if any.",
            "format": "did",
            "type": "string"
          },
          "give": {
            "description": "Root give this observation concerns.",
            "format": "at-uri",
            "type": "string"
          },
          "holder": {
            "description": "Repo owner of item. For accepted witnesses, the recognized holder after this hop.",
            "format": "did",
            "type": "string"
          },
          "hop": {
            "description": "Accepted only. 0 = received from provider, n = nth transfer.",
            "minimum": 0,
            "type": "integer"
          },
          "item": {
            "description": "The claimant's item as seen. Pinned so the observation stands even if the item is later deleted.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "prev": {
            "description": "Accepted only. The accepted witness for hop-1.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "reason": {
            "description": "Rejected only. superseded: another item was already accepted at this hop. not-holder: the transfer's sender was not the recognized holder. expired: transfer.expiresAt passed before the item appeared. invalid: the records fail structural verification (recipient, CID, revoked give).",
            "knownValues": [
              "superseded",
              "not-holder",
              "expired",
              "invalid"
            ],
            "type": "string"
          },
          "seenAt": {
            "format": "datetime",
            "type": "string"
          },
          "status": {
            "knownValues": [
              "accepted",
              "rejected"
            ],
            "type": "string"
          },
          "transfer": {
            "description": "The transfer as seen, absent at hop 0.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          }
        },
        "required": [
          "give",
          "item",
          "holder",
          "status",
          "seenAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "dev.malpercio.cards.witness",
  "lexicon": 1
}

Validate Record

Validate a record against dev.malpercio.cards.witness

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:kmg2eqexpdefljft34crzesc
CID
bafyreif4azxoism3verd4lodaaztjkiwedf6774i2exosu2ldd4dq2acpe
Indexed At
2026-10-20 23:53 UTC
AT-URI
at://did:plc:kmg2eqexpdefljft34crzesc/com.atproto.lexicon.schema/dev.malpercio.cards.witness

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • Written by the current owner to hand a card to another DID. The recipient completes the transfer by writing a dev.malpercio.cards.item whose 'via' strongRefs this record. Repos are mutable, so an appview indexing the fi…

  • A card (or sealed pack) held by the repo owner. Not authoritative on its own: validity comes from the chain of strongRefs back to a provider give whose recipient matches the current owner at each hop. Blobs are the owne…

Lexicon Garden

@