fix(deriver): word-boundary matching in violatesPrivacy — short People slugs block every hypothesis - #1921
Open
Pfassmeyer wants to merge 1 commit into
Open
Conversation
…e slugs blocked every hypothesis
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.
Symptom
The proactive deriver (
--hypothesize) can silently emit zero hypotheses forever. The run log shows healthy clusters that all die at the privacy gate:The failure mode is a clean
emitted=0, indistinguishable from "nothing to report" — so nobody notices the loop is dead.Cause
violatesPrivacy()uses substring matching (norm.includes(...)) againstKNOWLEDGE/Peopleslugs. People notes can legitimately have very short slugs (an initial, a nickname — e.g.e.md). A single-letter slug then matches any text containing that letter, so every candidate hypothesis is blocked.Underscore-separated slugs (
Firstname_Lastname.md) are also never matched, because only-is normalized.Fix
Word-boundary regex matching instead of
includes(), with both-and_separator normalization. The guard's intent is preserved: claims that actually name a person still block.eemaryfirstname_lastnameTested against a 12-case matrix (short slugs, underscore slugs, real-name mentions, cluster-name false-positives): every real name still blocks, no cluster name falsely blocks.