Review: Port multi-step registration form from westside-app
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type — Feature
- [x] Lineage — Standalone, discovered during session review
- [x] Repo — ldraney/westside-ror
- [x] User Story — present and well-formed
- [x] Context — thorough description of old SvelteKit flow and current state
- [x] File Targets — present with create/modify/don't-touch sections
- [x] Acceptance Criteria — 10 criteria listed
- [x] Test Expectations — system and unit tests specified
- [x] Constraints — patterns, references, and design language specified
- [x] Checklist — present
- [x] Related — present
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 in user-stories section. Create project page with user stories section.
- [x] arch:rails label — present on board item
- [ ] arch note MISSING — [SCOPE] No arch-rails note found in pal-e-docs. Create architecture note arch-rails for Rails component.
- [x] Forgejo issue — https://forgejo.tail5b443a.ts.net/ldraney/westside-ror/issues/38, open
File Targets
- [x]
config/routes.rb— verified exists; no register routes present yet, ready for modification - [x]
app/controllers/public_controller.rb— verified exists; no register/create_registration actions yet - [x]
app/views/welcome/index.html.erb— verified exists; hero CTA currently links to /teams (line 13), confirmed needs change - [x]
app/assets/stylesheets/application.css— verified exists; 1709 lines currently - [x]
app/views/public/_interest_form.html.erb— verified exists; correctly listed as "do not touch" - [ ]
app/models/registration.rb— ISSUE: issue says "create" but file already exists withbelongs_to :tenantandbelongs_to :player. The registrations table already exists in the schema with columns: amount_cents, payment_status, player_id, registration_type, signup_method, stripe_checkout_session_id, stripe_payment_intent_id, tenant_id. [BODY] Change from "create" to "modify" and document which columns/validations to add. - [ ]
db/migrate/*_create_registrations.rb— ISSUE: registrations table already exists. Migration should add missing columns (e.g., waiver fields, promo code) rather than create table. [BODY] Rename to "add registration form fields" migration. - [x]
app/views/public/register.html.erb— confirmed does not exist yet, correct to create - [x] westside-app source files — verified:
+page.svelte(536 lines) andapp.cssboth exist at referenced paths
Repo Placement
OK — issue is filed on ldraney/westside-ror and all file targets are within that repo. The westside-app reference is read-only source material, not a target.
Dependencies
- Stripe webhook infrastructure (PR #31) — merged, in place. Webhook controller handles checkout.session.completed.
- Existing Stimulus patterns — program_controller.js and inline_fee_controller.js provide patterns to follow.
- Board item #1371 (Spike: audit westside-app vs westside-ror feature parity) — same story:consolidation label, in backlog. Not a blocking dependency but related; the audit spike would inform whether this registration port is complete.
- No items in in_progress block this ticket.
- Player model already has has_many :registrations association.
- Parent model has waiver_signed, waiver_signed_at, waiver_signed_ip fields — waiver may need to update parent record, not just registration.
Acceptance Criteria
10 acceptance criteria — mostly verifiable by an agent, but some concerns:
- "Matches the old SvelteKit flow" — subjective without pixel-level spec; the 536-line Svelte source is the reference but visual parity is hard to test automatically.
- "Mobile-first and matches existing site design" — again subjective; testable only via screenshot comparison.
- Stripe checkout redirect testing requires Stripe test mode configuration — not specified in constraints.
- "Progress bar tracks current section via scroll position" — requires a new Stimulus controller (not listed in file targets). [BODY] Add
app/javascript/controllers/registration_progress_controller.jsto file targets. - "Age gate toggles" — requires another Stimulus controller. [BODY] Add
app/javascript/controllers/age_gate_controller.jsto file targets.
Blast Radius
- Parent model has waiver fields (waiver_signed, waiver_signed_at, waiver_signed_ip) — registration waiver should update these. Not mentioned in issue.
- The interest form on /teams stays as-is (correctly noted in issue).
- No other controllers or views reference /register currently.
- The registrations table is already referenced by Player (has_many) and Tenant (has_many) — new registration creation flow must respect these associations.
Decomposition Assessment
NEEDS DECOMPOSITION — route to skill-decompose-ticket.
- 10 acceptance criteria (threshold: >5)
- 7+ file targets to create/modify across views, models, controllers, JS, CSS, migrations, routes
- Estimated agent work: 15-25 minutes (port 536-line Svelte component, port ~500 lines CSS, create 2+ Stimulus controllers, add model validations, add routes, add controller actions, write tests)
- Natural decomposition into: (1) route + controller + basic view, (2) form UI with Stimulus controllers, (3) waiver section, (4) Stripe payment integration, (5) CSS port, (6) hero CTA update + tests
Recommendations
- [BODY] Fix file target:
app/models/registration.rb— change from "create" to "modify"; document which validations and columns to add to existing model/table. - [BODY] Fix file target:
db/migrate/*_create_registrations.rb— rename to "add registration form fields" migration since table already exists. - [BODY] Add missing file targets:
app/javascript/controllers/registration_progress_controller.jsandapp/javascript/controllers/age_gate_controller.js(or a combinedregistration_controller.js). - [BODY] Document that parent model waiver fields (waiver_signed, waiver_signed_at, waiver_signed_ip) should be updated during registration waiver step.
- [SCOPE] Create project page
project-westside-rorwith user-stories section including "consolidation" story. - [SCOPE] Create architecture note
arch-railsfor the Rails component. - [DECOMPOSE] 10 AC, 7+ files, estimated 15-25 min agent work. Route to skill-decompose-ticket for sub-ticket creation.