Review: Validate pal-e-deployments (k8s API unreachable)

review-515-2026-03-27 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type — Task
  • [x] Lineage — present (validation audit session 2026-03-28)
  • [ ] Repo — MISSING (should state forgejo_admin/pal-e-deployments)
  • [x] User Story — present
  • [x] Scope — present (replaces File Targets for Task type)
  • [ ] Context — partially embedded in Scope, no standalone section. Root cause (stale kubeconfig IP) is only in a comment, not in the issue body.
  • [x] Acceptance Criteria — 7 items present
  • [ ] Test Expectations — partially present, embedded in body text, no standalone section
  • [x] Constraints — present
  • [ ] Checklist — MISSING
  • [x] Related — present

Traceability

  • [x] story:superuser-deploy label — superuser deploy story
  • [x] arch:k8s-deploy label — k8s deployment architecture component
  • [x] Forgejo issue — forgejo_admin/pal-e-deployments#66, open
All three legs present. Traceability is complete.

File Targets

N/A — Task type. No file targets expected. The fix is a Woodpecker secret update, not a code change.

Repo Placement

Correct — issue is filed on forgejo_admin/pal-e-deployments and the failing pipeline (#39) is in that repo. The fix (Woodpecker secret update) is also scoped to that repo's kubeconfig secret. No cross-repo changes needed.

Dependencies

  • Board item #512 (Validate: pal-e-platform (3 merged + #222 pending)) is a sibling validation task from the same session. Independent — different repo, different pipeline. No blocking relationship.
  • Board item #411 (Bug: Harbor connectivity timeout from Woodpecker CI agent) is in in_progress. If Harbor connectivity is broken for the CI agent, the pal-e-deployments pipeline may also be affected even after kubeconfig fix — but the immediate blocker is the kubeconfig IP, not Harbor.
  • No dependencies documented in the issue body. The Harbor in_progress item should be noted as a potential secondary blocker.

Acceptance Criteria

7 AC items. Assessment:
  • AC1 "Pipeline #39 failure diagnosed — root cause documented" — DONE (investigation comment exists). Criterion is met but not reflected in the issue body.
  • AC2 "Kustomize build succeeds locally" — Verified: kubectl kustomize overlays/basketball-api/prod/ succeeds now.
  • AC3 "ArgoCD sync verified for basketball-api overlay" — Testable. Agent can run kubectl get app basketball-api -n argocd.
  • AC4 "Deployed resources match expected state" — Vague. What resources? What state? Needs specifics.
  • AC5 "Pipeline verified" — Duplicates AC1/AC3. Vague.
  • AC6 "Deployment confirmed" — Duplicates AC3/AC4. Vague.
  • AC7 "Features validated" — Vague. PR #65 added init container resource limits + busybox digest pin. AC should say: "basketball-api pod init container has resource limits and pinned busybox digest."
Summary: 3 of 7 AC items are vague/duplicate (AC4, AC5, AC6). AC7 is vague but fixable. The real work is 1 action (update secret) + 3 verifications.

Blast Radius

  • Kubeconfig secret naming inconsistency: pal-e-deployments uses kubeconfig, pal-e-platform uses kubeconfig_content. Different names, same concept. When the IP was stale, both would have been affected — but pal-e-platform's secret may have been updated independently.
  • Event filter gap: The pal-e-deployments kubeconfig secret is only enabled for pull_request events, NOT push. The pipeline .woodpecker.yaml also only triggers on pull_request. This means post-merge validation never runs — merged code is never validated by CI in this repo. This is a systemic gap, not specific to this ticket, but should be flagged as discovered scope.
  • No other repos in Woodpecker have a kubeconfig secret (checked). The blast radius is contained to pal-e-deployments.

Decomposition

7 AC items triggers the decomposition threshold check (>5). However, the actual fix is a single manual action (update Woodpecker secret) plus verification. 3 of the 7 AC items are vague duplicates that should be collapsed. After cleanup, this is ~3 AC items and a single action. No decomposition needed — needs AC refinement instead.

Recommendation

  • [BODY] Add ### Repo section: forgejo_admin/pal-e-deployments
  • [BODY] Add ### Context section with root cause from investigation comment: stale kubeconfig IP (10.0.0.217:6443 vs actual 127.0.0.1:6443)
  • [BODY] Add ### Checklist section (standard: PR opened, tests pass, no unrelated changes — or adapted for manual fix)
  • [BODY] Collapse AC4/AC5/AC6 into AC3. Replace AC7 with: "basketball-api pod init container shows resource limits and pinned busybox digest"
  • [BODY] Clarify that fix is mcp__woodpecker__update_repo_secret for kubeconfig on forgejo_admin/pal-e-deployments, not a code PR
  • [BODY] Add ### Test Expectations as standalone section
  • [SCOPE] Discovered scope: pipeline only fires on PR, not on push-to-main. Post-merge validation gap needs its own ticket.