live.voxport.podcast.feed

voxport.live

Schema Diff

+2 -2

From

CID
bafyreieq3xoevfa...
Indexed At
2026-09-01 18:32 UTC
View this version

To

CID
bafyreibbfuhz5p3...
Indexed At
2026-09-09 15:42 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

3 breaking changes, 2 non-breaking changes.

Breaking Changes (3)
  • RemovedVertex RemovedVertex { vertex_id: "live.voxport.podcast.series" }
  • RemovedEdge RemovedEdge { src: "live.voxport.podcast.feed:body.series", tgt: "live.voxport.podcast.series", kind: "ref", name: None }
  • ConstraintTightened ConstraintTightened { vertex_id: "live.voxport.podcast.feed:body.series", sort: "ref", old_value: "live.voxport.podcast.series", new_value: "live.voxport.podcast.series#seriesRef" }
Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "live.voxport.podcast.series#seriesRef" }
  • AddedEdge AddedEdge { src: "live.voxport.podcast.feed:body.series", tgt: "live.voxport.podcast.series#seriesRef", kind: "ref", name: None }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "live.voxport.podcast.series" }

Added Elements

  • AddedVertex { vertex_id: "live.voxport.podcast.series#seriesRef" }

Constraint Changes

  • ConstraintTightened ConstraintTightened { vertex_id: "live.voxport.podcast.feed:body.series", sort: "ref", old_value: "live.voxport.podcast.series", new_value: "live.voxport.podcast.series#seriesRef" }

Additional Notes

  • Breaking: RemovedEdge { src: "live.voxport.podcast.feed:body.series", tgt: "live.voxport.podcast.series", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "live.voxport.podcast.feed:body.series", tgt: "live.voxport.podcast.series#seriesRef", kind: "ref", name: None }
1 1
{
2 2
  "id": "live.voxport.podcast.feed",
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
          "series",
11 11
          "format",
12 12
          "createdAt"
13 13
        ],
14 14
        "properties": {
15 15
          "slug": {
16 16
            "type": "string",
17 17
            "default": "feed.xml",
18 18
            "maxLength": 64,
19 19
            "description": "URL slug for feed (e.g., 'feed.xml')"
20 20
          },
21 21
          "format": {
22 22
            "type": "string",
23 23
            "default": "rss2",
24 24
            "maxLength": 16,
25 25
            "description": "Feed format type",
26 26
            "knownValues": [
27 27
              "rss2",
28 28
              "atom",
29 29
              "json"
30 30
            ]
31 31
          },
32 32
          "series": {
33 -
            "ref": "live.voxport.podcast.series",
33 +
            "ref": "live.voxport.podcast.series#seriesRef",
34 34
            "type": "ref",
35 -
            "description": "Reference to parent series"
35 +
            "description": "Reference to parent series (uri + optional cid)"
36 36
          },
37 37
          "createdAt": {
38 38
            "type": "string",
39 39
            "format": "datetime"
40 40
          },
41 41
          "updatedAt": {
42 42
            "type": "string",
43 43
            "format": "datetime"
44 44
          },
45 45
          "distribution": {
46 46
            "type": "array",
47 47
            "items": {
48 48
              "ref": "#platformDistribution",
49 49
              "type": "ref"
50 50
            },
51 51
            "description": "Platform distribution settings"
52 52
          },
53 53
          "includeEpisodes": {
54 54
            "type": "integer",
55 55
            "default": 50,
56 56
            "minimum": 0,
57 57
            "description": "Number of episodes to include (0 = all)"
58 58
          },
59 59
          "customRssElements": {
60 60
            "type": "string",
61 61
            "maxLength": 10000,
62 62
            "description": "Custom XML elements to inject into RSS"
63 63
          }
64 64
        }
65 65
      },
66 66
      "description": "RSS feed configuration for a podcast series"
67 67
    },
68 68
    "platformDistribution": {
69 69
      "type": "object",
70 70
      "properties": {
71 71
        "enabled": {
72 72
          "type": "boolean",
73 73
          "default": true
74 74
        },
75 75
        "platform": {
76 76
          "type": "string",
77 77
          "maxLength": 32,
78 78
          "knownValues": [
79 79
            "apple",
80 80
            "spotify",
81 81
            "youtube",
82 82
            "google",
83 83
            "overcast",
84 84
            "pocketcasts"
85 85
          ]
86 86
        },
87 87
        "externalId": {
88 88
          "type": "string",
89 89
          "maxLength": 256,
90 90
          "description": "Platform's ID for this series (e.g., Apple Podcasts ID)"
91 91
        },
92 92
        "submissionStatus": {
93 93
          "type": "string",
94 94
          "default": "not_submitted",
95 95
          "maxLength": 32,
96 96
          "knownValues": [
97 97
            "not_submitted",
98 98
            "pending",
99 99
            "approved",
100 100
            "rejected"
101 101
          ]
102 102
        }
103 103
      }
104 104
    }
105 105
  },
106 106
  "$type": "com.atproto.lexicon.schema",
107 107
  "lexicon": 1,
108 108
  "description": "RSS feed configuration for a podcast series"
109 109
}

Compare Other Versions

Lexicon Garden

@