My reach suddenly dropped — what do I check first?
Check in this order, because the code makes some causes far more likely than the dramatic ones. First: is it actually a drop, or normal post-to-post variance against your baseline? Second: did your recent content change — new topic, more links, something tripping the spam or safety classifier? Third: did negative engagement tick up (reports, blocks, mutes subtract directly)? Fourth: is your out-of-network reach the part that fell, which is the volatile channel? "Shadowban" is the last thing to suspect, not the first — there's no such flag in the code, and the ordinary causes explain almost every real drop.
A sudden reach drop feels like a ban. It almost never is. The released code points to a short list of ordinary causes, and checking them in likelihood order will explain the overwhelming majority of real drops faster than speculating about suppression.
The checklist, in order of likelihood
| # | check | why it's high on the list |
|---|---|---|
| 1 | Is it real, or variance? | Reach swings post-to-post for ordinary reasons. One or two quiet posts is noise. Check the trend against your baseline first. |
| 2 | Did your content change? | A new topic, format, or something that reads as promotional can shift how the spam or safety classifiers judge you. |
| 3 | Did negative engagement rise? | Reports, blocks, mutes, "not interested" are negative scoring terms — a controversial post can pull down your numbers directly. |
| 4 | Which channel fell? | If out-of-network reach dropped, that's the volatile discovery channel — far more likely than a penalty. |
| 5 | Only then: classifier/penalty | A real content-policy trip is possible but rare, and it's downstream of checks 2–3, not a mysterious switch. |
The model explicitly predicts negative actions — not interested, block author, mute author, report — and these carry negative weights in the final score, pushing down content a user would likely dislike.
Why "shadowban" is last, not first
There's no account-level suppression flag in the released code — what people call shadowbanning is
the aggregate of the signals above. Jumping
straight to "I'm banned" skips the four causes that actually explain most drops, and it's unfalsifiable
in a way the real checks aren't. Suspect the ordinary before the dramatic.
The current WeightedScorer combines predicted probabilities for: favorite, reply, retweet, photo expand, click, profile click, video quality view, share, share via DM, share via copied link, dwell, quote, quoted click, continuous dwell time, follow author, not interested, block author, mute author, and report.
The one structural nuance: new accounts
If you're a very new account, the code does treat you differently — there's a new-user history
threshold in both retrieval and ranking that gates on how much interaction history you have. That's
cold-start, not a penalty, and it resolves as you build history. It's the one case where "low reach"
has a structural, non-content cause.
Phoenix applies a new-user history threshold in both retrieval and ranking: when the configured threshold is positive, the system checks the length of the user's interaction sequence (action_count) and handles low-history (new) users via a separate path. This is cold-start handling, not a penalty, and resolves as a user accrues history.
What the code doesn't say
Which cause is yours. The checklist is the right order in general; pinning your specific
drop requires measuring your own engagement and reach against your own history. The code names the
causes; only your data identifies the culprit.
The numeric values of the current weights are not included in the open-source release: weighted_scorer.rs references a params module (e.g. p::FAVORITE_WEIGHT, p::REPLY_WEIGHT) whose values are not present anywhere in the published repository.
What to do with this
Work the checklist against real numbers instead of guessing. This is the core of what xDoctor's Checkup does — it scores your recent posts against your baseline, flags negative-engagement shifts and classifier risk, and separates a real drop from variance — turning "am I shadowbanned?" into an answerable, ordered diagnosis.