Evidence refresh for [#24265](https://git.cafe/pingdotgg/t3code/pulls/24265) ([GitHub mirror](https://github.com/pingdotgg/t3code/pull/24265)).

PASS — local pinned HEAD [8e4dcde14c](https://git.cafe/pingdotgg/t3code/commit/8e4dcde14c02061f11d4de36237857e4f31d86e7); actual merge-base [d14ace8233](https://git.cafe/pingdotgg/t3code/commit/d14ace8233ad3cf7856b6b834824f888240d67a1). Host fs-40 only. Recorded 2026-10-24T04:17:10.162Z.

Publication state: read-only `git ls-remote origin` confirmed main at d14ace8233ad3cf7856b6b834824f888240d67a1 and branch `t3/mobile-audit-thread-cache-20261023` at [18dace5064](https://git.cafe/pingdotgg/t3code/commit/18dace5064692fc8f6613b32b442f6b2c34af5a6). That live remote head is expected until push. Local 8e4dcde14c is not yet published. Prior wording that treated the live remote as unexpectedly stale is corrected. No push, commit, source edit, comment or PR-body update was made.

## Reproduce

`node /tmp/ev-24265/pass2-head8e4-refresh/benchmark.mjs /home/ubuntu/wt/pr-24265 /tmp/ev-24265/pass2-head8e4-refresh`

The script asserts exact HEAD, computes merge-base against the pinned main commit, and verifies V4 schema and contracts/shared sources unchanged before importing the actual V4 schema and HEAD V5 codec. Existing dependencies only. All 51 focused tests completed before this sequential benchmark; reviewers performed inspection only. Synthetic 10,000-item fixtures; no real user data. Three warmups, ten samples per operation, rotated operation order, natural GC, Effect.runPromise around actual Schema JSON codecs. Fixture creation and assertions outside timing. Host memory only: no SQLite, network, native, UI or device timing. Timings are descriptive for this run, without significance/confidence claims.

## Raw-derived benchmark medians

| Shape | V4 bytes | V5 bytes | V4 encode ms | V5 encode ms | V4 decode ms | V5 decode ms | HEAD reads V4 ms |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| shared | 44142269 | 22575684 | 556.972 | 226.054 | 381.411 | 198.530 | 396.482 |
| equal-but-distinct | 44142269 | 44142354 | 386.877 | 385.921 | 306.395 | 334.096 | 338.729 |

Compact shared-reference case: 48.857% fewer bytes; exact snapshot/projection equality and restored local item reference identity pass. Equal-but-distinct case takes full V5 fallback: 85 extra bytes; measured encode is effectively unchanged and decode is slower in this run. No fallback speedup claim. V4 decode then V5 resave uses full fallback because JSON decoding creates distinct item objects; equality still passes.

## Coverage matrix

| Requirement / surface | Evidence | Result / limit |
| --- | --- | --- |
| Mobile V5 persistence write/read | Actual codec benchmark; mobile cache-store tests from apps/mobile | PASS on host/mock DB; native SQLite unverified |
| Shared compaction eligibility | Shared vs equal-but-distinct 10k shapes; bounded snapshot helper tests | PASS; reference/order preconditions retained |
| Restoration before consumers | Exact full snapshot equality, 10k shared item identity assertions; thread-sync tests | PASS on host/mock transport |
| Identity regression since 18dace | Existing mixed roundtrip extended: local/inherited same sourceItemId with different sourceThreadId, synthetic/fork/hidden items; same tuple duplicate still discarded | PASS; decoder JSON tuple (sourceThreadId, sourceItemId) matches composite row identity; no additional test introduced |
| V4 → HEAD compatibility | Actual merge-base V4 encode → HEAD decode; exact equality in both 10k cases; V4 load/resave test | PASS; full resave fallback expected |
| Older reader | Actual merge-base V4 decoder rejects both full and compact V5 | PASS expected rejection; older clients discard/refetch, native downgrade/refetch flow unverified |
| Corrupt/partial records | Mobile corruption tests, count/thread/order/duplicate checks; thread-sync cache-miss recovery | PASS mocked persistence/transport; live recovery unverified |
| Web local/hosted/remote | apps/web/src/connection/storage.ts retains V4 codec; no production web changes | PASS inspection; all browser flows unverified |
| Desktop local/remote | Wraps web; no desktop changes | PASS scope inspection; native/IPC flows unverified |
| Android | Shared mobile implementation; no runtime run | UNVERIFIED; no emulator/adb used (both absent from PATH) |
| iOS | Shared mobile implementation; no runtime run | UNVERIFIED; no device/simulator used |
| Direct/relay/tunnel, multi-environment | No wire/transport changes; environment/thread match checked on load | PASS inspection only; end-to-end modes/isolation unverified |
| Eviction | mobile-database.ts and policy unchanged | PASS inspection only; no new eviction claim |
| Provider/agent/scheduler/contracts | No provider/service/wire changes in five-file diff | PASS scope inspection; no separate runtime claim |

## Focused tests

PASS — 4 files, 51 tests: mobile cache 8, thread-sync 37, bounded snapshot helper 3, V4 orchestration cache schema 3. Exact commands, working directories and raw output are in tests.log. Mobile command ran from apps/mobile. No repo-wide checks. Two fresh independent code reviews ran in parallel and both returned PASS with no concrete new findings; details and limitations in reviews.md.

## Scope

Only fs-40 and the requested checkout were used. Evidence is synthetic and outside the checkout. No source edits, commits, pushes, comments, servers, browsers, mode/auth changes, other machines, live userdata, emulator or adb. Prior /tmp/ev-24265/pass2-final artifacts are preserved and remain historical evidence for their old HEAD. This refresh and its separate pass2 verification do not relabel those files.
