town.chalky.occurrence

chalky.town

Schema Diff

+11 -1

From

CID
bafyreicy6troxdd...
Indexed At
2026-08-03 22:21 UTC
View this version

To

CID
bafyreig7dstrhf2...
Indexed At
2026-09-21 04:07 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@