"""Narrow contracts for external side effects (ADR-0015). Ports exist for external side effects/persistence that need a swappable or fake-able boundary — not as a blanket wrapper around every database access. `object_storage.py` is one: MinIO is a real external system with its own failure modes, and ADR-0016 requires a hand-written fake for it in tests. """