app.certified.badge.definition
Schema Diff
+20 -3
Compatibility Analysis
Breaking Changes Detected
6 breaking changes, 4 non-breaking changes.
Breaking Changes (6)
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "app.certified.badge.definition:body", src: "app.certified.badge.definition:body", tgt: "app.certified.badge.definition:body.icon", kind: "prop", name: Some("icon") }
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.description", sort: "maxLength", value: "5000" }
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.description", sort: "maxGraphemes", value: "500" }
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.badgeType", sort: "knownValues", value: "[\"endorsement\",\"verification\",\"participation\",\"certification\",\"affiliation\",\"recognition\"]" }
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.badgeType", sort: "maxLength", value: "100" }
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.title", sort: "maxLength", value: "256" }
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "app.certified.badge.definition:body.signatures" }
- AddedVertex AddedVertex { vertex_id: "app.certified.signature.defs#list" }
- AddedEdge AddedEdge { src: "app.certified.badge.definition:body", tgt: "app.certified.badge.definition:body.signatures", kind: "prop", name: Some("signatures") }
- AddedEdge AddedEdge { src: "app.certified.badge.definition:body.signatures", tgt: "app.certified.signature.defs#list", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.certified.badge.definition:body.signatures" }AddedVertex { vertex_id: "app.certified.signature.defs#list" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.description", sort: "maxLength", value: "5000" }
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.description", sort: "maxGraphemes", value: "500" }
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.badgeType", sort: "maxLength", value: "100" }
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.badgeType", sort: "knownValues", value: "[\"endorsement\",\"verification\",\"participation\",\"certification\",\"affiliation\",\"recognition\"]" }
- ConstraintAdded ConstraintAdded { vertex_id: "app.certified.badge.definition:body.title", sort: "maxLength", value: "256" }
Additional Notes
- Breaking: RequiredEdgeRemoved { vertex_id: "app.certified.badge.definition:body", src: "app.certified.badge.definition:body", tgt: "app.certified.badge.definition:body.icon", kind: "prop", name: Some("icon") }
- Non-breaking: AddedEdge { src: "app.certified.badge.definition:body", tgt: "app.certified.badge.definition:body.signatures", kind: "prop", name: Some("signatures") }
- Non-breaking: AddedEdge { src: "app.certified.badge.definition:body.signatures", tgt: "app.certified.signature.defs#list", kind: "ref", name: None }
1
1
{
2
2
"id": "app.certified.badge.definition",
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
"badgeType",
12
-
"icon",
13
12
"createdAt"
14
13
],
15
14
"properties": {
16
15
"icon": {
17
16
"type": "blob",
18
17
"accept": [
19
18
"image/png",
20
19
"image/jpeg",
21
20
"image/webp",
22
21
"image/svg+xml"
23
22
],
24
23
"maxSize": 1048576,
25
24
"description": "Icon representing the badge, stored as a blob for compact visual display."
26
25
},
27
26
"title": {
28
27
"type": "string",
28
+
"maxLength": 256,
29
29
"description": "Human-readable title of the badge."
30
30
},
31
31
"badgeType": {
32
32
"type": "string",
33
-
"description": "Category of the badge (e.g. endorsement, participation, affiliation)."
33
+
"maxLength": 100,
34
+
"description": "Category of the badge. Values beyond the known set are permitted.",
35
+
"knownValues": [
36
+
"endorsement",
37
+
"verification",
38
+
"participation",
39
+
"certification",
40
+
"affiliation",
41
+
"recognition"
42
+
]
34
43
},
35
44
"createdAt": {
36
45
"type": "string",
37
46
"format": "datetime",
38
47
"description": "Client-declared timestamp when this record was originally created"
39
48
},
49
+
"signatures": {
50
+
"ref": "app.certified.signature.defs#list",
51
+
"type": "ref",
52
+
"description": "Optional cryptographic signatures attesting to this record's content."
53
+
},
40
54
"description": {
41
55
"type": "string",
42
-
"description": "Optional short statement describing what the badge represents."
56
+
"maxLength": 5000,
57
+
"description": "Optional short statement describing what the badge represents.",
58
+
"maxGraphemes": 500
43
59
},
44
60
"allowedIssuers": {
45
61
"type": "array",
46
62
"items": {
47
63
"ref": "app.certified.defs#did",
48
64
"type": "ref"
49
65
},
66
+
"maxLength": 100,
50
67
"description": "Optional allowlist of DIDs allowed to issue this badge. If omitted, anyone may issue it."
51
68
}
52
69
}
53
70
},
54
71
"description": "Defines a badge that can be awarded via badge award records to users, projects, or activity claims."
55
72
}
56
73
},
57
74
"$type": "com.atproto.lexicon.schema",
58
75
"lexicon": 1
59
76
}