# Until-success 5sim phone runner with cumulative accounting (2026-05-11) Context: BOSS asked to continue OpenAI/Codex phone verification until it succeeds and then report the final number of phone numbers used. Reusable pattern: - Use a long-running script instead of repeated 20-number chunks. - Carry forward `START_USED_NUMBERS` from previous real activations. In the observed session the start was `57` (`17` Vietnam-specific + `40` free-country activations). - Count only successful 5sim activation purchases toward number usage. `no free phones`, country-gate failures, CDP recovery failures, and page recovery failures do not count. - Continue emitting JSONL with both `new_numbers` and `total_numbers` so the final report is unambiguous. - Keep a safety cap (`MAX_NEW_NUMBERS`, default 300) unless BOSS explicitly approves unlimited spend. `MAX_NEW_NUMBERS=0` means unlimited. - Persist state to `/tmp/phone_verify_until_success_state.json` with current activation id, new count, total count, country, and success summary. - Keep `/tmp/current_fivesim_activation_id.txt` updated so an interrupted run can cancel the active order quickly. - Continue SMS-only behavior: immediate OpenAI rejection/invalid -> cancel; phone-verification with no 5sim SMS -> timeout cancel; SMS received -> submit code, finish activation, verify page leaves `phone-verification`. Suggested command: ```bash START_USED_NUMBERS= \ MAX_NEW_NUMBERS=300 \ CDP_PORT=9226 \ /Users/chick/homebrew/opt/python@3.11/bin/python3.11 \ /Users/chick/.hermes/skills/software-development/codex-oauth-plus-onboarding/scripts/phone_verify_until_success.py \ | tee /tmp/phone_verify_until_success.log ``` Key log phases: ```text until_success_start activation_bought phone_submitted activation_cancel_rejected sms_timeout_cancel sms_received sms_code_submitted round_done_no_success safety_max_reached_no_success ``` Final report should include: ```text prior real activations new real activations final total numbers used success country + activation id if successful 5sim final state: FINISHED or CANCELED OpenAI page state after code submission ``` Do not print full phone numbers, SMS code, API keys, proxy strings, OAuth callback code/state, or passwords.