Review: Spike: Align Dockerfile and pipeline with ruby-rails-runtime pattern

review-1380-2026-06-07 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type — Spike
  • [x] Lineage — Standalone, clear rationale
  • [x] Repo — Multiple (palinks, pal-e-services, pal-e-deployments)
  • [x] Question — Well-framed with 7 sub-questions
  • [x] Deliverables — docs/pipeline.md update + follow-up ticket
  • [x] Time-box — 1 hour
  • [x] Related — 3 related repos listed
All required spike template sections present and well-structured.

Traceability

  • [x] story:containerize-palinks label — present on board item
  • [ ] story note MISSING — [SCOPE] No project-palinks note exists in pal-e-docs. The story is documented in docs/user-stories.md in the repo but not tracked in pal-e-docs. Create project page project-palinks with user-stories section.
  • [x] arch:palinks label — present on board item
  • [ ] arch note MISSING — [SCOPE] No arch-palinks note found in pal-e-docs. Architecture docs exist in docs/architecture.md in the repo but are not tracked in pal-e-docs. Create architecture note arch-palinks.
  • [x] Forgejo issue — ldraney/palinks#18, open

File Targets

  • [x] Dockerfile — verified: line 26 uses docker.io/library/ruby:3.4.9-slim, lines 30-33 manual apt-get for jemalloc and postgresql-client, lines 42-43 manual user creation. Divergence from platform standard confirmed.
  • [x] .woodpecker.yaml — verified: build stage already uses ruby-rails-build from Harbor (correct). No runtime image referenced in pipeline.
  • [x] docker-compose.yml — verified: dev uses ruby-rails-build from Harbor (correct, not affected by runtime change).
  • [x] docs/pipeline.md — verified: exists, 141 lines, documents current pipeline. This is the spike deliverable target.

Repo Placement

OK. Issue correctly filed on palinks as the primary repo. The issue body correctly identifies that investigation spans palinks, pal-e-services, and pal-e-deployments. Since this is a spike (investigation, not code), single-repo filing is appropriate.

Dependencies

  • Board item #1227 (Add Woodpecker CI pipeline) — done. Prerequisite satisfied.
  • Board item #1228 (Create production kustomize overlay) — done. Prerequisite satisfied.
  • Board item #1229 (Cutover: migrate DB and decommission local Puma) — done. Production is already containerized.
  • No blocking items in todo/in_progress/next_up.

Acceptance Criteria

Spike deliverables are clear and verifiable:
  • docs/pipeline.md updated with findings — agent can verify file was modified with runtime alignment content.
  • Follow-up ticket created — agent can verify a new Forgejo issue exists referencing the spike.
Sub-questions in the Question section provide good investigation structure. All 7 sub-questions are concrete and answerable.

Blast Radius

Low. The DockerHub ruby-slim reference exists only in Dockerfile:26. No other files reference it. The runtime image change is isolated to the production Dockerfile runtime stage. Dev workflow (docker-compose) uses ruby-rails-build and is unaffected. The pipeline (.woodpecker.yaml) builds the Dockerfile but doesn't reference the runtime image directly.

Decomposition Assessment

No decomposition needed. Single investigation spike with 2 deliverables, 1 primary repo, 1-hour time-box. Well within the 5-minute agent execution rule for the docs update and ticket creation that follow.

Recommendation

  • [SCOPE] Create project page note project-palinks in pal-e-docs with a user-stories section that references the containerize-palinks story. The repo has excellent docs in docs/ but pal-e-docs has no project page for traceability.
  • [SCOPE] Create architecture note arch-palinks in pal-e-docs. The repo has thorough architecture docs in docs/architecture.md but pal-e-docs has no backing note.
Both SCOPE items are platform-level traceability gaps, not issues with this ticket's content. The spike scope itself is well-written and ready for execution once the backing notes exist.