f05f076464
Every dedup pass previously funneled through the same manual-confirm queue, including the obviously-safe case: two files in the same directory with the same name and extension, differing only by the ".N" collision suffix sldl/beets inserts when a filename collides. That's not a fuzzy match or a different version -- it's the same download landing twice -- so it doesn't need a human in the loop the way case-insensitive tag matches or cross-album fuzzy matches do (different masters, DJ-mix versions, etc., which still require confirmation). dedup-library.sh gains --auto-apply-numbered: an is_numbered_twin() filename check (same dir, same name modulo the numeric infix, same extension) that deletes matching pairs unconditionally, regardless of which pass found them -- Pass 1 only fires when the canonical name is a beets ghost; the common case where both copies are already tracked in beets defers to Pass 2's tag-based grouping instead, and still gets the same free pass here. When the auto-deleted pair's survivor is itself the numbered-named file, it's renamed back to canonical so the library doesn't accumulate ".1."/".2." names for tracks that no longer have a duplicate. dedup_review_service.scan() (both the manual "Scan now" button and the nightly scheduled job) now passes this flag and records auto-applied deletions as pre-confirmed DedupCandidate rows for audit visibility -- they never appear as pending review items. Tag-based and cross-album fuzzy passes are unaffected and still require manual confirmation. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>