◂ 일일 리포트2026-08-29 빌드
FEED RESEARCH · 일일 리포트

2026-08-15

토요일 · 읽는 데 약 40분
  • 읽은 자료 2건 (X 4세대 드랍 1건
  • arXiv triage 30건 중 관찰 1건)
  • 정본 반영 1개 파일 (x.md 대폭 개정)
  • 다이어그램 갱신 1건 (x-pipeline.svg)
  • 레이더 갱신 1
한 줄 요약테제 대량 변경 — X가 2026-08-13에 4세대 코드를 공개했다. 가중치가 처음 값으로 공개됐고(reply 5.0, favorite 0.5, report −234, ...), OON 배수(0.75)·저자 다양성(decay 0.5, floor 0.25)·VMRanker DPP(θ=0.65, K=150) 상수 전부 나왔으며, SimClusters가 home-mixer 안에 OON retrieval 소스로 들어왔고, visibility-filtering 서브레포와 labeling 파이프라인(Grox·agatha·bdsm·user-cred-v2·pnsfwmedia·scarecrow/botmaker·abuse-enforcement-service·safety-label-user-agg·under-the-hood 등 20+ 서브시스템)이 통째로 열렸다. Phoenix는 학습 코드·합성 데이터 생성기까지 포함해 end-to-end 실행 가능해졌다.

1. X 알고리즘 4세대 드랍 — 가중치·SimClusters·visibility-filtering·labeling 파이프라인 통째 공개 (⚠ 테제 대량 변경)

자료 xai-org/x-algorithm @ 47c1bcd — "Open-source X Recommendation Algorithm" — 2026-08-13 17:09 UTC (뒤이어 .gitattributes 정리 a389166), 공개 소스코드. 커밋 하나로 +363,246 / −11,640 (총 파일 300개+, GitHub API 페이지네이션 한계로 정확한 파일수는 트리에서 재구성). README.md #latest-update--august-13th-2026, docs/BIDIRECTIONAL_BOOST_CHANGE.md, home-mixer/params/param.rs, visibility-filtering/rules/registry.rs.

배경

이 저장소의 services/x.md는 지난 3개월 동안 "공개 소스 3세대"를 정본으로 유지해 왔다 — 2023 Scala 초판 → 2025 Scala 리프레시(c54bec0, tweet-mixer 신설) → 2026 Rust 재작성(aaa167b·e414c17·0bfc279, 총 216파일). 그리고 정본의 가장 큰 미해소 절이 두 개 있었다.

첫째, 가중치. 목적함수의 형태(가중합)는 확인됐지만 실제 값은 세 세대 어디에도 없었다. 2026 Rust에서는 crate::params 모듈 자체가 레포에서 빠져 있어 FavoriteWeight 같은 심볼이 호출부에만 있고 정의가 없었다. 널리 인용되는 "reply 13.5 / good_profile_click 12.0 / report −369" 표는 2023-04-05 스냅샷 하나뿐이고, 그것도 저자가 직접 "프로덕션과 작은 차이 있을 수 있다"고 단서를 붙여 놓은 문서였다.

둘째, 안전성/visibility-filtering·labeling 파이프라인. 홈미서 코드에는 VFFilter·AncillaryVFFilter가 fail-closed로 걸려 있었지만, 그 필터가 참고하는 라벨을 누가 언제 어떻게 붙이는가는 완전한 블랙박스였다. grox/ 서브레포는 부분 공개(주석 파이프라인 골격만), 그 외 계정 레벨 판단·PageRank·인위적 행동 탐지·NSFW 미디어 분류·규칙 엔진·집행 서비스는 아예 언급이 없었다.

이번 드랍이 두 절을 통째로 뒤집었다. 새 README가 **"Adds key configuration parameters (including weights used to blend predicted action values into a score for a post)"**로 시작해 home-mixer/params/param.rs 1084줄이 새로 붙었고, **"Adds code for systems that impact whether a post is filtered from the For You feed"**로 이어 서브시스템 15개+가 신설됐다. Phoenix는 학습 코드·synthetic 데이터 생성기·QUICKSTART까지 얹혀 end-to-end 실행 가능해졌고, 새 SimClusters 서브레포가 홈미서의 OON retrieval 소스로 배선됐다.

새 README가 커밋 메시지에서 자평하듯 이 릴리즈의 성격은 이제 "로직의 형태를 보여주는 것"에서 "값과 규칙을 검증 가능한 형태로 붙이는 것"으로 넘어왔다. 그와 짝으로 x.com/i/under_the_hood 라는 계정 단위 라벨 투명성 툴이 파일럿 공개됐다 — 유저가 자기 계정과 포스트에 붙은 visibility 라벨을 조회할 수 있고 그 라벨 → 이 레포 코드로 왜 그런 취급을 받는지를 대조할 수 있게 설계됐다는 것이 새 README의 주장이다.

새로 알게 된 것 — 가중치

