# 桌面历史任务补测记录（2026-09-19）

## 范围和环境

- 只在 GitHub 插件工作区 `arkme-dsh-plugin` 及 `/tmp/arkme-membership-0918-ru7UEP` 隔离预览工作；不修改已安装 Arkme 客户端。
- 预览固定 `http://127.0.0.1:3098/`，使用现有登录状态；浏览器测试使用独立临时上下文，不清理用户浏览器数据或钥匙串。
- 原有已修改文件和新文件已备份：`/tmp/arkme-regression-0919-c5m1BL/before-source.tar.gz`、`before.patch`。部署前隔离预览产物备份 `preview-lib-before.tar.gz`。
- 对真实账号做读取和界面操作；测试中的消息发送、已读上报、邀请、付款等写入拦截。未向真实联系人发送消息、未生成邀请、未创建订单或扣款。
- 测试日志和截图位于 `/tmp/arkme-regression-0919-c5m1BL`，部分复用脚本的截图位于对应历史测试目录。日志可能含账号内容，不提交到仓库。

## 本轮已修复

### 临时消息触发 @ 已读组件空值异常

用户已确认修复。没有已读上下文时，旧表达式 `scope?.itemUid === itemUid` 会在临时消息标识也缺失时为真，随后访问 `scope.sourceRef` 抛异常，影响连续发送的后续草稿。

现在先确认上下文、消息标识和来源有效，再比较身份；无有效上下文返回空已读集合。不改消息发送和已读判断口径。增加两项无上下文回归；已读组件和发送目录共 351 项通过。

## 本轮真实登录浏览器补测

| 项目 | 本轮结果与证据 |
| --- | --- |
| 搜索备注名、昵称、错误恢复 | 搜索“周鹏”“狗才”均找到同一私聊；备注优先、去重、名称匹配可打开；模拟单会话失败后重试恢复。明暗均无列表溢出。`search-live.log` |
| 快速查找外部链接 | 首批 30 条、分页 60 条；明暗展示、链接跳转、回到来源通过。目标外站响应拦截，未访问实际外站。首次等待超时，独立重测和完整重跑成功，未稳定复现产品缺陷。`links-diagnostic.log`、`links-live-retry.log` |
| 快速查找长文 | 首批 9 条、分页 23 条；真实全文接口成功，明暗预览、Escape/关闭后保留列表位置通过。`long-article-live.log` |
| 添加已有长文 | 真实本人文章列表、分页、标题搜索、详情权限核验、选入待发送和移除通过；选择没有触发转发/发布。`live-suite.log` |
| 群成员侧栏 | “群成员”标题、拖宽、成员左侧悬浮菜单、移开关闭通过；添加/邀请弹窗暗色可读，邀请生成被拦截。`live-suite.log` |
| 会员 | 头像状态及个人卡片入口、真实权益/套餐读取、购买按钮显示“桌面端支付开发中”、窄窗和关闭通过；没有订单请求。`live-suite.log` |
| 声纹 | 真实声音/识别人/授权数据读取成功；标题、卡片和按钮明暗均可读。切换页面捕获到下述 DSH 生命周期异常，不能把这一项写成无异常验收。`voiceprint-live.log` |
| 输入框布局 | 发给自己/私聊/群聊，明暗及 1600/760/660 宽度共 12 组；统计在输入框上方，快捷键提示在发送左侧且仅聚焦显示，窄栏自动压缩。`composer-live.log` |
| 图片粘贴 | 合成图片暂存响应；暂存结束自动恢复原光标，无需再点击即可输入，原文保留。未上传真实图片。`paste-live.log` |
| 图文发送状态 | 在真实页面中注入测试任务：三类会话上传状态均位于气泡外下方、右对齐；模拟失败重试进入发送中。没有真实发送。`send-status-live.log` |
| DSH/发给自己悬浮 | 鼠标离开立即关闭；卡片到菜单的间隙可通行，菜单操作仍可用。两者本次测得关闭延迟 0ms。`hover-live.log` |
| @ 已读小勾 | 真实已读明细驱动，明暗均 11×11px，小勾身份正确，未做已读写入。`mention-live.log` |
| 通话详情 | 49 段真实转写，1600/1100 宽度和明暗：无昵称元信息行、时间右下角、没有正文重叠或溢出；可绑定身份使用备注名。`call-live.log` |
| 文件/语音排列 | 真实群消息在 1600/900 宽度和明暗：文件名一行且未截断；语音播放/时长在转写前、图片上方。`rich-live.log` |
| 日历、Markdown 文件 | 发给自己日历加载真实日期条数，暗色背景；真实 Markdown 预览标题、正文、表格及操作按钮明暗可读。`calendar-file-live.log` |
| 截屏入口 | 已登录账号下能力接口成功，`available: true`。这不是 macOS 框选实测。`screenshot-capability.log` |

长文新建/发送、头像悬浮、详情紧凑标题、语音排序及账号切换等边界同时由既有组件/服务测试覆盖。不能把模拟网络测试当作真实发布、真实消息送达或多端同步验收。

## 初次补测发现的回归项（后续状态见下）

1. **DSH 页面卸载后的窗口事件。** 浏览器异常为 `ResizeObserver.position` 读取空 `defaultView.Event`。直接触发点是 `harness-surface-viewport.ts` 的布局回调；`harness-session-hover.ts` 同样存在对失效文档的强制访问。拟在页面失效/监听已释放后停止事件派发并清理引用，补卸载和迟到回调测试。已向用户提出确认，尚未修改。
2. **七项测试与已确认的新行为不一致。** 四项仍寻找私聊/群聊“写长文”并期待直接创建；一项表情复制模拟对所有选择器都返回图片节点；一项发送源码断言误取新增长文分支的停止状态调用；一项旧品牌扫描未涵盖中文录音文件名。已在后续 master 整合中获确认并完成精确同步，没有删除测试或降低验证口径，最终结果见末尾。

