fix(cookbook): open() no longer crashes when a task has a diagnosis (#4417)

_showDiagnosis referenced an undefined `body` (left over from the refactor
that moved the diagnosis text into the toolbar), throwing a ReferenceError
whenever a failed task rendered fix buttons. Because open() wraps its render
in try/finally with no catch, the throw escaped before the modal was
un-hidden, so the whole Cookbook silently failed to open.

- cookbook-diagnosis.js: append the fixes row to `diag` (the in-scope
  container) instead of the removed `body` element.
- cookbook.js: guard the render passes in open() so one broken task card
  can't leave the entire panel stuck hidden.

Fixes #4406
This commit is contained in:
Christian Eriksson
2026-06-16 15:35:51 +02:00
committed by GitHub
parent dd20c2bc75
commit 497f455da6
2 changed files with 6 additions and 3 deletions
+1 -1
View File
@@ -757,7 +757,7 @@ export function _showDiagnosis(panel, diagnosis, sourceText) {
}); });
row.appendChild(btn); row.appendChild(btn);
} }
body.appendChild(row); diag.appendChild(row);
} }
} }
+5 -2
View File
@@ -2462,10 +2462,13 @@ export async function open(opts) {
// returned before hydration — and since close/reopen doesn't reset the page, // returned before hydration — and since close/reopen doesn't reset the page,
// only a full reload recovered it. Re-rendering is cheap and the in-progress // only a full reload recovered it. Re-rendering is cheap and the in-progress
// Running tab is rendered separately just below. // Running tab is rendered separately just below.
_renderRecipes(); // Guard the render passes: a single broken task card must not throw out of
// open() and leave the modal stuck hidden (it has no catch, so the panel
// would silently never appear). Show the window regardless; log and move on.
try { _renderRecipes(); } catch (e) { console.error('[cookbook] renderRecipes failed', e); }
_rendered = true; _rendered = true;
_clearCookbookNotif(); _clearCookbookNotif();
_renderRunningTab(); try { _renderRunningTab(); } catch (e) { console.error('[cookbook] renderRunningTab failed', e); }
// Self-heal: revive any download tasks whose tmux session is still alive // Self-heal: revive any download tasks whose tmux session is still alive
// but were persisted as done/error (covers the "restarted server while a // but were persisted as done/error (covers the "restarted server while a
// big multi-shard download was in flight" case — the task survived in // big multi-shard download was in flight" case — the task survived in