Ctrl K
ComunidadGuías…

docs/adr/0082-removal-of-unimplemented-features.md

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# 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.