hermes - 💡(How to fix) Fix [Bug]: unblock_task bypasses parent-dependency gate

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

unblock_task bypasses the parent-dependency gate by jumping directly from blocked to ready, without checking whether all parents have completed. This is the only path that can land a task in ready without passing through recompute_ready's parent-status check.

Root Cause

unblock_task bypasses the parent-dependency gate by jumping directly from blocked to ready, without checking whether all parents have completed. This is the only path that can land a task in ready without passing through recompute_ready's parent-status check.

Fix Action

Fix / Workaround

  1. Create parent task A (assignee=worker)
  2. Create child task B with parents=[A]; B starts as todo
  3. Manually set B to ready, claim it, then block it (block_task)
  4. Unblock B (unblock_task) — B goes to ready immediately, even though parent A is still in todo
  5. The dispatcher can now claim B and run it before A is done
RAW_BUFFERClick to expand / collapse

Summary

unblock_task bypasses the parent-dependency gate by jumping directly from blocked to ready, without checking whether all parents have completed. This is the only path that can land a task in ready without passing through recompute_ready's parent-status check.

Steps to Reproduce

  1. Create parent task A (assignee=worker)
  2. Create child task B with parents=[A]; B starts as todo
  3. Manually set B to ready, claim it, then block it (block_task)
  4. Unblock B (unblock_task) — B goes to ready immediately, even though parent A is still in todo
  5. The dispatcher can now claim B and run it before A is done

Expected Behavior

unblock_task should route through recompute_ready so parent dependencies are re-evaluated after the block is lifted. If parents aren't all done, the task should stay in todo.

Actual Behavior

unblock_task sets status = 'ready' unconditionally — no dependency check.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING