System
Two pipelines, one timeline.
Home Mixer builds the feed on the request path. Labels are written continuously on a separate path, then read at the end to allow, warn, or drop.
Request path
Every For You refresh hydrates you, fetches candidates in parallel, filters the cheap cases, scores what remains, keeps the top K, then asks visibility filtering.
- 1
Hydrate the viewer
History, follows, blocks, mutes, already-seen, topics
- 2
Fetch candidates in parallel
Same ranker scores all three. Being retrieved is not being shown.
In-network
Thunder
Recent posts from accounts you follow
Out-of-network
Phoenix retrieval
Nearest posts to your history
Out-of-network
SimClusters
Cluster overlap, not embeddings
- 3
Hydrate posts
Text, media, author, labels, quotes, engagement counts
- 4
Pre-score filters
Dupes, older than 48h, self posts, muted, already seen
- 5
Score
Phoenix heads → weighted sum → author decay → OON ×0.75 → VM variety
- 6
Keep top K
Sort by final score. Order is fixed after this.
- 7
Visibility filter
A separate service. First drop wins.
AllowShow normallyInterstitialBehind a warningDropRemove from the slate - 8
Blend and serve
Ads, Who to Follow, and prompts sit outside Phoenix
- Query hydration. Recent engagements (the main model input), following list, blocks, mutes, muted keywords, already-seen posts, topics.
- Sources. Thunder for in-network. Phoenix retrieval and SimClusters for out-of-network. Same ranker scores all of them.
- Hydration and pre-filters. Load post bodies and author labels. Drop dupes, posts older than 48 hours, self posts, muted keywords, already seen.
- Scoring. PhoenixScorer writes per-action probabilities. RankingScorer does the weighted sum, author decay, OON discount, new-author lift. VMRanker reorders for variety.
- Blending. Ads, Who to Follow, and prompts are not ranked by Phoenix. BlenderSelector interleaves them at fixed or ad-adjacency rules.
Labeling path
Understanding runs as posts are published and as accounts accumulate signals. Rules write labels. Visibility filtering reads those labels later, per viewer.
- 1
Understand — continuous, not on the request
Runs as posts publish and accounts accumulate signals
Posts and media
Grox · CLIP · media models
Spam, adult, violence, embeddings
Accounts
Agatha · BDSM · user-cred
Blocks vs likes, sequences, PageRank
- 2
Write labels
Rules fire on events or on model scores
Events
Scarecrow
Botmaker rules on live events
Scores
Abuse enforcement
Label, challenge, or suspend
Rollup
User agg
Post labels climb to the account
- 3
Store
Written once, read back per viewer on the request path
- 4
Visibility filtering
registry.rs, in order. Recommendations get a harsher set.
AllowFollowers and recsInterstitialTap throughDropGone from Home
Ranking vs visibility
A high score cannot override a drop. A low score cannot save a post that VF already allowed — it just sits lower. Different services, different inputs.
Home vs recommendations
Followers see a milder rule set. The same spam-high-recall post that is hidden as a recommendation is allowed to people who already follow the author.