Review: Fix westside-app Harbor auth (4 alerts) — v2

review-189-2026-03-18-v2 Review

review ready

Verdict: READY

Template Completeness

Evaluated against the refined scope (comment #5317 on issue #110), not just the original body.
  • [x] Lineage — present in original body
  • [x] Repo — original listed pal-e-services + pal-e-deployments; refinement correctly adds westside-app
  • [x] User Story — present
  • [x] Context — thorough root cause analysis with skopeo confirmation
  • [x] File Targets — complete in refinement: 4 files across 3 repos with line-level specificity
  • [x] Acceptance Criteria — updated in refinement to include CI pipeline success
  • [x] Test Expectations — present with kubectl, skopeo, and blackbox probe checks
  • [x] Constraints — present (tofu apply -lock=false, CI config caveat)
  • [x] Checklist — present
  • [x] Related — present (references #109 umbrella and PR #37)

File Targets

  • [x] ~/pal-e-services/terraform/k3s.tfvars line 34 — verified: contains image_repo = "westside-app/app" under the westsidekingsandqueens service key. Mismatch confirmed.
  • [x] ~/pal-e-deployments/overlays/westsidekingsandqueens/prod/kustomization.yaml — verified: lines 63 and 65 reference harbor.tail5b443a.ts.net/westside-app/app. Must change to westsidekingsandqueens/app.
  • [x] ~/westside-app/.woodpecker.yaml line 24 — verified: repo: westside-app/app. Must change to westsidekingsandqueens/app.
  • [x] ~/pal-e-services/terraform/services.tf — verified: harbor_project.service uses each.key as project name (line 11), and robot accounts are scoped to harbor_project.service[each.key].name (lines 48, 72). This confirms the architectural root cause.

Repo Placement

Acceptable but noteworthy. Issue is filed on forgejo_admin/pal-e-platform (the project board repo), but changes land in 3 other repos:
  • forgejo_admin/pal-e-services — k3s.tfvars change + tofu apply
  • forgejo_admin/pal-e-deployments — kustomization image refs
  • forgejo_admin/westside-app — Woodpecker CI push target
This is consistent with how pal-e-platform tracks cross-cutting issues. The agent needs clear execution sequencing (see Recommendation).

Dependencies

  • Board item #188 (issue #109) — in_progress. Umbrella "platform cleanup" issue. #110 is a child. No blocking relationship.
  • Board item #171 (todo-harbor-pull-secret-drift) — in next_up. Addresses the same class of bug (robot scope mismatch causing ImagePullBackOff). The todo describes a SOPS-based architectural fix. #110 fixes the immediate symptom; #171 prevents recurrence. Cross-reference recommended but no dependency.
  • Option B deferred — the refinement explicitly defers the services.tf architectural fix. Should become a separate ticket or fold into #171.

Acceptance Criteria

All criteria are automatable.
  • curl check, pod status, alert clearing, CI pipeline success — all verifiable by agent.
One gap (non-blocking): No criterion for verifying the new Harbor project westsidekingsandqueens exists after tofu apply. Existing images in westside-app/app won't appear in the new project. The agent must trigger a new CI pipeline after updating .woodpecker.yaml to populate the new project. The refinement implies this via the CI acceptance criterion, but the sequencing dependency is implicit.

Blast Radius

  • mcd-tracker-app has the same class of mismatch: key=mcd-tracker-app, image_repo=mcd-tracker/app. Harbor project created as mcd-tracker-app, robot scoped there. But ArgoCD image updater annotation points to mcd-tracker/app (wrong). CI pushes to mcd-tracker-app/app and kustomization references mcd-tracker-app/app — so pulls work today. Image updater is broken but masked by manual tag pinning. Ticking time bomb — flag for #171 or separate ticket.
  • All other services (6 of 8) have matching key/image_repo prefixes — no blast radius.
  • Execution order matters: tofu apply must run before kustomization change, or ArgoCD will sync to an empty Harbor project and 401 again.

Recommendation

READY for dispatch with one advisory note for the agent:
  • Execution order: (1) Change k3s.tfvars + tofu apply (creates Harbor project + robot), (2) Update + merge westside-app .woodpecker.yaml (CI pushes image to new project), (3) Update pal-e-deployments kustomization with new image path + tag from CI run. Without this sequencing, ArgoCD may sync to an empty project.
  • mcd-tracker-app mismatch should be documented as discovered scope — new ticket or fold into #171.
These are execution details an experienced agent can infer, so they do not block dispatch. The scope is solid, all file targets verified, design decision made, and acceptance criteria are complete and automatable.

Previous Reviews

v1 reviews (comments #5263 and #5322 on issue #110) identified: (1) design decision not made, (2) CI push side undocumented, (3) file targets incomplete. All three addressed in refinement comment #5317. Verdict upgraded from NEEDS_REFINEMENT to READY.