fix(ingest): #780 the recombination drop notice names its own branch - #789
Merged
Conversation
The #618 gate's two arms fed one merged list, so a #630 recombination drop (gate-neutral title, not quoted, bigrams non-adjacent) was announced as a 'wrong-language title' -- on a Spanish source, with a Spanish first title shown, pointing the operator at the language anchor when the real question is extraction quality. The two failure modes call for opposite responses, so they now travel apart: _drop_wrong_language_titles returns the two classes separately, ExtractionReport carries recombined_dropped_titles beside wrong_language_dropped_titles, and ingest renders a second notice ('dropped N title(s) recombined from the source's words, not quoted from it') right after the language one. The language-leak eval probe re-joins the tuples since it scores the gate as a whole. Review round findings declined deliberately: R2's typed-return suggestion (a positional swap is caught by the class-separation unit test) and R3's weak-negative-assertion concern (the sibling notice does emit the literal 'wrong-language' token, so the negative assertion is falsifiable). Closes #780
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.
What
The ingest drop notice no longer mislabels #630 recombination drops as wrong-language leaks. The gate's two arms now report separately: the #618 language-vote class keeps its existing notice, and the #630 recombination class gets its own —
dropped N title(s) recombined from the source's words, not quoted from it: …— rendered right after it.Why
On a Spanish-dominant chunked source, 15 gate-neutral titles (
Proyecto AFG,Knowledge Recovery System, …) were dropped by the recombination arm and announced aswrong-language title(s). The first title shown was Spanish. The two failure modes call for opposite responses — a language leak points at the anchor and the model, a recombination points at extraction quality — so the merged label sent a whole investigation at the wrong subsystem. The gate logic was right; only the message lied.How
_drop_wrong_language_titlesreturns(kept, dropped_wrong_language, dropped_recombined); the floor and fail-open paths return both empty.ExtractionReport.recombined_dropped_titlesbeside the existing field; both chunked call sites (legacy and union) thread it through all three construction sites._recombined_title_noticein the CLI, same bounded-list shape as its sibling.evals/language_leakprobe re-joins the two tuples — it scores the gate as a whole.wrong-languagedoes not.Review
Gentle AI lineage
review-7f5aa406714f4250, high risk, canonical 4R, approved, zero corrections. Two WARNINGs declined deliberately: R2's typed-return suggestion (a positional swap is caught by the class-separation test) and R3's weak-negative-assertion concern (its premise is false — the sibling notice does emit the literalwrong-languagetoken, so the negative assertion is falsifiable).ruffclean,mypyclean, 5176 passed / 1 skipped.Closes #780