fix(kanban): keep initial blocked tasks sticky - #69679
Conversation
Related: #34735 emits a synthetic blocked event and #64830 treats legacy created-blocked payloads as sticky. This PR combines typed creation metadata, legacy handling, and manual-promotion release behavior, so it is a competing lifecycle contract rather than a duplicate. |
|
From 2026-07-24 attention report: remains labeled needs-decision + sweeper:risk-session-state. No autonomous action possible. Blocked pending maintainer decision. No changes pushed. |
teknium1
left a comment
There was a problem hiding this comment.
Thanks for extending the sticky-block lifecycle to creation-time human-ops cards. The current-main premise is real: create_task() creates an initially blocked row at hermes_cli/kanban_db.py:3084-3089, records only created at hermes_cli/kanban_db.py:3172-3190, and recompute_ready() subsequently considers blocked rows at hermes_cli/kanban_db.py:4023-4064.
Problems
- The added initial
block_recurrences = 1conflicts with the existing meaning of that counter.block_task()treats a retained matching kind as a same-cause re-block and escalates at 2 (hermes_cli/kanban_db.py:5571-5618). After an explicit release, the first laterneeds_inputblock would therefore entertriage, not re-stick as a normal blocked task.
Suggested changes
- Start creation-time blocked cards at recurrence 0 and add a regression covering release followed by the first same-kind worker block.
Automated hermes-sweeper review.
| int(goal_max_turns) if goal_max_turns is not None else None, | ||
| session_id, | ||
| "needs_input" if task_status == "blocked" else None, | ||
| 1 if task_status == "blocked" else 0, |
There was a problem hiding this comment.
Starting this at 1 makes the first later needs_input block after unblock_task() or manual promotion reach the existing recurrence limit of 2 and route to triage, rather than becoming sticky. Initialize it to 0 and cover that release-then-reblock path.
SummaryTwenty-eight PRs address or reference this complex: most repair the missing create-time Related pull requests
Duplicates#39085, #41497, #46274, #46565, #48437, #61890, #71861, #71977, #72030, and the final narrow form of #76718 implement essentially #34735’s create-time Suggested consolidationAuthor action: rebase #69679 onto current main, initialize creation-time Complex graphflowchart LR
classDef open fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a
classDef merged fill:#dcfce7,stroke:#15803d,color:#14532d
classDef closed fill:#e5e7eb,stroke:#6b7280,color:#1f2937
classDef unverified fill:#f3f4f6,stroke:#9ca3af,color:#374151
classDef best stroke-width:3px,stroke:#b45309
classDef target stroke-width:3px,stroke:#4338ca
I39609(["issue #39609 (open)"])
I47777(["issue #47777 (open)"])
P69679["PR #69679 (open)"]
P69679 -.->|partial| I39609
P69679 -.->|partial| I47777
class I39609 open
class I47777 open
class P69679 open
class P69679 target
click I39609 "https://github.com/NousResearch/hermes-agent/issues/39609"
click I47777 "https://github.com/NousResearch/hermes-agent/issues/47777"
click P69679 "https://github.com/NousResearch/hermes-agent/pull/69679"
Graph: solid arrow = fixes / best fix, dashed arrow = partial or unverified (see edge label); boxed group = PRs duplicating each other; amber border = best fix; indigo border = target; gray node = closed (state tag in the node label). Cross-PR triage: Reviewed 28 pull requests and 2 issues in this complex. Each diff was read against this issue; Assessment working set: 505 kB of PR diffs, 53 kB of issue/PR text, 35 kB of discussion (55 comments), 74 verify verdicts. verdicts reflect diff content, not PR titles. Part of an automated triage batch. |
Summary
needs_inputblock when a task is created as blockedVerification
This fixes protected gates being incorrectly promoted by DAG recomputation without changing transient circuit-breaker recovery.