live.voxport.podcast.series

voxport.live

Schema Diff

+19 -0

From

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

To

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

Compatibility Analysis

Breaking Changes Detected

1 breaking change, 4 non-breaking changes.

Breaking Changes (1)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "live.voxport.podcast.series#seriesRef", src: "live.voxport.podcast.series#seriesRef", tgt: "live.voxport.podcast.series#seriesRef.uri", kind: "prop", name: Some("uri") }
Non-Breaking Changes (4)
  • AddedVertex AddedVertex { vertex_id: "live.voxport.podcast.series#seriesRef" }
  • AddedVertex AddedVertex { vertex_id: "live.voxport.podcast.series#seriesRef.cid" }
  • AddedVertex AddedVertex { vertex_id: "live.voxport.podcast.series#seriesRef.uri" }
  • AddedEdge AddedEdge { src: "live.voxport.podcast.series#seriesRef", tgt: "live.voxport.podcast.series#seriesRef.cid", kind: "prop", name: Some("cid") }

Migration Guidance

Added Elements

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

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "live.voxport.podcast.series#seriesRef", src: "live.voxport.podcast.series#seriesRef", tgt: "live.voxport.podcast.series#seriesRef.uri", kind: "prop", name: Some("uri") }
  • Non-breaking: AddedEdge { src: "live.voxport.podcast.series#seriesRef", tgt: "live.voxport.podcast.series#seriesRef.cid", kind: "prop", name: Some("cid") }
1 1
{
2 2
  "id": "live.voxport.podcast.series",
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
          "handle",
11 11
          "title",
12 12
          "createdAt"
13 13
        ],
14 14
        "properties": {
15 15
          "cover": {
16 16
            "type": "blob",
17 17
            "accept": [
18 18
              "image/png",
19 19
              "image/jpeg"
20 20
            ],
21 21
            "maxSize": 2097152,
22 22
            "description": "Cover art image"
23 23
          },
24 24
          "email": {
25 25
            "type": "string",
26 26
            "pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$",
27 27
            "maxLength": 254,
28 28
            "description": "Contact email for podcast"
29 29
          },
30 30
          "title": {
31 31
            "type": "string",
32 32
            "maxLength": 256,
33 33
            "description": "Display name of the podcast"
34 34
          },
35 35
          "author": {
36 36
            "type": "string",
37 37
            "maxLength": 256,
38 38
            "description": "Author/creator name (if different from DID owner)"
39 39
          },
40 40
          "handle": {
41 41
            "type": "string",
42 42
            "pattern": "^[a-zA-Z0-9_-]+$",
43 43
            "maxLength": 64,
44 44
            "description": "Unique handle for this series"
45 45
          },
46 46
          "persons": {
47 47
            "type": "array",
48 48
            "items": {
49 49
              "ref": "live.voxport.podcast.episode#person",
50 50
              "type": "ref"
51 51
            },
52 52
            "maxLength": 50,
53 53
            "description": "People associated with this series — show hosts (Podcasting 2.0 podcast:person at channel level)"
54 54
          },
55 55
          "explicit": {
56 56
            "type": "boolean",
57 57
            "default": false,
58 58
            "description": "Whether content is explicit"
59 59
          },
60 60
          "language": {
61 61
            "type": "string",
62 62
            "format": "language",
63 63
            "maxLength": 5,
64 64
            "description": "Primary language (ISO 639-1)"
65 65
          },
66 66
          "createdAt": {
67 67
            "type": "string",
68 68
            "format": "datetime"
69 69
          },
70 70
          "updatedAt": {
71 71
            "type": "string",
72 72
            "format": "datetime"
73 73
          },
74 74
          "categories": {
75 75
            "type": "array",
76 76
            "items": {
77 77
              "type": "string",
78 78
              "maxLength": 64
79 79
            },
80 80
            "maxLength": 5,
81 81
            "description": "Podcast categories (Apple Podcasts format)"
82 82
          },
83 83
          "rssFeedUrl": {
84 84
            "type": "string",
85 85
            "format": "uri",
86 86
            "description": "Original RSS feed URL (for imported series)"
87 87
          },
88 88
          "websiteUrl": {
89 89
            "type": "string",
90 90
            "format": "uri",
91 91
            "maxLength": 2048,
92 92
            "description": "External website URL"
93 93
          },
94 94
          "description": {
95 95
            "type": "string",
96 96
            "maxLength": 4000,
97 97
            "description": "Podcast description/summary"
98 98
          },
99 99
          "podcastGuid": {
100 100
            "type": "string",
101 101
            "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
102 102
            "maxLength": 64,
103 103
            "description": "Podcasting 2.0 channel-level permanent identity (podcast:guid). A UUIDv5 derived from the feed URL that survives host moves."
104 104
          },
105 105
          "rssImported": {
106 106
            "type": "boolean",
107 107
            "default": false,
108 108
            "description": "Whether this series was imported from an external RSS feed"
109 109
          }
110 110
        }
111 111
      },
112 112
      "description": "A podcast series/channel owned by a creator on VoxPort"
113 +
    },
114 +
    "seriesRef": {
115 +
      "type": "object",
116 +
      "required": [
117 +
        "uri"
118 +
      ],
119 +
      "properties": {
120 +
        "cid": {
121 +
          "type": "string",
122 +
          "format": "cid",
123 +
          "description": "CID of the referenced series record, for a versioned (strong) reference. Optional."
124 +
        },
125 +
        "uri": {
126 +
          "type": "string",
127 +
          "format": "at-uri",
128 +
          "description": "AT-URI of the referenced series record"
129 +
        }
130 +
      },
131 +
      "description": "A reference to a live.voxport.podcast.series record. Use this (not a ref to the record def itself) when linking to a series from another record. cid is optional so a reference can be stored before the series CID is known."
113 132
    }
114 133
  },
115 134
  "$type": "com.atproto.lexicon.schema",
116 135
  "lexicon": 1,
117 136
  "description": "A podcast series/channel owned by a creator on VoxPort"
118 137
}

Compare Other Versions

Lexicon Garden

@