Review: Configure Caddy reverse proxy for landscaping-assistant.app on edge-proxy
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type -- Feature
- [x] Summary -- present
- [x] User Story -- present, well-formed
- [x] Context -- present, references related issues
- [x] Lineage -- present (Parent: none, Story: custom-domain)
- [x] Repo -- pal-e-platform
- [x] Scope -- present, 4 items
- [ ] File Targets -- WEAK: says "Salt states for edge-proxy Caddy config" but gives no concrete paths. Should specify
salt/states/caddy/init.slsandsalt/states/caddy/Caddyfile.j2(to be created, mirroring #425 pattern) - [x] Feature Flag -- None (correct, infrastructure work)
- [x] Test Expectations -- present, 2 items
- [x] Acceptance Criteria -- present, 4 items
- [x] Constraints -- present, 2 items
- [x] Checklist -- present, 3 items
- [x] Related -- present, references #425 and DNS dependency
Traceability
- [x] story:custom-domain label -- present on board item
- [ ] story note MISSING --
custom-domainis NOT listed in theproject-landscaping-assistantuser-stories table. [SCOPE] Create user story entry forcustom-domainonproject-landscaping-assistantuser-stories section. - [x] arch:pal-e-platform label -- present on board item
- [ ] arch note MISSING -- no
arch-pal-e-platformnote found in pal-e-docs. [SCOPE] Create architecture notearch-pal-e-platformfor the pal-e-platform component. - [x] Forgejo issue -- pal-e-platform#434, state: open
File Targets
- [ ] "Salt states for edge-proxy Caddy config" -- ISSUE: No concrete file paths given. The
salt/states/caddy/directory does not exist yet in pal-e-platform. Issue #425 (palinks.app) establishes the pattern by creatingsalt/states/caddy/init.sls. This ticket should explicitly list:
Repo Placement
OK. Issue filed on pal-e-platform, work is in pal-e-platform salt states. Single repo scope is correct.
Dependencies
- pal-e-platform#435 (DNS A record via godaddy-tofu) -- state: open. This ticket explicitly depends on DNS being configured. Correct dependency documented in Related section ("Depends on: DNS A record for landscaping-assistant.app").
- pal-e-platform#425 (palinks.app Caddy config) -- state: open. This ticket mirrors #425. If #425 creates the
salt/states/caddy/directory and Salt state structure, this ticket adds to it. Implicit ordering dependency: #425 should land first to establish the pattern. - pal-e-platform#424 (Hetzner edge provisioning) -- state: closed. Prerequisite satisfied.
- Board item #1461 (landscaping-assistant#224, story:custom-domain) and #1460 (landscaping-assistant#223, story:custom-domain) -- related custom-domain items on the same board. No blocking relationship.
Acceptance Criteria
4 AC items, all verifiable by an agent:
- "Caddy config includes landscaping-assistant.app block" -- verifiable by reading Caddyfile
- "Traffic proxied to correct k3s service" -- verifiable after deploy with curl, but needs the Tailscale mesh address specified. Issue #425 uses
palinks.tail5b443a.ts.net:443pattern. This ticket should specify the target address (e.g.,landscaping-assistant.tail5b443a.ts.net:443or the actual k3s service address). - "TLS certificate auto-provisioned" -- verifiable with curl -I after deploy
- "Salt state applied to Hetzner edge" -- verifiable by running salt state
Missing: no AC for www.landscaping-assistant.app redirect (the palinks.app mirror #425 includes www redirect).
Blast Radius
Low. Additive change to Caddy config. Constraint "Must not break palinks.app routing" is explicitly stated. The Salt state approach ensures reproducibility. No downstream consumers beyond the landscaping-assistant app itself.
Decomposition Assessment
No decomposition needed. Single repo, 1-2 file targets, 4 AC items, estimated agent work under 5 minutes. This is a straightforward additive config change mirroring #425.
Recommendations
- [BODY] Specify concrete file targets:
salt/states/caddy/init.sls(extend with landscaping-assistant.app block) and optionallysalt/states/caddy/Caddyfile.j2. Current "Salt states for edge-proxy Caddy config" is too vague for agent consumption. - [BODY] Specify the Tailscale mesh proxy target address in AC #2 (e.g.,
landscaping-assistant.tail5b443a.ts.net:443). - [BODY] Add AC for www.landscaping-assistant.app redirect to landscaping-assistant.app (mirrors #425 pattern).
- [BODY] Note ordering dependency on #425 (palinks.app Caddy config should land first to establish salt/states/caddy/ structure).
- [SCOPE] Create user story entry for
custom-domainonproject-landscaping-assistantuser-stories section. - [SCOPE] Create architecture note
arch-pal-e-platformfor the pal-e-platform component.