fyi.atstore.listing.detail
Schema Diff
+5 -1
Compatibility Analysis
Breaking Changes Detected
4 breaking changes, 0 non-breaking changes.
Breaking Changes (4)
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "fyi.atstore.listing.detail:body", src: "fyi.atstore.listing.detail:body", tgt: "fyi.atstore.listing.detail:body.heroImage", kind: "prop", name: Some("heroImage") }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.atstore.listing.detail#link.type", sort: "maxLength", value: "32" }
- ConstraintTightened ConstraintTightened { vertex_id: "fyi.atstore.listing.detail#link.type", sort: "knownValues", old_value: "[\"privacy\",\"terms\",\"support\",\"contact\",\"docs\",\"blog\",\"changelog\",\"source\",\"status\",\"other\"]", new_value: "[\"privacy\",\"terms\",\"support\",\"contact\",\"docs\",\"blog\",\"changelog\",\"source\",\"status\",\"community\",\"donate\",\"license\",\"other\"]" }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.atstore.listing.detail#link.url", sort: "maxLength", value: "2048" }
Migration Guidance
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.atstore.listing.detail#link.type", sort: "maxLength", value: "32" }
- ConstraintTightened ConstraintTightened { vertex_id: "fyi.atstore.listing.detail#link.type", sort: "knownValues", old_value: "[\"privacy\",\"terms\",\"support\",\"contact\",\"docs\",\"blog\",\"changelog\",\"source\",\"status\",\"other\"]", new_value: "[\"privacy\",\"terms\",\"support\",\"contact\",\"docs\",\"blog\",\"changelog\",\"source\",\"status\",\"community\",\"donate\",\"license\",\"other\"]" }
- ConstraintAdded ConstraintAdded { vertex_id: "fyi.atstore.listing.detail#link.url", sort: "maxLength", value: "2048" }
Additional Notes
- Breaking: RequiredEdgeRemoved { vertex_id: "fyi.atstore.listing.detail:body", src: "fyi.atstore.listing.detail:body", tgt: "fyi.atstore.listing.detail:body.heroImage", kind: "prop", name: Some("heroImage") }
1
1
{
2
2
"id": "fyi.atstore.listing.detail",
3
3
"defs": {
4
4
"link": {
5
5
"type": "object",
6
6
"required": [
7
7
"type",
8
8
"url"
9
9
],
10
10
"properties": {
11
11
"url": {
12
12
"type": "string",
13
13
"format": "uri",
14
+
"maxLength": 2048,
14
15
"description": "The destination URL."
15
16
},
16
17
"type": {
17
18
"type": "string",
19
+
"maxLength": 32,
18
20
"description": "The kind of link.",
19
21
"knownValues": [
20
22
"privacy",
21
23
"terms",
22
24
"support",
23
25
"contact",
24
26
"docs",
25
27
"blog",
26
28
"changelog",
27
29
"source",
28
30
"status",
31
+
"community",
32
+
"donate",
33
+
"license",
29
34
"other"
30
35
]
31
36
},
32
37
"label": {
33
38
"type": "string",
34
39
"maxLength": 100,
35
40
"description": "Optional human-readable label, especially useful when type is 'other'.",
36
41
"maxGraphemes": 50
37
42
}
38
43
}
39
44
},
40
45
"main": {
41
46
"key": "tid",
42
47
"type": "record",
43
48
"record": {
44
49
"type": "object",
45
50
"required": [
46
51
"slug",
47
52
"name",
48
53
"tagline",
49
54
"externalUrl",
50
55
"icon",
51
-
"heroImage",
52
56
"categorySlug",
53
57
"createdAt",
54
58
"updatedAt"
55
59
],
56
60
"properties": {
57
61
"icon": {
58
62
"type": "blob",
59
63
"accept": [
60
64
"image/png",
61
65
"image/jpeg",
62
66
"image/webp",
63
67
"image/gif",
64
68
"image/svg+xml"
65
69
],
66
70
"maxSize": 2000000,
67
71
"description": "Square / app icon (uploaded to repo via com.atproto.repo.uploadBlob)."
68
72
},
69
73
"name": {
70
74
"type": "string",
71
75
"maxLength": 640
72
76
},
73
77
"slug": {
74
78
"type": "string",
75
79
"maxLength": 512,
76
80
"minLength": 1,
77
81
"description": "Stable URL slug; unique within the publishing account."
78
82
},
79
83
"links": {
80
84
"type": "array",
81
85
"items": {
82
86
"ref": "#link",
83
87
"type": "ref"
84
88
},
85
89
"maxLength": 12,
86
90
"description": "Relevant links for the app, including trust/compliance, support, and project resources."
87
91
},
88
92
"appTags": {
89
93
"type": "array",
90
94
"items": {
91
95
"type": "string",
92
96
"maxLength": 96
93
97
},
94
98
"maxLength": 64
95
99
},
96
100
"tagline": {
97
101
"type": "string",
98
102
"maxLength": 300
99
103
},
100
104
"createdAt": {
101
105
"type": "string",
102
106
"format": "datetime"
103
107
},
104
108
"heroImage": {
105
109
"type": "blob",
106
110
"accept": [
107
111
"image/png",
108
112
"image/jpeg",
109
113
"image/webp",
110
114
"image/gif",
111
115
"image/svg+xml"
112
116
],
113
117
"maxSize": 12000000,
114
118
"description": "Hero / cover image blob."
115
119
},
116
120
"updatedAt": {
117
121
"type": "string",
118
122
"format": "datetime"
119
123
},
120
124
"description": {
121
125
"type": "string",
122
126
"maxLength": 20000
123
127
},
124
128
"externalUrl": {
125
129
"type": "string",
126
130
"format": "uri",
127
131
"maxLength": 2048,
128
132
"description": "Primary product or project URL."
129
133
},
130
134
"screenshots": {
131
135
"type": "array",
132
136
"items": {
133
137
"type": "blob",
134
138
"accept": [
135
139
"image/png",
136
140
"image/jpeg",
137
141
"image/webp",
138
142
"image/gif",
139
143
"image/svg+xml"
140
144
],
141
145
"maxSize": 12000000
142
146
},
143
147
"maxLength": 20
144
148
},
145
149
"categorySlug": {
146
150
"type": "array",
147
151
"items": {
148
152
"type": "string",
149
153
"maxLength": 256
150
154
},
151
155
"maxLength": 32,
152
156
"minLength": 1,
153
157
"description": "Browse category keys (e.g. protocol/pds). First entry is the primary category for legacy surfaces."
154
158
},
155
159
"migratedFromAtUri": {
156
160
"type": "string",
157
161
"format": "at-uri",
158
162
"maxLength": 8192,
159
163
"description": "When this listing.detail record supersedes a prior record in another repo (e.g. moved from the AT Store publisher to a product owner PDS), the at:// URI of that prior fyi.atstore.listing.detail record."
160
164
},
161
165
"productAccountDid": {
162
166
"type": "string",
163
167
"maxLength": 2048,
164
168
"description": "Bluesky DID for the product, app, or tool (not the AT Store publisher). Handle is resolved and stored in Postgres only."
165
169
}
166
170
}
167
171
},
168
172
"description": "Public protocol or app listing in the AT Store directory. Images are stored as repo blobs (Kitchen-style); the web app caches HTTPS URLs in Postgres separately."
169
173
}
170
174
},
171
175
"$type": "com.atproto.lexicon.schema",
172
176
"lexicon": 1
173
177
}