diff --git a/hermes_cli/kanban.py b/hermes_cli/kanban.py index 8d52714c2..a6e76fe35 100644 --- a/hermes_cli/kanban.py +++ b/hermes_cli/kanban.py @@ -548,6 +548,11 @@ def build_parser(parent_subparsers: argparse._SubParsersAction) -> argparse.Argu 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.add_argument( + "--reason", + default=None, + help="Optional reason/note — recorded as a comment before unblocking. Quote multi-word reasons.", + ) p_unblock.add_argument("task_ids", nargs="+") p_promote = sub.add_parser( @@ -1978,14 +1983,20 @@ def _cmd_unblock(args: argparse.Namespace) -> int: if not ids: print("at least one task_id is required", file=sys.stderr) return 1 + reason = getattr(args, "reason", None) + if reason is not None: + reason = reason.strip() or None + author = _profile_author() if reason else None failed: list[str] = [] with kb.connect_closing() as conn: for tid in ids: + if reason: + kb.add_comment(conn, tid, author, f"UNBLOCK: {reason}") if not kb.unblock_task(conn, tid): failed.append(tid) print(f"cannot unblock {tid} (not blocked/scheduled?)", file=sys.stderr) else: - print(f"Unblocked {tid}") + print(f"Unblocked {tid}" + (f": {reason}" if reason else "")) return 0 if not failed else 1 diff --git a/scripts/release.py b/scripts/release.py index e28cccdad..4d4a1eb5d 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -59,6 +59,7 @@ AUTHOR_MAP = { "wangpuv@hotmail.com": "wangpuv", "202622897+ticketclosed-wontfix@users.noreply.github.com": "ticketclosed-wontfix", "wuxuebin1993@gmail.com": "victorGPT", + "211828103+julio-cloudvisor@users.noreply.github.com": "julio-cloudvisor", # teknium (multiple emails) "teknium1@gmail.com": "teknium1", "kenyon1977@gmail.com": "kenyonxu",