Kanban dashboard board selection and card rendering bugs
NousResearch/hermes-agent · cluster 20879
Data as of
Nothing open on GitHub. Fix merged in #21230. Check it covers your case.
The short answer
- Known?
- Yes. 5 related items grouped here, 2 issues already closed.
- Fix event
- A fix was merged to main in PR #21230. Check it covers your case. No release data is tracked.
- Tracker
- The maintainers' tracker marks this
resolved, deciding PRs #21230, #22940. That is separate from the fix event. - Still open
- Nothing open on GitHub.
These issues and fixes concern the Kanban dashboard rendering the wrong board's cards or no cards at all when the selected board diverges from the server's current file. The changes attempt to make the pinned or default board authoritative for what the dashboard displays.
Open issues0
Open PRs0
Fixes on record
-
#21230 fix(kanban): make dashboard board pin authoritative over server current file (#20879)
files:
plugins/kanban/dashboard/dist/index.jsShow the diff
-
plugins/kanban/dashboard/dist/index.js@@ -112,17 +112,30 @@ function writeSelectedBoard(slug) { try { - if (slug && slug !== "default") window.localStorage.setItem(LS_BOARD_KEY, slug); + // Persist the user's dashboard-side board pin even for "default". + // Previously this stripped "default" to keep localStorage empty, + // but the fetch layer read that absence as "no opinion" and fell + // through to the server-side ``current`` file — which the board + // switcher also writes. Result: selecting the default tab after + // creating a new board with "switch" checked showed the new + // board's (wrong) data because the URL omitted ``?board=`` and + // the backend happily returned whichever board was "current". + // Persisting every selection keeps the dashboard's board opinion + // independent of the CLI's active board, which was the original + // design intent. Regression: #20879. + if (slug) window.localStorage.setItem(LS_BOARD_KEY, slug); else window.localStorage.removeItem(LS_BOARD_KEY); } catch (_e) { /* ignore quota / private mode */ } } function withBoard(url, board) { - // Append ?board=<slug> when a non-default board is active. Omitted - // for default so the URL stays clean and the backend falls through - // to its own resolution chain (env var → ``current`` file → - // default) which is already correct. - if (!board || board === "default") return url; + // Always append ?board=<slug> when we have one picked — including + // "default". Omitting the param would fall through to the backend's + // resolution chain (env var → ``current`` file → default), which + // means the dashboard's tab selection gets silently overridden by + // whatever board the CLI or "switch" checkbox last activated. + // Regression: #20879. + if (!board) return url; const sep = url.indexOf("?") >= 0 ? "&" : "?"; return `${url}${sep}board=${encodeURIComponent(board)}`; } @@ -447,9 +460,11 @@ token: [redacted:secret-assignment] }; // Pin the WS stream to the currently-selected board so events - // from other boards don't bleed in. Only set for non-default so - // single-board installs keep the cleaner URL. - if (board && board !== "default") qsParams.board = board; + // from other boards don't bleed in. Includes "default" so the + // dashboard's own board pin always wins over the server-side + // ``current`` file — same rationale as ``withBoard()`` above. + // Regression: #20879. + if (board) qsParams.board = board; const qs = new URLSearchParams(qsParams); const url = `${proto}//${window.location.host}${API}/events?${qs}`; let ws;
-
-
#22940 fix(kanban): request default board explicitly (salvage #22106)
files:
plugins/kanban/dashboard/dist/index.js,tests/plugins/test_kanban_dashboard_plugin.py
1 PR closed without merging
From the close comments: merged via another change 1
-
#22106 fix(kanban): request default board explicitly (#21819) · merged via another change →
#22940
Closed issues · 2
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.34: 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