space.intandem.calendarSource
Schema Diff
+6 -2
Compatibility Analysis
Backward Compatible
Backward compatible. 3 non-breaking changes.
Non-Breaking Changes (3)
- AddedVertex AddedVertex { vertex_id: "space.intandem.calendarSource:body.writeBack" }
- AddedEdge AddedEdge { src: "space.intandem.calendarSource:body", tgt: "space.intandem.calendarSource:body.writeBack", kind: "prop", name: Some("writeBack") }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "space.intandem.calendarSource:body.secret", sort: "maxLength", old_value: "1000", new_value: "2000" }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "space.intandem.calendarSource:body.writeBack" }
Constraint Changes
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "space.intandem.calendarSource:body.secret", sort: "maxLength", old_value: "1000", new_value: "2000" }
Additional Notes
- Non-breaking: AddedEdge { src: "space.intandem.calendarSource:body", tgt: "space.intandem.calendarSource:body.writeBack", kind: "prop", name: Some("writeBack") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "A connected calendar whose busy time subtracts from availability.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"createdAt": {
10
10
"format": "datetime",
11
11
"type": "string"
12
12
},
13
13
"kind": {
14
14
"enum": [
15
15
"ics",
16
16
"caldav"
17
17
],
18
18
"type": "string"
19
19
},
20
20
"name": {
21
21
"maxLength": 200,
22
22
"type": "string"
23
23
},
24
24
"secret": {
25
-
"description": "CalDAV password / app password. Alpha caveat: stored unencrypted in a members-only space.",
26
-
"maxLength": 1000,
25
+
"description": "CalDAV password / app password (at most 1000 characters of plaintext), sealed at rest: an AES-256-GCM envelope (enc1:<iv>.<ciphertext>) under a key derived per host from the Tandem deployment's key, so only that deployment can read it. Records written before 2026-09-07 may still hold the plaintext until the host's next visit reseals them.",
26
+
"maxLength": 2000,
27
27
"type": "string"
28
28
},
29
29
"url": {
30
30
"format": "uri",
31
31
"type": "string"
32
32
},
33
33
"username": {
34
34
"maxLength": 300,
35
35
"type": "string"
36
+
},
37
+
"writeBack": {
38
+
"description": "This calendar receives an event for each booking. CalDAV only; at most one source per host carries it.",
39
+
"type": "boolean"
36
40
}
37
41
},
38
42
"required": [
39
43
"name",
40
44
"kind",
41
45
"url",
42
46
"createdAt"
43
47
],
44
48
"type": "object"
45
49
},
46
50
"type": "record"
47
51
}
48
52
},
49
53
"id": "space.intandem.calendarSource",
50
54
"lexicon": 1
51
55
}