# Evidence for mobile message loading

[#25754](https://git.cafe/pingdotgg/t3code/pull/25754) · paired captures at [5808469018](https://git.cafe/pingdotgg/t3code/commit/5808469018fb95676af148e7a7662c23665c67a3) → [db41c18dc6](https://git.cafe/pingdotgg/t3code/commit/db41c18dc69938e7196e221cc7e79982d82e5815). **4/4 matrix rows captured**; all named matrix branches covered in synthetic harnesses. Three samples per fixture per revision. No screenshot is applicable.

**Environment:** Node v26.12.1 (R1 ran on Node v24.22.1, the same on both sides); global vp v1.3.0, local vite-plus v1.4.0 / Vitest v5.0.5; Linux 6.1.102 x86_64; VM fs-22. Identical driver bytes and Node on both sides; synthetic in-memory/test state only.

## R1 — bounded reconnect replay

| Fixture | Before<br>[5808469018](https://git.cafe/pingdotgg/t3code/commit/5808469018fb95676af148e7a7662c23665c67a3) | After<br>[db41c18dc6](https://git.cafe/pingdotgg/t3code/commit/db41c18dc69938e7196e221cc7e79982d82e5815) |
| --- | --- | --- |
| 64 growing assistant updates | 64 replay items / 558,381 B | 1 replay items / 16,789 B |
| 64 updates + completion | 65 replay items / 575,172 B | 2 replay items / 33,580 B |
| 12 paired message/item replacements | 24 replay items / 21,197 B | 2 replay items / 2,472 B |
| Raw 129 events or payload >1 MiB | Snapshot | Snapshot |
| Raw 1,048,576 B; projected candidate 1,048,729 B | Snapshot | Snapshot |
| Cursor/creation/shell/unknown/bounded flags | Controls pass | Controls pass |

[R1-before.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3ffce3faafa26465/R1-before.txt) · [R1-after.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/451949f89e86f65c/R1-after.txt)

**What else changed:** coalescible survivors retain the latest full body and original sequence, creating sequence gaps; paired item/message and running tool/reasoning families also shrink. Completion, identity/run, unrelated-event and non-streaming boundaries survive. Final wire projections and every tested survivor reconnection agree. Snapshot choices, cursor/compact/dedupe flags, synchronized marker and high-water live tail are unchanged. Bytes exclude RPC envelopes/chunks; actual framing was not measured.

## R2 — direct authorization

| Fixture | Before<br>[5808469018](https://git.cafe/pingdotgg/t3code/commit/5808469018fb95676af148e7a7662c23665c67a3) | After<br>[db41c18dc6](https://git.cafe/pingdotgg/t3code/commit/db41c18dc69938e7196e221cc7e79982d82e5815) |
| --- | --- | --- |
| Cold saved bearer / primary bearer / SSH bearer / direct DPoP | 3 HTTP (2 descriptor GETs) | 2 HTTP (1 descriptor GET) |
| Warm <10 s | 2: ticket → descriptor | 2: descriptor → ticket |
| After old TTL (virtual +11 s) | 3 HTTP | 2 HTTP |
| Direct DPoP cold/expired token; rejected token | 5; 6 HTTP (+1 bootstrap service call) | 4; 5 HTTP (+1 bootstrap service call) |
| Warm identity swap | Blocks after credential-bearing ticket | Blocks before ticket/token transmission |
| Metadata changes while ticket held | Ordinary prepare blocks on new protocol; update sees new metadata | Ordinary prepare succeeds using pre-ticket protocol; update sees pre-ticket metadata |

[R2-before.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0cc7825fd0775aea/R2-before.txt) · [R2-after.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8f5fc8394cfac6bb/R2-after.txt)

**What else changed:** the old direct descriptor cache is replaced with a fresh pre-ticket read for each attempt. Cold and after-TTL direct origin traffic loses one GET; warm traffic changes order. The metadata fixture also changes observed serverVersion, repositoryIdentity, serverSelfUpdate and serverSelfUpdateProgress. Ticket freshness/ordinals, bootstrap counts, rejection/descriptor errors, and ordinary/update compatibility behavior with a stable descriptor are otherwise unchanged. SSH gateway work is mocked and lies outside the 3 → 2 count.

## R3 — fallback and routes

| Fixture | Before<br>[5808469018](https://git.cafe/pingdotgg/t3code/commit/5808469018fb95676af148e7a7662c23665c67a3) | After<br>[db41c18dc6](https://git.cafe/pingdotgg/t3code/commit/db41c18dc69938e7196e221cc7e79982d82e5815) |
| --- | --- | --- |
| Primary without bearer | 1 descriptor GET; no ticket | Same |
| Pure relay cached; cold/expired; rejected/transient refresh | 2; 4; 5 HTTP | Same |
| Wrong identity / unsupported / update bypass | Expected blocked/update results | Same |
| Actual preflight → connect, including probe | 6 HTTP (4 + 2) | 5 HTTP (3 + 2) |
| Preflight fails direct ticket; connect retries direct then relay | 7 HTTP | 8 HTTP |
| Unavailable/mismatched direct probe → relay | 4 HTTP; relay succeeds | Same |

[R3-before.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/dde5ab208bd79123/R3-before.txt) · [R3-after.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/84d0d22496466dae/R3-after.txt)

**What else changed:** the transient direct retry adds a fresh descriptor GET because the old cache is gone; the successful preflight fixture saves one GET in its first prepare. Route probes and preparation attempts are logged separately. All final routes, result/error tags, renewal/bootstrap counts and cached-token retention match; transient direct failure does not evict the token.

## R4 — Send/Stop while history waits

| Fixture | Before<br>[5808469018](https://git.cafe/pingdotgg/t3code/commit/5808469018fb95676af148e7a7662c23665c67a3) | After<br>[db41c18dc6](https://git.cafe/pingdotgg/t3code/commit/db41c18dc69938e7196e221cc7e79982d82e5815) |
| --- | --- | --- |
| Send pending: dispatch ms, samples 1/2/3 | 250.719, 252.032, 252.050 | 0.892, 0.658, 0.994 |
| Stop pending: dispatch ms, samples 1/2/3 | 252.346, 252.377, 252.224 | 0.699, 0.633, 0.702 |
| Send idle: dispatch ms, samples 1/2/3 | 23.757, 1.704, 1.078 | 18.115, 2.150, 1.161 |
| Stop idle: dispatch ms, samples 1/2/3 | 3.196, 1.611, 1.844 | 1.706, 0.927, 1.025 |
| History first; ordinary command first | Shared queue; second waits | Separate queues; overlap |
| Commands serial / history serial / other thread/environment | Pass | Pass |
| Real overlapping pages, progressive views, replacement/deletion/cancel/retry, detached Stop repair | Pass | Pass |

[R4-before.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/13997bd386d816be/R4-before.txt) · [R4-after.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/0275c2eb4475ff04/R4-after.txt)

**What else changed:** dispatch and phase order move ahead of history release, including the reverse-order history request; same-thread mutations and history requests each retain their own serial order. Cancellation/error/noop/busy release the queue. Every sampled final projection, history metadata, result, RPC/history call count and detached-repair outcome matches. Ordinary commands remain independent of detached Stop repair, when the Stop RPC fails or the thread closes (a failing repair lookup was not captured). Raw elapsed values differ due to scheduling/JIT; these are fixture timings, not real-network claims.

## Artifacts and limits

The linked transcripts contain inputs, full pinned SHA, ordered output/request/phase records and all raw samples. [coverage.md](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/8a8cd8cadd1e16ec/coverage.md) lists each fixture and the driver hashes. No matrix row is unverified in the synthetic scope. Actual RPC framing bytes, devices, live providers, real SSH and network latency were outside this capture scope.

Canonical drivers: [R1.test.ts](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/89fa9c11070cf760/R1.test.ts) · [R1-shell.test.ts](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/f4d5d1f9c9618df2/R1-shell.test.ts) · [R2-R3.test.ts](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/13a229f01298a618/R2-R3.test.ts) · [R4.test.ts](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/4a592cf0eeebc7b3/R4.test.ts) · [R4-history.test.ts](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/823d339cc5d53ef7/R4-history.test.ts)

The shared after checkout advanced externally during capture. Final artifacts use a separate detached checkout at the requested head; mixed-SHA exploratory runs are excluded. All scratch test copies were removed, both temporary worktrees were removed, every final test process exited 0, and `git -C /home/ubuntu/wt/pr-25754 status --short` was empty. The shared checkout’s newer external commit was left intact.

FRICTION: infra — shared head advanced externally; tool — passing logs hidden until --silent=false; model — initial synthetic item/schema and wire-comparison errors corrected before final paired runs.
