Ctrl-C during butter generate is completely ignored; the process always runs to natural completion (confirmed 2x with 300- and 2000-token runs, SIGINT at ~2s). No signal handler exists anywhere in the codebase, and the default terminate disposition isn't taking effect — likely masked by the Swift Concurrency / GPU wait loop. Proper fix wants cooperative cancellation: a signal handler setting a flag the token loop (both CPU and GPU-chained paths) checks per iteration, with clean command-buffer completion and terminal state on exit. Found by the RST quick-tests sweep (session sheet: RST/sessions-2026-08-06/quicktests-session-sheet.md).
Ctrl-C during
butter generateis completely ignored; the process always runs to natural completion (confirmed 2x with 300- and 2000-token runs, SIGINT at ~2s). No signal handler exists anywhere in the codebase, and the default terminate disposition isn't taking effect — likely masked by the Swift Concurrency / GPU wait loop. Proper fix wants cooperative cancellation: a signal handler setting a flag the token loop (both CPU and GPU-chained paths) checks per iteration, with clean command-buffer completion and terminal state on exit. Found by the RST quick-tests sweep (session sheet: RST/sessions-2026-08-06/quicktests-session-sheet.md).