v0.1.12 — Daemon crash protection
Fixed
- Daemon crash loops: Wrapped all daemon work (
_process_file,run_sweep,run_extraction) in try/except — one bad file or failed sweep now logs the error and continues instead of killing the worker process - Stderr preserved: Child process stderr now redirects to the tool's log file (not
/dev/null) so any residual tracebacks are captured for debugging
Root cause
The curator/janitor/distiller daemon loops had no exception handling around their main work functions. An uncaught exception (e.g. from a problematic inbox file) would propagate through asyncio.run() and terminate the process. The orchestrator would restart it, but the same file would trigger the same crash, creating a restart loop.