# feat\(orchestration-v2\): project linked pull requests on threads \(\#8160\) · pingdotgg/t3code

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

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

Visibility: public

Requested revision: 6f73c1b205ea576155ee57426f74c67ef1c914dd

Requested commit: 6f73c1b205ea576155ee57426f74c67ef1c914dd

Commit: 6f73c1b205ea576155ee57426f74c67ef1c914dd

Tree: ab834a6441d8b951fbb10a232ea5a558c36f015c

Author: Julius Marminge

Committer: Julius Marminge

## Message

```
feat(orchestration-v2): project linked pull requests on threads (#8160)

Main's thread↔PR linking never reached the v2 runtime: the client types
were optional stubs and the v2 server dropped the field, so linking a PR
on a v2 environment silently no-opped and #7454's settle-once logic could
never match the linked identity.

The link now flows end to end: thread.metadata.update carries an optional
linkedPullRequest (object to link, null to unlink), the orchestrator
folds it into thread state, and both shell builders project it — no
migration needed since v2 shells persist as payload JSON. The client
command sends the field and the shell mapper surfaces it, so the existing
web/mobile badge and settle plumbing light up on v2 threads.

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

```

## Parents

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

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