docs/adr/0082-removal-of-unimplemented-features.md
Rama master · réplica de lectura del repositorio original.
# ADR-0082: Remove features that were declared but never worked
## Metadata
| Field | Value |
| -------------- | ------------------------------------------------ |
| **Status** | Accepted |
| **Date** | 2026-10-08 |
| **Authors** | Alessio Brillo |
| **Deciders** | Alessio Brillo |
| **Supersedes** | ADR-0073, ADR-0070, ADR-0071 |
| **Relates to** | ADR-0002, ADR-0004, ADR-0072, ADR-0075, ADR-0079 |
| **Project** | DOMINUS |
## Context
The v1.1.0 audit found code paths that were configured, documented and ticked
off in the roadmap but that could not do what they claimed:
- **Per-query DNSSEC validation (ADR-0073)** was enabled by default. Its default
validator always threw, so every Available verdict logged a warning and fell
back to the resolver-level proof. The env var was also spelled differently in
code (`DNS_PER_QUERY_DNSEC`) and in the ADR (`DNS_PER_QUERY_DNSSEC`).
- **DoH fallback providers (`cloudflare-doh`, `google-doh`)** were accepted by the
config schema and threw "not implemented" at startup.
- **Sedo, Afternic and Dan.com listing adapters (ADR-0070/0071)** called REST
endpoints (`api.sedo.com/v1`, ...) that had never been checked against the
vendors' real APIs; Afternic and Dan were near-copies of each other.
- **Registrar credentials** for GoDaddy, Namecheap, Porkbun, NameSilo and
Dynadot were documented in `.env.example`; no code read them.
- **Kubernetes manifests** were pinned to v0.10.1, SQLite-only and ran no worker
or scheduler, so jobs and backups would never run there.
- **The consensus compose overlay** and the Terraform cloud-init referenced the
`DNS_CONSENSUS_*` variables removed by ADR-0072.
ADR-0002 (conservatism) and the project principle "cost is a functional
requirement" argue against shipping controls that look like safeguards but are
inert: they create false assurance and operator confusion.
## Decision Drivers
1. Do not claim assurance the code cannot deliver (DNSSEC proof, marketplace sync).
2. Smaller surface area to secure, test and document for a first official release.
3. Re-adding a provider later is one adapter behind an interface (ADR-0004).
## Considered Options
### Option A: Implement each feature properly now
Full DS -> DNSKEY -> RRSIG validation, DoH clients, three marketplace clients.
**Advantages:** feature-complete on paper.
**Disadvantages:** marketplace APIs need partner accounts we do not have, so
they cannot be verified; hand-rolled DNSSEC validation is high-risk code.
**Cost Implications:** weeks, plus recurring vendor access. **Risk Assessment:** high.
---
### Option B: Keep the code, default it off, label it experimental
**Advantages:** no deletion.
**Disadvantages:** unverified code stays in the release; config surface and docs
keep advertising it.
**Cost Implications:** low now, carried forever. **Risk Assessment:** medium.
---
### Option C: Remove them (chosen)
**Advantages:** the release contains only behaviour that is tested; Unbound with
strict DNSSEC remains the single source of truth (ADR-0072/0075).
**Disadvantages:** operators who set the removed variables see them ignored
(removed keys are listed in the upgrade notes).
**Cost Implications:** negative (less to maintain). **Risk Assessment:** low.
## Decision Outcome
Chosen option: **C**. Removed: per-query DNSSEC and its config; DoH fallback
types (`DNS_FALLBACK_PROVIDER` accepts only `node-dns`); Dan/Afternic/Sedo
adapters (`LISTING_PROVIDER` accepts only `manual`; the listing `marketplace`
field remains a free label); the unused registrar credential documentation;
`docker-compose.dns-consensus.yml`; the Kubernetes manifests (supported targets
are Docker Compose and the Terraform/Hetzner stack); the `@relaycorp/dnssec`
dependency; and dead modules.
### Consequences
- ADR-0073, ADR-0070 and ADR-0071 are marked Superseded by this ADR.
- The Terraform cloud-init now sets `DNS_UNBOUND_ENABLED`/`DNS_UNBOUND_HOSTS`
for the co-hosted recursor instead of the removed `DNS_CONSENSUS_*` variables.
- Re-introducing any of these requires a new ADR with evidence it works against
the real service.