home-mixer/params/param.rs가 코드에 박힌 프로덕션 기본값을 담는다. 파일 헤더의 주석이 이 파일의 성격을 정확히 규정한다:

// mirrored from config feature-switch defaults; last sync 2026-08-12T04:09:22Zhome-mixer/params/param.rs:1

새 README의 "Experiments and Configuration" 절이 이 미러링의 의미를 못박는다:

"To help people understand the production defaults, we run cron scripts that set the defaults in this repository's code to be the primary production values, for example in home-mixer/params/param.rs." — README.md #experiments-and-configuration

즉 이 파일의 숫자는 "예시"나 "데모 기본값"이 아니라 프로덕션 primary value를 크론이 매일 밀어 넣는 미러다. 정확도의 상한은 마지막 sync 시각(2026-08-12 04:09 UTC).

엔게이지먼트 헤드 가중치 (26개, 정렬은 파일 등장 순) [확인] — 위 URL:

헤드 param 심볼 기본값 비고
favorite FavoriteWeight 0.5 2023-04-05 스냅샷의 0.5와 일치
reply ReplyWeight 5.0 2023 스냅샷의 13.5와 상이
↳ +상호팔로우 원본 boost BidirectionalFollowReplyWeightBoost 15.0 2026-07-13 도입 20 → 2026-07-24 15로 하향 (아래 사례 참조)
retweet RetweetWeight 1.0 2023 스냅샷과 일치
photo_expand PhotoExpandWeight 0.05
video_open VideoOpenWeight 0.05
click (포스트) ClickWeight 0.4 2023 good_click 11·good_click_v2 10과 스케일 상이 — 다른 헤드일 가능성
open_link OpenLinkWeight 0.2
profile_click ProfileClickWeight 0.0 2023 스냅샷 good_profile_click 12에서 완전 제거
video quality view (vqv) VqvWeight 0.05
share ShareWeight 2.0
share via DM ShareViaDmWeight 5.0
share via copy link ShareViaCopyLinkWeight 20.0 최고 양수 개별 헤드
dwell DwellWeight 0.0 실전 dwell 신호는 연속형 아래
↳ +상호팔로우 원본 boost BidirectionalFollowDwellWeightBoost 0.0 코드는 있으나 미배포
quote QuoteWeight 5.0
quoted_click QuotedClickWeight 0.05
quoted_vqv QuotedVqvWeight 0.0
follow_author FollowAuthorWeight 4.0
post_unexplored PostUnexploredWeight 0.02 새-작성자 부스트, 아래 참조. PostUnexploredWeightInNetworkOnly = true
연속형 dwell time ContDwellTimeWeight 0.004
연속형 click dwell time ContClickDwellTimeWeight 0.0
연속형 active_secs 5분 residual ContActiveSecs5mResidualNormWeight 0.0 새 README "Attention" 카테고리

부정 헤드 가중치 (5개) [확인]:

헤드 param 심볼 기본값 2023 스냅샷 대응
not_interested NotInterestedWeight −43.2 대응 없음 (당시 없던 헤드)
block_author BlockAuthorWeight −31.2 대응 없음
mute_author MuteAuthorWeight −58.8 대응 없음
report ReportWeight −234.0 2023 report −369 → 완화 방향
not_dwelled NotDwelledWeight −0.02 대응 없음 (canon이 유일하게 잡아냈던 새 부정 헤드)

파일 헤더 위 주석 세 줄이 부호·크기 규모의 의미를 규정한다:

"These weights reflect a combination of how much an action is valued in ranking and typical propensities of these actions across the X network (e.g. negative feedback is overall rare)." — home-mixer/params/param.rs:281

즉 report −234의 크기는 "리포트 한 번의 상대 중요도"가 아니라 가치 × 1/propensity의 곱이다 — 리포트가 워낙 드무니까 큰 절대값이 붙어 있는 것.

새로 알게 된 것 — 가중치 밖 상수

