Repository navigation
feat(tasks): watchdog re-invokes stalled scheduled tasks - #258
Merged
Merged
Conversation
…s left three */5 tasks silently stalled with no run rows and no error. A watchdog on the same tick now re-invokes tasks whose run history went quiet, so the gap heals with
Contributor
Author
🤖 MERGED
GitHub merged this pull request. No material findings were recorded. 4232a263-596f-432e-8e6e-3af40c352f7a |
…g target's cached runTask promise never settles, so the unbounded await stalled the watchdog itself on every tick. Race each re-invocation against the remaining watchdog b
This was referenced Sep 19, 2026
nuxt-wide-events rejects spreads in field objects, which failed the Nitro build. Emit failed.tasks unconditionally; it is an empty string when nothing failed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🔗 Linked issue
Closes #256
❓ Type of change
📚 Description
The daily check-in found that backfill-skill-assets, drain-skill-dirty, and sync-reviewed-skill-repos stopped producing scheduled_runs rows at 2026-09-18T20:20Z while ai-ready:cron on the same tick kept firing. Zero rows, no error anywhere: their queues just backed up, and nothing would have noticed until the nightly report went red.
Every dispatch failure mode ends the same way, so this adds a watchdog on the same five-minute tick. It reads each policy task's recent run history and re-invokes the stalled ones through the same task registry the cron dispatch uses, so a silent gap heals within one silence window. It re-invokes silence, not failure: a task whose last run failed keeps its normal cadence, and a task with a live run is left alone.
Two judgement calls a reviewer may want to overrule: