Fail closed when socialgraph mute/block relationship reads fail - #137
Open
Pitchfork-and-Torch wants to merge 1 commit into
Open
Conversation
VF already marks a failed relationship RPC as Failed, then assemble defaults that to not muted / not blocked. Drop those candidates so FilterTweets can emit unresolved_author. Mixer BlockedBy hydrators returned Err on the same class of RPC failure. update_all skipped the write, so author_blocks_viewer stayed None and the filter treated that as not-blocked. Stamp Some(true). Co-authored-by: Jon Bailey <Pitchfork-and-Torch@users.noreply.github.com>
This was referenced Sep 7, 2026
Closed
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Wave 3 check
#134 leftover: socialgraph relationship miss still fail-opens as not muted / not blocked. Verified on
xai-org/main(902a06f).This is not #134 (TES NSFW / takedown / nullcast / media flags). This is not #121 (mixer VF
Err/ missing key). Those stay on their own PRs.Bug
SocialgraphHydratoralready marks an empty or failed Flock read asHydrated::Failed.assemblethen doesrelationships.get_or_default, so Failed becomes all-false.ViewerMutesAuthorRule/ViewerBlocksAuthorRule/MutedRetweetsRulenever fire.Latest Following never loads mixer mute/block lists (
reverse_chron_posts_pipelinequery hydrators are empty). For You list hydrators returnErron RPC failure;hydrate_queryignores that and leaves empty lists. In both cases VF is the mute/block sink. The sink was assembling Failed as not-muted / not-blocked.Mixer
BlockedByHydrator/FollowingBlockedByHydratorreturnedErroncheck_blocked_byfailure.update_allskipsErr, soauthor_blocks_viewerstaysNone.AuthorSocialgraphFilterdoesunwrap_or(false). VF does not check author-blocks-viewer.SocialgraphHydrator::hydrate→CandidateFeatures::assemble; mixerBlockedByHydrator/FollowingBlockedByHydratorAuthorSocialgraphFilterErrwritten as not-blockedunresolved_authorpath.Genuine
Found(including all-false, nobody muted/blocked) is unchanged. Logged-out viewers areFound(default), not Failed.Fix
If the relationship lookup is Failed for a tweet id, drop that candidate from the hydrated set.
FilterTweetsalready maps a missing hydrated candidate toVerdict::unresolved_author.On mixer
check_blocked_byErr, writeauthor_blocks_viewer: Some(true)(and quotedSome(true)when a quoted author is present) soupdate_allapplies it and the filter drops.Tests
Standalone decision-table harness (same retain / BlockedBy / filter arms): 15 assertions passed.
cargo testcannot run. Public dump has no visibility-filtering / Home Mixer manifest.Leftover
QuoteHydrator::get_blocked_bystillunwrap_or_default()(#117). Partial Flock result slots still default missing mute/block graphs to empty. Mixer mute/block list miss on For You still leaves empty lists; Latest Following never loads those lists. VF Failed is the sink for viewer mute/block after this change.Fork pointer (do not merge): Pitchfork-and-Torch#27