diff --git a/ui/src/components/form-controls.browser.test.ts b/ui/src/components/form-controls.browser.test.ts
index 4a567d358113..79bab72bf8cc 100644
--- a/ui/src/components/form-controls.browser.test.ts
+++ b/ui/src/components/form-controls.browser.test.ts
@@ -380,7 +380,6 @@ describeBrowserLayout("app chrome interaction styles", () => {
- Dock here
3 files
@@ -412,7 +411,6 @@ describeBrowserLayout("app chrome interaction styles", () => {
".sidebar-agent-card__name",
".settings-sidebar__item-label",
".sidebar-file-view__path",
- ".chat-workbench__dock-zone",
".chat-workspace-rail__file-badge",
".session-menu__shortcut",
".file-view__search-counter",
diff --git a/ui/src/e2e/chat-flow.navigation-presentation.e2e.test.ts b/ui/src/e2e/chat-flow.navigation-presentation.e2e.test.ts
index 77fa87798196..7cb5af289ab3 100644
--- a/ui/src/e2e/chat-flow.navigation-presentation.e2e.test.ts
+++ b/ui/src/e2e/chat-flow.navigation-presentation.e2e.test.ts
@@ -300,7 +300,8 @@ suite.define(() => {
targetHeader.evaluate((header) => {
const owner = header.closest("openclaw-chat-pane");
return (
- owner === header.parentElement && owner?.classList.contains("chat-split-view__pane")
+ header.parentElement?.classList.contains("chat-main__conversation-column") === true &&
+ owner?.classList.contains("chat-split-view__pane") === true
);
}),
)
diff --git a/ui/src/pages/chat/chat-pane-render.ts b/ui/src/pages/chat/chat-pane-render.ts
index 780ea293e2ea..42f2e524a576 100644
--- a/ui/src/pages/chat/chat-pane-render.ts
+++ b/ui/src/pages/chat/chat-pane-render.ts
@@ -607,10 +607,11 @@ export class ChatPane extends ChatPaneBrowserAnnotationRender {
);
const chat = renderChat({ ...props, header: board.face === "dashboard" ? nothing : header });
const boardPrimary = this.renderBoardPrimary(board, chat);
- const primary =
- board.face === "dashboard"
- ? html`
${header}${boardPrimary}
`
- : boardPrimary;
+ // Keep this root stable across board face changes so the guarded board runtime
+ // remains connected while Chat is active.
+ const primary = html`
+ ${board.face === "dashboard" ? header : nothing}${boardPrimary}
+
`;
const discussion = this.buildSessionDiscussionPanel(state, state.sessionKey.trim());
const panelTemplates = {
chat,
diff --git a/ui/src/pages/chat/chat-responsive.browser.test.ts b/ui/src/pages/chat/chat-responsive.browser.test.ts
index 7e00a4968cfd..a804e071723a 100644
--- a/ui/src/pages/chat/chat-responsive.browser.test.ts
+++ b/ui/src/pages/chat/chat-responsive.browser.test.ts
@@ -366,7 +366,7 @@ function chatHtml(opts: ChatFixtureOptions = {}, mobileNavLayout = false) {