## 背景 前端审计第二轮(2026-08-21,10 视角并行研究)发现一批交互可靠性问题:操作失败被静默吞掉、错误坍缩为假空态、成排死控件。与第一轮 #1816-#1820 不重叠,聚合追踪。 **进度(2026-08-22)**:15 个子项中 9 个已由 PR #1836(shared-interaction lane)交付并合入;剩余 6 个属于 app-shell-states 三态与 shell 接线 lane,未开工。 ## 所属部分 - [x] 前端 - [ ] 后端 - [x] 客户端 ## 要做什么 - [x] Composer 发送失败丢内容(#1836:`captureComposerDraft` 快照 + `restoreDraft`,失败回灌文本/mention/附件/引用) - [x] 附件上传失败静默吞 + 无 failed 相(#1836:chip 失败态 + 中止发送;`uploadAttachmentWithProgress` 渐进进度接线) - [x] 审批决策失败静默且成功 toast 先于请求(#1836:toast 在请求 resolve 后才发,失败走 `toast.approvalFailed`,`workbenchTranscriptChromeActionMappers.ts:277`) - [ ] Web 消息操作失败全部 `.catch(() => {})`:`app/web/src/App.tsx` pin/unpin/forward/recall/reaction/regenerate/cancel,成功 toast 却乐观先行 → 失败可见 + 状态恢复 - [ ] Desktop Agents 页 error = 永久 skeleton:`app/desktop/src/App.tsx` `loading = data === undefined` 且 retry 不 refetch → 对齐 Web 版 RecoveryPanel + 真 refetch - [x] 文档页 error = 永久 skeleton(#1836:`useWorkbenchDocsRoute.ts` 补 error 分支,错误不再渲染 mock 行或 skeleton) - [x] 联系人 error 坍缩为假空态(#1836:`hubDataMapping.ts` `loadError` 守卫,失败返回 undefined 走错误态;好友请求区已在 `ContactMainSections.tsx` 渲染) - [ ] Skill/MCP 市场 error prop 死链:`AgentMarketParts.tsx` 接受 error prop 但两个 App 都不传 → 接线 - [ ] Web 切会话闪现旧消息:messages `placeholderData` 无 `isPlaceholderData` 守卫(`webWorkbenchTranscript.ts`) - [ ] Desktop 切会话误导性「暂无消息」:`itemsLoading` 计算了但无 UI 消费 - [x] 置顶公告横幅不可关闭(#1836:`ChatViewBridge.tsx` `onDismissPinned` 接线;多条置顶展示策略待确认) - [x] 侧边栏内联重命名 onBlur 丢弃输入(#1836:blur 提交 + Escape 取消,`cancelRenameRef` 防迟到的 blur) - [x] `WorkspaceHeader.tsx` 整排死控件(#1836:消息/云文档/新频道 legacy tab 行整体移除,两端测试同步断言不存在) - [x] `ChatEngineeringColumn.tsx` 「会话」tab 永久静态占位(#1836:接 `platform.host.listRuntimeSessions`,无数据时诚实空态) - [x] `AddContactModal.tsx` 二维码硬编码「有效期至 2026年7月18日」已过期(#1836:移除硬编码字面量) ## 验收标准 - [ ] 所有操作失败有用户可见反馈,无假成功(剩余 6 项完成后达成) - [ ] 错误不再坍缩为空态;空态与加载态可区分(剩余 6 项完成后达成) - [ ] 相关包 typecheck/test 通过;新行为带测试(#1836 部分已满足:149/149 测试绿) ## 相关文档 - `docs/architecture.md` 非协商边界 #6(诚实性承诺)
背景
前端审计第二轮(2026-08-21,10 视角并行研究)发现一批交互可靠性问题:操作失败被静默吞掉、错误坍缩为假空态、成排死控件。与第一轮 #1816-#1820 不重叠,聚合追踪。
进度(2026-08-22):15 个子项中 9 个已由 PR #1836(shared-interaction lane)交付并合入;剩余 6 个属于 app-shell-states 三态与 shell 接线 lane,未开工。
所属部分
要做什么
captureComposerDraft快照 +restoreDraft,失败回灌文本/mention/附件/引用)uploadAttachmentWithProgress渐进进度接线)toast.approvalFailed,workbenchTranscriptChromeActionMappers.ts:277).catch(() => {}):app/web/src/App.tsxpin/unpin/forward/recall/reaction/regenerate/cancel,成功 toast 却乐观先行 → 失败可见 + 状态恢复app/desktop/src/App.tsxloading = data === undefined且 retry 不 refetch → 对齐 Web 版 RecoveryPanel + 真 refetchuseWorkbenchDocsRoute.ts补 error 分支,错误不再渲染 mock 行或 skeleton)hubDataMapping.tsloadError守卫,失败返回 undefined 走错误态;好友请求区已在ContactMainSections.tsx渲染)AgentMarketParts.tsx接受 error prop 但两个 App 都不传 → 接线placeholderData无isPlaceholderData守卫(webWorkbenchTranscript.ts)itemsLoading计算了但无 UI 消费ChatViewBridge.tsxonDismissPinned接线;多条置顶展示策略待确认)cancelRenameRef防迟到的 blur)WorkspaceHeader.tsx整排死控件(fix(workbench): 1821 交互可靠性—审批展开、失败草稿恢复与动作映射 #1836:消息/云文档/新频道 legacy tab 行整体移除,两端测试同步断言不存在)ChatEngineeringColumn.tsx「会话」tab 永久静态占位(fix(workbench): 1821 交互可靠性—审批展开、失败草稿恢复与动作映射 #1836:接platform.host.listRuntimeSessions,无数据时诚实空态)AddContactModal.tsx二维码硬编码「有效期至 2026年7月18日」已过期(fix(workbench): 1821 交互可靠性—审批展开、失败草稿恢复与动作映射 #1836:移除硬编码字面量)验收标准
相关文档
docs/architecture.md非协商边界 M0: 更新调研索引、竞品覆盖和 ByteDance 溯源 #6(诚实性承诺)