Monorepo for Aesthetic.Computer aesthetic.computer

menuband: surface cues skip a stalled engine instead of freezing the app master

AVAudioPlayerNode.play() parks its caller in awaitIOCycle until the engine renders a cycle, and engine.isRunning can read true while no cycles are happening. The idle-page rub called play() from the main thread on such an engine and the whole app wedged for minutes with the key-capture panel armed and the pitch-bend cursor locked — the recurring "focus lock". Gate both surface cues on the output node's lastRenderTime being fresh (≤250 ms) so a stalled engine drops the cue rather than the main thread. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>


+35 -2
1 changed file