com.suibari.nagi.getPreferences

suibari.com

Schema Diff

+84 -0

From

CID
bafyreiabr6sllqx...
Indexed At
2026-08-05 09:00 UTC
View this version

To

CID
bafyreia4u6fnnvd...
Indexed At
2026-08-15 17:15 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 24 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.id", kind: "prop", name: Some("id") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.kind", kind: "prop", name: Some("kind") }
Non-Breaking Changes (24)
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.id" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.kind" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.label" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.query" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.queryKind" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.source" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.uri" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs:items" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.preferredName" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.replyFreq" }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.label", kind: "prop", name: Some("label") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.query", kind: "prop", name: Some("query") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.queryKind", kind: "prop", name: Some("queryKind") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.source", kind: "prop", name: Some("source") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.uri", kind: "prop", name: Some("uri") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabs", kind: "prop", name: Some("feedTabs") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs", tgt: "com.suibari.nagi.getPreferences:output.feedTabs:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.id" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.kind" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.label" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.query" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.queryKind" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.source" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#feedTab.uri" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabs:items" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.preferredName" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences:output.replyFreq" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.id", kind: "prop", name: Some("id") }
  • Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.getPreferences#feedTab", src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.kind", kind: "prop", name: Some("kind") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.label", kind: "prop", name: Some("label") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.query", kind: "prop", name: Some("query") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.queryKind", kind: "prop", name: Some("queryKind") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.source", kind: "prop", name: Some("source") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences#feedTab", tgt: "com.suibari.nagi.getPreferences#feedTab.uri", kind: "prop", name: Some("uri") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabs", kind: "prop", name: Some("feedTabs") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.feedTabsUpdatedAt", kind: "prop", name: Some("feedTabsUpdatedAt") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output", tgt: "com.suibari.nagi.getPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs", tgt: "com.suibari.nagi.getPreferences:output.feedTabs:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.getPreferences:output.feedTabs:items", tgt: "com.suibari.nagi.getPreferences#feedTab", kind: "ref", name: None }
