Problem
The rendered redundancy_report shows the raw high-recall embedding output, not the confirmed/classified verdicts. v3's report lists 1,483 pairs with useless recommendations:
- _auth_headers ↔ _auth_headers (sim 1.00) — Consolidate _auth_headers into _auth_headers
- envOr ↔ envOr (sim 1.00) — bus/config.go ↔ gateway/internal/config/config.go
- decorator ↔ decorator (sim 1.00) — (this is a Python decorator-factory idiom, not duplication)
"Consolidate X into X" is noise; envOr in Go is a 3-line idiom that shouldn't be merged across a module boundary; decorator ↔ decorator is a false positive.
Fix
confirm_redundancy already exists (LLM judge → duplicate/sibling/shared_pattern/coincidental, cached). Apply it to the rendered report: render only duplicate verdicts (plus a count of filtered siblings/coincidental), with a real consolidation target instead of "X into X". Collapse 1,483 raw pairs into a short actionable list.
Acceptance
redundancy_report renders confirmed duplicates only; false-positive idioms (same-name utils, decorator factories) filtered; each entry names a concrete keep/remove target.
Problem
The rendered
redundancy_reportshows the raw high-recall embedding output, not the confirmed/classified verdicts. v3's report lists 1,483 pairs with useless recommendations:"Consolidate X into X" is noise;
envOrin Go is a 3-line idiom that shouldn't be merged across a module boundary;decorator ↔ decoratoris a false positive.Fix
confirm_redundancyalready exists (LLM judge → duplicate/sibling/shared_pattern/coincidental, cached). Apply it to the rendered report: render onlyduplicateverdicts (plus a count of filtered siblings/coincidental), with a real consolidation target instead of "X into X". Collapse 1,483 raw pairs into a short actionable list.Acceptance
redundancy_reportrenders confirmed duplicates only; false-positive idioms (same-name utils, decorator factories) filtered; each entry names a concrete keep/remove target.