Summary
The hermes kanban unblock subcommand treats only the first word after the task id as the reason. Bare trailing words become extra positional args and argparse rejects the call. The sibling hermes kanban block <id> <reason...> accepts multi-word reasons fine, so the asymmetry is the bug.
Steps to reproduce
# Fails with argparse "unrecognized arguments":
hermes kanban unblock t_abc123 review-required: needs reviewer
# Fails identically without the colon:
hermes kanban unblock t_abc123 a b c
# Works (shell joins into one token), but shouldn't be required:
hermes kanban unblock t_abc123 "review-required: needs reviewer"
# Compare — block accepts it bare:
hermes kanban block t_abc123 review-required: needs reviewer # works
Expected behavior
unblock parses reason with nargs='*' (or '+') and joins with spaces, matching block. The CLI shapes for paired commands should be symmetric so users / agents don't have to remember which direction needs quoting.
Actual behavior
argparse error: unrecognized arguments: b c (or similar, depending on the reason tokens).
Suggested fix
In hermes_cli/kanban.py (around line 540, the unblock subparser), change the reason positional to nargs='*' and " ".join(reason) in the handler, mirroring whatever block does. Add a CLI regression test alongside the existing block tests.
Real-world impact
Caught by an agent attempting cross-board unblock after completing a review. The agent had to retry with shell-quoting which is fragile when the reason is dynamic. Surfaces as silent failures in agent-driven workflows.
Environment
Summary
The
hermes kanban unblocksubcommand treats only the first word after the task id as the reason. Bare trailing words become extra positional args and argparse rejects the call. The siblinghermes kanban block <id> <reason...>accepts multi-word reasons fine, so the asymmetry is the bug.Steps to reproduce
Expected behavior
unblockparsesreasonwithnargs='*'(or'+') and joins with spaces, matchingblock. The CLI shapes for paired commands should be symmetric so users / agents don't have to remember which direction needs quoting.Actual behavior
argparse error:
unrecognized arguments: b c(or similar, depending on the reason tokens).Suggested fix
In
hermes_cli/kanban.py(around line 540, theunblocksubparser), change thereasonpositional tonargs='*'and" ".join(reason)in the handler, mirroring whateverblockdoes. Add a CLI regression test alongside the existing block tests.Real-world impact
Caught by an agent attempting cross-board
unblockafter completing a review. The agent had to retry with shell-quoting which is fragile when the reason is dynamic. Surfaces as silent failures in agent-driven workflows.Environment