# Capture driver

Before: 8f0b729faf214ad05597d558eaab22b29a8589d7. After: 818a20c2f6d150d2c5376ba522136e7acfc2897a.

Run `vp install`, then `vp run mobile:install android --prepare` in each own checkout. Start fresh servers with `T3CODE_DEV_SEED=0 vp run dev --host 0.0.0.0`; do not seed from live state. Use auth CLI to issue a disposable scoped bearer token into token-before.txt/token-after.txt (never upload those files). Run seed.py before/after with server ports adjusted to the runner output. It creates one synthetic project and stopped thread through HTTP + WebSocket RPC; no provider turn runs.

install-probe.py copies the identical Probe.tsx into both disposable checkouts and mounts it alongside the actual app. It reads the real mounted library hook and cache and records real KeyboardController events. It does not substitute the hook, cache, store, terminal, native IME, PTY, or app route. Uncommitted instrumentation only. Native client fingerprints must match each requested checkout. Start Metro at 8081/8082 on all interfaces, install via mobile:install --session, then pair with the repository pair-client.sh helper. Never publish pairing or bearer credentials.

cdp.py selects the real dev app target from Metro and evaluates expressions in Hermes, retaining ordered results in cdp-side.jsonl. Native attempt: leave __proof.mode='NATIVE ATTEMPT' and use Android rotation/background/multi-window. Harness E1: save last native show H, set mode='HARNESS · JS EVENTS', emit didHide(0), allow UI commit, emit didShow(H) without willShow. For terminal's hidden store boundary, explicitly label added willHide or suppress only next native willShow with __proof.suppress('keyboardWillShow'), restore immediately afterward. E3 calls real __proof.dismiss(); it records call and native hide/resolution order. E4 suppresses only willHide during actual accessory Dismiss, restores after didHide, then injects didShow(H) while native IME is closed; this is JS boundary proof only.

Every screenshot/recording remains full device size. Harness does not establish native syncKeyboardPosition scheduling, animation lifecycle, Samsung Keyboard, One UI, physical devices, or iOS behavior. All scripts/data are synthetic. Use a new timestamped output directory for each run.
