From the M5b review (minor, deliberate tradeoff — tracked not blocked):
- Draft persistence.
WizardViewModel holds the 11-step draft only in a StateFlow — survives rotation, but a true process kill mid-wizard loses all scalar fields (media survives via WizardMediaCache). iOS persists the full snapshot to UserDefaults on every field change and resumes at the same step. For a 10+ field wizard this is more painful than the (similarly non-persisted) signup flow. Fix: persist WizardUiState scalars to DataStore on change + rehydrate in the ViewModel.
- Double celebration. A new-signup artist sees the signup "You're in" Done screen, then the wizard's "You're live" Done screen (the gate routes into the wizard after signup rather than branching the step machine). Collapse if it reads awkwardly.
Both are UX polish, no data loss.
From the M5b review (minor, deliberate tradeoff — tracked not blocked):
WizardViewModelholds the 11-step draft only in a StateFlow — survives rotation, but a true process kill mid-wizard loses all scalar fields (media survives via WizardMediaCache). iOS persists the full snapshot to UserDefaults on every field change and resumes at the same step. For a 10+ field wizard this is more painful than the (similarly non-persisted) signup flow. Fix: persistWizardUiStatescalars to DataStore on change + rehydrate in the ViewModel.Both are UX polish, no data loss.