space.remanso.recording
Schema Diff
+45 -1
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
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"credit": {
5
+
"description": "One openly licensed work used in the recording, and where its terms live.",
6
+
"properties": {
7
+
"creator": {
8
+
"maxLength": 1000,
9
+
"type": "string"
10
+
},
11
+
"license": {
12
+
"description": "The licence's short id, e.g. \"by\".",
13
+
"maxLength": 64,
14
+
"type": "string"
15
+
},
16
+
"licenseUrl": {
17
+
"format": "uri",
18
+
"type": "string"
19
+
},
20
+
"sourceUrl": {
21
+
"description": "The work's landing page at its provider.",
22
+
"format": "uri",
23
+
"type": "string"
24
+
},
25
+
"title": {
26
+
"maxLength": 1000,
27
+
"type": "string"
28
+
}
29
+
},
30
+
"required": [
31
+
"title",
32
+
"creator",
33
+
"license",
34
+
"licenseUrl",
35
+
"sourceUrl"
36
+
],
37
+
"type": "object"
38
+
},
4
39
"main": {
5
-
"description": "An audio recording — a past stream, a podcast episode, a voice note — referenced from a Remanso note by at-uri.",
40
+
"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.",
6
41
"key": "tid",
7
42
"record": {
8
43
"properties": {
9
44
"audio": {
10
45
"accept": [
11
46
"audio/*",
12
47
"video/mp4",
13
48
"video/webm"
14
49
],
15
50
"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.",
16
51
"maxSize": 50000000,
17
52
"type": "blob"
18
53
},
19
54
"createdAt": {
20
55
"format": "datetime",
21
56
"type": "string"
22
57
},
58
+
"credits": {
59
+
"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.",
60
+
"items": {
61
+
"ref": "#credit",
62
+
"type": "ref"
63
+
},
64
+
"maxLength": 64,
65
+
"type": "array"
66
+
},
23
67
"durationSec": {
24
68
"description": "Playback length in seconds.",
25
69
"type": "integer"
26
70
},
27
71
"recordedAt": {
28
72
"description": "When the audio was originally captured — a past stream's air date, not the upload time.",
29
73
"format": "datetime",
30
74
"type": "string"
31
75
},
32
76
"title": {
33
77
"maxLength": 1000,
34
78
"type": "string"
35
79
}
36
80
},
37
81
"required": [
38
82
"audio",
39
83
"createdAt"
40
84
],
41
85
"type": "object"
42
86
},
43
87
"type": "record"
44
88
}
45
89
},
46
90
"id": "space.remanso.recording",
47
91
"lexicon": 1
48
92
}