docs/FINDINGS.md split one section per issue, verbatim, so the file can be removed without
losing anything. Section numbers map straight onto issue numbers: §7 is #7. Cross-references
inside the sections were rewritten from §N to #N; the one exception is §7 of
docs/protocol.md, which is a different document and reads as before.
What the file said above its first section:
Two batches, from two different kinds of work.
#1–#9 changed the implementation, and were found by reading source rather than
documentation. Each says what the mechanism is, what would have gone wrong, and what the code
does about it.
#10–#19 were found by running the Go provider this replaces, and are correlated against
this codebase here rather than acted on. They come from external-dns-desec-provider#26
— a year of production fixes — from the review of it, and from
sshine/external-dns-desec-provider#2, another operator's account of the same failure
from a four-cluster deployment. Some describe holes this design has that the Go provider does
not. Some describe problems this design retired outright, recorded so they are not
re-litigated. One is a correction to #4. None of them is a decision; several are almost
certainly not worth their complexity.
Corrections to claims I had already written into comments or docs are marked, because a wrong
reason in a comment is worse than no reason at all.
Read from source, implemented, pinned by tests
Correlated against the Go provider, not acted on
docs/FINDINGS.mdsplit one section per issue, verbatim, so the file can be removed withoutlosing anything. Section numbers map straight onto issue numbers: §7 is #7. Cross-references
inside the sections were rewritten from
§Nto#N; the one exception is §7 ofdocs/protocol.md, which is a different document and reads as before.What the file said above its first section:
Read from source, implemented, pinned by tests
max_retries(0)on the deSEC client is load-bearing, not cautious #1/adjustendpoints#2#[tokio::test(start_paused = true)]cannot be used with a real socket #3axum::Jsonas an *extractor* would have failed every single write #4DSat a subname is yours;DSat the apex is deSEC's #6/recordscannot cause deletion — but a missing filter can #7prometheus-client's derive puts Rust variant names on the wire #8desec::api::rrsets::Rrsetcannot be constructed #9Correlated against the Go provider, not acted on
429with noRetry-Afterteaches the limiter nothing #10snapshot_age_secondsmeasures the zone list, not the records #16