space.dailygame.profile

dailygame.space

Schema Diff

+67 -0

From

CID
bafyreidiqw7ojga...
Indexed At
2026-04-17 23:36 UTC
View this version

To

CID
bafyreigu4njcvn4...
Indexed At
2026-04-24 01:49 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 15 non-breaking changes.

Breaking Changes (2)
  • ConstraintAdded ConstraintAdded { vertex_id: "space.dailygame.profile:body.favorites:items", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "space.dailygame.profile#badge.id", sort: "maxLength", value: "64" }
Non-Breaking Changes (15)
  • AddedVertex AddedVertex { vertex_id: "space.dailygame.profile#badge" }
  • AddedVertex AddedVertex { vertex_id: "space.dailygame.profile#badge.category" }
  • AddedVertex AddedVertex { vertex_id: "space.dailygame.profile#badge.earnedAt" }
  • AddedVertex AddedVertex { vertex_id: "space.dailygame.profile#badge.id" }
  • AddedVertex AddedVertex { vertex_id: "space.dailygame.profile:body.badges" }
  • AddedVertex AddedVertex { vertex_id: "space.dailygame.profile:body.badges:items" }
  • AddedVertex AddedVertex { vertex_id: "space.dailygame.profile:body.favorites" }
  • AddedVertex AddedVertex { vertex_id: "space.dailygame.profile:body.favorites:items" }
  • AddedEdge AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.category", kind: "prop", name: Some("category") }
  • AddedEdge AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.earnedAt", kind: "prop", name: Some("earnedAt") }
  • AddedEdge AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.id", kind: "prop", name: Some("id") }
  • AddedEdge AddedEdge { src: "space.dailygame.profile:body", tgt: "space.dailygame.profile:body.badges", kind: "prop", name: Some("badges") }
  • AddedEdge AddedEdge { src: "space.dailygame.profile:body", tgt: "space.dailygame.profile:body.favorites", kind: "prop", name: Some("favorites") }
  • AddedEdge AddedEdge { src: "space.dailygame.profile:body.badges", tgt: "space.dailygame.profile:body.badges:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "space.dailygame.profile:body.favorites", tgt: "space.dailygame.profile:body.favorites:items", kind: "items", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "space.dailygame.profile#badge" }
  • AddedVertex { vertex_id: "space.dailygame.profile#badge.category" }
  • AddedVertex { vertex_id: "space.dailygame.profile#badge.earnedAt" }
  • AddedVertex { vertex_id: "space.dailygame.profile#badge.id" }
  • AddedVertex { vertex_id: "space.dailygame.profile:body.badges" }
  • AddedVertex { vertex_id: "space.dailygame.profile:body.badges:items" }
  • AddedVertex { vertex_id: "space.dailygame.profile:body.favorites" }
  • AddedVertex { vertex_id: "space.dailygame.profile:body.favorites:items" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "space.dailygame.profile:body.favorites:items", sort: "maxLength", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "space.dailygame.profile#badge.id", sort: "maxLength", value: "64" }

Additional Notes

  • Non-breaking: AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.category", kind: "prop", name: Some("category") }
  • Non-breaking: AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.earnedAt", kind: "prop", name: Some("earnedAt") }
  • Non-breaking: AddedEdge { src: "space.dailygame.profile#badge", tgt: "space.dailygame.profile#badge.id", kind: "prop", name: Some("id") }
  • Non-breaking: AddedEdge { src: "space.dailygame.profile:body", tgt: "space.dailygame.profile:body.badges", kind: "prop", name: Some("badges") }
  • Non-breaking: AddedEdge { src: "space.dailygame.profile:body", tgt: "space.dailygame.profile:body.favorites", kind: "prop", name: Some("favorites") }
  • Non-breaking: AddedEdge { src: "space.dailygame.profile:body.badges", tgt: "space.dailygame.profile:body.badges:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "space.dailygame.profile:body.favorites", tgt: "space.dailygame.profile:body.favorites:items", kind: "items", name: None }
1 1
{
2 2
  "id": "space.dailygame.profile",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "literal:self",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "createdAt"
11 11
        ],
12 12
        "properties": {
13 13
          "games": {
14 14
            "type": "array",
15 15
            "items": {
16 16
              "type": "string",
17 17
              "maxLength": 64
18 18
            },
19 19
            "maxLength": 256,
20 20
            "description": "Game ids from the app catalog that the user plays."
21 21
          },
22 +
          "badges": {
23 +
            "type": "array",
24 +
            "items": {
25 +
              "ref": "#badge",
26 +
              "type": "ref"
27 +
            },
28 +
            "maxLength": 256,
29 +
            "description": "Badges the user has earned. Once earned, a badge stays earned."
30 +
          },
22 31
          "timezone": {
23 32
            "type": "string",
24 33
            "maxLength": 128,
25 34
            "description": "IANA timezone name used to compute daily resets for this user."
26 35
          },
27 36
          "createdAt": {
28 37
            "type": "string",
29 38
            "format": "datetime",
30 39
            "description": "When this profile record was first created."
31 40
          },
41 +
          "favorites": {
42 +
            "type": "array",
43 +
            "items": {
44 +
              "type": "string",
45 +
              "maxLength": 64
46 +
            },
47 +
            "maxLength": 256,
48 +
            "description": "Game ids that the user has favorited. Shown in a dedicated group on the home page."
49 +
          },
32 50
          "displayName": {
33 51
            "type": "string",
34 52
            "maxLength": 640,
35 53
            "description": "Optional override of the user's Bluesky display name for this app.",
36 54
            "maxGraphemes": 64
37 55
          },
38 56
          "displayOrder": {
39 57
            "type": "array",
40 58
            "items": {
41 59
              "type": "string",
42 60
              "maxLength": 64
43 61
            },
44 62
            "maxLength": 256,
45 63
            "description": "Optional user-preferred ordering of game ids."
46 64
          }
47 65
        }
48 66
      },
49 67
      "description": "A user's daily-games profile. Singleton per repo (rkey = 'self')."
68 +
    },
