Skip to content

fix(kanban): report truthful gave-up causes - #64605

Open
stevenbaert wants to merge 1 commit into
NousResearch:mainfrom
All-About-AI-YouTube:fix/712-gave-up-notification-truth
Open

stevenbaert wants to merge 1 commit into
NousResearch:mainfrom
All-About-AI-YouTube:fix/712-gave-up-notification-truth

Conversation

@stevenbaert

Copy link
Copy Markdown

Summary

Kanban's notifier currently describes every gave_up event as caused by repeated spawn failures. That is incorrect for iteration exhaustion, timeouts, crashes, and other circuit-breaker causes.

This change:

  • renders the sanitized event error when one is present;
  • otherwise uses the cause-neutral fallback failure limit reached;
  • preserves board, task, and assignee attribution;
  • leaves completed, blocked, crashed, and timed-out notification branches unchanged.

Reproduction

An event with:

kind=gave_up
error=Iteration budget exhausted (80/80)

previously rendered as:

gave up after repeated spawn failures
Iteration budget exhausted (80/80)

The two lines contradicted each other and sent operators toward the wrong remediation path.

Verification

Independent QA was performed on exact commit 8cc4aff20318d8459904b759db34c4947614ef71:

  • focused notifier and watcher tests: 13 passed;
  • iteration-exhaustion producer test: 1 passed;
  • isolated notifier flow verified all five terminal branches;
  • py_compile: passed;
  • git diff --check: passed;
  • exact-head linkage recheck: approved.

Risk

Low and limited to human-facing gave_up notification formatting. Event production, retry limits, dispatch behavior, and runtime lifecycle are unchanged.

Tracker

Installation tracker and acceptance criteria: https://github.com/stevenbaert/hermes/issues/712

No runtime activation or gateway restart is included.

@alt-glitch alt-glitch added type/bug Something isn't working comp/cron Cron scheduler and job management P3 Low — cosmetic, nice to have labels Jul 14, 2026
@not1tony

Copy link
Copy Markdown

Repro for a misleading error message case that fits this issue's scope:

# Current board is cqgambit
hermes kanban boards switch cqgambit

# Card t_4dff09c7 is in 'ready' on the 'default' board
hermes kanban block t_4dff09c7 "test" --kind needs_input

Actual: cannot block t_4dff09c7 (unknown id or not in running/ready)

Truth: The id IS known (it exists on another board) and the card IS in ready. The real problem is the card is on a different board than the current one. The error message should name the current board and suggest the fix ("task not found on current board 'cqgambit' — switch to 'default' first").

The operator retried the same command 8 times because the error doesn't tell them what's actually wrong. The kanban_block tool in the agent API has no board parameter, so the only fix is hermes kanban boards switch <correct-board> first — but the error doesn't suggest this. Same pattern likely affects other kanban verbs that lack --board flags.

@teknium1

Copy link
Copy Markdown
Collaborator

Thanks for the focused fix. The premise holds on current main: gateway/kanban_watchers.py:373-380 labels every gave_up event as repeated spawn failures, while agent/turn_finalizer.py:115-125 records iteration exhaustion as a timed_out failure and hermes_cli/kanban_db.py:7026-7036 carries the supplied error into the eventual gave_up payload.

The formatter in commit 8cc4aff20318d8459904b759db34c4947614ef71 removes the unsupported cause claim, preserves board/assignee/task attribution, and covers both populated-error and absent-payload cases. The current base has not changed either touched file since the PR base, so this should salvage cleanly.

Automated hermes-sweeper review.

@GottZ

GottZ commented Aug 3, 2026

Copy link
Copy Markdown

This was generated by AI during triage.

Summary

Thirteen PRs address or reference four Kanban gateway issues, covering dispatcher exclusivity, false stuck telemetry, auto-decompose diagnostics and secret scope, concurrency parsing, activity and notifier reporting, archived-board races, and worker-log cleanup. The diffs address distinct causes, with material overlap in the singleton-lock, false-stuck, max_spawn-coercion, and auto-decompose secret-scope groups.

Related pull requests

Duplicates

#41679 and #44919 overlap on #41448, with merged #49068 as the machine-global consolidation; #46892 and #65581 overlap on #46800 but currently provide complementary max_spawn detection and board-local health accounting; #59588 overlaps #65644 on max_spawn coercion; the Kanban half of closed #76864 duplicates #57837.

Suggested consolidation

Keep #64605 open with its focused notifier-formatting salvage path, and keep #49861, #57837, #62893, and #65321 open on their documented reviewed paths. Author action: rebase or split #46892/#65581 into a focused #46800 change combining per-board externally occupied max_spawn detection with board-local gateway and daemon accounting while removing #65581's unrelated gateway-status scope; retain both recorded best-fix PRs until that reconciliation, require #65644's finally-based exceptional-Popen cleanup before closing #59588 as its narrower duplicate despite #59588's keep_open review, and leave #41679, #44919, and #76864 closed in favor of #49068, #57837, and #76871 respectively.

Cross-PR triage: Reviewed 13 pull requests and 4 issues in this complex. Each diff was read against this issue; Assessment working set: 142 kB of PR diffs, 45 kB of issue/PR text, 29 kB of discussion (31 comments), 11 verify verdicts. verdicts reflect diff content, not PR titles. Part of an automated triage batch.

This branch has not been deployed

No deployments
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-contained Sweeper blast radius: contained — one narrow path / opt-in / few users type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants