Skip to content

home-mixer: use origin author for size and NSFW, fail closed on gizmoduck miss - #16

Closed
Pitchfork-and-Torch wants to merge 1 commit into
mainfrom
cursor/author-origin-trust-018b
Closed

home-mixer: use origin author for size and NSFW, fail closed on gizmoduck miss#16
Pitchfork-and-Torch wants to merge 1 commit into
mainfrom
cursor/author-origin-trust-018b

Conversation

@Pitchfork-and-Torch

@Pitchfork-and-Torch Pitchfork-and-Torch commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Bug

GizmoduckCandidateHydrator already fetched the retweeted user, then used that row only for retweeted_screen_name. Follower count and NSFW flags came from candidate.author_id (the retweeter). Quoted authors were not fetched at all.

Size residuals (author_followers_count → IPS, OON relief, tweet-type buckets, VM ranker) therefore saw the amplifier, not the content origin. A 50-follower account retweeting a 1M-follower original inherited the small-account lift. The Simclusters OON NSFW drop (nsfw_author == Some(true)) saw the retweeter or quoter only, so an NSFW original behind a clean amplifier stayed clean.

A gizmoduck miss was worse. A missing map slot or Ok(None) became empty fields. Pipeline update_all drops Err without writing anything, so a failed read left nsfw_author = None and author_followers_count = None. The NSFW filter requires Some(true). Unknown authors were scored clean and size-neutral.

This is not IPS math (#31) and not the VF hydrator quote/RT verdicts (xai-org#115xai-org#119).

Fix

One file, home-mixer/candidate_hydrators/gizmoduck_hydrator.rs.

  • Fetch poster, retweeted_user_id, and quoted_user_id.
  • Follower count is the origin author on a retweet. Quotes still size on the quoter.
  • nsfw_author / nsfw_author_ads are the OR of poster, original author, and quoted author.
  • A missing map slot or read error is written as labeled (Some(true)). Confirmed store absence stays unlabeled. Values are returned on Ok so update_all actually applies them.
  • Cache key includes quoted_user_id.

in_network is unchanged. That flag is “did this poster come from someone the viewer follows.” Flipping it to the original author would let unfollowed retweets skip OONRetweetReplyFilter.

Tests

  • Retweet size is the original author; quote size stays on the quoter.
  • NSFW original or quoted author labels the candidate.
  • Store miss / read error on poster, original, or quoted author fails closed.
  • Confirmed absence is not treated as a miss.
  • Fetch id set includes retweeted and quoted authors.

home-mixer has no Cargo manifest here. The merge function was compiled and run as a rustc --test model of the same control flow: 5/5 passed.

Upstream

Clean port onto xai-org/x-algorithm main (includes nsfw_author_phoenix): xai-org#125

Open in Web Open in Cursor 

…duck miss

Gizmoduck already fetched the retweeted user and then ignored counts and
labels. Size residuals and the Simclusters NSFW drop therefore saw the
retweeter. A store miss was written as empty fields; update_all drops
Err, so that miss scored as clean.

Follower count now comes from retweeted_user_id when present. NSFW is
the OR of poster, original author, and quoted author. A missing map slot
or read error is labeled, not treated as clean. Confirmed absence stays
unlabeled. Quotes still size on the quoter.

Co-authored-by: Jon Bailey <Pitchfork-and-Torch@users.noreply.github.com>
@Pitchfork-and-Torch

Copy link
Copy Markdown
Owner Author

Wrong base (fork PR). Ship vehicle is upstream xai-org#125. Per submit law: never PR Pitchfork-and-Torch/x-algorithm. Do not merge this.

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