{
"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"
}