# Mobile proof handoff — blocked native build

Supporting [#24914](https://git.cafe/pingdotgg/t3code/issues/24914), [b76a110aa4](https://git.cafe/pingdotgg/t3code/commit/b76a110aa4) → [c7481a95e4](https://git.cafe/pingdotgg/t3code/commit/c7481a95e4).

**Verdict: NO MOBILE VISUAL PROOF.** No simulator artifact, session, screenshot, recording, or pixel diff was produced. M1, M2, M3, M4 are all missing, including every selected/unselected, theme, caller, selection transition, and slim/Woke visual requirement. Do not treat source preparation or the projection transcript as device evidence.

## Concrete blocker

Fresh static Release simulator build [0b59dc21](https://expo.dev/accounts/pingdotgg/projects/t3-code/builds/0b59dc21-6c7f-4df0-8713-873b58ae0479) is ERRORED with XCODE_BUILD_ERROR. CocoaPods reports that GhosttyKit has only `ios-arm64` and `ios-arm64-simulator` slices, but the generic simulator Release build requests `(arm64 x86_64)`. T3TerminalNative then fails to import GhosttyKit. Both checked-in slices declare only arm64. This is a native build architecture mismatch, not a demonstrated question-indicator defect. A temporary Release simulator build configuration excluding x86_64 is the likely next experiment; it has not been tried or verified. Another complete native build does not fit the remaining 30-minute subtask budget.

First submitted build [ccd2b3b3](https://expo.dev/accounts/pingdotgg/projects/t3-code/builds/ccd2b3b3-0eca-411b-8095-cb4d13eef905) failed earlier during prebuild with ERR_PNPM_UNUSED_PATCH because my temporary archive filter removed non-mobile workspace manifests. Restoring all app manifests fixed that failure; the retry reached native compilation. An initial local packaging command was interrupted before submitting a build while correcting fixture preparation.

## Prepared fixture and limits

Own disposable checkout started at head. No implementation or web proof checkout was edited. Exact base row and models files were copied adjacent to head sources, with byte identity recorded. A visible HARNESS ONLY overlay switches the row implementation and raw-shell projection between revisions and uses the existing appearance preferences service for theme switching. Source revision markers are hidden fixture metadata; titles match. Real HomeRouteScreen/HomeScreen, ThreadNavigationSidebar, ThreadListV2Row, and list derivation remain in the app. Raw shells feed the actual thread-shell and project atoms. Fake environment presentation and capability atoms avoid needing a live backend and expose the settled shelf. This is store injection, not a connected fixture backend or live provider proof. Navigation reachability, runtime correctness, and rendered accessibility labels remain unverified.

Prepared A/A2 active async, N no question, B blocking, C completed with unanswered async, D completed, G active goal, W ready, S settled. G uses minimal goal metadata; no complete contract-schema validation is claimed. The host-side projection transcript verifies base lacks the question flag, head A/A2/G gain it, and B/C retain input state. The local iOS Expo export passed (22 MB Hermes bundle); that proves bundling only.

## Environment

Host fs-13, Linux x86_64, Node 26.12.1, pnpm 12.14.0, local vite-plus 1.4.0. EAS access confirmed available for pingdotgg. Expo 58.0.14, React Native 0.88.0. EAS profile proof-static extends preview, developmentClient=false, ios.simulator=true, macos-tahoe-26.6-xcode-27.1. Bundle ID com.t3tools.t3code.preview. No matching native artifact was reused. Session IDs: none. Device/OS version/logical width/pixel width: unavailable, since no session was started. No Metro server or tunnel was started.

## Public artifacts

- [prepare.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2d9905f3651e7ca3/prepare.py)
- [fix-fixture.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/36de27a4461cc270/fix-fixture.py)
- [fixture.patch](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2896b0d5d0bf8cb0/fixture.patch)
- [fixture-sources.tar.gz](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/ee09baeeffaf899a/fixture-sources.tar.gz)
- [drive.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/81da4931cec53c2c/drive.sh)
- [source-provenance.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/d2e060e031255709/source-provenance.json)
- [projection-transcript.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a1093057b556e0c/projection-transcript.json)
- [build-failure-public.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/719436481cffccef/build-failure-public.txt)
- [easignore-final.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/2eb2b02d6adeade7/easignore-final.txt)
- [capture-phone.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cd6b72917aef623d/capture-phone.sh)
- [diff.py](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/fe81d2b8561dcf9b/diff.py)
- [environment.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/a526cc753cbf90f6/environment.json)
- [native-blocker.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/50ea1693cf0d821b/native-blocker.txt)
- [start-session.sh](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f8137bb4c2a0db2d/start-session.sh)

Recreate with prepare.py then the latest fix-fixture.py, and overwrite repository-root .easignore with easignore-final.txt. fixture.patch and fixture-sources.tar.gz preserve the actual submitted fixture changes and untracked sources. capture-phone.sh, start-session.sh, and diff.py were prepared but never executed against a simulator; they are not passing drivers. diff.py emits both zero and 16-per-channel threshold masks plus labeled before/after pairs when real captures exist. No capture files exist to inspect.

## FRICTION and cleanup

- Native static generic simulator build needs architecture configuration compatible with the arm64-only vendored terminal framework.
- Full fresh native build consumed most of the budget; no simulator was idled during it.
- Archive filtering cannot remove workspace manifests while retaining root patched dependencies.
- No existing compatible V2 fixture backend was found in the inspected mobile showcase/store paths. The prepared fallback is explicitly HARNESS ONLY.
- Both mobile callers and selected-path navigation still require real device inspection; no reachability conclusion is claimed.
- ghdrop uploads contain only public-safe sources, fixture state, and filtered diagnostics. Private EAS configuration, tokens, signed log URLs, and full raw logs were excluded.
- No forge reads/writes, commits, merge, watch, live database access, or web proof work occurred.
- No simulator sessions were created. Both submitted EAS builds terminated with errors. Own disposable worktree and task temporary files are removed after this index upload.
