Generated by labelwatch
Question this answers: Treating each labeler like a service, would a Bluesky user — or a client developer deciding what to expose — trust this thing enough to subscribe to it?
Headline: 150 observed labelers (in last 30d activity or ever- ingested service record). 65 are abandoned (43%). 14 high-volume emitters publish zero declared scope — labels firing at up to 908k events/30d with no service record at all, meaning no Bluesky client can actually subscribe to them via the protocol's standard
labelersPrefmechanism. They're shouting into a hallway with no doors. F-006 is not an isolated curiosity; it is a population-scale shape.
Scan labelwatch.db.labelers + discovery_events for any labeler
with EITHER recent events (events_30d > 0) OR an ever-ingested
service record. For each, derive heuristic flags + a maturity_class
per the schema in labelwatch-next-questions.md § A1.
Scanner: docs/analysis/tools/operator_maturity_scan.py
Output: docs/analysis/data/operator_maturity_001.json (150 rows)
Run: 2026-06-08; scanned via sudo -u labelwatch python3 on prod.
Per-row columns:
labeler_did | handle | display_name | labeler_class | is_reference
| active_recently | declares_scope | explains_labels
| has_contact_or_appeal_path ← UNKNOWN in v1 (requires appview
profile fetch + manual classification)
| has_stable_service_record ← 1 ≤ revisions ≤ 5
| label_count_30d | distinct_targets_30d | latest_label_def_count
| user_visible_consequence_known ← declares with hide/warn/ignore
| service_record_revisions | first_record_at | last_record_at
| last_seen | regime_state | endpoint_status | visibility_class
| auditability | likely_test_dev | maturity_class
Heuristic maturity classes — NOT measurement:
| class | criteria |
|---|---|
platform-root |
did:plc:ar7c4by46qjdydhdevvrndac (mod.bsky) |
abandoned |
had service record, events_30d = 0 |
experimental |
sparse activity (events_30d ∈ [1, 10)) OR likely_test_dev=1 |
personal/reputational |
events_30d ∈ [10, 100); declares some scope |
community-service |
events_30d ∈ [100, 10000); declares scope AND explains labels |
moderation-infrastructure |
events_30d ≥ 10000; declared scope |
unknown |
insufficient signal (no record, no events, or contradictory) |
abandoned 65 (43%)
unknown 26 (17%)
experimental 24 (16%)
community-service 13 (9%)
personal/reputational 11 (7%)
moderation-infrastructure 10 (7%)
platform-root 1 (<1%)
─────────────────────────────────
total 150
label_count_30d (boring-table headline)| # | maturity_class | handle | 30d | defs | expl | stable | vis | rev |
|---|---|---|---|---|---|---|---|---|
| 1 | platform-root |
moderation.bsky.app | 908000 | 18 | ✓ | ✓ | ✓ | 1 |
| 2 | unknown |
antiantiai.bsky.social | 908000 | 0 | – | – | – | 0 |
| 3 | experimental |
xblock.aendra.dev | 908000 | 13 | ✓ | ✓ | ✓ | 2 |
| 4 | unknown |
labeler.plural.host | 906500 | 0 | – | – | – | 0 |
| 5 | moderation-infrastructure |
label.haus | 708300 | 2 | ✓ | ✓ | ✓ | 1 |
| 6 | unknown |
oracle.posters.rip | 698575 | 0 | – | – | – | 0 |
| 7 | moderation-infrastructure |
snubstack.boo | 650332 | 3 | ✓ | ✓ | – | 1 |
| 8 | moderation-infrastructure |
labeler.antisubstack.fyi | 493800 | 1 | ✓ | – | ✓ | 6 |
| 9 | unknown |
uspol-labeler.bsky.social | 446585 | 0 | – | – | – | 0 |
| 10 | moderation-infrastructure |
fucks.supply | 416885 | 1 | ✓ | ✓ | ✓ | 4 |
| 11 | moderation-infrastructure |
pds.labeler.tny.im | 357956 | 102 | ✓ | – | ✓ | 112 |
| 12 | moderation-infrastructure |
skywatch.blue | 262475 | 35 | ✓ | ✓ | ✓ | 4 |
| 13 | unknown |
bottags.bsky.social | 121267 | 0 | – | – | – | 0 |
| 14 | moderation-infrastructure |
kys.makersfield.co | 101450 | 1 | ✓ | ✓ | ✓ | 1 |
| 15 | unknown |
mediardaire.bsky.social | 73403 | 0 | – | – | – | 0 |
| 16 | unknown |
facelabels.bsky.social | 58779 | 0 | – | – | – | 0 |
| 17 | moderation-infrastructure |
stechlab-labels.bsky.social | 57785 | 26 | ✓ | – | ✓ | 33 |
| 18 | moderation-infrastructure |
atls.city | 56796 | 5 | ✓ | ✓ | ✓ | 5 |
| 19 | unknown |
labeler.nunnybabbit.com | 54410 | 0 | – | – | – | 0 |
| 20 | experimental |
recordcollector.edavis.dev | 50727 | 67 | ✓ | ✓ | ✓ | 5 |
| 21 | unknown |
mod.shawn.party | 49224 | 0 | – | – | – | 0 |
| 22 | unknown |
moderation.plyr.fm | 29008 | 0 | – | – | – | 0 |
| 23 | unknown |
iraqwarmongers.com | 28928 | 0 | – | – | – | 0 |
| 24 | moderation-infrastructure |
alt-text-labeler.bsky.social | 13000 | 2 | ✓ | – | ✓ | 17911 |
| 25 | unknown |
activitylabeler.certified.one | 12663 | 0 | – | – | – | 0 |
30d = events in last 30 days. defs = labelValueDefinitions in latest
service record. expl = at least one definition has locale text.
stable = 1 ≤ revisions ≤ 5. vis = user_visible_consequence_known.
rev = service-record revisions ever observed.
Bold handles in the table are high-volume emitters with zero declared scope — the F-006 pattern at scale.
Labelers emitting >1k events/30d with latest_label_def_count = 0:
| handle | 30d events |
|---|---|
| antiantiai.bsky.social | 908000 |
| labeler.plural.host | 906500 |
| oracle.posters.rip | 698575 |
| uspol-labeler.bsky.social | 446585 |
| bottags.bsky.social | 121267 |
| mediardaire.bsky.social | 73403 |
| facelabels.bsky.social | 58779 |
| labeler.nunnybabbit.com | 54410 |
| mod.shawn.party | 49224 |
| moderation.plyr.fm | 29008 |
| iraqwarmongers.com | 28928 |
| activitylabeler.certified.one | 12663 |
| (… 2 more under 12k) |
What this means. ATProto's stackable-moderation framework requires
a labeler to publish an app.bsky.labeler.service record with
labelValueDefinitions for a Bluesky client to honor its labels via
labelersPref. These 14 labelers cannot be subscribed to via the
standard protocol mechanism — they have nothing to subscribe TO.
Their testimony is published into the protocol but the consumer-side
door is locked.
Two of them (antiantiai, labeler.plural.host) emit at
moderation.bsky.app's same volume (~908k events/30d each). The
ecosystem has high-volume labelers whose testimony enters the
firehose with no consumer-facing semantics whatsoever.
F-006 was one case (needs-review from mod.bsky). At population
scale, the same shape applies to 14+ labelers and accounts for
substantial event volume.
Labelers with > 10 service-record revisions:
| handle | revisions | defs | events_30d | maturity_class |
|---|---|---|---|---|
| vocalabeller.kanshen.click | 106,000 | 1 | 0 | abandoned |
| alt-text-labeler.bsky.social | 17,911 | 2 | 13,000 | moderation-infrastructure |
| cons.fyi | 1,034 | 108 | 0 | abandoned |
| labeler-bot-tan.suibari.com | 866 | 18 | 0 | abandoned |
| pds.labeler.tny.im | 112 | 102 | 357,956 | moderation-infrastructure |
| moderation.blueat.net | 99 | 20 | 0 | abandoned |
| mushroom-labeler.bsky.social | 85 | 1 | 0 | abandoned |
| art.tartgames.com | 34 | 7 | 0 | abandoned |
| stechlab-labels.bsky.social | 33 | 26 | 57,785 | moderation-infrastructure |
| awacs.prtgn.org | 19 | 7 | 0 | abandoned |
vocalabeller.kanshen.click published 106,000 revisions of its
service record with one labelValueDefinition and zero events in the
last 30 days. That's not a normal failure mode — it's something
operationally pathological (likely a stuck redeploy loop). The
labeler is currently inert but its discovery footprint dominates.
alt-text-labeler.bsky.social (17,911 revisions, 2 defs, active)
likely has similar update churn but currently produces labels.
| handle | defs | last_seen |
|---|---|---|
| sonasky.app | 684 | 2026-06-08 |
| stemlabels.xyz | 461 | 2026-06-08 |
| pokemon.sonasky.app | 161 | 2026-06-08 |
| label.wol.blue | 119 | 2026-06-08 |
| cons.fyi | 108 | 2026-06-08 |
| hsd.lilacparty.us | 75 | 2026-06-08 |
| pronounsinb.io | 68 | 2026-06-08 |
| demonslayerfeeds.bsky.social | 46 | 2026-06-08 |
| 283labeler.mp0.jp | 44 | 2026-06-08 |
| (… 19 more 6–44 defs) |
Significant labeler operator effort went into publishing rich service records — some with hundreds of definitions — and then no labels emitted in the last 30 days. Subscribing to any of these would currently be a no-op. This is the "stale service" failure mode the maturity column is built to surface.
last_seen is the labeler-record-last-seen timestamp, not last-
emission — most show 2026-06-08 because the discovery sweep updated
their record-last-seen recently. None has emitted labels recently.
likely_test_dev heuristic flags real labelersThe pre-existing likely_test_dev column flagged 2 high-volume
labelers as test/dev:
xblock.aendra.dev — 908k events/30d, 13 declared defs, the very
labeler Bundle G's specimen-003 cites as a real third-party
consumer-adoption caserecordcollector.edavis.dev — 50k events/30d, 67 declared defsNeither looks experimental in behavior. The pre-existing
likely_test_dev heuristic is probably matching on handle/domain
patterns (*.bsky.social not preferred? *.dev flagged?) but
treating these as experimental for maturity classification loses
signal. This is itself a candidate finding for the existing
labelers-table's classification logic: the test_dev signal
overrides every other dimension in our maturity classifier and
silently downgrades two real labelers. Worth a review pass.
This is product/research/SRE-style profiling. It IS useful for:
It does NOT:
has_contact_or_appeal_path (the column exists but is
uniformly unknown_v1 because populating it needs appview
profile fetches + a manual classification pass).likely_test_dev heuristic warrants review.
It's overriding correct classification for xblock and
recordcollector.has_contact_or_appeal_path is uniformly unknown_v1./var/lib/labelwatch/labelwatch.db on prod
(192.46.223.21)docs/analysis/tools/operator_maturity_scan.py
v1docs/analysis/data/operator_maturity_001.json
(150 rows, full data)