# fix\(server\): make project removal honor v2 threads · pingdotgg/t3code

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

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

Visibility: public

Requested revision: 987d3af28d7172c90ca305b1f088b81a57d44fe2

Requested commit: 987d3af28d7172c90ca305b1f088b81a57d44fe2

Commit: 987d3af28d7172c90ca305b1f088b81a57d44fe2

Tree: 67dbb57e5f36d1192bd38c47b07e58d03ff0c7dd

Author: Julius Marminge

Committer: Julius Marminge

## Message

```
fix(server): make project removal honor v2 threads

Offline CLI and HTTP project removal dropped force and left native v2 threads
behind. Move the nonempty-project guard and durable child cleanup into the
shared project service, and forward force from CLI, HTTP, and WebSocket calls.

Reuse the thread deletion planner and command lock, hydrate migrated history
before attachment cleanup, and validate child receipts. Commit the project
deletion after its children so failed cleanup can be retried safely.

Validation covers CLI deletion with active and archived threads, missing
workspaces, durable cleanup, partial retries, migrated attachments, receipt
collisions, and concurrent thread updates. Scoped server tests, typecheck, and
lint pass.

Implemented with Codex (GPT-6).

```

## Parents

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

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