Review: Dockerfile + Woodpecker CI pipeline
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- child of #40, depends on #41
- [x] Repo -- ldraney/westside-ror
- [x] User Story
- [x] Context
- [x] File Targets
- [x] Acceptance Criteria
- [x] Test Expectations
- [x] Constraints
- [x] Checklist
- [x] Related
Traceability
- [x] story:ci-pipeline label present
- [ ] story note MISSING -- [SCOPE] Project page
project-westside-rordoes not exist in pal-e-docs. Cannot verify user story entry. Create project page with user-stories section. - [x] arch:ci-cd label present
- [ ] arch note MISSING -- [SCOPE] No
arch-ci-cdnote found in pal-e-docs. Create architecture note for CI/CD component. - [x] Forgejo issue -- #43, open
File Targets
- [x]
Dockerfile-- verified: exists, usesdocker.io/library/ruby:3.4.8-slimas claimed. Thruster reference in CMD butbin/thrustdoes NOT exist and thruster gem is NOT in Gemfile/Gemfile.lock. Issue correctly identifies this needs changing. - [x]
bin/docker-entrypoint-- verified: exists,db:prepareruns correctly. - [x]
.woodpecker.yaml-- confirmed does not exist yet (to be created). - [x] Reference:
~/landscaping-assistant/.woodpecker.yaml-- verified exists, structure matches what issue describes (clone, bundle-install, lint, test, build-and-push steps). - [x] Reference:
~/landscaping-assistant/Dockerfile-- verified usesruby-rails-build:latest/ruby-rails-runtime:latest, exposes port 3000, uses Puma directly.
Repo Placement
OK -- issue is filed on ldraney/westside-ror, all file targets are in that repo. Single-repo scope.
Dependencies
- #41 (Terraform service onboarding) -- open, creates Harbor project + robot account. This is a prerequisite: without the Harbor project, Kaniko build-and-push will fail. Documented in issue Lineage section. Board item #1374 is in backlog.
- #40 (Epic: CI/CD pipeline) -- open, parent epic. Board item #1372 in backlog.
- #42 (K8s prod manifests) -- sibling, references images this pipeline pushes. Board item #1375 in backlog. No blocking relationship for this ticket.
Acceptance Criteria
- [x] AC1-AC6 are clear and agent-verifiable (file content checks).
- [ ] AC3 says "test" step should use the reference pattern, but the reference uses
bundle exec rspecwhile westside-ror uses Minitest (test/directory, no rspec gem). The issue body and AC do not mention this difference. The agent will copybundle exec rspecfrom the reference and the pipeline will fail. [BODY] The test step must usebundle exec rails testinstead ofbundle exec rspec. - [ ] AC7 ("Repo activated in Woodpecker") is a manual/API step outside the PR scope. Should be split out or marked as a manual post-merge step.
- [ ] AC8 ("First pipeline run succeeds") depends on AC7 and on #41 completing first. Not achievable in the same PR.
Blast Radius
- Dockerfile change is self-contained to westside-ror.
- Thruster (
bin/thrust) is referenced in the current Dockerfile CMD but does not exist in the repo and the gem is not bundled -- the current Dockerfile is already broken for production. No downstream risk from removing the Thruster reference. - No other repos are affected by this change.
Decomposition Assessment
2 file modifications + 1 file creation, single repo. 8 acceptance criteria but 2 (AC7, AC8) are manual/post-merge. Core agent work is ~3 files, well under 5-minute rule. No decomposition needed.
Recommendations
[BODY]Add explicit note in Context or Constraints: westside-ror uses Minitest (bundle exec rails test), NOT RSpec. The test step in.woodpecker.yamlmust differ from the landscaping-assistant reference.[BODY]Clarify AC3: the test step command should bebundle exec rails test, notbundle exec rspec.[BODY]Clarify AC7-AC8: mark as manual post-merge steps or split into a separate task, since they cannot be verified in a PR.[SCOPE]Create project pageproject-westside-rorin pal-e-docs with user-stories section includingci-pipelinestory.[SCOPE]Create architecture notearch-ci-cdin pal-e-docs for the CI/CD component.