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

[View on GitCafe](https://git.cafe/stienswout/t3code/commit/4428fff63da8a9971100e1313fa1b810b388737f)

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

Visibility: public

Requested revision: 4428fff63da8a9971100e1313fa1b810b388737f

Requested commit: 4428fff63da8a9971100e1313fa1b810b388737f

Commit: 4428fff63da8a9971100e1313fa1b810b388737f

Tree: ca63a9d3d1852b1b8d7bac03c66574cb384362f1

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

- [aa99a663a37643e93a1a03402b18a650d996d392](https://git.cafe/stienswout/t3code/commit/aa99a663a37643e93a1a03402b18a650d996d392?format=markdown)

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