Review: DNS: SPF/DKIM/DMARC records for landscaping-assistant.app

review-1737-2026-07-03 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type (Feature)
  • [x] Lineage
  • [x] Repo
  • [x] User Story
  • [x] Context
  • [x] File Targets
  • [x] Feature Flag (none)
  • [x] Acceptance Criteria
  • [x] Test Expectations
  • [x] Constraints
  • [x] Checklist
  • [x] Related
All sections present. Template structurally complete.

Traceability

  • [x] story:custom-domain label — "As platform admin, I want each app to send from its own domain so emails look professional and build domain reputation"
  • [x] story note verified — found in project-stalwart-email user-stories section
  • [x] arch:dns label — DNS component
  • [ ] arch note MISSING — [SCOPE] Create architecture note arch-dns for component dns
  • [x] Forgejo issue — ldraney/pal-e-services#165, open

File Targets

  • [ ] "GoDaddy DNS configuration (manual or via Terraform GoDaddy provider if available)" — ISSUE: Vague. The actual target is pal-e-platform/terraform/dns.tf. The GoDaddy provider (ldraney/godaddy v0.1.0) IS available and already manages A records for this domain. Should specify the exact file path.

Repo Placement

MISMATCH. Issue specifies ### Repo: ldraney/pal-e-services and is filed on that repo. However:
  • DNS records are managed in pal-e-platform/terraform/dns.tf
  • The GoDaddy provider is configured in pal-e-platform/terraform/providers.tf
  • The existing A record for landscaping-assistant.app already lives in pal-e-platform/terraform/dns.tf (line 12-18)
  • pal-e-services has NO GoDaddy provider and no DNS management capability
The work must be done in ldraney/pal-e-platform. Either the issue should be moved or the body should acknowledge cross-repo work.

Dependencies

  • Documented: "Depends on: Stalwart domain/account setup (needs DKIM public key)" = pal-e-services#164 (board item #1736)
  • Transitive: #164 depends on pal-e-platform#498 (Stalwart install, board item #1733)
  • Chain: #1733 (Stalwart install) → #1736 (domain/account setup) → #1737 (this item)
  • Both upstream items in backlog — this item is blocked until DKIM public key is generated

Acceptance Criteria

5 criteria, all verifiable programmatically:
  • A record: verifiable via dig A mail.landscaping-assistant.app
  • SPF: verifiable via dig TXT landscaping-assistant.app
  • DKIM: verifiable via dig TXT default._domainkey.landscaping-assistant.app
  • DMARC: verifiable via dig TXT _dmarc.landscaping-assistant.app
  • mxtoolbox validation: verifiable via web check (24-48h propagation caveat)
Criteria are clear and testable. Note: DKIM criterion cannot be verified until Stalwart generates the key (dependency).

Blast Radius

  • Sibling domain: Issue #166 (board item #1738) is the identical pattern for westsidekingsandqueens.com
  • Third domain: palinks.app has an A record in dns.tf (line 4-9) but no SPF/DKIM/DMARC — may need the same treatment
  • Single SPF constraint: Issue correctly notes "Only ONE SPF record per domain" — if palinks.app already has an SPF record elsewhere, adding one via Terraform could conflict

Decomposition Assessment

1 file to modify (dns.tf), 4 DNS resources to add, 5 acceptance criteria. Estimated agent work: under 5 minutes once DKIM key is available. No decomposition needed.

Recommendation

  • [BODY] Fix repo reference: ### Repo should be ldraney/pal-e-platform (not pal-e-services)
  • [BODY] Fix file targets: replace vague "GoDaddy DNS configuration" with terraform/dns.tf (append SPF/DKIM/DMARC resources after existing landscaping_assistant_a resource at line 18)
  • [SCOPE] Decide issue placement: move issue to pal-e-platform repo, or document in body that this is cross-repo work targeting pal-e-platform
  • [SCOPE] Create architecture note arch-dns for the DNS component