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
"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
}