blue.morgen.feed.subscription

morgen.blue

Schema Diff

+46 -16

From

CID
bafyreihraxnbhth...
Indexed At
2026-05-24 07:54 UTC
View this version

To

CID
bafyreiaftshu727...
Indexed At
2026-07-26 20:10 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@