hermes-agent/cron
rjvandeve c7a5de7d6e fix(cron): make pause authoritative against half-paused records
pause_job already sets enabled=false atomically with state/paused_at, but
get_due_jobs only checked enabled — so a contradictory record
(enabled=true + paused_at/state=paused) still fired. That was the 07-30
outage failure mode: list looked frozen, fleet kept merging.

- is_job_runnable / effective_job_state: pause markers gate fire; display
  derives from the scheduler-honoured enabled flag so half-paused never
  renders as [paused]
- get_due_jobs self-heals enabled=false + logs error on contradiction
- claim_job_for_fire uses is_job_runnable (paused_at counts too)
- list/format paths use effective_job_state
- behavioural tests: pause blocks due fire; half-pause self-disables
2026-08-08 13:48:00 +05:30
..
scripts
__init__.py
blueprint_catalog.py
executions.py
jobs.py fix(cron): make pause authoritative against half-paused records 2026-08-08 13:48:00 +05:30
lifecycle_guard.py fix(cron): lifecycle guard — never crash on binary referenced paths, stop matching lifecycle words inside SQL/text 2026-08-06 07:49:35 -07:00
monitor.py feat(cron): monitor-mode jobs — hash-suppressed change detection 2026-08-07 08:57:44 -07:00
notepad.py feat(cron): per-job durable notepad — KV scratchpad surviving scheduled runs 2026-08-07 08:57:48 -07:00
scheduler.py fix: follow-up for salvaged PR #18255 2026-08-08 00:07:14 +05:30
scheduler_provider.py fix(cron): surface initial scheduler registration failures 2026-08-07 17:45:06 +05:30
suggestion_catalog.py
suggestions.py fix(cron): surface initial scheduler registration failures 2026-08-07 17:45:06 +05:30