# Delayed provider startup capture

AI-assisted; verified with the tests and tools listed above.

This is a manual real-provider reproduction, not replay. The scenario runner's replay provider uses generic ACP and cannot exercise the Claude driver display name or Claude SDK boot.

For each commit, independently:

1. Install dependencies with `vp i`. Start with a fresh worktree-local `.t3/userdata` and `T3CODE_DEV_SEED=0`.
2. Configure an enabled `claudeAgent` provider instance with `binaryPath` pointing to the attached `slow-provider.sh`. Export `REAL_CLAUDE` with the installed CLI path and `STARTUP_DELAY_LOG` with a new output log path before starting the server. Use the same available inexpensive model on both sides. Give its existing slug a custom display name `Startup check`; this changes the displayed catalog name only, not the requested model. The runtime model identifier is intentionally omitted from public artifacts.
3. Set `defaultModelSelection` to that instance/model. Set `threadTitleInstructions` to `Always use exactly Startup check as the title.`
4. Create a new git repository with initial branch `main`, a README containing `Synthetic startup demonstration.`, and one initial commit. Add it through `node apps/server/src/bin.ts project add <workspace> --title 'Startup demo' --base-dir .t3`.
5. Start `T3CODE_DEV_SEED=0 T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD=0 vp run dev --host 0.0.0.0`. Pair the web browser using that server's startup pairing link. Use a 1280 × 800 viewport and light theme. Close the thread details panel so it does not expose the host label. Wait until both the composer and branch selector show `main`.
6. Type `Reply with just the word ok.` into the fresh thread. Begin a recording, install the attached 200ms sampler, and press Enter. Record through the reply and the disappearance of Stop.
7. Inspect the wrapper log for the SDK process started immediately after send. Its BEGIN/END pair establishes the exact 15-second interval in which the real CLI has not executed. Capability probes also use stream-json; correlate by timestamp and PID, rather than choosing an earlier probe.
8. On mobile, install each checkout's native client with `vp run mobile:install ios --prepare` then `--session <leased-session>`, start Metro for that checkout, pair to that checkout's backend, create a new thread in the same synthetic project, and repeat the send while recording. Mobile evidence is reported only when that run completed.

The public videos append a separate fixture-monitor panel below the unchanged app frame. The panel's times come from the wrapper log and the browser sampler; it is an evidence annotation, not product UI. Stills are explicitly frames from those recordings. Browser metadata, credentials, internal paths and runtime model identifiers are excluded.

Expected by the original issue report: a working row immediately, with a starting-provider label during boot. The older missing-working-row and Syncing-messages mask do not reproduce on this base. No newer maintainer comment was found explicitly declaring the remaining Thinking label a bug.
