A value object where two instances with the same fields might or might not be the same thing, and five years of nobody deciding.
final readonly class Address
{
public function __construct(
public string $line1,
public string $postcode,
public ?string $deliveryNote = null,
) {}
}
// are two addresses with the same lines and different
// delivery notes equal?
//
// for deduplication: yes
// for a change audit: no
//
// == says no. equals() said yes. both were used.
The ambiguity is in the domain rather than in the code, and the resolution was two methods with different names — isSameLocation() and equals() — rather than one that has to be right for both callers. Naming the question is what made it answerable, and it had been sitting unnamed since 2021.