# Slow checkout runtime evidence

Scope: server checkout timeout removal only. Base: [8d3b061121](https://git.cafe/pingdotgg/t3code/commit/8d3b061121fe65669d5d43d011b48cd3027a4108). Final head: [f77bfb4c8a](https://git.cafe/pingdotgg/t3code/commit/f77bfb4c8a51f1bdfda110eebba5e42defc60a64).

## Provenance and environment

Validated 2026-10-22 UTC from the lead's saved before/control/after drafts and the real isolated development server trace. Runtime: Linux 6.1.102 x86_64, host fs-29; Git 2.43.0; Node v26.12.1. Lead used the real web development client (1280×800), local-folder picker then Thread details branch picker, old → target. No new browser or server was started by the evidence auditor.

Before ran at base; after draft records the working-tree implementation `timeoutMs: null`, subsequently committed as the final head above. Current checkout is that head and clean. The trace does not itself embed a source commit SHA; commit attribution uses the lead's capture notes and inspected final diff. Only apps/server/src/vcs/GitVcsDriverCore.ts changed: timeout 10,000 ms → null, plus explanatory comment.

## Reproducible fixture

These commands describe an equivalent fresh disposable fixture; the evidence auditor did not rerun them or modify the existing fixture. Choose an unused disposable path.

```sh
mkdir /tmp/issue-22245-repro-fresh
cd /tmp/issue-22245-repro-fresh
git init -b old
git config user.name 'Repro'
git config user.email 'repro@example.invalid'
printf '*.slow filter=slow\n' > .gitattributes
printf 'old\n' > a.txt
printf 'old\n' > z.slow
git add .
git commit -m old
git checkout -b target
printf 'target\n' > a.txt
printf 'target\n' > z.slow
git add .
git commit -m target
git checkout old
git config filter.slow.smudge 'sleep 15; cat'
git config filter.slow.clean cat
git config filter.slow.required true
```

Add this folder to the real app and switch old → target in Thread details. For an independent terminal control, start from a fresh equivalent fixture on old and run `time git checkout target`. Recreate a disposable fixture after a failed interrupted checkout rather than treating its partially updated state as a clean starting point.

## Observed before / control / after

- Before: checkout failed at **10004.808177 ms**, `Git command timed out`. HEAD remained old; a.txt contained target; z.slow was missing. Status: ` M a.txt`, ` D z.slow`.
- Terminal control (lead draft): **15.055 s**, exit 0, switched to target, clean status.
- After: checkout succeeded at **15126.097714 ms**. Server RPC `ws.rpc.vcs.switchRef` succeeded at **15352.112907 ms**; browser client `vcs.switchRef` finished with OTLP status 1 (OK) at **15356.5 ms**. No raw serialized RPC response body was found in the relevant trace records; these success spans plus persisted HEAD provide the success evidence.

Sanitized trace selection (only names, identifiers, times, durations and outcomes; no payloads, tokens, environment identifiers or stack traces):

```json
[
  {
    "type": "effect-span",
    "name": "GitVcsDriver.switchRef.checkout",
    "traceId": "57580395798c514f8fad9f3a72607548",
    "spanId": "23d50f92fc82c207",
    "durationMs": 10004.808177,
    "utc": "2026-10-22T10:14:24.390691+00:00",
    "result": "Failure"
  },
  {
    "type": "effect-span",
    "name": "ws.rpc.vcs.switchRef",
    "traceId": "57580395798c514f8fad9f3a72607548",
    "spanId": "ebf756b11b09ef29",
    "durationMs": 10077.268107,
    "utc": "2026-10-22T10:14:24.347102+00:00",
    "result": "Failure"
  },
  {
    "type": "otlp-span",
    "name": "vcs.switchRef",
    "traceId": "49b277e190b14cdc379dc2d64985da98",
    "spanId": "8836ce1ee2c1634a",
    "durationMs": 10083.8,
    "utc": "2026-10-22T10:14:24.344600+00:00",
    "result": "2"
  },
  {
    "type": "effect-span",
    "name": "GitVcsDriver.switchRef.checkout",
    "traceId": "3618533938c9333bb0c48f9b68172bdf",
    "spanId": "329fe6e765284ef8",
    "durationMs": 15126.097714,
    "utc": "2026-10-22T10:15:38.669120+00:00",
    "result": "Success"
  },
  {
    "type": "effect-span",
    "name": "ws.rpc.vcs.switchRef",
    "traceId": "3618533938c9333bb0c48f9b68172bdf",
    "spanId": "b5d612277e6ddcc1",
    "durationMs": 15352.112907,
    "utc": "2026-10-22T10:15:38.592824+00:00",
    "result": "Success"
  },
  {
    "type": "otlp-span",
    "name": "vcs.switchRef",
    "traceId": "309c9a6c6e9649396c1c952598c43dfa",
    "spanId": "6f26d69a8ceeb6e2",
    "durationMs": 15356.5,
    "utc": "2026-10-22T10:15:38.590800+00:00",
    "result": "1"
  }
]
```

## Independent final fixture inspection

Existing fixture `/tmp/issue-22245-repro`:

- old commit: `95f497f1da0ec0382ccafe2d3f57de0d31fc8fcf`.
- HEAD = target = `028c7a234aa217d3f6c87a82ca7fad3a29bd078c`.
- `git status --porcelain=v1`: empty.
- `git diff --exit-code` and `git diff --cached --exit-code`: both exit 0.
- `.git/index.lock`: absent.
- a.txt and z.slow both contain `target` followed by newline. Both index entries and both `git hash-object` results equal `eb5a316cbd195d26e3f768c7dd8e1b47299e17f8`.
- Local slow filter configuration matches the commands above.

## Limits / FRICTION

Windows desktop, WSL2 and actual Git LFS remain unverified. Linux's required 15-second smudge filter covers the server mechanism: checkout must be allowed to finish beyond the former 10-second deadline. This is runtime red/green evidence, not a new automated-test run. No rendering changed and no pixel equality is claimed. Raw logs remain local; no full trace is uploaded. No code changes, commits, comments, pushes, PRs, watchers or merges were made by this auditor.

Saved draft fingerprints (raw drafts are not uploaded):

- `before.txt` SHA-256: `b0abfac9719f5f1b687cb7cce84dc88674f0ded249d00dde34e20724121cd023`
- `control.txt` SHA-256: `c54e1f845357d538793d283a4038975f5b2ea5040ee9adf23922f19148fd21a7`
- `after.txt` SHA-256: `cc9658d6ebd761d49b5e6fc11347c6f95c96f77642d04bf08cce055cf4d2dee0`
