Files
ycode/docs/验收问题收集-2026-10-17-对话侧栏.md
T

29 KiB
Raw Blame History

对话区与侧栏验收问题收集(2026-10-17)

范围与结论

本报告只审查 TODO 01~07,不实现修复,不修改业务代码,不启动新的 Electron 或 WorkBuddy 实例。审查依据为当前工作树源码、现有测试和主 agent 在 2026-10-17 16:50:14 串行执行的真实隔离 Electron 报告。

当前结论不是“01~07 已全部 1:1 完成”。本轮 6 个专项脚本全部通过,但源码审查确认仍有 4 个高优先级行为缺口:

  1. 从独立任务窗口发起的流式对话收不到后续 chat:event,窗口会停在流式态。
  2. 表格引用只在当前回合进入提示词,备用内核后续回合重建历史时丢失引用内容。
  3. 编辑带产物变更的消息时,没有原版的“是否回退产物历史版本”选择,而是直接回退。
  4. 回退产物时没有原版“不回退”动作,也没有逐产物缺失版本/保留当前版本的分支。

另有归档入口不可回访、引用来源标题功能尚缺且原版宿主标题待取证、原生分支不可用时错误在提交后才暴露等中优先级问题。04、06、07 未发现新的核心代码缺陷,但仍分别存在用户约定差异、像素证据缺口和占位依赖。

本轮没有新调用 WorkBuddy。主 agent 通过 REA 请求已知 9223 端口得到 provider_unavailable/endpoint_unreachable,这只能证明该已知端口当前不可达,不能扩大为“REA 整体不可用”。已有 REA Evidence ID 只作为历史原版证据引用。

七项逐项状态

TODO 当前状态 结论摘要
01 任务操作菜单 发现问题 独立窗口流式事件断开;归档后无可回访入口;另有像素/键盘证据缺口。
02 表格引用 发现问题 备用内核下一回合丢失引用快照;来源标题是待取证的功能缺口;草稿保留测试无效。
03 编辑消息 发现问题 缺少编辑前产物回退选择;原生分支缺失在提交后才报错;错误码映射不完整。
04 悬停时间 当前用户约定范围通过 三档时间规则正确;“昨天”是已确认的用户约定差异,不是 Bug;动画帧仍缺证据。
05 回退消息与产物 发现问题 缺少“不回退”动作;缺失版本 fallback、失败 toast 和弹窗像素未实现。
06 滚动条 当前范围通过 浅色像素及跟随行为通过;深色/hover/周边 affordance 仍缺运行时证据。
07 侧栏最下一行 核心布局当前范围通过 普通浅色几何通过;深色、窄态、真实头像和 mock 功能仍有依赖/证据缺口。

分类口径

分类 含义
实际缺陷 当前 YCode 行为会在用户可触发的条件下失败、丢信息或明显偏离已确认交互。
占位/依赖 入口或视觉已存在,但真实数据、服务或运行链路由其他待办项提供,当前范围只保留占位。
证据缺口 当前实现和测试没有失败,但缺少与原版同状态、同输入、同环境的像素、时序或运行时证据。
用户约定差异 与原版不同是用户已经明确要求或接受的范围差异,不应由本报告重新判成 Bug。
测试盲区 测试 PASS,但断言没有覆盖验收声明的关键条件,或断言本身没有构造前置条件。

编辑前的产物回退选择与回退弹窗“不回退”动作有已回收的原版源码或词典证据,本轮没有新跑对应原版画面。行为分支缺失仍属于实际缺陷;缺少逐帧动画或截图只记为证据缺口,不单独算业务 Bug。

本轮执行证据

主 agent 的批次目录为 .tmp/audit19-20261017-165014/,其中 results.json 记录以下脚本退出码为 0。子 agent 没有自行启动 Electron。

专项 本轮结果 实际报告
verify-task-menu PASS,42/42 .tmp/task-menu-cI3qQG/report.json
verify-task-running-menu PASS,21/21 .tmp/task-running-AzKLph/report.json
verify-quote-table PASS,48/48 .tmp/quote-table-M1X5lY/report.json
verify-user-message-edit PASS,67/67 .tmp/edit-Sf68uQ/report.json
verify-conversation-scrollbar PASS,24/24,本轮没有 skip .tmp/scrollbar-6P7oPm/report.json
verify-sidebar-footer PASS,29/29 .tmp/sidebar-footer-Edo50t/report.json
npm run test:conversation-ipc PASS,输出 all checks passed 日志 .tmp/audit19-20261017-165014/conversation-ipc.log

