From f29c28d6d0b221b1273406fcbfeb907a20aad0fb Mon Sep 17 00:00:00 2001 From: Gille <4317663+helix4u@users.noreply.github.com> Date: Fri, 17 Jul 2026 14:15:36 -0600 Subject: [PATCH] docs(kanban): clarify unblock status routing --- hermes_cli/kanban.py | 5 ++++- tools/kanban_tools.py | 7 ++++--- website/docs/reference/tools-reference.md | 2 +- website/docs/user-guide/features/kanban.md | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/hermes_cli/kanban.py b/hermes_cli/kanban.py index 6f0766a738d1..4de2f8fb8b66 100644 --- a/hermes_cli/kanban.py +++ b/hermes_cli/kanban.py @@ -594,7 +594,10 @@ def build_parser(parent_subparsers: argparse._SubParsersAction) -> argparse.Argu p_schedule.add_argument("--ids", nargs="+", default=None, help="Additional task ids to schedule with the same reason (bulk mode)") - p_unblock = sub.add_parser("unblock", help="Return one or more blocked/scheduled tasks to ready") + p_unblock = sub.add_parser( + "unblock", + help="Return blocked/scheduled tasks to ready, or todo while parents remain open", + ) p_unblock.add_argument( "--reason", default=None, diff --git a/tools/kanban_tools.py b/tools/kanban_tools.py index 183145e3b2e4..8d27522f1829 100644 --- a/tools/kanban_tools.py +++ b/tools/kanban_tools.py @@ -1276,7 +1276,7 @@ def _maybe_auto_subscribe(conn: Any, task_id: str) -> bool: def _handle_unblock(args: dict, **kw) -> str: - """Transition a blocked task back to its actual post-unblock status.""" + """Transition a blocked task to ready, or todo while parents remain open.""" guard = _require_orchestrator_tool("kanban_unblock") if guard: return guard @@ -1875,7 +1875,8 @@ KANBAN_CREATE_SCHEMA = { KANBAN_UNBLOCK_SCHEMA = { "name": "kanban_unblock", "description": ( - "Move a blocked Kanban task back to ready. Orchestrator-only — only " + "Unblock a Kanban task. It moves to ready when all parents are done, " + "or todo while any parent remains open. Orchestrator-only — only " "profiles with the kanban toolset can unblock routed work; " "dispatcher-spawned task workers never see this tool." ), @@ -1884,7 +1885,7 @@ KANBAN_UNBLOCK_SCHEMA = { "properties": { "task_id": { "type": "string", - "description": "Blocked task id to return to ready.", + "description": "Blocked task id to move to ready or parent-gated todo.", }, "board": _board_schema_prop(), }, diff --git a/website/docs/reference/tools-reference.md b/website/docs/reference/tools-reference.md index 75866e97a2d4..a8cf61fcf39c 100644 --- a/website/docs/reference/tools-reference.md +++ b/website/docs/reference/tools-reference.md @@ -130,7 +130,7 @@ Registered when the agent is either (a) spawned by the kanban dispatcher (`HERME | `kanban_comment` | Add a comment to the task thread without changing its state — useful for surfacing intermediate findings. | `HERMES_KANBAN_TASK` or `kanban` toolset | | `kanban_create` | Fan out child tasks from the current task. Used by orchestrators and follow-up-spawning workers. | `HERMES_KANBAN_TASK` or `kanban` toolset | | `kanban_link` | Link tasks with a parent → child dependency edge. | `HERMES_KANBAN_TASK` or `kanban` toolset | -| `kanban_unblock` | Return a blocked task to `ready`. Orchestrator-only; hidden from dispatcher-spawned task workers. | profile with `kanban` toolset | +| `kanban_unblock` | Move a blocked task to `ready` when all parents are done, or `todo` while any parent remains open. Orchestrator-only; hidden from dispatcher-spawned task workers. | profile with `kanban` toolset | ## `project` toolset diff --git a/website/docs/user-guide/features/kanban.md b/website/docs/user-guide/features/kanban.md index b47ba730715c..ae5bbde1fb8a 100644 --- a/website/docs/user-guide/features/kanban.md +++ b/website/docs/user-guide/features/kanban.md @@ -279,7 +279,7 @@ hermes kanban block t_abc "need input" --ids t_def t_hij | `kanban_comment` | Append a durable note to the task thread. | `task_id`, `body` | | `kanban_create` | (Orchestrators) fan out into child tasks with an `assignee`, optional `parents`, `skills`, etc. | `title`, `assignee` | | `kanban_link` | (Orchestrators) add a `parent_id → child_id` dependency edge after the fact. | `parent_id`, `child_id` | -| `kanban_unblock` | (Orchestrators) move a blocked task back to `ready`. | `task_id` | +| `kanban_unblock` | (Orchestrators) move a blocked task to `ready` when all parents are done, or `todo` while any parent remains open. | `task_id` | A typical worker turn looks like: