The web scenario ran through scenarios:prove with the web target. The native scenario drives the real iOS dev client through the pooled-device e2e engine; the head was run by scenarios:prove and the corrected base capture was run directly against a separate checkout. Both use the same native scenario file and synthetic fixture. No provider turn is sent through OpenCode. OpenCode model discovery uses the real installed CLI. Replay seeds completed fixture threads. Apply the fixture patch in a current-main runner checkout, place each scenario under scripts/scenarios, and install dependencies in each app checkout. Web: select target web in scripts/prove-scenario.ts and run scenarios:prove against the two SHAs. Native: select target ios, or run from scripts with T3CODE_DEV_SEED=0 T3_SCENARIO_APP_DIR= T3_SCENARIO_HOME= T3_SCENARIO_SERVER_PORT= T3_SCENARIO_METRO_PORT= node_modules/.bin/e2e run scenarios/project-opencode-models-ios.e2e.ts --target ios --output .e2e/native-capture. The runner handles the device lease, installation, app launch and pairing. Web recordings retain their original timing. Native recordings redact two filesystem subtitle bands only during project selection. Native recordings are trimmed to the app reproduction, retain original timing, and redact only filesystem path subtitles in the project chooser. Catalog entries are never masked. Composite stills place consecutive full-screen frames next to each other with labels above them. Stable stills require two byte-identical screenshots 500 ms apart. AI-assisted; verified with the tests and tools listed above.