# PASS 2 read-only proof audit

**SUFFICIENT for the requested changed-behavior proof, with the explicitly allowed native gap.** No required server or JS-loader proof rows remain outstanding. This is an evidence verdict, not native verification or authorization to merge.

Audited [#24682](https://git.cafe/pingdotgg/t3code/pulls/24682), integrated [accb7e75](https://git.cafe/pingdotgg/t3code/commit/accb7e75199340d332c6086502023cb468bf2c47) against [68d5b7ac](https://git.cafe/pingdotgg/t3code/commit/68d5b7ac735a5e95a945084430c6b5925873cc82). The clean local checkout matches the requested head before and after audit. Cafe still advertises [ece43d00](https://git.cafe/pingdotgg/t3code/commit/ece43d00cf113bbc4d7b1c0b5dc9de8695a717d4); this report covers the supplied integrated local head, not a claim that it has been pushed. The older PASS 1 head and historical iOS media do not establish current native behavior.

## Row-by-row result

| Row | Status | Evidence and limit |
| --- | --- | --- |
| S1 | PASSED | Opened both raw upstream logs, normalized transcripts, client results, fixture provenance, counts and actual harness. Instrumentation wraps each HttpClient.execute inside the policy callback: physical sends, not provider-method counts. Whole-PR diff downloads 2 before / 1 after; expansion adds 1 / 0. Both runs retain one metadata and two raw-source requests. All nine sends have matching 200 completions; no observed retry, pagination, truncation or fallback. Same first-page modified TS path, same 4,282,796-character patch hash, 8,565,592 estimated UTF-16 bytes exceeds 524,288. HTTP initial diff followed by real contracts-backed WS pullRequests.diffFileContents within 60 seconds; unrelated .env denied without another upstream send. Old/new source hashes match across runs and auditor's independent unauthenticated reads of immutable public commit sources. Single network sample per revision; latency is not a general guarantee. |
| S2 | PASSED, independently reproduced | Ran existing promise-gated harness against exact snapshot loader source, redirecting derived files only to auditor scratch. Verified only the trace import was substituted. Both resulting transcripts are byte-identical to supplied evidence. Baseline: aborted and fresh caller null; only active.ts fetched. Head: aborted caller null, replacement starts, active.ts and cancelled.ts each fetched once, fresh and joined caller receive the identical SOURCE object. Source-shared follows replacement start, exercising finalizer ownership. This is JS queue cancellation, not cancellation of an already-sent WS request. |
| S3 | PASSED | Read the credential fixture and verbose output, then independently reran the existing isolation selection: same account ID with broad/restricted fingerprints requires second diff read and returns not-found with zero source reads. |
| S4 | PASSED for changed in-flight epoch behavior; ordinary refresh extension NOT REQUIRED | Deferred-gated existing test invalidates during the initial diff read, then expansion sees the second empty diff and denies source access. Independently reran it. Source endpoint is a defect if invoked, so passing establishes no source invocation. Additional ordinary refresh permutations exercise existing machinery and are not required here. |
| S5 | PASSED for changed priming behavior; extra page-order permutation NOT REQUIRED | Existing oversized two-page rename/deleted fixture primes both slices, expands both with no extra diff read, and rejects unrelated and half-rename paths without extra content reads. Independently reran it. Page-2-first/empty-page-1 permutation is uncaptured and not required: page walk/order and exact path-pair behavior are existing logic. |
| S6 | PASSED for commit isolation; reverse direction extension NOT REQUIRED | Actual test primes an explicit 40-character commit and expands PR-wide, obtaining second empty diff, not-found and zero contents reads. Independently reran it. This is the opposite direction from PASS 1's first-listed sequence; do not claim both were captured. Additional reverse direction and 10-minute cache-duration experiment are not required for unchanged commit identity/TTL policy. |
| S7 | PASSED for changed observation-time behavior; exact-boundary extensions NOT REQUIRED | Existing Deferred/TestClock test advances 61 seconds while the provider read is in flight; completion does not renew membership freshness, and expansion reads empty authoritative diff and denies. Independently reran it. 60000/60001ms exact-boundary and extra ordinary-expiry experiments are uncaptured, not required for the unchanged comparison. |
| S8 | NOT REQUIRED; runtime permutations/eviction UNVERIFIED | No new runtime proof of every project/repository/host/PR permutation or >128 eviction. Inspected diff and surrounding implementation: new recording uses the loader's captured reference/cursor/commit key; existing key construction, capacity, oldest-entry eviction and membership walk remain. Required changed credential/epoch/commit boundaries are covered above. Do not infer permutation or eviction measurements from this audit. |
| M1 | UNVERIFIED, explicitly allowed native gap | No current-head native visible-highlight recording, theme matrix, Android canonical-index trace or token acknowledgement capture. Unit evidence does not prove native behavior. Android tooling absent on fs-15; iOS unavailable. |
| M2 | UNVERIFIED, explicitly allowed native gap | No current-head native expand/collapse/revisit recording or correlated trace. JS tests are supporting evidence only. Same tooling limit. |
| M3 | UNVERIFIED, explicitly allowed native gap | No current-head native fling/reverse/settle/revisit recording. S2 proves loader recovery only, not native scrolling. Same tooling limit. |

## Provenance and artifact integrity

Downloaded and opened all 30 bundle members, all separately linked artifacts in upload-links.md, and the separate review record. Compared standalone artifacts byte-for-byte with bundled counterparts. Verified all 29 listed SHA-256 checksums. Independently hashed all 28,334 tracked blobs in each executable snapshot against its immutable Git tree. The only difference in each is GitHubRest.ts, with identical instrumentation bytes and identical original blob. Instrumentation does not change responses, cache semantics or credentials; synchronous diagnostic appends mean timings remain instrumented observations.

The complete opened bundle inventory: report.md, manifest.json, counts-summary.json, before-upstream.jsonl, after-upstream.jsonl, before-request-transcript.jsonl, after-request-transcript.jsonl, before-client.json, after-client.json, before-loader.json, after-loader.json, fixture-provenance.json, focused-tests.txt, isolation-tests.txt, processes.json, tooling.json, instrumentation-68d5b7ac.patch, instrumentation-accb7e75.patch, prepare.py, start.py, start-after.py, stop.py, client.mjs, loader-capture.mjs, loader-before.ts, loader-after.ts, fixture-provenance.mjs, finalize.py, package.py, artifact-sha256.json. Also opened reviews.md and the local PASS 1 matrix. Source and harness review supplements the programmatic full-file reads/hash verification.

Focused test source hashes match immutable integrated-head blobs. Captured suite reports 150 passing across four files. Auditor independently reran the five named isolation cases: **5 passed, 89 filtered-out**, exit 0, 7.77 seconds. No tests were added. The 150-test suite was inspected, not rerun wholesale. Both prior reviewer MERGE conclusions are context, not a substitute for this audit.

The raw source endpoint is /repos/pingdotgg/t3code/contents/apps/mobile/app.config.ts with application/vnd.github.raw+json. Query refs were intentionally omitted from sanitized HTTP logs; source identity is corroborated by client hashes and independently fetched immutable public sources. UTF-8 source byte lengths differ from JS character counts by four bytes on each side; their SHA-256 hashes agree, so this is not a fixture mismatch.

No credential values, session cookies, tickets, live startup URLs or private keys found in published artifacts on inspection and pattern scan. Scripts reference private credential/startup filenames but do not contain their values. Bundle contains only the explicit allowlist; private credential, startup logs, raw patches and homes are absent. Did not read private credentials or startup logs. This is an inspection result, not a universal secret-detection guarantee.

Process records identify captured spawn trees and cleanup, including the post-capture watch restart. Raw after logs identify serving PID 1486025, consistent with manifest. Auditor launched no servers or browsers/native clients; the headless loader and targeted test process exited normally. No tracked edits, commits, pushes, PR comments/reviews/watchers, credential/auth/runtime/MCP changes. PR registration was the required app linkage only.

## FRICTION

Category | What happened | What would have avoided it
--- | --- | ---
Artifact transport | Python urllib received HTTP 403 from public artifact host; curl fetched every artifact successfully | Use the working curl transport for this host
Revision provenance | PASS 1 and remote metadata name older heads | Explicit integrated-head pin plus immutable snapshot/blob verification
Native tooling | No Android toolchain on fs-15 and no iOS host; M1–M3 cannot be verified | Prepared authorized native device host with matching rebuilt client
Proof scope | PASS 1 enumerated extra unchanged-logic permutations | Separate changed-behavior acceptance from optional broader matrix coverage

Audit performed with gpt-6.1-sol through the Codex harness. Applied pr-audit, cafe-cli, cafe-pr and ghdrop skills. No subagents spawned.

VERDICT: SUFFICIENT (explicit allowed native gap)
