# refactor: extract shared normalizeProjectScripts into @t3tools/contracts · screen/t3code-personal

[View on GitCafe](https://git.cafe/screen/t3code-personal/commit/b236dccca3048ec6db0fcb53f9de4bcabaafaae2)

Repository: [screen/t3code-personal](https://git.cafe/screen/t3code-personal)

Visibility: public

Requested revision: b236dccca3048ec6db0fcb53f9de4bcabaafaae2

Requested commit: b236dccca3048ec6db0fcb53f9de4bcabaafaae2

Commit: b236dccca3048ec6db0fcb53f9de4bcabaafaae2

Tree: e7b2477befef5fa53c24e9cd7d01498c414420ae

Author: Cursor Agent

Committer: Julius Marminge

## Message

```
refactor: extract shared normalizeProjectScripts into @t3tools/contracts

Move the duplicated script normalization logic (dedup-by-id + single
runOnWorktreeCreate enforcement) from apps/web/src/store.ts and
apps/server/src/projectRegistry.ts into packages/contracts/src/project.ts
so both consumers share one canonical implementation.

Applied via @cursor push command
```

## Parents

- [ac05ddc0f93f5638743dc690b28dbe0c1a391ec8](https://git.cafe/screen/t3code-personal/commit/ac05ddc0f93f5638743dc690b28dbe0c1a391ec8?format=markdown)

[Source at this commit](https://git.cafe/screen/t3code-personal/tree/b236dccca3048ec6db0fcb53f9de4bcabaafaae2?format=markdown)
