app.chavatar.settings

chavatar.app

Schema Diff

+235 -0

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#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
}

Compare Other Versions

Lexicon Garden

@