Review: Port multi-step registration form from westside-app (re-review)
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-rornote 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-railsnote 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, directoryapp/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 followget "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 withbelongs_to :tenantandbelongs_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 hashas_many :registrations - Parent model has waiver fields and
has_many :players— R1 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-rorwith user-stories section including "consolidation" story. (Carried forward from R1 — does not block implementation) - [SCOPE] Create architecture note
arch-railsfor the Rails component. (Carried forward from R1 — does not block implementation)
No [BODY] or [LABEL] recommendations remain. Issue body is complete and accurate.