Skip to main content
When a domain does not load, open it on the Domains page and choose Diagnose. The control plane runs a fixed list of checks (no AI is involved), shows each result as it arrives, and gives every problem a fix. The same diagnosis is available as levelrail-cli domains diagnose and as an API call. It builds on the domain doctor: same checks, plus Cloudflare proxy detection, wildcard awareness, plain language certificate errors, propagation timing, and fixes that the platform can apply for you.

What it checks

Every check has a state: pass, warn, fail, skipped or unavailable.

Certificate errors in plain language

The raw error from Let’s Encrypt is kept, but the diagnosis leads with what it means:

Fixes

Each problem carries one fix of one of three kinds: After any fix, press Re-check. The diagnosis never assumes a fix worked. The record to create depends on the name: an address record (A, or AAAA for an IPv6-only server) at a zone apex such as example.com or example.co.uk, and a CNAME to this server’s public hostname for a subdomain such as app.example.com. When the server has no public hostname set, a subdomain gets an address record too.

Propagation

The result includes a propagation block: The dashboard polls on that schedule while the dialog or panel is open.

From the dashboard

  • Domains page: open a domain’s row and choose Diagnose. Results stream in, DNS first.
  • Add domains dialog: after adding, each domain shows the exact records to create and a live propagation status, so you can leave the dialog with DNS done.

From the CLI

--fix only runs fixes of kind auto. Guided and manual fixes are printed, never applied.

From the API

The owning app is found for you, and a caller who cannot see that app gets 404. Applying an auto fix is a normal API call (for a record, POST /api/v1/apps/{name}/domains/{domain}/dns-records, which needs root).

Speed

All network probes have a time limit and run concurrently: the three resolvers (and the A and AAAA lookups of each) in parallel, and the checks that do not depend on each other at the same time. The whole run is capped by APP_DOMAIN_DOCTOR_TIMEOUT (default 20 seconds) and each probe by APP_DOMAIN_DOCTOR_PROBE_TIMEOUT (default 4 seconds). On a healthy domain the first results arrive as soon as DNS answers.

What it does not do

It does not change DNS on its own, does not connect to addresses that are not this server’s, and does not retry certificate issuance by itself; Renew now is a button you press.
Last modified on October 21, 2026