at.eptss.voteResult

eptss.at

Schema Diff

+7 -6

From

CID
bafyreifqtvggj33...
Indexed At
2026-08-01 05:41 UTC
View this version

To

CID
bafyreic5d66pvqi...
Indexed At
2026-08-10 04:16 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@