{
"id": "town.chalky.occurrence",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"series",
"date",
"completed",
"skipped",
"createdAt",
"updatedAt"
],
"properties": {
"date": {
"type": "string",
"description": "The occurrence day as YYYY-MM-DD. (series, date) uniquely identifies an occurrence within a repo."
},
"series": {
"type": "string",
"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."
},
"skipped": {
"type": "boolean",
"default": false,
"description": "Whether this occurrence was removed from the series (hidden without ending the whole series)."
},
"completed": {
"type": "boolean",
"default": false
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "Last local edit; used as the last-write-wins clock during sync."
},
"completedAt": {
"type": "string",
"format": "datetime",
"description": "When `completed` last flipped to true."
}
}
},
"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."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}