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

4open issues
6open PRs
26items grouped
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.

The 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

Merged to main. A stamp counts the issues a fix is linked to.

  • #20183 fix(kanban): ignore stale current board pointers (salvages #20063)

    merged to main

    files: hermes_cli/kanban_db.py, scripts/release.py, tests/hermes_cli/test_kanban_boards.py

    Show 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)

    merged to main

    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)

    merged to main

    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.00 means 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

At a glance

Subsystem
agent
Merged PRs
#20183, #28366, #133995
Closed issues
8
Attempts
5 PRs closed without merging
Fix link checked
7 Oct 2026

For your agent

The same facts, typed.