主 agent 本轮还确认 npm run build 通过。构建通过和上述脚本通过只证明已覆盖路径,不证明以下未覆盖状态。


01. 任务操作菜单

结论:发现问题。

01-01 独立任务窗口可以打开任务,但不能正常接收流式回复

  • 类别:实际缺陷。
  • 优先级:高。
  • 复现条件:在主窗口对一个会话选择“在独立窗口中打开”,在任务窗口发送一条会流式输出的消息。
  • 当前行为:任务窗口的 chat.send() 能取得 runId 并建立本地 running 状态,但主进程后续只向 getWindow() 返回的主窗口发送 chat:event。任务窗口收不到增量、工具或终态事件;主窗口即使收到,也因为本窗口没有对应的 runs[runId] 而在 applyEvent 中丢弃。用户看到任务窗口一直处于流式/停止状态。
  • 代码证据:
    • src/main/index.ts:168 注册 IPC 时固定传入 () => mainWindow。
    • src/main/ipc.ts:628 在 chat:send 中取得 win = getWindow()。
    • src/main/ipc.ts:737~src/main/ipc.ts:741 只向该窗口发送后续事件。
    • src/renderer/src/stores/chat.ts:406~src/renderer/src/stores/chat.ts:412 对未知 runId 的事件只尝试进入待定队列,否则直接返回。
  • 测试盲区:scripts/verify-task-menu.cjs:143~scripts/verify-task-menu.cjs:150 只检查独立窗口数量及 URL 中的 taskId,随后销毁窗口,没有在任务窗口发送或接收任何消息。
  • 建议验收:真实打开任务窗口,在两个窗口分别发起和观察同一回合;要求增量正文、工具事件、取消和终态都到达发起窗口,主窗口侧栏状态也能同步,不出现“主窗口无运行、任务窗口永不停”。

01-02 归档恢复入口(已解决)

  • 类别:实际缺陷,并与 TODO 17 的用户范围叠加。
  • 优先级:中高。
  • 当前结论:YCode 的产品入口缺口已解决;原版归档弹窗的同状态像素与动画证据仍缺。
  • 复现条件:对空闲任务选择“归档”并确认。
  • 修复前行为:任务从默认侧栏消失,session:list-archived IPC 和预加载接口存在,但渲染器没有任何 listArchived 调用或归档列表入口。确认框却明确提示用户前往“系统设置-数据管理”查看,而数据管理已按用户要求移除。普通用户没有路径查看或取消归档。
  • 代码证据:
    • src/renderer/src/components/task-confirm-dialog.tsx:21~src/renderer/src/components/task-confirm-dialog.tsx:27 保留“系统设置-数据管理”文案。
    • src/renderer/src/components/SettingsDialog.tsx:23~src/renderer/src/components/SettingsDialog.tsx:32 明确移除 dataManagement。
    • src/preload/index.ts:170 当前只暴露归档列表 API;产品渲染源码没有消费该接口。
  • 修复:侧栏任务分组标题新增“已归档”入口;ArchivedTasksDialog 显式过滤 archivedAt !== undefined,支持“恢复”和“查看”,其中“查看”会先恢复再打开原任务;空间任务恢复后回到原空间分组;确认文案改为“确认将该任务归档吗?归档后可在侧栏「已归档」中查看并恢复。”,不再指向已移除的数据管理。
  • 验证:node scripts/verify-archived-tasks.cjs 25/25 PASS,覆盖加载态、只列归档任务、独立/空间标识、恢复与查看、快速重复点击、空间分组回归、消息保留、空态、载入失败、重试恢复、Escape 关闭和无渲染器错误;报告 .tmp/archived-tasks-8VDzsw/report.json。npm run typecheck、npm run build、verify-task-menu、verify-sidebar-footer、verify-conversation-scrollbar 均通过。
  • 剩余范围:本轮解决 YCode 的可发现与可恢复性,没有通过 REA 采集原版“已归档”列表的同状态画面,因此不能把该弹窗宣称为原版逐像素 1:1。

