# 对话审批与消息投影续对齐(2026-10-15) 继续按 WorkBuddy 5.8.2 对话区 1:1 目标推进。本文记录本轮新增实现;完整对话区尚未通过全状态像素验收。云端服务和子代理调度按用户要求暂后。 ## 原版证据 原版实现仍全部来自 REA。复用固定 Evidence `ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb` 的主脚本 `src-DbE1_mgM.js`,SHA-256 `6c6ce63c93854783270e855572797d75e536e3b8d4548410e31fe9d147e1feb4`。本轮只处理已保存的 REA 正文,没有绕过 REA 读取安装包或原版运行时。 ## 已接入 - 恢复现代中文/英文词典各 971 键,AST 复核实际 locale map `zh-CN → ut`、`en-US → it`,默认 `zh-CN`。纠正此前“现代中文 key 不在采集产物中”的判断:中文在主脚本中以 Unicode 转义存在。写文件、命令、读取、文件搜索、网页、MCP、待办等已接入对应源文案。 - 写文件审批使用源工具卡片内“接受 / 拒绝”,命令使用“运行 / 跳过 / 拒绝”,顺序、按钮 variant、提示文本和 pending gate 按源码恢复。工具 ID 绑定真实审批请求;展示层将待审批执行记录投影为 pending,不改存储执行态;有明确 once 选项时优先使用,绝不将接受映射到 allow_always。 - 审批走既有 `onRespond → chat store → IPC`;responding 时禁用按钮,错误可重试。已绑定卡片不再重复渲染通用审批框,缺绑定、缺选项或不支持的工具保留通用入口。 - 将原先“仅相邻工具”的分组改为源 foldable 连续组,包括 reasoning 与普通工具;至少两项才形成 summary。运行中仅折叠后面已有正文的组,尾部过程保持展开,终态再折叠。 - 恢复 show-widget 与前一未关联正文的 presentation 关联、并列最长正文和末段锚点、queue-guidance 边界以及 widget 移动次序。未知的 YCode 专有 part 保留明确适配,不称完整原版消息类型覆盖。 - 工具分组使用源 summary variant 和 4px 子项间距。折叠内容保持挂载并设置 aria-hidden/inert,使源高度/透明度过渡能实际生效。 - 过程摘要恢复为原版 27 个纯函数、40 类 descriptor 及其 alias/canonical map,覆盖状态、对象压缩、相邻正文 topic 和中文模板。真实消息分组已使用恢复模块,不再以“几个工具调用”代替源摘要。恢复文件摘要 `645ea0848880aa7e89319af8e11440bdddd8c10783944736fd4f29b70e923a10`,源/生成 manifest 随模块保存。 - 复核 ReadFileView/WriteFileView 后,移除原版不存在的额外结果 `
` 和写文件错误展开区;读取全文仍保留在文件打开 adapter,错误按源头部图标体现。
- 修复样式恢复器的实际错误:原先 `walkRules → output.append(rule.clone())` 丢失 at-rule 祖先,使 `prefers-reduced-motion:reduce` 的 `transition:none` 变成全局,关闭普通工具动画。改为递归投影保留 media/support 条件,并从固定 REA CSS 重生成。`test:tool-styles` 直接比较原版与投影后的 shell 规则、声明、条件和顺序,锁住三个 reduce-only 分支,防止回归。
- 截图复核发现工具按钮 family 未纳入选取,已补六条原版 `.cr-tool-btn` 规则,包含 primary/danger 和 hover;验收高度 20px、min-width 52px、字号 12px、横向 padding 10px、绿色/红色/中性背景。summary 按原版保留所有成员,取消旧的 15 项分页适配。

## 验证范围与限制

`test:conversation`、`test:tool-approvals`、`test:modern-conversation-labels`、`test:fold-summary`、`test:artifacts`、`test:chat`、`test:conversation-ipc` 已通过。审批专测覆盖 metadata gate、按钮顺序/样式、禁用态、精确请求绑定及 allow_once 优先级。摘要专测覆盖 descriptor aliases、路径对象、命令不使用执行串作对象、等待/运行/回退、相邻正文 topic,常规对话测试也执行真实源中文摘要。

审批传输目前只有 `optionId`。命令“跳过”和“拒绝”在 UI 是独立操作,现有适配均发送 reject_once;原版 host 区分 skip/cancel 的后续语义尚未接入,不能称功能全等。`defaultExpanded` 按原版仅用于首次挂载,迟到的审批不会强制重开用户已折叠的命令卡片。

最终 `npm run build`(含 typecheck)、`test:tool-styles`、`verify:conversation-states` 已通过。真实 Electron fixture 的事件流验证:流式写入自动展开/成功收起、手动折叠不被同位置更新重开、用户上滚后停止跟随/回到底部恢复、命令运行/失败/空成功/取消、审批失败重试/防重复/once 优先/不同请求互不替代。控制台错误 0。

显式 no-preference 下普通工具实测 `height 0.28s cubic-bezier(0.33,1,0.68,1)`,收起到 0px;大文件与显式 reduce 均为 `transition:none`。报告 `.tmp/conversation-states-ui-report.json`,YCode fixture 截图 `.tmp/conversation-command-approval-2026-10-15.png`、`.tmp/conversation-file-approval-2026-10-15.png`。这些是自有 UI/fixture bridge 的实际验证,不证明真实 WorkBuddy host IPC 或全状态像素等价。

已有字体和局部像素结果见《原版实测与像素对齐》:第一正文段落 39,909 像素零差异,气泡 22 个圆角像素最大通道差 1;该结果仅属于所声明的画面区域,不能外推本轮所有工具状态。剩余仍包括所有专用视图/附件分支的相同原版状态对照、完整消息类型映射、全部实际字体样本与动效中断/逐帧像素验收。