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