问题(结构病,REQ-083 只是其一个症状)
「账户横幅显示 PRO、模型列表全灰」这类矛盾画面的结构根源:三路真值各自为政——账户横幅走 main-IPC、模型表走引擎 HTTP(SDK)、keyStatus 又走 main-IPC。每个 UI 消费点各自取数、各自处理失败,引擎不可达时各面各说各话。REQ-083(PR #173)只修了模型选择弹窗一个消费点;composer chip、侧栏、设置页各有自己的取数,同族 bug 会换个面再冒。
方向
单一 engine-health store(renderer 层):一处维护「引擎在线/重启中/不可达」状态(SSE 断线、取数超时、sidecar 事件共同喂),所有 UI 面(横幅/弹窗/chip/侧栏/设置)消费同一状态;引擎不可达时全局一致的诚实呈现,而非每处自行发明。
验收要点
- 任一面显示「引擎重启中」时,其余面不得出现与之矛盾的可用态假象;
- 断言进
verify-picker-respawn.ts 同款故障注入 harness(复用 S39 病灶 1 的固化模式)。
出处:2026-07-12 S39 复盘(五病灶分析,病灶 4)。
问题(结构病,REQ-083 只是其一个症状)
「账户横幅显示 PRO、模型列表全灰」这类矛盾画面的结构根源:三路真值各自为政——账户横幅走 main-IPC、模型表走引擎 HTTP(SDK)、keyStatus 又走 main-IPC。每个 UI 消费点各自取数、各自处理失败,引擎不可达时各面各说各话。REQ-083(PR #173)只修了模型选择弹窗一个消费点;composer chip、侧栏、设置页各有自己的取数,同族 bug 会换个面再冒。
方向
单一 engine-health store(renderer 层):一处维护「引擎在线/重启中/不可达」状态(SSE 断线、取数超时、sidecar 事件共同喂),所有 UI 面(横幅/弹窗/chip/侧栏/设置)消费同一状态;引擎不可达时全局一致的诚实呈现,而非每处自行发明。
验收要点
verify-picker-respawn.ts同款故障注入 harness(复用 S39 病灶 1 的固化模式)。出处:2026-07-12 S39 复盘(五病灶分析,病灶 4)。