01-03 已确认的原版证据缺口

  • 类别:证据缺口。
  • 未覆盖:运行中禁用菜单、归档/删除确认弹窗、鼠标悬停态的原版实时像素;置顶行独立图标。
  • 当前依据:固定 REA Evidence ev_f5e9d71a676c453daab40928acfb33aeabae68ba57ffda342380cead7f1a1fe2 的 DOM/CSS/几何,以及运行源码中“任务进行中禁用归档”的规则。
  • 测试盲区:菜单没有 ArrowUp/ArrowDown/Home/End 键盘导航及初始焦点断言;现有脚本只覆盖 Escape/点击关闭等已经实现的部分。

01-04 用户约定差异

  • 云端的“分享任务”“保存到工作空间”“批量操作”当前不渲染。用户已要求云端服务暂不处理,因此这不是本阶段阻塞项;但它导致菜单高度、条目数量和整卡像素不可能与原版 9 项菜单相同,不能宣称该状态逐像素 1:1。

02. 表格“添加到对话”及引用结果

结论:发现问题。

02-01 引用表格只进入当前回合,备用内核下一回合重建历史时丢失

  • 类别:实际缺陷。
  • 优先级:高。
  • 复现条件:当 OMP 不可用、走备用 Gateway/Chat Completions 路径时,第一回合引用一张表并发送;第二回合继续追问表中的数据。
  • 当前行为:第一回合的 promptText 包含引用 markdown,消息对象也持久化了 quotes。但第二回合构建历史时,用户消息只重建正文、附件、资源和能力上下文,没有追加该消息的 quotes.markdown。上游收到历史时看不到第一回合引用过的表格。
  • 代码证据:
    • src/main/ipc.ts:771~src/main/ipc.ts:781 当前回合把 quoteText 拼入 prompt。
    • src/main/ipc.ts:816~src/main/ipc.ts:820 重建历史时遗漏 message.quotes。
  • 测试盲区:verify-quote-table 替换了 chat:send,只检查 IPC 载荷;scripts/conversation-ipc-regression.ts 没有引用载荷及两回合上游历史断言。因此 48 项 PASS 不覆盖“后续会话仍能看到引用内容”。
  • 建议验收:使用备用内核连续两回合,第一回合引用表,第二回合要求模型基于该表回答;在受控上游记录中确认两回合的历史包含引用快照。

02-02 输入区卡片没有来源标题,原版宿主标题仍待取证

  • 类别:功能缺口 + 证据缺口。
  • 优先级:中。
  • 当前行为:原版组件预留“作者 + 分隔符 + 摘要”,YCode 组件也支持 quote.title,但创建表格引用时从未设置 title。当前卡片只显示被压缩的 markdown 摘要。
  • 代码证据:
    • src/renderer/src/workbuddy/conversation/TableMessageQuoteAction.tsx:24~src/renderer/src/workbuddy/conversation/TableMessageQuoteAction.tsx:33 只写 markdown、preview,不生成 title。
    • src/renderer/src/workbuddy/conversation/MessageQuoteCard.tsx:29 只在 quote.title 存在时渲染作者标题。
  • 证据缺口:TODO 已记录原版标题由宿主 message.quote.add 处理端生成,尚未采集实际标题格式。
  • 建议验收:通过 REA 取得至少一个真实表格引用的宿主结果和几何,再实现标题;不能猜固定文案。

02-03 “不覆盖已有草稿”没有真正被测试

  • 类别:测试盲区。
  • 代码实现本身未发现丢草稿问题:ChatPane.quoteTable 使用当前草稿展开新对象,只追加 quotes。
  • 测试问题:scripts/verify-quote-table.cjs:155 的断言名是“不覆盖已有草稿”,但预期值是空字符串 '',且在此前没有向输入框写入任何草稿。该断言只证明“空草稿仍为空”,不能证明已有正文被保留。
  • 建议验收:先输入一段正文,再点击“添加到对话”,检查正文不变、引用追加;随后移除引用,正文仍应保留。

02-04 原版运行时证据缺口

  • 类别:证据缺口。
  • 未覆盖:原版点击后输入区卡片与发送后消息标签的实际截图/几何;品牌 token 的运行时定义;来源标题。
  • 当前依赖:REA Evidence ev_38cca1ac66606ab07fb495035e3509f5c4d8ec3e5e2b74d0fdcfcfadb120da3b 和样式表 src-CyXHA0IC.css,不是两态运行截图。
  • 本轮 PASS 只覆盖 YCode 自身几何/交互和 IPC 载荷,不替代原版逐像素验收。

