Repository navigation
fix(workspace): hide routine conversation history loading text - #7372
Conversation
Signed-off-by: huangruiteng <huangrt01@163.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent · gpt-6.1-sol · OpenAI · declaration_source=runtime_reported · reasoning_effort=max.
详细中文评审
动机
受影响的是使用工作区对话并在读取既有消息时继续编辑草稿的用户。 本次只隐藏常规加载文字,读取失败和部分恢复仍显示原因与重试按钮,用户可以继续保留并编辑草稿。 实际打包页面确认桌面加载文字收为 1×1 且仍在可访问性树中;窄屏错误与部分恢复可见,重试恢复记录,草稿不丢失且其它通道未混入。 边界只包括既有历史状态的展示,不改变历史读取、发送权限或执行器就绪判断,不声称安装后 App 或屏幕阅读器语音已验收。
用户需要关注消息和自己的输入;常规记录读取没有新的操作要求,把它一直放在输入区上方会重复占用空间。APPROVE,限精确头 a42ab81f6055526609db5141af699ff475de9d69。 本轮没有发现这行展示选择引入阻断问题,批准不表示已安装、完整浏览器套件通过或可以合并。
改动思路
历史 hook 已拥有类型化 phase 和恢复状态,页面直接选择现有 CSS 类即可;可访问性和错误路径都复用原 owner,无需增加状态或协议。 本 PR 交付一行展示选择与四张合成证据;不新增设置、执行权限、后端或专用历史编辑器。 原 hook 已区分 loading、unavailable、partial、ready,页面只把 loading 分支的容器改为已有 sr-only,保留 role=status、文本内容、失败提示和原 retry 按钮。这样不用删掉可访问性状态,也不用为暂时文字增加设置或新的状态同步。进入对话后的真实错误继续在输入框旁可见,恢复仍交给原历史 hook。
具体改动
完整五文件:生产代码一行 +1/-1,另四个 PNG 是合成展示证据。截图包含报告的通用文字裁剪、桌面/390px 加载视图和桌面错误视图;逐张查看了实际像素,并检查没有 text/EXIF 元数据块,保留色彩配置。没有私有对话、路径或真实运行上下文。PR 描述已经直接嵌入这些精确头图片,并明确是打包的合成页面,而非安装后更新。
先读的 design.md@d7ddb061与同版本 task-first delivery 是接受的判断边界。quiet-routine-progress 已实现常规提示视觉收起且保留语义;preserve-error-and-recovery 已实现失败/部分状态与重试;retain-history-owner 已实现原 history hook、通道身份和只读边界保留。没有把截图本身当作数据或权限 owner。
关键代码讲解
conversationHistoryState.phasenotice class@2979:只有精确的 loading 值选择 sr-only;原 role=status 和消息文本保持在 DOM。其它状态仍用 personal-history-notice,重试按钮仍调用原 retry,不依赖中文/英文文字内容来分类。useConversationHistoryphase projection@126:无当前可读状态时才是 loading,failed 与 missing 历史继续投影 unavailable/partial;原读取 fence、当前会话恢复和 sendBlocked 没有变化。保留这一 owner 比在页面另造“是否隐藏”布尔值更稳妥。
独立 head/base 的 Vite TypeScript/Chat bundle 和原生 conversation-history smoke 都通过,后者真实读 HTTP/store,覆盖部分历史、通道隔离、缺项重试、晚修订及零读取写入。实际浏览器使用精确头打包页面与原生 ChatHTTPServer/ChatSessionStore:桌面1440×900 的加载状态为1×1且不占行,可访问性树中的加载文本未 ignored;基线桌面和窄屏可见原文字。
对主干的风险
最强反例是隐藏所有历史状态,导致读取失败看起来像空对话,或重试清掉正在写的草稿。本次故障读取确实显示“会话历史暂时无法读取”和重试;再让部分历史可读,12条长的中英混合 user/agent 消息与部分恢复提示同时可见;再次重试后旧记录恢复,草稿完全一致,其它通道没有混入。桌面和390×844错误/部分恢复视图都实际查看,正文、提示与输入区分组可读。两份临时原生存储的9个文件保持不变,mutation/Turns均为0;无模型调用。
一张原拟用于窄屏加载的捕获已转入 unavailable,因此明确排除,不把它当作 head 窄屏加载证明。作者的另一组完整窄屏加载图片已实看;本人的加载运行证明以桌面 DOM/AX 为准。初始夹具缺少目录 revision/合法 view 等字段导致的观察失败已修正并保留,不归因产品回归,也不从后来的成功删掉它们。
diff、双语检查、semantic advisory 和精确范围质量通过。advisory 不分析所有 TSX/动态语义,人工确认这只是现有 phase 与 CSS 的使用。标准门4项直接、8项选择检查全通过;aggregate 仍为 manual_review_required,保留四张 PNG 的人工标记,本人虽已完成像素/隐私审查,也没有把这个原生状态改称 ready。作者报告的更广 conversation-history-recovery 场景超时本轮未独立执行,不沿用其基线根因归因;当前一行所影响的可见性和错误恢复已有上面的独立资格。真实执行器故意不可用,未提交消息,安装后 App、屏幕阅读器语音、原生 Windows、完整 CI 仍未验;wait_for_ci=false,未查询/轮询 hosted CI。
我的整体评价
实际查看了桌面加载、错误与恢复,以及窄屏错误/部分恢复;长的重复中英消息、状态提示和草稿仍能分组阅读。 窄屏加载的独立捕获已因转入失败而排除;未验屏幕阅读器语音、安装后 App 和作者报告的更广浏览器套件。
APPROVE,限 a42ab81f6055526609db5141af699ff475de9d69。 problem_context 为 goal_achieved:这条窄范围展示改动交付了可观察的安静加载和保留错误恢复。user_experience 为 improved,long_horizon 为 preserved;没有把减少一行提示宣称为长期效果或完整费用收益。历史 hook 已拥有类型化 phase 和恢复状态,页面直接选择现有 CSS 类即可;可访问性和错误路径都复用原 owner,无需增加状态或协议。 本 PR 交付一行展示选择与四张合成证据;不新增设置、执行权限、后端或专用历史编辑器。 现有类型、输入/读取权限和只读副作用边界保持;没有新词表、状态、设置或协议,较大重构不必要。质量 PASS 与4张图片的原生人工 hold 分开,精确头 closeout/readiness 与维护者合并授权也分开,本轮不合并。
英文简短结论
English verdict: APPROVE — a42ab81. One existing typed loading phase selects sr-only while preserving status semantics, visible unavailable/partial notices and the original retry owner. Independent head/base typed builds and native history smoke pass. Packaged UI/native HTTP-file-store checks show desktop loading clipped with nonignored AX, visible narrow failure/partial recovery, retained draft, channel isolation and zero mutations/Turns. One mistimed narrow loading capture is excluded; broader author-reported browser timeout and installed/AT/full-CI behavior remain unqualified. Exact quality passes; aggregate premerge retains four manual PNG holds. No merge authority.
Routine history reads show “Reading conversation history…” above the composer. Make that loading announcement screen-reader-only using the existing
sr-onlyutility, so it takes no visible row. Partial/unavailable notices and retry controls keep their current presentation and behavior. The existing typed history phase remains the owner; no read, send, recovery or authority logic changes.Validation
smoke:conversation-historypass. The latter exercises real HTTP/store reads, partial/missing history recovery, channel isolation and zero read-side writes/Turns.conversation-history-recoverybrowser scenario times out waiting for a late response inoverlappingHistoryRefresh(line 49) on both baseline and proposal. This remains a validation gap; no assertion or timeout was changed.Head
a42ab81f6055526609db5141af699ff475de9d69; basemainatd7ddb061feb2102305dc043545929e5e0fd085b8. The changed component and evidence are byte-identical across the upstream rebase; final build/history smoke were rerun afterward.Visual evidence
The reported before view is a generic loading-text crop; its EXIF/text metadata was removed without changing pixels. After views use the packaged proposal with disposable synthetic data and a held history read. These are packaged presentation checks, not an installed update. The empty transcript/composer stays anchored without the loading row; failure and recovery information remain visible. No broader page redesign or populated-history qualification is claimed.
The bounded improvement reuses existing accessibility styling and needs no new component or state vocabulary. No installation or merge was performed. Written by: model_agent (OpenAI Codex), from the requested loading-copy removal.