Manual Android proof, real native app and server; synthetic data only.
Set PROOF_DIR to an empty scratch directory. Use one checkout per commit.
Install dependencies with vp i. Prepare and install each checkout with vp run mobile:install android.
Apply instrument-v2.py <checkout> and native-observer.patch identically to each side before starting Metro.
These probes record query object identities, requested indices, patch states and tail rows after React commits, plus native viewport events. They do not change app state or query behavior.
Start collector.py <base|head> on port 13998. Start the checkout's scripts/scenarios/start-app.ts mobile with a fresh home, server 13997, Metro 8197 and the device-reachable host; set T3CODE_DEV_SEED=0.
Run seed.mjs <checkout> <home> <base|head>. Pair the native app with this server, open Large diff review, Git controls > Review changes.
Use session proof25872 throughout. Run driver.py <side> goto 10511, then proof-flow.py <side> edit1. Run driver.py <side> goto 8510, proof-flow.py <side> control, proof-flow.py <side> edit2, proof-flow.py <side> fresh1 and proof-flow.py <side> fresh2 as separate commands.
For the head, align the starting screenshot body to the base using the same slow pan gestures before recording; the native row indices match on both sides. Android gesture rounding is accepted only within 12 pixels and reported separately (final offsets: 2, -7, -7 pixels). Dismiss any range-selection toolbar before capture.
Screenshots are accepted only after two captures 500ms apart have identical pixels. The screen recordings cover the menu refresh and the resulting change in position.
The fixture has six files, each with 1000 replaced lines. The two edits append Additional review line - file01 and Additional review line - file02, respectively; both must appear at new line 1001 in the rendered patch.
