{ id = "adr-002", title = "DnsProvider trait shape: 8 methods, explicit exclusions", status = "accepted", date = "2026-05-11", context = " Designing a provider-agnostic trait requires explicit decisions about what is in-scope vs out-of-scope. Including too much forces every provider to implement operations that have no tractable shared abstraction. ", decision = " The trait has exactly 8 methods: name, add_record, delete_record, update_record, lookup_record, list_records, list_zones, health_check. health_check has a default implementation delegating to list_zones. Explicitly excluded: zone creation/deletion, DNSSEC ops, bulk import/export, async notifications/webhooks, rate-limit introspection, geo/LB policies, PTR helpers. ", consequences = [ "Adding any method after v1 is a semver-breaking change.", "Migration path: DnsProviderV2: DnsProvider supertrait.", "Providers needing excluded ops expose provider-specific types directly.", "Conformance suite tests exactly the 8 included operations.", ], }