Equality on a type where identity was ambiguous

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.