simulateVarietyScore was adding the candidate recipe on top of the existing slot for slotDate, keeping the old recipe's tag-repeat penalty in the score. Now the existing slot is excluded before simulating, so swapping a recipe for one with better variety correctly shows positive scoreDelta and hasConflict=false. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>