v1.3.0
What's new
Telegram
- Notifications can now be tagged with a machine name. Set the new
telegram.machine_nameconfig key and every message from that host is prefixed with a#machine_namehashtag, so a shared chat receiving batches from several machines stays sortable and filterable. - Notifications are now sent on a background thread, off the log-reader loop, so a slow or unreachable Telegram API can no longer stall reading the simulator's output.
- A failed post no longer kills the sender thread; delivery keeps working for the rest of the run.
- Backtick and backslash are escaped inside code blocks and the monospace ordering is fixed, so case names with special characters render correctly.
- Failed cases now show
-for their cost in the batch report instead of a misleading number.
Fixes
- A case that is force-stopped exactly as the dispatcher sweeps the queue now has its process reliably killed instead of being left running.
- Cases are dispatched by identity and claimed on the UI thread, so reordering or removing a case mid-batch can no longer skip or double-run one.
- The per-case log buffer is bounded, capping memory on long-running batches.
- Subprocess output is decoded as UTF-8 (with replacement) rather than the OS default, and TUI log lines render as plain text, so odd bytes or markup in the simulator's output can't corrupt the display.
- Missing 7-Zip in
zip_case_outputis handled gracefully instead of crashing. - The CLI is hardened against a bad exe path or a failed spawn, and skips spawning on a pre-spawn stop.
cleanup_exenow refuses to delete anything but the.batchcopies it made, guarding against removing the wrong file.
Config
- New key
telegram.machine_name(default""— no prefix). Seeconfig.example.json. upload.eta_step_percentis now documented in the config reference.
Copy config.example.json to config.json next to the exe and edit it before first run (config.json is never bundled into the exe).