# Synthetic evidence replay

Both actual app checkouts are pinned to the revisions in the Evidence report. Start isolated backends with T3CODE_DEV_SEED=0 and separate --home-dir values, and Metro with distinct ports 8081/8082. Never use the live T3 home. runtime-capture-setup.js and start-runtime.py are the round-three setup drivers. Some earlier exploratory drivers remain in the bundle for provenance and are not the final replay entry points.

1. generate-matrix.py creates the original deterministic fixtures; revise-partial.py changes partial.txt to bounded-width readable lines without changing its byte count. The two fixture manifests distinguish versions. seed-matrix.mjs and seed-revised.mjs use typed RPC and POST exact synthetic bytes. Provide newly minted local auth token files yourself; credentials are deliberately excluded.
2. Install each checkout's dev client only through vp run mobile:install. Fingerprints match across these revisions, so both sides use the same cached binary but independent Metro JS bundles and servers. Pair each isolated environment normally.
3. local-seed.py downloads actual bytes onto each device and calls production persistComposerAttachmentFile/appendComposerDraftAttachments. This is labelled D and does not claim a real file-picker interaction. draft-route.py uses the registered route and readable per-device URI resolution via matching draft records. Context/message caller seed is seed-caller-thread.mjs.
4. drive.py records native commands and requires two pixel-identical full-screen PNGs 500ms apart before accepting a still. Pixel stability alone does not qualify loading or wrong-context frames. The Evidence tables list the reviewed selections; all other assets are diagnostics or superseded attempts.
5. story/entry/viewer scripts record normal app sequences. harness-fetch.js holds/fails expo/fetch's reader only; harness-actions.js holds generated-file persistence or overrides sharing availability/share failure; harness-native-failure.py rejects only the native presenter. All render through the real production React Native screens and native primitives. H is not normal unmodified dependency behavior.
6. frozen-regressions.py freezes JavaScript Date for matched R01-R05, leaving native timers live, then invokes reg-complete.py on each revision. Other captures were not taken with a globally frozen clock; native iOS status-clock/battery differences are disclosed.
7. actions-sanitized.jsonl gives UTC command times and arguments. Timeline chapters are elapsed command times from record start, not precise frame presentation latency. Android screenrecord omits static tails and splits at 180 seconds; encoded offsets may diverge from wall-clock chapters. Native gesture telemetry and video durations accompany each file.
8. diff-pairs.py compares full original images. Diff0 highlights every changed RGB pixel in magenta; DiffT highlights max-channel difference >16/255 in orange. Both use flat gray unchanged pixels, without hiding status-bar regions.

No source changes, tests, commits, pushes or PR edits were made. No real user data is included. Native system clock, clipboard selection handles, share-receiver availability and device service failures remain environment conditions, not inferred product regressions.
