Skip to content

Crow UI locks up with macOS spinning beachball when a review spins up #404

@dgershman

Description

@dgershman

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)

  1. Open Crow.
  2. Trigger a review (e.g. ultrareview kicking off on a branch, or an auto-review starting against an open PR).
  3. 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

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions