Review: Dockerfile + Woodpecker CI pipeline

review-1376-2026-06-06 Review

review needs-refinement

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-ror does 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-cd note found in pal-e-docs. Create architecture note for CI/CD component.
  • [x] Forgejo issue -- #43, open

File Targets

  • [x] Dockerfile -- verified: exists, uses docker.io/library/ruby:3.4.8-slim as claimed. Thruster reference in CMD but bin/thrust does NOT exist and thruster gem is NOT in Gemfile/Gemfile.lock. Issue correctly identifies this needs changing.
  • [x] bin/docker-entrypoint -- verified: exists, db:prepare runs 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 uses ruby-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 rspec while westside-ror uses Minitest (test/ directory, no rspec gem). The issue body and AC do not mention this difference. The agent will copy bundle exec rspec from the reference and the pipeline will fail. [BODY] The test step must use bundle exec rails test instead of bundle 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.yaml must differ from the landscaping-assistant reference.
  • [BODY] Clarify AC3: the test step command should be bundle exec rails test, not bundle 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 page project-westside-ror in pal-e-docs with user-stories section including ci-pipeline story.
  • [SCOPE] Create architecture note arch-ci-cd in pal-e-docs for the CI/CD component.