How do I audit my account for suppression signals?
By checking the specific things the released code actually acts on, in order: whether your content trips the spam or safety classifiers, whether your engagement mix leans negative (reports, blocks, mutes count against you), whether you're reaching beyond your followers at all, and whether your reach shift is real or just normal variance. There's no single "am I shadowbanned" flag in the code — suppression is the sum of these signals. A real audit measures each against your own baseline rather than guessing from one quiet post.
This is the practical capstone of the penalties pillar. Instead of asking the unanswerable "am I shadowbanned?", you audit the concrete signals the released code is built around. Each one is documented on its own page; this is the checklist that ties them together.
The audit, in the order the code cares
| check | what to look at | the code behind it |
|---|---|---|
| 1. Content classification | Does your writing trip the spam screen or a safety policy? Promo-heavy, low-follower, or policy-adjacent content is judged by Grok classifiers before ranking. | Spam classifier, PTOS |
| 2. Negative engagement | Are people reporting, blocking, muting, or hitting "not interested" on you? These are negative terms in the scoring sum — they actively subtract. | The formula |
| 3. Out-of-network reach | Are you reaching anyone beyond your followers? If discovery is flat, the issue is the OON climb, not a ban. | OON handicap |
| 4. Real vs. noise | Is the drop sustained against your baseline, or one quiet post? Reach swings post-to-post for ordinary reasons. | Variance |
There is no single suppression flag
It's worth saying plainly: the released code has no account-level "suppressed: true" switch you
could detect. What people call suppression is the aggregate of the signals above — a post
that trips a classifier, or an account accumulating negative engagement, reaches fewer feeds. The
honest audit is additive, not a single lookup.
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.
Negative engagement is the underrated one
Most "why am I suppressed" worry focuses on content, but the scoring formula includes explicit
negative terms — report, block-author, mute-author, and not-interested all subtract from a post's
score. An account whose audience reacts negatively is down-weighted by the math itself, no
shadowban required. This is measurable, and it's often the real story.
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.
Why measure against your own baseline
Every check above is meaningless as an absolute. "500 views" is bad for one account and great for another; a quiet week is noise for one poster and a signal for another. The only valid audit compares you now to you before — which is precisely why a single post can never tell you, and why eyeballing your analytics misleads.
What the code doesn't say
The thresholds. How much negative engagement tips you, how low a classifier score must go, what
counts as "suppressed" — these live in withheld parameters and in systems outside the released
pipeline. The code tells you which signals matter; it doesn't hand you the cutoffs. A
real audit infers them from your own distribution.
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
This is exactly what xDoctor's Checkup is built to do: it ingests your archive, scores each documented signal against your own trailing baseline, and separates "your content is tripping a classifier" from "your audience is reacting negatively" from "this is normal variance." That's the difference between an audit and a guess — and it's the whole reason to measure rather than wonder.