# Commit history · gitcafe/t3code

[View on GitCafe](https://git.cafe/gitcafe/t3code/commits/40acfbd2df59bdb0df50edbaf1c7c4d8ae6d9907)

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

Visibility: public

Requested revision: 40acfbd2df59bdb0df50edbaf1c7c4d8ae6d9907

Requested commit: 40acfbd2df59bdb0df50edbaf1c7c4d8ae6d9907

- [chore\(release\): prepare v0.0.0-alpha.6](https://git.cafe/gitcafe/t3code/commit/40acfbd2df59bdb0df50edbaf1c7c4d8ae6d9907?format=markdown) — 40acfbd2df59bdb0df50edbaf1c7c4d8ae6d9907; github-actions\[bot\]

- [verbose](https://git.cafe/gitcafe/t3code/commit/0af61bf6ba1c059181e37aeef1a250ee7a84730d?format=markdown) — 0af61bf6ba1c059181e37aeef1a250ee7a84730d; Julius Marminge

- [chore\(release\): prepare v0.0.0-alpha.5](https://git.cafe/gitcafe/t3code/commit/7b2968f2ffdf8f12ebab30b282793dfc2ba57e6e?format=markdown) — 7b2968f2ffdf8f12ebab30b282793dfc2ba57e6e; github-actions\[bot\]

- [fix build script](https://git.cafe/gitcafe/t3code/commit/a1c7b98f98b69242b50e9df2916d1d8161e9af48?format=markdown) — a1c7b98f98b69242b50e9df2916d1d8161e9af48; Julius Marminge

- [Restore Open PR CTA for commit_push with existing PR](https://git.cafe/gitcafe/t3code/commit/99ea16a9696e95065c8b556f78468a07712d97d3?format=markdown) — 99ea16a9696e95065c8b556f78468a07712d97d3; Julius Marminge

- [Revert git action button logic toward main behavior](https://git.cafe/gitcafe/t3code/commit/ebe44d03a5fa6c34fdae2a67d53ef2ed6ba32737?format=markdown) — ebe44d03a5fa6c34fdae2a67d53ef2ed6ba32737; Julius Marminge

- [Keep non-default quick action on full PR flow](https://git.cafe/gitcafe/t3code/commit/dcd2d50768363e61fdf556e81abada8aa54996de?format=markdown) — dcd2d50768363e61fdf556e81abada8aa54996de; Julius Marminge

- [Fix PR CTAs and quick action after push](https://git.cafe/gitcafe/t3code/commit/f11764c517732b1c02057f28ff1a10f03f8157da?format=markdown) — f11764c517732b1c02057f28ff1a10f03f8157da; Julius Marminge

- [Restore Open PR toast action after PR creation](https://git.cafe/gitcafe/t3code/commit/77c81b7468003e7b7d56fd4dd123c499fdf3e073?format=markdown) — 77c81b7468003e7b7d56fd4dd123c499fdf3e073; Julius Marminge

- [Fix toast follow-up actions to avoid re-branching](https://git.cafe/gitcafe/t3code/commit/7a5ccd33102a262cf120b294d18330b441800b63?format=markdown) — 7a5ccd33102a262cf120b294d18330b441800b63; Julius Marminge

- [Scope default-branch PR confirmation to full stack](https://git.cafe/gitcafe/t3code/commit/e4df6fcf8e90127764005858878dad7a55ebc8c4?format=markdown) — e4df6fcf8e90127764005858878dad7a55ebc8c4; Julius Marminge

- [Address PR feedback on git workflows](https://git.cafe/gitcafe/t3code/commit/b2be7f4e4f0aed3c4b03e3986dd3507c501a4abb?format=markdown) — b2be7f4e4f0aed3c4b03e3986dd3507c501a4abb; Julius Marminge

- [Skip commit progress stages when create-PR runs push-only](https://git.cafe/gitcafe/t3code/commit/94beb21a4358cda0590c448ba684f663ad476ec1?format=markdown) — 94beb21a4358cda0590c448ba684f663ad476ec1; Julius Marminge

- [Limit default-branch confirmation to direct push](https://git.cafe/gitcafe/t3code/commit/30e05538b797ea4d1df34d21332ea471142874b7?format=markdown) — 30e05538b797ea4d1df34d21332ea471142874b7; Julius Marminge

- [Scope branch checkout effect during auto branch creation](https://git.cafe/gitcafe/t3code/commit/c884947ea8ce16d6cc01aeff2479d5285ac1f397?format=markdown) — c884947ea8ce16d6cc01aeff2479d5285ac1f397; Julius Marminge

- [Fix duplicated branch logic and feature-branch dialog on push-only](https://git.cafe/gitcafe/t3code/commit/61289a152d7c655a3239ff9c9cfef4ee3bd9f6c0?format=markdown) — 61289a152d7c655a3239ff9c9cfef4ee3bd9f6c0; Julius Marminge

- [Merge feature-branch checkout into atomic runStackedAction](https://git.cafe/gitcafe/t3code/commit/906550f9af7d6fc37e1c9e4f21018dcb9ea03591?format=markdown) — 906550f9af7d6fc37e1c9e4f21018dcb9ea03591; Julius Marminge

- [Document contracts and shared package responsibilities](https://git.cafe/gitcafe/t3code/commit/c2aaa89b57ae07095bc337cb5d0a7837eee31f99?format=markdown) — c2aaa89b57ae07095bc337cb5d0a7837eee31f99; Julius Marminge

- [Move branch sanitization from contracts to new shared package](https://git.cafe/gitcafe/t3code/commit/dde48e94141370c38166e20dde0cec3c347164d5?format=markdown) — dde48e94141370c38166e20dde0cec3c347164d5; Julius Marminge

- [Extract branch sanitization to shared contracts module](https://git.cafe/gitcafe/t3code/commit/b1608f41adff7ac9670c5a762624e13984d820c8?format=markdown) — b1608f41adff7ac9670c5a762624e13984d820c8; Julius Marminge

- [non-dupicate](https://git.cafe/gitcafe/t3code/commit/78d89e3d353a9ce7770b34f3546e39f415cddc37?format=markdown) — 78d89e3d353a9ce7770b34f3546e39f415cddc37; Julius Marminge

- [optional](https://git.cafe/gitcafe/t3code/commit/13094952186d16aaffea7609e78629bc5f9a57f2?format=markdown) — 13094952186d16aaffea7609e78629bc5f9a57f2; Julius Marminge

- [Add AI-generated semantic branch naming for git commits](https://git.cafe/gitcafe/t3code/commit/c34a4c69e5d58f48f68c53ebed22183905a9db15?format=markdown) — c34a4c69e5d58f48f68c53ebed22183905a9db15; Julius Marminge

- [no forwardref needed](https://git.cafe/gitcafe/t3code/commit/2f6cac0cf0c7424236e3aaf04c2485e72fe1fe5c?format=markdown) — 2f6cac0cf0c7424236e3aaf04c2485e72fe1fe5c; Julius Marminge

- [Virtualize branch picker list and forward ComboboxList ref](https://git.cafe/gitcafe/t3code/commit/5c26df3a4fe5ff0141e771ed7a26a5abd23185b5?format=markdown) — 5c26df3a4fe5ff0141e771ed7a26a5abd23185b5; Julius Marminge

- [Fix Windows command detection and branch checkout error flow](https://git.cafe/gitcafe/t3code/commit/302323a64b0e4342af013784f4422020b7c1fa53?format=markdown) — 302323a64b0e4342af013784f4422020b7c1fa53; Julius Marminge

- [Sync thread metadata after worktree branch rename](https://git.cafe/gitcafe/t3code/commit/b981fad920f43fe64dac4b547aba6ca4fb2f4715?format=markdown) — b981fad920f43fe64dac4b547aba6ca4fb2f4715; Julius Marminge

- [Gate embedded commit hash lookup to packaged desktop builds](https://git.cafe/gitcafe/t3code/commit/8a2f2a5c2b057f62473172dae3e2467afb8db394?format=markdown) — 8a2f2a5c2b057f62473172dae3e2467afb8db394; Julius Marminge

- [Refactor commit hash resolution in About panel](https://git.cafe/gitcafe/t3code/commit/e319735ed1aedb5f117cd320511581e240f257d1?format=markdown) — e319735ed1aedb5f117cd320511581e240f257d1; Julius Marminge

- [Show desktop commit hash in About panel](https://git.cafe/gitcafe/t3code/commit/e7790490f16592d9b0a5418201921a58b1fb5fe7?format=markdown) — e7790490f16592d9b0a5418201921a58b1fb5fe7; Julius Marminge

- [Refactor branch toolbar actions to use transition-based git ops](https://git.cafe/gitcafe/t3code/commit/a638978b75d42e78daad25170098efdec7d76dd4?format=markdown) — a638978b75d42e78daad25170098efdec7d76dd4; Julius Marminge

- [Add Zed editor support across open-in flow](https://git.cafe/gitcafe/t3code/commit/4a08686e749cca58dbab30307ab8445a3d5bef33?format=markdown) — 4a08686e749cca58dbab30307ab8445a3d5bef33; Julius Marminge

- [Expose available editors and gate Open In options](https://git.cafe/gitcafe/t3code/commit/b3de2bd926bf9e5f381d02cdcc32b85c39f7c4ed?format=markdown) — b3de2bd926bf9e5f381d02cdcc32b85c39f7c4ed; Julius Marminge

- [Show optimistic active branch during checkout and branch creation](https://git.cafe/gitcafe/t3code/commit/b81ec02984c92c9506c7859ab5c967f3b8afae1d?format=markdown) — b81ec02984c92c9506c7859ab5c967f3b8afae1d; Julius Marminge

- [Guard worktree branch rename and fix branch toolbar state](https://git.cafe/gitcafe/t3code/commit/de61c0c42b0797735a5cbe7ec6d4b3358fcf4295?format=markdown) — de61c0c42b0797735a5cbe7ec6d4b3358fcf4295; Julius Marminge

- [Add VS Code open support and stabilize chat autoscroll](https://git.cafe/gitcafe/t3code/commit/ecb4a1efa43ae762b4314895505371033170faae?format=markdown) — ecb4a1efa43ae762b4314895505371033170faae; Julius Marminge

- [fmt](https://git.cafe/gitcafe/t3code/commit/1b0093a4830a4d95c4684c4b8d6d6b7f6cd6856a?format=markdown) — 1b0093a4830a4d95c4684c4b8d6d6b7f6cd6856a; Julius Marminge

- [Scope git checkout effects and bump Effect/Node dependencies](https://git.cafe/gitcafe/t3code/commit/06fc364ee1d091cf9ee63591004bbc04606cb1ec?format=markdown) — 06fc364ee1d091cf9ee63591004bbc04606cb1ec; Julius Marminge

- [Allow chat composer to shrink within constrained layouts](https://git.cafe/gitcafe/t3code/commit/094859bbc7fab802b53ea291f4b395d9d28f0426?format=markdown) — 094859bbc7fab802b53ea291f4b395d9d28f0426; Julius Marminge

- [Improve composer menu highlighting and suppress triggers near mentions](https://git.cafe/gitcafe/t3code/commit/5e78386cdc805ee64ccc745454ce476475597f6f?format=markdown) — 5e78386cdc805ee64ccc745454ce476475597f6f; Julius Marminge

- [Fix composer mention cursor handling and trigger detection](https://git.cafe/gitcafe/t3code/commit/c378afeff852c06d7a558c4842ae9033b3775627?format=markdown) — c378afeff852c06d7a558c4842ae9033b3775627; Julius Marminge

- [Add Lexical-based composer editor with file mention pills](https://git.cafe/gitcafe/t3code/commit/bf7002209e6663d6c208c6dd0546277582077aea?format=markdown) — bf7002209e6663d6c208c6dd0546277582077aea; Julius Marminge

- [Fix destructive menu icon showing app logo on non-macOS](https://git.cafe/gitcafe/t3code/commit/a3aa4bd189721a87271e9d7a1bed0cb605bc5eee?format=markdown) — a3aa4bd189721a87271e9d7a1bed0cb605bc5eee; Julius Marminge

- [Guard all commitRename cleanup paths against concurrent renames](https://git.cafe/gitcafe/t3code/commit/5a0006f7efabb03888573a2029f1d0a30b614422?format=markdown) — 5a0006f7efabb03888573a2029f1d0a30b614422; Julius Marminge

- [Import ContextMenuItem from contracts in desktop app](https://git.cafe/gitcafe/t3code/commit/9e2e73c070710bfcb132cfff3ca1eb7b03996dd7?format=markdown) — 9e2e73c070710bfcb132cfff3ca1eb7b03996dd7; Julius Marminge

- [Guard commitRename cleanup against concurrent renames](https://git.cafe/gitcafe/t3code/commit/c530e5d50f5a77cd732c0c3e09d9ef964faea96e?format=markdown) — c530e5d50f5a77cd732c0c3e09d9ef964faea96e; Julius Marminge

- [Use shared ContextMenuItem type from contracts](https://git.cafe/gitcafe/t3code/commit/674720c6cd233ca8c9a7b357eb954e26cae3466d?format=markdown) — 674720c6cd233ca8c9a7b357eb954e26cae3466d; Julius Marminge

- [Make ContextMenuItem interface module-private](https://git.cafe/gitcafe/t3code/commit/58c9e4b96d811c120c7434549656c19058751713?format=markdown) — 58c9e4b96d811c120c7434549656c19058751713; Julius Marminge

- [Stop keydown propagation on rename input](https://git.cafe/gitcafe/t3code/commit/feb286379c071dc70a948d0f0f14729b04d6777f?format=markdown) — feb286379c071dc70a948d0f0f14729b04d6777f; Julius Marminge

- [Remove unused prompt dialog infrastructure](https://git.cafe/gitcafe/t3code/commit/cefe64158697f05e863b7347bc2bf797a264c78b?format=markdown) — cefe64158697f05e863b7347bc2bf797a264c78b; Julius Marminge

- [Replace prompt dialog with inline rename in sidebar](https://git.cafe/gitcafe/t3code/commit/664451c2962dcc550e5bea54bb9c76536e3e6c94?format=markdown) — 664451c2962dcc550e5bea54bb9c76536e3e6c94; Julius Marminge

- [Restore lost useMemo calls in ChatView and fix threadActivities referential stability](https://git.cafe/gitcafe/t3code/commit/fd4ff8ca4648e11d945ccf2a8dea65f2037dcddc?format=markdown) — fd4ff8ca4648e11d945ccf2a8dea65f2037dcddc; Julius Marminge

- [rm](https://git.cafe/gitcafe/t3code/commit/1bcfbdf2873ce21fdaf1118bf302a4427fab2226?format=markdown) — 1bcfbdf2873ce21fdaf1118bf302a4427fab2226; Julius Marminge

- [Fix store selector consistency, memoize timelineMessages, and suppress false-positive lint warnings](https://git.cafe/gitcafe/t3code/commit/4e45c1a6abef59bc99ae1bea3c7a8be9d8775c66?format=markdown) — 4e45c1a6abef59bc99ae1bea3c7a8be9d8775c66; Julius Marminge

- [Fix terminal focus on toggle, clean up orphaned terminal state, and revoke optimistic message blob URLs on unmount](https://git.cafe/gitcafe/t3code/commit/32fe80d1647ea9fb466fe5fab67b74fea78f011b?format=markdown) — 32fe80d1647ea9fb466fe5fab67b74fea78f011b; Cursor Agent

- [Update apps/web/src/routes/\_\_root.tsx](https://git.cafe/gitcafe/t3code/commit/6e93d42023a61f638d7a83c50083a18040f136c1?format=markdown) — 6e93d42023a61f638d7a83c50083a18040f136c1; Julius Marminge

- [Improve store referential stability and fix reactive terminal state](https://git.cafe/gitcafe/t3code/commit/6f50867aa1ee94fc7582340ce728655e173db144?format=markdown) — 6f50867aa1ee94fc7582340ce728655e173db144; Julius Marminge

- [Reset ChatView per thread and simplify derived state handling](https://git.cafe/gitcafe/t3code/commit/4fca60469dfc5dab7d8d742e965f4ab260f20c3c?format=markdown) — 4fca60469dfc5dab7d8d742e965f4ab260f20c3c; Julius Marminge

- [fix\(web\): resolve post-rebase selector/store regressions](https://git.cafe/gitcafe/t3code/commit/afcd824ae9ca93672fda317562e0076ce8918c89?format=markdown) — afcd824ae9ca93672fda317562e0076ce8918c89; Julius Marminge

- [Refactor Zustand store usage to granular selectors](https://git.cafe/gitcafe/t3code/commit/f84f2797383fc6e586bb6e5d5b2eb18631152fb1?format=markdown) — f84f2797383fc6e586bb6e5d5b2eb18631152fb1; Julius Marminge

- [Refactor terminal state store to use granular thread selectors](https://git.cafe/gitcafe/t3code/commit/246624ad3cce74f0fc14e8b98eb23b2fc1db585c?format=markdown) — 246624ad3cce74f0fc14e8b98eb23b2fc1db585c; Julius Marminge

- [Remove useStore selector compatibility shim](https://git.cafe/gitcafe/t3code/commit/410444aead745b3a27e5c645643c74a3cb3479c3?format=markdown) — 410444aead745b3a27e5c645643c74a3cb3479c3; Julius Marminge

- [refactor\(web\): remove reducer pattern, use Zustand \+ pure functions](https://git.cafe/gitcafe/t3code/commit/7522d3bde34e7178fb1618ee6ca14ea7c1dc6d0d?format=markdown) — 7522d3bde34e7178fb1618ee6ca14ea7c1dc6d0d; Julius Marminge

- [Remove draftThreadTerminalState re-exports; use threadTerminalState directly](https://git.cafe/gitcafe/t3code/commit/ed26b84177b93790481cf34ffe0edd010760e542?format=markdown) — ed26b84177b93790481cf34ffe0edd010760e542; Julius Marminge

- [Unify draft and persisted thread terminal flow](https://git.cafe/gitcafe/t3code/commit/ad4d12cf94e8b1cbd679372ed2bcf453b531b90f?format=markdown) — ad4d12cf94e8b1cbd679372ed2bcf453b531b90f; Julius Marminge

- [Enable terminals for local draft threads](https://git.cafe/gitcafe/t3code/commit/f6fd760e4eb9e18dd7b89cf45f478835d20145f8?format=markdown) — f6fd760e4eb9e18dd7b89cf45f478835d20145f8; Julius Marminge

- [Refactor store actions to use direct Zustand state updaters](https://git.cafe/gitcafe/t3code/commit/506a5260dca5a5fd6324a33262be497a1d963145?format=markdown) — 506a5260dca5a5fd6324a33262be497a1d963145; Julius Marminge

- [Simplify Zustand selectors by removing memoized callbacks](https://git.cafe/gitcafe/t3code/commit/d4c90d696d2546466d364cfccc86bcf2be6a7c86?format=markdown) — d4c90d696d2546466d364cfccc86bcf2be6a7c86; Julius Marminge

- [Refactor web store usage to granular selectors](https://git.cafe/gitcafe/t3code/commit/be4d26a1b31d96754bdadc2ab7094dfdc9c7bad9?format=markdown) — be4d26a1b31d96754bdadc2ab7094dfdc9c7bad9; Julius Marminge

- [refactor: remove redundant workLogCount stick-to-bottom effect](https://git.cafe/gitcafe/t3code/commit/5c0961431909f83536790677f46b6a08dadb3434?format=markdown) — 5c0961431909f83536790677f46b6a08dadb3434; Julius Marminge

- [fix: align handoff preview URLs with image attachment index](https://git.cafe/gitcafe/t3code/commit/4c846332c5c972b715862df9f19b6c095c76841b?format=markdown) — 4c846332c5c972b715862df9f19b6c095c76841b; Julius Marminge

- [Stabilize chat scroll restoration across thread switches](https://git.cafe/gitcafe/t3code/commit/a3a0cbf0f89ecc34168161f66c4901c922acb8d6?format=markdown) — a3a0cbf0f89ecc34168161f66c4901c922acb8d6; Julius Marminge

- [Set default cursor on sidebar session rows](https://git.cafe/gitcafe/t3code/commit/2c7101092aca2ccd77b409e013f97020b23c2a8e?format=markdown) — 2c7101092aca2ccd77b409e013f97020b23c2a8e; Julius Marminge

- [Allow non-required dev ports to exceed max in offset search](https://git.cafe/gitcafe/t3code/commit/9f068356a40ac259f7a074c2bec67d0d6bfe703a?format=markdown) — 9f068356a40ac259f7a074c2bec67d0d6bfe703a; Julius Marminge

- [Auto-select next available dev ports per mode](https://git.cafe/gitcafe/t3code/commit/f239c90628cefc37f07ed93783a8404fe3f3f8b3?format=markdown) — f239c90628cefc37f07ed93783a8404fe3f3f8b3; Julius Marminge

- [Use forkScoped for background upstream refresh](https://git.cafe/gitcafe/t3code/commit/991dd05e72a3afd1dccbcc4522a7e4b98260cae3?format=markdown) — 991dd05e72a3afd1dccbcc4522a7e4b98260cae3; Julius Marminge

- [Serve fallback project favicon when no icon file is found](https://git.cafe/gitcafe/t3code/commit/96bf54e293b40c62a49162cae8586f9867a868e3?format=markdown) — 96bf54e293b40c62a49162cae8586f9867a868e3; Julius Marminge

- [Preserve $defs in Codex output schema and refine sidebar header](https://git.cafe/gitcafe/t3code/commit/5ca9b54d6627e23ab9d3d4d14888770e9264a933?format=markdown) — 5ca9b54d6627e23ab9d3d4d14888770e9264a933; Julius Marminge

- [Preserve draft env mode across thread and branch context updates](https://git.cafe/gitcafe/t3code/commit/4ab5fca4ca9d8fb12b1442ed46107e15c4275bf2?format=markdown) — 4ab5fca4ca9d8fb12b1442ed46107e15c4275bf2; Julius Marminge

- [Show branch toolbar for local draft threads](https://git.cafe/gitcafe/t3code/commit/69a4fa82155f05637f73b3d2f61a5cdf9366b4b9?format=markdown) — 69a4fa82155f05637f73b3d2f61a5cdf9366b4b9; Julius Marminge

- [Run setup script after promoting local draft threads](https://git.cafe/gitcafe/t3code/commit/9e04bad0a504dafbf19182fb0ec361c55018c780?format=markdown) — 9e04bad0a504dafbf19182fb0ec361c55018c780; Julius Marminge

- [Cover runtime undefined draft thread options in store test](https://git.cafe/gitcafe/t3code/commit/a574d9c936adcf0a8ccc9b10d8f65e0127d13adc?format=markdown) — a574d9c936adcf0a8ccc9b10d8f65e0127d13adc; Julius Marminge

- [Preserve draft branch/worktree when update options are undefined](https://git.cafe/gitcafe/t3code/commit/005e13089a4a8f44cb25452cb4b8d9b18184a1b7?format=markdown) — 005e13089a4a8f44cb25452cb4b8d9b18184a1b7; Julius Marminge

- [Clean up orphaned composer drafts and harden draft checks](https://git.cafe/gitcafe/t3code/commit/d9cce6402ae875b24d9ddbe73866eee94ec16ddb?format=markdown) — d9cce6402ae875b24d9ddbe73866eee94ec16ddb; Julius Marminge

- [Preserve explicit DEFAULT_MODEL draft overrides](https://git.cafe/gitcafe/t3code/commit/508872e04b87dc7cb53632988115b54b15f78e06?format=markdown) — 508872e04b87dc7cb53632988115b54b15f78e06; Julius Marminge

- [Address PR review feedback for draft model/error/persistence handling](https://git.cafe/gitcafe/t3code/commit/aced302b638608042c8a1d30b6fc91dc5661657a?format=markdown) — aced302b638608042c8a1d30b6fc91dc5661657a; Julius Marminge

- [Simplify composer draft persistence and remove debug instrumentation](https://git.cafe/gitcafe/t3code/commit/0b8dfee17beb957a8855f5c1382a110fc57de88a?format=markdown) — 0b8dfee17beb957a8855f5c1382a110fc57de88a; Julius Marminge

- [Refactor draft thread lookups and cache persisted draft state](https://git.cafe/gitcafe/t3code/commit/6ab246676ebaee8ef895ab4067fb6457854b0a1c?format=markdown) — 6ab246676ebaee8ef895ab4067fb6457854b0a1c; Julius Marminge

- [Defer thread creation until first message send](https://git.cafe/gitcafe/t3code/commit/122c94a24acf31d72097faad3e943e939e7fff91?format=markdown) — 122c94a24acf31d72097faad3e943e939e7fff91; Julius Marminge

- [Unify project draft thread state in composer draft store](https://git.cafe/gitcafe/t3code/commit/b59c6d6ab1b71295bf8c77e611522989e1e97fc8?format=markdown) — b59c6d6ab1b71295bf8c77e611522989e1e97fc8; Julius Marminge

- [Preserve draft metadata and dedupe composer image retries](https://git.cafe/gitcafe/t3code/commit/c9995995a42317676290ca1b953dfeabdedd8920?format=markdown) — c9995995a42317676290ca1b953dfeabdedd8920; Julius Marminge

- [Persist per-thread composer drafts and reuse project draft threads](https://git.cafe/gitcafe/t3code/commit/545a9193e2add9995bb03ccec39538e5315349b6?format=markdown) — 545a9193e2add9995bb03ccec39538e5315349b6; Julius Marminge

- [Run checks before release commit and set desktop buildVersion](https://git.cafe/gitcafe/t3code/commit/fa0205cba3f2a8dffccee2c0348cb334a7bb6b6f?format=markdown) — fa0205cba3f2a8dffccee2c0348cb334a7bb6b6f; Julius Marminge

- [chore\(release\): prepare v0.0.0-alpha.4](https://git.cafe/gitcafe/t3code/commit/8a20bd7f5469b50ca61e93275d0b0dba37086fc6?format=markdown) — 8a20bd7f5469b50ca61e93275d0b0dba37086fc6; github-actions\[bot\]

- [fix\(server\): remove duplicate branchExists declaration](https://git.cafe/gitcafe/t3code/commit/10660f376cd410dbbbfea239b45e79fbcde4ddbc?format=markdown) — 10660f376cd410dbbbfea239b45e79fbcde4ddbc; Julius Marminge

- [feat\(ci\): add release workflow_dispatch version tagging](https://git.cafe/gitcafe/t3code/commit/ae235f715589216ed9747d46d0b1894482353e12?format=markdown) — ae235f715589216ed9747d46d0b1894482353e12; Julius Marminge

- [Remove unused attachment route path helpers](https://git.cafe/gitcafe/t3code/commit/a356cd0d0f4e1908d8acf22438b9ba0d8be9ed81?format=markdown) — a356cd0d0f4e1908d8acf22438b9ba0d8be9ed81; Julius Marminge

- [Normalize attachment thread segments to lowercase](https://git.cafe/gitcafe/t3code/commit/58b932ffb8f20566c2c5ac58c252a911c7e80693?format=markdown) — 58b932ffb8f20566c2c5ac58c252a911c7e80693; Julius Marminge

- [Fix attachment cleanup to match exact thread segments](https://git.cafe/gitcafe/t3code/commit/d58af33fba73936659158ba2167a00475889d1e5?format=markdown) — d58af33fba73936659158ba2167a00475889d1e5; Julius Marminge

- [Reuse attachment thread segment sanitizer in projection pipeline](https://git.cafe/gitcafe/t3code/commit/a56418f8bc9866ab114c85b4e73a7f95987c3469?format=markdown) — a56418f8bc9866ab114c85b4e73a7f95987c3469; Julius Marminge

More commits follow; continue with `GET /api/repos/gitcafe/t3code/commits?after=IjU5NmUxNTkwZGZkNjAyZmZjZjFlZmQ3N2I1ZDlhMGVhYzQ2NWYzNzQi`.
