409 lines
29 KiB
Markdown
409 lines
29 KiB
Markdown
# 对话区与侧栏验收问题收集(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 并行抢焦点:
|
||
|
||
```powershell
|
||
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
|
||
```
|
||
|
||
建议新增纯测试或受控集成测试:
|
||
|
||
```text
|
||
独立任务窗口发起消息并流式完成
|
||
备用内核第二回合仍携带前一轮 quote markdown
|
||
已有正文时添加/移除表格引用不丢正文
|
||
编辑有产物和无产物消息时出现正确回退选择
|
||
回退时选择 skip artifacts、文件已删除、外部修改和部分产物可回退
|
||
深色滚动条及 hover 的真实截图
|
||
深色 footer、窄 drawer footer、真实头像 fallback
|
||
```
|
||
|
||
## 报告限制
|
||
|
||
- 本报告没有修改或构建业务代码。
|
||
- 本报告没有启动 Electron;六个专项结果是主 agent 在本轮串行批次的运行结果。
|
||
- 本轮没有直接操作 WorkBuddy,也没有读取安装包、导出 Evidence JSON 或其他绕过 REA 的渠道。
|
||
- 已有 REA 结论均来自项目文档中记录的固定 Evidence;不能替代缺失的运行时状态。
|
||
- 已知 `9223` 端口不可达不影响“通过其他 REA target/静态分析继续取证”的总体能力,但本报告没有把该失败视为 WorkBuddy 功能结论。
|