정본이 오래 "네 값 전부 비공개"라고 못박아 왔던 OON 배수·다양성·VMRanker 상수가 전부 나왔다:

  • OonWeightFactor = 0.75 [확인] — OON 포스트에 곱하는 감쇠 (2023-04-05 스냅샷의 out_of_network_scale_factor 0.75와 일치)
  • TopicOonWeightFactor = 0.5 [확인] — 토픽 요청일 때 더 엄격
  • NewUserAgeThresholdSecs = 0 [확인] — 신규 유저 라우팅 임계가 0초라는 것은 사실상 코드 경로가 비활성 상태로 미러링돼 있다는 뜻 [추정]
  • AuthorDiversityDecay = 0.5, AuthorDiversityFloor = 0.25, EnableAuthorDiversity = true [확인] — 같은 작성자의 2번째 포스트에는 (1−0.25)·0.5¹+0.25=0.625 배, k번째에는 (1−0.25)·0.5ᵏ+0.25 배가 곱해진다
  • VMRankerDppTheta = 0.65, VMRankerDppMaxSelectedRank = 150, EnableVMRanker = true, VMRankerValueModelId = "dpp", VMRankerClusterId = "Experiment3", VMRankerEnableFallback = false [확인] — 정본이 남긴 열린 질문 "VMRanker/DPP가 켜져 있는가" 에 대한 직접 답: 켜져 있다, DPP를 씀, 폴백 없음. 즉 실패 시 fail-open 조용 스킵이라는 canon 관찰이 그대로 유효
  • PhoenixMaxResults = 1000, ThunderMaxResults = 1200, TweetMixerMaxResults = 800, EnableTweetMixerSource = false, EnableSimclustersSource = true, EnablePhoenixSource = true [확인]레거시 tweet-mixer는 기본 off로 미러링됐다. SimClusters가 그 자리를 대체
  • ShadowTrafficDefaultPercent = 0.3 [확인] — 새 Phoenix 클러스터에 30% shadow 트래픽이 기본
  • ColdStartImpressionThreshold = 1000 [확인] — canon이 "신규 아이템에 아무 장치 없다"고 했던 지점 — 실은 임프레션 임계로 정의된다. 임프레션 1000회 미만이면 "새 작성자/포스트"로 분류. 아래 PostUnexploredWeight로 부스트

새-작성자 부스트 (New-Author Boost) — 세 번째 조정 인자 [확인]README.md #scoring-and-ranking:

새 README가 스코어링 조정 인자를 세 개로 명시한다:

"Author Diversity ... Out-of-Network Discount ... New-Author Boost: posts from authors whose impressions are below a threshold are lifted toward a target position." — README.md #scoring-and-ranking

정본은 조정 인자를 (1) 작성자 다양성 감쇠 (2) OON 배수 두 개로만 기록해 왔다. 세 번째로 새-작성자 부스트가 있고, param.rs에 PostUnexploredWeight = 0.02·PostUnexploredWeightInNetworkOnly = true·EnableMultiplicativePostUnexplored = false·MultiplicativePostUnexploredAlpha = 0.0·ColdStartImpressionThreshold = 1000로 정의된다. 즉 기본은 가산형 부스트고 곱셈형은 비활성, 인네트워크에만 적용. [확인]

새로 알게 된 것 — 파이프라인 구조

정본이 오래 "SimClusters, TwHIN, UTEG/GraphJet, FRS, Earlybird, Lists, Communities — 이 이름들은 home-mixer/ 어디에도 안 나온다"고 못박아 왔다. SimClusters가 뒤집혔다. 새 README:

"In-Network thunder/ keeps recent posts from the accounts a viewer follows in memory · Out-of-Network phoenix/ retrieval and simclusters/ find posts from accounts the viewer does not follow" — README.md #overview

즉 후보 소스가 Thunder(인네트워크) + Phoenix retrieval + SimClusters + (기본 off된 tweet-mixer 레거시) 로 재편됐다. SimClusters 서브레포가 새로 생겼고, simclusters/ 코어 알고리즘(SVD 기반 sparse 저차원 임베딩, 2020 KDD)이 여기 들어와 있다는 뜻이다. 세부는 simclusters/ 통째 심층 분석 필요.

필터도 14 → 17로 늘었다 [확인]README.md #filtering:

새 3개 필터가 붙었다.

  • OONRetweetReplyFilter — 팔로우 안 하는 계정의 리트윗·답글 + 부모 없는 답글 (기존 RetweetDeduplicationFilter와 별개)
  • OONNsfwSimclustersFilterSimClusters 소스에서 나온 성인 컨텐츠 계정의 포스트를 팔로우 안 하는 유저에게 드롭. SimClusters 도입에 짝지어 신설된 필터
  • NewUserMinEngagementFilter — 신규 유저에게 OON 포스트 중 참여 임계 미달인 것 제거. 관련 param: NewUserMinEngagementThreshold, NewUserMinEngagementFilterMetric, NewUserMinEngagementFilterUseRatio, NewUserMinEngagementFilterMaxAccountAgeSecs, NewUserMinEngagementFilterMaxResurrectionAgeSecs
  • InventoryHoldoutFilter결정론적 유저×포스트 해싱으로 설정된 %의 인벤토리를 홀드아웃 (정본 미기재였고 canon이 놓친 필터)

canon이 기록한 BackupFilter no-op, TopicIdsFilter 하드코딩 supertopic 등의 관찰은 유효.

새로 알게 된 것 — 예측 헤드 (문서상) 24개

새 README가 헤드를 카테고리 5개, 총 24개로 재배치했다 [확인]README.md #scoring-and-ranking:

  • Engagement (7): favorite · reply · repost · quote · share · share via DM · share via copy link
  • Clicks (6): post · profile · link · photo expand · video open · quoted post
  • Attention (5): video quality view · dwell · dwell time · click dwell time · active seconds
  • Author (1): follow author
  • Negative (5): not interested · mute author · block author · report · not dwelled

