full diff

town.laugh.user.list

laugh.town +59 −0
From
bafyreifludmqq4f5uuww7lnm3y5nftm2zfbslty7sqq4djffw4oolv3uuu indexed 2026-09-23 01:16 UTC View this version
To
bafyreido5l2ish6z4orln6yqcgavk2rzy2gxqmkphscc2tublutlu4zwpi indexed 2026-09-23 20:50 UTC View this version

Compatibility

breaking 2 breaking changes, 20 non-breaking changes.

Breaking changes (2)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "town.laugh.user.list:body.itemOrder:items", src: "town.laugh.user.list:body.itemOrder:items", tgt: "town.laugh.user.list:body.itemOrder:items.item", kind: "prop", name: Some("item") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "town.laugh.user.list:body.itemOrder:items", src: "town.laugh.user.list:body.itemOrder:items", tgt: "town.laugh.user.list:body.itemOrder:items.order", kind: "prop", name: Some("order") }
Non-breaking changes (20)
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.blockedContributors" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.blockedContributors:items" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.collab" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.contributors" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.contributors:items" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.itemOrder" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.itemOrder:items" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.itemOrder:items.item" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.itemOrder:items.order" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.removedItems" }
  • AddedVertex AddedVertex { vertex_id: "town.laugh.user.list:body.removedItems:items" }
  • AddedEdge AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.blockedContributors", kind: "prop", name: Some("blockedContributors") }
  • AddedEdge AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.collab", kind: "prop", name: Some("collab") }
  • AddedEdge AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.contributors", kind: "prop", name: Some("contributors") }
  • AddedEdge AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.itemOrder", kind: "prop", name: Some("itemOrder") }
  • AddedEdge AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.removedItems", kind: "prop", name: Some("removedItems") }
  • AddedEdge AddedEdge { src: "town.laugh.user.list:body.blockedContributors", tgt: "town.laugh.user.list:body.blockedContributors:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "town.laugh.user.list:body.contributors", tgt: "town.laugh.user.list:body.contributors:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "town.laugh.user.list:body.itemOrder", tgt: "town.laugh.user.list:body.itemOrder:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "town.laugh.user.list:body.removedItems", tgt: "town.laugh.user.list:body.removedItems:items", kind: "items", name: None }

Migration guidance

Added

  • AddedVertex { vertex_id: "town.laugh.user.list:body.blockedContributors" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.blockedContributors:items" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.collab" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.contributors" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.contributors:items" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.itemOrder" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.itemOrder:items" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.itemOrder:items.item" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.itemOrder:items.order" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.removedItems" }
  • AddedVertex { vertex_id: "town.laugh.user.list:body.removedItems:items" }

Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "town.laugh.user.list:body.itemOrder:items", src: "town.laugh.user.list:body.itemOrder:items", tgt: "town.laugh.user.list:body.itemOrder:items.item", kind: "prop", name: Some("item") }
  • Breaking: RequiredEdgeAdded { vertex_id: "town.laugh.user.list:body.itemOrder:items", src: "town.laugh.user.list:body.itemOrder:items", tgt: "town.laugh.user.list:body.itemOrder:items.order", kind: "prop", name: Some("order") }
  • Non-breaking: AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.blockedContributors", kind: "prop", name: Some("blockedContributors") }
  • Non-breaking: AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.collab", kind: "prop", name: Some("collab") }
  • Non-breaking: AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.contributors", kind: "prop", name: Some("contributors") }
  • Non-breaking: AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.itemOrder", kind: "prop", name: Some("itemOrder") }
  • Non-breaking: AddedEdge { src: "town.laugh.user.list:body", tgt: "town.laugh.user.list:body.removedItems", kind: "prop", name: Some("removedItems") }
  • Non-breaking: AddedEdge { src: "town.laugh.user.list:body.blockedContributors", tgt: "town.laugh.user.list:body.blockedContributors:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "town.laugh.user.list:body.contributors", tgt: "town.laugh.user.list:body.contributors:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "town.laugh.user.list:body.itemOrder", tgt: "town.laugh.user.list:body.itemOrder:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "town.laugh.user.list:body.removedItems", tgt: "town.laugh.user.list:body.removedItems:items", kind: "items", name: None }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
44 "main": {
55 "description": "A user-curated list of events, venues, and/or comedians. The favorites list is the one with purpose \"favorites\".",
66 "key": "tid",
77 "record": {
88 "properties": {
9 "blockedContributors": {
10 "description": "DIDs the owner has blocked from contributing; applies in \"open\" mode (and harmlessly in \"invite\" mode too)",
11 "items": {
12 "format": "did",
13 "type": "string"
14 },
15 "maxLength": 200,
16 "type": "array"
17 },
918 "calendar": {
1019 "description": "Show a derived calendar of upcoming shows for the list's items. Off by default.",
1120 "type": "boolean"
1221 },
22 "collab": {
23 "description": "Who can add items to this list: \"owner\" (only the list owner, the default when absent), \"invite\" (DIDs on `contributors`), or \"open\" (anyone signed in)",
24 "knownValues": [
25 "owner",
26 "invite",
27 "open"
28 ],
29 "type": "string"
30 },
31 "contributors": {
32 "description": "DID allowlist for collab \"invite\". Kept (but ignored) when collab is \"open\"/\"owner\", so toggling modes doesn't lose the list",
33 "items": {
34 "format": "did",
35 "type": "string"
36 },
37 "maxLength": 50,
38 "type": "array"
39 },
1340 "createdAt": {
1441 "description": "Timestamp of when the list was created",
1542 "format": "datetime",
1643 "type": "string"
1744 },
1845 "description": {
1946 "description": "Optional list description",
2047 "maxLength": 2048,
2148 "type": "string"
2249 },
2350 "forkedFrom": {
2451 "description": "AT-URI of the town.laugh.user.list record this list was duplicated from",
2552 "format": "at-uri",
2653 "type": "string"
2754 },
55 "itemOrder": {
56 "description": "Owner-set positions for contributed items only (a contributor's own listitem `order` field is ignored)",
57 "items": {
58 "properties": {
59 "item": {
60 "description": "AT-URI of the contributed town.laugh.user.listitem record",
61 "format": "at-uri",
62 "type": "string"
63 },
64 "order": {
65 "description": "Fractional-index position key",
66 "type": "string"
67 }
68 },
69 "required": [
70 "item",
71 "order"
72 ],
73 "type": "object"
74 },
75 "maxLength": 500,
76 "type": "array"
77 },
2878 "name": {
2979 "description": "Display name",
3080 "maxLength": 256,
3181 "type": "string"
3282 },
3383 "numbered": {
3484 "description": "Show items as a ranked, numbered list",
3585 "type": "boolean"
3686 },
3787 "place": {
3888 "description": "laugh.town place slug (e.g. \"los-angeles\") the list is about. When set, the derived calendar is fixed to this place and its descendants; when absent, viewers pick the place themselves.",
3989 "maxLength": 64,
4090 "type": "string"
4191 },
4292 "purpose": {
4393 "description": "Advisory list purpose; \"favorites\" marks the singular favorites list",
4494 "knownValues": [
4595 "curated",
4696 "favorites"
4797 ],
4898 "type": "string"
4999 },
100 "removedItems": {
101 "description": "AT-URIs of town.laugh.user.listitem records the owner suppressed from a contributor's contribution",
102 "items": {
103 "format": "at-uri",
104 "type": "string"
105 },
106 "maxLength": 500,
107 "type": "array"
108 },
50109 "slug": {
51110 "description": "URL slug, lowercase alphanumeric with single-hyphen separators (e.g. \"best-of-2026\"). Derived from the name at creation and frozen thereafter; unique per did.",
52111 "maxLength": 64,
53112 "type": "string"
54113 },
55114 "sort": {
56115 "description": "Default item ordering for viewers; \"manual\" (the default when absent) uses each listitem's fractional order",
57116 "knownValues": [
58117 "manual",
59118 "alpha",
60119 "added",
61120 "date"
62121 ],
63122 "type": "string"
64123 }
65124 },
66125 "required": [
67126 "name",
68127 "createdAt"
69128 ],
70129 "type": "object"
71130 },
72131 "type": "record"
73132 }
74133 },
75134 "id": "town.laugh.user.list",
76135 "lexicon": 1
77136}

Compare other versions