Owl of Athena, gold seal — the Owl Semaphore

Resolution Scope

a sovereign instrument for measuring DNS resolution — what a domain actually publishes, verified against the protocol and sealed so anyone can re-check it.

"Resolution" is literal: DNS resolution. This is the verified-substrate build of the DNS Tool family — the future of the instrument under its own name. Source is public: github.com/IT-Help-San-Diego/resolution-scope.

A real measurement, not a brochure

This is the engine's verbatim output for the domain you are reading right now — captured 2026-09-02 (UTC), seal included — with the instrument’s first public release (v26.0.0-alpha.3), all ten controls sealed under scheme v5. The instrument does not flatter its operator: the failures below are real, and the domain publishes them anyway.

══ resolutionscope.com ══
engine 26.0.0-alpha.3 · resolver cloudflare · 2026-09-02 15:55:09 UTC (epoch 1788364509) · session f2b3fc09c38592a0
seal   64256c68c5dc9e302d60b1c4dd292c0747243cab48113c7a546b5c98e750b7f447cded09b7b0cd519b41b6c6302d966b323aa7b3d1fb51d771fae2e56bb91fbd
scheme resolution-scope-sha3-512-v5

FINDINGS
  HIGH       MTA-STS      ABSENT  record absent — zone exists, no MTA-STS
      rfc  Optional (RFC 8461). TXT at _mta-sts.<domain> plus an HTTPS policy file; only mode:enforce enforces — testing and none do not.
      → No transport policy: senders may fall back to plaintext delivery, so mail to this domain is exposed to STARTTLS stripping. Publish an MTA-STS policy (or deploy DANE).

ADVISORY
  LOW        CDS/CDNSKEY  ABSENT  not published — zone exists, no CDS/CDNSKEY
      rfc  Optional (RFC 7344, Proposed Standard — elevated from Informational by RFC 8078 §6.1; further updated by RFC 9615/9975). CDS/CDNSKEY at the apex signal automated DS maintenance to the parent zone; the parent MAY act on it but is not normatively required to (§6 SHOULD, not MUST).
      → DS updates at the parent are manual. If your keys change and the parent DS is not updated in step, the domain stops resolving (SERVFAIL) for every validating resolver until it is fixed. Publishing CDS/CDNSKEY lets a supporting parent maintain the DS automatically. This is an availability control: it protects you from your own key changes, not from an attacker. Remediation: publish CDS and CDNSKEY records matching your DS at your DNS operator; if your operator provides no way to create them, the remediation is procedural — write the registrar DS step into your key-change runbook.
  LOW        TLS-RPT      ABSENT  record absent — zone exists, no TLS-RPT
      rfc  Optional (RFC 8460). TXT at _smtp._tls.<domain>: v=TLSRPTv1 plus rua= — where senders deliver aggregate TLS-success/failure reports. Pairs with MTA-STS: the reporting channel that tells the operator their policy is (or is not) working.
      → No reporting channel: MTA-STS/DANE failures happen invisibly — the operator learns nothing when senders cannot enforce TLS. Publish v=TLSRPTv1 with a rua.

