# Journey result: Onboarding 10 steps

- **Source**: `WALKTHROUGH/journeys/onboarding-ten-steps.md`
- **Walked**: 2026-05-29 by Claude (Opus 4.8) against commit `eff6655269` (+
  fix)
- **Verdict**: **pass** — all 10 `?step=<id>` deep-links resolve to the right
  step, no hydration errors, no mid-onboarding session ejection.
- **Walker**: `/tmp/claude-oshun-lt-2-walkthrough/walk.mjs onboarding-ten-steps`

## Summary

A clean reversal of the prior walk's failures. Previously: only 3/10 deep-links
switched the heading, the last 3 steps bounced to `/welcome?reauth=1`, and 8
React #418 hydration errors fired (one per deep-linked step). Now: **0 page
errors, 0 persistent failures**, all step deep-links render their step. The
hydration mismatch was rooted in `useBrowserSearchParams` reading
`window.location.search` in its initializer on the client's first render —
**fixed** this pass (initialize empty on both server and first client render,
sync in the effect). The prior `?reauth=1` ejection (attributed to CC-BUG-D /
401 misdiagnosis) no longer reproduces with the BFF in mock-adapter mode.

2026-06-26 targeted follow-up: `onboarding-deepening.spec.ts` now covers the
Step 4 sensitive-context branch in the real browser wizard. The test opts into
wellbeing signals and sensitive traits on Interests, verifies those switches
mirror into Memory, confirms they become editable after Approved memory is
selected, checks the Ready summary chips, and asserts the real
`PATCH /v1/preferences` payload carries both assistant memory categories.

2026-06-26 targeted follow-up: `onboarding-deepening.spec.ts` now also covers
the no-redirect first-run target resolver in the actual browser Finish flow. The
Metis case completes sign-up → wizard → Ready → real preferences PATCH with
structured-learning / guided-courses selections and lands on
`/domains/metis?origin=home`. The Tara fallback case completes the same flow
with a general practice goal and only Tara selected, then lands on
`/domains/tara?origin=home`.

2026-06-28 targeted follow-up: `onboarding-lifecycle.spec.ts` now covers the
browser-offline Finish branch with the real service worker active. The test
seeds a signed-in session, completes onboarding, forces the browser offline for
Finish, verifies `data-onboarding-finish-queued`, inspects the persisted
`oshun-sync-queue` IndexedDB `PATCH /v1/preferences` action including bearer
auth and onboarding preference body, dispatches Chromium Background Sync, reads
the BFF preference record back, and confirms the queue drains.

## Steps

- **Step 1 — Sign up to enter `/onboarding`**: pass.
- **Step 2 — Deep-link each of 10 steps** (welcome, goals, domains, interests,
  routine, guide, notifications, accessibility, memory, complete): pass — each
  switches to the correct step; previously-broken steps (domains, interests,
  guide, notifications) now resolve; no #418 on any.
- **Step 3 — Walk forward (welcome → goals → domains → …)**: pass.

## Resolved since prior walk

- Bug 6-1 (4/10 deep-links didn't switch heading) — resolved (root-cause fix).
- Bug 6-2 (P0: steps 8-10 bounce to `/welcome?reauth=1`) — no longer reproduces.
- Bug 6-3 (hydration errors during navigation) — fixed at
  `useBrowserSearchParams` (React #418 eliminated).

## Open questions / minor

- Bug 6-4 (welcome step shows wizard CTAs + cookie banner simultaneously) is a
  minor first-impression nit, not re-prioritized here.
- Live Finish → `syncProfilePreferences` → handoff to `redirectPath` is now
  covered in automated browser flows, including no-redirect first-run targets,
  online 5xx error affordance, and offline service-worker replay.
