# Manual browser reproduction

Environment for both sides: Linux, real Claude CLI, server running as root, separate fresh worktree-local databases, T3CODE_DEV_SEED=0, authenticated proxy environment passed through, Chromium web client, 1280x800 CSS viewport (2x PNG), light theme.

Run `vp i` in each checkout. The accompanying start-server.py is the portable form of the local launcher: `python3 start-server.py <local-Claude-settings.json>` from each checkout. No settings or credentials are included in this upload.

1. Confirm `sudo claude --dangerously-skip-permissions -p hi` prints the root/sudo refusal.
2. Pair the browser using the server's startup link.
3. In the default server project/thread, hide Thread details to exclude environment metadata.
4. Open the model picker, select Claude, then Claude Haiku 5.5. Keep Medium reasoning and Full access permissions.
5. Start recording. Type `say hi` in the composer and press Enter.
6. Wait for the Provider error. Close the model picker with Escape.
7. Type `say hi again` in the same composer and press Enter.
8. Wait for the second Provider error. Capture the banner and both error entries. Compare two PNG captures taken at least 500ms apart; both pairs had zero differing pixels.
9. Stop recording.
10. Control: create a new thread, same Haiku model, change permissions to Auto, send `say hi`. Both commits returned a normal greeting.

Base f5c2ceb4d16404d33a4eb6b76359dd2ca1475df1: both attempts show only the generic provider-start failure. Server output confirms the query ended before the turn could start.
Head 1eaa290237bde77e0c548682a437c930686f7c47: both attempts show Claude Code exited before it started, followed by the CLI's --dangerously-skip-permissions root/sudo refusal, in both banner and Provider error entries.

The browser was driven with T3 preview snapshot, click, type and Enter tools. No replay provider, mocks, database edits, or test assertions were used.
