com.suibari.nagi.putPreferences

suibari.com

Schema Diff

+17 -0

From

CID
bafyreiagwz4w6qo...
Indexed At
2026-09-02 11:47 UTC
View this version

To

CID
bafyreihovx253b6...
Indexed At
2026-09-25 02:44 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 11 non-breaking changes.

Non-Breaking Changes (11)
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items" }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items" }

Additional Notes

  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 5
      "description": "同期対象の本人設定を書き込む。既読位置は単調マージ、配列・言語・コンテンツ表示設定・最後のブックマークフォルダは updatedAt による後勝ち。各項目は省略でき、送った分だけを更新する。",
6 6
      "errors": [
7 7
        {
8 8
          "name": "AuthRequired"
9 9
        },
10 10
        {
11 11
          "name": "InvalidRequest"
12 12
        }
13 13
      ],
14 14
      "input": {
15 15
        "encoding": "application/json",
16 16
        "schema": {
17 17
          "properties": {
18 +
            "chronicleReadYears": {
19 +
              "description": "年ごとの既読ハッシュ。過去の版は蓄積せず、現在の年表内容と一致する版だけを保存する。",
20 +
              "items": {
21 +
                "ref": "com.suibari.nagi.getChronicle#readYear",
22 +
                "type": "ref"
23 +
              },
24 +
              "maxLength": 100,
25 +
              "type": "array"
26 +
            },
18 27
            "emojiFavorites": {
19 28
              "items": {
20 29
                "type": "unknown"
21 30
              },
22 31
              "maxLength": 32,
23 32
              "type": "array"
24 33
            },
25 34
            "emojiFavoritesUpdatedAt": {
26 35
              "description": "emojiFavorites を送るときは必須。保存済みより古ければ書き込まない。",
27 36
              "format": "datetime",
28 37
              "type": "string"
29 38
            },
30 39
            "feedTabs": {
31 40
              "items": {
32 41
                "ref": "com.suibari.nagi.getPreferences#feedTab",
33 42
                "type": "ref"
34 43
              },
35 44
              "maxLength": 16,
36 45
              "type": "array"
37 46
            },
38 47
            "feedTabsUpdatedAt": {
39 48
              "description": "feedTabs を送るときは必須。保存済みより古ければ書き込まない。",
40 49
              "format": "datetime",
41 50
              "type": "string"
42 51
            },
43 52
            "languagePreferences": {
44 53
              "ref": "com.suibari.nagi.getPreferences#languagePreferences",
45 54
              "type": "ref"
46 55
            },
47 56
            "languagePreferencesUpdatedAt": {
48 57
              "format": "datetime",
49 58
              "type": "string"
50 59
            },
51 60
            "lastBookmarkFolderId": {
52 61
              "maxLength": 64,
53 62
              "nullable": true,
54 63
              "type": "string"
55 64
            },
56 65
            "lastBookmarkFolderUpdatedAt": {
57 66
              "format": "datetime",
58 67
              "type": "string"
59 68
            },
60 69
            "moderationPreferences": {
61 70
              "ref": "com.suibari.nagi.getPreferences#moderationPreferences",
62 71
              "type": "ref"
63 72
            },
64 73
            "moderationPreferencesUpdatedAt": {
65 74
              "format": "datetime",
66 75
              "type": "string"
67 76
            },
68 77
            "preferredName": {
69 78
              "description": "botたんに呼んでほしい名前。空文字を送ると登録を解除し、表示名に戻す。送らなければ変更しない。",
70 79
              "maxGraphemes": 40,
71 80
              "maxLength": 120,
72 81
              "type": "string"
73 82
            },
74 83
            "readPositions": {
75 84
              "items": {
76 85
                "ref": "com.suibari.nagi.getPreferences#readPosition",
77 86
                "type": "ref"
78 87
              },
79 88
              "maxLength": 16,
80 89
              "type": "array"
81 90
            },
82 91
            "replyFreq": {
83 92
              "description": "botたんからの返信確率(0〜100%)。送らなければ変更しない。",
84 93
              "maximum": 100,
85 94
              "minimum": 0,
86 95
              "type": "integer"
87 96
            }
88 97
          },
89 98
          "type": "object"
90 99
        }
91 100
      },
92 101
      "output": {
93 102
        "encoding": "application/json",
94 103
        "schema": {
95 104
          "properties": {
105 +
            "chronicleReadYears": {
106 +
              "description": "年ごとの既読ハッシュ。過去の版は蓄積せず、現在の年表内容と一致する版だけを保存する。",
107 +
              "items": {
108 +
                "ref": "com.suibari.nagi.getChronicle#readYear",
109 +
                "type": "ref"
110 +
              },
111 +
              "type": "array"
112 +
            },
96 113
            "emojiFavorites": {
97 114
              "items": {
98 115
                "type": "unknown"
99 116
              },
100 117
              "maxLength": 32,
101 118
              "type": "array"
102 119
            },
103 120
            "emojiFavoritesUpdatedAt": {
104 121
              "format": "datetime",
105 122
              "type": "string"
106 123
            },
107 124
            "feedTabs": {
108 125
              "items": {
109 126
                "ref": "com.suibari.nagi.getPreferences#feedTab",
110 127
                "type": "ref"
111 128
              },
112 129
              "maxLength": 16,
113 130
              "type": "array"
114 131
            },
115 132
            "feedTabsUpdatedAt": {
116 133
              "format": "datetime",
117 134
              "type": "string"
118 135
            },
119 136
            "languagePreferences": {
120 137
              "ref": "com.suibari.nagi.getPreferences#languagePreferences",
121 138
              "type": "ref"
122 139
            },
123 140
            "languagePreferencesUpdatedAt": {
124 141
              "format": "datetime",
125 142
              "type": "string"
126 143
            },
127 144
            "lastBookmarkFolderId": {
128 145
              "maxLength": 64,
129 146
              "type": "string"
130 147
            },
131 148
            "lastBookmarkFolderUpdatedAt": {
132 149
              "format": "datetime",
133 150
              "type": "string"
134 151
            },
135 152
            "moderationPreferences": {
136 153
              "ref": "com.suibari.nagi.getPreferences#moderationPreferences",
137 154
              "type": "ref"
138 155
            },
139 156
            "moderationPreferencesUpdatedAt": {
140 157
              "format": "datetime",
141 158
              "type": "string"
142 159
            },
143 160
            "preferredName": {
144 161
              "description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",
145 162
              "maxGraphemes": 40,
146 163
              "maxLength": 120,
147 164
              "type": "string"
148 165
            },
149 166
            "readPositions": {
150 167
              "description": "マージ後の確定値。送った位置が負けた場合は保存済みの方が返る。",
151 168
              "items": {
152 169
                "ref": "com.suibari.nagi.getPreferences#readPosition",
153 170
                "type": "ref"
154 171
              },
155 172
              "type": "array"
156 173
            },
157 174
            "replyFreq": {
158 175
              "description": "botたんからの返信確率(0〜100%)。",
159 176
              "maximum": 100,
160 177
              "minimum": 0,
161 178
              "type": "integer"
162 179
            }
163 180
          },
164 181
          "required": [
165 182
            "readPositions",
166 183
            "emojiFavorites"
167 184
          ],
168 185
          "type": "object"
169 186
        }
170 187
      },
171 188
      "type": "procedure"
172 189
    }
173 190
  },
174 191
  "id": "com.suibari.nagi.putPreferences",
175 192
  "lexicon": 1
176 193
}

Compare Other Versions

Lexicon Garden

@