25 lines
1.1 KiB
Text
25 lines
1.1 KiB
Text
{
|
|
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.",
|
|
],
|
|
}
|