Kanban archived-board resurrection bugs and fixes
NousResearch/hermes-agent · cluster 10641 · agent
Data as of
10 open items. Fix merged in #20183. Check it covers your case.
The short answer
- Known?
- Yes. 26 related items grouped here, 8 issues already closed.
- Fix event
- A fix was merged to main in PR #20183. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
partially resolved, deciding PRs #20183, #133995. That is separate from the fix event. - Still open
- 4 issues and 6 PRs.
Next step: read #20183, then check whether your report is one of the 4 still open.
Read #20183Pick up a Lab taskThe majority of these items concern a cluster of related bugs where archived or deleted kanban boards are silently recreated as empty stubs by gateway ticks, stale pointers, or concurrent connect() calls, along with associated fixes and guards. A small number of unrelated desktop and account items are also present.
Open issues4
- Issue#35211[Bug]: Archived kanban board instantly resurrected by gateway dispatcher — Archive appears to not work
- Issue#61908kanban: 'boards rm' (archive) has no restore path; manual recovery can silently drop open tasks
- Issue#61945fix(kanban): create_board/board_exists blind to _archived/ — concurrent connect can fabricate live board over archived slug
- Issue#67888Deleting/archiving a kanban board while the gateway is running causes it to be silently recreated (race condition), plus a false-positive corrupt-board auto-quarantine
Open PRs6
- PR#26057feat: add explicit planning, self-review, autonomous execution, memory retrieval, multimodal verification, and editing verification guidance
- PR#35208fix(gateway): guard kanban board_dir before connect() to prevent archived board resurrection
- PR#37654fix(kanban): stop connect() from auto-creating board directories (archived board resurrection)
- PR#43286fix(kanban): refuse to create DB for archived boards
- PR#61937fix(kanban): add boards restore for archived boards
- PR#62029fix(kanban): refuse create_board over archived slug instead of fabricating empty live board (#61945)
Fixes on record
-
#20183 fix(kanban): ignore stale current board pointers (salvages #20063)
files:
hermes_cli/kanban_db.py,scripts/release.py,tests/hermes_cli/test_kanban_boards.pyShow the diff
-
hermes_cli/kanban_db.py@@ -190,12 +190,12 @@ def get_current_board() -> str: 1. ``HERMES_KANBAN_BOARD`` env var (set by the dispatcher on worker spawn, or manually for ad-hoc overrides). 2. ``<root>/kanban/current`` on disk (set by ``hermes kanban boards - switch``). + switch``), but only when that board still exists. 3. ``DEFAULT_BOARD`` (``"default"``). - A malformed slug at any step falls through to the next layer with a - best-effort warning — the dispatcher must never crash because a user - hand-edited a file. + A malformed or stale slug at any step falls through to the next layer + with a best-effort warning — the dispatcher must never crash because a + user hand-edited a file or removed a board directory. """ env = os.environ.get("HERMES_KANBAN_BOARD", "").strip() if env: @@ -212,7 +212,7 @@ def get_current_board() -> str: if val: try: normed = _normalize_board_slug(val) - if normed: + if normed and board_exists(normed): return normed except ValueError: pass -
scripts/release.py@@ -81,6 +81,7 @@ # Curator fixes (Apr 30 2026) "[redacted:email]": "y0shua1ee", "[redacted:email]": "0xDevNinja", + "[redacted:email]": "steezkelly", "[redacted:email]": "heyitsaamir", "[redacted:email]": "johnncenae", "[redacted:email]": "ThomassJonax", -
tests/hermes_cli/test_kanban_boards.py@@ -160,6 +160,15 @@ def test_file_pointer_honoured(self, fresh_home): kb.set_current_board("filepick") assert kb.get_current_board() == "filepick" + def test_stale_file_pointer_falls_back_to_default(self, fresh_home): + current = fresh_home / "kanban" / "current" + current.parent.mkdir(parents=True, exist_ok=True) + current.write_text("missing-board\n", encoding="utf-8") + + assert kb.get_current_board() == "default" + assert not kb.board_exists("missing-board") + assert [b["slug"] for b in kb.list_boards()] == ["default"] + def test_env_beats_file(self, fresh_home, monkeypatch): kb.create_board("a") kb.create_board("b")
-
-
#28366 fix(kanban): clear _INITIALIZED_PATHS in remove_board so recycled DBs re-init schema (#23852)
files:
hermes_cli/kanban_db.py,tests/hermes_cli/test_kanban_boards.py -
#133995 fix(kanban): read/watch paths no longer resurrect archived or deleted boards (#43243)
files:
hermes_cli/kanban_boards.py,hermes_cli/kanban_db.py,hermes_cli/kanban_db_boards.py,hermes_cli/kanban_db_connect.py,plugins/kanban/dashboard/plugin_api.py,tests/hermes_cli/test_kanban_boards.py,tests/hermes_cli/test_kanban_core_functionality.py,tests/plugins/test_kanban_board_lifecycle_api.py,tests/plugins/test_kanban_dashboard_plugin.py
5 PRs closed without merging
From the close comments: merged via another change 2 · superseded by another PR 2 · duplicate 1
-
#20063 fix(kanban): ignore stale current board pointers · merged via another change →
#20183 -
#20069 fix(cli): validate kanban current-board pointer to stop silent synth/create · superseded by another PR →
#20063 -
#23852 fix(kanban): clear _INITIALIZED_PATHS in remove_board so recycled DBs re-init schema · merged via another change →
d62964c,#28366 -
#26061 fix(kanban): prevent deleted boards from being resurrected by gateway ticks · superseded by another PR →
#26046 -
#35537 fix(kanban): stop connect() from auto-creating board directories (archived board resurrection) · duplicate →
#35208,#35211,#26046,#23139
Closed issues · 8
- Closed#10641[Feature]: DELETE YOUR ACCOUNT
- Closed#20055Kanban should not silently synthesize/create boards from a stale current-board pointer
- Closed#21858close,delete
- Closed#23139[Bug]: kanban boads rm --delete does not delete boards
- Closed#23833Kanban archive race: remove_board() doesn't clear _INITIALIZED_PATHS, causing empty DB + no such table: task_events
- Closed#26046kanban: boards rm --delete ineffective when gateway is running (board auto-resurrects)
- Closed#43243[Bug]: Kanban dashboard/watch paths can resurrect archived/deleted boards as empty DB-only stubs
- Closed#47369[Feature] Archive/delete conversations from Desktop sidebar
How this cluster was grouped
-
Link evidence (
partly structural links): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text. - Members outside that structural core may belong to a different underlying problem.
-
Pairwise link density
0.07: the share of item pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36.1.00means every pair is linked.
Pick up a Lab task
Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.
Open the Lab