Context
During web onboarding the 2nd Touch ID — the on-chain master register, conceptually step 5 "Register master P256Account" — fires while the progress bar still shows step 3 ("Bind passkey"), and the UI then stays stuck on that screen even though the register succeeded. Verified on a real run: operatorMasterWallet[omni] set, master device isActive=true, and the daemon GET /v1/onboarding/state returns chain: "master-registered". The slow Heima handleOps (10–30s) outruns the browser's await, so the frontend log stops at "signing REGISTER userOpHash (2nd Touch ID)" with no "REGISTERED ✅" and the step counter never advances.
Scope
apps/parent-control/app/_components/ceremony.tsx (CeremonyRunner step tracking) + App.tsx onboarding flow.
- The indicator must track the actual stage — the 2nd Touch ID is "Register master" (step 5), not step 3.
- On register success — or when the daemon already reports
chain: "master-registered" — complete onboarding and route into the app instead of hanging.
- Tolerate the slow-
handleOps case: poll GET /v1/onboarding/state and advance when master-registered, not solely the in-flight await.
Acceptance
- The 2nd Touch ID shows the correct step (register), not step 3.
- After a successful register (or detected
master-registered), the UI advances out of the ceremony into the app — no manual reload.
Effort
~S.
Context
During web onboarding the 2nd Touch ID — the on-chain master register, conceptually step 5 "Register master P256Account" — fires while the progress bar still shows step 3 ("Bind passkey"), and the UI then stays stuck on that screen even though the register succeeded. Verified on a real run:
operatorMasterWallet[omni]set, master deviceisActive=true, and the daemonGET /v1/onboarding/statereturnschain: "master-registered". The slow HeimahandleOps(10–30s) outruns the browser'sawait, so the frontend log stops at "signing REGISTER userOpHash (2nd Touch ID)" with no "REGISTERED ✅" and the step counter never advances.Scope
apps/parent-control/app/_components/ceremony.tsx(CeremonyRunner step tracking) +App.tsxonboarding flow.chain: "master-registered"— complete onboarding and route into the app instead of hanging.handleOpscase: pollGET /v1/onboarding/stateand advance whenmaster-registered, not solely the in-flightawait.Acceptance
master-registered), the UI advances out of the ceremony into the app — no manual reload.Effort
~S.