Files
codex-oauth-plus-onboarding…/skill/codex-oauth-plus-onboarding/references/openai-add-phone-free-country-runner-policy-2026-05-10.md
T

105 lines
3.5 KiB
Markdown

# Free-country OpenAI phone-verification runner notes (2026-05-10)
## Trigger
BOSS asked to stop constraining the country list and let the runner choose countries freely:
```text
No fixed region restriction.
Each country at most 2 attempts.
Total 20 attempts.
Try to find whether any country succeeds.
```
## Policy learned
For broad country exploration, count only **real 5sim activations** toward the global budget:
```text
real activation = 5sim buy returns an activation id and phone number
```
Do **not** count these as phone attempts:
- OpenAI country-gate/CDP failures before buying.
- 5sim `no free phones` / non-JSON buy responses.
- Unsupported country mappings.
- OAuth recovery failures before `add-phone`.
This prevents the global budget from being consumed by inventory misses or UI/CDP glitches.
## Country scheduling
Use a broad candidate list of OpenAI-supported countries, with a per-country cap:
```text
for country in candidate_order:
try up to 2 real activations for this country
skip/no-count if no inventory
move to next country
repeat/cycle if needed until global real-activation budget is met
```
Keep the same hard gates as the stricter regional runners:
1. Recover/verify page is usable `https://auth.openai.com/add-phone`.
2. Before buying, set and read back OpenAI country selector:
- `select.value == target ISO`
- visible text equals expected country and dial prefix, e.g. `越南 (+84)`.
3. After buying, re-check country before entering the phone number.
4. If gate fails after buying, cancel the activation immediately.
5. Probe resend channel before clicking; if WhatsApp, cancel the SMS activation rather than clicking WhatsApp resend.
## 5sim API quirks
The authenticated/guest prices endpoints may return 403 in this environment:
```text
GET https://5sim.net/v1/guest/prices?product=openai -> 403
GET https://5sim.net/v1/user/prices?product=openai -> 403
```
When prices are unavailable, use controlled `buy activation` probes and classify inventory misses.
5sim buy endpoints can return HTTP 200 `text/plain` instead of JSON:
```text
status=200
content-type=text/plain; charset=utf-8
body='no free phones'
```
Treat this as:
```json
{"phase":"buy_failed_not_counted","reason":"no_free_phones"}
```
No activation was created, so no cancellation is needed and it must not count toward the global real-attempt total.
## Candidate-country runner shape
The session generated a broad runner:
```text
/tmp/phone_verify_free_country_2each_total20.py
```
Initial candidate list included Southeast Asia, Latin America, Africa, Europe, and South Asia. The first inventory checks showed:
```text
Philippines: no free phones
Malaysia: no free phones
Thailand: no free phones
Vietnam: bought activation successfully and proceeded to OpenAI polling
```
Persisted script copies should avoid secrets and should keep the candidate map as data near the top of the script so new countries can be added safely.
## Pitfalls
- Do not rely on `FIVE_SIM_COUNTRY_ORDER` when BOSS explicitly asks for free-country exploration; the runner should ignore stale env country order or log its effective order clearly.
- Do not let `no free phones` consume the per-country or global real-activation budget.
- Keep the visible country/ISO gate even in exploration mode; the country list is larger, so selector mismatches are more likely.
- If a broad run is still active in the background, record only the stable runner policy and early observations; write final outcome only after process completion and order cleanup verification.