diagnosis: a named code, the
cause in one sentence, the fix in one sentence, and the evidence the probe matched on.
The fields
string
required
A stable identifier. Branch on this — it will not be reworded. One of the thirteen in the
catalogue.
string
required
One sentence saying what is actually true right now, with the real names and values in it. Render
it; do not match on it.
string
required
One sentence saying what to change. For the cases where nothing needs changing —
negative_cache
— it says so and gives the wait.object
required
The evidence the probe matched on, and its shape depends on
code. record_at_apex carries
{ name, value }; servfail carries { resolvers }; negative_cache carries
{ secondsRemaining }.Where a diagnosis comes from
The probes run over an observation that has already been collected — recursive resolvers first, then the authoritative nameservers if the answer was negative. No probe issues a query of its own, which is why a claim can carry a diagnosis without any extra DNS traffic when you read it back. See How verification works for the four steps.Rendering one
The whole “what now” message for a pending claim is two fields:diagnosis means something has to
change; waitEstimate means nothing does.
cause and fix are product copy and are improved regularly. They are safe to render verbatim
and unsafe to match on. If you need to key behaviour off a case, key it off code.The three groups
The thirteen codes fall into three groups, and it is worth styling them differently:You wrote it wrong
domain_appended, record_at_apex, value_formatted, record_on_www, no_matching_record,
record_absent, cname_conflict, expired_tokenActionable now. Show fix as the primary action. expired_token is the cheapest of them:
the record is already in the right place and only its value is stale.Just wait
negative_cache, not_publishedNothing to do. Showing a fix here is the mistake this product exists to avoid.Your provider is broken
servfail, lame_delegation, foreign_tokenReal problems, but not with the record. servfail is DNSSEC; lame_delegation is the
delegation itself; foreign_token is another account.