69 +
    "badge": {
70 +
      "type": "object",
71 +
      "required": [
72 +
        "id",
73 +
        "earnedAt"
74 +
      ],
75 +
      "properties": {
76 +
        "id": {
77 +
          "type": "string",
78 +
          "maxLength": 64,
79 +
          "description": "Badge id. Known values cover the app's published badge catalog; unknown values are accepted for forward compatibility.",
80 +
          "knownValues": [
81 +
            "streak-10",
82 +
            "streak-25",
83 +
            "streak-50",
84 +
            "streak-100",
85 +
            "streak-250",
86 +
            "streak-365",
87 +
            "games-10",
88 +
            "games-15",
89 +
            "games-20",
90 +
            "games-30",
91 +
            "games-50",
92 +
            "5x5",
93 +
            "10x10",
94 +
            "category-expert-word",
95 +
            "category-expert-logic",
96 +
            "category-expert-geography",
97 +
            "category-expert-trivia"
98 +
          ]
99 +
        },
100 +
        "category": {
101 +
          "type": "string",
102 +
          "description": "Grouping used by the app UI.",
103 +
          "knownValues": [
104 +
            "streak",
105 +
            "variety",
106 +
            "breadth",
107 +
            "category-expert"
108 +
          ]
109 +
        },
110 +
        "earnedAt": {
111 +
          "type": "string",
112 +
          "format": "datetime",
113 +
          "description": "When the badge was first earned (date of earliest play that satisfied the criteria)."
114 +
        }
115 +
      },
116 +
      "description": "A user accomplishment. `id` is a stable identifier from the app's badge catalog; `earnedAt` is the date the user first met the criteria."
50 117
    }
51 118
  },
52 119
  "$type": "com.atproto.lexicon.schema",
53 120
  "lexicon": 1
54 121
}

Compare Other Versions

Lexicon Garden

@