优化: 待审查 CR-260619-14 多会话前端UI审查回填(✅ PASS)
6 维度全过:Set 响应式/迁移完整/AiError 精确清/侧栏并行/独立窗口/向后兼容。 AiError delete(convId) 修原 =null 全局误清(多会话并发正确性核心修复)。 ⚪2 WATCH:newConversation clear 全清(前端视觉非后端)/streaming 单值联合判定。 清理审查 agent 遗留重复登记块。无 🔴/🟡 阻塞项。
This commit is contained in:
26
docs/待审查.md
26
docs/待审查.md
@@ -1061,6 +1061,32 @@
|
||||
|
||||
---
|
||||
|
||||
### CR-260619-14 多会话并发前端 UI 阶段3/4(generatingConvs:Set + 侧栏并行 + 独立窗口 per-conv·commit 7d54029) — ✅ 已审(PASS)
|
||||
|
||||
- **结论(2026-06-19·独立 grep/read 核验 commit 7d54029 当前形态,HEAD=7d54029 无后续代码漂移)**: ✅ **PASS** — 🔴0 🟡0 ⚪2
|
||||
- **验证**: `npx vue-tsc --noEmit` EXIT 0 独立复跑 ✅ / `grep -rn generatingConvId src/` 仅 2 处注释命中(stores/ai.ts:196/220),零代码读写残留 ✅ / 逐维度源码核验(非 diff 快照)。
|
||||
**6 维度逐项核验**(源码当前形态为准):
|
||||
|
||||
| # | 维度 | 判定 |
|
||||
|---|------|------|
|
||||
| 1 | Set 响应式 | ✅ stores/ai.ts:70 `generatingConvs: new Set<string>()` 在 `reactive({})` 内;:204-206 `isGenerating` 调 `state.generatingConvs.has(convId)`。Vue 3 reactive 对 Set 的 has/add/delete 提供 collection proxy 跟踪,computed/template 内调用建立响应式依赖,Set 变更触发更新。AiChat(:283)/MessageList(:197/354)/DirAuthDialog(:51)/MaxRoundsCard(:43) 四处 computed 调 `store.isGenerating(activeConversationId)` 均建立依赖,UI 自动刷新 |
|
||||
| 2 | 5 处迁移完整性 | ✅ useAiEvents.ts:362(Completed) `state.generatingConvs.delete(event.conversation_id \|\| '')` / :415(AiError) 同 delete / :465(路由非当前 conv) `state.generatingConvs.delete(convId \|\| '')` / :472(路由标记) `state.generatingConvs.add(convId)`。外加 useAiWindow.ts:65/196(detach delete + restore add)+ useAiStream.ts:30(clear)+ useAiConversations.ts:78(newConversation clear)。grep 零代码赋值残留 |
|
||||
| 3 | AiError 精确清 | ✅ useAiEvents.ts:415 `state.generatingConvs.delete(event.conversation_id \|\| '')` — 仅清出错会话,不再 `= null` 全局清空(原单值语义会误清其他并发会话)。多会话并发下 A 报错不影响 B 生成态 |
|
||||
| 4 | 侧栏并行指示 | ✅ ConversationSidebar.vue 三处独立脉冲点:`store.isGenerating(conv.id)` 在 :50(搜索结果)/:132(活跃分组,带 F-09 注释)/:177(归档分组)。各会话独立判定,多会话同时生成时各自项独立显示 `.ai-conv-gen-dot`。i18n key `aiChat.generating` 中英对称(zh:7 '生成中…' / en:7 'Generating…') |
|
||||
| 5 | 独立窗口 per-conv | ✅ useAiWindow.ts:28-40 前缀常量 `ai-detached-`/`df-ai-gen-`/`df-ai-text-` + detachedLabel/genKey/textKey 生成器。:46 detachPanel 接受 convId → label per-conv;:54-57 写 per-conv 快照;:101-108 reattachPanel 关闭所有 `ai-detached-*` 前缀窗口(含旧 'ai-detached');:117-128 cleanupAllDetachedSnapshots 清所有 per-conv + 旧单 key |
|
||||
| 6 | 向后兼容 | ✅ (a) 单会话场景:Set 0/1 元素行为等价(isGenerating has 单元素等单值 null/非null)。(b) :161/179/186/187/219/222 多处读路径 `localStorage.getItem(per-conv) \|\| localStorage.getItem('df-ai-gen')` 双兜底,旧版本写入的单 key 快照仍可读。(c) streaming 单值保留(stores/ai.ts:63)粗粒度"任一会话流式中",供 AiChat 等场景判断当前视图流式态 |
|
||||
|
||||
**审查防污染印证**:
|
||||
- HEAD = 7d54029,`git diff 7d54029 --stat` 仅 docs/待审查.md +16(本次回填),12 源文件零后续漂移,源码形态可信(memory [[review-batching-worktree-transient]] 教训印证)。
|
||||
- AiError 修复为本批最高价值项:原单值 `generatingConvId = null` 在多会话并发下会误清其他会话生成态(侧栏脉冲错灭/ghost),改 `delete(event.conversation_id)` 精确清是核心正确性修复。
|
||||
- useAiStream.ts:30 `state.generatingConvs.clear()` 全清(非精确)是合理的兜底设计:整流超时无法确定具体 conv(无 event 携带 convId),保守全清避免幽灵,与 AiCompleted/AiError 精确 delete 互补,非缺陷。
|
||||
|
||||
- **⚪ WATCH-1**: useAiConversations.ts:78 `newConversation` `generatingConvs.clear()` 全清 — 多会话并发下新建会话会清掉其他后台生成态的侧栏脉冲指示(但不影响后端真实生成,仅前端视觉)。当前设计合理(新建会话视作用户关注转移),若后续报告后台会话脉冲丢失可改精确清。
|
||||
- **⚪ WATCH-2**: streaming 单值(stores/ai.ts:63)在多会话并发下语义为"任一会话流式中",各组件用它判当前视图流式态时需配合 `isGenerating(activeConversationId)` 联合判定(4 组件已对齐)。若未来仅读 streaming 单值可能误判其他会话流式影响当前视图,当前 4 处 computed 均联合判定无隐患。
|
||||
- **待修项回流 todo**: **无** 🔴/🟡 项
|
||||
|
||||
---
|
||||
|
||||
## 已审归档
|
||||
|
||||
> 已审 CR 段迁独立文件: [待审查归档/2026-06.md](./07-项目管理/待审查归档/2026-06.md)
|
||||
|
||||
Reference in New Issue
Block a user