Fail closed when gizmoduck user-label lookup is Err or missing - #144
Open
Pitchfork-and-Torch wants to merge 1 commit into
Open
Conversation
GizmoduckAuthorHydrator kept Failed/omitted reads in the batch, then assemble used get_or_default so SpamHighRecall and LowQuality looked absent. Omit those ids before assemble. Confirmed NotFound stays unlabeled. Co-authored-by: Jon Bailey <Pitchfork-and-Torch@users.noreply.github.com>
This was referenced Sep 7, 2026
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.
Bug
GizmoduckAuthorHydratorkeeps Failed and omitted gizmoduck reads asHydrated::Failed.CandidateFeatures::assemblethen callsget_or_default, which turns that into emptyAuthorFeatures/ emptyUserLabelSet.SpamHighRecallUserLabelRule(and sibling OON user-label drops) only check type presence. An empty set is Allow. A store error therefore lets a SpamHighRecall or LowQuality author keep ranking.Ok(None)/NotFoundis a confirmed unlabeled author. That path is unchanged.This is not #103 (allowlist store). This is not #125 (home-mixer origin-author NSFW/size). This is not #139 (tweet RTF / Manhattan safety-label hydrator). This is the VF gizmoduck consumer of user labels.
Five-line proof
GizmoduckAuthorHydrator/author_lookup_failed(get_or_defaultused to collapse Err/missing into empty labels)FilterTweetsomit-from-hydrate ->Verdict::unresolved_authorDropSpamHighRecallUserLabelRulenever firedfailed_ids. This is gizmoduck user labels.Change
Track Failed / missing gizmoduck author reads. Do not assemble them as default empty labels.
retain_candidates_with_usable_author_featuresomits those ids before assemble. ConfirmedNotFoundstays unlabeled and serves.Tests
NotFoundis not a failureStandalone decision-table harness (same match arms): 11 assertions passed.
cargo testcannot run. Public dump has no VF crate manifest.Fork PR: none