Summary (TL;DR)
A Code Smell is a popular code pattern or practice that has a tendency to be used incorrectly. Without context, it's more likely the pattern will be misused. A Bad Smell arises when investigation shows more evidence of wrong usage, while a Good Smell indicates correct usage despite the pattern's tendency. Smells are not definitive conclusions but call for investigation to remove unknowns.