## 仍需外部支持或人工实测

- **群 @ 联动私聊列表摘要/红点：尚未实现。** 09:10 刷新 Chat 远程 master 仍为 `60336c85c8c7a4e4d0bdd3153525c0fef06aff76`，和前次核对一致。所缺权威目录摘要及原群已读同步合同详见 [对接需求](private-interaction-directory-handoff.md)。不能用历史互动数量冒充未读。
- **桌面支付：按用户确认仅保留占位提示。** 不是本轮遗漏；真实支付交同事对接，见 [会员对接说明](desktop-membership-handoff.md)。
- **macOS 截屏：** 系统权限、真实框选/取消仍需桌面实测；合成截图回传、焦点恢复、权限失败和超时由测试覆盖。
- **直接长录音：** 已有真实登录页面 + 模拟麦克风的开始/跨页/停止/本地恢复验证，上传全部拦截；真实麦克风音质、真实云端转写、多小时稳定性未验收，见 [录音说明](desktop-direct-recording.md)。
- **通话摘要未知说话人：** 前端只替换可可靠绑定的账号身份；同一端多人的 A/B 标签不能凭昵称猜测，需后端说话人映射或用户标注。
- **真实发送/邀请/支付和跨设备联动：** 本轮未做外部业务写入，不能声称端到端上线验收完成。

## 自动化结果

- 第一轮全量：665 个文件；7,836 通过、12 失败、12 跳过。失败中两项来自本轮已修复的空值错误，三项来自缺少 zstd 的测试环境，另外七项为上述过时测试。
- 使用现有工具链 zstd 后，打包套件 6 项通过。
- 空值修复后已读/发送相关 351 项通过；类型检查、构建、`git diff --check` 通过。
- 最终全量复跑（09:13–09:16）：665 个文件；**7,843 通过、7 失败、12 跳过**，无未处理异常。剩余四个测试文件的七项失败均为上述待同步项；不能把这一结果标为全绿。日志 `full-tests-final.log`。

## 交付

确认修复已构建并只更新固定 3098 隔离插件，源码和预览客户端产物 SHA-256 一致（`f7bea17a006b543e1aa63a3900abc43b86ca4f078aa17578c68aa01f369e31c4`）。更新后浏览器确认仍已登录，截屏能力接口正常。未提交、推送或发布；未更改已安装 Arkme 客户端。

## 后续 master 整合与最终回归（18:45–18:55）

以上浏览器记录为当天较早版本的验证，不等同本节整合版本的真实浏览器验收。

- 已基于最新 `master` 的 `12cee7a75cf5868894e92f259750efe6aaae3bb2`（v0.1.67）整合；保留上游收到长文的鉴权、Markdown/图片回退与本地自己的长文读取能力。
- 获确认后修复长文弹窗缺少上游三个消息字段的类型冲突，并同步长文流程、添加菜单、日历选中态、表情复制、发送状态及精确品牌白名单的旧测试。
- 回归继续发现真实问题：长文选择器离开会话仅隐藏，旧打开状态在返回后再次生效。用户确认后补齐两处清理，不清空待发送长文、文字或附件。
- 定向 6 文件、357 项通过；覆盖私聊/群聊、离开/切换、两种刷新顺序及子编辑器关闭、草稿保留；类型检查与完整构建通过。
- 最终全量：671 文件，663 通过、0 失败、8 跳过；**7,938 项通过、0 失败、12 跳过**（18:52:20 开始，151.72 秒）。原有跳过数量未增加，未删除失败用例。
- 本节没有更新或重启固定 3098 预览，未更换端口、迁移登录、访问钥匙串或修改已安装 Arkme 客户端。此时预览仍是之前部署版本。
- 既有 DSH 页面卸载生命周期问题未在本节修复，真实截屏授权、麦克风、多小时录音、真实发送及跨端状态等验收限制也仍有效。

## 第二栏「添加」按钮的悬停反馈回归

2026-09-20 修复：Arkme 的统一悬停反馈（`redesign/interaction-feedback.css`）是**叠一层 `background-image` 渐变**，不是改 `background-color`。第二栏工具栏的 `.arkme-directory-search-toolbar button[title="添加"]` 用了 `background` **简写**并带 `!important`，简写会把 `background-image` 重置为 `none`，且该选择器优先级高于 `[data-arkme-feedback]`，于是这个按钮的悬停与按下反馈被静默清掉。

该规则最初只命中未登录时的联系人工具栏按钮，`#576` 把选择器改成按 `title="添加"` 命中后，才开始作用于带 `data-arkme-feedback` 的加号按钮。修复为只设置 `background-color`，保留输入框式底色，同时让共享悬停渐变层继续生效。

验证：`tests/interaction-feedback.test.tsx` 用 jsdom 计算样式直接断言该按钮的 `background-image` 仍是共享渐变，并断言规则只使用 `background-color`；把简写改回去该用例会失败。类型检查、完整测试与打包通过。

后续（2026-09-20）：该按钮已按会话输入框的统一控件改为 28×28 圆形加号（官方 `IconPlusOutline16`），底色改由组件内联 `backgroundColor` 声明，`.arkme-directory-search-toolbar button[title="添加"]` 这条本地覆盖规则不再需要并已移除，避免第二处可能重置悬停层的简写。悬停反馈依赖的仍是 `[data-arkme-feedback]` 那层 `background-image` 渐变。