03. 编辑已发送消息

结论:发现问题。

03-01 编辑带产物的消息时没有询问是否回退历史版本

  • 类别:实际缺陷。
  • 优先级:高。
  • 复现条件:选择一条用户消息,其后续回复通过 write_file/edit_file 改动过文件;点击编辑并提交。
  • 当前行为:编辑器直接调用 send(..., action: 'edit'),主进程在分支前固定执行 rollbackEditedArtifacts。用户没有机会选择“基于旧版本编辑”或“从最新版本开始编辑”。
  • 代码证据:
    • src/renderer/src/components/ChatPane.tsx:251~src/renderer/src/components/ChatPane.tsx:254 直接提交编辑。
    • src/main/ipc.ts:663~src/main/ipc.ts:664 固定回退产物。
    • src/renderer/src/workbuddy/conversation/rewind-labels.ts:19~src/renderer/src/workbuddy/conversation/rewind-labels.ts:22 已回收原版询问文案,但产品代码没有使用。
  • 证据:REA 文案 Evidence ev_e91787b1d4dea651582c6cf12827775b9068b0ee8b80c68ba08d4c1d87d94e90;行为接线见 TODO 已记录的 rewind.edit.*。
  • 测试盲区:verify-user-message-edit 覆盖直接回退成功和分支失败撤销,却没有验证提交前询问及“不回退”分支。
  • 建议验收:有历史产物时,提交编辑先出现原版询问;选择回退与不回退分别得到正确文件内容和对话前缀。

03-02 UI 对任何用户消息显示编辑入口,但后端可能没有原生分支

  • 类别:实际缺陷。
  • 优先级:中。
  • 复现条件:打开旧 YCode 会话或导入会话,在 OMP 可用但目标用户消息没有 nativeEntryId 时点击编辑并提交。
  • 当前行为:编辑器先完整打开并允许输入;提交后主进程才报“当前 OMP 会话的分支记录”错误。对于非最后一条消息,代码没有重建分支的回退路径。
  • 代码证据:
    • src/renderer/src/components/MessageBubble.tsx:79~src/renderer/src/components/MessageBubble.tsx:81 只要会话空闲就显示编辑能力。
    • src/main/ipc.ts:667~src/main/ipc.ts:676 对缺少原生分支的消息拒绝提交,只有最后一条 cancelled/error 消息可能现场恢复。
  • 测试盲区:真实窗口测试使用带 nativeEntryId 的种子消息;IPC 回归也以原生分支可用为前提,没有覆盖“编辑器打开后后端明确不可编辑”的 UI。
  • 建议验收:在打开编辑器前判定可编辑性,或在支持历史重建后再显示入口;不能等用户输入完毕才报分支缺失。

03-03 提交错误仍被压缩为两类文案

  • 类别:实际缺陷。
  • 优先级:中低。
  • 当前实现:只按“正在运行/尚未结束/in progress”正则区分 retryLater 和 sendFailed。
  • 原版证据:resend-settle-timeout、cancel-barrier、send-in-progress 等错误码有映射表,但 YCode 没有逐错误码处理。
  • 代码证据:src/renderer/src/workbuddy/conversation/UserMessageEditor.tsx:82~src/renderer/src/workbuddy/conversation/UserMessageEditor.tsx:93。
  • 测试盲区:本窗口测试的 chat:send 总是延迟后成功,没有触发任一错误码。
  • 建议验收:至少模拟 send-in-progress、resend-settle-timeout、cancel-barrier 和未知错误,逐项校验文案与编辑器保持状态。

03-04 编辑器交互和时序仍有盲区

  • 类别:证据缺口/测试盲区。
  • 编辑器使用原生 contentEditable 并由 innerText 取值,而原版为 Slate 编辑器。现有测试通过程序写入 innerText 和合成 Enter,不覆盖富文本粘贴、IME composition、Shift+Enter 多行、Undo/Redo 和换行 DOM 归一化。
  • 工具条淡入 0.2s、默认 0.15s 延迟到 hover 后 0 秒的逐帧表现未采集。verify-user-message-edit 只验证静止计算值。
  • 原版 userMessage.edit.resume 的“恢复到此版本”状态未实现,英文/中文文案在 source-labels.ts 中已有,但产品没有该状态。

04. 用户消息悬停时间

结论:当前用户约定范围通过,仍有证据缺口。

