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

checkwhat to look atthe code behind it
1. Content classificationDoes 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 engagementAre 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 reachAre you reaching anyone beyond your followers? If discovery is flat, the issue is the OON climb, not a ban.OON handicap
4. Real vs. noiseIs 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.

CODE-CURRENT0bfc279verified 2026-06-12
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.
xai-org/x-algorithm — README.md (Scoring and Ranking) + home-mixer/scorers/weighted_scorer.rs lines 64–67as of the May 15, 2026 release

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.

CODE-CURRENT0bfc279verified 2026-06-12
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.
xai-org/x-algorithm — home-mixer/scorers/weighted_scorer.rs, lines 44–68 (compute_weighted_score)as of the May 15, 2026 release

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

▲ 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.

UNKNOWN0bfc279verified 2026-06-12
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.
xai-org/x-algorithm (verified by direct inspection of the full repository tree at the pinned SHA) — home-mixer/scorers/weighted_scorer.rs references crate::params; no params definitions with weight values exist in the releaseabsence verified at the pinned SHA; values may be published in a future release

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.

← Penalties, safety screens & "shadowbans"