# Git timeout evidence

Environment: Linux, real T3 development server and Chromium 156, 1280 × 800, light theme. Each commit used its own fresh isolated state, with synthetic repositories and a replayed parent thread. No live user data was used.

Four concurrent server `vcs.switchRef` requests target four disposable repositories. Each request starts two `show-ref` commands with five-second timeouts. A Git shim ignores and records SIGTERM only for those eight commands; every other Git invocation uses the system Git. Separate repositories avoid the per-repository checkout lease serializing the prerequisite.

After all eight processes have started, a script inside the app terminal calls the app CLI, which authenticates to the real server and invokes `t3_thread_launch` through MCP, requesting a worktree on the already-existing branch-X. The terminal reports actual process liveness and the MCP response. Terminal-only Git subprocesses are not used to occupy the server pool.

| Sample | Base | Head |
| --- | --- | --- |
| 0 seconds | 8 alive; MCP pending | 8 alive; MCP pending |
| 5 seconds | 8 SIGTERM ignored; 8 alive; pending | 8 SIGTERM ignored; 8 alive; pending |
| 7 seconds | 8 alive; pending | 0 alive; branch-conflict error received |
| 20 seconds | 8 alive; pending | 0 alive; branch-conflict error received |

The head's persisted error, read from this run's synthetic server state after capture:

```json
{
  "class": "validation_error",
  "message": "Workspace preparation failed during provision worktree: Git command failed in GitVcsDriver.createWorktree.createBranch (<synthetic workspace>): git worktree add failed (branch_already_exists)",
  "code": "workspace_preparation_failed",
  "retryable": false
}
```

Both screenshots were exported from two captures at least 500 ms apart. Their exported pixels are identical (zero differing pixels on each side). Stills crop the animated sidebar and terminal cursor; the replay selector is redacted. Videos retain the full viewport, redact that selector, and trim startup before the scripted request. Evidence output is unchanged.

The base observation intentionally ends at 20 seconds. This shows retention well beyond the five-second timeout and one-second grace; it does not claim to observe an infinite wait. The driver cleans up its own hostile processes afterwards.

Not separately exercised: direct interruption, cooperative SIGTERM cleanup, or other operating systems. This proof does not establish the cause of the historical seven-hour incident.

Tools: real-server WebSocket RPC, T3 MCP CLI, Chromium/e2e, ffmpeg, and ImageMagick.

AI-assisted; verified with the tests and tools listed above.
