b607993854
Two bugs found during review of the previous FSM state restore fix: 1. Re-entering promo flow created nested _prev_data (unbounded growth). Now skips save if already in PromoCodeStates.waiting_for_code and strips _prev_ keys from saved data to prevent nesting. 2. _restore_previous_state used `if prev_state:` which treated saved None state (user at menu) same as "no saved state". Now uses a sentinel to distinguish the two cases, correctly restoring None state with its data instead of calling state.clear().