An interface added in 2023 against the rule that says not to, and a second implementation in 2025 that vindicated it by accident.
interface StorageAdapter
{
public function put(string $path, StreamInterface $contents): void;
public function get(string $path): StreamInterface;
public function delete(string $path): void;
}
// 2023: one implementation. flagged in review as
// speculative and kept anyway, because the argument
// was "a second storage provider is a business
// requirement we have been told about".
// 2025: the second provider, for the offsite backup.
The rule about interfaces with one implementation is a good rule and this was a legitimate exception, which is only visible in hindsight — the same argument was made for four other interfaces in 2023 and none of them acquired a second implementation. Being told about a requirement is weaker evidence than it feels like, and one in five is roughly the hit rate.