Every query takes
the same path.
Whatever the transport, each request runs through one pipeline. The first step that can answer ends it, and every request emits exactly one query event for the log and the stats.
- Guard
- ACL, per-client rate limit, sanity checks, no zone transfers
- Decide
- Blocklists, then your own zones, authoritative
- Resolve
- Cache, then upstream groups with a hard deadline; identical misses share one exchange
- Trust
- DNSSEC validation, scrubbing, response-IP policy
- Shape
- The client's id and flags back, AD and EDE added