HOLDING
  OK         DNSSEC       PRESENT signed + delegated — chain validates from the root
      rfc  Optional (BCP: RFC 9364). If deployed: DNSKEY at the apex, DS at the parent, and the chain must validate from the root.
      → DNSSEC is fully operational: responses for this zone are cryptographically verifiable end-to-end.
  OK         SPF          PRESENT hardfail (-all) — strongest publisher assertion
      rfc  Optional (RFC 7208). If present: exactly one TXT record starting `v=spf1`, terminating in `-all` (enforce) or `~all` (softfail).
      → SPF authorizes specific senders and asserts the rest are unauthorized — the strongest statement the record can make. RFC 9989 §7.1 names a trade: because SPF runs early in the SMTP transaction, -all can cause rejection before DMARC is consulted, so mail that would have passed via an aligned DKIM signature may be refused — and those rejections never reach the DATA phase, so they never appear in your aggregate reports.
  OK         DMARC        PRESENT reject (p=reject) — enforced
      rfc  Optional (RFC 9989, which obsoletes RFC 7489). TXT at _dmarc.<domain> with p=none, p=quarantine, or p=reject; only quarantine and reject enforce.
      → DMARC tells receivers to refuse mail that fails SPF/DKIM alignment.
  OK         CAA          PRESENT wildcard-fully-restricted — issuewild ";"
      rfc  Optional (RFC 8659). CAA records name the CAs allowed to issue certificates for the domain; CAs are required to honor them.
      → The domain affirmatively prohibits wildcard-certificate issuance (RFC 8659 §4.3): no CA may issue for *.example. This is stricter than a named-CA restriction.
  OK         CSYNC        ABSENT  record absent — standing state outside a delegation change
      rfc  Optional (RFC 7477). CSYNC RR at the apex signals the parent's agent to copy delegation records (NS/A/AAAA) from the child — automated child-to-parent sync for delegation changes. NOT for DS sync (that is CDS). Absence is the standing state outside a delegation change, not a deficiency.
      → No CSYNC: delegation updates go through the registrar manually. Normal for most zones — absence is expected outside a delegation change (the CDS precedent).

COULD NOT MEASURE
  UNMEASURED DKIM         INDET   wildcard *._domainkey — the selector sweep proves nothing
      rfc  Optional (RFC 6376). Public key published at <selector>._domainkey.<domain>; the selector is advertised only in outbound mail (DKIM-Signature `s=` tag), not in the zone.
      → A nonexistent selector name resolved, so this domain publishes a wildcard and the 81-selector sweep is not probative — every probe "resolves" against it. Provide your actual selector (the s= tag in any outbound DKIM-Signature header) to measure DKIM definitively.

NOT APPLICABLE
  N/A        DANE         N/A     no mail declared (null MX, RFC 7505)
      rfc  Optional (RFC 7672). TLSA at _25._tcp.<mx-host> for each MX; requires a DNSSEC-signed zone (§1.3.2) to mean anything.
      → The domain explicitly declares it accepts no mail; there is no mail server to pin.

Coverage Score : 4/8 (50%)  — deployed controls over measured controls
Risk-Weighted  : 66%  (scoring v1)  — the same verdicts weighted by each control's identity — beside Coverage, never instead of it, never sealed
? (indeterminate): 1 · N/A (not applicable): 1  — excluded from both scores

Captured with the v26.0.0-alpha.3 release binary — the ten-control book, seal scheme v5: TLS-RPT and CSYNC joined the measured set, and the two new rows below are live proof (this domain lacks TLS-RPT — a real finding, published anyway; CSYNC absent is the standing state, honestly reported as such per the 2026-09-01 ruling). This domain declares no mail (null MX, RFC 7505) — so DANE is honestly not-applicable rather than silently passed, and DKIM is honestly indeterminate: a wildcard *._domainkey record with a null key means no selector can be enumerated, so the instrument reports "could not measure" instead of guessing a key verdict. Unmeasured is reported as unmeasured, never guessed. Two scores, always together: coverage counts what is deployed; risk-weighted is a versioned derived view over the same verdicts (identity-weighted — DMARC matters more than CAA), shown beside coverage and never instead of it, and never sealed. The block beneath the scores is the seal's complete input: hash those exact bytes with SHA3-512 and you re-derive the seal above — the tamper-evidence claim, performable by anyone.

Ten controls, three layers each

A scanner that collapses a control to one boolean — "SPF: PASS" — throws away what the standard demands and what breaks without it. Every verdict here keeps all three layers: the RFC requirement, the measured state, and the real-world consequence.

DNSSEC

RFC 4033–4035

measures the chain of trust from the root: DS → DNSKEY → RRSIG, including authenticated denial.

absent responses are forgeable in transit; cache poisoning is undetectable.

SPF

RFC 7208

measures the policy and its terminal qualifier — -all, ~all, or nothing.

absent any host on the internet may claim to send the domain's mail.

DKIM

RFC 6376

