load_jobs() uses strict json.load() which rejects bare control characters (e.g. literal newlines) in JSON string values. When a cron job prompt contains such characters, the parser throws JSONDecodeError and the function silently returns an empty list — causing ALL scheduled jobs to stop firing with no error logged. Fix: on JSONDecodeError, retry with json.loads(strict=False). If jobs are recovered, auto-rewrite the file with proper escaping via save_jobs() and log a warning. Only fall back to empty list if the JSON is truly unrecoverable. Co-authored-by: Sebastian Bochna <sbochna@SB-MBP-M2-2.local>
25 KiB
25 KiB