Add Hover provider support
Add hover as a remediation provider in records.json so both the CLI
(--provider hover) and the web app emit Hover-panel-specific fix instructions
for the 13-record Thundermail set (1 MX, 5 SRV, 4 TXT, 3 DKIM CNAME).
Internal ticket: TBPRO 6940
(6940_HOVER_DNS_MITCHENER.CA, domain example.com).
⚠️ Ship as UNVERIFIED first. The SRV field layout below is confirmed from a
screenshot of the live Hover Edit DNS Record form; the MX/TXT/CNAME field labels come
from Hover's official Managing DNS Records at Hover reference tables, not a live add-record screenshot. Follow the
godaddy/ionos precedent: prefix each header string UNVERIFIED — until confirmed
end-to-end, then drop the prefix.
🎯 example.com is the verification target. It's hosted on Hover (ns1.hover.com/
ns2.hover.com) and is currently 10/13 — three SRV records have a port typo (433
instead of 443 on _jmap/_caldavs/_carddavs). Once the hover block is in, the
checker's SRV fix strings can be eyeballed directly against the live Edit DNS Record
form the user already has open, then the port fixed to reach 13/13.
Add-record model
Hover uses a single Add-a-record form with a Type dropdown (like bunny/godaddy,
not per-type sections like cosmotown).
Path: Hover control panel → your domain → DNS section → Add a record → choose Type,
fill fields, Save. TTL defaults to 15 minutes.
Key conventions (from docs + the live SRV screenshot):
- Apex host = literal
@ for MX and TXT (Hover's docs say "@ for the root domain").
- SRV splits the
_service._protocol label into separate Service (_jmap) +
Protocol (_tcp) fields — the same reason the {service}/{protocol} tokens exist
for GoDaddy/IONOS. BUT Hover's SRV Subdomain (optional) field is left blank
for the apex (the panel shows .example.com beside an empty box), not @. The
existing {srvhost} token yields @, so this needs a new {srvsubhost} token =
the SRV "rest" label but empty at the apex (mirroring how {subhost} relates to
{host}). Add it to both interpreters (Python + JS), kept identical.
- CNAME cannot live on the root at Hover (docs), but all three DKIM CNAMEs are on
subdomains (tm1._domainkey …), so this is a non-issue for our record set.
Field mapping
| Type |
Fields (Hover label → value) |
| MX |
Type=MX, Hostname={host} (@), Priority={priority}, Mail Server={target} |
| SRV |
Type=SRV, Service={service}, Protocol={protocol}, Subdomain={srvsubhost} (blank at apex), Priority={priority}, Weight={weight}, Port={port}, Server={target} |
| TXT |
Type=TXT, Hostname={host} (@), Content={value} |
| CNAME |
Type=CNAME, Hostname={host}, Target Name={target} (no trailing dot) |
Work items
🤖 Generated with Claude Code
Add Hover provider support
Add
hoveras a remediation provider inrecords.jsonso both the CLI(
--provider hover) and the web app emit Hover-panel-specific fix instructionsfor the 13-record Thundermail set (1 MX, 5 SRV, 4 TXT, 3 DKIM CNAME).
Internal ticket: TBPRO 6940
(
6940_HOVER_DNS_MITCHENER.CA, domainexample.com).Add-record model
Hover uses a single Add-a-record form with a Type dropdown (like
bunny/godaddy,not per-type sections like
cosmotown).Path: Hover control panel → your domain → DNS section → Add a record → choose Type,
fill fields, Save. TTL defaults to 15 minutes.
Key conventions (from docs + the live SRV screenshot):
@for MX and TXT (Hover's docs say "@for the root domain")._service._protocollabel into separate Service (_jmap) +Protocol (
_tcp) fields — the same reason the{service}/{protocol}tokens existfor GoDaddy/IONOS. BUT Hover's SRV Subdomain (optional) field is left blank
for the apex (the panel shows
.example.combeside an empty box), not@. Theexisting
{srvhost}token yields@, so this needs a new{srvsubhost}token =the SRV "rest" label but empty at the apex (mirroring how
{subhost}relates to{host}). Add it to both interpreters (Python + JS), kept identical.subdomains (
tm1._domainkey…), so this is a non-issue for our record set.Field mapping
MX, Hostname={host}(@), Priority={priority}, Mail Server={target}SRV, Service={service}, Protocol={protocol}, Subdomain={srvsubhost}(blank at apex), Priority={priority}, Weight={weight}, Port={port}, Server={target}TXT, Hostname={host}(@), Content={value}CNAME, Hostname={host}, Target Name={target}(no trailing dot)Work items
{srvsubhost}token toresolve_record(Python) andresolveRecord(JS) — identical.hoverprovider block torecords.json(headersUNVERIFIED —prefixed).README.mdprovider list + a Hover paragraph.CLAUDE.mdcrucial-decisions with Hover's quirks.example.comon the live panel, then dropUNVERIFIED —.🤖 Generated with Claude Code