hermes - ✅(Solved) Fix kanban: dashboard Complete button bypasses summary modal; no CLI recovery for null result [2 pull requests, 1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
NousResearch/hermes-agent#20008Fetched 2026-05-06 06:39:16
View on GitHub
Comments
0
Participants
1
Timeline
6
Reactions
0
Participants
Timeline (top)
labeled ×3cross-referenced ×2closed ×1

Two related gaps in the kanban completion-summary path that together break any cron/agent pipeline keying on tasks.result:

  1. Dashboard "Complete" button silently bypasses the summary modal on Blocked-lane tickets — completes with summary: null, result_len: 0.
  2. No CLI path to backfill result after completionkanban complete refuses to re-run on done tickets, and there is no kanban edit --result / kanban resummarize subcommand. Recovery currently requires raw SQLite UPDATE.

Error Message

$ hermes kanban --board minerva complete t_85cb3f55 --summary "DECIDED ..." cannot complete t_85cb3f55 (unknown id or terminal state)

$ hermes kanban --board minerva edit t_85cb3f55 --result "..." hermes kanban: error: argument kanban_action: invalid choice: 'edit'

Root Cause

We're standing up a cron sweep that reads tasks.result for a DECIDED <date>: ... prefix to auto-reflect human decisions into a wiki. With bug 1, every dashboard-completed ticket arrives with result=NULL and the sweep has nothing to consume. With bug 2, there's no graceful recovery — ops staff have to run raw SQL.

Comments on the ticket ARE preserved through the completion path, but the cron wants structured summary, not free-form comment text.

Fix Action

Fix / Workaround

Workaround currently in use

PR fix notes

PR #20016: fix(kanban): preserve dashboard completion summaries

Description (problem / solution / changelog)

Fixes #20008

Summary

  • prompt for a completion summary before dashboard Done transitions from detail, drag/drop, or bulk actions
  • forward bulk dashboard result/summary/metadata into complete_task instead of dropping them
  • add hermes kanban edit <task_id> --result ... to backfill completed task results and update the latest completed run summary for audit/context recovery

Scope

This stays inside the Kanban dashboard/API/CLI result path. It does not change dispatcher claim semantics or task completion rules outside already-supported Done transitions.

Verification

  • scripts/run_tests.sh tests/plugins/test_kanban_dashboard_plugin.py::test_bulk_status_done_forwards_completion_summary tests/plugins/test_kanban_dashboard_plugin.py::test_dashboard_done_actions_prompt_for_completion_summary tests/hermes_cli/test_kanban_core_functionality.py::test_cli_edit_backfills_result_on_done_task tests/hermes_cli/test_kanban_core_functionality.py::test_cli_edit_rejects_non_done_task -> 4 passed
  • env -u WEIXIN_TOKEN -u WEIXIN_ACCOUNT_ID -u WEIXIN_HOME_CHANNEL -u WEIXIN_HOME_CHANNEL_NAME -u WEIXIN_HOME_CHANNEL_THREAD_ID scripts/run_tests.sh tests/plugins/test_kanban_dashboard_plugin.py tests/hermes_cli/test_kanban_core_functionality.py::test_cli_complete_with_summary_and_metadata tests/hermes_cli/test_kanban_core_functionality.py::test_cli_edit_backfills_result_on_done_task tests/hermes_cli/test_kanban_core_functionality.py::test_cli_edit_rejects_non_done_task tests/hermes_cli/test_kanban_core_functionality.py::test_cli_bulk_complete_with_summary_rejects tests/hermes_cli/test_kanban_core_functionality.py::test_cli_bulk_complete_without_summary_still_works tests/hermes_cli/test_kanban_core_functionality.py::test_completed_event_payload_carries_summary -> 61 passed
  • python -m py_compile hermes_cli/kanban.py hermes_cli/kanban_db.py plugins/kanban/dashboard/plugin_api.py
  • git diff --check

Changed files

  • hermes_cli/kanban.py (modified, +50/-0)
  • hermes_cli/kanban_db.py (modified, +67/-0)
  • plugins/kanban/dashboard/dist/index.js (modified, +25/-3)
  • plugins/kanban/dashboard/plugin_api.py (modified, +9/-1)
  • tests/hermes_cli/test_kanban_core_functionality.py (modified, +42/-0)
  • tests/plugins/test_kanban_dashboard_plugin.py (modified, +43/-0)

PR #20195: fix(kanban): preserve dashboard completion summaries + add kanban edit (salvages #20016)

Description (problem / solution / changelog)

Dashboard Done transitions now always capture a completion summary, and completed tasks can be edited via CLI to backfill result after the fact — so downstream consumers (cron sweeps, orchestrators) can rely on tasks.result being populated.

Salvaged from #20016 (@LeonSGP43).

Two separate gaps closed together:

1. Dashboard Done transitions silently dropped the summary. Clicking Complete, dragging to Done, or bulk-selecting + Mark Done all went through paths that PATCH'd {status: "done"} without any result field. The bulk API (/tasks/bulk) accepted status: "done" but its body model had no result/summary/metadata fields, so even if the frontend had sent them they'd be dropped. tasks.result ended up NULL.

2. No recovery path for NULL-result done tasks. kanban complete refuses to re-run on done state. No kanban edit. Operators had to run raw UPDATE tasks SET result=... SQL.

Changes

  • plugins/kanban/dashboard/dist/index.js: new withCompletionSummary(patch, count) helper prompts for a summary whenever a patch transitions to status: "done". Wired into single-task move (drag/drop + Complete button) and bulk actions. Empty summary is rejected; cancel aborts the transition.
  • plugins/kanban/dashboard/plugin_api.py: BulkTaskBody gains result, summary, metadata fields; bulk_update forwards them into complete_task() (which already accepted these kwargs — they were just being dropped).
  • hermes_cli/kanban_db.py: new edit_completed_task_result(conn, task_id, result, summary, metadata) — updates tasks.result, updates or synthesizes the latest completed run with the new summary/metadata, emits an edited event for audit trail. Refuses non-done tasks.
  • hermes_cli/kanban.py: new hermes kanban edit <task_id> --result ... [--summary ...] [--metadata <json>] subcommand.

Validation

BeforeAfter
Dashboard Complete buttontasks.result = NULL, completed event has result_len: 0, summary: nullprompt required; empty rejected; result + summary both stored
Dashboard drag-to-Donesame NULL outcomesame prompt path
Dashboard bulk "Mark Done"body had no result fields; dropped silentlyprompt once for N tasks, forwarded to each complete_task() call
Recovery on NULL-result done taskraw SQL only; kanban complete rejects done statehermes kanban edit <id> --result "DECIDED ..." emits edited event
Targeted tests255/255 pass across test_kanban_core_functionality + test_kanban_dashboard_plugin + test_kanban_db + test_kanban_cli

Note: the dashboard uses a plain window.prompt() — basic but functional. A proper modal could come as a follow-up; the important behavioral fix is that no Done transition can silently drop the summary.

Closes #20008

Co-authored-by: LeonSGP43 [email protected]

Changed files

  • hermes_cli/kanban.py (modified, +50/-0)
  • hermes_cli/kanban_db.py (modified, +67/-0)
  • plugins/kanban/dashboard/dist/index.js (modified, +25/-3)
  • plugins/kanban/dashboard/plugin_api.py (modified, +9/-1)
  • tests/hermes_cli/test_kanban_core_functionality.py (modified, +42/-0)
  • tests/plugins/test_kanban_dashboard_plugin.py (modified, +43/-0)

Code Example

1777949497 completed {"result_len": 0, "summary": null}

---

$ hermes kanban --board minerva complete t_85cb3f55 --summary "DECIDED ..."
cannot complete t_85cb3f55 (unknown id or terminal state)

$ hermes kanban --board minerva edit t_85cb3f55 --result "..."
hermes kanban: error: argument kanban_action: invalid choice: 'edit'

---

con.execute("UPDATE tasks SET result=? WHERE id=?", (summary, task_id))

---

hermes kanban --board <slug> complete <task_id> \
  --summary "DECIDED <YYYY-MM-DD>: <one-line outcome>. Wiki: <relative-path>"
RAW_BUFFERClick to expand / collapse

Summary

Two related gaps in the kanban completion-summary path that together break any cron/agent pipeline keying on tasks.result:

  1. Dashboard "Complete" button silently bypasses the summary modal on Blocked-lane tickets — completes with summary: null, result_len: 0.
  2. No CLI path to backfill result after completionkanban complete refuses to re-run on done tickets, and there is no kanban edit --result / kanban resummarize subcommand. Recovery currently requires raw SQLite UPDATE.

Reproduction (bug 1)

Hermes commit b816fd4e2, board with a ticket assigned to a non-agent identity (e.g. a human username), in blocked state.

  1. Open the ticket detail panel in the dashboard.
  2. Click the "Complete" button (NOT drag to a Done lane).
  3. Expected: a modal opens with a "Completion summary" textarea.
  4. Actual: ticket transitions to done immediately. No modal. tasks.result is NULL.

DB-confirmed event payload on three tickets in the same session (board: minerva):

1777949497 completed {"result_len": 0, "summary": null}

Tickets affected in repro: t_85cb3f55, t_1f9afea6, t_bae7bbe0. The first was completed via the button; the latter two via drag-to-Done. Both paths produced the same null-summary outcome, suggesting the modal is failing to mount rather than the button being miswired.

Reproduction (bug 2)

After bug 1 leaves a ticket in done with result=NULL:

$ hermes kanban --board minerva complete t_85cb3f55 --summary "DECIDED ..."
cannot complete t_85cb3f55 (unknown id or terminal state)

$ hermes kanban --board minerva edit t_85cb3f55 --result "..."
hermes kanban: error: argument kanban_action: invalid choice: 'edit'

The only working recovery path is direct DB write:

con.execute("UPDATE tasks SET result=? WHERE id=?", (summary, task_id))

This is not a path most users should be expected to know about.

Why this matters

We're standing up a cron sweep that reads tasks.result for a DECIDED <date>: ... prefix to auto-reflect human decisions into a wiki. With bug 1, every dashboard-completed ticket arrives with result=NULL and the sweep has nothing to consume. With bug 2, there's no graceful recovery — ops staff have to run raw SQL.

Comments on the ticket ARE preserved through the completion path, but the cron wants structured summary, not free-form comment text.

Suggested fixes

  • Bug 1: Investigate why the Completion-summary modal isn't mounting on Complete button click for Blocked-lane (and possibly all-lane) tickets. Possibly a recent regression — worth bisecting against the dashboard JS bundle.
  • Bug 1 (defensive): If the modal can't open for some reason, fall back to a confirm dialog rather than silently completing with null summary. Or refuse the complete action and show an error.
  • Bug 2: Add hermes kanban edit <task_id> --result <text> (or kanban resummarize <task_id> <text>) to allow backfilling result on done tickets without raw SQL. Should emit an edited event for audit trail.

Environment

  • Hermes commit: b816fd4e2
  • Host: placer-jy01 (Linux)
  • Board: minerva (multi-board scaffolding, post commit 5ec6baa40)
  • Browser: dashboard accessed via gateway at default port

Workaround currently in use

CLI is the canonical path until both bugs are fixed:

hermes kanban --board <slug> complete <task_id> \
  --summary "DECIDED <YYYY-MM-DD>: <one-line outcome>. Wiki: <relative-path>"

Documented in the local kanban-orchestrator skill.

extent analysis

TL;DR

The most likely fix involves addressing two gaps: ensuring the Completion-summary modal mounts correctly for Blocked-lane tickets and adding a CLI path to backfill the result after completion.

Guidance

  • Investigate the dashboard JavaScript bundle to identify why the Completion-summary modal isn't mounting on the "Complete" button click for Blocked-lane tickets.
  • Consider implementing a fallback to a confirm dialog or refusing the complete action with an error if the modal cannot open.
  • Add a hermes kanban edit or kanban resummarize subcommand to allow backfilling result on done tickets without requiring raw SQL updates.
  • Verify that any solution does not introduce regressions in other parts of the application, especially regarding the handling of tasks.result and the cron sweep functionality.

Example

No specific code example is provided due to the nature of the issue, which seems to require a more architectural or design-based solution rather than a simple code fix.

Notes

The solution may require careful consideration of the user experience, especially in how the application handles the completion of tasks and the editing of results post-completion. Ensuring that any fix does not break existing functionality, such as the preservation of comments through the completion path, is crucial.

Recommendation

Apply a workaround by using the CLI as the canonical path for completing tasks until both bugs are fixed, as documented in the local kanban-orchestrator skill. This approach ensures that tasks are completed with a proper summary, allowing the cron sweep to function as intended.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING