Round 1 review of [#18359](https://git.cafe/pingdotgg/t3code/pulls/18359), on local merged head `394f9be427` against base `dd5b5401e1`. I found no blocking bugs; recommend merge.

`cafe pr view 18359` returned HTTP 503 twice, so I did not read the PR description, comments or CI. Everything below comes from the local diff and local runs.

## Confirmed findings
None.

I checked the change against each part of the spec in `apps/server/src/orchestration-v2/ProviderTurnStartService.ts`:

- **Reuses the existing thread branch** (`:162-166`). After `pruneWorktrees`, an existing local branch is reattached with `git worktree add -- <path> <branch>`.
- **Recreates a deleted branch from the project's current named branch** (`:167-180`). It clears the status cache, reads the project's current branch from Git, and creates the branch with `-b <branch> refs/heads/<base>`. The full `refs/heads/` prefix means a tag with the same name can't be picked by mistake. A detached HEAD gives `WorktreeRecreateNoBaseError`, which has a clear message.
- **Retries are preserved** (`:600`). When `willRetry` is true, the failure goes back to the worker and is turned into `ProviderTurnStartError` at `:1433`. Interruptions are no longer swallowed: the old `catchCauseIf` is gone, and `Effect.result` only catches failures. The tests assert the run stays `starting` and no events are written.
- **Final failure saves a useful message without raw Git output** (`:601-606`). The saved message is the error's own text (branch and path). The error code is null because the wrapper error has no `code` field. The test checks that `"private git diagnostic"` never reaches the events.
- **Behaviour change:** before, a failed recreate only logged a warning and the provider started in a missing directory. Now the run fails before the provider starts. That is the intended fix.
- **`listLocalBranchNames` format change** (`apps/server/src/vcs/GitVcsDriverCore.ts:4388`, `refname:short` → `lstrip=2`). The old format printed `heads/foo` when a tag and a branch share a name. The other two callers (`GitManager.ts:3005` for unique branch names and `WorktreeMcpService.ts:175`) get the same correction, so this is safe.

## Minor notes (not blocking)
- **Product choice, merge with a note:** a deleted branch is recreated from the project's *current* named branch, not from the remote. This is the policy you asked for. Work that was only on the deleted branch is not recovered, and the new branch starts from whatever the project root has checked out at that moment.
- **Branch base gets recorded:** passing `baseRefName` makes `GitManager.createWorktree` call `shareBranchBase` for the recreated branch, so the base is recorded with the source-control host. That fits a branch "started from" the project branch, but it is a side effect worth knowing about.
- **Rollback is not covered:** `CheckpointRollbackService.ts:203-218` still recreates worktrees the old way, with no fallback for a deleted branch and no curated error. This is outside the spec, so I'd raise it as a follow-up rather than add it to this PR.
- **Still fails every turn in one case:** if the thread's branch is checked out in the project root, `git worktree add` fails each turn with the curated message. Before this PR it failed with a warning only.
- **Regex/parser:** the diff adds or changes none.
- **Sensitive surfaces:** no changes to auth, credentials, permissions, approvals, modes, sandbox, trust or MCP.
- **Stray files:** no scratch files committed; every changed file is `.ts`. The testkit is a test fixture.

## Gaps
- PR metadata, description, comments and CI were not read because of the 503s.
- No runtime transcript yet. That is expected after this review, and this is a server-only change.

## Checks run
- `vp test run src/orchestration-v2/ProviderTurnStartService.test.ts`: 34/34 passed. These include real-Git cases for branch reuse, fallback to the project branch, tags with the same name, detached HEAD, interruption, retry, and hidden Git output.
- `vp run check:changed`: all passed (format, lint, knip, graphql, typecheck for 2 packages, tests in 2 files with 197 tests).

FRICTION: forge|`cafe pr view 18359` returned HTTP 503 twice, so PR metadata, comments and CI went unread|retry later or include PR description/CI state in the brief so the review isn't blocked on the forge

VERDICT: MERGE
