Review: perf: seed CI vendor/bundle from pre-baked base image gems
Verdict: APPROVED
Re-review: Previous review returned NEEDS_REFINEMENT with one blocker -- missing
arch-ci-pipeline architecture note. That note has now been created as arch-ci-pipeline-landscaping-assistant. All checks pass.Template Completeness
- [x] Type -- Feature
- [x] Lineage -- Standalone, references base-images commit bd8e4cd
- [x] Repo -- ldraney/landscaping-assistant
- [x] User Story -- Developer wants faster CI builds via pre-compiled gem reuse
- [x] Context -- Explains base image pre-compiles 21 gems, CI bypasses them with vendor/bundle path
- [x] File Targets -- .woodpecker.yaml identified
- [x] Feature Flag -- "none" (CI infra change, appropriate)
- [x] Acceptance Criteria -- 2 criteria
- [x] Test Expectations -- 1 expectation (CI pipeline passes)
- [x] Constraints -- Only modify bundle-install step
- [x] Checklist -- Standard 3-item checklist
- [x] Related -- References ldraney/base-images
Traceability
- [x] story:ci-performance label -- "CI pipelines reuse pre-compiled gems from base image for faster builds"
- [x] story note verified -- found in project-landscaping-assistant user-stories section (Key: ci-performance, Role: Developer, Summary: "CI pipelines reuse pre-compiled gems from base image for faster builds", Success Metric: "bundle-install step seeds from pre-baked gems, pipeline time reduced")
- [x] arch:ci-pipeline label -- CI pipeline component
- [x] arch note verified --
arch-ci-pipeline-landscaping-assistantexists in pal-e-docs (note_type: architecture, status: active, project: landscaping-assistant). Comprehensive note covering Woodpecker pipeline diagram, components table, key decisions, and related notes. Previous blocker resolved. - [x] Forgejo issue -- ldraney/landscaping-assistant#299, open
File Targets
- [x]
.woodpecker.yaml-- verified: file exists (88 lines),bundle-installstep at lines 15-23 usesharbor.tail5b443a.ts.net/library/ruby-rails-build:latestimage. Runsbundle config set --local path vendor/bundleat line 18 thenbundle install --jobs=4at line 19. The proposed seed line (cp -a /usr/local/bundle/. vendor/bundle/) should be inserted between lines 18 and 19.
Repo Placement
OK. Issue filed on ldraney/landscaping-assistant, fix targets .woodpecker.yaml in the same repo. Single repo, no mismatch.
Dependencies
- Pre-req:
ldraney/base-imagescommit bd8e4cd (pre-baked gems) -- already merged - Related done items: #1297 (cache bundle install, issue #60), #1261 (Harbor base image + registry URL, issue #23), #1364 (CI Postgres audit, issue #138), #1298 (Woodpecker agent scaling, issue #62), #1415 (Kaniko push incident, issue #199)
- No CI-related items in in_progress, todo, or next_up columns -- no blockers
- Pattern validated: identical change already landed in intelligentstaffingsystems PR #91
Acceptance Criteria
2 criteria, both CI-verifiable: (1) bundle-install step seeds from base image, (2) pipeline passes. An agent can verify both by reading the diff and observing pipeline status. Testable and complete.
Blast Radius
- Single file change to
.woodpecker.yaml - The
lintandteststeps also usevendor/bundleand depend onbundle-install, so they benefit from the seeded gems transitively docker-compose.ymlandDockerfileuse/usr/local/bundlefor dev and prod respectively -- unaffected by this CI-only change- Other repos (e.g., westside-basketball) have the same bundle install + vendor/bundle pattern without a seed step -- they would benefit from the same change but are correctly out of scope for this ticket
Decomposition Assessment
1 file target, 1 repo, 2 acceptance criteria, estimated agent work under 2 minutes. No decomposition needed.
Recommendation
No action needed.