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#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") }
  • 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") }
  • 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
  "id": "blue.morgen.feed.subscription",
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 -
          "feedUrl",
10 +
          "source",
11 11
          "createdAt"
12 12
        ],
13 13
        "properties": {
14 14
          "tags": {
15 15
            "type": "array",
16 16
            "items": {
17 17
              "type": "string",
18 18
              "maxLength": 640,
19 19
              "maxGraphemes": 64
20 20
            },
21 21
            "maxLength": 10,
22 22
            "description": "Free-form, user-defined tags. No controlled vocabulary."
23 23
          },
24 24
          "title": {
25 25
            "type": "string",
26 26
            "maxLength": 1280,
27 -
            "description": "Display title. Auto-prefilled from the feed, user-editable.",
27 +
            "description": "Display title. Auto-prefilled from the source, user-editable.",
28 28
            "maxGraphemes": 128
29 29
          },
30 -
          "feedUrl": {
31 -
            "type": "string",
32 -
            "format": "uri",
33 -
            "maxLength": 2048,
34 -
            "description": "URL of the RSS/Atom feed."
30 +
          "source": {
31 +
            "refs": [
32 +
              "#rssFeed",
33 +
              "#standardPublication"
34 +
            ],
35 +
            "type": "union",
36 +
            "description": "Identity of the subscribed source. Open union; readers tolerate unknown variants."
35 37
          },
36 38
          "primary": {
37 39
            "type": "boolean",
38 -
            "description": "Whether the feed receives special treatment in the digest."
39 -
          },
40 -
          "siteUrl": {
41 -
            "type": "string",
42 -
            "format": "uri",
43 -
            "maxLength": 2048,
44 -
            "description": "Human-facing site URL associated with the feed."
40 +
            "description": "Whether the source receives special treatment in the digest."
45 41
          },
46 42
          "createdAt": {
47 43
            "type": "string",
48 44
            "format": "datetime"
49 45
          }
50 46
        }
51 47
      },
52 -
      "description": "A subscription to an RSS/Atom feed."
48 +
      "description": "A subscription to a content source, identified by the source union: an RSS/Atom feed or a Standardfeed publication."
49 +
    },
50 +
    "rssFeed": {
51 +
      "type": "object",
52 +
      "required": [
53 +
        "feedUrl"
54 +
      ],
55 +
      "properties": {
56 +
        "feedUrl": {
57 +
          "type": "string",
58 +
          "format": "uri",
59 +
          "maxLength": 2048,
60 +
          "description": "URL of the RSS/Atom feed."
61 +
        },
62 +
        "siteUrl": {
63 +
          "type": "string",
64 +
          "format": "uri",
65 +
          "maxLength": 2048,
66 +
          "description": "Human-facing site URL associated with the feed."
67 +
        }
68 +
      }
69 +
    },
70 +
    "standardPublication": {
71 +
      "type": "object",
72 +
      "required": [
73 +
        "publication"
74 +
      ],
75 +
      "properties": {
76 +
        "publication": {
77 +
          "type": "string",
78 +
          "format": "at-uri",
79 +
          "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."
80 +
        }
81 +
      }
53 82
    }
54 83
  },
55 84
  "$type": "com.atproto.lexicon.schema",
56 -
  "lexicon": 1
85 +
  "lexicon": 1,
86 +
  "revision": 2
57 87
}

Compare Other Versions

Lexicon Garden

@