정본은 세 가지 헤드 카운트가 갈린다고 기록해 왔다 — 공개 체크포인트 19 / Rust 스코어러 22 / VMRanker proto 21. 새 README는 문서 상 24를 못박고, param.rs의 weight 심볼도 25개(공제 = 헤드 예측값이 아닌 heuristic weight)와 일치. 소스 코드 상 실 개수는 새 phoenix 학습 코드 심층 분석 필요.

새로 알게 된 것 — visibility-filtering 서브레포

visibility-filtering/rules/registry.rs 912줄이 정책 세 개를 정의한다: FilterAll(모든 것 드롭), TimelineHome(팔로잉 대상 기본 규칙), TimelineHomeRecommendations(추천 대상 = 기본 규칙 + OON 전용 드롭). [확인]

base_home_rules() — 팔로잉·추천 공통 28개 규칙 [확인]:

계정 상태(SUSPENDED_AUTHOR_DROP, DEACTIVATED_AUTHOR_DROP, ERASED_AUTHOR_DROP, OFFBOARDED_AUTHOR_DROP, ProtectedAuthorDropRule) → 뷰어 관계(ViewerBlocksAuthorRule, ViewerMutesAuthorRule, MutedRetweetsRule) → 트윗 라벨(PDNA_DROP, BOUNCE_DROP, SPAM_DROP, FOR_EMERGENCY_USE_ONLY_DROP, FOSNR_HATEFUL_CONDUCT_DROP, FOSNR_VIOLENT_SPEECH_DROP, FOSNR_ABUSE_DROP, FOSNR_CIVIC_INTEGRITY_DROP) → 트윗 상태(NullcastedTweetDropRule, DropStaleTweetsRule, DropLegalTakendownPostRule, DropLocalLawsTakendownPostRule) → NSFW 뷰어 게이팅(SensitiveViewerLoggedOutDropRule, SensitiveViewerUnderageDropRule, SensitiveViewerNoStatedAgeDropRule) → 배제 트윗(DropExclusiveTweetContentRule) → NSFW 인터스티셜(NSFW_HIGH_PRECISION_INTERSTITIAL, GORE_AND_VIOLENCE_INTERSTITIAL, NSFW_CARD_IMAGE_INTERSTITIAL, NsfwAuthorInterstitialRule).

timeline_home_recommendations_policy() — 위 28개 + OON 전용 26개 추가 = 54개 [확인]:

DMCA/지리 제한 미디어(2) → NSFW 계정(4) → NSFW/폭력/DoNotAmplify/스팸 라벨 트윗(9) → NSFW/스팸/impersonation/deactivated/adult 관련 유저 라벨(11).

정본이 canon 함정 절 #2에서 이미 관찰했던 "인네트워크와 OON에 다른 안전 레벨"의 실체가 여기 있다 — 팔로잉 유저에게는 28개 규칙만, OON 추천에는 54개 규칙. 첫 번째 드롭 판정에서 평가 종료(short-circuit), 그리고 OON 전용 규칙군은 캐치업 드롭만 가능하고 인터스티셜/알로우는 없음(canon 함정 #2와 일치).

canon 함정 #1 (fail-closed)의 실체 확인. visibility-filtering/rules/registry.rs의 정책 반환값은 Verdict 구조체지만, README가 interstitial은 UI 처리로 넘기고 drop이 실제 필터링이라고 명시. [확인] README.md #labeling-path:

"interstitial ──► the post stays in the feed; nothing in this repository draws the interstitial"

새로 알게 된 것 — labeling 파이프라인

새 README가 4단계 "Labeling Path"로 정리한다: Content Understanding → Labeling Rules → Storage → Visibility Filtering. 각 서브시스템의 역할이 처음 공식 문서화됐다 [확인]:

  • grox/ — nearline 컨텐츠 분류기. 정본에는 이미 부분 반영
  • media-model-proxy/ — 이미지·비디오 모델(NSFW, 폭력/고어, 혐오 심볼, 주제 분류, 알려진 미디어 매칭) 서빙 프록시
  • clip/ — CLIP 이미지·텍스트 임베딩 모델 학습 (미디어 분류기 입력)
  • adult-content/ — 성인 미디어 분류기 학습·캘리브레이션
  • pnsfwmedia/ — CLIP 임베딩 + 계정 스코어 결합 성인 미디어 판별기
  • agatha/ — 오프라인 배치. 다른 계정이 이 계정 포스트에 어떻게 반응했나 기반 라벨(블록·리포트·스팸 리포트 대비 favorite 비율)
  • bdsm/ — 계정의 시계열 행동 시퀀스에서 inauthentic/abusive 신호 추출 (Rust + proto + training + tests 서브디렉토리)
  • user-cred-v2/ — 팔로우+엔게이지먼트 엣지 위 PageRank로 계정 신뢰도 스코어
  • scarecrow/ — 이벤트 반응형 규칙 러너. botmaker/를 규칙 엔진으로 임베드
  • botmaker/ — 규칙 DSL·컴파일러·런타임
  • botmaker-rules/ — scarecrow가 로드하는 실제 규칙 (일부는 게이밍 방지 목적 미공개)
  • abuse-enforcement-service/ — 모델 스코어 기반 계정 조치(라벨링·챌린지·서스펜션)
  • safety-label-user-agg/ — 계정 소유 포스트가 받은 라벨을 계정 레벨로 집계
  • visibility-filtering-client/ — visibility-filtering 서비스 클라이언트 라이브러리
  • under-the-hood/ — 계정 단위 라벨 투명성 리포트 빌더 (일일 배치 + 서빙 층 집계)

