space.remanso.recording

apoena.dev

Schema Diff

+45 -1

From

CID
bafyreifj4rbippi...
Indexed At
2026-08-02 19:32 UTC
View this version

To

CID
bafyreie2zjvhgiw...
Indexed At
2026-08-02 19:35 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

5 breaking changes, 11 non-breaking changes.

Breaking Changes (5)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.licenseUrl", kind: "prop", name: Some("licenseUrl") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.creator", kind: "prop", name: Some("creator") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.license", kind: "prop", name: Some("license") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.sourceUrl", kind: "prop", name: Some("sourceUrl") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.title", kind: "prop", name: Some("title") }
Non-Breaking Changes (11)
  • AddedVertex AddedVertex { vertex_id: "space.remanso.recording#credit" }
  • AddedVertex AddedVertex { vertex_id: "space.remanso.recording#credit.creator" }
  • AddedVertex AddedVertex { vertex_id: "space.remanso.recording#credit.license" }
  • AddedVertex AddedVertex { vertex_id: "space.remanso.recording#credit.licenseUrl" }
  • AddedVertex AddedVertex { vertex_id: "space.remanso.recording#credit.sourceUrl" }
  • AddedVertex AddedVertex { vertex_id: "space.remanso.recording#credit.title" }
  • AddedVertex AddedVertex { vertex_id: "space.remanso.recording:body.credits" }
  • AddedVertex AddedVertex { vertex_id: "space.remanso.recording:body.credits:items" }
  • AddedEdge AddedEdge { src: "space.remanso.recording:body", tgt: "space.remanso.recording:body.credits", kind: "prop", name: Some("credits") }
  • AddedEdge AddedEdge { src: "space.remanso.recording:body.credits", tgt: "space.remanso.recording:body.credits:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "space.remanso.recording:body.credits:items", tgt: "space.remanso.recording#credit", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "space.remanso.recording#credit" }
  • AddedVertex { vertex_id: "space.remanso.recording#credit.creator" }
  • AddedVertex { vertex_id: "space.remanso.recording#credit.license" }
  • AddedVertex { vertex_id: "space.remanso.recording#credit.licenseUrl" }
  • AddedVertex { vertex_id: "space.remanso.recording#credit.sourceUrl" }
  • AddedVertex { vertex_id: "space.remanso.recording#credit.title" }
  • AddedVertex { vertex_id: "space.remanso.recording:body.credits" }
  • AddedVertex { vertex_id: "space.remanso.recording:body.credits:items" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.licenseUrl", kind: "prop", name: Some("licenseUrl") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.creator", kind: "prop", name: Some("creator") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.license", kind: "prop", name: Some("license") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.sourceUrl", kind: "prop", name: Some("sourceUrl") }
  • Breaking: RequiredEdgeAdded { vertex_id: "space.remanso.recording#credit", src: "space.remanso.recording#credit", tgt: "space.remanso.recording#credit.title", kind: "prop", name: Some("title") }
  • Non-breaking: AddedEdge { src: "space.remanso.recording:body", tgt: "space.remanso.recording:body.credits", kind: "prop", name: Some("credits") }
  • Non-breaking: AddedEdge { src: "space.remanso.recording:body.credits", tgt: "space.remanso.recording:body.credits:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "space.remanso.recording:body.credits:items", tgt: "space.remanso.recording#credit", kind: "ref", name: None }
1 1
{
2 2
  "id": "space.remanso.recording",
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
          "audio",
11 11
          "createdAt"
12 12
        ],
13 13
        "properties": {
14 14
          "audio": {
15 15
            "type": "blob",
16 16
            "accept": [
17 17
              "audio/*",
18 18
              "video/mp4",
19 19
              "video/webm"
20 20
            ],
21 21
            "maxSize": 50000000,
22 22
            "description": "The recording itself. video/mp4 and video/webm are accepted alongside audio/* because a PDS sniffs the container rather than trusting the upload's Content-Type: an audio-only MP4 or M4A sniffs as video/mp4, and a sniffer that reads no further than the EBML magic calls an audio-only WebM video/webm."
23 23
          },
24 24
          "title": {
25 25
            "type": "string",
26 26
            "maxLength": 1000
27 27
          },
28 +
          "credits": {
29 +
            "type": "array",
30 +
            "items": {
31 +
              "ref": "#credit",
32 +
              "type": "ref"
33 +
            },
34 +
            "maxLength": 64,
35 +
            "description": "Attribution for openly licensed music mixed into the recording. Only licences that require it are listed — a CC0 track is deliberately absent, because CC0 asks for nothing and an entry here would imply otherwise."
36 +
          },
28 37
          "createdAt": {
29 38
            "type": "string",
30 39
            "format": "datetime"
31 40
          },
32 41
          "recordedAt": {
33 42
            "type": "string",
34 43
            "format": "datetime",
35 44
            "description": "When the audio was originally captured — a past stream's air date, not the upload time."
36 45
          },
37 46
          "durationSec": {
38 47
            "type": "integer",
39 48
            "description": "Playback length in seconds."
40 49
          }
41 50
        }
42 51
      },
43 -
      "description": "An audio recording — a past stream, a podcast episode, a voice note — referenced from a Remanso note by at-uri."
52 +
      "description": "An audio recording — a past stream, a podcast episode, a voice note. A recording at rkey R is the recording of the space.remanso.note at rkey R in the same repo: one note, at most one recording, paired by convention rather than by a field, so a reader that knows the note's did and rkey reaches the audio with a single getRecord. A recording whose rkey matches no note stands alone and belongs to nobody. Legacy path: a recording is also referenced from a note by at-uri embedded in the note's content."
53 +
    },
54 +
    "credit": {
55 +
      "type": "object",
56 +
      "required": [
57 +
        "title",
58 +
        "creator",
59 +
        "license",
60 +
        "licenseUrl",
61 +
        "sourceUrl"
62 +
      ],
63 +
      "properties": {
64 +
        "title": {
65 +
          "type": "string",
66 +
          "maxLength": 1000
67 +
        },
68 +
        "creator": {
69 +
          "type": "string",
70 +
          "maxLength": 1000
71 +
        },
72 +
        "license": {
73 +
          "type": "string",
74 +
          "maxLength": 64,
75 +
          "description": "The licence's short id, e.g. \"by\"."
76 +
        },
77 +
        "sourceUrl": {
78 +
          "type": "string",
79 +
          "format": "uri",
80 +
          "description": "The work's landing page at its provider."
81 +
        },
82 +
        "licenseUrl": {
83 +
          "type": "string",
84 +
          "format": "uri"
85 +
        }
86 +
      },
87 +
      "description": "One openly licensed work used in the recording, and where its terms live."
44 88
    }
45 89
  },
46 90
  "$type": "com.atproto.lexicon.schema",
47 91
  "lexicon": 1
48 92
}

Compare Other Versions

Lexicon Garden

@