0x00 EN

리서치 / 일일 리포트

  • 읽은 자료 1건
  • 정본 반영 1개 파일
  • 레이더 0건
한 줄 요약X가 For You 영상 캐러셀 후보에서 MediumRisk 포스트와 최근 3일 안에 본 영상을 빼는 규칙을 기본으로 켰다. 캐러셀 자체는 아직 기본 off다.

1영상 캐러셀의 안전·중복 규칙 두 개가 기본으로 켜졌다 — X

자료 xai-org/x-algorithm@f06f45a — xAI, 2026-11-11, 코드. 이 노트들이 붙인 번호로는 4세대+61이다(4세대 공개 2026-08-13 뒤의 xai-org/x-algorithm 커밋에 이 노트들이 차례로 붙인 번호다).

배경 X For You(알고리즘 추천 피드)에는 피드 여섯 번째 자리에 세로 영상 3~5개를 묶어 넣는 캐러셀이 2026-10-08부터 기본 off로 있다. 그 뒤 커밋들은 캐러셀을 켜기 전에 어떤 영상을 넣으면 안 되는지 규칙을 하나씩 만들고 기본값을 정해 왔다. 브랜드 안전(광고주가 옆에 오기를 꺼리는 콘텐츠인지 판정한 등급) HighRisk 제외는 10-31부터 기본 on이었고, MediumRisk 제외와 3일 시청 제외는 기본 off로만 있었다. 이번 커밋은 이 두 규칙을 기본 on으로 바꾸고, 캐러셀과 홈 피드에 새 장치 세 개를 기본 off로 추가했다.

새로 알게 된 것A. 캐러셀 후보 규칙은 이제 HighRisk와 MediumRisk 제외, 3일 시청 제외가 모두 기본 on이다

  • 캐러셀 후보에서 브랜드 안전 MediumRisk 판정 포스트를 빼는 스위치의 기본값이 false에서 true로 바뀌었다 확인 — params/param.rs:1354-1359.
    • 스위치 이름은 rust_home_mixer_enable_video_carousel_medium_risk_filter이고, 2026-11-03 커밋(4세대+55)에서 기본 off로 생겼다.
    • 필터 코드는 판정이 없는 포스트를 HighRisk나 MediumRisk 제외 중 하나라도 켜져 있으면 뺀다. 따라서 판정 없는 포스트 처리는 이전과 같다.
  • 최근 3일 안에 캐러셀로 본 영상을 다시 넣지 않는 필터도 기본 on이 됐다 확인 — params/param.rs:1360-1365.
    • 스위치 이름은 rust_home_mixer_enable_video_carousel_seen_filter이고, 2026-11-06 커밋(4세대+58)에서 기본 off로 생겼다. 본 기록은 유저별 Redis에서 읽는다.
  • 캐러셀 자체를 켜는 스위치는 이번 커밋에서도 기본 off다 확인 — params/param.rs:1282-1287.

새로 알게 된 것B. 캐러셀이 메인 피드 아래쪽 영상을 가져와 쓰는 경로가 기본 off로 생겼다

  • 스위치를 켜면 캐러셀 후보 풀이 캐러셀 자리 아래의 메인 피드 포스트에서 시작하고, 캐러셀에 고른 영상은 메인 피드에서 빠진다 확인 — filters/video_carousel_filter.rs.

    • 지금까지 후보 풀은 메인 피드 결과 크기(RESULT_SIZE) 밖의 포스트와 캐러셀 전용 추가 후보였다. 켜면 시작점이 VideoCarouselPosition − 1(기본 5)이 된다.
    • 메인 피드에서 뺄 때에는 트윗 ID, 영상 미디어 ID, MD5 해시 가운데 하나라도 캐러셀 영상과 같으면 같은 영상으로 본다 — util/video_carousel.rs.
    • 스위치 이름은 rust_home_mixer_enable_video_carousel_take_from_feed이고 기본 false다 — params/param.rs:1366-1371.
  • 테스트는 메인 피드 11번째 영상이 캐러셀로 옮겨 가고, 같은 미디어를 쓴 21번째 포스트도 메인 피드에서 빠지는 것을 고정한다 확인 — 같은 파일.

    assert_eq!(ids(query.video_carousel.get().unwrap()), [11, 101, 102, 103, 104]);
    assert_eq!(kept[..5], [1, 2, 3, 4, 5]);
    assert!(!kept.contains(&11) && !kept.contains(&21));
    

새로 알게 된 것C. For You 홈 세 번째 자리에 Grok 추천 작업 카드를 넣는 경로가 기본 off로 생겼다

  • 프레임(피드 사이에 끼우는 스포츠 카드 같은 비포스트 카드) 목록에 Grok 추천 작업 카드가 추가됐고, 자리는 홈 피드 세 번째다 확인 — frames/catalog.rs.
    • 경로는 /grokbot/suggested_tasks이고, 지금까지 프레임은 축구·NFL·MLB 토픽 타임라인에만 있었다.
    • 첫 응답에만 나오고, 새 글 확인 요청(polling)과 아래로 스크롤해 더 받는 요청에는 나오지 않는다. 사용자가 닫을 수 없는 카드다.
    • Topic 요청과 Following 피드에는 나오지 않는다.
  • 한 번 나간 뒤에는 피로도 시간(기본 6시간)이 지나야 다시 나온다 확인 — params/param.rs:1256-1267.
    • 스위치는 rust_home_mixer_jetfuel_frame_grokbot_suggested_tasks_enabled(기본 false)와 ..._fatigue_hours(기본 6)다.
    • 카드 내용은 Strato가 아니라 Jetfuel(프레임 카드의 렌더링된 내용을 돌려주는 내부 서비스) 클라이언트에서 뷰어 ID로 직접 받는다 — sources/jetfuel_direct_frame_source.rs.

새로 알게 된 것D. VMRanker에 뷰어가 최근 본 포스트와 후보의 토픽을 보내는 경로가 기본 off로 생겼다

  • 켜지면 뷰어가 최근 본 포스트 최대 64개를 노출 시각 순으로 골라, 토픽과 함께 VMRanker(슬레이트 재정렬 서비스) 요청에 싣는다 확인 — query_hydrators/recent_views_query_hydrator.rs.
    • 본 포스트마다 노출 시각, 지면, 행동 종류 비트, 체류 시간(ms)을 함께 보낸다. 이력은 최근 노출을 포함한 집계 유형(DENSE_WITH_RECENT_IMPRESSIONS)으로 최대 256행을 받는다.
    • Following 요청과 Topic 요청에서는 돌지 않는다.
  • 후보 쪽에서는 로컬 가중합 점수 상위 최대 200개의 토픽을 80ms 안에 조회해 후보마다 싣는다 확인 — scorers/vm_ranker.rs.
    • 스위치는 rust_home_mixer_vm_ranker_send_post_topics(기본 false), 상한은 PostTopicsMaxCandidates = 200, PostTopicsTimeoutMs = 80, RecentViewsRows = 64다 — params/param.rs:385-414.
    • 조회 시간이 넘으면 토픽 없이 요청을 보낸다.
  • VMRanker가 이 값을 어떻게 쓰는지는 이번에도 공개 코드에 없다 확인. "방금 본 토픽"과 후보 토픽을 비교하는 다양성 목표를 시험하려는 준비로 본다 추정. 근거는 10-20 커밋의 이력 토픽 전송과 같은 실험 payload 경로를 쓴다는 점이다.

새로 알게 된 것그 밖의 변경

  • 안전 라벨 캐시는 채운 뒤 저장소를 30초·90초에 두 번 다시 읽던 것을 60초에 한 번만 읽고, 다시 읽은 결과가 달라졌는지 메트릭으로 센다 확인 — safety-label-source/dragonfly.rs.
    • 라벨이 없다는 결과의 기본 보관 시간(not_found_ttl)은 10분에서 1시간으로 늘었다.
  • abuse-enforcement-service(모델 점수를 근거로 계정·포스트 조치를 내리는 서비스)의 조치 설정에 포스트 라벨 조치가 생겼고, 고를 수 있는 라벨은 NsfwHighPrecision과 SoftNsfw 둘이다 확인 — types/src/action_control.rs.
  • 섀도 트래픽(실험용 Phoenix 클러스터에 채점만 보내고 서빙에는 쓰지 않는 경로) 대상에서 Experiment20Fou가 빠지고 Experiment24~28Fou가 각 0.3 비율로 추가됐다 확인 — params/param.rs:91-106.
  • TwHIN 포스트·영상 임베딩 스트리밍 작업은 좋아요와 품질 시청 이벤트만 먼저 거른 뒤 두 경로에 나눠 쓴다. 각 경로가 받는 행동 종류는 그대로라 결과는 같다 확인 — TwhinTweetJob.scala.
  • 필터 여러 개가 같은 분할 헬퍼를 쓰도록 바뀌었고, 토픽 주석 디코딩이 공용 유틸로 옮겨졌다. 정책 변화는 없다 확인 — 커밋 diff.
  • 쓰이지 않던 이력 집계 유형 두 개(33, 35)가 proto에서 예약 번호로 바뀌었고, VF 클라이언트의 도움말 링크 상수 몇 개가 지워졌다 확인 — 같은 diff.
  • 파라미터 미러의 마지막 동기화 시각은 2026-11-10T16:00:31Z다 확인 — params/param.rs:1.

정본 반영 services/x.md ## 한 줄 요약의 기준 커밋을 f06f45a(4세대+61)로 올렸다. ## 피드 지면 도입에 캐러셀 규칙 두 개의 기본 on 문장을 더했다. 캐러셀 항목의 3일 시청 필터 불릿을 기본 on으로 고쳤고, 메인 피드 영상 가져오기 불릿과 Grok 추천 작업 카드 불릿을 추가했다. "최종 배치" 절의 캐러셀 MediumRisk 불릿을 기본 on으로 고쳤다. 다양성 절의 VMRanker 이력 토픽 불릿 아래에 최근 본 포스트 토픽 하위 불릿을 추가했다. 안전성 절에 라벨 캐시 재읽기 불릿과 abuse-enforcement-service 포스트 라벨 조치 불릿을 추가했다. ## 출처의 확인 시점과 기준 sha 표에 f06f45a 행을 추가했고, 변경 이력 요약표에 4세대+61 행을 추가했다.

의미 캐러셀은 여전히 기본 off지만, 켰을 때 적용될 안전 규칙과 시청 규칙은 이제 모두 기본 on이다. 근거는 HighRisk(10-31), MediumRisk와 3일 시청(이번 커밋) 제외가 차례로 기본값이 됐다는 점이다. 메인 피드에서 영상을 가져오는 경로가 생긴 것은 캐러셀 후보 풀이 부족하다는 판단 때문으로 보지만, 코드에 이유가 적혀 있지 않으므로 추정으로 둔다 추정.

다음에 볼 것