Bug Description
After running hermes update (v2026.5.29, 118 commits), which migrated config version from 23 to 24, the file ~/.hermes/cron/jobs.json was found empty — all 17 scheduled cron jobs were lost silently.
Impact
- All cron jobs stopped working
- User only noticed hours later when expected reports didn't arrive
- No automatic alert or restoration mechanism
- The pre-update snapshot (
state-snapshots/YYYYMMDD-HHMMSS-pre-update/cron/jobs.json) retained the data, but no auto-restore occurred
Steps to Reproduce
- Have ~17 cron jobs configured
- Run
hermes update with config version migration (23 to 24)
- Observe that
cron/jobs.json is empty after the update
- Cron ticker restarts with 0 jobs
Root Cause Analysis
The file ~/.hermes/cron/jobs.json exists after the update but is empty or truncated. The config migration code path may be rewriting the file without preserving existing jobs.
Previous related fix: commit 2a6cbf5 — but this scenario may not raise because the file is valid JSON, just empty.
Expected Behavior
- Config migration should preserve existing cron jobs
- OR: update should warn before discarding jobs
- OR: auto-restore from pre-update snapshot
Environment
- Hermes Agent v0.15.1 (2026.5.29)
- Linux
- Python 3.11.2
- Cron storage: jobs.json
Workaround
Restore from ~/.hermes/state-snapshots/YYYYMMDD-HHMMSS-pre-update/cron/jobs.json.
Suggested Fix
- Migration handler preserving existing jobs
- Post-update integrity check comparing with snapshot
- Warning during update if jobs will be discarded
Bug Description
After running
hermes update(v2026.5.29, 118 commits), which migrated config version from 23 to 24, the file~/.hermes/cron/jobs.jsonwas found empty — all 17 scheduled cron jobs were lost silently.Impact
state-snapshots/YYYYMMDD-HHMMSS-pre-update/cron/jobs.json) retained the data, but no auto-restore occurredSteps to Reproduce
hermes updatewith config version migration (23 to 24)cron/jobs.jsonis empty after the updateRoot Cause Analysis
The file
~/.hermes/cron/jobs.jsonexists after the update but is empty or truncated. The config migration code path may be rewriting the file without preserving existing jobs.Previous related fix: commit 2a6cbf5 — but this scenario may not raise because the file is valid JSON, just empty.
Expected Behavior
Environment
Workaround
Restore from
~/.hermes/state-snapshots/YYYYMMDD-HHMMSS-pre-update/cron/jobs.json.Suggested Fix