# Stalled command capture procedure

Use separate checkouts at b68aedfdb71534bfdfbe55771ef2e686742faa8e and d7988bcfa41ca5b73f99b2918d52a938cb4ae860. Install each with `vp i`.

Start each real web development stack with `T3CODE_DEV_SEED=0`, its own fresh T3 home, replay provider enabled and selected, and a synthetic environment label. This capture used the scenario start-app helper from current main to configure these settings, while running the app from each tested checkout. No live database was copied.

Seed each using seed.sh, then pair a browser and open Stalled command. Wait for history synchronization to finish. Both browser viewports: 1280 by 800 CSS pixels, light theme.

On each side:
1. Evaluate fault.js in the page. Confirm the success return before continuing.
2. Start recording the browser tab.
3. Type `first message` in the composer and press Enter.
4. Type `second message` and press Enter while the first is waiting.
5. Capture the immediate response. Do not submit again or reconnect.
6. Leave the page running for three minutes. Record the error and spinner state after 60 seconds and at three minutes.
7. Read `window.stalledSendProof` to verify exactly one dropped command and continuing heartbeat frames.
8. Stop recording.

The injected patch drops only string frames containing orchestration.dispatchCommand. It forwards pings, activity reports and all other frames through the original WebSocket send. It does not advance or fake time.

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