04-01 时间三档规则已按用户确认落地

  • 当天:HH:mm
  • 本年非当天:M月D日 HH:mm
  • 非本年:YYYY年M月D日 HH:mm
  • 代码:src/renderer/src/components/AssistantMessageDetails.tsx:4~src/renderer/src/components/AssistantMessageDetails.tsx:15。
  • 本轮 verify-user-message-edit 67/67 通过,覆盖四种日期情形、会话切换与历史重载;test:assistant-footer 也覆盖无效时间。

04-02 “昨天 HH:mm”是有意保留的用户约定差异

  • 类别:用户约定差异。
  • 原版 formatMessageTime 有 昨天 HH:mm 分支;用户已经确认当前三档时间规则,因此当前实现不构成需修复 Bug。
  • 原版证据:REA 回收 ToolbarRenderer、src-CyXHA0IC.css;运行时 Evidence ev_245ea1740cde21869500348e47cf9663a1ea72943ccfe79c163a6838a153bfd3。

04-03 工具条入场时序仍是证据缺口

  • 当前测试只校验 opacity/pointer-events 的 hover 前后值和 transition 声明,没有验证 0.15s 延迟退出、hover 立即进入及 tooltip 同步出现。
  • 原版未覆盖:默认状态向 hover 态过渡的逐帧画面、tooltip 出现延迟和隐藏延迟。

05. 用户消息回退操作与图标

结论:发现问题。

05-01 产物回退弹窗缺少“不回退”动作

  • 类别:实际缺陷。
  • 优先级:高。
  • 复现条件:回退点之后有可回退文件,点击回退按钮。
  • 当前行为:弹窗只有“取消”和“回退”,没有原版的“不回退”。用户不能保留当前文件、只回退对话。
  • 代码证据:
    • src/renderer/src/components/ChatPane.tsx:451~src/renderer/src/components/ChatPane.tsx:455 只渲染两个动作。
    • src/main/ipc.ts:608~src/main/ipc.ts:622 有变更时总是先恢复文件,没有 skip 参数。
    • src/renderer/src/workbuddy/conversation/rewind-labels.ts:32 已回收 rewind.action.skipRewind = 不回退,但未接线。
  • 原版证据:ev_e91787b1d4dea651582c6cf12827775b9068b0ee8b80c68ba08d4c1d87d94e90。
  • 测试盲区:verify-user-message-edit 只测取消和确认;IPC 回归测成功、冲突和失败,没有“skip artifacts”模式。

05-02 缺失/被删除的历史版本没有原版 fallback 行为

  • 类别:实际缺陷/部分占位。
  • 优先级:中高。
  • 复现条件:消息之后创建或修改文件,随后在 YCode 外删除该文件;再从对应消息回退。
  • 当前行为:预览基于工具记录显示“回退至历史版本”或“将被删除”;确认时 fs.realpath/读取当前文件失败,整次回退报错。没有原版的“历史版本已被删除,将保持当前版本”“该产物无历史版本,回退后文件仍会保留”等逐产物状态。
  • 代码证据:
    • src/renderer/src/components/ChatPane.tsx:444~src/renderer/src/components/ChatPane.tsx:448 只映射“将被删除/回退至历史版本”。
    • src/main/workspace-revert.ts:15~src/main/workspace-revert.ts:26 要求每个当前文件存在且内容精确等于 after。
  • 原版文案已在 rewind-labels.ts:23~rewind-labels.ts:29 回收,说明这些是可区分的产品状态。
  • 测试盲区:IPC 回归覆盖外部修改冲突,但只验证“失败且不破坏文件”,没有验证用户可见 fallback 或继续回退其他可处理产物。

05-03 失败仍以内联原始错误显示,而非原版 toast

  • 类别:实际缺陷。
  • 优先级:中。
  • 当前行为:chat:revert 的原始异常直接显示在回退弹窗中。
  • 代码:src/renderer/src/components/ChatPane.tsx:450、src/renderer/src/components/ChatPane.tsx:454。
  • 原版应显示 rewind.error.rollbackFailed 的 toast;当前已有文案 rewind-labels.ts:35,未接线。
  • 测试盲区:真实窗口脚本没有制造回退失败;IPC 回归只看 Promise rejection 和文件状态。

