blue.morgen.feed.subscription
Schema Diff
+46 -16
Compatibility Analysis
Breaking Changes Detected
7 breaking changes, 13 non-breaking changes.
Breaking Changes (7)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "blue.morgen.feed.subscription:body", src: "blue.morgen.feed.subscription:body", tgt: "blue.morgen.feed.subscription:body.source", kind: "prop", name: Some("source") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "blue.morgen.feed.subscription#rssFeed", src: "blue.morgen.feed.subscription#rssFeed", tgt: "blue.morgen.feed.subscription#rssFeed.feedUrl", kind: "prop", name: Some("feedUrl") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "blue.morgen.feed.subscription#standardPublication", src: "blue.morgen.feed.subscription#standardPublication", tgt: "blue.morgen.feed.subscription#standardPublication.publication", kind: "prop", name: Some("publication") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "blue.morgen.feed.subscription:body", src: "blue.morgen.feed.subscription:body", tgt: "blue.morgen.feed.subscription:body.feedUrl", kind: "prop", name: Some("feedUrl") }
- RemovedVertex RemovedVertex { vertex_id: "blue.morgen.feed.subscription:body.feedUrl" }
- RemovedVertex RemovedVertex { vertex_id: "blue.morgen.feed.subscription:body.siteUrl" }
- RemovedEdge RemovedEdge { src: "blue.morgen.feed.subscription:body", tgt: "blue.morgen.feed.subscription:body.siteUrl", kind: "prop", name: Some("siteUrl") }
Non-Breaking Changes (13)
- AddedVertex AddedVertex { vertex_id: "blue.morgen.feed.subscription#rssFeed" }
- AddedVertex AddedVertex { vertex_id: "blue.morgen.feed.subscription#rssFeed.feedUrl" }
- AddedVertex AddedVertex { vertex_id: "blue.morgen.feed.subscription#rssFeed.siteUrl" }
- AddedVertex AddedVertex { vertex_id: "blue.morgen.feed.subscription#standardPublication" }
- AddedVertex AddedVertex { vertex_id: "blue.morgen.feed.subscription#standardPublication.publication" }
- AddedVertex AddedVertex { vertex_id: "blue.morgen.feed.subscription:body.source" }
- AddedVertex AddedVertex { vertex_id: "blue.morgen.feed.subscription:body.source:variant0" }
- AddedVertex AddedVertex { vertex_id: "blue.morgen.feed.subscription:body.source:variant1" }
- AddedEdge AddedEdge { src: "blue.morgen.feed.subscription#rssFeed", tgt: "blue.morgen.feed.subscription#rssFeed.siteUrl", kind: "prop", name: Some("siteUrl") }
- AddedEdge AddedEdge { src: "blue.morgen.feed.subscription:body.source", tgt: "blue.morgen.feed.subscription:body.source:variant0", kind: "variant", name: Some("#rssFeed") }
- AddedEdge AddedEdge { src: "blue.morgen.feed.subscription:body.source", tgt: "blue.morgen.feed.subscription:body.source:variant1", kind: "variant", name: Some("#standardPublication") }
- AddedEdge AddedEdge { src: "blue.morgen.feed.subscription:body.source:variant0", tgt: "blue.morgen.feed.subscription#rssFeed", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "blue.morgen.feed.subscription:body.source:variant1", tgt: "blue.morgen.feed.subscription#standardPublication", kind: "ref", name: None }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "blue.morgen.feed.subscription:body.feedUrl" }RemovedVertex { vertex_id: "blue.morgen.feed.subscription:body.siteUrl" }
Added Elements
AddedVertex { vertex_id: "blue.morgen.feed.subscription#rssFeed" }AddedVertex { vertex_id: "blue.morgen.feed.subscription#rssFeed.feedUrl" }AddedVertex { vertex_id: "blue.morgen.feed.subscription#rssFeed.siteUrl" }AddedVertex { vertex_id: "blue.morgen.feed.subscription#standardPublication" }AddedVertex { vertex_id: "blue.morgen.feed.subscription#standardPublication.publication" }AddedVertex { vertex_id: "blue.morgen.feed.subscription:body.source" }AddedVertex { vertex_id: "blue.morgen.feed.subscription:body.source:variant0" }AddedVertex { vertex_id: "blue.morgen.feed.subscription:body.source:variant1" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "blue.morgen.feed.subscription#rssFeed", src: "blue.morgen.feed.subscription#rssFeed", tgt: "blue.morgen.feed.subscription#rssFeed.feedUrl", kind: "prop", name: Some("feedUrl") }
- Breaking: RequiredEdgeAdded { vertex_id: "blue.morgen.feed.subscription:body", src: "blue.morgen.feed.subscription:body", tgt: "blue.morgen.feed.subscription:body.source", kind: "prop", name: Some("source") }
- Breaking: RequiredEdgeAdded { vertex_id: "blue.morgen.feed.subscription#standardPublication", src: "blue.morgen.feed.subscription#standardPublication", tgt: "blue.morgen.feed.subscription#standardPublication.publication", kind: "prop", name: Some("publication") }
- Breaking: RequiredEdgeRemoved { vertex_id: "blue.morgen.feed.subscription:body", src: "blue.morgen.feed.subscription:body", tgt: "blue.morgen.feed.subscription:body.feedUrl", kind: "prop", name: Some("feedUrl") }
- Breaking: RemovedEdge { src: "blue.morgen.feed.subscription:body", tgt: "blue.morgen.feed.subscription:body.siteUrl", kind: "prop", name: Some("siteUrl") }
- Non-breaking: AddedEdge { src: "blue.morgen.feed.subscription#rssFeed", tgt: "blue.morgen.feed.subscription#rssFeed.siteUrl", kind: "prop", name: Some("siteUrl") }
- Non-breaking: AddedEdge { src: "blue.morgen.feed.subscription:body.source", tgt: "blue.morgen.feed.subscription:body.source:variant0", kind: "variant", name: Some("#rssFeed") }
- Non-breaking: AddedEdge { src: "blue.morgen.feed.subscription:body.source", tgt: "blue.morgen.feed.subscription:body.source:variant1", kind: "variant", name: Some("#standardPublication") }
- Non-breaking: AddedEdge { src: "blue.morgen.feed.subscription:body.source:variant0", tgt: "blue.morgen.feed.subscription#rssFeed", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "blue.morgen.feed.subscription:body.source:variant1", tgt: "blue.morgen.feed.subscription#standardPublication", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
-
"description": "A subscription to an RSS/Atom feed.",
5
+
"description": "A subscription to a content source, identified by the source union: an RSS/Atom feed or a Standardfeed publication.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"createdAt": {
10
10
"format": "datetime",
11
-
"type": "string"
12
-
},
13
-
"feedUrl": {
14
-
"description": "URL of the RSS/Atom feed.",
15
-
"format": "uri",
16
-
"maxLength": 2048,
17
11
"type": "string"
18
12
},
19
13
"primary": {
20
-
"description": "Whether the feed receives special treatment in the digest.",
14
+
"description": "Whether the source receives special treatment in the digest.",
21
15
"type": "boolean"
22
16
},
23
-
"siteUrl": {
24
-
"description": "Human-facing site URL associated with the feed.",
25
-
"format": "uri",
26
-
"maxLength": 2048,
27
-
"type": "string"
17
+
"source": {
18
+
"description": "Identity of the subscribed source. Open union; readers tolerate unknown variants.",
19
+
"refs": [
20
+
"#rssFeed",
21
+
"#standardPublication"
22
+
],
23
+
"type": "union"
28
24
},
29
25
"tags": {
30
26
"description": "Free-form, user-defined tags. No controlled vocabulary.",
31
27
"items": {
32
28
"maxGraphemes": 64,
33
29
"maxLength": 640,
34
30
"type": "string"
35
31
},
36
32
"maxLength": 10,
37
33
"type": "array"
38
34
},
39
35
"title": {
40
-
"description": "Display title. Auto-prefilled from the feed, user-editable.",
36
+
"description": "Display title. Auto-prefilled from the source, user-editable.",
41
37
"maxGraphemes": 128,
42
38
"maxLength": 1280,
43
39
"type": "string"
44
40
}
45
41
},
46
42
"required": [
47
-
"feedUrl",
43
+
"source",
48
44
"createdAt"
49
45
],
50
46
"type": "object"
51
47
},
52
48
"type": "record"
49
+
},
50
+
"rssFeed": {
51
+
"properties": {
52
+
"feedUrl": {
53
+
"description": "URL of the RSS/Atom feed.",
54
+
"format": "uri",
55
+
"maxLength": 2048,
56
+
"type": "string"
57
+
},
58
+
"siteUrl": {
59
+
"description": "Human-facing site URL associated with the feed.",
60
+
"format": "uri",
61
+
"maxLength": 2048,
62
+
"type": "string"
63
+
}
64
+
},
65
+
"required": [
66
+
"feedUrl"
67
+
],
68
+
"type": "object"
69
+
},
70
+
"standardPublication": {
71
+
"properties": {
72
+
"publication": {
73
+
"description": "AT-URI of the site.standard.publication record. This subscription is a metadata sidecar; the paired site.standard.graph.subscription record is the existence authority.",
74
+
"format": "at-uri",
75
+
"type": "string"
76
+
}
77
+
},
78
+
"required": [
79
+
"publication"
80
+
],
81
+
"type": "object"
53
82
}
54
83
},
55
84
"id": "blue.morgen.feed.subscription",
56
-
"lexicon": 1
85
+
"lexicon": 1,
86
+
"revision": 2
57
87
}