at.atjam.submission
Schema Diff
+7 -3
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 2 non-breaking changes.
Breaking Changes (1)
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "at.atjam.submission:body", src: "at.atjam.submission:body", tgt: "at.atjam.submission:body.payload", kind: "prop", name: Some("payload") }
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "at.atjam.submission:body.url" }
- AddedEdge AddedEdge { src: "at.atjam.submission:body", tgt: "at.atjam.submission:body.url", kind: "prop", name: Some("url") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "at.atjam.submission:body.url" }
Additional Notes
- Breaking: RequiredEdgeRemoved { vertex_id: "at.atjam.submission:body", src: "at.atjam.submission:body", tgt: "at.atjam.submission:body.payload", kind: "prop", name: Some("payload") }
- Non-breaking: AddedEdge { src: "at.atjam.submission:body", tgt: "at.atjam.submission:body.url", kind: "prop", name: Some("url") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "Declares a submission by the record creator to the referenced round.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"createdAt": {
10
10
"format": "datetime",
11
11
"type": "string"
12
12
},
13
13
"note": {
14
14
"description": "Optional caption/description from the submitter.",
15
15
"maxGraphemes": 300,
16
16
"maxLength": 3000,
17
17
"type": "string"
18
18
},
19
19
"payload": {
20
-
"description": "Strong-ref to the deliverable record on its native ATProto app. The referenced record's $type SHOULD appear in the round's acceptedSubmissionTypes.",
20
+
"description": "Preferred deliverable: a strong-ref to the record on its native ATProto app. The referenced record's $type SHOULD appear in the round's acceptedSubmissionTypes.",
21
21
"ref": "com.atproto.repo.strongRef",
22
22
"type": "ref"
23
23
},
24
24
"round": {
25
25
"description": "Strong-ref to the at.atjam.round record being submitted to.",
26
26
"ref": "com.atproto.repo.strongRef",
27
27
"type": "ref"
28
+
},
29
+
"url": {
30
+
"description": "Fallback deliverable for work not on ATProto: a plain link (itch.io build, hosted doc, etc.). Unverifiable and mutable, so prefer payload when the deliverable is a record. Ignored when payload is present.",
31
+
"format": "uri",
32
+
"type": "string"
28
33
}
29
34
},
30
35
"required": [
31
36
"round",
32
-
"payload",
33
37
"createdAt"
34
38
],
35
39
"type": "object"
36
40
},
37
41
"type": "record"
38
42
}
39
43
},
40
-
"description": "A participant's submission to a round. atjam does not host the deliverable; the submission strong-refs a record on whichever ATProto app owns the data (plyr.fm track, standard.site post, etc.). The submitter's DID is implicit (the record creator).",
44
+
"description": "A participant's submission to a round. atjam does not host the deliverable; it points at it. The strong way is `payload` — a strong-ref to a record on whichever ATProto app owns the data (plyr.fm track, standard.site post, etc.), which is content-addressed, verifiable, and portable. The fallback is `url` — a plain link, for deliverables that don't live on ATProto yet (an itch.io build, a hosted doc). Prefer payload; `url` is the humble alternative. The lexicon can't express \"one-of\" across fields, so both are optional here and the \"at least one\" rule is enforced in code (Submission.getDeliverable). The submitter's DID is implicit (the record creator).",
41
45
"id": "at.atjam.submission",
42
46
"lexicon": 1
43
47
}