Skip to content

fix(kanban): keep initial blocked tasks sticky - #69679

Open
onfire7777 wants to merge 2 commits into
NousResearch:mainfrom
onfire7777:codex/kanban-initial-block-sticky
Open

fix(kanban): keep initial blocked tasks sticky#69679
onfire7777 wants to merge 2 commits into
NousResearch:mainfrom
onfire7777:codex/kanban-initial-block-sticky

Conversation

@onfire7777

Copy link
Copy Markdown

Summary

  • persist an explicit needs_input block when a task is created as blocked
  • preserve sticky behavior for legacy created-blocked rows
  • release sticky state on normal unblock or manual promotion while allowing later explicit blocks to re-stick

Verification

  • 266 targeted Kanban/state-machine tests passed
  • Ruff passed
  • manual promotion regression repro returns one ready task
  • independent review passed with no remaining findings

This fixes protected gates being incorrectly promoted by DAG recomputation without changing transient circuit-breaker recovery.

@alt-glitch alt-glitch added type/bug Something isn't working P3 Low — cosmetic, nice to have comp/cron Cron scheduler and job management sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state needs-decision Awaiting maintainer decision before any implementation labels Jul 22, 2026
@alt-glitch

Copy link
Copy Markdown
Collaborator

This was generated by AI during triage.

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.

@onfire7777

Copy link
Copy Markdown
Author

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 teknium1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 = 1 conflicts 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 later needs_input block would therefore enter triage, 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.

Comment thread hermes_cli/kanban_db.py
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,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@teknium1 teknium1 added the sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform label Jul 30, 2026
@GottZ

GottZ commented Aug 3, 2026

Copy link
Copy Markdown

This was generated by AI during triage.

Summary

Twenty-eight PRs address or reference this complex: most repair the missing create-time blocked lifecycle event that lets recompute_ready() promote an approval gate, while a smaller set broadens authorization, stale-state repair, archival, or unrelated body-update behavior. The focused event-emission approach preserves existing sticky-block and circuit-breaker semantics; broader alternatives introduce distinct review concerns that require splitting or revision.

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 blocked event; #39832, #48253, and #64830 instead infer stickiness from created, while #35832, #66993, #70733, #71147, #74839, and #69679 add separable behavior around the same core repair.

Suggested consolidation

Author action: rebase #69679 onto current main, initialize creation-time block_recurrences to 0, and add the contributor-requested release-then-first-same-kind-reblock regression; do not advance its current diff over that blocking review. Keep #34735 open with the mechanical salvage path recorded by its best-fix verdict, keep #69531 open for its broader recorded best-fix after current-main reconciliation, and close the pure open duplicates #39085, #41497, #46565, #64830, #71861, and #71977 as duplicates of #34735 despite their keep_open reviews because their visible root-cause diffs add no stronger production correction; split salvageable extras from #34756, #35832, #66993, #70733, and #71147, and keep #76765 separate pending its audit/privacy test assertions.

Complex graph

flowchart 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"
Loading

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cron Cron scheduler and job management P3 Low — cosmetic, nice to have sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform sweeper:risk-session-state Sweeper risk: may lose/corrupt/mis-associate session or context state type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants