Review: Upgrade ruby-rails-build base image to Bundler 4.x
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- Standalone, discovered during paldocs sprint:1
- [x] Repo -- listed as ldraney/pal-e-platform
- [x] User Story -- present
- [x] Context -- good explanation of Bundler 2.x vs 4.x checksum mismatch
- [x] File Targets -- present (but WRONG, see below)
- [x] Feature Flag -- none (correct for infra)
- [x] Acceptance Criteria -- 4 items
- [x] Test Expectations -- present
- [x] Constraints -- present, good backward-compat note
- [x] Checklist -- present
- [x] Related -- present
Traceability
- [ ] story:base-images -- NOT found on project-pal-e-platform user-stories table. No matching story key exists. The story label is novel and has no backing user story entry. [SCOPE] Create user story entry for
story:base-imageson project-pal-e-platform user-stories section, OR reclassify under an existing story likestory:superuser-deploy(since CI base images directly enable the deploy pipeline). - [ ] arch:ci-cd -- no architecture note
arch-ci-cdfound in pal-e-docs. [SCOPE] Create architecture notearch-ci-cdfor the CI/CD pipeline component, OR use a more specific label likearch:base-imageswith a corresponding note. - [x] Forgejo issue -- https://forgejo.tail5b443a.ts.net/ldraney/pal-e-platform/issues/462, open
File Targets
- [ ]
images/ruby-rails-build/Dockerfile-- ISSUE: path does NOT exist in pal-e-platform. Theruby-rails-buildimage is built fromldraney/base-images/Dockerfile(a separate repo). The pal-e-platform repo has an unrelateddocker/ruby-arch/Dockerfilewhich builds a different image (pal-e/ruby-arch, Arch Linux based).
Actual file target:
ldraney/base-images/Dockerfile -- this is the Dockerfile that produces library/ruby-rails-build:latest via the .woodpecker.yaml build-and-push-build step. Currently based on ruby:3.4.9-slim (Debian). Bundler is NOT explicitly pinned; it inherits whatever version ships with the Ruby Docker image.Repo Placement
MISMATCH. The Forgejo issue is filed on
ldraney/pal-e-platform but the actual Dockerfile to modify lives in ldraney/base-images. The issue should be moved to ldraney/base-images, or a new issue created there and this one closed with a cross-reference.Dependencies
- No blocking items found on the board. The only in_progress item is Phase 7 (Block-Structured Content Model), which is unrelated.
- Downstream: 5+ Rails repos consume
ruby-rails-build:latest-- paldocs, landscaping-assistant, palinks, westside-ror, rails-base, flightscanner, test-ruby. All must be tested after the image update. - The issue correctly notes paldocs#72 and paldocs#73 as the triggering context.
Acceptance Criteria
4 ACs, mostly verifiable:
- AC1 (Bundler >= 4.0 in Dockerfile) -- verifiable by reading the Dockerfile, but the approach needs thought: the current Dockerfile does NOT pin bundler at all. The fix may be adding
RUN gem install bundler -v '>=4.0'or switching to a Ruby image that ships Bundler 4.x natively. - AC2 (paldocs CI passes) -- verifiable via Woodpecker pipeline.
- AC3 (Harbor image tagged) -- verifiable via Harbor registry check.
- AC4 (paldocs lockfile restored) -- verifiable, but this is work in a DIFFERENT repo (paldocs), not base-images. Should be a separate follow-up ticket or noted as cross-repo work.
Missing: no AC for backward-compatibility verification with other Rails repos, despite Constraints section calling this out.
Blast Radius
HIGH. This is a shared base image consumed by at least 5 Rails applications (paldocs, landscaping-assistant, palinks, westside-ror, rails-base, flightscanner, test-ruby). Pushing a broken image to
:latest would break ALL Rails CI pipelines simultaneously. The Constraints section correctly flags this but the ACs do not include verification steps for non-paldocs repos.Decomposition Assessment
File count: 1 file in 1 repo (base-images/Dockerfile). ACs: 4 (but AC4 is cross-repo). Estimated agent time: under 5 minutes for the Dockerfile change itself. However, cross-repo validation (AC2, AC4) adds complexity. No decomposition needed if scoped to just the Dockerfile change, but the cross-repo ACs should be split out or documented as manual follow-up.
Recommendation
[BODY]Fix Repo field:ldraney/pal-e-platformtoldraney/base-images[BODY]Fix File Targets:images/ruby-rails-build/DockerfiletoDockerfile(root of base-images repo). Note that bundler is currently inherited from the Ruby base image, not explicitly installed.[BODY]AC4 (paldocs lockfile restore) is cross-repo work -- either remove it from this ticket's ACs and create a follow-up paldocs issue, or note it as manual post-merge step.[BODY]Add AC: "All Rails repos using ruby-rails-build:latest pass CI after image update" (backward-compat verification).[SCOPE]Create user story entrystory:base-imageson project-pal-e-platform user-stories section, OR relabel tostory:superuser-deploy.[SCOPE]Create architecture notearch-ci-cd, OR relabel to a more specific component likearch:base-imageswith a backing note.[LABEL]Move or re-file the Forgejo issue from ldraney/pal-e-platform to ldraney/base-images.