Review: T3: Arch Linux Ruby base image in Harbor (r2)

review-1201-2026-05-10-r2 Review

review ready

Verdict: READY

Template Completeness

  • [x] Type -- present (Infra)
  • [x] Lineage -- present (Plan: infra overhaul, Ticket 3 of 5)
  • [x] Repo -- present (ldraney/pal-e-platform)
  • [x] User Story -- present
  • [x] Context -- present, thorough
  • [x] File Targets -- present (2 creates, 1 conditional modify)
  • [x] Dockerfile Shape -- present with verified package names
  • [x] Pipeline Shape -- present
  • [x] Acceptance Criteria -- present (11 items)
  • [x] Test Expectations -- present (4 items)
  • [x] Dependencies -- present (added since r1: T2 and T4 as downstream dependents)
  • [x] Constraints -- present
  • [x] Checklist -- present (added since r1: PR opened, Dockerfile builds, image pushed, cron configured, no unrelated changes)
  • [x] Related -- present with cross-repo issue references
All template sections are complete. Every item flagged as missing in review-1201-2026-05-10 has been addressed.

Traceability

  • [x] story:infra-overhaul label -- present on board item
  • [x] story note verified -- story-infra-overhaul note exists in pal-e-docs (created since r1). Has Motivation, Tickets, Outcome, and Tickets Killed sections.
  • [x] arch:harbor label -- present on board item
  • [x] arch note verified -- arch-harbor note exists in pal-e-docs (created since r1). Has Image Strategy, Registry URLs, and Weekly Base Image Rebuild sections.
  • [x] Forgejo issue -- ldraney/pal-e-platform#360, state: open
Minor gap (non-blocking): The project-pal-enterprises user-stories table does not yet have an infra-overhaul row. Current entries: landing-page, sso-gateway, tool-dashboard, client-portal. The story note exists as a standalone note, which is sufficient for traceability. Adding the row to the project page is a housekeeping task, not a scope blocker.

File Targets

  • [x] docker/ruby-arch/Dockerfile -- to be CREATED. Directory does not exist yet (expected). Dockerfile shape provided inline with verified Arch package names (ruby, jemalloc, postgresql-libs, libyaml, base-devel, git, pkgconf). Package corrections documented: ruby-bundler replaced with gem install, libpq removed, pkg-config corrected to pkgconf.
  • [x] docker/ruby-arch/.woodpecker.yaml -- to be CREATED. Pipeline shape described inline. Note: Woodpecker does not auto-discover yaml files in subdirectories. The existing pal-e-platform uses a single root .woodpecker.yaml. The agent will need to either (a) place this as a separate pipeline config in a .woodpecker/ directory at repo root, or (b) add steps to the root pipeline with path-based triggers. The issue body describes the intent clearly enough for an agent to resolve this at implementation time.
  • [x] terraform/modules/harbor/main.tf -- VERIFIED EXISTS (575 lines). Contains Harbor Helm release, OIDC config, portal CSS proxy. No Harbor project resource exists yet. The issue correctly identifies this as a conditional modify to add the pal-e Harbor project.

Repo Placement

OK. Issue filed on ldraney/pal-e-platform. All file targets (docker/, terraform/) are pal-e-platform paths. Board item is on board-pal-enterprises which is correct since this infra supports the pal-enterprises app. No cross-repo mismatch.

Dependencies

Dependencies now documented in the issue body (fixed since r1):
  • Upstream: None -- T3 can start immediately. Wave 1 parallel with T1.
  • Downstream: T2 (pal-e-deployments#158, dev overlay) and T4 (pal-enterprises#18, Dockerfile migration) both depend on this base image existing in Harbor.
Board state confirms: T1 (#1200), T2 (#1197), T3 (#1201), T4 (#1198), T5 (#1199) are all in backlog. No blocking items in in_progress.

Acceptance Criteria

11 ACs are specific and testable. Key improvements since r1:
  • Harbor project creation AC added (was missing)
  • Kaniko + pacman compatibility AC added (was missing)
  • Manual pipeline trigger AC added
All criteria are verifiable by an agent post-implementation. Test commands are concrete (docker run, gem install pg, LD_PRELOAD verification).

Blast Radius

Low. Creates new files only. The existing pal-enterprises Dockerfile (ruby:3.4.8-slim Debian) is untouched. No existing pipelines are modified. Future consumers (pal-enterprises, westside-ror, pal-e-ror, westside-docs) will be migrated by T4 separately. The existing pal-enterprises .woodpecker.yaml uses Kaniko (plugin-kaniko:2.3.0) for app builds -- this pipeline would add a new, separate build pipeline for the base image.

Decomposition Assessment

3 file targets in 1 repo. 11 ACs + 4 test expectations exceeds the >5 AC threshold numerically, but the work is cohesive: write one Dockerfile, write one pipeline config, optionally add one Terraform resource. All three files serve a single purpose (build and push a base image). Estimated agent work is within 5 minutes -- Dockerfile and pipeline shapes are provided inline. No decomposition needed.

Refinement Fixes Verified (from r1)

  • [x] Dockerfile package names corrected (ruby-bundler to gem install, libpq removed, pkg-config to pkgconf)
  • [x] Dependencies section added (T2 and T4 as downstream dependents)
  • [x] Missing ACs added (Harbor project creation, Kaniko+pacman compatibility)
  • [x] story-infra-overhaul note created
  • [x] arch-harbor note created
  • [x] Checklist section added

Recommendations

No action needed. Ticket is ready for implementation.
Housekeeping (non-blocking): Add infra-overhaul row to project-pal-enterprises user-stories table for completeness.