measures selector resolution and key validity — not just record presence.

absent message authorship and integrity are unverifiable in transit.

DMARC

RFC 9989 (Standards Track)

measures the policy and its enforcement level — none, quarantine, reject.

absent SPF and DKIM results carry no instruction; spoofed mail is delivered anyway.

DANE

RFC 7672

measures TLSA on each MX host (_25._tcp), null-MX aware — a no-mail domain reads not-applicable, never passed.

absent STARTTLS is strippable; mail transport can be silently downgraded to plaintext.

MTA-STS

RFC 8461

measures the full two-step: TXT discovery, then the HTTPS policy fetch and its mode.

absent the same downgrade surface remains open for senders that honor MTA-STS.

CAA

RFC 8659

measures certificate-issuance restriction records.

absent any public CA may issue a certificate for the domain.

CDS / CDNSKEY

RFC 7344 / 8078

measures child-published DS automation records.

absent DS rollover stays manual — an automation gap, reported as exactly that.

Every verdict names what it did not measure

PRESENT — measured, found, validates ABSENT — measured, confirmed missing INDETERMINATE — could not be measured, and says so NOT-APPLICABLE — no surface to measure, and says why

The difference between "absent" and "couldn't measure" is the difference between a finding and a guess. This instrument never promotes one to the other: a record that could not be queried is indeterminate, a denial from the zone's own authority is absent, a control with no surface to measure — a no-mail domain's DANE — is not-applicable, and only a validated answer is present. Scores count what is deployed — never what the scanner failed to check.

Every claim carries a measurement. Every verdict names what it did not measure.

Sealed, so anyone can re-check it

Each report carries a SHA3-512 seal computed over the verdict and its observation conditions — the domain, the engine version, the resolver identity, every control's disposition and score, and the DANE attribution zone (where the MX host lives relative to the domain) — under a versioned, open sealing scheme. Holding a seal as a trusted value, anyone can recompute it over a verdict, confirm that verdict is the one that was sealed, and flag any alteration after sealing.

The honest claim, and the only one: the seal is tamper-evidence. It does not prove a measurement occurred — a fabricated verdict can be sealed too. It proves the verdict you hold is the one that was sealed.

The sealing scheme and the engine are open source; run your own measurement of any domain from the public repository.

The substrate is the point

DNS Tool proved the measurements and the honesty rules in production. Resolution Scope rebuilds them on a substrate where the honesty is enforced by construction, not by policy:

  • engineRust, ten control arms, differential-tested against the production Go parentlive
  • truth-chainone disposition→presentation contract for every renderer — terminal, web, reportlive
  • storesealed measurement history — sealed on write, verifiable on read across scheme versionslive
  • proofsscoring semantics machine-checked in Leanlive
  • seL4compartmented deployment on the verified microkernel via LionsOS — the report renderer is already compartment-shaped: no network, no resolver, pure synchronous logicroadmap

Honesty about that last layer, verbatim from the architecture record: On a rented instance, seL4 runs as the guest OS of the provider's hypervisor — that layer is irremovable on virtual hardware. "Runs on a verified kernel" must not invite the reading that nothing else is underneath. True bare metal is .metal instances or owned hardware.

Lineage

DNS Tool is the production instrument this work grows from: domain-security intelligence with resolution topology, an engineer's report, and the research behind both — including The Verification Principle. Resolution Scope carries the same measurements and the same standard onto the verified substrate, under the instrument's own name.

The measurement is free and cannot be shelved; the queried domain's data is public DNS, never a person's.

Download it. The first distributable release is live: v26.0.0-alpha.3 — four targets (macOS Apple-silicon and Intel, Linux amd64 and arm64), each binary beside its sha256 receipt, built by the repo's own release workflow with the version the binary prints pinned to the tag it ships under. Clone-and-build still works; download-and-run now exists.

The analyzer core is AGPL-3.0: anyone may download, run, study, and modify it — and operating a hosted derivative requires publishing its changes. Ecosystem-facing components land under Apache-2.0 so the projects they join can absorb them.