05-04 弹窗不是源码级视觉实现

  • 类别:证据缺口。
  • 当前 ChatPane 复用通用 .overlay/.dialog/.btn,没有接入原版 Modal/产物清单的逐项规则。
  • 未覆盖:弹窗几何、遮罩动画、标题/正文排版、产物行密度、按钮布局和深浅色。
  • hasMoreRequests 分页首条消息显示规则无法按原版直接验证;YCode 当前全量加载,因此按“非首条用户消息”近似。

06. 对话区域滚动条

结论:当前范围通过,完整 1:1 验收仍有缺口。

06-01 已通过的本轮证据

  • verify-conversation-scrollbar 24/24,PASS,本轮没有 skip,报告 .tmp/scrollbar-6P7oPm/report.json。
  • 浅色真实像素:6px 滑块位于 x=1328..1333,颜色合成 rgb(204,204,204),透明轨道和槽位位置与原版截图一致。
  • 行为:初始贴底、流式跟随、用户上滚停止跟随、回到底部恢复跟随、短会话稳定槽位、两个窗口尺寸,均通过。
  • 未启用 hideScrollbarWhenIdle,与原版运行源码一致。

06-02 深色和 hover 仍不是运行时像素验收

  • 类别:证据缺口。
  • scripts/verify-conversation-scrollbar.cjs:208~scripts/verify-conversation-scrollbar.cjs:209 只检查 CSSOM 中 hover token 规则。
  • scripts/verify-conversation-scrollbar.cjs:214~scripts/verify-conversation-scrollbar.cjs:217 临时切换 data-cr-theme=dark 后只读取 scrollbar-color,没有截深色滑块,也没有 hover 渲染像素。
  • 原版同样未采集 hover/深色运行时像素,因此当前视觉依据是固定 CSS 与 token,而不是同状态帧。

06-03 未纳入的滚动条周边能力

  • 类别:证据缺口。
  • 原版滚动条附近的“回到底部”等 affordance 尚未确认,因此本项不能证明所有滚动行为 1:1。
  • 本轮覆盖 1336、1100、1600 三种宽度;未覆盖 480 最小宽度、系统缩放/高 DPI、macOS/Linux 原生滚动条行为。

07. 侧栏最下一行

结论:核心布局当前范围通过;深浅色、窄态和真实账号仍有依赖/证据缺口。

07-01 已通过的本轮证据

  • verify-sidebar-footer 29/29,PASS,报告 .tmp/sidebar-footer-Edo50t/report.json。
  • 1336 宽窗口下 footer 为 57 高,padding 8 12 8 8,1px 顶边,账号/通知/小程序三项顺序正确,底部无收起入口。
  • 账号触发器、头像框、姓名、通知角标、hover token,以及顶栏收起/折叠轨道展开入口均通过。

07-02 深色和窄态没有运行时验收

  • 类别:证据缺口。
  • verify-sidebar-footer 没有深色截图、计算值或切换断言;脚本只运行在 1336×902 浅色主窗口。
  • 窄窗口走左侧 drawer 的产品路径没有在本脚本中执行。TODO 写的是“普通/窄侧栏、浅色/深色”,本轮 29 项 PASS 只覆盖普通浅色与折叠轨道。
  • 原版深色 footer 也没有运行时像素证据,当前只有回收 token。

07-03 真实头像与内描边仍由账号能力阻塞

  • 类别:占位/依赖。
  • 当前使用 #0056d4 字面首字母头像,不渲染原版真实图片及 --wb-avatar-fallback-* 的 1px 内描边。
  • 这与 TODO 09 的账号数据尚未接入相关;在本项可视为依赖,但“头像 1:1”尚未完成。

07-04 通知与小程序仍是占位

  • 类别:占位/依赖,属于 TODO 09 和后续待拆解项。
  • 通知角标是 mock 数据;小程序按钮点击显示未实现提示。它们不影响本轮 footer 几何,但不能宣称功能 1:1。

07-05 其余轻微差异

  • 侧栏整数宽 284px,原版运行时为 284.28px,存在 0.28px 理论残差;本轮几何断言四舍五入后一致。
  • 原版 footer 的独立深浅色像素、边缘翻转/窄宽挤压及图标资源仍缺同状态证据。

23 条原始遗留逐项归档

此前对“19 项”的汇总按 TODO 条目分组;01~07 全文实际包含下列 23 个遗留子项。本表用于确认没有只读每段前四条。

