Review: Create kustomize overlay in pal-e-deployments (re-review)

review-594-2026-03-28-v2 Doc

review ready

Verdict: READY

Re-review of board item #594 after refinement. Previous review: review-594-2026-03-28 (NEEDS_REFINEMENT, 4 findings). All 4 findings have been addressed in the updated issue body.

Previous Findings Resolution

  • [x] Finding 1 (dependency on #1): Lineage section now explicitly states "#1 (pal-e-services infra) creates the namespace and Harbor project. Both PRs can be developed in parallel but #1 must be applied first for ArgoCD sync and CI dry-run validation."
  • [x] Finding 2 (Harbor image URL): File Targets uses harbor.tail5b443a.ts.net/westside-ai-assistant/app. New AC7 added. Constraints section explicitly says "NOT internal URL."
  • [x] Finding 3 (secret injection pattern): Context, AC5, and Constraints all now specify individual env[].valueFrom.secretKeyRef (matching basketball-api pattern). Explicitly says "NOT envFrom secretRef."
  • [x] Finding 4 (PR placement instruction): Constraints section now says "PR goes to pal-e-deployments repo, not westside-ai-assistant."

Template Completeness

  • [x] Type — Feature
  • [x] Lineage — Standalone with dependency note on #1
  • [x] Repo — forgejo_admin/pal-e-deployments
  • [x] User Story — Marcus (admin) wants kustomize overlay so ArgoCD can deploy
  • [x] Context — Pattern reference, secret injection convention, basketball-api model
  • [x] File Targets — 3 files to create, exclusion list present
  • [x] Acceptance Criteria — 7 criteria (expanded from 6, added Harbor URL check)
  • [x] Test Expectations — kustomize render command provided
  • [x] Constraints — 5 constraints including explicit anti-patterns
  • [x] Checklist — PR opened, kustomize renders, no unrelated changes
  • [x] Related — project page + convention reference
All required Feature template sections present and filled.

Traceability

  • [x] story:read-ops — present on board item
  • [x] story:write-ops — present on board item
  • [x] arch:A4 — present on board item (infrastructure/deployment component)
  • [x] Forgejo issue — forgejo_admin/westside-ai-assistant#2, open

File Targets

  • [x] overlays/westside-ai-assistant/prod/kustomization.yaml — NEW file. Parent directory does not exist yet (expected). Reference pattern overlays/basketball-api/prod/kustomization.yaml verified: exists, contains base ref, JSON6902 rename patches, images transformer with harbor.tail5b443a.ts.net URL.
  • [x] overlays/westside-ai-assistant/prod/deployment-patch.yaml — NEW file. Reference overlays/basketball-api/prod/deployment-patch.yaml verified: uses individual env[].valueFrom.secretKeyRef entries (not envFrom). Issue correctly specifies 5 plain env vars and 3 secretKeyRef entries from westside-ai-assistant-secrets.
  • [x] overlays/westside-ai-assistant/prod/harbor-creds.enc.yaml — NEW file. Reference overlays/basketball-api/prod/harbor-creds.enc.yaml verified: SOPS-encrypted with age key.
  • [x] bases/standard/* — exclusion verified. Standard base contains deployment.yaml (name: app, port 8000, /healthz probes), service.yaml (name: app, port 8000), kustomization.yaml. No changes needed.

Repo Placement

Cross-repo placement is documented and acceptable. Issue lives on forgejo_admin/westside-ai-assistant (project tracking), work targets forgejo_admin/pal-e-deployments. Issue body declares ### Repo: forgejo_admin/pal-e-deployments. Constraints section explicitly instructs PR placement. Single-repo change — no additional Forgejo issues needed.

Dependencies

  • [x] Board item #593 (Provision infrastructure in pal-e-services) — now documented in Lineage section. Parallel development is possible, #1 must apply first for ArgoCD sync. CI server-side dry-run runs against default namespace context so may pass without the target namespace existing, but conservative documentation is correct.
  • [x] Board item #595 (NetworkPolicy update) — independent, not a blocker.
  • [x] SOPS age key — required for harbor-creds.enc.yaml encryption. Agent environment must have access. Not a blocker since SOPS key is available on the host.

Acceptance Criteria

7 criteria evaluated — all testable:
  • [x] AC1: kustomize render — command provided, verifiable
  • [x] AC2: Deployment named westside-ai-assistant with port 8000 — inspect rendered YAML
  • [x] AC3: Service named westside-ai-assistant with port 8000 — inspect rendered YAML
  • [x] AC4: Plain env vars for 5 config values — specific var names listed, verifiable
  • [x] AC5: Secrets via individual secretKeyRef from westside-ai-assistant-secrets — pattern now matches basketball-api convention exactly
  • [x] AC6: harbor-creds.enc.yaml is SOPS-encrypted — check for ENC[] markers
  • [x] AC7: Image uses external Harbor URL — verifiable in rendered YAML

Blast Radius

  • CI pipeline scope: Woodpecker CI iterates all overlays/*/prod/ directories. Malformed overlay would fail entire validation and block all pal-e-deployments PRs. Risk is low — agent follows verified reference pattern.
  • No downstream consumers: No existing services reference westside-ai-assistant. No cross-namespace policies point to it yet (#595).
  • No existing references: Grep confirms zero mentions of "westside-ai-assistant" in pal-e-deployments repo.

Decomposition Assessment

  • File count: 3 new files in 1 repo — within three-thing limit
  • AC count: 7 criteria — but 5 are simple YAML inspection checks, substantive work is 3 templated files
  • Estimated agent time: ~3 minutes. Templated copy-adapt from verified basketball-api/prod reference.
No decomposition needed.

Recommendation

No action needed. All 4 previous findings addressed. Ticket is ready for dispatch.