# OpenAI phone-code submit method audit: Luban France SMS received but submit failed (2026-05-11) ## Context During Luban free-country testing with `chickliu2031som6d8@2925.com`, France request `34133204` received a code but the runner stayed on OpenAI `phone-verification` after submitting it. Do not classify that event as a completed phone verification. The correct class is: ```text sms_received_but_submit_failed ``` ## DOM observed on OpenAI phone-verification Inspection of the current OpenAI phone verification page showed a single code input, not six split inputs: ```json { "href": "https://auth.openai.com/phone-verification", "title": "查看你的手机 - OpenAI", "input": { "type": "text", "name": "code", "autocomplete": "one-time-code", "inputMode": "numeric", "maxLength": 6, "placeholder": "代码" }, "buttons": ["继续", "重新发送 WhatsApp 消息"] } ``` So the correct target is: ```javascript input[autocomplete="one-time-code"], input[name="code"], input ``` ## Difference from the previously successful 5sim Vietnam submit The successful 5sim Vietnam part2 runner submitted the phone code with: ```javascript const input=document.querySelector('input[autocomplete=one-time-code], input[name=code], input'); const setter=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set; input.focus(); setter.call(input, code); input.dispatchEvent(new InputEvent('input', {bubbles:true, inputType:'insertText', data:code})); input.dispatchEvent(new Event('change', {bubbles:true})); [...document.querySelectorAll('button')].find(b=>(b.innerText||'').trim()==='继续')?.click(); ``` The Luban free-country runner used a generic `setVal` helper with plain `Event('input')` instead of `InputEvent('input', {inputType:'insertText', data:code})`: ```javascript setVal(inputs[0], code); // dispatches Event('input') + Event('change') ``` That may fail to update OpenAI's React/form state even when the DOM value looks set. ## Required fix For phone-code submission, use the proven 5sim method exactly: 1. Select `input[autocomplete="one-time-code"], input[name="code"], input`. 2. Use the native HTMLInputElement `value` setter. 3. Dispatch `InputEvent('input', {bubbles:true, inputType:'insertText', data:code})`. 4. Dispatch `change`. 5. Verify `input.value.length === 6` and the Continue button is not disabled. 6. Click the exact Chinese `继续` button first, then fallback to English/regex. 7. Save a redacted submit context: input count/name/autocomplete/maxLength, button disabled state, post-submit href/title/body excerpt. Never log the code. A reusable helper is packaged with this skill: ```text scripts/submit_openai_phone_code_corrected.py ``` It accepts a code or code-file path, submits using the proven method, and redacts the code from output. ## Extra channel warning The current phone verification page displayed: ```text 输入我们刚刚通过 WhatsApp 发送到 ... 的验证码。 重新发送 WhatsApp 消息 ``` The runner must record the delivery channel text. If the page channel is WhatsApp but the SMS provider reports an SMS-style code, treat failures as ambiguous until the raw provider fields are inspected. Do not auto-mark as success unless OpenAI leaves `/phone-verification`. ## Runner classification fix After `sms_received`, if submitting the code leaves OpenAI on `/phone-verification`, classify as: ```text sms_submit_failed ``` not `success_request_id`. Also release/finish the provider order explicitly according to provider rules and log the result.