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

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

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

Visibility: public

Requested revision: e3cd41305237361c49a40b2f01ed4ba9885558d2

Requested commit: e3cd41305237361c49a40b2f01ed4ba9885558d2

Commit: e3cd41305237361c49a40b2f01ed4ba9885558d2

Tree: 109c43b58c3a895ec394c66845c2fa8542bf60b1

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

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

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