Review: Port multi-step registration form from westside-app (re-review)

review-1370-2026-06-06-r2 Review

review approved

Verdict: APPROVED

Re-review after refinement. All [BODY] findings from review-1370-2026-06-06 have been addressed. Remaining items are [SCOPE] infrastructure recommendations only.

Template Completeness

  • [x] Type — Feature
  • [x] Lineage — Standalone, discovered during session review
  • [x] Repo — ldraney/westside-ror
  • [x] User Story — well-formed (As a parent / I want to register / So that I can complete registration, waiver, and payment)
  • [x] Context — thorough: describes old SvelteKit 4-step flow, current Rails state, existing Registration model columns, existing Parent waiver fields
  • [x] File Targets — present with create/modify/don't-touch sections, all verified accurate
  • [x] Acceptance Criteria — 10 criteria listed
  • [x] Test Expectations — system and unit tests specified with run command
  • [x] Constraints — patterns, references, design language, model reuse constraints specified
  • [x] Checklist — present
  • [x] Related — present (project-westside-ror, westside-app, #39)

Traceability

  • [x] story:consolidation label — present on board item
  • [ ] story note MISSING — [SCOPE] project-westside-ror note does not exist in pal-e-docs; cannot verify user story entry. Create project page with user-stories section including "consolidation" story. (Carried forward from R1)
  • [x] arch:rails label — present on board item
  • [ ] arch note MISSING — [SCOPE] No arch-rails note found in pal-e-docs. Create architecture note for Rails component. (Carried forward from R1)
  • [x] Forgejo issue — https://forgejo.tail5b443a.ts.net/ldraney/westside-ror/issues/38, open

File Targets

Files to create (verified do not exist yet):
  • [x] app/views/public/register.html.erb — does not exist, directory app/views/public/ confirmed present
  • [x] app/javascript/controllers/registration_progress_controller.js — does not exist; follows existing Stimulus pattern (program_controller.js, inline_fee_controller.js). R1 FIX: now listed in file targets.
  • [x] app/javascript/controllers/age_gate_controller.js — does not exist; follows existing Stimulus pattern. R1 FIX: now listed in file targets.
Files to modify (verified exist):
  • [x] config/routes.rb — exists (47 lines); no register routes present yet; public routes follow get "name" => "public#action" pattern
  • [x] app/controllers/public_controller.rb — exists (79 lines); no register or create_registration actions yet
  • [x] app/models/registration.rb — exists with belongs_to :tenant and belongs_to :player; correctly listed as "modify" to add validations. R1 FIX: changed from "create" to "modify".
  • [x] app/views/welcome/index.html.erb — exists; hero CTA at line 13 currently links to /teams, confirmed needs change to /register
  • [x] app/assets/stylesheets/application.css — exists (1709 lines)
Files NOT to touch (verified correct):
  • [x] app/views/public/_interest_form.html.erb — exists, correctly excluded
  • [x] Stripe webhook controller — already working (PR #31 merged)
  • [x] db/schema.rb — registrations table has: amount_cents, payment_status (enum: pending/paid/refunded/failed), player_id, registration_type, signup_method, stripe_checkout_session_id, stripe_payment_intent_id, tenant_id. Parents table has: waiver_signed, waiver_signed_at, waiver_signed_ip. R1 FIX: no spurious migration file target.

Repo Placement

OK — issue filed on ldraney/westside-ror, all file targets within that repo. westside-app is read-only source reference.

Dependencies

  • Stripe webhook infrastructure (PR #31) — merged, in place
  • Existing Stimulus patterns — program_controller.js and inline_fee_controller.js in app/javascript/controllers/
  • Player model has has_many :registrations; Tenant model has has_many :registrations
  • Parent model has waiver fields and has_many :playersR1 FIX: issue now documents that create_registration should update Parent waiver fields
  • Board item #1371 (feature parity audit spike) — same story:consolidation, in backlog. Not blocking.
  • No items in in_progress block this ticket

Acceptance Criteria

10 acceptance criteria — assessment:
  • 8 of 10 are objectively verifiable by an agent (route renders, form sections present, age gate toggles, hero CTA link, Stripe redirect, progress bar)
  • "Matching the old SvelteKit flow" — subjective but the 536-line Svelte source serves as reference spec
  • "Mobile-first and matches existing site design" — visual assessment, testable via screenshot comparison
  • Stripe test mode configuration not explicitly documented in constraints — minor gap, agent can infer from existing webhook setup

Blast Radius

  • Parent model waiver fields — now documented in issue; create_registration will update waiver_signed, waiver_signed_at, waiver_signed_ip
  • Interest form on /teams stays as-is (correctly documented)
  • No other controllers or views reference /register currently
  • Registration model associations (Player has_many, Tenant has_many) must be respected — documented in constraints
  • paymentstatus enum (pending/paid/refunded/failed) already exists in DB — no migration needed for payment_status column

Decomposition Assessment

10 AC, 7+ file targets, estimated 15-25 min agent work. Exceeds 5-minute rule thresholds. Previous review flagged [DECOMPOSE]; user acknowledged but explicitly deferred decomposition. Not blocking approval — the issue body is complete and actionable as a single unit of work, though an implementing agent may need extended time.

R1 Findings Resolution

R1 Finding Type Status
registration.rb listed as "create" not "modify" [BODY] RESOLVED — now under "Files to modify"
Spurious migration file target [BODY] RESOLVED — removed; db/schema.rb listed as "do not touch"
Missing Stimulus controller file targets [BODY] RESOLVED — both controllers now listed under "Files to create"
Parent waiver fields undocumented [BODY] RESOLVED — documented in Context and File Targets sections
Create project-westside-ror page [SCOPE] OPEN — project page still does not exist
Create arch-rails note [SCOPE] OPEN — architecture note still does not exist
Decomposition needed [DECOMPOSE] DEFERRED — acknowledged by user, not blocking

Recommendations

  • [SCOPE] Create project page project-westside-ror with user-stories section including "consolidation" story. (Carried forward from R1 — does not block implementation)
  • [SCOPE] Create architecture note arch-rails for the Rails component. (Carried forward from R1 — does not block implementation)
No [BODY] or [LABEL] recommendations remain. Issue body is complete and accurate.