ID 原始遗留 本次判断
01-A 菜单/确认弹窗/hover/运行中无原版实时像素 证据缺口
01-B 置顶行图标缺独立原版证据 证据缺口
02-A 输入区卡片和发送后标签缺原版截图/几何 证据缺口
02-B 品牌 token 只有兜底值 证据缺口
02-C 引用来源标题未采集且当前未实现 功能缺口 + 原版具体标题待取证
03-A 工具条淡入和 tooltip 时序未逐帧采集 证据缺口
03-B 原版提交错误码集合未完整映射 实际缺陷
03-C userMessage.edit.resume 未实现 实际缺陷/未接状态
03-D 原版“昨天”时间分支 用户约定差异
04-A “昨天”分支 用户约定差异
04-B 工具条延迟切换未逐帧采集 证据缺口
05-A 回退弹窗几何与动画未对齐 证据缺口
05-B 回退失败 toast 未接 实际缺陷
05-C 逐产物历史缺失/保留状态未实现 实际缺陷
05-D 编辑前产物回退选择未实现 实际缺陷
05-E hasMoreRequests 首条回退规则无法直接复刻 当前全量加载下的近似/证据缺口
06-A hover 和深色无运行时像素 证据缺口
06-B 槽位宽度只能由像素推断 证据缺口;本轮 YCode 像素一致
06-C 回到底部等周边 affordance 未覆盖 证据缺口
07-A 0.28px 宽度残差 证据缺口,实际可见差异为 0
07-B 真实头像和 1px 内描边未接 占位/依赖
07-C 深色 footer 无运行时像素 证据缺口
07-D 通知角标和小程序为 mock 占位/依赖

此外,本次源码审查新增了 TODO 原文未拆出的四项高优先级问题:跨窗口事件、引用历史丢失、原生分支不可用的后置报错、归档入口不可回访。它们应进入下一轮修复或补充 TODO,不应用“专项脚本 PASS”覆盖。

建议修复与验收顺序

  1. 先修 chat:event 的窗口路由。事件应到达发起窗口,并按需要同步其他窗口;至少不得使用全局 mainWindow 作为所有对话事件的唯一目标。
  2. 在备用内核重建历史时追加每条用户消息的引用快照,并增加两回合上游请求断言。
  3. 将编辑提交前产物询问和回退弹窗“不回退”接线;同时补齐逐产物缺失版本/保持当前版本状态。
  4. 将原生分支能力作为编辑/回退入口的前置条件,或在编辑器打开前明确不可用。
  5. 修复归档的可回访产品路径与已移除“数据管理”的冲突。
  6. 先通过 REA 取得原版宿主生成的引用来源标题,再按证据补齐;同时完成逐错误码编辑文案、失败 toast 和真实窗口错误态回归。
  7. 最后做原版同状态像素与动画验收:菜单 hover/运行中、引用两态、编辑失败、回退弹窗、滚动条 hover/深色、footer 深色/窄态。

建议命令

以下命令由主上下文串行运行,避免多个 Electron 并行抢焦点:

npm run build
node scripts/verify-task-menu.cjs
node scripts/verify-task-running-menu.cjs
node scripts/verify-quote-table.cjs
node scripts/verify-user-message-edit.cjs
node scripts/verify-conversation-scrollbar.cjs
node scripts/verify-sidebar-footer.cjs
npm run test:conversation-ipc
npm run test:chat
npm run test:conversation

建议新增纯测试或受控集成测试:

独立任务窗口发起消息并流式完成
备用内核第二回合仍携带前一轮 quote markdown
已有正文时添加/移除表格引用不丢正文
编辑有产物和无产物消息时出现正确回退选择
回退时选择 skip artifacts、文件已删除、外部修改和部分产物可回退
深色滚动条及 hover 的真实截图
深色 footer、窄 drawer footer、真实头像 fallback

报告限制

  • 本报告没有修改或构建业务代码。
  • 本报告没有启动 Electron;六个专项结果是主 agent 在本轮串行批次的运行结果。
  • 本轮没有直接操作 WorkBuddy,也没有读取安装包、导出 Evidence JSON 或其他绕过 REA 的渠道。
  • 已有 REA 结论均来自项目文档中记录的固定 Evidence;不能替代缺失的运行时状态。
  • 已知 9223 端口不可达不影响“通过其他 REA target/静态分析继续取证”的总体能力,但本报告没有把该失败视为 WorkBuddy 功能结论。