- Sources read: 4
- Canon files updated: 3
- Radar entries: 1
Other changes reviewed today:
- X changed the ads author brand-safety fallback to on by default in the same commit.
- Facebook announced "Your algorithm", which adjusts Feed and Reels recommendations with free text.
- Netflix introduced in a blog post a measurement study finding that the current recommendations raise engagement by 4% over matrix factorization.
1The video carousel can now also pick videos using the immersive-surface model's predictions — X
Source xai-org/x-algorithm@92f0918 — xAI public repository, commit of 2026-10-15 00:55 UTC, code. These notes number X commits after the Gen4 release in order, and this commit is Gen4+42. It changed 57 files. The home-mixer (the service that assembles the For You feed) changes are about 330 lines across 12 files, and most of the rest (about 8,000 lines) is on the visibility-filtering side, which decides whether a post is shown.
Background In the 2026-10-08 commit (Gen4+38), X added a carousel module (off by default) that shows 3–5 vertical videos as a group in the 6th slot of the For You feed, ordering the videos by the "probability of opening the video (video_open)" predicted by the For You ranker (Phoenix). However, tapping the carousel takes the user into an immersive viewer where vertical videos are swiped through, so "the probability of properly watching after opening" is closer to the carousel's purpose than "the probability of opening". VQV (video quality view) is an X behavior label for whether a video was actually watched for at least a set time. This commit makes it possible to mix in the VQV probability predicted by the immersive-surface model when ordering the carousel's videos.
What we learnedA. The carousel selection score became a weighted sum of two model predictions
The carousel's sort score is now the probability of opening the video and the VQV probability predicted by the immersive-surface model, each multiplied by its weight and summed verified —
home-mixer/util/video_carousel.rs:104-123.- The formula is
VideoCarouselVideoOpenWeight × video_open + VideoCarouselImmersiveVqvWeight × immersive_vqv. - A video with no immersive score has that term counted as 0.
- The formula is
The defaults are a video_open weight of 1.0 and a VQV weight of 0.0 verified —
home-mixer/params/param.rs:1083-1094. Default behavior is therefore the same as before.- The carousel itself (
EnableVideoCarousel, lines 1053-1058) is also still off by default.
- The carousel itself (
The two components below run only when all three conditions hold verified: the VQV weight is not 0, the request is a For You request, and the carousel is on.
- The three conditions are checked in
ranks_by_immersive_scores(video_carousel.rs:17-21).
- The three conditions are checked in
The first component fetches the user behavior sequence once more with a different aggregation approach. That approach (
IMMERSIVE_LONG_DWELL) got only a name in the proto in the 2026-09-10 commit (Gen4+19), and this is the first home-mixer code to use it verified —query_hydrators/immersive_scoring_sequence_query_hydrator.rs,param.rs:163-168, 1101-1106.- The component is named
ImmersiveScoringSequenceQueryHydrator(75 new lines). - The default aggregation the For You ranker uses is
DENSE_WITH_LONG_DWELL, and this component fetches withIMMERSIVE_LONG_DWELL.
- The component is named
The second component collects only the carousel-eligible videos among the candidates and requests predictions from a different Phoenix cluster on an immersive-surface basis. In the request, the video length field is filled with the minimum video length verified —
scorers/immersive_video_scorer.rs,util/phoenix_request.rs:228-252.- The component is named
ImmersiveVideoScorer(65 new lines). - Carousel-eligible videos are videos that are not replies and have a
video_openscore. - The requested cluster is
Experiment3Fou, and the surface value isProductSurface::GalleryPage.
- The component is named
The second component runs between the Phoenix scorer and VMRanker (a scorer that reorders the candidate set to be shown in the feed) verified —
candidate_pipeline/phoenix_candidate_pipeline.rs:462-471.- The order is
PhoenixScorer→ImmersiveVideoScorer→VMRanker.
- The order is
The immersive prediction is stored only in the candidate's
immersive_scoresfield, and this diff has no code that reads this field in main-feed score computation verified.The same weighted sum is used in both stages that pick carousel videos verified —
selectors/top_k_score_selector.rs:16-25,filters/video_carousel_filter.rs.- When picking 30 more carousel candidates from outside the top 50 by score
- When picking the final 3–5 after the filter
A new test shows the expected behavior. With a VQV weight of 1.0 and a video_open weight of 0.0, videos with VQV of 0.9, 0.5 and 0.1 are picked in that order verified.
let result = TopKScoreSelector.select(&carousel_query("0.0", "1.0"), candidates); ... assert_eq!(tweet_ids(extras), vec![101, 106, 103]);
What we learnedB. The ads author brand-safety fallback was turned on by default
- The ads author brand-safety fallback switch changed from false to true verified —
param.rs:807-812.- The switch is named
EnableAdsAuthorBrandSafetyFallback. - The sync time of the cron mirror (a file that syncs production config values every day and publishes them) changed from
2026-10-13T16:00:30Z→2026-10-14T16:00:44Z.
- The switch is named
- This switch substitutes an author-level label when a post-level Grok safety label does not yet exist. It was introduced off by default in the 2026-10-03 commit (Gen4+35). The V2 verdict switch (Gen4+2, introduced 2026-08-17), which the same commit changed to true by default, is also true, so both switches are now on verified.
- The author-level labels substituted are
GrokSfa/GrokNsfaLimited/GrokNsfa. - The V2 verdict switch is
EnableAdsBrandSafetyVerdictV2(lines 801-805).
- The author-level labels substituted are
What we learnedC. The layer that defines visibility-filtering rules was rewritten, and policy is unchanged
Visibility-filtering (VF) is a service that decides, post by post, whether "this viewer may be shown this". Each SafetyLevel (a bundle of per-surface policies) has a rule list, and a rule has the form "if the condition is true, take this action (drop, blur, limit engagement, etc.)".
- The way rule conditions are written changed from a flat array (an AND of all conditions) to a Boolean tree that combines named conditions verified —
visibility-filtering/rules/rule_spec/rule.rs(305 new lines).- The tree is built with
all!/any!/!and named conditions. - For example, the two conditions "the request came from an age-verification country and the viewer has not completed age verification", which were repeated in about 25 rules, are now combined into the single
VIEWER_IS_NOT_AGE_VERIFIED_IN_AGE_VERIFICATION_COUNTRIES.
- The tree is built with
- The rule lists, order, actions and country lists of the five SafetyLevels are unchanged verified —
rules/levels.rs.- A test adapter (
rules/legacy_table.rs) was added that re-outputs the new tree as the old flat table and compares it with the existing golden files, and the golden files did not change in this commit. The test therefore guarantees that there is no policy change.
- A test adapter (
- Evaluation, policy-catalog document generation and per-node verdict traces all come from one and the same rule definition verified. The serving path short-circuits without a trace.
- Catalog generation is handled by
rules/catalog.rsand is test-only. - The per-node trace is produced by
rules/rule_spec/observed.rs(275 new lines).
- Catalog generation is handled by
- The debug tool
explain.rs(+854 lines) exposes this trace, so we read this as a direction toward explaining "why was this post hidden" rule by rule inferred. - Behavior may change in two viewer lookups outside the rules.
- The Gizmoduck (X's user information service) lookup that fetches viewer information changed from a call without context to a lookup context that includes deleted, deactivated and soft users verified —
clients/gizmoduck_client.rs:23-29, 55-62. The test name changed fromviewer_lookups_pass_no_contexttoviewer_lookups_include_every_user_state_tweetypie_reads, so we infer the aim is to align the lookup scope with Tweetypie, the reference service for comparison inferred. - If a found viewer has no age information, it is now decoded as "age not stated" (
NotStated) regardless of state verified —hydration/decode/viewer.rs:76-79. When the two changes combine, a viewer in a state that previously was not looked up could become a target of the sensitive-media drop rule for viewers with no stated age inferred. The diff does not show the scale.
- The Gizmoduck (X's user information service) lookup that fetches viewer information changed from a call without context to a lookup context that includes deleted, deactivated and soft users verified —
- Distribution metrics by viewer state and by age (
vf_viewer_state,vf_viewer_age) were introduced verified. We read them as instrumentation to observe the effect of the two changes above inferred.
What we learnedOther changes
- The assert that was required together when turning on seqpack (packing that concatenates several user sequences into one batch row) was removed from the Phoenix training code verified —
phoenix/xrex/models/recsys_model.py. Only the constraint was lifted and there is no config change, so we read it as a change that permits experiments inferred.- The removed assert was the one requiring
right_anchored_rope.
- The removed assert was the one requiring
Canon update In services/x.md, we created a new Gen4+42 section holding A, B, C and their implications. We added a sub-bullet to the carousel item in the feed surface section. We added a correction paragraph stating the current configuration (five levels) to the 4-stage VF summary in the safety section, and added 92f0918 and the reference-commit notation to the sources section.
Why it matters This is the first public case of a module inside the feed calling a model for another surface (the immersive video surface) separately and ordering by its predictions verified (code). The carousel in the 2026-10-08 commit (Gen4+38) chose videos with a single main-feed model.
- We infer that the carousel is treated as "the entrance to the immersive viewer" and that the aim is to pick the entrance's videos with the viewer's model as well inferred. There are two grounds.
GalleryPage,Experiment3FouandIMMERSIVE_LONG_DWELLare all names from the immersive surface side.- The reward of the training config
immersive_page_rl, released the day before, counts VQV completion separately.
- Following the video_open weight cut (0.07 → 0.02, Gen4+40) and the dwell-time reward (Gen4+41), this commit points the same way as the shift of the video-side objective from "opening" to "time actually watched and video quality views" inferred.
- Because the VQV weight defaults to 0, it is unknown whether this is actually served.
2Announced "Your algorithm" for adjusting recommendations with free text — Facebook
Source Your Algorithm, Your Words: New Ways to Shape What You See on Facebook — Meta newsroom, 2026-10-13, blog post (product announcement). The 10-14 and 10-15 batches looked only at engineering.fb.com and missed the newsroom, so we fold it in late today.
Background Since 2022, Facebook has offered Show more/Show less (now named Interested/Not interested), a post-level control. Pressing the button raises or lowers the ranking score of similar posts "temporarily". The signal is a single button press, so it is ambiguous whether it means "see less of this person" or "see less of this topic", and Meta has explained that it leaves that interpretation to the model. This announcement is an attempt to reduce that ambiguity by letting users write what they want in words.
What we learned
- In the "Your algorithm" space inside the three-dot menu, users can directly add and manage the topics that drive Feed and Reels recommendations verified (existence of the feature).
- Users can write what they want more and less of in free text, and a follow-up question may appear after pressing Interested/Not interested verified.
- The scope is Facebook's Feed and Reels. There is no mention of Instagram or Threads and no information on countries or launch schedule verified.
- The statement that an LLM interprets natural language and that recommendations change within the same session is the newsroom's claim, and there is no model structure or figure.
- We infer that an LLM converts the free text into topics or embeddings and feeds them into the existing ranking as conditions inferred. The basis is that the post says only that it is used "together with what it already knows" and does not mention replacing the ranker.
"LLMs can incorporate the interests, context, and intent behind natural language, unlocking an algorithm you can actually talk to." — Your Algorithm, Your Words, 2026-10-13 (newsroom)
"Tell it what you want more or less of, and your recommendations respond in real time, adapting within the same session to reflect what matters to you right now." — Same post
Canon update In the feedback signals > user controls section of services/facebook.md, we added a row to the table and attached two bullets, a quote and an interpretation. We also added it to the sources section.
Why it matters This is the first claim that user feedback enters as a real-time, session-level condition verified (wording comparison). The existing Show more/less wording had only "temporarily" and no duration, while this post explicitly states reflection "within the same session". However, it is marketing wording and not evidence of a mechanism, so we will check when a system card update appears.
3Measured the value of personalized recommendations with a choice model — Netflix
Source Measuring the Impact of Personalized Recommendations — Netflix TechBlog, blog post. The original paper is The Value of Personalized Recommendations: Evidence from Netflix (arXiv 2511.07280) (v1 2025-11-10, v5 2026-06-08), and the post notes publication in International Journal of Industrial Organization and a presentation at EC '26. We could not confirm the post's publication date: the 2026-10-14 RSS republished 10 past posts at the same time of day and the post page was blocked (403); the republished posts also included the 2025-11 post on FM (Netflix's Foundation Model that centrally builds member representations) integration. This blog was not in the repository, so we fold it in today.
Background "What percentage of viewing is recommended titles" is an intuitive metric for measuring the value of recommendations. However, recommendations go to people who were likely to watch anyway, so this metric is not a causal effect. Experiments that broadly turn off personalization are not possible either, because they would degrade member experience. This paper takes a middle path: it estimates viewing choices with a model and validates that model with small randomized experiments.
What we learned
- It estimates members' daily viewing choices with a low-rank choice model verified (blog).
- The model learns title representations and a member state that summarizes viewing history. A separate "recommendation effect" term is added for recommended titles.
- Variation in whether a title is recommended comes from natural variation such as algorithm exploration verified (blog).
- The validation experiment is a randomized A/B that slightly pushes recommendations toward, or pulls them away from, specific categories. The correlation between the model-predicted diversion ratio and the experimental value was 0.86, with an R² of 0.73 verified (blog).
- The diversion ratio indicates, when some set of titles is shown less, how much of the reduced viewing moves to other titles and how much leaves Netflix.
- In the counterfactual comparison, engagement relative to the current recommendations falls as follows verified (blog, abstract).
- Random recommendations: −16%
- Popularity-based recommendations: −12%
- Basic matrix factorization (MF): −4%
- Popularity-based recommendations and MF concentrated viewing on fewer titles, while random recommendations have slightly higher diversity but a large engagement loss verified (blog).
- Splitting the viewing difference produced by recommendations into three paths, mechanical exposure accounts for about 7% verified (blog).
- Most of the rest is selection (showing to people who would have watched anyway) and targeting (showing to people whose decisions recommendations change).
- The targeting effect is about 7× the exposure effect and is largest for mid-popularity titles verified (blog).
"Relative to the current system, random recommendations reduce engagement by 16%, popularity-based recommendations reduce engagement by 12%, and matrix factorization reduces engagement by 4%." — Measuring the Impact of Personalized Recommendations (blog)
"Exposure is not the main driver of differences in consumption, as mechanical exposure explains only about 7% of the gap under the current recommender system, while selection and targeting account for the vast majority of the difference and the targeting effect is nearly seven times larger than the exposure effect." — Same post
Canon update In the training cycle and evaluation section of services/netflix.md, we introduced a "Measuring the value of recommendations" subsection and added the paper and the blog post to the sources section.
Why it matters This is the first source among the Netflix sources this repository has read that gives a number for the value of the whole recommender system verified (checked against the sources section of netflix.md). The counterfactual observability framework folded in during 2026-09 was an operational tool for measuring the increment of individual item and model decisions. Since the post does not disclose whether the "current system" being compared is the FM generation, the interpretation that "4% versus MF" serves as a yardstick for the upper bound of the latest generation's improvement is left as an inference inferred.
4A paper disputes the claim that generative retrieval beats dense retrieval — Radar (Shopify)
Source Revisiting Generative vs. Dense Retrieval: A Static Value Prior Reverses the Gap — arXiv, 2026-10-13 v1, paper. The three authors are affiliated with Shopify, and one of them also holds an appointment at the University of Toronto (confirmed in the HTML version).
Background Generative retrieval (GR) converts items into semantic IDs and picks candidates by having a model generate those tokens. A semantic ID (SID) is a token sequence that represents an item as a hierarchical code. Dense retrieval (DR) is the existing approach that puts users and items into the same vector space and finds nearby items. Most of the sources that accumulated on the radar recently said GR is better than DR, and this paper disputes that claim.
What we learned
- It argues that most of the gap by which GR appears ahead on public data (Amazon Toys) comes from popularity. Mixing the same static item value once into the DR score reverses the gap, and recall also stays higher than GR verified.
- It also reports that on an internal large-scale e-commerce dataset, GR did worse than a small DR encoder verified. There is no online A/B or deployment claim.
"Finally, on an industrial-scale internal e-commerce dataset with LLM-judged relevance, we show that a 14B SID-LLM still underperforms a $47\times$ smaller dense encoder." — arXiv 2610.19065 abstract, 2026-10-13
Canon update In radar.md, we added one line as counter-evidence to the "generative retrieval / semantic ID" thread.
Why it matters This paper is the first platform-company source in this thread to directly rebut the claim that GR is superior. X also operates SID retrieval as one more candidate source rather than as a replacement for the two-tower dense retrieval approach, so we read this paper as supporting running both approaches side by side inferred. The basis is that in X's code the SID channel was added as a separate SidSource (Gen4+34).
Corrections
- The VF summary in the safety section of x.md stated the Gen4 (2026-08-13) configuration, "3 SafetyLevels, 54 recommendation rules", in the present tense.
- While analyzing VF, we confirmed that there are currently five levels (Home Hydration and Immersive Expanded Recommendations were added) and that the constant entry counts are 1·39·65·87·47 verified —
rules/levels.rs. - We kept the original text (
services/x.md) as a record of the Gen4 point in time and added a correction paragraph directly below it.
- While analyzing VF, we confirmed that there are currently five levels (Home Hydration and Immersive Expanded Recommendations were added) and that the constant entry counts are 1·39·65·87·47 verified —
What to check next
- Keep watching the cron mirror for the carousel's VQV weight changing to a value other than 0 — if it does, the carousel's actual ordering criterion has changed.
- The parameter name is
VideoCarouselImmersiveVqvWeight.
- The parameter name is
- Read Netflix's "The Lifecycle of LLM-as-a-Judge" post and the original paper (arXiv 2608.18300) — it was in the republished batch but is not in the repository, and we do not yet know whether it is used for recommendation evaluation.
- Confirm the actual publication date of Netflix's "Measuring the Impact" blog post — we could not confirm it because the post page returns 403.
- Check where in the Phoenix training config the immersive surface value (
ProductSurface::GalleryPage) is used — we do not yet know whether the immersive model is trained separately or shared with the home ranker inferred (unresolved).
Coverage
- X: One commit has been pushed to the X algorithm repository since 2026-10-15.
- The one commit confirmed in the
xai-org/x-algorithmcommit list is92f0918. - The WebSearch cross-check ("X For You algorithm video carousel October 2026") turned up no new announcement with a primary source.
- The one commit confirmed in the
- Meta: The latest posts on engineering.fb.com are from 2026-10-12 and 2026-10-13, and the recommendation-related post (GEM) was already covered in the 2026-10-14 daily.
- The ai.meta.com/blog list has no recommendation or ranking posts.
- The ranking explanation index on transparency.meta.com is still "UPDATED DEC 31, 2023", and we did not open the individual system cards.
- We found the 2026-10-13 newsroom (about.fb.com) post that had been missed and folded it into section 2 above.
- Netflix: All 10 items in the RSS were republished at 2026-10-14 19:47–20:02 UTC, so the dates cannot be trusted.
- Of these, the only post related to feed and recommendation is the one in section 3 above. The rest are infrastructure posts (DataJunction, TimeSeries store, ads event pipeline, Conductor, Spark, Stratum, GPU compute), the FM integration post already covered, and the LLM-as-a-Judge post.
- The latest item in the research.netflix.com archive is 2026-02-24.
- arXiv cs.IR: We parsed 30 items and 1 passed (Shopify GR vs. DR).
- Two came close to passing. AdCoEvo automates ad delivery operations and is far from feed ranking, and Dual-Branch Graph Distillation for Cold-Start has only public benchmarks.
- Because it is Friday, we did not skim industry blogs.