social.coves.community.post.create

coves.social

Schema Diff

+12 -4

From

CID
bafyreia3ttssc77...
Indexed At
2026-07-24 05:18 UTC
View this version

To

CID
bafyreifwohp6s7q...
Indexed At
2026-09-07 20:28 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 5 non-breaking changes.

Breaking Changes (1)
  • ConstraintAdded ConstraintAdded { vertex_id: "social.coves.community.post.create:input.community", sort: "maxLength", value: "320" }
Non-Breaking Changes (5)
  • AddedVertex AddedVertex { vertex_id: "social.coves.community.post.create:output.status" }
  • AddedEdge AddedEdge { src: "social.coves.community.post.create:output", tgt: "social.coves.community.post.create:output.status", kind: "prop", name: Some("status") }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "social.coves.community.post.create:input.community", sort: "format" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "social.coves.community.post.create:input.content", sort: "maxLength", old_value: "100000", new_value: "500000" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "social.coves.community.post.create:input.content", sort: "maxGraphemes", old_value: "10000", new_value: "50000" }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "social.coves.community.post.create:output.status" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "social.coves.community.post.create:input.community", sort: "maxLength", value: "320" }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "social.coves.community.post.create:input.community", sort: "format" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "social.coves.community.post.create:input.content", sort: "maxGraphemes", old_value: "10000", new_value: "50000" }
  • ConstraintRelaxed ConstraintRelaxed { vertex_id: "social.coves.community.post.create:input.content", sort: "maxLength", old_value: "100000", new_value: "500000" }

Additional Notes

  • Non-breaking: AddedEdge { src: "social.coves.community.post.create:output", tgt: "social.coves.community.post.create:output.status", kind: "prop", name: Some("status") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 5
      "description": "Create a new post in a community",
6 6
      "errors": [
7 7
        {
8 8
          "description": "Community not found",
9 9
          "name": "CommunityNotFound"
10 10
        },
11 11
        {
12 12
          "description": "User is not authorized to post in this community",
13 13
          "name": "NotAuthorized"
14 14
        },
15 15
        {
16 16
          "description": "User is banned from this community",
17 17
          "name": "Banned"
18 18
        },
19 19
        {
20 20
          "description": "Post content violates community rules",
21 21
          "name": "InvalidContent"
22 22
        },
23 23
        {
24 24
          "description": "Post violates community content rules (e.g., embeds not allowed, text too short)",
25 25
          "name": "ContentRuleViolation"
26 26
        }
27 27
      ],
28 28
      "input": {
29 29
        "encoding": "application/json",
30 30
        "schema": {
31 31
          "properties": {
32 32
            "community": {
33 -
              "description": "DID or handle of the community to post in",
34 -
              "format": "at-identifier",
33 +
              "description": "Community identifier (DID, handle, name@origin, or bare local name) of the community to post in",
34 +
              "maxLength": 320,
35 35
              "type": "string"
36 36
            },
37 37
            "content": {
38 38
              "description": "Post content - supports rich text via facets",
39 -
              "maxGraphemes": 10000,
40 -
              "maxLength": 100000,
39 +
              "maxGraphemes": 50000,
40 +
              "maxLength": 500000,
41 41
              "type": "string"
42 42
            },
43 43
            "embed": {
44 44
              "description": "Embedded media, external links, or quoted posts",
45 45
              "refs": [
46 46
                "social.coves.embed.images",
47 47
                "social.coves.embed.video",
48 48
                "social.coves.embed.external",
49 49
                "social.coves.embed.post"
50 50
              ],
51 51
              "type": "union"
52 52
            },
53 53
            "facets": {
54 54
              "description": "Annotations for rich text (mentions, links, formatting, block structure)",
55 55
              "items": {
56 56
                "ref": "social.coves.richtext.facet",
57 57
                "type": "ref"
58 58
              },
59 59
              "maxLength": 200,
60 60
              "type": "array"
61 61
            },
62 62
            "labels": {
63 63
              "description": "Self-applied content labels (NSFW, spoilers, etc.)",
64 64
              "ref": "com.atproto.label.defs#selfLabels",
65 65
              "type": "ref"
66 66
            },
67 67
            "langs": {
68 68
              "description": "Languages used in the post content (ISO 639-1)",
69 69
              "items": {
70 70
                "format": "language",
71 71
                "type": "string"
72 72
              },
73 73
              "maxLength": 3,
74 74
              "type": "array"
75 75
            },
76 76
            "tags": {
77 77
              "description": "User-applied topic tags",
78 78
              "items": {
79 79
                "maxGraphemes": 64,
80 80
                "maxLength": 640,
81 81
                "type": "string"
82 82
              },
83 83
              "maxLength": 8,
84 84
              "type": "array"
85 85
            },
86 86
            "title": {
87 87
              "description": "Post title (optional for media-only posts)",
88 88
              "maxGraphemes": 300,
89 89
              "maxLength": 3000,
90 90
              "type": "string"
91 91
            }
92 92
          },
93 93
          "required": [
94 94
            "community"
95 95
          ],
96 96
          "type": "object"
97 97
        }
98 98
      },
99 99
      "output": {
100 100
        "encoding": "application/json",
101 101
        "schema": {
102 102
          "properties": {
103 103
            "cid": {
104 104
              "description": "CID of the created post",
105 105
              "format": "cid",
106 106
              "type": "string"
107 107
            },
108 +
            "status": {
109 +
              "description": "The community's decision as of this response. 'accepted' means this host runs the community's admission and a community acceptance now stands for the post; 'pending' means no acceptance covers it yet - either the community is hosted elsewhere and decides for itself, or the synchronous acceptance failed and will be retried. Pending is a SUCCESS, not an error: the post exists in its author's repository either way. Optional, so a client predating the field decodes an unchanged response. knownValues rather than an enum because the vocabulary may grow, and a closed enum would make adding a status a breaking change for every generated client in the network.",
110 +
              "knownValues": [
111 +
                "accepted",
112 +
                "pending"
113 +
              ],
114 +
              "type": "string"
115 +
            },
108 116
            "uri": {
109 117
              "description": "AT-URI of the created post",
110 118
              "format": "at-uri",
111 119
              "type": "string"
112 120
            }
113 121
          },
114 122
          "required": [
115 123
            "uri",
116 124
            "cid"
117 125
          ],
118 126
          "type": "object"
119 127
        }
120 128
      },
121 129
      "type": "procedure"
122 130
    }
123 131
  },
124 132
  "id": "social.coves.community.post.create",
125 133
  "lexicon": 1
126 134
}

Compare Other Versions

Lexicon Garden

@