이 15개 서브시스템은 오늘까지 canon에 한 줄도 안 들어와 있었다.

새로 알게 된 것 — Phoenix가 실행 가능해졌다

새 README:

"Elsewhere, code may not necessarily include build- or deployment-related files or generally self-explanatory infrastructure imports (e.g. xai_service_runner or xai_kafka). ... phoenix/ ships a Cargo workspace, a pyproject.toml, a quickstart and synthetic data generation, so a small model can be trained and served end-to-end." — README.md #deployment-related-code

정본이 canon 함정 절 #1에서 관찰했던 "레포 전체가 빌드되지 않는다"의 부분 해소. Phoenix만은 학습·서빙까지 end-to-end 실행 가능한 형태로 배포됐다. 나머지 크레이트는 여전히 crate::params·crate::util·crate::clients·xai_service_runner·xai_kafka 등의 미공개 의존이 남아 있다. [확인] — 새 커밋의 Cargo.toml 개수는 여러 개 (phoenix 서브트리에 집중).

Phoenix retrieval을 위한 새 인덱스 서비스도 열렸다 [확인]README.md #retrieval-index:

  • phoenix-rankall/ — Phoenix retrieval이 조회하는 포스트 인덱스 유지. 이벤트 도착에 따라 업데이트
  • phoenix-rankall-strato/ — 어떤 인덱스에 포스트가 속하는지 결정하는 이벤트 층. visibility-filtering을 먼저 참조

즉 인덱싱 파이프라인이 랭킹 쪽 visibility 규칙과 이미 sync — 인덱스에 들어가기 전에 이미 visibility 판단이 붙는다. 이건 정본이 완전히 몰랐던 아키텍처 사실이다.

⚠ 이 진술을 다룰 때 반드시 붙일 caveat 다섯 가지

  1. 가중치 크론 sync는 매일 밀리는 미러라 시차가 있다. 헤더가 밝히는 sync 시각 이후의 프로덕션 변경은 아직 반영 안 됐을 수 있다. [확인]
  2. 가중치 부호·크기의 해석은 propensity를 감안해야 한다. 파일의 자체 주석이 "값 = 가치 × 1/propensity"라고 명시. 즉 리포트 −234와 favorite 0.5의 절대값 비율(468배)이 그대로 "리포트가 favorite보다 468배 중요"를 뜻하는 게 아니다.
  3. 미러링 범위는 home-mixer 안 param만이다. VMRanker 원격 서비스의 내부 상수, phoenix 학습 hyperparameter, botmaker 규칙 상수, crate::util 안 상수(score normalizer, vqv weight 임계 등)는 여전히 레포 밖. [확인]
  4. Phoenix 학습 코드는 "학습 가능한" 것이지 "프로덕션과 같은" 것이 아니다. README가 명시적으로 *"a small model can be trained and served end-to-end"*라고 규모를 다르게 못박음. 실 프로덕션 checkpoint·데이터·infra는 미공개.
  5. 일부 botmaker rules는 게이밍 방지 목적 미공개. README가 명시. 즉 visibility-filtering이 참조하는 라벨 중 어떤 것들은 규칙이 열려 있지 않다. [확인]

새로 알게 된 것 — 실제 파라미터 변경 사례 문서화

새 파일 docs/BIDIRECTIONAL_BOOST_CHANGE.md가 향후 코드 diff로 파라미터 변경을 어떻게 문서화할지의 견본을 제시한다. 사례는 양방향 팔로우 답글 부스트 (2026-07):

  • 2026-07-10 A/B 시작: BidirectionalFollowReplyWeightBoost 값 5/10/15/20 랜덤 배정, 대다수는 0
  • 2026-07-13 초기 광범위 롤아웃: 20으로 확장
  • 2026-07-24: X에서 유저 피드백(월드컵 진행 중인데 관련 포스트 부족) 반영해 20 → 15로 하향

문서가 그대로 인용하는 요약:

"In plain language, the bidirectional follow boost boosts original posts from people you mutually follow by increasing the weight on the predicted probability that you'll reply to a post from one of those authors who you mutually follow." — docs/BIDIRECTIONAL_BOOST_CHANGE.md

