# Capture setup

Two separate checkouts ran the real iOS development client against separate fresh server homes, with automatic database seeding disabled. The same leased iPhone 18 Pro on iOS 27.2 was used in light mode at 402 × 874 logical pixels. Both commits use the same native-client fingerprint; Metro served each checkout’s own JavaScript. The server environment label is synthetic: Scenario.

Base: [fd9b2c3eaa](https://github.com/pingdotgg/t3code/commit/fd9b2c3eaabd72e852e068c9d41c467e07c11ee1).
Head: [48e36359e6](https://github.com/pingdotgg/t3code/commit/48e36359e6245bd3110bfece47c401bb233f4acb).

Each server was launched with `T3CODE_DEV_SEED=0 node scripts/scenarios/start-app.ts mobile <fresh-home> <server-port> <metro-port> <device-reachable-host>`. The synthetic folder was registered with the server CLI. The dev client was prepared and installed with `vp run mobile:install ios`, loaded from that checkout’s Metro, and paired using the mobile skill’s pairing helper. No live database was read or copied. No agent turn was sent.

Use reproduce.sh for the seed and UI commands. Start local, absolute, and Git URL cases from Choose project. If New chat directly opens a draft, tap its project title to reach Choose project. A base error leaves the Local folder screen open; replace its input for the absolute case. On head, return to Choose project before repeating. Acknowledge the base duplicate alert before leaving. The prompt/repository link opens its own route; acknowledge both Clone and the prompt notice before entering the destination.

Observed base results: home-relative input shows “Failed to mutate project.”; absolute input opens the draft behind a “Project already exists” alert; Git destination and prompt-link destination both report a cloneRepository error because the destination exists and is not empty.

Observed head results: all four cases open the registered bike-documents draft without a duplicate alert or clone error. The repository-link case retains “Review the bike documentation”. A read-only query of the server’s project projection after the four cases contains exactly the original project id and root.

Every result still was checked with two identical screenshots taken more than 500 ms apart. All published videos were visually inspected through extracted frames. The short local, absolute, and Git clips are trimmed from longer recordings without changing playback speed. The base recording was cut before a discarded prompt attempt whose notice blocked destination entry; prompt evidence comes from a separate corrected recording on each commit. The additional head local recording holds the input longer so the entry is visible.

The scenario runner was attempted twice but did not prove the fix: dev-client installation exceeded its 30-second then 120-second action budget; a retry also hit a synthetic-seed no-op Git commit, and its head timed out before reaching the reproduction. The manual install succeeded after 140 seconds. Expo’s first bundle load timed out; a reload after compilation succeeded. These setup failures are not counted as evidence about the fix.

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