Needed to leave a full backlog drain running unattended:
- Run lock (flock): enabling the timer fired an immediate catch-up run
(Persistent=true) while a manual run was about to start; without a
lock the two would race on state.json and usage.jsonl.
- OBSIDIAN_API_URL accepts a comma-separated list, first reachable wins,
so the permanent address and an interim port-forward share one config.
- Fix: inline "# comments" in config.env were parsed into values, so
BUDGET_USD_PER_RUN=0.50 # ... crashed float(). The shipped
config.env.example had exactly that shape on several lines -- anyone
copying it would have hit the crash. A '#' inside a value (URL fragment)
still survives. Tested against both the example and a real config.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KF322NzozeaFjpgWvh4F4g