# PR #23005 proof audit pass 2 (Claude Opus 5.5 via T3 Code)

Verdict: SUFFICIENT. Before 8d3b061121, after 9f5ac28ef0 (+ driver commit 901c5dcbb5, no runtime change).

- Every transcript header names head=8d3b061121 (before) or head=9f5ac28ef0 (after); node v24.22.1, Linux 6.1.102.
- F1–F9 and F13: SUFFICIENT. F2 and F3 recordings and transcripts were read in full.
- F14: PARTIAL. The dev desktop answers GET / with a 302 (apps/server/src/http.ts:577, devUrl set), and the launcher's probe needs a 2xx (packages/ssh/src/tunnel.ts:319), so adoption fails in dev. The mechanism is still covered by F2 + F2b + F13.
- F8b: a follow-up, not a blocker. archiveVersion only comes from environment.appVersion (apps/desktop/src/main.ts:116), so the remote runner always matches the client. The latent fragility is tunnel.ts:742, which treats any non-empty stdout as remaining time; a digits-only check would close it.
- Unverified: F3d (clock jump), F10/F11 (need a packaged build, since updates are off when !isPackaged), F10b/F12 (not reachable from the UI), the real quitAndInstall binary replacement (macOS/Windows/AppImage), and F14 end-to-end adoption.

Rebuilt row F4 from scripts/evidence/pr-23005-ssh-update-race.sh:
- before: rc=0 after 5997 ms, {"remotePort":3774,"serverKind":"managed"}, marker PRESENT
- after: rc=0 after 6595 ms, {"remotePort":3774,"serverKind":"managed"}, marker ABSENT
This matches the capture.
