# Reproduction notes

Use detached checkouts of 3d369d5596 and 193ad89c72. Run `vp i`, then `T3CODE_DEV_SEED=0 vp run dev --home-dir <checkout>/.t3 --host 0.0.0.0`. Stop each captured server PID before running `python3 seed.py <checkout>` and restart it. The seed edits only fresh, isolated projection tables; its JSON output records every inserted row. No live database is read. No provider turn is sent.

Web: pair one T3 preview tab per side. Use 1440x900 CSS pixels, dark; R3 uses 390x700, light. App theme is T3 Code default, UI 16px, font 100%, browser zoom 100%, DPR 2, Chromium 156 Linux, no mobile user-agent emulation. The preview tool saves desktop screenshots at 1280x800 and narrow screenshots at 780x1400; no crop was taken. Freeze Date with web-driver.mjs after a reload. Hide main sidebar on both sides and close details for empty composer fixtures. Use SPA navigation so the clock remains frozen. Hover blank space after interactions to remove unintended tooltips. For open pickers click the selected effort control to remove the search caret.

R1: evidence-controls. Run recordR1; timestamps are in R1-timestamps.json. Still: before Low, Standard; after Low, Standard, Ultracode on, picker open.

R2: evidence-high. Close picker. Before cannot express High plus Ultracode, so choose the legacy Ultracode effort plus Fast. After preserves High, Fast and Ultracode together. Click blank conversation space before capture to remove trigger focus rings.

R3: same fixture as R2, narrow light viewport, picker open. Before has legacy Ultracode selected; after High and separate Ultracode on. Click the selected effort then hover outside the popup to remove caret and favorite tooltips.

R4: evidence-legacy, raw `effort=ultracode`, open picker without modifying it. Before selects Ultracode; after selects Extra High and enables Ultracode separately.

R5: evidence-controls behind Settings, Threads. Default model caller of TraitsPicker, Claude Opus 5.5. Open traits. Before choose legacy Ultracode reasoning and Standard. After choose Medium, Standard, Ultracode On. Leave menu open. Both show the same compact model catalog behind Settings.

R6: evidence-parent, expand Worked for 1m, hover Review workflow timeline item. R7: same thread, open details/relationships, expand Review workflow then Build; hover Implementation review. R8: evidence-coordinator workflow opening; hover Implementation review, then a second still hovering Notes without effort. Keep details open on both sides. The completed synthetic coordinator renders its queued members completed; active members use terminal states to avoid clocks. This proves metadata rendering, not workflow execution.

Native: native fingerprints were prepared with `vp run mobile:install <ios|android> --prepare`. Pool sessions were opened from /home/ubuntu/t3code. Install each checkout's script with `vp exec node <checkout>/scripts/mobile-native-client.ts ensure <platform> --session <session> --metro http://fs-20.tail131df4.ts.net:<metroPort>` from that same lease directory. After Metro 8081, before Metro 8082. `REACT_NATIVE_PACKAGER_HOSTNAME=fs-20.tail131df4.ts.net vp run dev:client --port <port>` from that side's apps/mobile. Open the Expo development-client URL with disableOnboarding=1, disableFab=1, disableAutoLaunch=1. Pair over direct tailnet HTTP to isolated backend after15166/before16579. The dev --share attempt failed Tailscale Serve permissions; no Serve configuration was changed. The provided pair-client.sh worked for Android and initial iOS. For adding the second iOS environment use connections/new and pair-native.py; the UI fields' actual labels are Address and Code, though snapshot text displays their placeholders. No credential is included in this upload.

Use native-runtime.py with the Metro port and target-title substring Google or simlock to freeze the actual Hermes Date after every reload. Native screenshot --normalize-status-bar fixes chrome to 9:41. iOS normalization animates the battery; native-capture.py retains raw retakes, spaces requests by at least500ms, and selects two fully pixel-identical whole frames from the unchanged UI. Its JSON records the actual separation and frame paths. No pixels are altered. Prefer reduced motion in iOS Settings > Accessibility > Motion; Android animations off. Same setting on both sides. Text size Large (system default) on both.

R9 iOS: explicitly open `t3code-dev://new/draft?environmentId=<matching-environment-id>&projectId=evidence-project` so duplicate project names cannot select the other environment. Open model/reasoning settings with Opus Low Standard; after turn Ultracode on. Collapse the Codex section on both sides so every Options row fits. Capture sheet, open Reasoning and capture, Back > Done and capture composer. Before captures Low with no switch and the legacy reasoning choice available. The portrait composer displays a compact provider icon; Low·Ultracode is in the control's accessibility label, not visible text.

R10 Android: open evidence-high, tap Model and reasoning settings, capture sheet, tap Reasoning and capture. Same persisted High/Fast/Ultracode input; before drops unsupported boolean and shows High/Fast with no switch. Reasoning list includes legacy Ultracode before, omits it after.

R11 iOS: deep link t3code-dev://threads/<environmentId>/evidence-coordinator, wait Workflow started, scroll top, capture all member rows. R12 iOS: evidence-ordinary, wait Open agents, 1 agent done, open it and capture Agents sheet. Dismiss sheets before navigating elsewhere. Readback JSON proves model:null and explicit matching selections reached the client. Legacy context member intentionally uses claude-opus-5[1m] and low.

All artifact files are scratch. No source files were changed; both detached worktrees reported a clean git status before cleanup.
