changedInput schema / properties / domains / description
Previous value: -"Domain names to query. Up to 10 per call."New value: +"Domain names to query. The first 10 entries are queried; up to 100 are accepted, and entries past the 10th come back unqueried and verbatim in deferred_domains, to resend in another call. Each entry is read as one name: surrounding whitespace and letter case are ignored, a scheme, port, path, query, or fragment is dropped, and an internationalized name is converted to its ASCII form (\"münchen.de\" → \"xn--mnchen-3ya.de\"); a trailing dot and underscore labels are kept. An entry that is not a domain name — an IP address, a user name before \"@\", a bad port, or a malformed label — gets its own result with \"error\" set and is never queried; the other entries still run."
changedInput schema / properties / domains / items / description
Previous value: -"A domain name to query (e.g., \"github.com\", \"api.example.com\")."New value: +"A domain name to query (e.g., \"github.com\", \"_dmarc.example.com\"). A URL or a host:port is reduced to its host."
changedInput schema / properties / domains / maxItems
Previous value: -10New value: +100
changedInput schema / properties / record_types / description
Previous value: -"DNS record types to resolve. Defaults to A, AAAA, MX, and TXT. An empty array uses the same defaults. Add NS to check nameserver delegation. Add CNAME when investigating redirect chains."New value: +"DNS record types to resolve. Defaults to A, AAAA, MX, and TXT. An empty array uses the same defaults. A type listed more than once is queried once. Add NS to check nameserver delegation. Add CNAME when investigating redirect chains. Add CAA when a certificate will not issue or renew: it lists the certificate authorities allowed to issue for the name. CAA is reported for the exact name only; a CA that finds none there checks the parent domains, so no CAA at a subdomain does not mean any CA may issue. Add SOA to compare zone serials across resolvers. SOA answers only at a zone apex, so a name below it returns nodata (a name that is a CNAME returns the SOA of its target). A serial difference means a zone change has not reached every resolver only when those resolvers report the same primary nameserver; a different primary means more than one DNS provider serves the zone."
changedInput schema / properties / record_types / items / enum
Previous value: -[
- "A",
- "AAAA",
- "CNAME",
- "MX",
- "TXT",
- "NS"
-]New value: +[
+ "A",
+ "AAAA",
+ "CNAME",
+ "MX",
+ "TXT",
+ "NS",
+ "CAA",
+ "SOA"
+]
changedInput schema / properties / resolvers / description
Previous value: -"Resolver IP addresses to query. Defaults to Google (8.8.8.8), Cloudflare (1.1.1.1), and Quad9 (9.9.9.9). An empty array uses the same defaults. Add custom resolvers to test resolver-specific behavior. Each must be an IP literal, not a hostname; resolvers in private, loopback, or cloud-metadata ranges are rejected unless DEVOPS_STATUS_ALLOW_PRIVATE_TARGETS=true."New value: +"Resolver IP addresses to query. Defaults to Google (8.8.8.8), Cloudflare (1.1.1.1), and Quad9 (9.9.9.9). An empty array uses the same defaults. Add custom resolvers to test resolver-specific behavior. A resolver listed more than once — the same address and port, however written (\"8.8.8.8\" and \"8.8.8.8:53\") — is queried once, under its first spelling. The first 5 distinct resolvers are queried; up to 20 entries are accepted, and the rest come back unqueried in deferred_resolvers, to resend with the same domains in another call. Each must be an IP literal, not a hostname; resolvers in private, loopback, or cloud-metadata ranges are rejected unless DEVOPS_STATUS_ALLOW_PRIVATE_TARGETS=true."
addedInput schema / properties / resolvers / maxItems
Added value: +20
changedInput schema / properties / timeout_ms / description
Previous value: -"Query timeout per domain+resolver combination in milliseconds. Defaults to the DEVOPS_STATUS_DNS_TIMEOUT_MS env var (3000 when unset)."New value: +"Time limit in milliseconds for each domain+resolver pair, covering every requested record type and any retry over TCP. A resolver that has not answered within it reports \"timeout\" for the unanswered types. At least 1000; a value over 10000 is served as 10000, and the notice says so. Defaults to 3000 unless the server is configured otherwise."
changedInput schema / properties / timeout_ms / maximum
Previous value: -10000New value: +9007199254740991
changedOutput schema / anyOf
Previous value: -[
- {
- "not": {
- "required": [
- "error"
- ]
- },
- "required": [
- "results"
- ]
- },
- {
- "required": [
- "error"
- ]
- }
-]New value: +[
+ {
+ "not": {
+ "required": [
+ "error"
+ ]
+ },
+ "required": [
+ "results",
+ "deferred_domains",
+ "deferred_resolvers"
+ ]
+ },
+ {
+ "required": [
+ "error"
+ ]
+ }
+]
addedOutput schema / properties / deferred_domains
Added value: +{
+ "description": "Domain entries past the first 10, not queried on this call, verbatim and in input order. Resend them in another call. Empty when every entry was queried.",
+ "items": {
+ "description": "A submitted domain entry, exactly as sent.",
+ "type": "string"
+ },
+ "type": "array"
+}
addedOutput schema / properties / deferred_resolvers
Added value: +{
+ "description": "Distinct resolvers past the first 5, not queried on this call, verbatim and in input order. Resend them with the same domains in another call. Empty when every resolver was queried.",
+ "items": {
+ "description": "A submitted resolver entry, exactly as sent.",
+ "type": "string"
+ },
+ "type": "array"
+}
changedOutput schema / properties / error / properties / data / properties / reason / description
Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_domain`: A domain string contains a protocol prefix or invalid format. `target_blocked`: A resolver is a private, loopback, or otherwise non-public address, or is not an IP literal at all. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `target_blocked`: A resolver is a private, loopback, or otherwise non-public address, or is not an IP literal at all. Other values are possible when a failure originates below the handler."
changedOutput schema / properties / error / properties / data / properties / reason / examples
Previous value: -[
- "invalid_domain",
- "target_blocked"
-]New value: +[
+ "target_blocked"
+]
addedOutput schema / properties / notice
Added value: +{
+ "description": "Present when the call was served at a bound: domains or resolvers past the per-call cap, named in deferred_domains and deferred_resolvers, or a timeout_ms over 10000 that was served as 10000. Absent otherwise.",
+ "type": "string"
+}
changedOutput schema / properties / results / items / properties / domain / description
Previous value: -"The domain that was queried."New value: +"The domain name that was queried, as read from the submitted entry (lowercase, ASCII, no scheme, port, or path). For an entry that is not a domain name, the submitted string as given."
changedOutput schema / properties / results / items / properties / error / description
Previous value: -"Set only when the domain could not be queried at all. Either it was rejected before any query (for example a private, loopback, or cloud-metadata target) and \"resolver_results\" is empty, or every resolver failed and none returned records, in which case each failing resolver is named with its own outcome (\"8.8.8.8: SERVFAIL on A; 1.1.1.1: NXDOMAIN on A\") so a split result stays visible. Null when at least one resolver answered; per-resolver failures are still in \"resolver_results\" and \"flags\"."New value: +"Set only when the domain could not be queried at all. Either it was rejected before any query — the entry is not a domain name (the message names the entry and the accepted shapes), or it is a private, loopback, or cloud-metadata target — and \"resolver_results\" is empty, or every resolver failed and none returned records, in which case each failing resolver is named with its own outcome (\"8.8.8.8: SERVFAIL on A; 1.1.1.1: NXDOMAIN on A\") so a split result stays visible. Null when at least one resolver answered; per-resolver failures are still in \"resolver_results\" and \"flags\"."
changedOutput schema / properties / results / items / properties / records / description
Previous value: -"Resolved records from a single resolver, keyed by record type (A, AAAA, CNAME, MX, TXT, NS). Taken from the primary resolver (first in \"resolvers\"), or from the first resolver that returned records when the primary returned none. Read \"records_source\" for which resolver these came from, and \"resolver_results\" for the full per-resolver picture. This is also the reference set the per-resolver answers are reported against: a resolver that returned exactly these values for a type names it in \"records_same_as_domain\" rather than repeating them."New value: +"Resolved records from a single resolver, keyed by record type (A, AAAA, CNAME, MX, TXT, NS, CAA, SOA). Names carry no trailing dot; MX renders as \"<preference> <exchange>\", CAA as '<flags> <tag> \"<value>\"', and SOA as \"<primary nameserver> <hostmaster> <serial> <refresh> <retry> <expire> <minimum>\". Taken from the primary resolver (first in \"resolvers\"), or from the first resolver that returned records when the primary returned none. Read \"records_source\" for which resolver these came from, and \"resolver_results\" for the full per-resolver picture. This is also the reference set the per-resolver answers are reported against: a resolver that returned exactly these values for a type names it in \"records_same_as_domain\" rather than repeating them."
changedOutput schema / properties / results / items / properties / resolver_results / items / properties / status_by_type / description
Previous value: -"Outcome for each requested record type, keyed by type. \"ok\" = records returned; \"nodata\" = the domain exists but has no record of this type; \"nxdomain\" = the domain does not exist (check for a typo, an expired registration, or a missing delegation); \"servfail\" = the resolver could not complete the query, commonly a DNSSEC validation failure; \"refused\" = the resolver declined; \"timeout\" = no answer within timeout_ms; \"error\" = any other failure, described in \"error\"."New value: +"Outcome for each requested record type, keyed by type. \"ok\" = records returned; \"nodata\" = the domain exists but has no record of this type; \"nxdomain\" = the domain does not exist (check for a typo, an expired registration, or a missing delegation); \"servfail\" = the resolver could not complete the query, commonly a DNSSEC validation failure; \"refused\" = the resolver declined the query or refused the connection; \"timeout\" = no answer within timeout_ms; \"error\" = any other failure, described in \"error\"."