Repair estimates no longer double-bill duplicate materials

Fixed: AI stage was emitting 4× drywall lines when scope had three drywall variants in one room.

Bug Fixes

Repair estimates were suffering from a 4× overbilling bug: when a room had multiple drywall-family scope entries (standard drywall + moisture-resistant + plaster, etc.), the AI was collapsing them onto the same library price code but emitting separate line items distinguished only by work description.

This is now fixed. Duplicate line items in the same room with identical selector, unit, and quantity are collapsed into one. The survivor is picked by explicit precedence: scope-pinned rules beat AI, higher confidence beats lower, longer descriptions win tiebreaks. The original items are listed in the line's reasoning as a collapsed audit trail.