processScheduledCommands() claims the slot (last_run = NOW(), next_run advanced) and then loops over worker_ids; a worker that is not connected is simply skipped with no execution record, no log line and no UI signal. The Scheduler tab then shows a fresh Last run timestamp, which reads as "it ran fine".
The same applies when the worker id stored in worker_ids no longer exists (worker deleted and re-registered under a new id).
Where
server.jsprocessScheduledCommands() – if (workerWs && readyState === OPEN) { … } with no else branch.
Suggested fix
Create a failed execution with a worker_offline log entry for each unreachable worker so it shows up in the Automated tab.
Track last_status / last_error on scheduled_commands and render it (✓ ran / ✗ worker offline) next to Last run.
Optionally notify via toast/webhook.
## Overview
`processScheduledCommands()` claims the slot (`last_run = NOW()`, `next_run` advanced) and then loops over `worker_ids`; a worker that is not connected is simply skipped with no execution record, no log line and no UI signal. The Scheduler tab then shows a fresh **Last run** timestamp, which reads as "it ran fine".
The same applies when the worker id stored in `worker_ids` no longer exists (worker deleted and re-registered under a new id).
## Where
- `server.js` `processScheduledCommands()` – `if (workerWs && readyState === OPEN) { … }` with no else branch.
## Suggested fix
- Create a `failed` execution with a `worker_offline` log entry for each unreachable worker so it shows up in the Automated tab.
- Track `last_status` / `last_error` on `scheduled_commands` and render it (✓ ran / ✗ worker offline) next to Last run.
- Optionally notify via toast/webhook.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Overview
processScheduledCommands()claims the slot (last_run = NOW(),next_runadvanced) and then loops overworker_ids; a worker that is not connected is simply skipped with no execution record, no log line and no UI signal. The Scheduler tab then shows a fresh Last run timestamp, which reads as "it ran fine".The same applies when the worker id stored in
worker_idsno longer exists (worker deleted and re-registered under a new id).Where
server.jsprocessScheduledCommands()–if (workerWs && readyState === OPEN) { … }with no else branch.Suggested fix
failedexecution with aworker_offlinelog entry for each unreachable worker so it shows up in the Automated tab.last_status/last_erroronscheduled_commandsand render it (✓ ran / ✗ worker offline) next to Last run.