com.tomplanche.atkuzu.result
Schema Diff
+15 -1
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 3 non-breaking changes.
Breaking Changes (1)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.tomplanche.atkuzu.result:body", src: "com.tomplanche.atkuzu.result:body", tgt: "com.tomplanche.atkuzu.result:body.size", kind: "prop", name: Some("size") }
Non-Breaking Changes (3)
- AddedVertex AddedVertex { vertex_id: "com.tomplanche.atkuzu.result:body.size" }
- AddedVertex AddedVertex { vertex_id: "com.tomplanche.atkuzu.result:body.test" }
- AddedEdge AddedEdge { src: "com.tomplanche.atkuzu.result:body", tgt: "com.tomplanche.atkuzu.result:body.test", kind: "prop", name: Some("test") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.tomplanche.atkuzu.result:body.size" }AddedVertex { vertex_id: "com.tomplanche.atkuzu.result:body.test" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.tomplanche.atkuzu.result:body", src: "com.tomplanche.atkuzu.result:body", tgt: "com.tomplanche.atkuzu.result:body.size", kind: "prop", name: Some("size") }
- Non-breaking: AddedEdge { src: "com.tomplanche.atkuzu.result:body", tgt: "com.tomplanche.atkuzu.result:body.test", kind: "prop", name: Some("test") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
-
"description": "An immutable record of one completed atkuzu (Binairo/Takuzu) daily puzzle, written to the player's own PDS. Write-once: no field may change after creation. The record key is the puzzle number as a string (e.g. `412`), so each puzzle can be recorded at most once per account and re-solving cannot overwrite or spam.",
5
+
"description": "An immutable record of one completed atkuzu (Binairo/Takuzu) daily puzzle, written to the player's own PDS. Write-once: no field may change after creation. The record key is `<puzzleNumber>-<size>` (e.g. `412-8`), so each size can be recorded at most once per puzzle day per account and re-solving cannot overwrite or spam.",
6
6
"key": "any",
7
7
"record": {
8
8
"properties": {
9
9
"createdAt": {
10
10
"description": "When the player finished the puzzle and the record was created.",
11
11
"format": "datetime",
12
12
"type": "string"
13
13
},
14
14
"durationSeconds": {
15
15
"description": "Time taken to finish the puzzle, in seconds.",
16
16
"minimum": 0,
17
17
"type": "integer"
18
18
},
19
19
"puzzleDate": {
20
20
"description": "UTC midnight datetime of the puzzle's calendar day.",
21
21
"format": "datetime",
22
22
"type": "string"
23
23
},
24
24
"puzzleNumber": {
25
25
"description": "Daily puzzle index = whole UTC days since the shared epoch, +1. Launch day = 1.",
26
26
"minimum": 1,
27
27
"type": "integer"
28
28
},
29
+
"size": {
30
+
"description": "Board side length of the daily puzzle solved (6x6, 8x8, or 12x12); each size is its own record for a given day.",
31
+
"enum": [
32
+
6,
33
+
8,
34
+
12
35
+
],
36
+
"type": "integer"
37
+
},
29
38
"solved": {
30
39
"description": "Whether the player finished the puzzle (grid fully and correctly filled).",
31
40
"type": "boolean"
32
41
},
42
+
"test": {
43
+
"description": "True if this record was written while testing the write path, not a genuine daily completion. Absent (not `false`) on real records. Test records also use a `test-` rkey prefix so they never collide with a real puzzle's slot.",
44
+
"type": "boolean"
45
+
},
33
46
"toggleCount": {
34
47
"description": "Total number of cell toggles made during the attempt (including corrections). Optional efficiency stat, absent if not tracked.",
35
48
"minimum": 0,
36
49
"type": "integer"
37
50
}
38
51
},
39
52
"required": [
40
53
"puzzleNumber",
41
54
"puzzleDate",
55
+
"size",
42
56
"solved",
43
57
"durationSeconds",
44
58
"createdAt"
45
59
],
46
60
"type": "object"
47
61
},
48
62
"type": "record"
49
63
}
50
64
},
51
65
"id": "com.tomplanche.atkuzu.result",
52
66
"lexicon": 1
53
67
}