코드 대응:

  • home-mixer/candidate_hydrators/bidirectional_follow_hydrator.rs (신규) — SocialGraphClient로 상호팔로우 여부 조회, PostCandidate.is_mutual_follow_author에 세팅
  • home-mixer/models/candidate.rs — 필드 하나 추가
  • home-mixer/scorers/ranking_scorer.rsbidirectional_boost_eligible(c) 정의: in_reply_to_tweet_id.is_none() && retweeted_tweet_id.is_none() && is_mutual_follow_author == Some(true) → 조건 만족 시 reply/dwell 가중치에 boost 더함
  • 조건 순수 원본에만, 답글·리트윗 제외, 상호팔로우 아니면 pass-through

원본 포스트에 한해서만 부스트가 붙는다. 답글·리트윗은 대상 아님. 이 규칙은 canon에는 없던 매우 구체적 로직이다. [확인]

정본 반영

  • services/x.md 대폭 개정. 주요 변경:
    • "공개 소스 3세대" 표에 4세대 행 추가 (2026-08-13, +363k/−12k 라인, 파일 300+, visibility-filtering·labeling 서브레포 15개 신설, phoenix/ 학습 코드 포함)
    • 후보 소스 표에 SimClusters 추가, TweetMixer 기본 off 표시, EnableSimclustersSource=true·EnablePhoenixSource=true 값 삽입
    • 후보 배분 절 갱신: TweetMixerMaxResults=800, PhoenixMaxResults=1000, ThunderMaxResults=1200 값 삽입, OonWeightFactor=0.75, TopicOonWeightFactor=0.5 값 삽입 — canon의 "네 값 전부 비공개"를 "세 값 공개(신규 유저 하나는 임계 0으로 사실상 비활성)"로 재작성
    • 랭킹 절: Phoenix 예측 헤드 표를 새 README의 24개 카테고리 배치로 재작성, param.rs의 25개 weight 심볼과 대응
    • 가중치 절 전면 재작성 — "결론: 값 미공개"를 "결론: 2026-08-13 이후 프로덕션 미러 공개"로 뒤집음. 상세 표 (favorite 0.5, reply 5.0, +상호팔로우 원본 15.0, retweet 1.0, ..., report −234) 삽입. 2023 스냅샷과의 세부 대비 절 추가
    • VMRanker 절: EnableVMRanker=true, VMRankerDppTheta=0.65, VMRankerDppMaxSelectedRank=150, VMRankerValueModelId="dpp" 값 삽입, 열린 질문 "VMRanker/DPP가 켜져 있는가"를 해소로 이동
    • 필터 절: 14 → 17로 갱신. OONRetweetReplyFilter, OONNsfwSimclustersFilter, NewUserMinEngagementFilter, InventoryHoldoutFilter 신규 항목 추가
    • 새-작성자 부스트 서브절 신규 (Author Diversity Decay·OON Discount에 이은 세 번째 조정 인자)
    • visibility-filtering / labeling 파이프라인 신규 절 — base 28 규칙 + OON 추가 26 = 54, agatha·bdsm·user-cred-v2·pnsfwmedia·scarecrow·botmaker·abuse-enforcement-service·safety-label-user-agg·under-the-hood·clip·media-model-proxy 서브레포 표 삽입
    • Phoenix 학습·인덱스 신규 절 — Cargo workspace + pyproject.toml + QUICKSTART + synthetic data · phoenix-rankall / phoenix-rankall-strato · 인덱싱이 visibility 판단을 먼저 참조한다는 아키텍처 사실
    • docs/BIDIRECTIONAL_BOOST_CHANGE.md 사례를 "가중치가 어떻게 바뀌는가" 서브절로 반영 (2026-07-10 A/B → 07-13 롤아웃 → 07-24 20→15)
    • "소스 읽는 법 — 함정 목록"의 canon 함정 #1(레포 빌드 안 됨) 절반 해소 — Phoenix는 이제 빌드된다
    • 열린 질문 대량 해소: 가중치 실값 · VMRanker on/off · has_cached_posts 비중(여전히 미해소) · Phoenix 헤드 개수(24로 확정) · SimClusters 부활 여부(부활)
    • 새 열린 질문 추가: SimClusters 서브레포 코어 알고리즘 세부(SVD 파이프라인·k) · agatha·bdsm·user-cred-v2 각각의 스코어링 세부·업데이트 주기 · phoenix/ 학습 파이프라인의 loss·negative sampling·optimizer · Under the Hood 툴이 노출하는 라벨 taxonomy · InventoryHoldoutFilter의 홀드아웃 비율 param
  • assets/x-pipeline.svg 갱신: (1) 후보 소스에 SimClusters 추가, tweet-mixer 기본 off 표시 (2) 필터 개수 14 → 17 (3) 가중치 절 "값 비공개"를 "정본 참조 (예: reply 5.0 + 상호팔로우 부스트 15.0)"로 수정 (4) 예측 헤드 24로 갱신 (5) VMRanker "실패 시 조용히 스킵"에 "DPP θ=0.65 · K=150 · 기본 on" 값 추가
  • radar.md 갱신: 이번 드랍은 추적 서비스(X) 직접 반영이므로 레이더를 거치지 않음(정본에 바로). 아래 arXiv triage 관련 1건만 추가

