Add GoDaddy provider support
Add godaddy as a remediation provider in records.json so both the CLI
(--provider godaddy) and the web app emit GoDaddy-panel-specific fix instructions
for the 13-record Thundermail set (1 MX, 5 SRV, 4 TXT, 3 DKIM CNAME).
Internal ticket: TBPRO 6850 (6850_GODADDY_CUSTOM_DOMAIN).
⚠️ Ship as UNVERIFIED first. Field conventions below are derived from GoDaddy's
official help docs + a screenshot of the live SRV add-record form — but not yet
confirmed against a live end-to-end add on a real GoDaddy-hosted domain. Follow the
spaceship precedent: prefix the header strings UNVERIFIED — until validated, then
drop the prefix (see the "Pending verification" pattern in recent commits).
Add-record model
GoDaddy uses a single Add-record form with a Type dropdown (like bunny/spaceship,
not per-type sections like cosmotown).
Path: Domain Portfolio → select domain → DNS tab → DNS Records → Add New Record →
choose Type, fill fields, optional Add More Records, then Save / Save All Records.
Key conventions:
- Apex host = literal
@ (GoDaddy explicitly uses @ for the root — do NOT leave
it empty, unlike bunny/cosmotown). So use the {host} token, not {subhost}.
- MX and SRV have separate Priority (and Weight/Port for SRV) fields — never fold the
priority into Value.
- TTL defaults to "1 Hour"; leave it unset.
- On Save, domains with Domain Protection / 2-step verification may prompt for a
one-time code (informational only).
- Domain must be on GoDaddy nameservers for these panels to apply.
Field mappings (for the records.json provider block)
Token vocabulary available today: {host}, {subhost}, {target}, {value},
{match}, {priority}, {weight}, {port}.
MX — Type=MX, Name={host}, Priority={priority}, Value={target} (mail host only), TTL default
[add-an-mx-record-19234]
TXT (covers SPF / MTA-STS / TLSRPT / DMARC — GoDaddy adds SPF as a plain TXT) —
Type=TXT, Name={host}, Value={value}, TTL default
[add-a-txt-record-19232,
add-an-spf-record-19218]
CNAME (3 DKIM) — Type=CNAME, Name={host} (DKIM selectors are prefixes, so the
"Name cannot be @" rule doesn't bite), Value={target}, TTL default
[add-a-cname-record-19236]
SRV — ⚠️ fully decomposed into 7 inputs (transcribed from the live form screenshot,
stored at 6850_GODADDY_CUSTOM_DOMAIN/6850-godaddy-adding-srv-record.png):
| Form field |
Value |
| Type |
SRV |
| Service |
e.g. _jmap — the service label |
| Protocol |
e.g. _tcp |
| Name |
@ (apex) → {host} |
| Value |
{target} (host.domain.com) |
| Priority |
{priority} |
| Weight |
{weight} |
| Port |
{port} |
| TTL |
default |
[add-an-srv-record-19216]
⚠️ Implementation gap — new interpreter tokens needed for SRV
GoDaddy is the first provider that splits the SRV _service._protocol label into two
separate inputs. Every other provider puts the whole _jmap._tcp string in the Host
field, so there are no {service} / {protocol} tokens today.
This means GoDaddy support is not a pure records.json addition — it also needs the
tiny interpreter in both front-ends (resolve_record in Python, resolveRecord in JS)
extended to derive {service} and {protocol} by splitting the SRV host label on the
first . (_jmap._tcp → service _jmap, protocol _tcp), with the SRV Name becoming
the apex @. Per CLAUDE.md these two interpreters are duplicated and must stay in sync.
Acceptance criteria
Reference docs (GoDaddy Help CA)
Local source PDFs + SRV form screenshot: THUNDERBIRD_2023/TBPRO/6850_GODADDY_CUSTOM_DOMAIN/.
Add GoDaddy provider support
Add
godaddyas a remediation provider inrecords.jsonso both the CLI(
--provider godaddy) and the web app emit GoDaddy-panel-specific fix instructionsfor the 13-record Thundermail set (1 MX, 5 SRV, 4 TXT, 3 DKIM CNAME).
Internal ticket: TBPRO 6850 (
6850_GODADDY_CUSTOM_DOMAIN).Add-record model
GoDaddy uses a single Add-record form with a Type dropdown (like
bunny/spaceship,not per-type sections like
cosmotown).Path: Domain Portfolio → select domain → DNS tab → DNS Records → Add New Record →
choose Type, fill fields, optional Add More Records, then Save / Save All Records.
Key conventions:
@(GoDaddy explicitly uses@for the root — do NOT leaveit empty, unlike
bunny/cosmotown). So use the{host}token, not{subhost}.priority into Value.
one-time code (informational only).
Field mappings (for the
records.jsonprovider block)Token vocabulary available today:
{host},{subhost},{target},{value},{match},{priority},{weight},{port}.MX —
Type=MX,Name={host},Priority={priority},Value={target}(mail host only), TTL default[add-an-mx-record-19234]
TXT (covers SPF / MTA-STS / TLSRPT / DMARC — GoDaddy adds SPF as a plain TXT) —
Type=TXT,Name={host},Value={value}, TTL default[add-a-txt-record-19232,
add-an-spf-record-19218]
CNAME (3 DKIM) —
Type=CNAME,Name={host}(DKIM selectors are prefixes, so the"Name cannot be
@" rule doesn't bite),Value={target}, TTL default[add-a-cname-record-19236]
SRV —⚠️ fully decomposed into 7 inputs (transcribed from the live form screenshot,
stored at
6850_GODADDY_CUSTOM_DOMAIN/6850-godaddy-adding-srv-record.png):SRV_jmap— the service label_tcp@(apex) →{host}{target}(host.domain.com){priority}{weight}{port}[add-an-srv-record-19216]
GoDaddy is the first provider that splits the SRV
_service._protocollabel into twoseparate inputs. Every other provider puts the whole
_jmap._tcpstring in the Hostfield, so there are no
{service}/{protocol}tokens today.This means GoDaddy support is not a pure
records.jsonaddition — it also needs thetiny interpreter in both front-ends (
resolve_recordin Python,resolveRecordin JS)extended to derive
{service}and{protocol}by splitting the SRV host label on thefirst
.(_jmap._tcp→ service_jmap, protocol_tcp), with the SRVNamebecomingthe apex
@. Per CLAUDE.md these two interpreters are duplicated and must stay in sync.Acceptance criteria
godaddyblock added torecords.json(MX/SRV/TXT/CNAME) using the mappings above.{service}/{protocol}tokens implemented identically in the Python and JS interpreters.uv run verify_thundermail_dns.py example.com --provider godaddyrenders all 13 records(both
--fix-formattable and long) without error.UNVERIFIED —until confirmed against a live GoDaddy add-record panel;then verified end-to-end (add records on a GoDaddy-hosted test domain, confirm 13/13 via
--resolver <domain's GoDaddy authoritative NS>) and prefixes dropped.Reference docs (GoDaddy Help CA)
Local source PDFs + SRV form screenshot:
THUNDERBIRD_2023/TBPRO/6850_GODADDY_CUSTOM_DOMAIN/.