app.atmobb.actor.profile

lexicons.atmobb.app

Schema Diff

+94 -2

From

CID
bafyreieqzibrano...
Indexed At
2026-09-13 23:55 UTC
View this version

To

CID
bafyreibkbgmutkk...
Indexed At
2026-09-14 02:13 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 42 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#forumProfile", src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.fields", kind: "prop", name: Some("fields") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#forumProfile", src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.forum", kind: "prop", name: Some("forum") }
Non-Breaking Changes (42)
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.avatar" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.description" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.displayName" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.fields" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.fields:items" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.forum" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.notifications" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.pronouns" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant0" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant1" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant2" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant3" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.title" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.website" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile:body.forumProfiles" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile:body.forumProfiles:items" }
  • AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile:body.notifications" }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.avatar", kind: "prop", name: Some("avatar") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.description", kind: "prop", name: Some("description") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.displayName", kind: "prop", name: Some("displayName") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.notifications", kind: "prop", name: Some("notifications") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.pronouns", kind: "prop", name: Some("pronouns") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.signature", kind: "prop", name: Some("signature") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.title", kind: "prop", name: Some("title") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.website", kind: "prop", name: Some("website") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.fields", tgt: "app.atmobb.actor.profile#forumProfile.fields:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature", tgt: "app.atmobb.actor.profile#forumProfile.signature:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant0", kind: "variant", name: Some("app.atmobb.richtext.block#text") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant1", kind: "variant", name: Some("app.atmobb.richtext.block#quote") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant2", kind: "variant", name: Some("app.atmobb.richtext.block#code") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant3", kind: "variant", name: Some("app.atmobb.richtext.block#image") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant0", tgt: "app.atmobb.richtext.block#text", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant1", tgt: "app.atmobb.richtext.block#quote", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant2", tgt: "app.atmobb.richtext.block#code", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant3", tgt: "app.atmobb.richtext.block#image", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.forumProfiles", kind: "prop", name: Some("forumProfiles") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.notifications", kind: "prop", name: Some("notifications") }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body.forumProfiles", tgt: "app.atmobb.actor.profile:body.forumProfiles:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body.forumProfiles:items", tgt: "app.atmobb.actor.profile#forumProfile", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.avatar" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.description" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.displayName" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.fields" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.fields:items" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.forum" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.notifications" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.pronouns" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant0" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant1" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant2" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant3" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.title" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.website" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile:body.forumProfiles" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile:body.forumProfiles:items" }
  • AddedVertex { vertex_id: "app.atmobb.actor.profile:body.notifications" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#forumProfile", src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.fields", kind: "prop", name: Some("fields") }
  • Breaking: RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#forumProfile", src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.forum", kind: "prop", name: Some("forum") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.avatar", kind: "prop", name: Some("avatar") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.description", kind: "prop", name: Some("description") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.displayName", kind: "prop", name: Some("displayName") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.notifications", kind: "prop", name: Some("notifications") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.pronouns", kind: "prop", name: Some("pronouns") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.signature", kind: "prop", name: Some("signature") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.title", kind: "prop", name: Some("title") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.website", kind: "prop", name: Some("website") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.fields", tgt: "app.atmobb.actor.profile#forumProfile.fields:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature", tgt: "app.atmobb.actor.profile#forumProfile.signature:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant0", kind: "variant", name: Some("app.atmobb.richtext.block#text") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant1", kind: "variant", name: Some("app.atmobb.richtext.block#quote") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant2", kind: "variant", name: Some("app.atmobb.richtext.block#code") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant3", kind: "variant", name: Some("app.atmobb.richtext.block#image") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant0", tgt: "app.atmobb.richtext.block#text", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant1", tgt: "app.atmobb.richtext.block#quote", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant2", tgt: "app.atmobb.richtext.block#code", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant3", tgt: "app.atmobb.richtext.block#image", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.forumProfiles", kind: "prop", name: Some("forumProfiles") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.notifications", kind: "prop", name: Some("notifications") }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body.forumProfiles", tgt: "app.atmobb.actor.profile:body.forumProfiles:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body.forumProfiles:items", tgt: "app.atmobb.actor.profile#forumProfile", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "avatarBuilder": {
5 5
      "description": "Legacy built avatar as part + colour choices. Kept so existing records stay valid.",
6 6
      "properties": {
7 7
        "accessory": {
8 8
          "ref": "#part",
9 9
          "type": "ref"
10 10
        },
11 11
        "eyebrows": {
12 12
          "ref": "#part",
13 13
          "type": "ref"
14 14
        },
15 15
        "eyes": {
16 16
          "ref": "#part",
17 17
          "type": "ref"
18 18
        },
19 19
        "facialFeature": {
20 20
          "ref": "#part",
21 21
          "type": "ref"
22 22
        },
23 23
        "facialHair": {
24 24
          "ref": "#part",
25 25
          "type": "ref"
26 26
        },
27 27
        "hairBack": {
28 28
          "ref": "#part",
29 29
          "type": "ref"
30 30
        },
31 31
        "hairFront": {
32 32
          "ref": "#part",
33 33
          "type": "ref"
34 34
        },
35 35
        "hat": {
36 36
          "ref": "#part",
37 37
          "type": "ref"
38 38
        },
39 39
        "mouth": {
40 40
          "ref": "#part",
41 41
          "type": "ref"
42 42
        },
43 43
        "neckwear": {
44 44
          "ref": "#garment",
45 45
          "type": "ref"
46 46
        },
47 47
        "nose": {
48 48
          "ref": "#part",
49 49
          "type": "ref"
50 50
        },
51 51
        "skin": {
52 52
          "description": "Skin tone id; drives body, head, nose and facial-feature colouring.",
53 53
          "type": "string"
54 54
        },
55 55
        "top": {
56 56
          "ref": "#garment",
57 57
          "type": "ref"
58 58
        },
59 59
        "v": {
60 60
          "description": "Recipe schema version.",
61 61
          "minimum": 1,
62 62
          "type": "integer"
63 63
        }
64 64
      },
65 65
      "required": [
66 66
        "v",
67 67
        "skin"
68 68
      ],
69 69
      "type": "object"
70 70
    },
