{
  "description": "Browser-panel driver operations used on both fresh checkouts; replace origin with the checkout's dev web origin and pair using its private startup URL before capture.",
  "surface": "Linux web app, Chromium, dark appearance, 1440x1000 CSS viewport, device scale factor 2. Full-frame images and videos uniformly resized to 1440x1000 without cropping or masks.",
  "seed": [
    {"tool":"preview_resize","args":{"mode":"freeform","width":1440,"height":1000}},
    {"tool":"preview_set_appearance","args":{"colorScheme":"dark"}},
    {"tool":"preview_navigate","args":{"url":"${origin}/settings/providers"}},
    {"tool":"preview_wait_for","args":{"selector":"#provider-instance-codex-binaryPath"}},
    {"tool":"preview_act","args":{"action":"type","selector":"#provider-instance-codex-binaryPath","text":"/usr/local/bin/codex","clear":true}},
    {"tool":"preview_act","args":{"action":"press","key":"Tab"}},
    {"tool":"preview_act","args":{"action":"type","selector":"#provider-instance-codex-homePath","text":"/usr/local/codex-home","clear":true}},
    {"tool":"preview_act","args":{"action":"press","key":"Tab"}},
    {"tool":"preview_act","args":{"action":"click","selector":"[aria-label='Enable Claude']"}},
    {"tool":"preview_act","args":{"action":"click","selector":"[aria-label='Enable Replay (dev)']"}},
    {"tool":"preview_evaluate","args":{"expression":"Array.from(document.querySelectorAll('button')).find(e=>e.innerText==='Add variable').click()"}},
    {"tool":"preview_act","args":{"action":"type","selector":"input[placeholder='VARIABLE_NAME']","text":"npm_config_cache"}},
    {"tool":"preview_act","args":{"action":"type","selector":"input[placeholder='value']","text":"/usr/local/codex-home/npm-cache"}},
    {"tool":"preview_act","args":{"action":"press","key":"Tab"}}
  ],
  "exercise": [
    "Reload Settings > Providers and wait for provider discovery to settle.",
    "Start recording with the entire Settings header and provider list visible.",
    "Click the first button with aria-label 'Update available, view details' (Codex's list-row badge).",
    "Capture the popup and header: base offers Update now and Update all; head offers neither and detects version 0.167.1.",
    "When offered, click Update now and await 'Update command exited'. On base this returns exit code 243.",
    "On head, click Copy update command. The Clipboard write was observed to contain: sudo npm install -g --prefix /usr/local --allow-scripts=@openai/codex @openai/codex@latest",
    "Move the pointer outside the popup before stopping recording.",
    "Before each saved still, save two screenshots at least 500 ms apart and compare their full PNG bytes; retain only identical pairs."
  ],
  "baseErrorInAppTerminal": [
    "Close the popup and Settings; open Toggle terminal drawer.",
    "Set PS1 to 'proof$ ', cd /usr/local, and clear the terminal before recording.",
    "Read the actual npm debug log named by the preceding failed Update now operation: rg 'error (code|syscall|path|dest)' codex-home/npm-cache/_logs/<attempt>-debug-0.log",
    "The app terminal displays EACCES, syscall rename, source /usr/local/lib/node_modules/@openai/codex, and the rename destination."
  ],
  "writableControl": [
    "On both checkouts change Binary path to /usr/local/writable/bin/codex and blur the field.",
    "Refresh/reload provider state. A server restart clears the base's previous in-memory failure message before the control still.",
    "Open the same update badge. Update now and Update all remain offered on both sides. No control update was executed."
  ],
  "notes": [
    "No CLI, registry, provider, or RPC responses were mocked. Codex was signed out in a synthetic home; provider updates do not require a provider account.",
    "The supplementary head-command still displays the observed copied command as a shell comment. It was typed after verifying the Clipboard write, not pasted: browser Clipboard reads were denied.",
    "No application source modifications, tests, or real provider turns were used as evidence."
  ]
}
