Validation: DNS A record + Caddy block for paldocs.app

validation-490-2026-07-17 Doc

validation pass

Verdict: PASS

Ticket

ldraney/pal-e-platform#490 — DNS A record + Caddy reverse proxy block for paldocs.app, making the Rails app publicly accessible via HTTPS.
Merged via PR #494: "feat: add DNS A record and Caddy site for paldocs.app"
Board item: #1703 on board-paldocs

Environment

Production — public internet via Hetzner edge VPS (178.156.129.142). Caddy reverse proxy on edge VPS forwarding to paldocs.tail5b443a.ts.net (Tailscale). GoDaddy DNS A record managed by OpenTofu in pal-e-platform.

Checks

# Criterion How Verified Result Evidence
1 <code>godaddy_dns_record.paldocs_a</code> resource added to <code>dns.tf</code> DNS resolution + PR #494 merged PASS <code>getent hosts paldocs.app</code> returns <code>178.156.129.142</code> — same IP as palinks.app and landscaping-assistant.app (Hetzner edge VPS)
2 <code>tofu apply</code> succeeds and DNS propagates <code>getent hosts paldocs.app</code> PASS DNS resolves globally to <code>178.156.129.142</code>. Record is live and propagated. (Cannot run <code>tofu plan -lock=false</code> from validation env — no terraform workspace access — but DNS resolution proves apply succeeded.)
3 Caddy block added on edge VPS for paldocs.app → paldocs.tail5b443a.ts.net <code>curl -sI https://paldocs.app</code> PASS Response header <code>via: 2.0 Caddy</code> confirms Caddy is proxying. HTTP/2 200 returned with Rails session cookie (<code>_pal_e_docs_rails_session</code>).
4 <code>curl https://paldocs.app</code> returns 200 with paldocs Rails app <code>curl -s -o /dev/null -w "%{http_code}" https://paldocs.app</code> PASS HTTP 200. HTML body contains <code>&lt;title&gt;Projects — pal-e-docs&lt;/title&gt;</code> with full Rails asset pipeline (Turbo, Stimulus, application CSS). Sub-route <code>/projects</code> also returns 200.
5 TLS certificate auto-provisioned by Caddy <code>curl -v https://paldocs.app</code> TLS output PASS TLSv1.3 / TLS_AES_128_GCM_SHA256. Subject: <code>CN=paldocs.app</code>. Issuer: <code>Let's Encrypt (YE1)</code>. Expires: Oct 5, 2026. SSL verify result: 0 (valid).

Regression Check

Other domains on the same Hetzner edge VPS still healthy:
  • palinks.app: resolves to 178.156.129.142, HTTPS returns HTTP 200, valid TLS
  • landscaping-assistant.app: resolves to 178.156.129.142, HTTPS returns HTTP 302 (auth redirect — expected), valid TLS
No regressions detected. Adding the paldocs.app Caddy block did not affect existing sites.

Limitations

Could not execute tofu plan -lock=false to verify zero drift — no terraform workspace access from validation environment. DNS resolution to the correct Hetzner edge IP is accepted as equivalent evidence that the GoDaddy DNS record was successfully applied via OpenTofu.

Discovered Issues

None.