at.eptss.voteResult
Schema Diff
+7 -6
Compatibility Analysis
Breaking Changes Detected
5 breaking changes, 2 non-breaking changes.
Breaking Changes (5)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "at.eptss.voteResult:body", src: "at.eptss.voteResult:body", tgt: "at.eptss.voteResult:body.track", kind: "prop", name: Some("track") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "at.eptss.voteResult:body", src: "at.eptss.voteResult:body", tgt: "at.eptss.voteResult:body.song", kind: "prop", name: Some("song") }
- RemovedVertex RemovedVertex { vertex_id: "at.eptss.song" }
- RemovedVertex RemovedVertex { vertex_id: "at.eptss.voteResult:body.song" }
- RemovedEdge RemovedEdge { src: "at.eptss.voteResult:body.song", tgt: "at.eptss.song", kind: "ref", name: None }
Non-Breaking Changes (2)
- AddedVertex AddedVertex { vertex_id: "at.eptss.voteResult:body.track" }
- AddedEdge AddedEdge { src: "at.eptss.voteResult:body.track", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "at.eptss.song" }RemovedVertex { vertex_id: "at.eptss.voteResult:body.song" }
Added Elements
AddedVertex { vertex_id: "at.eptss.voteResult:body.track" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "at.eptss.voteResult:body", src: "at.eptss.voteResult:body", tgt: "at.eptss.voteResult:body.track", kind: "prop", name: Some("track") }
- Breaking: RequiredEdgeRemoved { vertex_id: "at.eptss.voteResult:body", src: "at.eptss.voteResult:body", tgt: "at.eptss.voteResult:body.song", kind: "prop", name: Some("song") }
- Breaking: RemovedEdge { src: "at.eptss.voteResult:body.song", tgt: "at.eptss.song", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "at.eptss.voteResult:body.track", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
1
1
{
2
2
"id": "at.eptss.voteResult",
3
3
"defs": {
4
4
"main": {
5
5
"key": "any",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"round",
11
11
"ledger",
12
-
"song",
12
+
"track",
13
13
"count",
14
14
"total",
15
15
"scaleMin",
16
16
"scaleMax",
17
17
"distribution",
18
18
"publishedAt"
19
19
],
20
20
"properties": {
21
-
"song": {
22
-
"ref": "at.eptss.song",
23
-
"type": "ref"
24
-
},
25
21
"count": {
26
22
"type": "integer",
27
23
"minimum": 0,
28
24
"description": "Number of ballots that scored this candidate."
29
25
},
30
26
"round": {
31
27
"ref": "com.atproto.repo.strongRef",
32
28
"type": "ref"
33
29
},
34
30
"total": {
35
31
"type": "integer",
36
32
"minimum": 0,
37
33
"description": "Sum of all scores for this candidate. Average = total / count."
38
34
},
35
+
"track": {
36
+
"ref": "com.atproto.repo.strongRef",
37
+
"type": "ref",
38
+
"description": "The at.eptss.track this result scores."
39
+
},
39
40
"ledger": {
40
41
"ref": "com.atproto.repo.strongRef",
41
42
"type": "ref"
42
43
},
43
44
"scaleMax": {
44
45
"type": "integer"
45
46
},
46
47
"scaleMin": {
47
48
"type": "integer",
48
49
"minimum": 0
49
50
},
50
51
"publishedAt": {
51
52
"type": "string",
52
53
"format": "datetime"
53
54
},
54
55
"distribution": {
55
56
"type": "array",
56
57
"items": {
57
58
"type": "integer",
58
59
"minimum": 0
59
60
},
60
61
"minLength": 1
61
62
}
62
63
}
63
64
},
64
-
"description": "Aggregate (anonymous) vote result for one candidate in one round, published by the organizer after voting closes. Individual scores are never published. Integers only (count + total; clients divide) because DAG-CBOR forbids floats. The scale is self-describing: distribution has (scaleMax - scaleMin + 1) buckets, distribution[0] = count of scaleMin scores."
65
+
"description": "Aggregate (anonymous) vote result for one candidate in one round, published by the organizer after voting closes. Individual scores are never published. The candidate is a strongRef to its at.eptss.track — one shape for a song across the whole system, not an embedded copy that goes stale. Integers only (count + total; clients divide) because DAG-CBOR forbids floats. The scale is self-describing: distribution has (scaleMax - scaleMin + 1) buckets, distribution[0] = count of scaleMin scores."
65
66
}
66
67
},
67
68
"$type": "com.atproto.lexicon.schema",
68
69
"lexicon": 1
69
70
}