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