From 2e1abeaeb04a598466d5f023d3a41e54634236a2 Mon Sep 17 00:00:00 2001 From: Steve Kelly Date: Tue, 5 May 2026 00:54:07 -0400 Subject: [PATCH 1/2] fix(kanban): ignore stale current board pointers --- hermes_cli/kanban_db.py | 10 +++++----- tests/hermes_cli/test_kanban_boards.py | 9 +++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/hermes_cli/kanban_db.py b/hermes_cli/kanban_db.py index e39808546f7b..ac44a3d19f1e 100644 --- a/hermes_cli/kanban_db.py +++ b/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. ``/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 diff --git a/tests/hermes_cli/test_kanban_boards.py b/tests/hermes_cli/test_kanban_boards.py index a86a8713302b..28b3fd3f8dc0 100644 --- a/tests/hermes_cli/test_kanban_boards.py +++ b/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") From 6cd2718a463ffb216017cdb20422fb8bd2f2b944 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Tue, 5 May 2026 04:31:44 -0700 Subject: [PATCH 2/2] =?UTF-8?q?chore(release):=20map=20stevekelly622@gmail?= =?UTF-8?q?.com=20=E2=86=92=20@steezkelly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/release.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/release.py b/scripts/release.py index 1b0cf0b8454a..a21355d71207 100755 --- a/scripts/release.py +++ b/scripts/release.py @@ -81,6 +81,7 @@ # Curator fixes (Apr 30 2026) "yuxiangl490@gmail.com": "y0shua1ee", "manmit0x@gmail.com": "0xDevNinja", + "stevekelly622@gmail.com": "steezkelly", "aamirjawaid@microsoft.com": "heyitsaamir", "johnnncenaaa77@gmail.com": "johnncenae", "thomasjhon6666@gmail.com": "ThomassJonax",