Skip to content

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

    Hydrate the viewer

    History, follows, blocks, mutes, already-seen, topics

  2. 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. 3

    Hydrate posts

    Text, media, author, labels, quotes, engagement counts

  4. 4

    Pre-score filters

    Dupes, older than 48h, self posts, muted, already seen

  5. 5

    Score

    Phoenix heads → weighted sum → author decay → OON ×0.75 → VM variety

  6. 6

    Keep top K

    Sort by final score. Order is fixed after this.

  7. 7

    Visibility filter

    A separate service. First drop wins.

    AllowShow normallyInterstitialBehind a warningDropRemove from the slate
  8. 8

    Blend and serve

    Ads, Who to Follow, and prompts sit outside Phoenix

home-mixer/candidate_pipeline/phoenix_candidate_pipeline.rs
  1. Query hydration. Recent engagements (the main model input), following list, blocks, mutes, muted keywords, already-seen posts, topics.
  2. Sources. Thunder for in-network. Phoenix retrieval and SimClusters for out-of-network. Same ranker scores all of them.
  3. Hydration and pre-filters. Load post bodies and author labels. Drop dupes, posts older than 48 hours, self posts, muted keywords, already seen.
  4. Scoring. PhoenixScorer writes per-action probabilities. RankingScorer does the weighted sum, author decay, OON discount, new-author lift. VMRanker reorders for variety.
  5. 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. 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. 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. 3

    Store

    Written once, read back per viewer on the request path

  4. 4

    Visibility filtering

    registry.rs, in order. Recommendations get a harsher set.

    AllowFollowers and recsInterstitialTap throughDropGone from Home
visibility-filtering/rules/registry.rs evaluates in order. First drop wins.

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.

Architecture

Ara

A short briefing for this page — not the whole text.