community.gifthood.listing
Schema Diff
+9 -0
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 4 non-breaking changes.
Breaking Changes (1)
- ConstraintTightened ConstraintTightened { vertex_id: "community.gifthood.listing:body.category", sort: "enum", old_value: "furniture,kitchen,clothing,baby,books,electronics,tools,garden,health,pets,hobbies,food,animals,service,other", new_value: "furniture,kitchen,clothing,baby,books,instruments,electronics,tools,garden,health,pets,hobbies,food,animals,service,other" }
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "community.gifthood.listing:body.facets" }
- AddedVertex AddedVertex { vertex_id: "community.gifthood.listing:body.facets:items" }
- AddedEdge AddedEdge { src: "community.gifthood.listing:body", tgt: "community.gifthood.listing:body.facets", kind: "prop", name: Some("facets") }
- AddedEdge AddedEdge { src: "community.gifthood.listing:body.facets", tgt: "community.gifthood.listing:body.facets:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "community.gifthood.listing:body.facets" }AddedVertex { vertex_id: "community.gifthood.listing:body.facets:items" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "community.gifthood.listing:body.category", sort: "enum", old_value: "furniture,kitchen,clothing,baby,books,electronics,tools,garden,health,pets,hobbies,food,animals,service,other", new_value: "furniture,kitchen,clothing,baby,books,instruments,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.facets", kind: "prop", name: Some("facets") }
- Non-breaking: AddedEdge { src: "community.gifthood.listing:body.facets", tgt: "community.gifthood.listing:body.facets: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
17
"langs": {
18
18
"type": "array",
19
19
"items": {
20
20
"type": "string",
21
21
"format": "language"
22
22
},
23
23
"maxLength": 3,
24
24
"description": "Language(s) the content is written in, as BCP-47 language tags. Author-asserted; clients default from the composer's locale."
25
25
},
26
26
"title": {
27
27
"type": "string",
28
28
"maxLength": 200,
29
29
"minLength": 1,
30
30
"description": "Required short title for the item being offered or requested.",
31
31
"maxGraphemes": 100,
32
32
"minGraphemes": 1
33
33
},
34
+
"facets": {
35
+
"type": "array",
36
+
"items": {
37
+
"ref": "app.bsky.richtext.facet",
38
+
"type": "ref"
39
+
},
40
+
"description": "Annotations over `description` (mentions, links) keyed by UTF-8 byte range. Reuses app.bsky.richtext.facet for atmosphere-wide interop. Author-asserted at compose time; clients MUST treat them as display hints, re-validate ranges, and never trust a facet URI over the visible text. Addresses and phone numbers are deliberately NOT faceted here — those affordances are direct-message-only."
41
+
},
34
42
"images": {
35
43
"type": "array",
36
44
"items": {
37
45
"type": "blob",
38
46
"accept": [
39
47
"image/jpeg",
40
48
"image/png",
41
49
"image/webp"
42
50
],
43
51
"maxSize": 1000000
44
52
},
45
53
"maxLength": 4,
46
54
"description": "Up to 4 images of the item, stored as blobs in the poster's repo."
47
55
},
48
56
"intent": {
49
57
"enum": [
50
58
"offer",
51
59
"request"
52
60
],
53
61
"type": "string",
54
62
"description": "Whether the poster is giving away an item or looking for one."
55
63
},
56
64
"labels": {
57
65
"refs": [
58
66
"com.atproto.label.defs#selfLabels"
59
67
],
60
68
"type": "union",
61
69
"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
70
},
63
71
"status": {
64
72
"enum": [
65
73
"available",
66
74
"pending",
67
75
"gone"
68
76
],
69
77
"type": "string",
70
78
"description": "Current availability. Clients should treat a missing value as 'available'."
71
79
},
72
80
"geohash": {
73
81
"type": "string",
74
82
"maxLength": 6,
75
83
"minLength": 1,
76
84
"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."
77
85
},
78
86
"category": {
79
87
"enum": [
80
88
"furniture",
81
89
"kitchen",
82
90
"clothing",
83
91
"baby",
84
92
"books",
93
+
"instruments",
85
94
"electronics",
86
95
"tools",
87
96
"garden",
88
97
"health",
89
98
"pets",
90
99
"hobbies",
91
100
"food",
92
101
"animals",
93
102
"service",
94
103
"other"
95
104
],
96
105
"type": "string",
97
106
"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
107
},
99
108
"createdAt": {
100
109
"type": "string",
101
110
"format": "datetime"
102
111
},
103
112
"imageAlts": {
104
113
"type": "array",
105
114
"items": {
106
115
"type": "string",
107
116
"maxGraphemes": 1000
108
117
},
109
118
"maxLength": 4,
110
119
"description": "Alt text for images, parallel to the images array by index."
111
120
},
112
121
"description": {
113
122
"type": "string",
114
123
"maxLength": 3000,
115
124
"minLength": 1,
116
125
"description": "Required free text describing the item being offered or requested.",
117
126
"maxGraphemes": 1500,
118
127
"minGraphemes": 1
119
128
},
120
129
"locationName": {
121
130
"type": "string",
122
131
"maxLength": 300,
123
132
"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.",
124
133
"maxGraphemes": 100
125
134
}
126
135
}
127
136
},
128
137
"description": "An offer or request for a free item, discoverable by approximate location."
129
138
}
130
139
},
131
140
"$type": "com.atproto.lexicon.schema",
132
141
"lexicon": 1
133
142
}