org.hypercerts.collection
Schema Diff
+40 -7
Compatibility Analysis
Breaking Changes Detected
4 breaking changes, 27 non-breaking changes.
Breaking Changes (4)
- RemovedVertex RemovedVertex { vertex_id: "pub.leaflet.pages.linearDocument#main" }
- RemovedEdge RemovedEdge { src: "org.hypercerts.collection:body.description", tgt: "pub.leaflet.pages.linearDocument#main", kind: "ref", name: None }
- KindChanged KindChanged { vertex_id: "org.hypercerts.collection:body.description", old_kind: "ref", new_kind: "union" }
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.collection:body.type", sort: "knownValues", value: "[\"favorites\",\"project\",\"portfolio\",\"program\"]" }
Non-Breaking Changes (27)
- AddedVertex AddedVertex { vertex_id: "app.bsky.richtext.facet" }
- AddedVertex AddedVertex { vertex_id: "app.certified.signature.defs#list" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.collection:body.description:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.collection:body.description:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.collection:body.description:variant2" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.collection:body.shortDescriptionFacets" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.collection:body.shortDescriptionFacets:items" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.collection:body.signatures" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.collection:body.tags" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.collection:body.tags:items" }
- AddedVertex AddedVertex { vertex_id: "org.hypercerts.defs#descriptionString" }
- AddedVertex AddedVertex { vertex_id: "pub.leaflet.pages.linearDocument" }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body", tgt: "org.hypercerts.collection:body.shortDescriptionFacets", kind: "prop", name: Some("shortDescriptionFacets") }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body", tgt: "org.hypercerts.collection:body.signatures", kind: "prop", name: Some("signatures") }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body", tgt: "org.hypercerts.collection:body.tags", kind: "prop", name: Some("tags") }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.description", tgt: "org.hypercerts.collection:body.description:variant0", kind: "variant", name: Some("org.hypercerts.defs#descriptionString") }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.description", tgt: "org.hypercerts.collection:body.description:variant1", kind: "variant", name: Some("pub.leaflet.pages.linearDocument") }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.description", tgt: "org.hypercerts.collection:body.description:variant2", kind: "variant", name: Some("com.atproto.repo.strongRef") }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.description:variant0", tgt: "org.hypercerts.defs#descriptionString", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.description:variant1", tgt: "pub.leaflet.pages.linearDocument", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.description:variant2", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.shortDescriptionFacets", tgt: "org.hypercerts.collection:body.shortDescriptionFacets:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.shortDescriptionFacets:items", tgt: "app.bsky.richtext.facet", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.signatures", tgt: "app.certified.signature.defs#list", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.tags", tgt: "org.hypercerts.collection:body.tags:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "org.hypercerts.collection:body.tags:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- ConstraintRemoved ConstraintRemoved { vertex_id: "org.hypercerts.collection:body.description", sort: "ref" }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "pub.leaflet.pages.linearDocument#main" }
Added Elements
AddedVertex { vertex_id: "app.bsky.richtext.facet" }AddedVertex { vertex_id: "app.certified.signature.defs#list" }AddedVertex { vertex_id: "org.hypercerts.collection:body.description:variant0" }AddedVertex { vertex_id: "org.hypercerts.collection:body.description:variant1" }AddedVertex { vertex_id: "org.hypercerts.collection:body.description:variant2" }AddedVertex { vertex_id: "org.hypercerts.collection:body.shortDescriptionFacets" }AddedVertex { vertex_id: "org.hypercerts.collection:body.shortDescriptionFacets:items" }AddedVertex { vertex_id: "org.hypercerts.collection:body.signatures" }AddedVertex { vertex_id: "org.hypercerts.collection:body.tags" }AddedVertex { vertex_id: "org.hypercerts.collection:body.tags:items" }AddedVertex { vertex_id: "org.hypercerts.defs#descriptionString" }AddedVertex { vertex_id: "pub.leaflet.pages.linearDocument" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "org.hypercerts.collection:body.type", sort: "knownValues", value: "[\"favorites\",\"project\",\"portfolio\",\"program\"]" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "org.hypercerts.collection:body.description", sort: "ref" }
Additional Notes
- Breaking: RemovedEdge { src: "org.hypercerts.collection:body.description", tgt: "pub.leaflet.pages.linearDocument#main", kind: "ref", name: None }
- Breaking: KindChanged { vertex_id: "org.hypercerts.collection:body.description", old_kind: "ref", new_kind: "union" }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body", tgt: "org.hypercerts.collection:body.shortDescriptionFacets", kind: "prop", name: Some("shortDescriptionFacets") }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body", tgt: "org.hypercerts.collection:body.signatures", kind: "prop", name: Some("signatures") }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body", tgt: "org.hypercerts.collection:body.tags", kind: "prop", name: Some("tags") }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.description", tgt: "org.hypercerts.collection:body.description:variant0", kind: "variant", name: Some("org.hypercerts.defs#descriptionString") }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.description", tgt: "org.hypercerts.collection:body.description:variant1", kind: "variant", name: Some("pub.leaflet.pages.linearDocument") }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.description", tgt: "org.hypercerts.collection:body.description:variant2", kind: "variant", name: Some("com.atproto.repo.strongRef") }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.description:variant0", tgt: "org.hypercerts.defs#descriptionString", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.description:variant1", tgt: "pub.leaflet.pages.linearDocument", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.description:variant2", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.shortDescriptionFacets", tgt: "org.hypercerts.collection:body.shortDescriptionFacets:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.shortDescriptionFacets:items", tgt: "app.bsky.richtext.facet", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.signatures", tgt: "app.certified.signature.defs#list", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.tags", tgt: "org.hypercerts.collection:body.tags:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "org.hypercerts.collection:body.tags:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
1
1
{
2
2
"id": "org.hypercerts.collection",
3
3
"defs": {
4
4
"item": {
5
5
"type": "object",
6
6
"required": [
7
7
"itemIdentifier"
8
8
],
9
9
"properties": {
10
10
"itemWeight": {
11
11
"type": "string",
12
12
"maxLength": 100,
13
13
"description": "Optional weight for this item (positive numeric value stored as string). Weights do not need to sum to a specific total; normalization can be performed by the consuming application as needed."
14
14
},
15
15
"itemIdentifier": {
16
16
"ref": "com.atproto.repo.strongRef",
17
17
"type": "ref",
18
-
"description": "Strong reference to an item in this collection. Items can be activities (org.hypercerts.claim.activity) and/or other collections (org.hypercerts.collection)."
18
+
"description": "Strong reference to an item in this collection. Items can be activities (org.hypercerts.claim.activity), features (org.hypercerts.entity.feature), and/or other collections (org.hypercerts.collection)."
19
19
}
20
-
}
20
+
},
21
+
"description": "An item in a collection, with an identifier and optional weight."
21
22
},
22
23
"main": {
23
24
"key": "tid",
24
25
"type": "record",
25
26
"record": {
26
27
"type": "object",
27
28
"required": [
28
29
"title",
29
30
"createdAt"
30
31
],
31
32
"properties": {
33
+
"tags": {
34
+
"type": "array",
35
+
"items": {
36
+
"ref": "com.atproto.repo.strongRef",
37
+
"type": "ref"
38
+
},
39
+
"maxLength": 20,
40
+
"description": "References to org.hypercerts.vocab.tag records classifying this record. All listed tags apply simultaneously (logical AND); the array carries no ordering, weighting, negation, inheritance, or rule logic, and never will — any future expression logic must arrive as a new field and must never reinterpret this one."
41
+
},
32
42
"type": {
33
43
"type": "string",
34
44
"maxLength": 64,
35
-
"description": "The type of this collection. Possible fields can be 'favorites', 'project', or any other type of collection."
45
+
"description": "The type of this collection. Values beyond the known set are permitted.",
46
+
"knownValues": [
47
+
"favorites",
48
+
"project",
49
+
"portfolio",
50
+
"program"
51
+
]
36
52
},
37
53
"items": {
38
54
"type": "array",
39
55
"items": {
40
56
"ref": "#item",
41
57
"type": "ref"
42
58
},
43
59
"maxLength": 1000,
44
60
"description": "Array of items in this collection with optional weights."
45
61
},
46
62
"title": {
47
63
"type": "string",
48
64
"maxLength": 800,
49
65
"description": "Display name for this collection (e.g. 'Q1 2025 Impact Projects')",
50
66
"maxGraphemes": 80
51
67
},
52
68
"avatar": {
53
69
"refs": [
54
70
"org.hypercerts.defs#uri",
55
71
"org.hypercerts.defs#smallImage"
56
72
],
57
73
"type": "union",
58
74
"description": "The collection's avatar/profile image as a URI or image blob."
59
75
},
60
76
"banner": {
61
77
"refs": [
62
78
"org.hypercerts.defs#uri",
63
79
"org.hypercerts.defs#largeImage"
64
80
],
65
81
"type": "union",
66
82
"description": "Larger horizontal image to display behind the collection view."
67
83
},
68
84
"location": {
69
85
"ref": "com.atproto.repo.strongRef",
70
86
"type": "ref",
71
87
"description": "A strong reference to the location where this collection's activities were performed. The record referenced must conform with the lexicon app.certified.location."
72
88
},
73
89
"createdAt": {
74
90
"type": "string",
75
91
"format": "datetime",
76
92
"description": "Client-declared timestamp when this record was originally created"
77
93
},
78
-
"description": {
79
-
"ref": "pub.leaflet.pages.linearDocument#main",
94
+
"signatures": {
95
+
"ref": "app.certified.signature.defs#list",
80
96
"type": "ref",
81
-
"description": "Rich-text description, represented as a Leaflet linear document."
97
+
"description": "Optional cryptographic signatures attesting to this record's content."
82
98
},
99
+
"description": {
100
+
"refs": [
101
+
"org.hypercerts.defs#descriptionString",
102
+
"pub.leaflet.pages.linearDocument",
103
+
"com.atproto.repo.strongRef"
104
+
],
105
+
"type": "union",
106
+
"description": "Long-form description of the collection. An inline string for plain text or markdown, a Leaflet linear document for rich-text content, or a strong reference to an external description record."
107
+
},
83
108
"shortDescription": {
84
109
"type": "string",
85
110
"maxLength": 3000,
86
-
"description": "Short summary of this collection, suitable for previews and list views",
111
+
"description": "Short summary of this collection, suitable for previews and list views. Rich text annotations may be provided via `shortDescriptionFacets`.",
87
112
"maxGraphemes": 300
113
+
},
114
+
"shortDescriptionFacets": {
115
+
"type": "array",
116
+
"items": {
117
+
"ref": "app.bsky.richtext.facet",
118
+
"type": "ref"
119
+
},
120
+
"description": "Rich text annotations for `shortDescription` (mentions, URLs, hashtags, etc)."
88
121
}
89
122
}
90
123
},
91
124
"description": "A collection/group of items (activities and/or other collections). Collections support recursive nesting."
92
125
}
93
126
},
94
127
"$type": "com.atproto.lexicon.schema",
95
128
"lexicon": 1
96
129
}