Started the Meta investigation. It covered the Facebook, Instagram, and Threads surfaces, and eight cross-service topics notes were cleaned up. Other work done the same day:
- Started and finished the Netflix investigation, and re-verified the existing X and Meta notes.
- Built a daily batch that checks each service for new releases every day.
- Re-read the GenRec original text and ran adversarial verification, which found two facts missing from the canon.
This is a work log. Evidence grades and quotes all live in the canon files services/ and topics/, and are not repeated here.
Sources read — Meta
- AI system cards from the Meta Transparency Center
- Card slugs:
fb-feed,fb-video,fb-reels,fb-feed-recommendations,ig-feed,ig-explore,ig-reels-chaining,ig-threads-feed
- Card slugs:
- Engineering blogs on
engineering.fb.comandai.meta.com: Explore 2020·2023, Journey to 1000 models, UTIS (2026-01-14), IG Notifications diversity (2025-09-02), SilverTorch, RankGraph-2, Andromeda - Papers (all read as HTML renderings): HSTU, ULTRA-HSTU, Wukong, InterFormer, DHEN, GEM, MARM, LLaTTE, DV365 (KDD 2025), Epinet, MoL/h-indexer, HILL
- Meta IR earnings call transcripts Q1 2024–Q1 2026, Widely Viewed Content Report Q4 2025
- Patent US 10,345,993 B2 (unified ranking of ads and organic), sibling patent US 9,729,495
- A post by Adam Mosseri summarizing Threads ranking changes by date, Meta newsroom post (Dear Algo, Your Algorithm)
- EU DSA list of VLOP (very large online platform) designations, Meta DSA filing (third-party hosted PDF, verification failed; see 'What to check next' below)
Six big things learned — Meta
What X and Meta call "release" are different kinds. Meta released design and X released configuration. X's candidate counts are exact values confirmed in the source code, whereas Meta's are rounded values in the system cards. What each disclosure was made for shows in the shape of the numbers.
There is more than one multi-task combination formula. The conventional wisdom "multi-task ranking = weighted sum" breaks down within Meta itself.
- Facebook Feed uses the additive form
Vijt = Σ w·Y(i is the post, j is the viewer). - Instagram Suggested Posts 2020 uses the multiplicative form
(P_like)^w × (1−P_not_interested)^w. - Explore 2023 uses addition that includes negative terms.
- Notifications 2025 uses a multiplicative penalty,
Score = R(c)×D(c).
The way weights are set also differs. Facebook uses surveys, Instagram uses offline tuning and Bayesian optimization, and X uses constants written in the source code.
- Facebook Feed uses the additive form
Meta does not yet have a unified model. The organic side and the ads side belong to different lineages.
- The organic side runs from HSTU, a sequence Transformer model, to ULTRA-HSTU.
- The ads side runs from DHEN, Wukong, and InterFormer to GEM. Serving is MARM, and the user model is LLaTTE.
- "HSTU" appears 0 times in the GEM, MARM, and LLaTTE texts.
The often-misread Q4 2025 "consolidation" remark was about the ads quality model, not about organic.
Meta's engineering effort went into the index, not the encoder. If X's public literature shows the encoder, Meta's shows the index.
- EBR (embedding-based retrieval) did not split ANN out into a separate service; it put it inside the Boolean inverted index as an
(nn <key> :radius <radius>)operator. - SilverTorch absorbs the index into model serving with an "index as model" approach.
- EBR (embedding-based retrieval) did not split ANN out into a separate service; it put it inside the Boolean inverted index as an
Serving cost determines architecture. Instagram Explore did not choose a two-tower (a structure that embeds users and items with separate towers) for accuracy. The reason was that the item tower's output can be cached. Using a cache this way ties that tower's retraining cycle to the cost of rebuilding the index. This is why ranking is fine-tuned on an hourly basis while only the item tower is retrained daily.
For diversity, the absence of sources is itself the finding. On diversity and dedup in the main feed, Meta has published almost nothing at the algorithm level (0 items for Threads). The only exception is Instagram's 2025 notification diversity framework, which is not a feed.
Other points confirmed along the way:
- In effect, Threads reuses 100% of the infrastructure while separating 100% of the ranking signals.
- Although the Threads system card's slug is
ig-threads-feed, all 50 signals listed in its body belong to theText Post Appnamespace, andInstagramappears 0 times.
- Although the Threads system card's slug is
- Threads was not designated an EU VLOP, and the Threads API has no feed read among its 9 endpoints, so the ranker cannot be audited externally.
- Facebook's demotion types fell from about 24 in 2021 to 4 on one page and 7 on another page as of 2025 inferred. The 2021 announcement has no count and only 3 group names, so the starting point of 24 types is inferred (services/facebook.md). Meta's own two pages currently disagree with each other.
- In the Widely Viewed Content Report, the share of unconnected content jumped from 11.7% to 15.2% and then to 41.0%.
- Meta has not reported the AI recommendation share (Facebook 30%, Instagram 50% or more) since Q1 2024.
What verification overturned and the new rules
Adversarial verification run through a second pass turned up real defects. Two new evidence rules were also set.
There was 1 fabricated quote. A sentence that is not in the Explore 2023 blog had entered the draft: "offline replay tools along with Bayesian optimization tools…". The word "replay" appears 0 times in that post. It was replaced with the real sentence, and the 4 places (tables and summaries) that used this quote were fixed too.
The subscripts in a formula were written backwards. i and j in
Vijtwere written as viewer and post respectively, but i is the post. The original text says: "for each post i, we estimate Yijt", "the post X_it toward viewer j".A claim asserting absence was disproved. "Llama appears 0 times in the four ads blogs" was used as the basis for writing that "the LLM Meta talks about is an analogy". However, the LLaTTE paper states explicitly: "dense content embeddings produced by fine-tuned LLaMA models".
- Using an LLM as a representation and using the phrase "LLM-style scaling law" as an architectural analogy are different matters. The note had lumped the two together.
Defects also turned up in links and quotes.
- A page recorded as reachable returned 404.
- One Mosseri quote link redirects to the home page.
- Wording absent from the Clegg 2023 article was listed as a quote from that article.
- 3 quotes had ellipses placed where they change the conclusion. For example, the 12% improvement in Q4 2025 carries a qualifier, so it is not the effect of model consolidation alone. The qualifier is: "along with a series of back-end improvements".
New rule: how to grade an absence, decided today.
- "Fetched page X on day D and Y is not there" is a reproducible primary observation, so it is observed with the date and target stated.
- An unbounded negative such as "Meta has never released Z" is inferred, and the sentence states which corpus was searched.
- Only the result of grepping source code pinned to a specific commit stays verified. Only in that case is the corpus finite, so an exhaustive search is possible.
New rule: do not use arXiv PDFs. Fetching a PDF with WebFetch and reading it invents numbers that are not there.
- On SilverTorch it made up an AWS instance type, "Recall@100 >95%", and "~40% infra savings". The real values in the HTML version were A100 40G and Recall@20 +28.2%.
- From now on, only
arxiv.org/html/or ar5iv is used. - Claims that exist only in a PDF are left unverified, neither confirmed nor denied.
Canon update — Meta
The Meta findings were folded into three service canon files and eight topics notes.
- Created
services/facebook.md: the Vijt formula, candidate counts per surface, how the demotion types shrank, the ads patent, Epinet cold start, dwell-time normalization, DSA - Created
services/instagram.md: three forms of the combination formula, IG2Vec and IGQL, Explore 2023 scaling, DV365, the notification diversity formula, rebuttal of the "3 in a row" claim - Created
services/threads.md: Mosseri's dated timeline of changes, measured values from the system card, no VLOP designation, no feed read in the API, Dear Algo and Your Algorithm- The measured system card values are heads 10 / signals 50 / Instagram 0.
- Created
topics/survey-signals.md: 4 ways survey signals affect the ranker (Meta 2021 / YouTube 2021 / Meta UTIS 2026 / TikTok USM 2024) - Created
topics/model-freshness.md: retraining cycle per surface, how index freshness and ranker freshness differ in cost (the index is about reachability, the ranker about gradual performance degradation) topics/multi-task-ranking.md: a table of the 4 Meta combination formulas, a comparison of weight sources, why head counts of 19–22 and about 10 cannot be compared with each othertopics/candidate-allocation.md: a table of Meta per-surface pass-0 (the first stage that cuts candidates with a lightweight model), how ads and organic are interleaved by the common unit of pixel heighttopics/feed-diversity.md: recording the absence of sources as a finding, the notification diversity formula, the rebuttaltopics/embedding-retrieval.md: EBR's inverted-index hybrid, SilverTorch, RankGraph-2, Andromeda and HILL, IG2Vec and IGQL, constraints created by cacheabilitytopics/sequence-transformer-ranking.md: HSTU detail, ULTRA-HSTU, the ads lineage, DV365, the basis for treating the lineages separatelytopics/llm-in-recsys.md: the distinction between using an LLM as a representation and as an analogy, LLaTTE
Same day, part 2: started and finished the Netflix investigation, re-verified existing work, and built the daily batch
Sources read in part 2 — Netflix
- TMIS 2015 (Gomez-Uribe & Hunt): the reference paper describing the classic-generation system
- netflixtechblog: Foundation Model (FM, 2025-03), FM unification in 3 modes (2025-11), GenRec (2026-07), long-term satisfaction reward (2024), artwork bandit (2017), AVA (2018), interleaving (2017), FM-Intent (2025), live event delivery (2025), Ads pipeline (2025), 2013 3-layer architecture
- about.netflix.com: Goodbye Stars Hello Thumbs (2017), Two Thumbs Up (2022), new TV experience and conversational search beta (2025), Upfront 2025
- Papers: Calibrated Recommendations (Steck, RecSys 2018), UniCoRn (RecSys 2024), GenPage (RecSys 2026), 1B scaling (2026, shadow), live cold start (RecSys 2025), embedding stabilization (RecSys 2025), Artwork LLM post-training (2026, research)
- help.netflix.com recommendation documents, SIGIR 2019 search paper, AI Magazine 2021 abstract
Five big things learned — Netflix
There is no retrieval layer. PVR (the ranker for genre rows) sorts the entire catalog for each member. This works because the corpus is in the thousands to tens of thousands, so scoring everything by brute force is feasible. It is the first sample for which the question "which ANN is used" does not even arise.
- The allocation problem shifts to row selection rather than items. About 40 rows are picked from tens of thousands of candidate rows.
- It had already dropped the ratio-based allocation template approach in 2015.
The objective function is not a weighted sum like
Σ w·P. It uses a contextual bandit together with a proxy reward.- The proxy reward has the form
r(user,item)=f(play,complete,thumb). - The north star (the final target metric) is retention. However, it is a signal observed only once a month, so direct optimization was abandoned and a reward engineering loop is used instead.
- Delayed feedback is filled in by a prediction model.
This is the first counterexample suggesting that the weighted-sum frame may be a convention of ads-type surfaces.
- The proxy reward has the form
It is the most concrete retraining-cycle disclosure in the industry. FM (a GPT-style sequence Transformer that builds member representations centrally) is "monthly pretraining from scratch + daily fine-tuning". Because the catalog receives new items on a programming schedule, the nature of the freshness pressure itself differs from UGC (user-generated content). Cold start is a promotion problem, not a coverage problem (billboard incrementality bandit).
GenRec filled the gap in slot 3 (the slot for using an LLM as ranker) of the llm-in-recsys note. It is an industry-first-grade first-party statement that an LLM entered the organic ranking path. Whereas X uses an LLM as a judge and Meta as a feature encoder, here the LLM is the ranker itself.
- The details of the statement: internal LLM post-training, vLLM prefill-only, and a significant win in a 4-week A/B on about 10% of traffic.
- The original text says: "context window becomes our new 'feature budget'".
The fifth approach to diversity is calibration. Calibration preserves the genre distribution of the watch history in the recommendation list as well (Steck RecSys 2018, with the formula published). However, there is no statement that it was deployed, so it must not be written that "Netflix uses this approach".
- Diversity itself is handled at the row selection stage ("relevance + diversity optimization").
- Artwork personalization is a separate means of adjusting perceptual diversity.
Other points confirmed along the way:
- Secured the primary source for explicit ratings. Accordingly, the Netflix section of survey-signals was upgraded from secondary-reporting-based to primary-source-based.
- What was secured: the 2017 switch to thumbs, the 200% increase in activity, the fact that % Match is for display, and the 2022 two thumbs.
- For ads, only the pipeline and targeting products are public, and there are 0 ranking model publications. So the organic lineage and the ads lineage cannot be described separately, as was done for Meta.
- It is stated explicitly that demographics are not used.
- There is no primary source for the unified system name "Hydra" or for the claim that semantic IDs (identifiers that represent an item as a sequence of semantic tokens) are used. The latter is often confused with a Spotify announcement.
Part 2 re-verification: what was overturned in the existing X and Meta notes
A second round of adversarial verification was run on the X notes, and the Meta notes also went through a second round. The results were 44 OK / 3 DEFECT / 3 MINOR for X and 58 OK / 4 DEFECT for Meta. All of the items below were fixed and folded in.
- x.md had 1 fabricated quote. "our decision not to release training data or model weights" was a sentence absent from the full text of the 2023 blog archive. It was replaced with a sentence that actually exists. The replacement is the reason for withholding training data given in the recap README.
- x.md's statement of the 2023 weight range was wrong. It said "0.0–100.0, negative values not expressible", which is not true. The table in multi-task-ranking was fixed as well.
- There were 4 negative-only ranges, such as −20000..0 in Report, from 2023 on.
- The 2025 boundary values are the same as in 2023. They are not newly added signals.
- x.md's count tally was wrong. It said "all remaining 203 defaults are actual values", but in fact 25 of 173 are 0.0. The direction of the conclusion is kept, and only the figures were corrected.
- facebook.md's count of demotion types was not supported by the source. The 2021 announcement cited as the source for "about 24 types" gives no count. The grade was lowered to inferred.
- Two fixes in instagram.md.
- The 3rd sentence of the follower-count quote differed from the current page, so it was copied again.
- The originality recovery condition is "composition of content in the last 30 days", not "30 days elapsed after a violation".
- One word was wrong in the RankGraph-2 quote in model-freshness.md. It said "constraining", but the original text says "filtering".
- Three minor fixes were also made.
- The number of bulk topics is 7 "or more" (
>6). - The source of the 50/50 quote was stated more precisely.
- e414c17 is "187 files changed". The whole repository has 216 files.
- The number of bulk topics is 7 "or more" (
The same kind of adversarial verification was run on netflix.md itself. The result was 54 OK / 0 defects / 3 minor, and all key figures survived.
- Key figures that survived: 40 rows×75, 80%/20%, $1B, GenRec's 10% of traffic · +1.6% MRR (mean reciprocal rank) · 40×, the cycle layering monthly and daily, 200%, 2-6 months · 2 million/cell, live 100 million devices/1 minute
- The 3 minor items were also folded in.
- The source of the 3 FM consumption modes was split and cited across two posts.
- The qualifier "offline metrics" was attached to UniCoRn's 7%/10%.
- It was stated explicitly that TMIS's "data from two days ago" is an example of an experiment protocol and does not describe the production training cycle.
Part 2 canon update and daily batch build
A new Netflix canon was created, and what was confirmed on Netflix was distributed across the topics notes. A daily batch that runs every day was also built.
- Created
services/netflix.md. The generation split is classic 2015-22 / unified 2023-24 / FM 2025 / LLM-native 2026, and every section carries an evidence grade. topics/feed-diversity.md: added calibration as the 5th approach, the unit in which diversity is measured (list or page), and the point that publishing a formula does not mean it was deployedtopics/candidate-allocation.md: the summary that "the existence of an allocation layer is a function of corpus size", row-level allocation, GenPagetopics/embedding-retrieval.md: the 2nd sample of the "no retrieval" extreme, a contrast between giving up on cold start (X's TwHIN zero vector) and filling it with FM metadatatopics/model-freshness.md: FM's dual monthly and daily cycle, the point that freshness pressure varies with the form of item inflow, the extreme case of precomputetopics/multi-task-ranking.md: the reward-function view (bandit), why the north star is not optimized directly- Nothing was added to
topics/sequence-transformer-ranking.md. Netflix FM is a GPT-style autoregressive structure, and the comparison with X and Meta is in netflix.md. topics/llm-in-recsys.md: the claim in slot 3 was revised to reflect GenRec, and a hypothesis about corpus size and the point where the LLM is injected was added.topics/survey-signals.md: the Netflix section was upgraded to primary-source-based (thumbs, two thumbs, onboarding picker).- Created the daily batch and registered it in pm2 cron. Every day at 09:30 it checks each service for new releases.
- If there are new releases, it analyzes them, updates the canon, records them in the daily, and pushes. If there are none, it only reports to Slack.
- The scripts are
scripts/daily-research.shandscripts/daily-research-prompt.md.
Part 3 update: re-reading the GenRec original text and adversarial verification — Netflix
The GenRec blog was re-fetched and read again, and adversarial verification was run on it. All existing figures survived, but two facts missing from the canon turned up, and both change the understanding. The trigger for re-reading was a request to "explain GenRec".
The scoring structure is not generative. The LLM is an encoder that builds the user representation, and the scorer is still an embedding dot product.
- The original text says: "we extract a pooled hidden state h". An item embedding eᵢ and a scoring head ϕ (dot product or small MLP) are applied to it to get sᵢ, and a softmax is taken.
- The backbone, head, and item embeddings are trained together.
- This structure is also why the prefill (the stage that processes the whole prompt at once) runs in just 1 pass for the whole candidate set rather than for a single candidate.
This is exactly the point where an "LLM ranker" is easily confused with generative retrieval based on semantic IDs, so a warning block was added to
llm-in-recsys.md.The A/B experiment is limited to batch-compute surfaces (surfaces where recommendations are precomputed in bulk rather than in real time). The original text states it explicitly: "batch-compute recommendation surfaces".
- However, the post did not write that "it was not applied to real-time surfaces". That is our own inference, so it was separated out as inferred.
- A ⚠ marker was placed next to the relevant claim, saying not to erase the difference in surface character when comparing side by side with X and Meta.
Verification also caught 3 points to make more precise.
- The "negligible degradation" when the context was compressed to 1/3 is limited to offline ranking metrics.
- 40× and +1.6% must be tied to the offline MRR statement. The claim that production is on par or ahead is written separately as: "10–40× ... depending on configuration".
- There is no separate Limitations section, but sentences about future directions are scattered throughout (natural-language steering, explaining reasons for recommendations, etc.). Summarizing it as "GRPO is the only future work" would therefore be wrong.
As of 2026-08-09 there is no follow-up post to GenRec, so whether it has rolled out is left as an open question observed. However, because the netflixtechblog index is rendered with JS, this check is based on search results. Two open questions were added. One is whether it was applied to real-time surfaces, and the other is who generates the candidate set (the post does not state it).
What to check next
- Re-check the Transparency Center system cards in a browser — card pages block automatic fetch (400/429), and every claim based on the cards is a snapshot as of 2026-08-09.
- Check the original Meta DSA filing and the ACM version of Que2Search — the situation is the same as before.
- Track Netflix's open questions — whether GenRec and GenPage have fully rolled out will be checked through later blog follow-ups, along with whether calibration is deployed, the FM parameter count, and whether ads ranking models start to be published.
- Consider whether to add a Netflix FM section to sequence-transformer-ranking — FM's tokenization (explained by analogy with BPE), how it treats heterogeneous features as tokens, and the multi-token objective would be the third coordinate. The first two coordinates are X's ID-only and Meta's HSTU. This time it was recorded only in netflix.md.
- Pick the next service to cover — candidates are YouTube, where public literature is dense, or TikTok of the USM lineage.