# Proof audit, round 2

Verdict: PASS for the bounded synthetic hook/resolver claim. No confirmed proof or description finding. Native capture remains UNVERIFIED; this verdict does not certify end-to-end mobile behavior.

Target: [#24262](https://git.cafe/pingdotgg/t3code/pulls/24262), repository [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code), branch `t3/mobile-audit-pr-target-20261023`, base main. Final audited head [7b8a19c015](https://git.cafe/pingdotgg/t3code/commit/7b8a19c01543d62391fcfc7858c68790dcdff533); prior implementation review head [3d2f19579d](https://git.cafe/pingdotgg/t3code/commit/3d2f19579d9e20648a5d8e31007be77b8827db6d).

## Scope and identity

Read checkout AGENTS.md and the requested take-over-pr skill. Applied only proof inspection under the explicit read-only restrictions. All shell commands used the specified shared checkout or its mobile package. No source/body edits, forge mutations, comments, watching, servers, browser, device sessions, live user data, or other machines. Only this requested report was written outside the checkout. App-owned PR registration was performed and confirmed; no forge state was changed.

HEAD is the supplied final merge commit. Its first parent is the reviewed implementation head; its second parent is merged main [4fef307dd0](https://git.cafe/pingdotgg/t3code/commit/4fef307dd0a0e9eb1a7bd610ed390b6764295a65). The PR delta against that main parent contains exactly five files. `git diff --exit-code` between the reviewed head and final head for all five files returned zero: byte-identical. Working tree was clean. Unrelated changes brought in by main were excluded from the PR audit. No protected-domain implementation changes occur in the five-file delta; imported existing client types do not change provider runtime or access controls.

Final source references:

- [Selection resolver](https://git.cafe/pingdotgg/t3code/blob/7b8a19c01543d62391fcfc7858c68790dcdff533/apps/mobile/src/features/pull-requests/pullRequestEnvironmentFallback.ts)
- [Readiness gate and navigation hook](https://git.cafe/pingdotgg/t3code/blob/7b8a19c01543d62391fcfc7858c68790dcdff533/apps/mobile/src/features/pull-requests/usePullRequestEnvironmentFallback.ts)
- [Resolver fixtures](https://git.cafe/pingdotgg/t3code/blob/7b8a19c01543d62391fcfc7858c68790dcdff533/apps/mobile/src/features/pull-requests/pullRequestEnvironmentFallback.test.ts)
- [Hook transition and fallback fixtures](https://git.cafe/pingdotgg/t3code/blob/7b8a19c01543d62391fcfc7858c68790dcdff533/apps/mobile/src/features/pull-requests/usePullRequestEnvironmentFallback.test.tsx)
- [jsdom test registration](https://git.cafe/pingdotgg/t3code/blob/7b8a19c01543d62391fcfc7858c68790dcdff533/apps/mobile/vite.config.ts)

## Claim versus proof

The resolver retains an enabled requested target in available, connecting, reconnecting, or connected state, without requiring its project to have hydrated. Catalog initialization is separately protected by `isReady`; initializing is not an invented connection phase. Missing, disabled, offline, error, and unsupported requested targets permit fallback to an enabled connected copy with matching canonical repository identity. No timeout is introduced.

The hook fixtures demonstrate initialization with only a connected copy present; available → connecting → reconnecting → connected retention on rerender; connecting with absent requested project → hydrated/connected retention; and initial missing/disabled/offline/error/unsupported fallback with both route IDs replaced exactly once. Resolver fixtures cover connected-original retention, unrelated repository rejection, and host derivation. This supports the stated connecting-to-connected and missing/offline fixture matrix. Disabled requested coverage uses available phase. Disabled destination rejection remains source-inspected, without a direct retained test.

Independent pass-two run at the final head: from `apps/mobile`, `vp test run src/features/pull-requests/pullRequestEnvironmentFallback.test.ts src/features/pull-requests/usePullRequestEnvironmentFallback.test.tsx` exited zero: 2 files, 6 tests passed (1.47 s). No mutation performed. Supplied final-tests.log also records 2 files / 6 passed. Inspected final-typecheck.log, final-lint.log, and final-format.log: no failure text; format explicitly reports all matched files correct. Typecheck/lint logs are sparse and do not themselves encode exit status, so their success remains the parent runner's reported result rather than an independently repeated check. This pass did not rerun those checks or independently reproduce whitespace validation.

## Description and evidence limits

Inspected the supplied `pr-body.md`, proof-audit-r1.md, capture-report.md, and all four final logs. The supplied body preserves the original problem/change and historical verification, then explicitly says current verification supersedes historical counts. The takeover reduction from 17 to 6 is consistent with the reviewed source and current run; the earlier historical 16 is not presented as the final suite count. Mutation 2 failed / 4 passed is explicitly attributed to the delegated test agent, while the independent auditor's restored 6/6 is distinguished. This pass independently confirms restored 6/6 only.

The body explicitly labels Android before/after recordings UNVERIFIED and discloses disabled device access and missing Android tooling. Its fixture table is labeled synthetic/automated. It excludes native navigation, actual transport timing, PR content, and remote/relay/tunnel from its proof. Historical physical iPhone profiling wording is qualified as historical/where noted and does not override the explicit current missing native evidence. Capture pin mismatch is expected because main was merged; the audited five files are unchanged.

These are jsdom React hook/resolver tests with mocked catalog, projects, readiness and navigation, not React Native or a mounted PR screen. Initial offline/missing fallback does not prove a live pending → failure transition. State-only indefinite retention does not constitute elapsed-time observation. Full native rendering, atom delivery/event ordering, PR fetching, device behavior, and connection-mode integration remain unverified. The mutation split is supplied evidence, not independently reproduced. Device prerequisite failure is taken from the capture agent report, not retried here. Unavailable capture is a disclosed, explicitly nonblocking limitation for this bounded proof audit.

The supplied body accurately bounds its claims. This pass audits that snapshot, not a fresh live forge body or live CI state. No additional capture or test expansion is required for this PASS.

FRICTION: Compare final head against its merged-main second parent; comparing against the first parent includes unrelated main changes.
FRICTION: Native Android/iOS capture remains UNVERIFIED; disabled device access and absent local Android tooling were independently checked by the capture agent, not repeated in this pass.
FRICTION: Mutation 2-fail/4-pass is delegated evidence without a saved mutation transcript inspected here; restored 6/6 independently passes.
FRICTION: Disabled destination filtering is source-supported but has no retained direct assertion; initial failure fixtures do not prove live pending-to-failure timing.
FRICTION: Supplied final typecheck/lint logs are sparse; no independent rerun or live CI/body fetch in this proof-only pass.
