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
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 -
      "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.",
5 +
      "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.",
6 6
      "key": "any",
7 7
      "record": {
8 8
        "properties": {
9 9
          "count": {
10 10
            "description": "Number of ballots that scored this candidate.",
11 11
            "minimum": 0,
12 12
            "type": "integer"
13 13
          },
14 14
          "distribution": {
15 15
            "items": {
16 16
              "minimum": 0,
17 17
              "type": "integer"
18 18
            },
19 19
            "minLength": 1,
20 20
            "type": "array"
21 21
          },
22 22
          "ledger": {
23 23
            "ref": "com.atproto.repo.strongRef",
24 24
            "type": "ref"
25 25
          },
26 26
          "publishedAt": {
27 27
            "format": "datetime",
28 28
            "type": "string"
29 29
          },
30 30
          "round": {
31 31
            "ref": "com.atproto.repo.strongRef",
32 32
            "type": "ref"
33 33
          },
34 34
          "scaleMax": {
35 35
            "type": "integer"
36 36
          },
37 37
          "scaleMin": {
38 38
            "minimum": 0,
39 39
            "type": "integer"
40 40
          },
41 -
          "song": {
42 -
            "ref": "at.eptss.song",
43 -
            "type": "ref"
44 -
          },
45 41
          "total": {
46 42
            "description": "Sum of all scores for this candidate. Average = total / count.",
47 43
            "minimum": 0,
48 44
            "type": "integer"
45 +
          },
46 +
          "track": {
47 +
            "description": "The at.eptss.track this result scores.",
48 +
            "ref": "com.atproto.repo.strongRef",
49 +
            "type": "ref"
49 50
          }
50 51
        },
51 52
        "required": [
52 53
          "round",
53 54
          "ledger",
54 -
          "song",
55 +
          "track",
55 56
          "count",
56 57
          "total",
57 58
          "scaleMin",
58 59
          "scaleMax",
59 60
          "distribution",
60 61
          "publishedAt"
61 62
        ],
62 63
        "type": "object"
63 64
      },
64 65
      "type": "record"
65 66
    }
66 67
  },
67 68
  "id": "at.eptss.voteResult",
68 69
  "lexicon": 1
69 70
}

Compare Other Versions

Lexicon Garden

@