Problem
When a review spins up in Crow (presumably the cloud ultrareview / auto-review flow kicking off), the Crow app freezes — the macOS spinning beachball ("blue spinning ball") appears and the UI is completely unresponsive. No clicks register, sessions can't be switched, terminals can't be sent to, until the spinner clears (or the app has to be force-quit).
Reproduction (best guess — to be confirmed)
- Open Crow.
- Trigger a review (e.g. ultrareview kicking off on a branch, or an auto-review starting against an open PR).
- Observe: Crow main window becomes unresponsive with the macOS spinning beachball. No interaction possible during the freeze.
Expected
Review spin-up should run off the main thread / out-of-process. The UI must stay responsive — at most a localized loading indicator on the affected session card, not a global app freeze.
Likely cause
A synchronous blocking call on the main actor / main thread during review kickoff — e.g. spawning a long-running shell command, hitting the network, or doing heavy JSON work inline in an event handler instead of dispatching to a background task and awaiting.
What to investigate
- Whichever code path handles review spin-up (ultrareview, auto-review, the review watcher): look for synchronous
Process / URLSession / file I/O calls running on the main actor.
- Check the watcher tick that fires on
autoReviewWatcherEnabled / autoCreateWatcherEnabled config — does it block while doing repo scans or git calls?
- Check the JSON store / persistence write path — large
mutate() calls on the main thread under NSLock could stall the UI if the disk write is slow.
Acceptance
- Spinning up a review never produces a macOS beachball / global app freeze.
- The user can keep switching sessions, opening terminals, and clicking around while a review is initializing.
- If something legitimately needs to block, it's scoped to the affected card with a visible spinner — not the whole app.
🐦⬛ Created with Crow via Claude Code
Problem
When a review spins up in Crow (presumably the cloud
ultrareview/ auto-review flow kicking off), the Crow app freezes — the macOS spinning beachball ("blue spinning ball") appears and the UI is completely unresponsive. No clicks register, sessions can't be switched, terminals can't be sent to, until the spinner clears (or the app has to be force-quit).Reproduction (best guess — to be confirmed)
Expected
Review spin-up should run off the main thread / out-of-process. The UI must stay responsive — at most a localized loading indicator on the affected session card, not a global app freeze.
Likely cause
A synchronous blocking call on the main actor / main thread during review kickoff — e.g. spawning a long-running shell command, hitting the network, or doing heavy JSON work inline in an event handler instead of dispatching to a background task and awaiting.
What to investigate
Process/URLSession/ file I/O calls running on the main actor.autoReviewWatcherEnabled/autoCreateWatcherEnabledconfig — does it block while doing repo scans or git calls?mutate()calls on the main thread under NSLock could stall the UI if the disk write is slow.Acceptance
🐦⬛ Created with Crow via Claude Code