Review: Clean registration flow for App Store resubmission
Verdict: APPROVED
Note: Both
READY and APPROVED are accepted as passing verdicts by the check-board-advance hook. Use either keyword interchangeably.Re-review: Previous review (NEEDS_REFINEMENT) had one issue: test run command said
rails test but project uses RSpec. Issue body updated to bundle exec rspec. All findings re-verified.Template Completeness
- [x] Type -- Feature
- [x] Lineage -- Related to #290 (App Store rejection)
- [x] Repo -- ldraney/landscaping-assistant
- [x] User Story -- present, well-formed
- [x] Context -- thorough background on iPad rejection, SMTP config, CSS hide removal
- [x] File Targets -- 2 modify targets, 2 DO NOT touch targets
- [x] Feature Flag -- "none" (appropriate for UI link + doc update)
- [x] Acceptance Criteria -- 6 criteria
- [x] Test Expectations -- present, run command corrected to
bundle exec rspec - [x] Constraints -- present
- [x] Checklist -- present
- [x] Related -- present
Traceability
- [x] story:app-store-submission label -- "Submit and maintain iOS App Store listing (privacy declarations, review compliance, metadata)"
- [x] story note verified -- found in project-landscaping-assistant user-stories section
- [x] arch:keycloak label -- Architecture: Keycloak (OIDC auth for pal-enterprises)
- [x] arch note verified -- arch-keycloak note exists in pal-e-docs
- [x] Forgejo issue -- ldraney/landscaping-assistant#348, open
File Targets
- [x]
app/views/sessions/new.html.erb-- verified: exists (1.4k, last modified Jun 6). Shows only a "Sign in" button with plant icon, no mention of registration. Issue accurately describes the gap. - [x]
docs/keycloak-setup.md-- verified: exists (21k, last modified Jul 25). Line 85 still says registration is CSS-hidden (#kc-registration { display: none !important; }). This is outdated -- the CSS hide rule has been removed from login.css. Issue correctly identifies this needs updating. - [x]
keycloak-theme/landscaping/login/resources/css/login.css(DO NOT touch) -- verified: nodisplay: nonerule targeting#kc-registration. Line 284 styles#kc-registrationwith text-align, margin, font -- visible and functional. - [x]
config/initializers/omniauth.rb(DO NOT touch) -- verified: handles callback routing. Sessions controller usesCrewMember.find_or_create_by!(line 33) for both login and registration.
Repo Placement
OK. Issue filed on ldraney/landscaping-assistant, all file targets are in the same repo. Single-repo change.
Dependencies
- Board item #1684 (done) -- issue #290 (original iPad Register button error). Predecessor, completed.
- Board item #1507 (done) -- pal-e-services#122 (Keycloak app-store-submission bug). Completed.
- Board item #1927 (validation) -- issue #324 (Keycloak account-email SMTP setup). In validation. Relevant because AC #4 requires email verification to work, but SMTP configuration is managed separately and should be functional by now.
- Board item #1940 (qa) -- issue #249 (Keycloak redirects to Tailscale URL instead of public domain). In QA. Could affect registration redirects if the same issue applies to the registration callback.
- No blocking dependencies for the core code changes (adding link + updating docs).
Acceptance Criteria
- AC 1-3: Directly testable via code inspection and integration tests. The sessions controller uses
CrewMember.find_or_create_by!and redirects toroot_path(which redirects logged-in users towork_queue_items_path). - AC 4: Manual verification of SMTP. Depends on account-email story infrastructure (item #1927, in validation). Reasonable to verify here but not a code change.
- AC 5: Manual iOS testing. Reasonable verification step.
- AC 6: Doc accuracy check, directly verifiable.
- All criteria are assessable. AC 4-5 are manual validation steps, not code changes.
Blast Radius
sessions/new.html.erbis the login page for all platforms (web, iOS via Turbo Native, Android). Adding a registration link affects all entry points.- No other pal-enterprises apps share this login page -- change is scoped to landscaping-assistant.
- OmniAuth callback at
sessions#createalready handles first-time users viafind_or_create_by!, so the registration callback path requires no controller changes. - No sibling services have the same pattern to fix.
Decomposition Assessment
2 file targets across 1 repo. 6 AC but only 2 require code changes (AC 1-2 for the link, AC 6 for the doc). Estimated agent work well under 5 minutes. No decomposition needed.
Recommendation
No action needed.