- Sources read: 2
- Canon files updated: 2
- Radar entries: 2
Other changes reviewed today:
- In the same commit, X began recording which retrieval source each candidate came from and introduced a new path that publishes 5% of requests to Kafka.
- X's visibility verdict engine (VF) was rewritten so that verdicts are expressed as a two-branch tree of hide and show.
- Netflix published a RecSys 2026 paper that treats recommender-system observability as a counterfactual measurement problem. In the Row Curators verification, R² against A/B was 0.82.
1Re-ranking service VMRanker is ready to compute the value model — X
Source xai-org/x-algorithm @ 3aa0fa33 — GitHub, 2026-09-22 commit (+5,588/−2,601, 72 files), code. By convention the commit message is the single line Open-source X Recommendation Algorithm. These notes number the commits that followed the fourth release of X's recommendation code (the Gen4 release) in sequence; this commit is Gen4+26.
Background Since the 2026-08-13 Gen4 release, X has mirrored its production code to the open-source repository every day or every other day. home-mixer (the service that assembles the X For You feed) collects candidates from several retrieval sources, scores them with the engagement probabilities predicted by Phoenix, and uses VMRanker to re-rank the candidates for the feed. Phoenix is X's Grok-based recommendation Transformer. This commit covers three directions together: preparing to expand VMRanker's role, recording the retrieval origin of each candidate, and rewriting the visibility rule engine.
What we learnedA. VMRanker gained modes that send value model inputs or compute the value model
VMRanker is home-mixer's post-processing ranker, a gRPC service that until now served only as a DPP re-ranker (a probabilistic model that avoids selecting similar candidates together). With this commit it is ready to expand into a "service that computes the value model itself" (the value model produces a candidate's final effective value).
- VMRanker calls now split into three modes: the existing DPP-only re-ranking, a mode that sends value model inputs for shadow evaluation, and a mode that actually computes the new value model score verified —
home-mixer/scorers/vm_ranker.rs, newhome-mixer/scorers/vm_ranker_request.rs(+74).- The mode is selected by two new parameters,
VMRankerSendValueModelInputsandVMRankerComputeValueModel. Both are false by default. dpp_onlyis the existing behavior.send_inputssends the viewer context and candidate policy flags to run a shadow evaluation.compute_value_modelactually computes the new value model score.- The VMRanker request payload carries the 12 fields of the new domain type
FsRecipientInputs.user_id,country_code,language_code,client_app_id,client_version,user_roles,datacenter,has_phone_number,resurrection_time_ms,product,now_ms,fs_overrides
- It also carries 8 per-candidate fields and 26
PhoenixScoresfields. - A sixth cluster,
Experiment6, was newly registered.
- The mode is selected by two new parameters,
- Two policy decisions made by author cold start handling are now attached to candidates as tags verified —
home-mixer/scorers/author_cold_start.rs(+85/−20).AuthorColdStart::apply_with_decisions()is new and returnsColdStartOutcome { scores, author_policy_zeroed: Vec<bool>, lift: Option<ColdStartLift> }.author_policy_zeroed[i]records whether this candidate was masked to a zero score by the MoE ranking policy. MoE (mixture of experts) is a model structure that selects and uses some of several expert sub-models.liftrecords which candidate was lifted to which rank.- Once
RankingScorerfills these two fields intoPostCandidate, downstream components (VMRanker and the new Kafka pipeline) can see them.
What we learnedB. Each candidate now records which retrieval source it came from, and part of the requests is sent to Kafka
home-mixer gained a new attribution pipeline for analyzing candidate contributions per retrieval source offline. Each candidate records, as a vector, which retrieval source, which cluster, and which rank it entered with, and 5% of requests are published to Kafka together with selected/non-selected labels.
- A new side effect publishes the retrieval candidate list of sampled requests to a Kafka topic verified — new
home-mixer/side_effects/retrieval_candidates_kafka_side_effect.rs(+209).- It is gated by two new parameters,
RetrievalCandidatesKafkaSamplePercent(default 5.0) andRetrievalCandidatesKafkaMaxCandidates(default 200). - For each request, one
RetrievalCandidateBatchproto is published toRETRIEVAL_CANDIDATES_TOPIC. The proto holdsrequest_id,viewer_id,request_time_ms,sample_rate,ranker_cluster,experiment_buckets, and the candidate list. - It is enabled only inside
is_prod(), and in-network-only requests and cached requests are excluded.
- It is gated by two new parameters,
- Candidates now keep a record of the retrieval source that fetched them verified —
home-mixer/models/candidate.rs.- The new field is
PostCandidate::retrieval_sources: Vec<RetrievalSource>.RetrievalSourceis{served_type, cluster: Option<PhoenixRetrievalCluster>, score: Option<f32>, position: Option<u32>}. - The three retrieval RPC sources, Phoenix, MoE, and Topics, migrated candidate creation to the new helper
candidates_from_retrieval_response(), which assigns a rank (1-based) by descending score per served_type. - The Simclusters source also attaches
RetrievalSource::from_served_type(ForYouSimclusters). - For duplicate candidates coming from several sources, the dedup filter (
filters/drop_duplicates_filter.rs) merges theretrieval_sourcesvectors, leaving multiple source records on a single candidate. - Corresponding aggregate metrics were wired up as well.
record_retrieval_source_contributioninside_effects/scored_stats_side_effect.rsemits the following three families.Phoenix.RetrievalContribution.Selected(source·mode=credited/inclusive)PhoenixTopK(k ∈ {10, 100, 200, 500, 1000})SelectedTotal
- The new field is
What we learnedC. The verdict of the visibility verdict engine (VF) became a two-branch tree of hide and show
visibility-filtering (VF) is the service that decides, for each post, whether it may be shown to this viewer. This commit completely rewrote the VF rule engine. The verdict changed from a single flat action to a binary verdict tree, and rules moved from functions to data (a predicate list, an audience, and an action).
- The verdict is now a tree with two branches, hide and show. Hiding includes drop and tombstone (a treatment that leaves only a notice in place of the post) verified — new
visibility-filtering/models/verdict.rs(+62),visibility-filtering/treatment.rs(+446).The previous verdict was a flat
VfAction(3 variants: Allow/Drop/Interstitial). The new verdict is a binaryVerdicttree (Withheld{Drop|Tombstone}|Shown{media?, engagement?}).The new definition:
pub enum Verdict { Withheld(Decided<Withholding>), Shown { media: Option<Decided<MediaInterstitial>>, engagement: Option<Decided<LimitedEngagement>> }, } pub enum Withholding { Drop(FilteredReason), Tombstone(TombstoneReason) }Withheldis terminal (a policy or regulatory drop, or a tombstone).Shownis non-terminal, so the two restrictions, media interstitial and limited engagement, can overlap at the same time.Each decision records the rule name separately in
by: &'static str.The enum slots
TombstoneReason::LocalRegulationsandLimitedEngagementReason::ConversationControlhave a wire format but no rule triggers them yet, so they are marked#[expect(dead_code)]. Local-regulation replacement rendering and conversation-control policy are preparation to come into these slots.
- Rules are now written as data, not functions. A rule consists of a name, a condition list, an audience, and an action verified —
visibility-filtering/rules/rule_spec.rs(+240/−69).- The previous
RuleSpec::{Tweet, Author, Custom}enum was replaced by the structRuleClause { rule_name, when: &[Condition], applies_to: Audience, action: ActionSpec }. - Predicates are cataloged in 4 families: 11
TweetPredicate, 8AuthorPredicate, 5ViewerPredicate, and 5RelationshipPredicate. - There are 3 audiences:
Everyone/ExceptAuthor/ExceptAuthorAndFollowers. - ActionSpec has 4 variants:
Drop/Tombstone/Interstitial{legacy, media}/LimitedEngagement. - The new helper
tweet_timestamp_ms(tweet_id)extracts the tweet creation time from the Snowflake epoch (1288834974657 ms, 22-bit shift). - Policy assembly happens in
rules/registry.rs. The order of the 30 rules forTimelineHomeand the 56 rules forTimelineHomeRecommendationsis locked by the regression testwired_rule_order_matches_pre_migration_sequence.
- The previous
- The NSFW interstitial (a warning screen laid over the content) is applied for different reasons depending on when the tweet was created verified.
- The new rule
NsfwHighPrecisionAdultInterstitialRulebranches on the predicateCreatedAfter(1705536000000)(2024-01-18 UTC). - Tweets created after that are blurred with
InterstitialReason::Nudity(true), and earlier tweets with the existingInterstitialReason::Sensitive(true). - We infer that the semantics of the
NSFW_HIGH_PRECISIONlabel changed by policy on 2024-01-18, and that the rule handles the two periods separately by point in time instead of reinterpreting the old label inferred.
- The new rule
- A new SafetyLevel was introduced for the hydration stage. At this level only 6 tweet-only rules run verified.
- SafetyLevel is the unit that determines the rule list (policy) VF applies. The new level
TimelineHomeHydrationwas introduced as the 4th of 4 variants. - In the hydration stage, only tweet-only rules run, without the author-state and socialgraph rules.
TWEET_LABEL_DROPS/EXCLUSIVE_TWEET_DROP/TAKEDOWN_DROPS/SENSITIVE_VIEWER_DROPS/NSFW_MEDIA_INTERSTITIALS/NSFW_AUTHOR_INTERSTITIAL
- The Thrift
TIMELINE_HOME_HYDRATIONenum (value 4) is now recognized. In the 2026-09-18 commit (Gen4+25), this value was a stub markedunimplemented.
- SafetyLevel is the unit that determines the rule list (policy) VF applies. The new level
What we learnedD. Two filters in Phoenix retrieval serving merged into the model runner, and an int8 quantization option appeared
- In the Phoenix xrex serving code, the bloom filter and topic filter that lived in separate files were unified into a single model_runner verified —
phoenix/xrex/inference/model_runner.py(+328).- The class that absorbed both filters is
RetrievalModelRunner. - The deleted files are
phoenix/xrex/inference/serving_filters_runner.py(−543) andphoenix/xrex/models/recsys_two_tower_serving_filters.py(−173). - The topic filter loads parquet files for 6 options (
1fav_topic_option_{0..5}_1day.parquet) and picks one per request. Option 0 is the default, and 1–5 are A/B alternatives. - The bloom filter allocates mask buffers in pinned host memory per bucket, and Rust (
RetrieveRequestBatch::build_eligible_mask_into_shards()) fills them. - If either of the two is enabled, live post-embeddings hotswap is disabled and serving falls back to the drained finalize path.
- This fallback is presumably to avoid a stale mismatch, because the pinned mask is strongly coupled to all_post_ids inferred.
- The class that absorbed both filters is
- An option to quantize the post embedding table to int8 was added verified — new
phoenix/xrex/inference/int8_post_table.py(+11).- The
quantize_post_table()function converts bf16 to int8 with per-post absolute-max scaling. The scale is float32. - When the
RetrievalModelRunner.enable_int8_post_tableflag is on, it requantizes and caches whenever the post embedding object changes (cache[0] is not xidentity check). RecsysTwoTowerModel.forward()newly takes apost_scalesargument and performs the matmul after the int8 → bf16 conversion.- With the new sharding pspec
(("stage", "expert", "replica", "data"), ("seq", "model")), the first axis of the post embedding expanded to 4-axis sharding. Pipeline and data parallel axes were added.
- The
What we learnedOther changes
- The Phoenix serving engine's copy_port client was heavily refactored so that one slow transfer no longer blocks the next batch verified —
phoenix/crates/serving/xai-recsys-engine/src/copy_port_client.rs(+879/−93).- The copy_port client is the client with which a serving node downloads embedding tables and dense weights in parallel from the trainer or peers.
- The batch-by-batch approach is gone, replaced by streaming continuation based on
tokio::task::JoinSet, so a slow-tail transfer does not block the next batch. - There are two new env vars.
COPY_PORT_TRAINER_CONNS_PER_SOURCEis the number of parallel connections opened to one trainer (clamped to 1–16).XAI_RECSYS_RDMA=1is RDMA mode, in which connection multiplexing is disabled. - The new
spawn_striped_trainer_downloads()splits one trainer's list of owned files evenly by the number of connections and pipelines them. - This is presumably an optimization to reduce checkpoint hot-swap latency inferred.
- Two constants hardcoded in home-mixer were moved to FS (FeatureSwitch, a configuration switch whose value can be changed at runtime) parameters verified.
- The
NEW_USER_OON_WEIGHT_FACTORconstant moved toNewUserOonWeightFactor(FSrust_home_mixer_new_user_oon_weight_factor, default0.00001). - The
ANN_MAX_POST_CANDIDATE_AGE_HOURSconstant moved toSimclustersMaxCandidateAgeHours(FSrust_home_mixer_simclusters_max_candidate_age_hours, default 48). - The Simclusters cache key was extended to
signal_id → (signal_id, max_candidate_age_hours), so experiments with different ages get different cache entries.
- The
- A kill-switch decider that can turn off the Phoenix MoE candidate source immediately was added verified —
home-mixer/sources/phoenix_moe_source.rs(+66/−19).- When the new decider
disable_home_mixer_phoenix_moe_sourceis on, the MoE source is disabled immediately. - An FS takes time to roll out, whereas a decider propagates within seconds.
PhoenixMoeColdStartMaxResults(default 0) was also introduced, so the cold-start slice cap introduced for non-MoE sources in the 2026-09-18 commit (Gen4+25) is now exposed for MoE as well.
- When the new decider
- Grox (X's LLM annotation pipeline) now hands replies that contain a quoted tweet from its simple reply scorer to the full scorer, and repairs LLM output JSON in 3 steps verified —
grox/flows/reply_spam/classifier_simple_reply_scorer.py(+103/−3).- The simple scorer is
SimpleReplyScorer. A reply with a quoted tweet (quoted_post) skips the simple path and is delegated to the fullReplyScorerpath (countertask.spam_comment_detection.full_scorer.count). - The LLM output JSON parser defends in the following 3 steps.
- Extract with
re.search(r"\{.*\}", output, re.DOTALL). - If that fails, use
json_repair.repair_json(). - If it still fails, pull out only the number with the regex
r'"score":\s*([\d.]+)'.
- Extract with
- Parse failures are counted in 3 families:
task.reply_ranker.invalid.count{reason=invalid_format|invalid_score_format|score_out_of_range}. - The new histogram
ranked_replies_scoresobserves the score distribution in 4 buckets (0.0, 1.0, 2.0, 3.0).
- The simple scorer is
"The framework treats recommender-system observability as a counterfactual measurement problem: estimating what the recommender would have done, and what engagement would have followed, in the absence of a specific content item or model decision." — Beyond Raw Engagement (arXiv 2609.22747), 2026-09-19 (quoted from the Netflix source; see the section below)
Canon update Added a Gen4+26 row to the Public source Gen4 table in services/x.md, summarizing commit 3aa0fa33. The three axes of the open questions are what the VMRanker value model actually is, how retrieval attribution is used downstream, and when the VF Tombstone/LimitedEngagement slots get filled; all are to be watched in later commits.
Why it matters The VMRanker expansion, the retrieval attribution pipeline, and the VF verdict tree rewrite arrived together in one commit, and all three axes follow Gen4's recurring pattern of "infrastructure wiring is complete but ranking behavior is unchanged." However, the Kafka publishing of retrieval candidates already runs on 5% of eligible requests under the default of 5.0 (percent; see RetrievalCandidatesKafkaSamplePercent above).
- VMRanker is ready to compute the value model.
- The retrieval attribution pipeline records candidate origin on the candidate itself and produces a 5% Kafka sample along with aggregate metrics.
- The VF verdict tree rewrite can express overlapping restrictions and opened the Tombstone/LimitedEngagement slots.
- In the Phoenix xrex serving layer as well, the bloom filter and topic filter that were separate files were unified into model_runner, and int8 post table quantization came with them. This is an axis of large-scale readiness for retrieval serving.
- There are three checkpoints to watch: when
VMRankerComputeValueModel=trueis turned on in an experiment, which offline job takes the retrieval attribution Kafka data as input, and in which rule the Tombstone/LimitedEngagement slots are first filled.
2RecSys 2026 paper treating recommender observability as a counterfactual measurement problem — Netflix
Source Beyond Raw Engagement: A Counterfactual Observability Framework for Recommender Systems at Netflix (arXiv 2609.22747) — arXiv, v1 submitted 2026-09-19, paper. Accepted at RecSys 2026 (2026-10-02, Minneapolis). Of the four authors, three (Chaoran Guo, Ding Tong, Scarlet Chen) are affiliated with Netflix (Los Gatos), and Ting-Po Lee states that the research was conducted at Netflix (affiliation location San Jose). The HTML version confirmed the email domain @netflix.com for the three.
Background In a large-scale recommender system, looking only at raw engagement signals such as views and clicks mixes several factors together. The mixed factors are content quality, model behavior, presentation bias, and audience reach. This makes it hard to attribute which cause produced which outcome. For example, if a new model misplaces good content and the CTR comes out low, that content is undervalued as long as only raw CTR is examined. Netflix says it has built and deployed, over several years and on top of several recommenders, a framework that approaches this problem by "redefining recommender-system observability as a counterfactual measurement problem." This approach estimates what recommendation would have appeared, and what engagement would have followed, had a specific content item or a specific model decision not existed. Counterfactual measurement itself is not a new concept. The angle of this source is the viewpoint of "supporting two audiences, content creators and model developers, with a single measurement foundation," and the extension to cascading recommenders (multi-stage recommendation in which upstream stages filter the candidate pool first). This paper released the methodology for three axes (bias reduction, relativity, incrementality) and one production verification case (Row Curators A/B alignment R²=0.82, automatic detection of label misattribution).
What we learnedA. Measurement has three axes and presupposes logged exposure probabilities left by exploration
- Netflix deploys measurement along three axes in its own recommenders verified §3.1.
- Bias reduction corrects exposure propensity with SNIPS. SNIPS is the self-normalized variant of inverse propensity score (IPS, an estimate that weights observations by the inverse of the exposure probability). The alignment between the policy $\pi_e$ and the logging policy $\pi_0$ is gauged by a match function $m$, and the paper states explicitly that exact matching is a special case of unbiased estimation.
- Relativity separates algorithm performance from content performance. It uses the SNIPS difference for policy-to-policy comparison and position-adjusted SNIPS for item-to-item comparison. To mitigate position bias, it compares each position lift of content $c_i$ against random content and then aggregates by position weight.
- Incrementality measures the real contribution of content by asking counterfactually "how much value is lost if this item is removed." Netflix presents the methods for this axis in two cases, single-stage and cascading.
- The framework takes an Exploration & Exploitation module as a precondition verified §3.1.
- The framework operates on a contextual bandit or RL setup. Arm $a_j$ is selected with probability $\pi(a_j|x_j)$ according to policy $\pi$, and that probability is logged.
- In other words, the framework cannot be applied as is to a recommender that does no exploration and has no logged propensity.
- Netflix states that this condition is already met by most of its own recommenders.
What we learnedB. In single-stage, incremental contribution is measured against a counterfactual policy with the item removed; in cascades, the method differs by audience
- Single-stage incrementality is measured with Leave-One-Out measurement verified §3.2.
- It places a "Leave-One-Out policy" on top of the Exploration policy, simulating a counterfactual in which a specific item is removed, and aggregates the SNIPS difference of the two policies by position.
- The match function is 1 under one of the following two conditions.
- The explored arm is the top pick of the Exploration policy and is not the item being removed.
- The explored arm is the second-best and the top is the item being removed.
- To reduce variance, the logged probability is clipped from below at the 10th percentile.
- In cascading recommenders, the method differs by audience verified §3.3.
In a cascade the candidate pool is filtered upstream, so low engagement may be due to upstream filtering.
For upstream model developers, the question is "was it good to put this item in the candidate pool," and Leave-One-Out is reused. However, the target action is a set rather than a single top pick, so the match $m$ is redefined with a set similarity such as Jaccard.
- If the lift is large for many items, it means the upstream really adds value to the downstream.
- If not, it means the pool is interchangeable from the downstream's perspective.
For content creators and platform observability, each item's contribution across the whole pipeline is decomposed into two values.
Incrementality(i) = Irreplaceability(i) · Universality(i)
- Irreplaceability is the conditional causal lift when i is in the candidate pool, estimated with the self-normalized Hájek IPS.
- Universality is the probability that i is eligible.
What we learnedC. Row Curators' offline measurement aligned with real A/B at R²=0.82, and one case automatically detected label misattribution
The alignment between Row Curators' offline incrementality measurement and real A/B was R²=0.82 verified §4.2.
- A "Row Curator" on the Netflix homepage is a title collection row created by content curators.
- The offline incrementality measurement for this row was compared with the real A/B ground truth. The A/B removed the row series from the recommender and measured the loss in user engagement.
- Across 11 A/Bs, the alignment was R²=0.8212.
- Netflix cites robustness in heterogeneous propensity environments as the reason for choosing the self-normalized Hájek estimator.
- There are three production details.
- Propensity is clipped to [0.0001, 0.9999].
- At least 100 observations per row are required.
- Results are aggregated across homepages of different lengths.
"For the Irreplaceability estimate, we tried different estimators and eventually selected the self-normalized Hájek estimator for robust observability signal under such heterogeneous propensities. In practice, we clip the propensities to [0.0001, 0.9999] to further reduce variance, require at least 100 observations for each row, and aggregate across homepages of varying lengths. Across 11 A/B tests, the R² between our proposed row-incrementality measurement and the A/B-test ground truth is 0.8212, providing strong validation of our approach." — arXiv 2609.22747, 2026-09-19
In the model developer observability case, label misattribution was detected automatically verified §4.3.
- Incrementality time-series monitoring detected a performance dip for a specific content A while other similar content stayed stable.
- Tracing the cause showed it was "positive label misattribution in the model."
- The authors conclude that the framework makes discoveries that raw engagement would miss and lets model developers reach the root cause faster.
What we learnedD. There are five things the paper does not disclose
- The paper does not state the following five things observed close reading of the paper.
- It does not name which recommenders the framework was deployed on. The homepage row curation is the only clear case.
- The absolute values of the core online metrics are not public.
- Its relationship to generation lines such as FM, GenRec, and GenPage is not stated. It is unclear whether this framework was used for GenRec's A/B alignment or is its own line.
- FM is Netflix's Foundation Model that centralizes member representations. GenRec is an LLM ranker, and GenPage is a model that generates a whole page with a single Transformer.
- The individual results of the 11 Row Curators A/Bs are not presented in the body of the paper, and are aggregated only into a single R².
- It does not mention countermeasures for recommenders the framework does not yet cover (such as those without exploration).
Canon update Created a new subsection, "Counterfactual observability framework (2026-09, RecSys 2026)," under the Training cycle·evaluation section of services/netflix.md. The canon already held the statement "offline metrics do not predict A/B (the same admission for 10 years)" and the way the popularity-based winner proxy of MediaFM (Netflix's foundation model for video previews) acts as a gate. This source went in beside them as a statement that a separate "in-operation observability" axis is being set up on the basis of counterfactual measurement. That subsection holds the Row Curators A/B alignment R²=0.82 and the automatic detection case of label misattribution. It also states explicitly the difference in position: the MediaFM proxy is "checkpoint gating (the qualifying round)," whereas this framework is "production monitoring (observation during the match)."
Why it matters This source presents its own framework, based on counterfactual measurement, for "production observability," one axis of the alignment problem between offline evaluation and A/B tests. Netflix has candidly acknowledged that this alignment is low ("does not predict A/B results as well as we would like," 2015). Row Curators A/B alignment R²=0.82 is a strong result: the framework's offline estimates explain 82% of the actual A/B results (given that a random baseline would be near 0).
- In the repository canon, this framework sits alongside MediaFM's popularity-based winner (an offline proxy for checkpoint gating), but its role is different. The winner is selection before deployment, and this framework is observation after deployment.
- Whether this framework was used to verify the A/B results in the GenRec paper is a follow-up item.
- Because it presumes exploration-based logged propensity, it cannot be applied as is to a non-exploring recommender (for example, a pure Foundation Model shadow deployment).
- Netflix's release of its recommender measurement methodology as a separate paper is the first company statement on the counterfactual measurement line in this repository's corpus. Its position and purpose are separate from the offline gating of MAPS (Netflix's artwork and video preview personalization system).
Radar
Today I triaged 30 new arXiv cs.IR papers and passed 3, and 2 of them were added to radar.md. The remaining 1 that passed is the Netflix source, which section 2 above covers in detail and which was folded directly into the service canon, so it is not added to the radar. The number of parsed <entry> elements is 30, and the target period is 2026-09-18–09-21.
- UNIQUE is a Baidu·Beihang·CityU paper that unifies retrieval and ranking in an industrial mobile feed and uses single-layer flat quantization verified — arXiv 2609.23718, 2026-09-20 v1.
- It was accepted at RecSys 2026.
- The author affiliations were confirmed in the HTML version: Baidu Inc., Beihang University, Hong Kong Institute of AI for Science.
- The paper identifies two problems: hierarchical quantization instability in candidate retrieval and information loss between the retrieval and ranking stages.
- It claims that unifying generative code-based retrieval and target-aware ranking in an early-fusion single architecture aims at both end-to-end training and efficient candidate generation.
- Baidu is not a canon service (a service this repository tracks with a canon document), but it operates the Baidu App, a large-scale industrial mobile feed.
- Whether the paper states production deployment and A/B figures at the abstract level requires a close read. It was added to the radar as awaiting deep dive.
- MuSeR is a Kuaishou multi-interest sequence retrieval that compresses user histories of 10^4–10^5 scale with hierarchical temporal compression on top of the deployed MGS verified — arXiv 2609.23677, 2026-09-20 v1.
- The HTML version confirmed that the author affiliation is a Kuaishou domain.
- The approach keeps recent actions at full resolution and compresses older segments by progressive pooling, so that lifelong history fits within a fixed serving budget.
- Kuaishou already has several threads on the radar, such as SWIM, UniRec, and DrEM.
- MuSeR sits adjacent to Tencent's ChronicleRec, and both pre-compress ultra-long behavior sequences. MuSeR adds one data point to the radar's lifelong user modeling angle.
The other 27 were rejected and are not under watch. They did not satisfy the requirement triangle: platform-company authors, a production A/B statement, and novelty in mechanism or scale. The rejected list is Ascent (clinical MCP), UK-PRBENCH (legal case law retrieval), Semantic ID reproducibility study, Baidu·Google AI search auditing (external audit), Graded-Relevance e-commerce multimodal, publication bias biomedical causal search, UniK universal knowledge, Q-TIE temporal IR, YouTube Music LLM rationale (music domain), UNDRR disaster schema extraction, Redundancy Reduction Sequential Recommendation (academic), PSD LLM agent memory, Answer-Oriented Context AI search, candidate-job matching bi-encoder eval, Brand Visibility AI Search, MM-ContextFold multimodal RAG, EU research policy, Inherit4Rec (Kuaishou parameter inheritance, mechanism-novel but rejected in this batch because it mentions no production A/B), Static-vs-Agentic RAG Taiwan history, Attributable RAG citations, R-GEAN medication change (EHR), Per-Query Gating LLM rerankers, Dense-Sparse Fusion BEIR SciFact, DOA-SORT multi-object tracking (non-IR), GEO score cross-engine, AdaMerge visual doc retrieval, and semantic candidate-job matching hybrid retrieval.
Industry blog scanning is done only on Mondays. Today, a Wednesday, was not a target.
What to check next
- Check how the three axes opened by the X commit 3aa0fa33 connect in follow-up commits. There are three checkpoints to watch:
- When
VMRankerComputeValueModel=trueis turned on by an experiment (currently false by default) - Which offline job takes the 5% sample of the retrieval attribution Kafka (
RETRIEVAL_CANDIDATES_TOPIC) as input - In which rule the VF
TombstoneReason::LocalRegulations/LimitedEngagementReason::ConversationControlslots are first filled
- When
- Check how far the Netflix counterfactual observability framework is used — watch whether it was used to verify GenRec's A/B results and whether sources for other surfaces (FM, GenPage, MediaFM, MAPS) quote this framework's measurement. Also watch whether follow-up statements appear at the time of the RecSys 2026 presentation (2026-10-02).
- Decide whether to read the UNIQUE original text closely — check whether the Baidu App feed deployment claim and A/B figures appear in the body outside the abstract. If they do, decide whether it is a promotion candidate for an SID (semantic ID, a token sequence that represents an item as hierarchical codes) / early-fusion thread such as
topics/generative-retrieval.md. Re-check at the time of the RecSys 2026 presentation.