# feat\(server\): claim uploaded attachments at v2 dispatch · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/commit/989feda7692657d4f7d4063121cbe553ee1d6309)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

Requested revision: 989feda7692657d4f7d4063121cbe553ee1d6309

Requested commit: 989feda7692657d4f7d4063121cbe553ee1d6309

Commit: 989feda7692657d4f7d4063121cbe553ee1d6309

Tree: 67598c3953d18766877193b057b03c237578bdd1

Author: Julius Marminge

Committer: Julius Marminge

## Message

```
feat(server): claim uploaded attachments at v2 dispatch

Closes the last gap from the rebase follow-up list (#8048/#8161 for
v2): pending uploads staged via the attachment upload URL flow were
never claimed by the v2 orchestrator, so the composer kept
supportsAttachmentUploads off and fell back to inline dataUrls with no
progress UI and no big-file support.

message.dispatch and thread.launch now claim pending refs at intake —
verify the staged file, copy it under a thread-scoped id (the pending
copy stays as the retry source), rewrite the refs, and release the
claimed copies if the dispatch fails. A launch carrying uploads
requires its thread id up front. The web composer reads the
attachmentUploads capability again like main, which lights up the
upload progress overlay, retry-on-failure, and PDF/ZIP attachments.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

```

## Parents

- [756586e1cfe2bf04839b8b11b365c23be3f607e7](https://git.cafe/pingdotgg/t3code/commit/756586e1cfe2bf04839b8b11b365c23be3f607e7?format=markdown)

[Source at this commit](https://git.cafe/pingdotgg/t3code/tree/989feda7692657d4f7d4063121cbe553ee1d6309?format=markdown)
