app.chavatar.settings

chavatar.app

Schema Diff

+237 -2

From

CID
bafyreifgzirr3lu...
Indexed At
2026-03-25 08:44 UTC
View this version

To

CID
bafyreiasfgkzj2p...
Indexed At
2026-07-26 20:18 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@