social.coves.community.postv2

coves.social

Documentation

A post authored by a user, living in the author's repository. Successor to the deprecated social.coves.community.post: authorship is derived from the repository the record lives in, so there is no in-record author field. A post claiming a community is not visible in it until the community writes a social.coves.community.acceptance for it - community surfaces render from acceptance records only. Repo placement attributes authorship as vouched for by a verifying relay or a direct DID-resolved PDS fetch; firehose events themselves carry no commit-signature proof.

main record

A post authored by a user, living in the author's repository. Successor to the deprecated social.coves.community.post: authorship is derived from the repository the record lives in, so there is no in-record author field. A post claiming a community is not visible in it until the community writes a social.coves.community.acceptance for it - community surfaces render from acceptance records only. Repo placement attributes authorship as vouched for by a verifying relay or a direct DID-resolved PDS fetch; firehose events themselves carry no commit-signature proof.

Record Key tid Timestamp-based ID

Properties

bridgedStats ref #bridgedStats Optional

Bridge-asserted aggregate of origin-platform votes for federated/bridged content. Set by the bridge that materialized this record; absent for natively-authored posts.

community string did Required

DID of the community this was submitted to. Immutable across updates: consumers MUST ignore the entire update event that changes it - discard the whole event, not merely retain the old community value - since retargeting a post means writing a new post record.

content string Optional

Post content - supports rich text via facets

maxLength: 500000 bytesmaxGraphemes: 50000 graphemes
createdAt string datetime Required

Timestamp of post creation

crosspostChain array of ref com.atproto.repo.strongRef Optional

Full chain of crossposts with version pinning. First element is original, last is immediate parent.

maxLength: 25 items
facets array of ref social.coves.richtext.facet Optional

Annotations for rich text (mentions, links, formatting, block structure)

maxLength: 200 items
federatedFrom unknown Optional

The origin platform or instance this post was federated from, for bridged content. Unconstrained for the same reason as originalAuthor.

langs array of string language Optional

Languages used in the post content (ISO 639-1)

maxLength: 3 items
location unknown Optional

Optional place this post is about or was authored from. Unconstrained pending a geo vocabulary; absent for the overwhelming majority of posts.

originalAuthor unknown Optional

The author on the origin platform, for content a bridge materialized here. Deliberately unconstrained: no bridge has fixed this shape yet, and pinning one now would be inventing a contract the first real bridge would contradict. Consumers MUST tolerate any object here and MUST NOT treat it as an authorship claim about this repo - authorship is the repository the record lives in.

tags array of string Optional

User-applied topic tags

maxLength: 8 items
title string Optional

Post title (optional for media-only posts)

maxLength: 3000 bytesmaxGraphemes: 300 graphemes
View raw schema
{
  "description": "A post authored by a user, living in the author's repository. Successor to the deprecated social.coves.community.post: authorship is derived from the repository the record lives in, so there is no in-record author field. A post claiming a community is not visible in it until the community writes a social.coves.community.acceptance for it - community surfaces render from acceptance records only. Repo placement attributes authorship as vouched for by a verifying relay or a direct DID-resolved PDS fetch; firehose events themselves carry no commit-signature proof.",
  "key": "tid",
  "record": {
    "properties": {
      "bridgedStats": {
        "description": "Bridge-asserted aggregate of origin-platform votes for federated/bridged content. Set by the bridge that materialized this record; absent for natively-authored posts.",
        "ref": "#bridgedStats",
        "type": "ref"
      },
      "community": {
        "description": "DID of the community this was submitted to. Immutable across updates: consumers MUST ignore the entire update event that changes it - discard the whole event, not merely retain the old community value - since retargeting a post means writing a new post record.",
        "format": "did",
        "type": "string"
      },
      "content": {
        "description": "Post content - supports rich text via facets",
        "maxGraphemes": 50000,
        "maxLength": 500000,
        "type": "string"
      },
      "createdAt": {
        "description": "Timestamp of post creation",
        "format": "datetime",
        "type": "string"
      },
      "crosspostChain": {
        "description": "Full chain of crossposts with version pinning. First element is original, last is immediate parent.",
        "items": {
          "ref": "com.atproto.repo.strongRef",
          "type": "ref"
        },
        "maxLength": 25,
        "type": "array"
      },
      "crosspostOf": {
        "description": "If this is a crosspost, strong reference to the immediate parent post",
        "ref": "com.atproto.repo.strongRef",
        "type": "ref"
      },
      "embed": {
        "description": "Embedded media, external links, or quoted posts",
        "refs": [
          "social.coves.embed.images",
          "social.coves.embed.video",
          "social.coves.embed.external",
          "social.coves.embed.post"
        ],
        "type": "union"
      },
      "facets": {
        "description": "Annotations for rich text (mentions, links, formatting, block structure)",
        "items": {
          "ref": "social.coves.richtext.facet",
          "type": "ref"
        },
        "maxLength": 200,
        "type": "array"
      },
      "federatedFrom": {
        "description": "The origin platform or instance this post was federated from, for bridged content. Unconstrained for the same reason as originalAuthor.",
        "type": "unknown"
      },
      "labels": {
        "description": "Self-applied content labels (NSFW, spoilers, etc.)",
        "ref": "com.atproto.label.defs#selfLabels",
        "type": "ref"
      },
      "langs": {
        "description": "Languages used in the post content (ISO 639-1)",
        "items": {
          "format": "language",
          "type": "string"
        },
        "maxLength": 3,
        "type": "array"
      },
      "location": {
        "description": "Optional place this post is about or was authored from. Unconstrained pending a geo vocabulary; absent for the overwhelming majority of posts.",
        "type": "unknown"
      },
      "originalAuthor": {
        "description": "The author on the origin platform, for content a bridge materialized here. Deliberately unconstrained: no bridge has fixed this shape yet, and pinning one now would be inventing a contract the first real bridge would contradict. Consumers MUST tolerate any object here and MUST NOT treat it as an authorship claim about this repo - authorship is the repository the record lives in.",
        "type": "unknown"
      },
      "tags": {
        "description": "User-applied topic tags",
        "items": {
          "maxGraphemes": 64,
          "maxLength": 640,
          "type": "string"
        },
        "maxLength": 8,
        "type": "array"
      },
      "title": {
        "description": "Post title (optional for media-only posts)",
        "maxGraphemes": 300,
        "maxLength": 3000,
        "type": "string"
      }
    },
    "required": [
      "community",
      "createdAt"
    ],
    "type": "object"
  },
  "type": "record"
}
bridgedStats object

Aggregate vote counts asserted by the bridge for content federated from an origin platform (e.g. Lemmy). These supplement, and are kept separate from, native atproto votes.

Properties

asOf string datetime Required

Timestamp the origin-platform counts were sampled; used to discard stale updates

downvotes integer Required

Number of downvotes on the origin platform as of asOf

minimum: 0
upvotes integer Required

Number of upvotes on the origin platform as of asOf

minimum: 0
View raw schema
{
  "description": "Aggregate vote counts asserted by the bridge for content federated from an origin platform (e.g. Lemmy). These supplement, and are kept separate from, native atproto votes.",
  "properties": {
    "asOf": {
      "description": "Timestamp the origin-platform counts were sampled; used to discard stale updates",
      "format": "datetime",
      "type": "string"
    },
    "downvotes": {
      "description": "Number of downvotes on the origin platform as of asOf",
      "minimum": 0,
      "type": "integer"
    },
    "upvotes": {
      "description": "Number of upvotes on the origin platform as of asOf",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "upvotes",
    "downvotes",
    "asOf"
  ],
  "type": "object"
}

Lexicon Garden

@