Skip to content

Stop TimelineHome from serving DMCA and geo-restricted media - #69

Closed
Pitchfork-and-Torch wants to merge 19 commits into
mainfrom
cursor/timeline-home-legal-media-drops-e03a
Closed

Stop TimelineHome from serving DMCA and geo-restricted media#69
Pitchfork-and-Torch wants to merge 19 commits into
mainfrom
cursor/timeline-home-legal-media-drops-e03a

Conversation

@Pitchfork-and-Torch

Copy link
Copy Markdown
Owner

Bug

DropLegalTakendownPostRule and DropLocalLawsTakendownPostRule sit in TES_HOME_DROPS and fire on both TimelineHome and TimelineHomeRecommendations. DropTweetsWithDmcaMediaRule and DropTweetsWithGeoRestrictedMediaRule sat only in TIMELINE_HOME_RECOMMENDATION_ONLY_RULES.

TES can mark media has_dmca_media or attach a geo allow/deny list without a post-level TakedownReason. Those followee posts scored at TimelineHome (Following, and For You in-network) and served.

Five-line proof

  1. TES hydrates has_dmca_media and media geo_allow_list / geo_deny_list.
  2. Post-level legal / local-law takedown is already in TES_HOME_DROPS (shared).
  3. RECS_MEDIA_DROPS was recommendation-only, so TimelineHome never evaluated those rows.
  4. VFCandidateHydrator scores followee / Following ids at TimelineHome.
  5. A followee post with DMCA media or a matching geo miss is Allowed on Following and For You in-network.

Twin: TakedownReason::Dmca drops on TimelineHome; media-level DMCA / geo does not. This is not xai-org#113 (account vs request country) and not xai-org#110 (label applicable_countries).

Fix

Wire RECS_MEDIA_DROPS into TIMELINE_HOME_SHARED_RULES after TES_HOME_DROPS (drops still precede interstitials). NSFW / DNA / spam recommendation-only rows stay OON-only.

Tests (must fail on unmodified main)

  • legal_media_drops_on_timeline_home (fails on unmodified main)
  • dmca_media_drops_in_network corpus case (was dmca_media_allows_in_network)
  • geo_denied_media_drops_in_network corpus case
  • wired_rule_order_matches_pre_migration_sequence now lists the two media rules on TimelineHome

cargo: cannot run. Public dump has no visibility-filtering manifest.

Rejection table (this wave)

Candidate Why not
TES media read fail-open Same class as xai-org#134 / #24
Account vs request country for geo lists xai-org#113 claimed
Country-scoped safety labels xai-org#110 claimed
Withheld-country fail-closed xai-org#148 claimed
OON NSFW Phoenix skip xai-org#185 claimed
Thunder undelete xai-org#186 claimed
Ads served bury organic xai-org#184 claimed
TES/gizmoduck/VF fail-closed spray Forbidden
Author-size IPS Forbidden
SidTail / PopularTopics / BroadcastLiveness enable Forbidden intern-enable
Open in Web Open in Cursor 

CI agent and others added 19 commits August 14, 2026 20:55
in_network_ids is passed to the VF client without deduplication, while
oon_ids is deduped four lines below. retweeted_tweet_id is pushed for
every candidate that has one, so the same ID repeats once per retweet of
a given post — most often when that post is going viral.

Neither VfClient implementation dedupes its input: StratoVfClient builds
one call per element, and XaiVfClient chunks by XAI_VF_MAX_BATCH_SIZE, so
duplicates consume batch slots and can force an extra round trip.

Not a correctness issue — results collapse into a HashMap keyed by tweet
ID — but redundant work on the For You serving path.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Deduplicate in_network_ids before VF lookup
TES media legal/geo rules lived only on TimelineHomeRecommendations.
Post-level legal takedown already drops on TimelineHome. Followee cards
with DMCA media or a matching geo list therefore served on Following
and For You in-network.

Co-authored-by: Jon Bailey <Pitchfork-and-Torch@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants