{
  "path": "/3mdk2mdisbk2j",
  "site": "at://did:plc:sfmur4r4wzriaupbgmz7sshy/site.standard.publication/3mdc3rswzo22u",
  "tags": [],
  "$type": "site.standard.document",
  "title": "Bidirectional List-Based Labelers, but for Small Communities",
  "content": {
    "$type": "pub.leaflet.content",
    "pages": [
      {
        "id": "019c081a-cff2-7bb6-8ce1-d1485dcbea00",
        "$type": "pub.leaflet.pages.linearDocument",
        "blocks": [
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [
                {
                  "index": {
                    "byteEnd": 51,
                    "byteStart": 28
                  },
                  "features": [
                    {
                      "uri": "https://bsky.app/profile/antiantiai.bsky.social",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                },
                {
                  "index": {
                    "byteEnd": 194,
                    "byteStart": 99
                  },
                  "features": [
                    {
                      "uri": "https://bsky.app/profile/segyges.bsky.social/post/3m6jmtu7g3c2a",
                      "$type": "pub.leaflet.richtext.facet#link"
                    }
                  ]
                }
              ],
              "plaintext": "The Anti \"Anti-AI\" Labeler, @antiantiai.bsky.social, is great for the non-\"Anti-AI\" community, but apparently setting up a labeler that tracks users who subscribe to certain lists is challenging."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "There is probably an easier way to do this, especially if you intend to serve a smaller community."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "Limit the people the labeler needs to work for to those who \"like\" the labeler."
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "For each person, review all people who have interacted with their posts in the time since the last update, and check if they meet the criteria for the labeler."
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "For any person on the list, check if they no longer meet the criteria to be on the list."
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "For labelers that serve < 1–5k users, which should be a pretty maintainable model that can run on a laptop for no additional costs, given Bluesky's current API structure."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Here are some quick calculations without any caching or backup optimizations."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.unorderedList",
              "children": [
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "Assume 5k labeler users that post 10x/day and receive ~3 interactions/post, and assume it takes 1 API call to check the labeler criteria"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "5k API calls to fetch their feeds"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "50k API calls to fetch replies to their posts"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "50k API calls to fetch quotes to their posts"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "<150k API calls to check criteria for all users that turn up for review"
                  },
                  "children": []
                },
                {
                  "$type": "pub.leaflet.blocks.unorderedList#listItem",
                  "content": {
                    "$type": "pub.leaflet.blocks.text",
                    "facets": [],
                    "plaintext": "Total is ~250k API calls per day"
                  },
                  "children": []
                }
              ]
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Is this manageable? I don't actually know because I haven't tried to set it up. I would be curious to hear from people who have operated labelers."
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.horizontalRule"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.text",
              "facets": [],
              "plaintext": "Links to relevant material below:"
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "$type": "pub.leaflet.blocks.bskyPost",
              "postRef": {
                "cid": "bafyreigzn7ak7cqwghoifshltnqqgl7r6w2hilpvgl2x2c7hxbtismx774",
                "uri": "at://did:plc:fpruhuo22xkm5o7ttr2ktxdo/app.bsky.feed.post/3m6jeifg5v22b"
              }
            }
          },
          {
            "$type": "pub.leaflet.pages.linearDocument#block",
            "block": {
              "alt": "Screenshot of Bluesky thread discussing bidirectional blocklists. Users debate the technical feasibility of subscription-based mutual filtering, including challenges with AT Protocol data access methods and rate limiting.",
              "$type": "pub.leaflet.blocks.image",
              "image": {
                "$type": "blob",
                "ref": {
                  "$link": "bafkreih5jpu4umhafml2y6bvbuvmnwnuqwfyd3mqhznamtj4pkfjgujopq"
                },
                "mimeType": "image/png",
                "size": 386885
              },
              "aspectRatio": {
                "width": 1172,
                "height": 1354
              }
            }
          }
        ]
      }
    ]
  },
  "bskyPostRef": {
    "cid": "bafyreih2ywpgrkfnqh4mogz5zpi4xolwtgy2qcsovenqgndxftety5xhr4",
    "uri": "at://did:plc:sfmur4r4wzriaupbgmz7sshy/app.bsky.feed.post/3mdk2mjg2w22j",
    "commit": {
      "cid": "bafyreidvfhsfmo7hwcubdyacgq4pst3rtndc6z26qjae5al6vyzx32tiqm",
      "rev": "3mdk2mjjdto2t"
    },
    "validationStatus": "valid"
  },
  "publishedAt": "2026-01-29T05:29:35.492Z"
}