Skip to content

Stop DedupConversationFilter from keeping retweets of mid-thread replies - #71

Closed
Pitchfork-and-Torch wants to merge 1 commit into
mainfrom
cursor/convo-collapse-rt-reply-4ce8
Closed

Stop DedupConversationFilter from keeping retweets of mid-thread replies#71
Pitchfork-and-Torch wants to merge 1 commit into
mainfrom
cursor/convo-collapse-rt-reply-4ce8

Conversation

@Pitchfork-and-Torch

Copy link
Copy Markdown
Owner

DedupConversationFilter keys replies by min(ancestors) and retweets with empty ancestors by get_original_tweet_id(). That only collapses a retweet of the root. A retweet of a mid-thread reply keys to the reply id, so the RT and the rest of the thread both survive post-selection.

Proof

  • Entry: DedupConversationFilter::get_conversation_id (phoenix post-selection)
  • Sink: For You TopK after VF — one kept post per conversation_id
  • Break: RT of reply 11 with ancestors [2, 1] keys to 11; the reply keys to 1
  • Viewer: a viral reply-RT and another post from the same thread both take For You slots
  • Twin: existing tests already collapse RT-of-root (retweeted_tweet_id == min(ancestors)); Thunder fills ancestors on replies, not on retweets

This is not xai-org#97/xai-org#102 (gap expansion / unhydrated grandparents). Not xai-org#99 (self-reply chains). Not xai-org#101/xai-org#111 (muted/blocked ancestors). Not xai-org#179 (seen/served parent). Not xai-org#180 (Phoenix VF parents).

Fix: before scoring, map each slate tweet/ancestor onto the smallest conversation root already present. Retweets without ancestors use that root when the original is on the slate (as a reply or as someone’s ancestor). Unrelated originals stay on their own tweet id. Replies still key by min(ancestors), so shallow [2] vs [2, 1] stays two conversations.

Tests: RT of the reply itself, RT of a reply listed as a sibling ancestor, unrelated RT unchanged, existing root-RT and multi-conversation cases unchanged.

cargo test cannot run here. Public dump has no Home Mixer manifest. Standalone rustc model of old vs new keying passed 4/4.

Open in Web Open in Cursor 

Retweets without ancestors keyed to the original tweet id, so a retweet of
a reply stayed in a different bucket than the rest of that conversation.
Map originals onto the min-ancestor root already present on the slate.

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.

2 participants