의미

테제 대량 변경. 오늘 이전까지 X 정본의 가장 큰 미해소 절 두 개(가중치 값·labeling 파이프라인)가 하루에 동시에 해소됐다. 이 저장소의 성격상 이런 규모의 canon 재작성은 드물다 — 정본 x.md의 300줄 넘게가 오늘 바뀌었거나 새로 쓰였다.

첫 번째 의미는 연구 방향의 재정렬이다. 지난 3개월간 x.md의 열린 질문들이 다른 서비스(Meta·Netflix)의 관측을 이끌어 왔다 — "X 광고 스택은 어디까지 공개됐나", "SimClusters의 실 부활 여부", "VMRanker DPP의 배포 상태" 같은 질문이 topics/ 노트 여러 개의 방향타였다. 오늘 이 질문들이 답을 얻은 만큼, 이 저장소는 이제 "X가 공개한 값이 왜 이런가 / 다른 회사의 대응 지점은 무엇인가" 라는 다음 층의 질문으로 옮겨간다. 예를 들어 X의 report 가중치 −234와 Netflix GenRec의 catalog softmax는 완전히 다른 손실 함수의 두 극단이고, 이 두 숫자가 나란히 정본에 있다는 사실 자체가 다음 topics 확장의 좌표가 된다.

두 번째 의미는 투명성 아키텍처의 산업 표준화 시작 신호다. docs/BIDIRECTIONAL_BOOST_CHANGE.md가 보여주는 문서화 스타일 — A/B 시작 → 결과 관찰 → 파라미터 조정을 3주 안에 코드 diff로 공개 — 은 다른 회사(Meta·Netflix·YouTube 어느 곳)에서도 지금까지 사례가 없었다. X가 이걸 "example algorithm diff"라고 부르며 반복할 예고를 붙였다면, 비교 가능한 프로덕션 diff 시계열이 처음으로 존재하게 되는 것이다. 이 저장소가 앞으로 X 커밋 로그를 매일 추적하는 것의 가치가 상당히 커진다. 다음 커밋에서 어떤 param이 어떻게 바뀌는지가 곧 A/B 결과의 지연 지표가 된다.

세 번째 의미는 정본 함정 목록의 일부 재조정이다. canon의 함정 #1(레포 빌드 안 됨) 중 Phoenix 부분은 해소됐지만, 나머지(crate::params 이전 판이 지금은 이 파일로 채워짐, crate::util·crate::clients는 여전히 미공개)는 부분적으로만 해소. 함정 #2(README 지목 스코어러 3개가 죽은 파일)는 아직 검증 필요 — 새 릴리즈에서 정리됐을 수 있다. 함정 #6(has_cached_posts 비중)은 미해소. canon 함정 목록은 다음 배치에서 파일별로 재검증 예정 (심층 분석 필요).

심층 분석 필요 (사람이 트리거) — 이 드랍의 규모상 파일별 검증은 오늘 배치 예산을 넘는다. 아래 항목은 개별 세션에서 파야 한다:

  1. simclusters/ 서브레포 — 코어 알고리즘(SVD? MinHash?), 인덱스 형식, home-mixer가 부르는 API surface, 2020 KDD 논문과의 diff
  2. agatha/ / bdsm/ / user-cred-v2/ — 각 계정 스코어러의 실 모델·업데이트 주기·라벨 임계
  3. pnsfwmedia/ 캘리브레이션 — CLIP 임베딩 + agatha 스코어를 어떻게 결합하는가
  4. phoenix/ 학습 코드 — loss, negative sampling, optimizer, synthetic data 형식
  5. phoenix-rankall/·phoenix-rankall-strato/ — 인덱싱 파이프라인·visibility 사전 참조 로직
  6. abuse-enforcement-service/ — 어떤 스코어가 어떤 조치(라벨/챌린지/서스펜션)로 매핑되는가
  7. scarecrow/·botmaker/·botmaker-rules/ — 규칙 DSL·컴파일러, 공개된 규칙 vs 미공개된 규칙의 비율과 카테고리
  8. under-the-hood/ — 유저에게 노출되는 라벨 taxonomy와 규칙 코드 링킹
  9. home-mixer/ 나머지 신규 파일 — 새 hydrator·filter·scorer·side-effect (canon 함정 목록 재검증)
  10. visibility-filtering/rules/ 개별 규칙 파일 — 각 규칙의 판정 조건, canon 함정 #2 최종 검증

2. arXiv cs.IR triage — 관찰 1건, 정본 반영 0건

배경 매일 배치 규칙 — arXiv cs.IR 신규 30건을 제목·초록으로 훑고, 프로덕션 저자·A/B 주장·메커니즘 신규성·스케일 결과 중 하나라도 걸리는 것만 원문 확인. 오늘은 30건 중 대부분 RAG/QA/text-to-SQL/멀티모달 벤치마크 등 학술 증분이나 도메인 한정(음악·POI·의료 등). 통과 후보 3건 원문 확인.

