What's Changed
- Logging improvements by @MaciejTe in #221
- fix(blocklists): refuse startup and stale purge when sources parse below minimum by @MaciejTe in #222
- fix(blocklists): promote blocklist via single atomic RENAME in Redis swap by @MaciejTe in #223
- fix(proxy): cap rate-limit bucket stores, bucket only existing profiles, key IPv6 by /64 by @MaciejTe in #225
- fix(blocklists): switch Hagezi sources to the official GitLab mirror by @MaciejTe in #227
- fix(proxy): answer FORMERR to queries without exactly one question by @MaciejTe in #228
- fix(proxy): answer SERVFAIL when the request context cache misses by @MaciejTe in #229
- fix(proxy): cap concurrent request goroutines and refuse ANY queries by @MaciejTe in #230
- chore(blocklists): Update NRD links by @MaciejTe in #238
- ci: run backend E2E and frontend tests on pull requests targeting any branch by @MaciejTe in #239
- dnsproxy 0.83 migration by @MaciejTe in #231
- chore: Move certs/ and bootstrap/ to dev/ directory by @MaciejTe in #240
- fix(api): PSK middleware rejects all requests when the secret is unset by @MaciejTe in #241
- Deploy blocklists on all DCN nodes by @MaciejTe in #226
- fix(app): Show blocklists preferences button only on the Blocklists page by @MaciejTe in #242
- CNAME uncloaking by @MaciejTe in #208
- Query logs UX improvements by @MaciejTe in #243
- refactor(api): drop unused is_active from subscription and preauth by @MaciejTe in #224
- Release 0.3.0: CNAME uncloaking, blocklists on all DCN nodes, dnsproxy v0.83, logs UX & device filter, request-scoped logging, proxy hardening by @MaciejTe in #248
Full Changelog: v0.2.1...v0.3.0