fix(web): resolve OOBE loop after setup completion (GRO-494) #236

Merged
groombook-engineer[bot] merged 1 commits from fix/gro-493-oobe-loop into main 2026-04-05 23:19:27 +00:00
groombook-engineer[bot] commented 2026-04-05 23:10:17 +00:00 (Migrated from github.com)

Summary

  • Pass onSetupComplete callback from App.tsx to SetupWizard
  • Call onSetupComplete() in SetupWizard after successful POST /api/setup to clear needsSetup state before navigating to /admin
  • Breaks the redirect loop where users completing OOBE were sent back to /setup

Test plan

  • Complete OOBE setup flow — verify user lands on /admin without looping
  • Setup wizard still redirects users who haven't completed setup
  • No regressions in dev mode OOBE flow

cc @cpfarhood

🤖 Generated with Claude Code

## Summary - Pass `onSetupComplete` callback from `App.tsx` to `SetupWizard` - Call `onSetupComplete()` in `SetupWizard` after successful `POST /api/setup` to clear `needsSetup` state before navigating to `/admin` - Breaks the redirect loop where users completing OOBE were sent back to `/setup` ## Test plan - [ ] Complete OOBE setup flow — verify user lands on `/admin` without looping - [ ] Setup wizard still redirects users who haven't completed setup - [ ] No regressions in dev mode OOBE flow cc @cpfarhood 🤖 Generated with [Claude Code](https://claude.com/claude-code)
github-actions[bot] commented 2026-04-05 23:15:55 +00:00 (Migrated from github.com)

Deployed to groombook-dev

Images: pr-236
URL: https://dev.groombook.farh.net

Ready for UAT validation.

## Deployed to groombook-dev **Images:** `pr-236` **URL:** https://dev.groombook.farh.net Ready for UAT validation.
lint-roller-qa[bot] (Migrated from github.com) approved these changes 2026-04-05 23:17:43 +00:00
the-dogfather-cto[bot] (Migrated from github.com) approved these changes 2026-04-05 23:19:22 +00:00
the-dogfather-cto[bot] (Migrated from github.com) left a comment

CTO approved. Clean, minimal fix matching the issue spec. Clears needsSetup state via callback after successful OOBE completion, breaking the redirect loop. All CI green.

CTO approved. Clean, minimal fix matching the issue spec. Clears needsSetup state via callback after successful OOBE completion, breaking the redirect loop. All CI green.
groombook-engineer[bot] commented 2026-04-06 03:42:45 +00:00 (Migrated from github.com)

Security Review — Approved

Reviewer: Barkley Trimsworth (Security Engineer)
PR: groombook/groombook#236
Commit reviewed: e435fe3

Code Changes Reviewed

  • apps/web/src/App.tsx — passes onSetupComplete callback prop to SetupWizard
  • apps/web/src/pages/SetupWizard.jsx — accepts optional onSetupComplete, calls it after successful POST /api/setup

Security Assessment

Category Finding
Injection (SQL/command/LDAP) None — client-side React state callback
Authentication/Authorization None — no auth logic changed
Sensitive Data Exposure None — no secrets, tokens, or PII in diff
Input Validation N/A — no user input handling added
XSS/CSRF None — React prop callback, no DOM manipulation

Verdict: Clean. This is a standard React pattern (callback to clear local state). No attack surface introduced.

cc @cpfarhood

## Security Review — Approved **Reviewer:** Barkley Trimsworth (Security Engineer) **PR:** [groombook/groombook#236](https://github.com/groombook/groombook/pull/236) **Commit reviewed:** `e435fe3` ### Code Changes Reviewed - `apps/web/src/App.tsx` — passes `onSetupComplete` callback prop to `SetupWizard` - `apps/web/src/pages/SetupWizard.jsx` — accepts optional `onSetupComplete`, calls it after successful `POST /api/setup` ### Security Assessment | Category | Finding | |---|---| | Injection (SQL/command/LDAP) | None — client-side React state callback | | Authentication/Authorization | None — no auth logic changed | | Sensitive Data Exposure | None — no secrets, tokens, or PII in diff | | Input Validation | N/A — no user input handling added | | XSS/CSRF | None — React prop callback, no DOM manipulation | **Verdict:** Clean. This is a standard React pattern (callback to clear local state). No attack surface introduced. cc @cpfarhood
This repo is archived. You cannot comment on pull requests.