Commit Graph

1 Commits

Author SHA1 Message Date
5f12ea3df9 fix(gui): 补星图面板缺失的 </div>,修对话页 5 个页签空白
## 实测故障

对话页里「终端 / 运行中命令 / 记忆 / 上下文 / 知识」五个页签点进去全是
空白,只有「对话」和「星图」正常。

## 根因:少一个 </div>

构造星图面板的那段 HTML 里有 **4 个 `<div>` 开、只有 3 个 `</div>` 闭**,
它没闭合 —— 后面拼接的所有 chat-panel 都被浏览器塞进 chat-panel-starmap
**内部**。

CDP 查真实 DOM 的铁证:

    .chat-layout 的直接子节点只有 3 个:
      DIV.chat-tabs / DIV#chat-panel-chat / DIV#chat-panel-starmap

    terminal/cmd/memory/context/knowledge 的父节点
      = chat-panel-starmap     ← 不是同级的 chat-layout

后果:这些面板 display 是flex(switchChatPanel 把 active 加对了),
但父级 display:none ⇒ getBoundingClientRect() 恒为 0x0 ⇒ 显示为空白。

实测尺寸对照(修复前 → 修复后):

    terminal  0x0   → 1156x621
    cmd       0x0   → 1156x621
    memory    0x0   → 1156x621
    context   0x0   → 1156x621
    knowledge 0x0   → 1156x621

## 为什么一直没被发现

标签不配对在源码里看不出来(跨行字符串拼接的 HTML 片段),浏览器也
**不报错** —— 它只是「尽力修复」成畸形结构。现象是「点了没反应/一片空白」,
很容易被归因为数据没到或后端挂了(我最初就查了半天气网络与接口 401)。

而且它只在部分面板上发作:chat 与 starmap 恰好是前两个,位置靠前不受影响,
于是「大部分能用」掩盖了「后面全废」。

## 判据(cmd/gui/chat-panel-dom.test.mjs)

3 条:整段 div 标签配平、各面板独立配平、各面板顶层不被嵌套进前一面板。

逐面板断言能定位到**具体是哪个**面板不配平(变异测试下报
`starmap(开4/闭3)`),而不只是「总数差了 1」。

变异测试:去掉一个 `</div>` ⇒ 前两条转红并指出 starmap。

判据自身也错过一次:还原 HTML 时把 `"` 全替换成 `'`,而 marker 用的是双引号,
7 个面板全报「未找到」。已修正并记在注释里。
2026-10-06 13:09:12 +08:00