Repository navigation
fix(kanban): prevent archived board watcher resurrection - #65321
bezeusgptr wants to merge 3 commits into
Conversation
|
Thanks for tracing the stale named-board connection race and hardening the direct notifier/dispatcher opens. The approach is sound for those call sites, but one gateway dispatcher path remains create-capable. Problems
Suggested changes
Automated hermes-sweeper review. |
|
Remediation pushed for the auto-decomposer sibling path identified in review. Exact head: |
Independent review — APPROVEReviewed exact pushed head Findings: none. Verified:
Formal GitHub approval is skipped because the authenticated reviewer and PR author are both |
SummaryThirteen PRs address or reference four Kanban gateway issues: singleton-dispatcher locking, false stuck telemetry, hidden or unscoped auto-decomposition failures, concurrency parsing, activity and notifier reporting, archived-board resurrection, and worker-log cleanup. The visible diffs show several distinct causes, with substantive overlap only in the locking, false-stuck, max_spawn-coercion, and auto-decompose secret-scope groups. Related pull requests
Duplicates#41679 and #44919 overlap on #41448, with #49068 as the merged machine-global consolidation; #46892 and #65581 overlap on #46800 but require consolidation of complementary scope; #59588 is substantially duplicated by #65644's stronger max_spawn validation; the Kanban half of closed #76864 duplicates #57837. Suggested consolidationKeep #65321 open with a salvage path: obtain exact-head maintainer re-review of the post-review existing-only auto-decompose propagation and archive-race tests. Keep #49861, #57837, #62893, and #64605 open on their documented focused salvage paths; author action on #46892/#65581 should split or rebase a consolidated board-local gateway-and-daemon false-stuck fix without the unrelated gateway-status changes, while #65644 should add finally-based exceptional-Popen cleanup before #59588 can close as its duplicate; #41679 and #44919 remain closed in favor of merged #49068, and #76864 remains closed in favor of #57837 and #76871. 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. |
Summary
Root cause (5 whys)
list_triage_ids()/decompose_task().connect_closing()did not exposecreate_if_missing, so its callers always inheritedconnect()'s create-on-demand default.HERMES_KANBAN_BOARDinsufficient? After archive, current-board resolution intentionally ignores a missing named-board environment slug and may fall back to the default board; a stale watcher therefore needed an explicit board pin as well as existing-only opens.Root cause: the archive race affected a class of stale named-board watcher opens, but the initial fix covered only direct DB consumers. Auto-decomposition retained an indirect create-capable path through
connect_closing()and could also resolve away from the archived slug.Corrective action:
connect_closing(),list_triage_ids(), anddecompose_task()now accept and forward an existing-only mode. The gateway auto-decomposer explicitly pins the discovered slug and passescreate_if_missing=Falsethrough triage listing and every decomposition DB open. Defaults remain create-capable for explicit user/dashboard operations. Regression tests archive after discovery and during decomposition, covering list/read and both specify/fanout write paths. No new lock, daemon, configuration, restart procedure, or cleanup process was added.Validation
Exact head:
6bb0994137f1afd86e2d6962012dca471dbd2451scripts/run_tests.sh tests/hermes_cli/test_kanban_boards.py tests/hermes_cli/test_kanban_decompose.py tests/gateway/test_kanban_notifier.py tests/gateway/test_kanban_watchers_mixin.py -q— 84 passed, 0 failedgit diff --check 742918a47501dbc47091ca3643c3a79f7ca9fb82..6bb0994137f1afd86e2d6962012dca471dbd2451— passedSonarQube
hermes-agent-t-936d9597-archive-ghost8aa9d0ed-6a65-4c88-a989-40696612fa86(SUCCESS)4fcc3fbc-6f06-4082-b6e1-1a2f4af317746bb0994137f1afd86e2d6962012dca471dbd2451OKScope and safety
This PR does not modify archived databases, delete historical ghost stubs, deploy code, or restart the gateway. The unrelated local
package-lock.jsonmodification remains untouched. A later independently approved exact head still requires the externally managed gateway restart and isolated post-restart smoke described in the Kanban task.