71 +
    "forumProfile": {
72 +
      "properties": {
73 +
        "avatar": {
74 +
          "accept": [
75 +
            "image/png",
76 +
            "image/jpeg",
77 +
            "image/webp",
78 +
            "image/gif"
79 +
          ],
80 +
          "maxSize": 1000000,
81 +
          "type": "blob"
82 +
        },
83 +
        "description": {
84 +
          "maxGraphemes": 256,
85 +
          "maxLength": 2560,
86 +
          "type": "string"
87 +
        },
88 +
        "displayName": {
89 +
          "maxGraphemes": 64,
90 +
          "maxLength": 640,
91 +
          "type": "string"
92 +
        },
93 +
        "fields": {
94 +
          "description": "Only listed fields override defaults. A listed field with no value explicitly clears it (avatar falls back to Bluesky); remove it from this list to inherit again.",
95 +
          "items": {
96 +
            "knownValues": [
97 +
              "displayName",
98 +
              "description",
99 +
              "pronouns",
100 +
              "website",
101 +
              "signature",
102 +
              "avatar",
103 +
              "title",
104 +
              "notifications"
105 +
            ],
106 +
            "type": "string"
107 +
          },
108 +
          "type": "array"
109 +
        },
110 +
        "forum": {
111 +
          "format": "did",
112 +
          "type": "string"
113 +
        },
114 +
        "notifications": {
115 +
          "type": "boolean"
116 +
        },
117 +
        "pronouns": {
118 +
          "maxGraphemes": 64,
119 +
          "maxLength": 640,
120 +
          "type": "string"
121 +
        },
122 +
        "signature": {
123 +
          "items": {
124 +
            "refs": [
125 +
              "app.atmobb.richtext.block#text",
126 +
              "app.atmobb.richtext.block#quote",
127 +
              "app.atmobb.richtext.block#code",
128 +
              "app.atmobb.richtext.block#image"
129 +
            ],
130 +
            "type": "union"
131 +
          },
132 +
          "maxLength": 3,
133 +
          "type": "array"
134 +
        },
135 +
        "title": {
136 +
          "maxGraphemes": 64,
137 +
          "maxLength": 640,
138 +
          "type": "string"
139 +
        },
140 +
        "website": {
141 +
          "format": "uri",
142 +
          "type": "string"
143 +
        }
144 +
      },
145 +
      "required": [
146 +
        "forum",
147 +
        "fields"
148 +
      ],
149 +
      "type": "object"
150 +
    },
71 151
    "forumTheme": {
72 152
      "properties": {
73 153
        "forum": {
74 154
          "format": "did",
75 155
          "type": "string"
76 156
        },
77 157
        "theme": {
78 158
          "knownValues": [
79 159
            "",
80 160
            "classic",
81 161
            "sky",
82 162
            "bubblegum",
83 163
            "midnight",
84 164
            "forest"
85 165
          ],
86 166
          "maxLength": 64,
87 167
          "type": "string"
88 168
        }
89 169
      },
90 170
      "required": [
91 171
        "forum",
92 172
        "theme"
93 173
      ],
94 174
      "type": "object"
95 175
    },
96 176
    "garment": {
97 177
      "description": "A garment choice: which type (e.g. jacket, tie) in which colour.",
98 178
      "properties": {
99 179
        "color": {
100 180
          "type": "string"
101 181
        },
102 182
        "type": {
103 183
          "type": "string"
104 184
        }
105 185
      },
106 186
      "required": [
107 187
        "type",
108 188
        "color"
109 189
      ],
110 190
      "type": "object"
111 191
    },
112 192
    "main": {
113 -
      "description": "A user's atmoBB profile, global across all forums. Lives in the user's repo.",
193 +
      "description": "A user's atmoBB account defaults and per-forum overrides. Lives in the user's repo.",
114 194
      "key": "literal:self",
115 195
      "record": {
116 196
        "properties": {
117 197
          "avatar": {
118 198
            "accept": [
119 199
              "image/png",
120 200
              "image/jpeg",
121 201
              "image/webp",
122 202
              "image/gif"
123 203
            ],
124 204
            "maxSize": 1000000,
125 205
            "type": "blob"
126 206
          },
127 207
          "avatarBuilder": {
128 208
            "description": "Legacy layered-avatar recipe from an earlier builder. atmobb ignores it; clients should read the `avatar` blob.",
129 209
            "ref": "#avatarBuilder",
130 210
            "type": "ref"
131 211
          },
132 212
          "createdAt": {
133 213
            "format": "datetime",
134 214
            "type": "string"
135 215
          },
136 216
          "description": {
137 -
            "description": "Free-text bio, shown on the profile's About panel. Global across forums.",
217 +
            "description": "Default free-text bio, shown on the profile's About panel unless overridden for a forum.",
138 218
            "maxGraphemes": 256,
139 219
            "maxLength": 2560,
140 220
            "type": "string"
141 221
          },
142 222
          "displayName": {
143 223
            "maxGraphemes": 64,
144 224
            "maxLength": 640,
145 225
            "type": "string"
146 226
          },
227 +
          "forumProfiles": {
228 +
            "description": "Per-forum overrides for profile fields and notification preferences. Other fields inherit account defaults.",
229 +
            "items": {
230 +
              "ref": "#forumProfile",
231 +
              "type": "ref"
232 +
            },
233 +
            "type": "array"
234 +
          },
147 235
          "forumThemes": {
148 236
            "description": "Per-forum personal theme overrides. Omit a forum to use the global theme; an empty theme preserves that forum's own styling.",
149 237
            "items": {
150 238
              "ref": "#forumTheme",
151 239
              "type": "ref"
152 240
            },
153 241
            "type": "array"
154 242
          },
243 +
          "notifications": {
244 +
            "description": "Whether connected forums may notify this account. Defaults to true; never grants relay permission.",
245 +
            "type": "boolean"
246 +
          },
155 247
          "pronouns": {
156 248
            "maxGraphemes": 64,
157 249
            "maxLength": 640,
158 250
            "type": "string"
159 251
          },
160 252
          "signature": {
161 253
            "description": "Rendered under every post, phpBB style. Keep it short; clients may truncate.",
162 254
            "items": {
163 255
              "refs": [
164 256
                "app.atmobb.richtext.block#text",
165 257
                "app.atmobb.richtext.block#quote",
166 258
                "app.atmobb.richtext.block#code",
167 259
                "app.atmobb.richtext.block#image"
168 260
              ],
169 261
              "type": "union"
170 262
            },
171 263
            "maxLength": 3,
172 264
            "type": "array"
173 265
          },
174 266
          "theme": {
175 267
            "description": "Personal color theme across forums. Omit to follow each forum's default styling.",
176 268
            "knownValues": [
177 269
              "classic",
178 270
              "sky",
179 271
              "bubblegum",
180 272
              "midnight",
181 273
              "forest"
182 274
            ],
183 275
            "maxLength": 64,
184 276
            "type": "string"
185 277
          },
186 278
          "title": {
187 279
            "description": "Self-chosen user title, shown under the username where the forum allows it.",
188 280
            "maxGraphemes": 64,
189 281
            "maxLength": 640,
190 282
            "type": "string"
191 283
          },
192 284
          "website": {
193 285
            "format": "uri",
194 286
            "type": "string"
195 287
          }
196 288
        },
197 289
        "type": "object"
198 290
      },
199 291
      "type": "record"
200 292
    },
201 293
    "part": {
202 294
      "description": "A part choice: a shape id and, where the part is colourable, a palette colour id.",
203 295
      "properties": {
204 296
        "color": {
205 297
          "type": "string"
206 298
        },
207 299
        "shape": {
208 300
          "type": "string"
209 301
        }
210 302
      },
211 303
      "required": [
212 304
        "shape"
213 305
      ],
214 306
      "type": "object"
215 307
    }
216 308
  },
217 309
  "id": "app.atmobb.actor.profile",
218 310
  "lexicon": 1
219 311
}

Compare Other Versions

Lexicon Garden

@