# OpenCode 2 running retry warning proof

Both sides: Linux, Chromium, 1280 by 800 CSS pixels, device scale 2, dark theme.
Separate commit worktrees and fresh T3 databases, T3CODE_DEV_SEED=0. No live database seeded.
OpenCode 2.2.7 is the real release binary, connected as an external local server.
Its model API is the synthetic stand-in, not a mocked OpenCode protocol.

Setup:
1. Run standin.py (127.0.0.1:19876).
2. Start the checkout with T3CODE_DEV_SEED=0 vp run dev.
3. Use seed-fixture.py to write synthetic provider/model config and add the project.
4. Start OpenCode with OPENCODE_CONFIG_DIR pointing to the generated config,
   isolated XDG_DATA_HOME and XDG_STATE_HOME, and OPENCODE_PASSWORD set to a
   disposable synthetic password: opencode serve --port 19877 --hostname 127.0.0.1.
5. Pair the browser using that dev server's startup link.
6. Settings / Providers reports OpenCode v2.2.7 Authenticated.

Browser actions (same on both sides):
1. Open a new thread in Retry warning demo. Close thread details and sidebar.
2. Model picker: OpenCode / Limited Model (Stand-in).
3. Start recording. Type Say hello in one sentence. and Submit message.
4. Wait for Retrying provider (1), while the turn is still running.
5. Click the live-work Retrying provider (1) button to expand the group.
6. Click div[data-v2-item-type=error][aria-expanded=false] to expand the retry detail.
7. Move the pointer to the thread heading. Capture the running row and rate-limit message.
8. Stop recording; stop the turn before teardown.

Observed: base retry detail has a neutral hammer icon and grey title; head retry detail
has an amber warning icon and amber title. The live-work group summary stays neutral on both.
The stand-in returned HTTP 429, error.type=rate_limit_exceeded, Retry-After=600.
Stored running rows: provider_error on base, usage_limit on head; both code=provider.rate-limit,
retry.attempt=1 and retry.retryDelayMs=600000.

The uploaded row stills are unmodified pixel crops of the expanded error row. Two captures
500ms apart were pixel-identical for each crop. Full browser recordings retain running status,
prompt, model, and context; full-screen companion images are also supplied. All captures were
opened and inspected; video contact sheets were inspected across the recordings.

Replay scenarios were not used: scenarios.md says provider-specific behavior cannot be covered
by the generic ACP replay agent. No tests were used as proof.
