mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-21 05:11:26 +00:00
fix(kanban): call recompute_ready after unlink_tasks removes a dependency
Problem: unlink_tasks() removes a parent→child dependency edge but does not trigger recompute_ready(). A child whose last blocking parent is unlinked stays stuck in 'todo' indefinitely — it only promotes to 'ready' on the next dispatcher tick or a manual 'hermes kanban recompute'. For CLI-only users without a dispatcher, the child is permanently stuck. Root cause: complete_task() and unblock_task() both call recompute_ready() after their write transaction so downstream children are evaluated immediately. unlink_tasks() was missing this call — removing a dependency is semantically equivalent to completing one, so the same recompute is needed. Fix: Capture the rowcount result before the write_txn exits, then call recompute_ready(conn) outside the transaction when a row was actually deleted (so the child sees the updated task_links state). Tests: Added test_unlink_tasks_triggers_recompute_ready in tests/hermes_cli/test_kanban_db.py: creates parent A (done) + parent C (running), child B with both parents (todo), unlinks C→B, asserts B is ready immediately. Stash-verified: FAILS without fix (child stays todo), PASSES with fix. 62/62 tests green in tests/hermes_cli/test_kanban_db.py. Closes #22459.
This commit is contained in:
parent
b9c001116e
commit
0c22434f03
2 changed files with 42 additions and 1 deletions
|
|
@ -1504,7 +1504,14 @@ def unlink_tasks(conn: sqlite3.Connection, parent_id: str, child_id: str) -> boo
|
|||
conn, child_id, "unlinked",
|
||||
{"parent": parent_id, "child": child_id},
|
||||
)
|
||||
return cur.rowcount > 0
|
||||
removed = cur.rowcount > 0
|
||||
if removed:
|
||||
# Dependency edge removed — re-evaluate promotion eligibility for the
|
||||
# child immediately. Matches the contract of complete_task and
|
||||
# unblock_task; without this the child stays stuck in todo until the
|
||||
# next dispatcher tick or a manual `hermes kanban recompute` (issue #22459).
|
||||
recompute_ready(conn)
|
||||
return removed
|
||||
|
||||
|
||||
def parent_ids(conn: sqlite3.Connection, task_id: str) -> list[str]:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue