app.chavatar.settings
Schema Diff
+237 -2
Compatibility Analysis
Breaking Changes Detected
7 breaking changes, 75 non-breaking changes.
Breaking Changes (7)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.chavatar.settings#timeReference", src: "app.chavatar.settings#timeReference", tgt: "app.chavatar.settings#timeReference.type", kind: "prop", name: Some("type") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.chavatar.settings#rotationList", src: "app.chavatar.settings#rotationList", tgt: "app.chavatar.settings#rotationList.avatars", kind: "prop", name: Some("avatars") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.chavatar.settings#dateRange", src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.type", kind: "prop", name: Some("type") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.chavatar.settings#rotationSchedule", src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.id", kind: "prop", name: Some("id") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.chavatar.settings#rotationSchedule", src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.kind", kind: "prop", name: Some("kind") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.chavatar.settings#timeWindow", src: "app.chavatar.settings#timeWindow", tgt: "app.chavatar.settings#timeWindow.list", kind: "prop", name: Some("list") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.chavatar.settings#timeWindow", src: "app.chavatar.settings#timeWindow", tgt: "app.chavatar.settings#timeWindow.start", kind: "prop", name: Some("start") }
Non-Breaking Changes (75)
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#dateRange" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#dateRange.endAt" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#dateRange.endDay" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#dateRange.endMonth" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#dateRange.startAt" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#dateRange.startDay" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#dateRange.startMonth" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#dateRange.type" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#geoContext" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#geoContext.location" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#geoContext.timezone" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationList" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationList.avatars" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationList.avatars:items" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationList.interval" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationList.mode" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.id" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.kind" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.list" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.name" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.timing" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.windows" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.windows:items" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timeReference" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timeReference.offsetMin" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timeReference.time" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timeReference.type" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timeWindow" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timeWindow.end" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timeWindow.list" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timeWindow.start" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timing" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timing.dateRange" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timing.daysOfWeek" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timing.daysOfWeek:items" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings#timing.ttlSec" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings:body.fallbackAvatarId" }
- AddedVertex AddedVertex { vertex_id: "app.chavatar.settings:body.geoContext" }
- AddedVertex AddedVertex { vertex_id: "community.lexicon.location.geo#main" }
- AddedEdge AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.endAt", kind: "prop", name: Some("endAt") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.endDay", kind: "prop", name: Some("endDay") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.endMonth", kind: "prop", name: Some("endMonth") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.startAt", kind: "prop", name: Some("startAt") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.startDay", kind: "prop", name: Some("startDay") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.startMonth", kind: "prop", name: Some("startMonth") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#geoContext", tgt: "app.chavatar.settings#geoContext.location", kind: "prop", name: Some("location") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#geoContext", tgt: "app.chavatar.settings#geoContext.timezone", kind: "prop", name: Some("timezone") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#geoContext.location", tgt: "community.lexicon.location.geo#main", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationList", tgt: "app.chavatar.settings#rotationList.interval", kind: "prop", name: Some("interval") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationList", tgt: "app.chavatar.settings#rotationList.mode", kind: "prop", name: Some("mode") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationList.avatars", tgt: "app.chavatar.settings#rotationList.avatars:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationList.avatars:items", tgt: "app.chavatar.settings#avatarItem", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.list", kind: "prop", name: Some("list") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.name", kind: "prop", name: Some("name") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.timing", kind: "prop", name: Some("timing") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.windows", kind: "prop", name: Some("windows") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationSchedule.list", tgt: "app.chavatar.settings#rotationList", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationSchedule.timing", tgt: "app.chavatar.settings#timing", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationSchedule.windows", tgt: "app.chavatar.settings#rotationSchedule.windows:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#rotationSchedule.windows:items", tgt: "app.chavatar.settings#timeWindow", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timeReference", tgt: "app.chavatar.settings#timeReference.offsetMin", kind: "prop", name: Some("offsetMin") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timeReference", tgt: "app.chavatar.settings#timeReference.time", kind: "prop", name: Some("time") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timeWindow", tgt: "app.chavatar.settings#timeWindow.end", kind: "prop", name: Some("end") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timeWindow.end", tgt: "app.chavatar.settings#timeReference", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timeWindow.list", tgt: "app.chavatar.settings#rotationList", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timeWindow.start", tgt: "app.chavatar.settings#timeReference", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timing", tgt: "app.chavatar.settings#timing.dateRange", kind: "prop", name: Some("dateRange") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timing", tgt: "app.chavatar.settings#timing.daysOfWeek", kind: "prop", name: Some("daysOfWeek") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timing", tgt: "app.chavatar.settings#timing.ttlSec", kind: "prop", name: Some("ttlSec") }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timing.dateRange", tgt: "app.chavatar.settings#dateRange", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings#timing.daysOfWeek", tgt: "app.chavatar.settings#timing.daysOfWeek:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.chavatar.settings:body", tgt: "app.chavatar.settings:body.fallbackAvatarId", kind: "prop", name: Some("fallbackAvatarId") }
- AddedEdge AddedEdge { src: "app.chavatar.settings:body", tgt: "app.chavatar.settings:body.geoContext", kind: "prop", name: Some("geoContext") }
- AddedEdge AddedEdge { src: "app.chavatar.settings:body.geoContext", tgt: "app.chavatar.settings#geoContext", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.chavatar.settings#dateRange" }AddedVertex { vertex_id: "app.chavatar.settings#dateRange.endAt" }AddedVertex { vertex_id: "app.chavatar.settings#dateRange.endDay" }AddedVertex { vertex_id: "app.chavatar.settings#dateRange.endMonth" }AddedVertex { vertex_id: "app.chavatar.settings#dateRange.startAt" }AddedVertex { vertex_id: "app.chavatar.settings#dateRange.startDay" }AddedVertex { vertex_id: "app.chavatar.settings#dateRange.startMonth" }AddedVertex { vertex_id: "app.chavatar.settings#dateRange.type" }AddedVertex { vertex_id: "app.chavatar.settings#geoContext" }AddedVertex { vertex_id: "app.chavatar.settings#geoContext.location" }AddedVertex { vertex_id: "app.chavatar.settings#geoContext.timezone" }AddedVertex { vertex_id: "app.chavatar.settings#rotationList" }AddedVertex { vertex_id: "app.chavatar.settings#rotationList.avatars" }AddedVertex { vertex_id: "app.chavatar.settings#rotationList.avatars:items" }AddedVertex { vertex_id: "app.chavatar.settings#rotationList.interval" }AddedVertex { vertex_id: "app.chavatar.settings#rotationList.mode" }AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule" }AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.id" }AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.kind" }AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.list" }AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.name" }AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.timing" }AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.windows" }AddedVertex { vertex_id: "app.chavatar.settings#rotationSchedule.windows:items" }AddedVertex { vertex_id: "app.chavatar.settings#timeReference" }AddedVertex { vertex_id: "app.chavatar.settings#timeReference.offsetMin" }AddedVertex { vertex_id: "app.chavatar.settings#timeReference.time" }AddedVertex { vertex_id: "app.chavatar.settings#timeReference.type" }AddedVertex { vertex_id: "app.chavatar.settings#timeWindow" }AddedVertex { vertex_id: "app.chavatar.settings#timeWindow.end" }AddedVertex { vertex_id: "app.chavatar.settings#timeWindow.list" }AddedVertex { vertex_id: "app.chavatar.settings#timeWindow.start" }AddedVertex { vertex_id: "app.chavatar.settings#timing" }AddedVertex { vertex_id: "app.chavatar.settings#timing.dateRange" }AddedVertex { vertex_id: "app.chavatar.settings#timing.daysOfWeek" }AddedVertex { vertex_id: "app.chavatar.settings#timing.daysOfWeek:items" }AddedVertex { vertex_id: "app.chavatar.settings#timing.ttlSec" }AddedVertex { vertex_id: "app.chavatar.settings:body.fallbackAvatarId" }AddedVertex { vertex_id: "app.chavatar.settings:body.geoContext" }AddedVertex { vertex_id: "community.lexicon.location.geo#main" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "app.chavatar.settings#rotationSchedule", src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.id", kind: "prop", name: Some("id") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.chavatar.settings#rotationSchedule", src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.kind", kind: "prop", name: Some("kind") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.chavatar.settings#timeWindow", src: "app.chavatar.settings#timeWindow", tgt: "app.chavatar.settings#timeWindow.list", kind: "prop", name: Some("list") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.chavatar.settings#timeWindow", src: "app.chavatar.settings#timeWindow", tgt: "app.chavatar.settings#timeWindow.start", kind: "prop", name: Some("start") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.chavatar.settings#rotationList", src: "app.chavatar.settings#rotationList", tgt: "app.chavatar.settings#rotationList.avatars", kind: "prop", name: Some("avatars") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.chavatar.settings#dateRange", src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.type", kind: "prop", name: Some("type") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.chavatar.settings#timeReference", src: "app.chavatar.settings#timeReference", tgt: "app.chavatar.settings#timeReference.type", kind: "prop", name: Some("type") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.endAt", kind: "prop", name: Some("endAt") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.endDay", kind: "prop", name: Some("endDay") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.endMonth", kind: "prop", name: Some("endMonth") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.startAt", kind: "prop", name: Some("startAt") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.startDay", kind: "prop", name: Some("startDay") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#dateRange", tgt: "app.chavatar.settings#dateRange.startMonth", kind: "prop", name: Some("startMonth") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#geoContext", tgt: "app.chavatar.settings#geoContext.location", kind: "prop", name: Some("location") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#geoContext", tgt: "app.chavatar.settings#geoContext.timezone", kind: "prop", name: Some("timezone") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#geoContext.location", tgt: "community.lexicon.location.geo#main", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationList", tgt: "app.chavatar.settings#rotationList.interval", kind: "prop", name: Some("interval") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationList", tgt: "app.chavatar.settings#rotationList.mode", kind: "prop", name: Some("mode") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationList.avatars", tgt: "app.chavatar.settings#rotationList.avatars:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationList.avatars:items", tgt: "app.chavatar.settings#avatarItem", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.list", kind: "prop", name: Some("list") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.name", kind: "prop", name: Some("name") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.timing", kind: "prop", name: Some("timing") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationSchedule", tgt: "app.chavatar.settings#rotationSchedule.windows", kind: "prop", name: Some("windows") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationSchedule.list", tgt: "app.chavatar.settings#rotationList", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationSchedule.timing", tgt: "app.chavatar.settings#timing", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationSchedule.windows", tgt: "app.chavatar.settings#rotationSchedule.windows:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#rotationSchedule.windows:items", tgt: "app.chavatar.settings#timeWindow", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timeReference", tgt: "app.chavatar.settings#timeReference.offsetMin", kind: "prop", name: Some("offsetMin") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timeReference", tgt: "app.chavatar.settings#timeReference.time", kind: "prop", name: Some("time") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timeWindow", tgt: "app.chavatar.settings#timeWindow.end", kind: "prop", name: Some("end") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timeWindow.end", tgt: "app.chavatar.settings#timeReference", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timeWindow.list", tgt: "app.chavatar.settings#rotationList", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timeWindow.start", tgt: "app.chavatar.settings#timeReference", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timing", tgt: "app.chavatar.settings#timing.dateRange", kind: "prop", name: Some("dateRange") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timing", tgt: "app.chavatar.settings#timing.daysOfWeek", kind: "prop", name: Some("daysOfWeek") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timing", tgt: "app.chavatar.settings#timing.ttlSec", kind: "prop", name: Some("ttlSec") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timing.dateRange", tgt: "app.chavatar.settings#dateRange", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings#timing.daysOfWeek", tgt: "app.chavatar.settings#timing.daysOfWeek:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.chavatar.settings:body", tgt: "app.chavatar.settings:body.fallbackAvatarId", kind: "prop", name: Some("fallbackAvatarId") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings:body", tgt: "app.chavatar.settings:body.geoContext", kind: "prop", name: Some("geoContext") }
- Non-breaking: AddedEdge { src: "app.chavatar.settings:body.geoContext", tgt: "app.chavatar.settings#geoContext", kind: "ref", name: None }
1
1
{
2
2
"id": "app.chavatar.settings",
3
3
"defs": {
4
4
"main": {
5
5
"key": "literal:self",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"enabled",
11
11
"interval",
12
12
"mode",
13
13
"avatars"
14
14
],
15
15
"properties": {
16
16
"mode": {
17
17
"type": "string",
18
18
"maxLength": 20,
19
+
"description": "The default rotation mode used when a schedule does not specify its own mode.",
19
20
"knownValues": [
20
21
"sequential",
21
22
"random"
22
23
]
23
24
},
24
25
"avatars": {
25
26
"type": "array",
26
27
"items": {
27
28
"ref": "#avatarItem",
28
29
"type": "ref"
29
-
}
30
+
},
31
+
"description": "Backward-compatible flat list of avatar items. Used as an always-active default when schedules is absent."
30
32
},
31
33
"enabled": {
32
-
"type": "boolean"
34
+
"type": "boolean",
35
+
"description": "Whether avatar rotation feature is enabled."
33
36
},
34
37
"interval": {
35
38
"type": "string",
36
39
"maxLength": 6,
40
+
"description": "The interval at which avatar rotation should occur.",
37
41
"knownValues": [
38
42
"1h",
39
43
"3h",
40
44
"6h",
41
45
"12h",
42
46
"1d",
43
47
"1w",
44
48
"1mo"
45
49
]
50
+
},
51
+
"geoContext": {
52
+
"ref": "#geoContext",
53
+
"type": "ref",
54
+
"description": "Geographic and timezone context for schedule evaluation. Required when any schedule uses time-based or solar schedules."
55
+
},
56
+
"fallbackAvatarId": {
57
+
"type": "string",
58
+
"maxLength": 13,
59
+
"description": "TID of the avatar to display when no schedule matches the current time. Omit to skip rotation when no schedule is active."
46
60
}
47
61
}
48
62
},
49
63
"description": "Rotation configuration for a user."
50
64
},
65
+
"timing": {
66
+
"type": "object",
67
+
"properties": {
68
+
"ttlSec": {
69
+
"type": "integer",
70
+
"description": "Seconds after dateRange.endAt before automatically reverting to the next active schedule."
71
+
},
72
+
"dateRange": {
73
+
"ref": "#dateRange",
74
+
"type": "ref",
75
+
"description": "Date range condition."
76
+
},
77
+
"daysOfWeek": {
78
+
"type": "array",
79
+
"items": {
80
+
"type": "integer",
81
+
"description": "Day of week (0=Sunday, 6=Saturday)."
82
+
},
83
+
"description": "Active days of week. Omit to match all days."
84
+
}
85
+
},
86
+
"description": "Activation timing for a period schedule. All fields are optional; specified conditions are evaluated with AND semantics."
87
+
},
88
+
"dateRange": {
89
+
"type": "object",
90
+
"required": [
91
+
"type"
92
+
],
93
+
"properties": {
94
+
"type": {
95
+
"type": "string",
96
+
"description": "Kind of date range. 'annual' recurs every year; 'absolute' is a one-time range.",
97
+
"knownValues": [
98
+
"annual",
99
+
"absolute"
100
+
]
101
+
},
102
+
"endAt": {
103
+
"type": "string",
104
+
"format": "datetime",
105
+
"description": "Absolute end datetime (ISO 8601). Omit for open-ended. Applies when type='absolute'."
106
+
},
107
+
"endDay": {
108
+
"type": "integer",
109
+
"description": "End day of month (1-31). Required when type='annual'."
110
+
},
111
+
"startAt": {
112
+
"type": "string",
113
+
"format": "datetime",
114
+
"description": "Absolute start datetime (ISO 8601). Required when type='absolute'."
115
+
},
116
+
"endMonth": {
117
+
"type": "integer",
118
+
"description": "End month (1=Jan, 12=Dec). Required when type='annual'."
119
+
},
120
+
"startDay": {
121
+
"type": "integer",
122
+
"description": "Start day of month (1-31). Required when type='annual'."
123
+
},
124
+
"startMonth": {
125
+
"type": "integer",
126
+
"description": "Start month (1=Jan, 12=Dec). Required when type='annual'."
127
+
}
128
+
},
129
+
"description": "A date range condition. The 'type' field is the discriminator."
130
+
},
51
131
"avatarItem": {
52
132
"type": "object",
53
133
"required": [
54
134
"id",
55
135
"image"
56
136
],
57
137
"properties": {
58
138
"id": {
59
139
"type": "string",
60
140
"maxLength": 13
61
141
},
62
142
"image": {
63
143
"ref": "com.atproto.repo.strongRef",
64
144
"type": "ref"
65
145
}
66
146
}
147
+
},
148
+
"geoContext": {
149
+
"type": "object",
150
+
"properties": {
151
+
"location": {
152
+
"ref": "community.lexicon.location.geo#main",
153
+
"type": "ref",
154
+
"description": "WGS84 geographic location. Required for sunrise/sunset/solar-noon time references."
155
+
},
156
+
"timezone": {
157
+
"type": "string",
158
+
"description": "IANA timezone identifier (e.g. 'Asia/Tokyo'). Required for timeWindow and daysOfWeek schedule evaluation."
159
+
}
160
+
},
161
+
"description": "Geographic and timezone context used for schedule evaluation and solar event calculation."
162
+
},
163
+
"timeWindow": {
164
+
"type": "object",
165
+
"required": [
166
+
"start",
167
+
"list"
168
+
],
169
+
"properties": {
170
+
"end": {
171
+
"ref": "#timeReference",
172
+
"type": "ref",
173
+
"description": "Window end time reference. Omit for open-ended windows."
174
+
},
175
+
"list": {
176
+
"ref": "#rotationList",
177
+
"type": "ref",
178
+
"description": "Avatar list for this window."
179
+
},
180
+
"start": {
181
+
"ref": "#timeReference",
182
+
"type": "ref",
183
+
"description": "Window start time reference."
184
+
}
185
+
},
186
+
"description": "A time window defined by start and end time references, with its own avatar list."
187
+
},
188
+
"rotationList": {
189
+
"type": "object",
190
+
"required": [
191
+
"avatars"
192
+
],
193
+
"properties": {
194
+
"mode": {
195
+
"type": "string",
196
+
"maxLength": 20,
197
+
"description": "Rotation mode override. Falls back to the top-level settings.mode when absent.",
198
+
"knownValues": [
199
+
"sequential",
200
+
"random"
201
+
]
202
+
},
203
+
"avatars": {
204
+
"type": "array",
205
+
"items": {
206
+
"ref": "#avatarItem",
207
+
"type": "ref"
208
+
},
209
+
"description": "Ordered list of avatar items."
210
+
},
211
+
"interval": {
212
+
"type": "string",
213
+
"maxLength": 6,
214
+
"description": "Rotation interval override for this list. Falls back to the top-level settings.interval when absent. Not applicable to TimeWindow lists (which use one-shot execution at window boundaries).",
215
+
"knownValues": [
216
+
"1h",
217
+
"3h",
218
+
"6h",
219
+
"12h",
220
+
"1d",
221
+
"1w",
222
+
"1mo"
223
+
]
224
+
}
225
+
},
226
+
"description": "An ordered list of avatar items with optional rotation mode and interval overrides."
227
+
},
228
+
"timeReference": {
229
+
"type": "object",
230
+
"required": [
231
+
"type"
232
+
],
233
+
"properties": {
234
+
"time": {
235
+
"type": "string",
236
+
"description": "Wall-clock time in 'HH:MM' format interpreted in geoContext.timezone. Required when type='fixed'."
237
+
},
238
+
"type": {
239
+
"type": "string",
240
+
"description": "Kind of time reference. 'fixed' requires the 'time' field; solar types use geoContext.location.",
241
+
"knownValues": [
242
+
"fixed",
243
+
"sunrise",
244
+
"sunset",
245
+
"solar-noon"
246
+
]
247
+
},
248
+
"offsetMin": {
249
+
"type": "integer",
250
+
"description": "Offset in minutes from the solar event. Negative values are before the event. Applies to sunrise/sunset/solar-noon."
251
+
}
252
+
},
253
+
"description": "A time reference for schedule boundaries. The 'type' field is the discriminator."
254
+
},
255
+
"rotationSchedule": {
256
+
"type": "object",
257
+
"required": [
258
+
"id",
259
+
"kind"
260
+
],
261
+
"properties": {
262
+
"id": {
263
+
"type": "string",
264
+
"maxLength": 13,
265
+
"description": "TID-format unique identifier for this schedule."
266
+
},
267
+
"kind": {
268
+
"type": "string",
269
+
"maxLength": 16,
270
+
"description": "Schedule kind. 'default' is always active. 'period' uses date/day-of-week timing. 'timed' uses time-of-day windows.",
271
+
"knownValues": [
272
+
"default",
273
+
"period",
274
+
"timed"
275
+
]
276
+
},
277
+
"list": {
278
+
"ref": "#rotationList",
279
+
"type": "ref",
280
+
"description": "Avatar list for 'default' and 'period' kinds."
281
+
},
282
+
"name": {
283
+
"type": "string",
284
+
"maxLength": 64,
285
+
"description": "Display name for this schedule."
286
+
},
287
+
"timing": {
288
+
"ref": "#timing",
289
+
"type": "ref",
290
+
"description": "Activation timing for 'period' kind. Omit to make always active within the period kind."
291
+
},
292
+
"windows": {
293
+
"type": "array",
294
+
"items": {
295
+
"ref": "#timeWindow",
296
+
"type": "ref"
297
+
},
298
+
"description": "Time-of-day windows for 'timed' kind. The schedule is active when the current time falls within any window."
299
+
}
300
+
},
301
+
"description": "A named rotation schedule with an optional activation condition."
67
302
}
68
303
},
69
304
"$type": "com.atproto.lexicon.schema",
70
305
"lexicon": 1,
71
306
"description": "User settings for avatar rotation."
72
307
}