Review: Rails 8 app scaffold + Dockerfile + CI

review-1517-2026-06-19 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type — Feature
  • [x] Lineage — Foundation ticket, no blockers
  • [x] Repo — ldraney/my-vibes-world
  • [x] User Story — present
  • [x] Context — present, references landscaping-assistant stack
  • [x] File Targets — present (7 target areas listed)
  • [x] Feature Flag — No (correct for scaffold work)
  • [x] Test Expectations — present (6 items)
  • [x] Acceptance Criteria — present (9 items)
  • [x] Constraints — present (4 items)
  • [x] Checklist — present
  • [x] Related — present
All required sections for the Feature template are present. Template is fully complete.

Traceability

  • [x] story:create-vibe label — "Add a new vibe page with a Rails route, controller, and view, push to main, live in minutes"
  • [x] story note verified — found in project-my-vibes-world user-stories section (key: create-vibe, role: Lucas)
  • [x] arch:vibe-pages label — vibe-pages architecture component
  • [ ] arch note MISSING — [SCOPE] Create architecture note arch-vibe-pages for component vibe-pages. Search returned zero results in pal-e-docs.
  • [x] Forgejo issue — https://forgejo.tail5b443a.ts.net/ldraney/my-vibes-world/issues/10, state: open

File Targets

  • [x] Gemfile, Gemfile.lock — does not exist yet (to be created, correct for scaffold ticket)
  • [x] config/ (Rails config, database.yml, routes.rb, importmap.rb, puma.rb) — does not exist yet (to be created)
  • [x] app/ (controllers, views, layouts, javascript, assets) — does not exist yet (to be created)
  • [x] db/ (schema) — does not exist yet (to be created)
  • [x] Dockerfile — does not exist yet (to be created)
  • [x] .woodpecker.yaml — does not exist yet (to be created)
  • [x] bin/ (rails, setup, dev) — does not exist yet (to be created)
All file targets are new-creation targets. The repo currently contains only documentation (README.md, docs/architecture.md, docs/user-stories.md) and a .claude-no-enforce marker. No conflicts with existing files.

Repo Placement

OK — Issue is filed on ldraney/my-vibes-world, and all work is within that repo. Single-repo ticket.

Dependencies

  • No blockers identified. Issue Lineage states "No blockers."
  • Board item #1516 (Fix architecture docs: Rails 8 stack) is in done column — prerequisite satisfied.
  • Board items #1512, #1511, #1518 (individual vibe pages) depend on this scaffold being complete. This ticket is a foundation for all vibe page work.
  • Board item #1519 (Update deployments overlay port 80 to 3000) is related — the port change from 80 (nginx) to 3000 (Puma) is needed because of this Rails migration. Dependency is implicit but not documented in the issue.

Acceptance Criteria

9 acceptance criteria are listed. Most are verifiable by an agent:
  • "Gemfile includes rails 8, turbo-rails, stimulus-rails, importmap-rails, propshaft, puma" — verifiable via grep
  • "bin/rails server boots on port 3000" — verifiable via process check
  • "Root route exists" — verifiable via routes inspection
  • "Application layout includes Turbo and Stimulus" — verifiable via grep
  • "importmap.rb pins Tone.js and @hotwired/turbo-rails, @hotwired/stimulus" — verifiable via grep
  • "Propshaft serves assets correctly" — partially verifiable (would need running server)
  • "Dockerfile builds with harbor base image" — verifiable via docker build
  • ".woodpecker.yaml pipeline: build to push to Harbor" — verifiable via file inspection
  • ".gitignore updated for Rails conventions" — verifiable via file inspection
Criteria are specific and testable. However, 9 AC exceeds the 5 threshold for single-agent pass.

Blast Radius

Low blast radius. This is a greenfield scaffold in a docs-only repo. No existing code to break. The only consideration is that the architecture docs (already updated to Rails 8 in commit 646177e) and the deployment overlay (#1519) must align with the Puma/port 3000 configuration created here.

Decomposition Assessment

NEEDS DECOMPOSITION — route to skill-decompose-ticket.
  • File targets: 7+ directories/file groups within 1 repo — borderline
  • Acceptance criteria: 9 (exceeds the >5 threshold)
  • Estimated agent work: >5 minutes — Rails scaffold generation, Gemfile configuration, Dockerfile authoring, Woodpecker CI pipeline, importmap configuration, and verification
  • Natural decomposition: (1) Rails scaffold + Gemfile + config, (2) Dockerfile + .woodpecker.yaml CI, (3) Importmap + Tone.js + Stimulus wiring

Recommendation

  • [SCOPE] Create architecture note arch-vibe-pages for the vibe-pages component in pal-e-docs.
  • [BODY] Add dependency note: "Board item #1519 (port 80 to 3000 overlay) should be updated after this lands" to the Related or Context section.
  • [DECOMPOSE] 9 AC across 7+ file target groups, estimated >5 min agent work. Route to skill-decompose-ticket. Suggested sub-tickets: (1) Rails 8 scaffold + Gemfile + core config, (2) Dockerfile + Woodpecker CI pipeline, (3) Importmap + Tone.js + Stimulus integration.