Review: Add Woodpecker CI pipeline (westside-streamlit #3)
Verdict: APPROVED
Scope is solid. Ticket is well-structured, mirrors established basketball-api pipeline pattern, acknowledges dependencies, and embeds platform lessons (f17b49b, yaml parse validation). One [SCOPE] note: the backing arch note is missing but that is platform-wide — not a blocker for this ticket.
Template Completeness
- [x] Type (Feature)
- [x] Lineage — notes dependencies on Dockerfile and kustomize overlay tickets
- [x] Repo
- [x] User Story (As/I want/So that)
- [x] Context — references commit f17b49b lesson and yaml parse validation feedback
- [x] File Targets (create: .woodpecker.yaml; explicit do-not-touch list)
- [x] Acceptance Criteria (6, all When/Then, all verifiable)
- [x] Test Expectations
- [x] Constraints (mirror basketball-api, secrets hygiene, unconditional update-kustomize-tag, placeholder test step)
- [x] Checklist
- [x] Related
Traceability
- [x] story:reachable — maps to story-westside-streamlit-reachable (Platform + Head Coach, Keycloak + no Tailscale client). Verified in project-westside-streamlit user-stories section.
- [x] arch:ci-pipeline label present
- [ ] arch note MISSING — search_notes for arch-ci-pipeline returned 0 results. [SCOPE] Create architecture note arch-ci-pipeline for the shared Woodpecker → kaniko → Harbor → kustomize update pattern. NOT a blocker for this ticket (gap is platform-wide across all 7 services using this pattern).
- [x] Forgejo issue — https://forgejo.tail5b443a.ts.net/forgejo_admin/westside-streamlit/issues/3 (open)
File Targets
- [x]
.woodpecker.yaml(to be created) — consistent with reference implementation at/home/ldraney/basketball-api/.woodpecker.yamlwhich containsupdate-kustomize-tagstep at line 60 and downloads the sharedscripts/update-kustomize-tag.shfrom pal-e-platform. Pattern is verifiable and reusable. - [x] Explicit "do not touch" list (Dockerfile, pal-e-deployments overlay) correctly partitions scope to avoid overlap with #2 and #4.
Repo Placement
OK. Issue is filed on forgejo_admin/westside-streamlit where the .woodpecker.yaml will live. Dependencies (Dockerfile #2, kustomize overlay #4) correctly filed as separate tickets in the same repo and pal-e-deployments respectively.
Dependencies
Explicitly acknowledged in ticket body:
- #2 Dockerfile — needed for kaniko build step to have something to build
- #4 kustomize overlay — needed for update-kustomize-tag step to have a target file
- Harbor robot account — mentioned in "Blocks on" list
Per review directive: this is a scope review, not a readiness-to-dispatch review. Acknowledgement is sufficient; dispatch ordering is the kanban flow concern.
Acceptance Criteria
All 6 AC are When/Then format and independently verifiable. Concrete commands given (python yaml.safe_load, harbor UI check, git log check). AC #5 directly encodes the f17b49b fix pattern as a testable requirement. Excellent.
Blast Radius
Low risk. New file on a new repo — no existing workflows to break. Platform-wide implication: if the arch-ci-pipeline note is eventually created, all 7 services should be audited to confirm they share the f17b49b fix pattern (feedback_ci_pipeline_lessons already tracks 12 root-cause fixes, so this is likely covered).
Decomposition
No decomposition needed. 1 file target, 6 AC, estimated agent time < 5 min (copy basketball-api pattern, adjust repo/image names, yaml validate, PR). Fits the 5-minute rule cleanly.
Recommendation
[SCOPE]Create architecture notearch-ci-pipelinedocumenting the shared Woodpecker → kaniko → Harbor → kustomize-tag-update pattern used by all 7 platform services. Not a blocker for #934 — tracked as a separate platform docs ticket. Ava to decide whether to open it now or defer.
APPROVED for advance to todo. Dispatch ordering: wait for #2 (Dockerfile) and #4 (kustomize overlay) to reach done before this moves to in_progress.