com.suibari.nagi.putPreferences

suibari.com

Schema Diff

+34 -1

From

CID
bafyreid7xn7cdqj...
Indexed At
2026-08-27 00:10 UTC
View this version

To

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

Compatibility Analysis

Backward Compatible

Backward compatible. 22 non-breaking changes.

Non-Breaking Changes (22)
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#moderationPreferences" }
  • 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:input.moderationPreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferences" }
  • AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt" }
  • 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", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
  • 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:input.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", 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", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
  • 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 }
  • AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
  • AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#moderationPreferences" }
  • 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:input.moderationPreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferences" }
  • AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt" }

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

Compare Other Versions

Lexicon Garden

@