X Algorithm — Pre-Scoring Filters
10 boolean filters applied after candidate hydration, before any ML inference. Cheap to run; protect the expensive transformer from wasted compute.
Why filter before scoring?
The Phoenix transformer requires a full Grok forward pass per candidate — significant compute. Boolean filters are microsecond-level lookups against preloaded data (block lists, mute lists, seen history). Running them first means the transformer only processes genuinely eligible candidates.
Filter stack
Group 1 — Content & recency
| Filter | Removes |
|---|---|
| Age filter | Posts older than the retention window |
| Drop duplicates | Duplicate post IDs |
| Repost deduplication | Multiple reposts of the same underlying post |
| Self-post filter | The requesting user's own posts |
| Core data hydration filter | Posts that failed to fetch metadata during hydration |
Group 2 — Social graph & user state
| Filter | Removes |
|---|---|
| Author social graph filter | Posts from blocked or muted authors |
| Muted keyword filter | Posts containing words in the user's muted list |
| Previously seen posts filter | Posts the user has historically engaged with |
| Previously served posts filter | Posts already shown in the current session |
| Ineligible subscription filter | Paywalled content the user lacks access to |
Post-selection filters
Two additional filters run after scoring and selection:
| Filter | Removes |
|---|---|
| VF filter | Deleted, spam, violence, gore content |
| Dedup conversation filter | Multiple branches of the same conversation thread |
Execution model
Filters are implemented as Filter traits in the candidate-pipeline crate. They:
- - Run as part of the Home Mixer pipeline
- - Have access to user context from query hydration
- - Can fail gracefully with configurable error handling
- - X Algorithm — For You Feed — where filters sit in the pipeline
- - Phoenix — the ML inference stage that follows filtering
- - X Algorithm — Key Concepts — query hydration (supplies block/mute lists)