1 1
{
2 2
  "id": "com.suibari.nagi.getPreferences",
3 3
  "defs": {
4 4
    "main": {
5 5
      "type": "query",
6 6
      "errors": [
7 7
        {
8 8
          "name": "AuthRequired"
9 9
        }
10 10
      ],
11 11
      "output": {
12 12
        "schema": {
13 13
          "type": "object",
14 14
          "required": [
15 15
            "readPositions",
16 16
            "emojiFavorites"
17 17
          ],
18 18
          "properties": {
19 +
            "feedTabs": {
20 +
              "type": "array",
21 +
              "items": {
22 +
                "ref": "#feedTab",
23 +
                "type": "ref"
24 +
              },
25 +
              "maxLength": 16,
26 +
              "description": "フィードのタブ。表示順そのまま。"
27 +
            },
28 +
            "replyFreq": {
29 +
              "type": "integer",
30 +
              "maximum": 100,
31 +
              "minimum": 0,
32 +
              "description": "botたんからの返信確率(0〜100%)。Bluesky側のfreq設定と共用。"
33 +
            },
34 +
            "preferredName": {
35 +
              "type": "string",
36 +
              "maxLength": 120,
37 +
              "description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",
38 +
              "maxGraphemes": 40
39 +
            },
19 40
            "readPositions": {
20 41
              "type": "array",
21 42
              "items": {
22 43
                "ref": "#readPosition",
23 44
                "type": "ref"
24 45
              }
25 46
            },
26 47
            "emojiFavorites": {
27 48
              "type": "array",
28 49
              "items": {
29 50
                "type": "unknown"
30 51
              },
31 52
              "maxLength": 32,
32 53
              "description": "お気に入り絵文字パレット。表示順そのまま。要素は #unicodeFavorite または #customFavorite。"
33 54
            },
55 +
            "feedTabsUpdatedAt": {
56 +
              "type": "string",
57 +
              "format": "datetime",
58 +
              "description": "省略時は、この利用者がまだ一度もタブをカスタムしていないことを表す(クライアントは既定タブを使う)。"
59 +
            },
34 60
            "emojiFavoritesUpdatedAt": {
35 61
              "type": "string",
36 62
              "format": "datetime",
37 63
              "description": "省略時は、この利用者のお気に入りがまだ一度も同期されていないことを表す。"
38 64
            }
39 65
          }
40 66
        },
41 67
        "encoding": "application/json"
42 68
      },
43 69
      "description": "端末をまたいで同期する本人の設定(my Nagi の既読位置とお気に入り絵文字)を返す。他ユーザーからは参照できない。"
44 70
    },
71 +
    "feedTab": {
72 +
      "type": "object",
73 +
      "required": [
74 +
        "id",
75 +
        "kind"
76 +
      ],
77 +
      "properties": {
78 +
        "id": {
79 +
          "type": "string",
80 +
          "maxLength": 64
81 +
        },
82 +
        "uri": {
83 +
          "type": "string",
84 +
          "format": "at-uri",
85 +
          "maxLength": 2048,
86 +
          "description": "kind が channel のときのチャンネル。"
87 +
        },
88 +
        "kind": {
89 +
          "type": "string",
90 +
          "maxLength": 32,
91 +
          "knownValues": [
92 +
            "list",
93 +
            "global",
94 +
            "custom",
95 +
            "channel",
96 +
            "search"
97 +
          ]
98 +
        },
99 +
        "label": {
100 +
          "type": "string",
101 +
          "maxLength": 64,
102 +
          "description": "表示名のスナップショット。権威は uri / query 側。"
103 +
        },
104 +
        "query": {
105 +
          "type": "string",
106 +
          "maxLength": 128,
107 +
          "description": "kind が search のときの保存クエリ。"
108 +
        },
109 +
        "source": {
110 +
          "type": "string",
111 +
          "maxLength": 32,
112 +
          "description": "kind が list / custom のときの参照先(list=home, custom=affirmation)。将来のユーザー定義フィードは uri で指す。",
113 +
          "knownValues": [
114 +
            "home",
115 +
            "affirmation"
116 +
          ]
117 +
        },
118 +
        "queryKind": {
119 +
          "type": "string",
120 +
          "maxLength": 32,
121 +
          "knownValues": [
122 +
            "keyword",
123 +
            "tag"
124 +
          ]
125 +
        }
126 +
      },
127 +
      "description": "フィードのタブ1枚。必要なフィールドは kind ごとに異なる(list / custom は source、channel は uri、search は query)。"
128 +
    },
45 129
    "readPosition": {
46 130
      "type": "object",
47 131
      "required": [
48 132
        "section",
49 133
        "indexedAt",
50 134
        "uri"
51 135
      ],
52 136
      "properties": {
53 137
        "uri": {
54 138
          "type": "string",
55 139
          "format": "at-uri",
56 140
          "maxLength": 2048
57 141
        },
58 142
        "section": {
59 143
          "type": "string",
60 144
          "maxLength": 32,
61 145
          "knownValues": [
62 146
            "bot",
63 147
            "community",
64 148
            "list",
65 149
            "channels",
66 150
            "news"
67 151
          ]
68 152
        },
69 153
        "indexedAt": {
70 154
          "type": "string",
71 155
          "format": "datetime"
72 156
        }
73 157
      },
74 158
      "description": "「ここまで読んだ」位置。新旧の比較は (indexedAt, uri) の辞書順で行う。"
75 159
    },
76 160
    "customFavorite": {
77 161
      "type": "object",
78 162
      "required": [
79 163
        "kind",
80 164
        "emoji"
81 165
      ],
82 166
      "properties": {
83 167
        "kind": {
84 168
          "type": "string",
85 169
          "const": "custom"
86 170
        },
87 171
        "emoji": {
88 172
          "type": "unknown"
89 173
        }
90 174
      },
91 175
      "description": "Bluemoji のスナップショット。url などは表示のたびに再解決されるので、権威は uri のみ。"
92 176
    },
93 177
    "unicodeFavorite": {
94 178
      "type": "object",
95 179
      "required": [
96 180
        "kind",
97 181
        "emoji"
98 182
      ],
99 183
      "properties": {
100 184
        "kind": {
101 185
          "type": "string",
102 186
          "const": "unicode"
103 187
        },
104 188
        "emoji": {
105 189
          "type": "string",
106 190
          "maxLength": 64
107 191
        }
108 192
      }
109 193
    }
110 194
  },
111 195
  "$type": "com.atproto.lexicon.schema",
112 196
  "lexicon": 1
113 197
}

Compare Other Versions

Lexicon Garden

@