- eco.utilities.mainthread: a watchdog interrupts the main thread (SIGUSR2)
while a cell blocks, so Qt windows (camera viewers, plots, the desktop
workbench) stay live during umv/scans/sleep; call_soon/on_main for GUI
work from other threads. Camera viewers default to in-process again.
- eco.utilities.task_queue: named queues (queues[name], %queue magic,
scans.*(queue=...)) replacing scan_queue.py; every append is test-run
(names, signatures, scan build, limits); claims block moves of a running
task's adjustables from elsewhere (forced() overrides); output capture,
recording and an output window (queue_output_qt).
- eco.utilities.user_input: input() from a worker asks on the main thread;
input_timeout(escalate=False) takes the default at once inside a queue.
- scan: start_time %M -> %m bug fixed; GUI calls in scan callbacks routed
to the main thread.