community.gifthood.listing

gifthood.community

Schema Diff

+37 -0

From

CID
bafyreid3eisc45u...
Indexed At
2026-06-01 04:18 UTC
View this version

To

CID
bafyreibaq7x5yvi...
Indexed At
2026-06-13 00:08 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 10 non-breaking changes.

Breaking Changes (1)
  • ConstraintAdded ConstraintAdded { vertex_id: "community.gifthood.listing:body.category", sort: "enum", value: "furniture,kitchen,clothing,baby,books,electronics,tools,garden,health,pets,hobbies,food,animals,service,other" }
Non-Breaking Changes (10)
  • AddedVertex AddedVertex { vertex_id: "community.gifthood.listing:body.category" }
  • AddedVertex AddedVertex { vertex_id: "community.gifthood.listing:body.labels" }
  • AddedVertex AddedVertex { vertex_id: "community.gifthood.listing:body.labels:variant0" }
  • AddedVertex AddedVertex { vertex_id: "community.gifthood.listing:body.langs" }
  • AddedVertex AddedVertex { vertex_id: "community.gifthood.listing:body.langs:items" }
  • AddedEdge AddedEdge { src: "community.gifthood.listing:body", tgt: "community.gifthood.listing:body.category", kind: "prop", name: Some("category") }
  • AddedEdge AddedEdge { src: "community.gifthood.listing:body", tgt: "community.gifthood.listing:body.labels", kind: "prop", name: Some("labels") }
  • AddedEdge AddedEdge { src: "community.gifthood.listing:body", tgt: "community.gifthood.listing:body.langs", kind: "prop", name: Some("langs") }
  • AddedEdge AddedEdge { src: "community.gifthood.listing:body.labels", tgt: "community.gifthood.listing:body.labels:variant0", kind: "variant", name: Some("com.atproto.label.defs#selfLabels") }
  • AddedEdge AddedEdge { src: "community.gifthood.listing:body.langs", tgt: "community.gifthood.listing:body.langs:items", kind: "items", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "community.gifthood.listing:body.category" }
  • AddedVertex { vertex_id: "community.gifthood.listing:body.labels" }
  • AddedVertex { vertex_id: "community.gifthood.listing:body.labels:variant0" }
  • AddedVertex { vertex_id: "community.gifthood.listing:body.langs" }
  • AddedVertex { vertex_id: "community.gifthood.listing:body.langs:items" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "community.gifthood.listing:body.category", sort: "enum", value: "furniture,kitchen,clothing,baby,books,electronics,tools,garden,health,pets,hobbies,food,animals,service,other" }

Additional Notes

  • Non-breaking: AddedEdge { src: "community.gifthood.listing:body", tgt: "community.gifthood.listing:body.category", kind: "prop", name: Some("category") }
  • Non-breaking: AddedEdge { src: "community.gifthood.listing:body", tgt: "community.gifthood.listing:body.labels", kind: "prop", name: Some("labels") }
  • Non-breaking: AddedEdge { src: "community.gifthood.listing:body", tgt: "community.gifthood.listing:body.langs", kind: "prop", name: Some("langs") }
  • Non-breaking: AddedEdge { src: "community.gifthood.listing:body.labels", tgt: "community.gifthood.listing:body.labels:variant0", kind: "variant", name: Some("com.atproto.label.defs#selfLabels") }
  • Non-breaking: AddedEdge { src: "community.gifthood.listing:body.langs", tgt: "community.gifthood.listing:body.langs:items", kind: "items", name: None }
1 1
{
2 2
  "id": "community.gifthood.listing",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "tid",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "title",
11 11
          "intent",
12 12
          "description",
13 13
          "geohash",
14 14
          "createdAt"
15 15
        ],
16 16
        "properties": {
17 +
          "langs": {
18 +
            "type": "array",
19 +
            "items": {
20 +
              "type": "string",
21 +
              "format": "language"
22 +
            },
23 +
            "maxLength": 3,
24 +
            "description": "Language(s) the content is written in, as BCP-47 language tags. Author-asserted; clients default from the composer's locale."
25 +
          },
17 26
          "title": {
18 27
            "type": "string",
19 28
            "maxLength": 200,
20 29
            "minLength": 1,
21 30
            "description": "Required short title for the item being offered or requested.",
22 31
            "maxGraphemes": 100,
23 32
            "minGraphemes": 1
24 33
          },
25 34
          "images": {
26 35
            "type": "array",
27 36
            "items": {
28 37
              "type": "blob",
29 38
              "accept": [
30 39
                "image/jpeg",
31 40
                "image/png",
32 41
                "image/webp"
33 42
              ],
34 43
              "maxSize": 1000000
35 44
            },
36 45
            "maxLength": 4,
37 46
            "description": "Up to 4 images of the item, stored as blobs in the poster's repo."
38 47
          },
39 48
          "intent": {
40 49
            "enum": [
41 50
              "offer",
42 51
              "request"
43 52
            ],
44 53
            "type": "string",
45 54
            "description": "Whether the poster is giving away an item or looking for one."
46 55
          },
56 +
          "labels": {
57 +
            "refs": [
58 +
              "com.atproto.label.defs#selfLabels"
59 +
            ],
60 +
            "type": "union",
61 +
            "description": "Self-labels set by the author. Used to flag mature/adult content (e.g. the global 'sexual' value), which the AppView gates behind an opt-in."
62 +
          },
47 63
          "status": {
48 64
            "enum": [
49 65
              "available",
50 66
              "pending",
51 67
              "gone"
52 68
            ],
53 69
            "type": "string",
54 70
            "description": "Current availability. Clients should treat a missing value as 'available'."
55 71
          },
56 72
          "geohash": {
57 73
            "type": "string",
58 74
            "maxLength": 6,
59 75
            "minLength": 1,
60 76
            "description": "Approximate location as a geohash, precision 6 (~1.2km cell). This is a privacy floor: indexers MUST truncate any finer-precision value to 6 characters before indexing or display."
61 77
          },
78 +
          "category": {
79 +
            "enum": [
80 +
              "furniture",
81 +
              "kitchen",
82 +
              "clothing",
83 +
              "baby",
84 +
              "books",
85 +
              "electronics",
86 +
              "tools",
87 +
              "garden",
88 +
              "health",
89 +
              "pets",
90 +
              "hobbies",
91 +
              "food",
92 +
              "animals",
93 +
              "service",
94 +
              "other"
95 +
            ],
96 +
            "type": "string",
97 +
            "description": "Optional single-level category for opt-out feed filtering. Append-only enum; unknown or missing values index as 'other'. Never used for proximity or safety logic."
98 +
          },
62 99
          "createdAt": {
63 100
            "type": "string",
64 101
            "format": "datetime"
65 102
          },
66 103
          "imageAlts": {
67 104
            "type": "array",
68 105
            "items": {
69 106
              "type": "string",
70 107
              "maxGraphemes": 1000
71 108
            },
72 109
            "maxLength": 4,
73 110
            "description": "Alt text for images, parallel to the images array by index."
74 111
          },
75 112
          "description": {
76 113
            "type": "string",
77 114
            "maxLength": 3000,
78 115
            "minLength": 1,
79 116
            "description": "Required free text describing the item being offered or requested.",
80 117
            "maxGraphemes": 1500,
81 118
            "minGraphemes": 1
82 119
          },
83 120
          "locationName": {
84 121
            "type": "string",
85 122
            "maxLength": 300,
86 123
            "description": "Optional human-readable area name. App-populated via reverse geocoding of the geohash cell. Display only; MUST NOT be used for proximity matching or filtering.",
87 124
            "maxGraphemes": 100
88 125
          }
89 126
        }
90 127
      },
91 128
      "description": "An offer or request for a free item, discoverable by approximate location."
92 129
    }
93 130
  },
94 131
  "$type": "com.atproto.lexicon.schema",
95 132
  "lexicon": 1
96 133
}

Compare Other Versions

Lexicon Garden

@