# Read-only proof audit, pass 2

No blocking proof findings. The delivered evidence is sufficient for the narrow Android user-CA compatibility fix, with the conditional R2 WSS limit below. This is an ordinary compatibility bug; trust-sensitive review routing does not establish an exploitable vulnerability.

Reviewed checkout: /home/ubuntu/wt/issue-5639. Base 9bc0c334383a43af5390283e9b10f999acc021b8; head 853aceb5a1390badfe165d72266ce178bfee1886. HEAD matches; tracked worktree clean before and after. Complete three-file diff inspected, plus onboarding/resolver failure paths. AGENTS.md and relevant pr-audit proof guidance read. No source edits, forge operations, pushes, subagents, watchers, new servers, or builds.

| Row | Status | Evidence assessment |
| --- | --- | --- |
| Native gate | PASS | Independently hashed head build output and cached head/base APKs. aapt confirms head manifest networkSecurityConfig reference and packaged system + user anchors with cleartextTrafficPermitted=true. Base manifest retains cleartext and has no networkSecurityConfig. |
| R0 | PASS | Both recordings inspected. Chrome reads the private HTTPS descriptor; base T3 fails discovery at the same endpoint. Observed retry correlates with CERTIFICATE_UNKNOWN at 00:52:52 UTC. Placeholder code is not used as proof of redemption. |
| R1 | PASS | Pairing and read/reconnect recordings plus installed-root and connected stills inspected. HTTPS descriptor/token success, WSS 101 on sockets 7/15/23, fresh request/response frames, off/on reconnect, and post-reconnect data support the fix. Earlier transient SocketReadError is disclosed, not erased by later success. |
| R2 | PASS with explicit limit | Recordings show named root removal, empty user store, app relaunch, failed retained reconnect, fresh pairing attempt, and visible discovery rejection. CERTIFICATE_UNKNOWN distinguishes chain rejection from an unreachable server. Independent WSS TLS rejection is UNVERIFIED: HTTPS descriptor preflight prevents reaching that handshake through supported flows. No bypass result is claimed. |
| R3 | PASS | System pairing and completed read recordings plus system-only route still inspected. WSS 101 and fresh frames on socket 28 correlate with the final isolated read; earlier fallback traffic is not credited as isolated proof. Independently repeated a fresh system-route provider refresh successfully. |
| R4 | PASS | Pairing/read recordings and HTTP-only still inspected. Final isolated flow has HTTP descriptor/token success, WS 101 on socket 7 after the proxy restart, and fresh response frames. Earlier mixed-route attempt is not credited as final proof. |

## Artifact identity and scope

Head APK SHA-256: 643269934f0ae53037e5fcb094303b67cb121034a4262916a941dc7695c1dcd7.
Base APK SHA-256: f2c619ac816c354d22b9349dba6179a6a5239590c6de5abfdb65a385e69b14aa.
Head native fingerprint independently recomputed with the installer's development environment: e9cabfd8aa6930799024d4e47fefcd0c8220fc7d. Base cached artifact resides under the reported ed36a9cc9856c84a322bb71e6d67744f0a00877d fingerprint; no base checkout or rebuild was performed. Device installation identity relies on supplied install receipt/handoff, corroborated by cached artifact hashes and native behavior; the installed binary was not pulled back from the device.

All 22 distinct linked delivered artifacts downloaded with curl and matched local bytes exactly; public matrix and evidence index also match. All seven delivered PNGs were opened and inspected. All eleven delivered MP4s were decoded into contact sheets sampled every two seconds across their encoded timelines; all twelve resulting sheets were inspected. This is inspection of every delivered recording, not an exhaustive review of every video frame. Pairing clips have conservative black masks; these hide some interaction details, so transport evidence supplies the missing protocol observations. No pixel-diff claim is made: no rendering paths changed.

The exact observer driver and all 1,385 sanitized transport records were parsed. Fields contain operation/transport metadata, no payload/header/query/body data. Private root fingerprint matches the evidence; openssl verifies the private leaf's chain and fixture hostname. Public leaf issuer is Let's Encrypt YE1 and its validity covers capture time. Socket identifiers restart with the proxy; timestamps distinguish runs.

## Independent observation

Existing issue-5639 session, owned from /home/ubuntu/t3code, was healthy; no reacquisition/install/build was needed. Existing backend, Metro, and all three proxy listeners were healthy and left untouched. The app exposed exactly one route, system-CA HTTPS on 18444, Connected and In use. At approximately 02:16:45 UTC I tapped Refresh providers, observed busy then Provider status refreshed, and correlated a new client request with server frames of 9338, 9074, and 9334 bytes on existing system-CA socket 36. A second recording at approximately 02:18 also shows busy to completion and a small scroll to retain the completed frame. independent-r3-final.mp4 and independent-r3-complete.png contain no pairing credentials; independent-transport.jsonl contains allowlisted metadata only.

This independently repeats an affected retention observation (R3), not the entire private-root installation/removal experiment. Private-root absence on this reused device is inherited from the delivered capture/handoff rather than independently re-inspected in system Settings. The session is left available as received; no disposable connection or existing infrastructure was destroyed.

## Limits

Native evidence covers a Pixel 9/API 36 development client, not a release artifact, iOS, or every Android version. These are outside the required narrow matrix. Independent WSS rejection without the root remains unverified and is not inferred from an HTTPS TLS alert. The supported onboarding path fetches the descriptor before code redemption; retained connection preparation also fetches it before socket creation. Therefore the requested conditional direct-handshake branch is unreachable in the inspected flow, while end-to-end rejection is established. No meaningful automated OS-trust fixture exists here; real native captures and packaged artifact inspection are appropriate proof, and no mock/XML assertion was substituted. This is proof sufficiency, not a forge/CI or full merge-readiness audit.

## FRICTION

| Category | Happened | Resolution / impact |
| --- | --- | --- |
| Public downloads | Python urllib received HTTP 403. | curl fetched every delivered artifact; byte identity confirmed, no remaining gap. |
| Native inspection | First aapt invocation used a root-relative path from apps/mobile. | Corrected path; packaged manifest/XML inspected successfully. |
| Fingerprint | Unconfigured manual calculation differed. | Repeated with installer's explicit development environment; exact head fingerprint matched. |
| Recording | First short independent recording stopped during busy state. | Completion captured in snapshot/still; second recording includes completed state and scroll. No latency claim. |
| Conditional R2 | Descriptor TLS rejects before WSS. | Kept independent WSS rejection explicitly UNVERIFIED; no unsupported bypass or claimed handshake proof. |

VERDICT: SUFFICIENT
