town.chalky.occurrence
Schema Diff
+11 -1
Compatibility Analysis
Backward Compatible
Backward compatible. 4 non-breaking changes.
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "town.chalky.occurrence:body.stamps" }
- AddedVertex AddedVertex { vertex_id: "town.chalky.occurrence:body.stamps.state" }
- AddedEdge AddedEdge { src: "town.chalky.occurrence:body", tgt: "town.chalky.occurrence:body.stamps", kind: "prop", name: Some("stamps") }
- AddedEdge AddedEdge { src: "town.chalky.occurrence:body.stamps", tgt: "town.chalky.occurrence:body.stamps.state", kind: "prop", name: Some("state") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "town.chalky.occurrence:body.stamps" }AddedVertex { vertex_id: "town.chalky.occurrence:body.stamps.state" }
Additional Notes
- Non-breaking: AddedEdge { src: "town.chalky.occurrence:body", tgt: "town.chalky.occurrence:body.stamps", kind: "prop", name: Some("stamps") }
- Non-breaking: AddedEdge { src: "town.chalky.occurrence:body.stamps", tgt: "town.chalky.occurrence:body.stamps.state", kind: "prop", name: Some("state") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "A single occurrence of a recurring town.chalky.task that has diverged from its series' default. A recurring task is a template that projects occurrences onto later matching days; an occurrence stays a pure projection until the user acts on one day (marks it done, or removes it), at which point this record materializes to carry that per-day state. It exists only while it differs from the default — reverting an occurrence to not-done and not-skipped deletes the record. Replaces the older completedDates/skipDates string arrays that used to live on the task.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"completed": {
10
10
"default": false,
11
11
"type": "boolean"
12
12
},
13
13
"completedAt": {
14
14
"description": "When `completed` last flipped to true.",
15
15
"format": "datetime",
16
16
"type": "string"
17
17
},
18
18
"createdAt": {
19
19
"format": "datetime",
20
20
"type": "string"
21
21
},
22
22
"date": {
23
23
"description": "The occurrence day as YYYY-MM-DD. (series, date) uniquely identifies an occurrence within a repo.",
24
24
"type": "string"
25
25
},
26
26
"series": {
27
27
"description": "The rkey of the recurring town.chalky.task this occurrence belongs to. A weak reference: the full at-uri is derived from the author's repo and the town.chalky.task collection.",
28
28
"type": "string"
29
29
},
30
30
"skipped": {
31
31
"default": false,
32
32
"description": "Whether this occurrence was removed from the series (hidden without ending the whole series).",
33
33
"type": "boolean"
34
34
},
35
+
"stamps": {
36
+
"description": "Hybrid-logical-clock stamps mirroring town.chalky.task's stamps field (see its description; approach borrowed from the CRDT ideas behind automerge.org). An occurrence is one decision, so it carries a single group.",
37
+
"properties": {
38
+
"state": {
39
+
"description": "Covers completed, completedAt and skipped.",
40
+
"type": "string"
41
+
}
42
+
},
43
+
"type": "object"
44
+
},
35
45
"updatedAt": {
36
-
"description": "Last local edit; used as the last-write-wins clock during sync.",
46
+
"description": "Last local edit; used as the whole-record last-write-wins clock during sync. The physical component of a hybrid logical clock, so it is monotonic per device.",
37
47
"format": "datetime",
38
48
"type": "string"
39
49
}
40
50
},
41
51
"required": [
42
52
"series",
43
53
"date",
44
54
"completed",
45
55
"skipped",
46
56
"createdAt",
47
57
"updatedAt"
48
58
],
49
59
"type": "object"
50
60
},
51
61
"type": "record"
52
62
}
53
63
},
54
64
"id": "town.chalky.occurrence",
55
65
"lexicon": 1
56
66
}