live.voxport.podcast.feed
Schema Diff
+2 -2
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
}