새로 알게 된 것

  • STAR (2608.12986) — "Structured Tokenization and Target-Aware Interest Representation for PCVR Prediction". 초록에 "KDD Cup 2026 Tencent UniRec Challenge를 위한 프레임워크"로 자기 규정. 프로덕션 배포 진술 없음. 탈락 — 대회 프레임워크는 프로덕션 진술이 아님
  • HCGRec (2608.11980) — "Hint-Conditioned Generative Recommendation with Semantic IDs". 저자 소속 미공개(arXiv 페이지에 affiliation 없음), CIKM 2026 accepted 표기, GitHub 링크 있음. 프로덕션 배포 진술 없음. 탈락 — SID 계열 학술 증분
  • DrEM (2608.12778) — "Dual-Side Robust Ensemble Ranking from Noisy User Preference Predictions in Video Recommendation". 저자 소속 미공개이나 초록에 *"large-scale online A/B tests"*로 실 배포 주장. 저자 이름(Xiaoxiao Xu, Kaiqiao Zhan 등)이 Kuaishou 계열과 통계적으로 일치할 가능성 [추정]. 관찰 통과 — radar.md의 "이번 달 신규"에 2줄 포인터 추가 (심층 분석 없이). 회사 확정과 프로덕션 지면 확정은 다음 배치에서 크로스체크

정본 반영

  • radar.md "이번 달 신규"에 DrEM (video rec, unknown company) 항목 신규. 3~4줄 포인터: A/B 주장 있음·저자 소속 미확인·Kuaishou 라인 가능성 [추정]

의미

레이더의 하루 통과 0~2건 기대치 안. 이번 주는 SID/생성형 랭킹 계열이 계속 증분되고 있으나(Alibaba·Kuaishou·Yandex 라인이 이미 정본에서 관찰 중) 새 회사·새 메커니즘 진술은 아직 없다.

검증에서 뒤집힌 것

  • x.md canon의 "가중치 값은 어느 세대에서도 1차 출처가 없다. 유일한 수치 출처는 2023년 4월 5일 시점 스냅샷 하나뿐" — 2026-08-13 뒤집힘. home-mixer/params/param.rs가 프로덕션 크론 미러로 26개 헤드 가중치·5개 부정 헤드·OON 배수·다양성 상수 전부를 값으로 공개
  • x.md canon의 "SimClusters ... 이 이름들은 home-mixer/ 어디에도 안 나온다" — 2026-08-13 부분 뒤집힘. simclusters/ 서브레포가 OON retrieval 소스로 홈미서에 배선됨. 단 canon의 "2023 세대에서 살아남은 retrieval은 사실상 tweet-mixer 하나뿐"은 이제 "2023 세대에서 살아남은 retrieval은 tweet-mixer(기본 off로 미러) + SimClusters(부활)" 로 재작성
  • x.md canon의 "가중치 값·params 모듈은 레포 밖 — 비공개" 진술을 담은 pipeline 다이어그램(assets/x-pipeline.svg) 갱신 필요 — 완료
  • x.md canon의 열린 질문 "VMRanker/DPP가 켜져 있는가" — 켜져 있음이 param으로 확인, DPP θ=0.65 K=150. 열린 질문에서 제거
  • x.md canon의 "필터 17개(스코어링 전 14 + 후 3)" — 20개(스코어링 전 17 + 후 3)로 갱신
  • x.md canon의 "2026 코드에 [신규 아이템 콜드스타트] 아무 장치가 없다" — 뒤집힘. PostUnexploredWeight = 0.02 + ColdStartImpressionThreshold = 1000 + NewUserMinEngagementFilter(신규 유저용) 각각 존재. canon의 "부재" 관찰이 3개월 전 스냅샷 기준이었을 뿐

레이더

  • radar.md "이번 달 신규"에 DrEM (2608.12778) 관찰 항목 신규 추가 — video rec A/B 주장, 소속 미확인

다음에 볼 것

  • X 4세대 드랍 심층 분석 — 위 심층 분석 필요 10개 항목 중 우선순위: (1) home-mixer/ 신규 파일로 canon 함정 목록 재검증 (2) simclusters/ 서브레포로 canon SimClusters "부활" 진술 확정 (3) abuse-enforcement-service/ + visibility-filtering/rules/ 개별 규칙으로 안전 파이프라인 재구성
  • DrEM 저자 소속 확정 — Kuaishou 계열이면 이미 정본 관찰 중인 회사, 다른 곳이면 radar 신규 스레드 후보
  • BIDIRECTIONAL_BOOST_CHANGE 이후 X 커밋 추적 — 다음 param diff가 언제 어떤 형태로 올지 — 저장소 매일 배치가 X 커밋을 이미 체크하므로 자동 감지 예정
  • EU DSA 투명성 보고서에 X가 이번 8-13 공개 뒤 무엇을 새로 제출/삭제하는지 — 규제 문서와 코드의 sync 여부가 새로운 검증 각도