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

Compare Other Versions

Lexicon Garden

@