- Sources read: 2
- Canon files updated: 3
- Radar entries: 1
Other changes reviewed today:
- The filter that removes brand-safety HighRisk posts from the X video carousel became on by default.
- X added an option, off by default, to separately train late conversions of ad link opens and long dwell.
- Meta authors posted LWR, a ranker that scales history length and reasoning depth separately, on arXiv.
1The default ads blender changed to slot-spread — X
Source xai-org/x-algorithm 9106e9f — X (xAI), 2026-10-31, code. In these notes' numbering this is Gen4+54 (Gen4+N is the number these notes assign, in order, to commits after the Gen4 release on 2026-08-13).
Background X For You (a recommendation timeline that also mixes in posts from accounts the user does not follow) places ads between organic posts and decides their positions by looking at the brand-safety grade (Safe, Low, Medium, High) of the posts directly above and below each ad. The component that does this is the ads blender; the 2026-10-29 commit introduced two new blenders that follow the same safety rules (slot_spread, least_movement), but only as options. At that time the default was still multi_risk, in use since 2026-09-01. This commit changes the default blender to slot_spread, turns on the HighRisk filter for the video carousel, and adds off-by-default options to ads training and the transparency report.
What we learnedA. The default ads blender changed to slot_spread
The default of the switch that selects the ads blender changed from multi_risk to slot_spread verified —
home-mixer/params/param.rs:937-942.- The switch name is
AdsBlenderType(rust_home_mixer_ads_blender). - The mirror sync time on the first line of the file is 2026-10-30T22:59:56Z. This file is a mirror that copies the defaults of X's internal feature switches.
param!( AdsBlenderType, String, "rust_home_mixer_ads_blender", "slot_spread" );- The switch name is
slot_spread first fixes ad slots evenly across the whole page, then pulls the nearest safe post above and below from each slot verified — daily 2026-10-30.
- High posts cannot appear next to any ad, and Medium posts appear only next to ads whose advertiser allows sensitive context (BSR-high). These conditions are the same as in multi_risk.
- The comparison test in the 2026-10-29 commit pinned that slot_spread does not serve fewer ads than multi_risk verified —
ads/tests/blender_comparison_test.rs.
The blender was promoted to the default two days after it was created verified. Whether it went through an experiment stage cannot be known from public code inferred. The basis is that this mirror holds only defaults, not experiment assignments.
What we learnedB. The filter that removes HighRisk posts from the video carousel was turned on
- The switch that removes brand-safety HighRisk posts from the candidates of the vertical video carousel (a module in For You for swiping horizontally through several videos) became on by default verified —
home-mixer/params/param.rs:1245-1250.- The switch name is
EnableVideoCarouselHighRiskFilter. It was introduced as off by default in the 2026-10-28 commit (Gen4+51). - This filter also removes posts that have no safety verdict verified —
filters/video_carousel_filter.rs:29-39.
- The switch name is
- The carousel module itself is still off by default, so the user-facing screen currently does not change inferred. The basis is that this diff has no change to the carousel enable switch.
- Made the embedding version used for carousel dedup selectable with a switch verified —
home-mixer/clients/post_v8_search_embedding_client.rs.- The default is
v8_search_1, the same as the previous constant, so behavior is the same.
- The default is
What we learnedC. An option to separately train late conversions of ad link opens and long dwell was added
An option to add two "late window" heads, for ad link opens and link long dwell, to Phoenix (X's Grok-based ranking model) training was introduced, off by default verified —
phoenix/xrex/data/recsys/ads_late_window.py:48-97.- A late-window head is a twin head that predicts only behavior that is not visible in the short observation window right after the impression but arrives later. X has used the same structure for ad conversions since 2026-09-01 and for view-through conversions since 2026-10-24.
- The new actions are
ADS_OPEN_LINK_LATE_WINDOW(112) andADS_LONG_DWELL_LATE_WINDOW(113), and their twins are the existingCLIENT_TWEET_OPEN_LINKandCLIENT_TWEET_EXTERNAL_LINK_LONG_DWELLED. - The training option is
ads_late_window_headsand the serving composition option isserve_late_window_composed; both default to False. The former requiresads_head_masking, and the latter requires the former.
Turning on serving composition adds the late-window probability to the existing head's probability and outputs the sum as the "probability that it happens at some point" verified — same file.
- The raw late-window output is clipped at 0.5 and then converted to b/(1−b). This appears to be a correction that undoes the difference in training sample construction, but no comment states the reason inferred.
def late_engagement_probability(raw): b = raw.clip(0.0, 0.5) return b / (1.0 - b) def compose_late_engagement(p_early, raw_late): return p_early + (1.0 - p_early) * late_engagement_probability(raw_late)
What we learnedD. The Under the Hood report prepared to list labeled posts
- A feature in the Under the Hood report (an X transparency tool where users look up the visibility-limiting labels applied to their account and posts) that lists the post IDs for each label was introduced, off by default verified —
under-the-hood/strato/lib/params.strato:30-37.- If a label has 3 or fewer posts, all of them are shown.
- A label that covers more than 5% of that month's posts shows only a notice instead of a list.
- Otherwise it shows up to the latest 50, and country-specific takedown labels show the latest 50 regardless of the ratio.
- From the same commit, the report no longer carries the appeal notice for account labels verified —
under-the-hood/strato/columns/underTheHoodReport.User.strato.- The country-specific appeal links changed from Brazil to a list of Japan and EU countries.
What we learnedOther changes
- A switch that passes a reward head number to the page-decode re-ranking (a re-ranker that picks the whole page at once) was added; the default is 0 verified —
home-mixer/scorers/page_decode_rerank_scorer.rs. - DM share and copy-link share were added to the debias target head names of VMRanker (X's ranking service that computes the weighted sum of scores and diversity) verified —
vm-ranker/scoring/debias.rs. - A field for the ad classification ID was added to the AdInfo proto verified —
recsys.proto. - Writes to the SID (Semantic ID, which represents an item as a short sequence of semantic tokens) lookup cache moved to an asynchronous queue verified —
sid_client.rs. - The safety label lookup module of VF (the visibility-filtering service that decides post visibility) was split into a separate crate verified —
safety-label-source/lib.rs. - The candidate pipeline gained a hook that lets each request set a different number of results verified —
candidate_pipeline.rs. - The sentence "this video was selected because it shows signs of a hidden layer" was removed from the video hidden-layer detection prompt of grox (a Grok-based content safety pipeline) verified —
grox/core/lm/convo.py.
Canon update In the blender bullet of ## Re-ranking, diversity, and filters in services/x.md, corrected the default to slot_spread and the reference commit, and changed the carousel HighRisk filter bullet to on by default. Rewrote the default-blender sentence in the ## Ads intro and added a default-blender line to that section's change log; added a late-window engagement head sentence to the ads conversion section intro and a post-ID listing bullet to the Under the Hood section. Raised the reference commit in ## Summary and ## Sources to 9106e9f and added one row to the change-log summary table. In the brand-safety bullet of topics/llm-in-recsys.md, corrected the default-blender claim.
Why it matters ⚠ Claim changed: the claim "X's default ads blender is multi-risk" no longer holds since the 2026-10-31 commit. The safety conditions are unchanged; only the placement approach changed, to spreading ad slots evenly across the whole page verified. Whether the number of ad impressions increased cannot be known because the test pins only "does not decrease" inferred.
2Meta authors released the long-history ranker LWR — radar
Source Read More, Reason Deeper: Latent Workspaces for Long-Sequence Recommendation — Meta-affiliated authors, 2026-10-29 v1, paper.
Background A sequence ranker that uses long user histories spends more computation in every layer as the history grows, so it is hard to scale history length and model depth separately. HSTU (Meta's generative-recommendation sequence Transformer) carries the same coupling. This paper proposes a structure that keeps the history in a store that each layer can reread and passes only a fixed-size workspace per candidate along the layers.
What we learnedA. Meta authors reported a long-history ranker that is cheaper and better than HSTU offline
- At a history length of 10K, they write that it improves NE (normalized entropy, a prediction loss where lower is better) by 0.19% over HSTU and cuts forward GFLOP per request by 69.6% verified — arXiv abstract.
- The author email domain is
@meta.com(confirmed in the HTML version). - It also reports results on two billion-scale ranking surfaces (anonymized as Surface 1 and 2), but these are offline metrics verified.
- The author email domain is
- We found no online A/B test or deployment claim verified. Whether it is used in Meta feeds (Facebook, Instagram) is unknown, so we keep it on the radar inferred.
"At 10K history, it improves NE by 0.19% over HSTU while using 69.6% fewer forward GFLOP/request. It also outperforms existing baselines on two billion-scale ranking surfaces." — Read More, Reason Deeper, 2026-10-29
Canon update Not folded into the canon. Added an entry to ## New this month in radar.md.
Why it matters There is one more piece of evidence in the Meta sequence ranking lineage on "which structure is better at the same compute". Without a deployment claim, it is not raised to the canon.
Radar
- Meta LWR — a ranker that scales history length and reasoning depth separately — arXiv 2610.39188. PRISM by the same authors (arXiv 2610.39175) is described in the detail.
- In the start-of-month cleanup, moved October's 6 "new this month" entries (ECHO, TransX, Pinterest User Journeys, GEAR, HELIX, GRP) to the
## Earlier additions (2026-10)section. - Triaged 30 arXiv cs.IR papers. Most were on yesterday's list, and ads offline evaluation (Beyond IPS) and advertiser subsidy allocation (CASH) were left out because they are far from feed mechanisms.
What to check next
- Whether the video carousel enable switch gets turned on — the HighRisk filter was turned on today, so what remains off by default is the module itself.
- Whether
serve_late_window_composedgets turned on — if it does, the link-open probability changes to a value that includes late conversions, and ad scores change. - The radar
## Earlier additions (2026-08~09)entries are approaching the 3-month lifespan — the next run needs to settle graduation or promotion.
Lookup failed: ai.meta.com/blog — the list only shows posts up to 2026-07, so we could not confirm recent posts Lookup failed: research.netflix.com/publications — the page returned HTTP 404 Lookup failed: Meta Q3 2026 earnings call transcript — could not find the original transcript text