feat: release 2.2.0 with PC-only tests and execution reliability fixes

Unify task scheduling and queue state, fix Android input and observation recovery, preserve screenshot paths, and match final review criteria accurately. Add collapsible copyable results and publish the complete 2.1.0 upgrade notes. Validation: 3189 backend tests, 326 frontend tests, 24 client tests, production build and quality gates.
This commit is contained in:
chenmingxuan committed 2026-10-27 01:13:41 +08:00
1 parent fac4ccb760
commit be6e8c2abd
79 files changed
+2263 -277

No files matched your search

+119
View File
@@ -0,0 +1,119 @@
# 开发主线:2026-10-26 会话接续
本次依据用户提供的上一会话完整记录,并核对两个仓库及 CUA 隔离工作树。本文是当前接续入口;此前实现过程与验证见[上一阶段主线](2026-10-25-mainline.md),最终变更清单见[2.2.0 发行说明](../releases/2.2.0.md)。
## 迁入时核实的开发基线
| 范围 | 迁入时状态 |
| --- | --- |
| 主程序 | `main`,HEAD 为 `fac4ccb76075b3360b11053ecb0e33ade9d94a61`,提交信息为 `feat: prepare 2.2.0 with UI and execution fixes`;相对本地 `eapil/main` 跟踪引用领先 1 个提交。已跟踪文件无修改,仅有未跟踪的 `.angular/` 缓存。 |
| 版本与交付 | 主程序及前端版本为 2.2.0;上一会话已完成本地提交,记录为未推送、未打标签、未发布源码包。本次未刷新远端,HEAD 没有本地标签。 |
| 插件主目录 | `main` 为 `757b829`,相对本地 `origin/main` 领先 4 个、落后 7 个提交;有原有已修改及未跟踪文件,不能作为发布现场直接合并或整体提交。 |
| CUA 隔离工作树 | 分支 `codex/cua-shell-observation`,HEAD 为 `dccddaa`;候选 `0.38.0+artemis.1` 的源码、测试和文档仍为未提交改动,市场尚未发布该候选。 |
| 已安装插件 | 上一会话记录本机已安装并启用此 CUA 候选;本次未查询运行服务或重新核验实际安装,不由仓库版本推定运行状态。 |
以上分叉计数均来自本地跟踪引用,属于此次接续快照。
## 已完成内容与持续约束
上一阶段 P1、P2 和已确认的 P3 均已实现:Markdown 与暗色模式、Flash 开关即时保存、真实输入与目标证据、模型响应完整性、启动恢复、取消与请求诊断、生命周期与指导回执、证据来源及 MCP/HTTP 协议改进。具体行为以发行说明和当前源码为准,不重复列为待开发功能。
用户明确要求移除的次数配额、自然语言约束编译、提交内容指纹和 AI 二次动作否决已完整撤回。旧计划中相关修复与较高测试数量属于历史过程,不代表当前机制。后续不恢复该机制,也不增加替代审批层。模型依据用户任务原文、指导、观察和历史遵守次数及禁止要求;资源锁、既有工具参数与插件授权校验、暂停取消和真实工具错误处理继续保留。
保护现有配置、历史任务及两个仓库的开发现场;模型请求重试不自动重放业务动作。运行中的服务是否加载新代码需独立核对,不能由源码版本或旧构建记录推定。下一次正常重启后再核验后台行为,不因迁移会话而停止任务或重启服务。
## 后续工作与验收缺口
1. **主程序外部验收。** 在明确的设备和业务范围内,以新任务核对首次输入与发送、审批动作、Flash 最终判定设置、暂停及新指导、响应与超时诊断、报告来源。保留原失败任务和结论,将新任务证据与确定性回归分开记录。
2. **独立 CUA 候选收尾。** 在隔离工作树核对最终源码、补丁、包内构建来源、版本及校验值,按插件仓库指南完成所需回归,再单独整理提交与发布范围。原业务流程、其他托盘应用、多屏和 DPI 组合仍有未测范围;主程序升级不会自动升级插件。
3. **2.2.0 发布。** 主程序已有本地提交;后续推送、标签与源码包按发布任务推进,分别核对远端提交、交付范围及实际验证。插件候选不能夹带进入主程序发布。
4. **后续产品候选。** 素材准备句柄、跨次任务取代关系仍属待明确需求,尚未排为本轮实现;不据此自动扩展调度、状态存储或历史结论覆盖行为。
## 验证记录的使用
上一阶段最终记录为:撤回机制后默认后端 **3063 项通过、2 项跳过、8 项排除**,专项 **38 项通过**;Ruff 两项、质量基线及核心类型检查通过。升版后启动与打包等专项 **44 项通过**,前端 **317 项通过**、生产构建通过。CUA 候选另有 Go 检查及隔离桌面验证,详见插件自身记录。
以上是上一会话的验证结果。本会话新增修复与验证见下节;未执行设备业务任务或调用付费模型。
## 本会话修复:动作卡片复制与离线诊断
用户反馈任务 `58b6b4cc-5dbe-49dd-9b46-187d37e2339e` 的 `Pixel verification failed`。日志显示实时截图连续失败,后续明确出现 `device offline`,用户也已确认设备离线;该次点击没有下发。保留原任务与历史记录,不自动重跑。
- 共用的动作卡片允许选择文字,可复制目标、参数、错误和 `ATTEMPTS` 等内容;拖选标题不会触发展开/收起,普通点击继续切换。已在实际工作区页面拖选“点击元素”并通过 Ctrl+C 验证复制内容,卡片保持展开。
- 像素校验无法完成时使用 `pixel_verification_unavailable`,保留截图、超时或模型解析的具体错误。观察不可用不再误归为目标消失,也不缓存为被拒绝的目标;实际识别出目标消失时仍使用原分类。既有校验与重试次数保持不变。
- 前端生产构建已由运行服务加载并验证;后台服务未重启,后端诊断调整在下一次正常重启后生效。
本次验证:默认后端回归 **3063 项通过、6 项跳过、8 项排除**;定向后端回归 **50 项通过**;前端 **320 项通过**、生产构建通过。Ruff 格式与静态检查、质量基线、核心类型检查及 `git diff --check` 均通过。后端回归仍有 Pillow `getdata()` 的弃用警告;本次未执行设备业务复测。
## 本会话新增:仅 PC 测试
- 首页输入区新增符合主题的“仅 PC”勾选项,默认关闭;Flash、Pro、探索共用 `execution_target="computer"`。开启后标题、提示和插件列表切换为电脑,不再因 Android 离线、锁屏或 ADB 工具未就绪阻止提交;运行时、模型和授权的电脑观察插件仍必需。
- 复用现有后台任务队列、固定插件版本和桌面资源锁。MCP 的任务追踪统一绑定 `computer:local`,忽略传入的离线手机;批量“任务配置(JSON)”使用 `{"execution_target":"computer"}`,模板说明页补充例子,未增加会被意外执行的示例用例。
- 远程 Python SDK 的 `submit/run` 和兼容 `Task` 支持 `execution_target`;修正 `options` 对应的 HTTP 字段为 `runtime_overrides`,仅 PC 不携带客户端保存的手机序列号。MCP 离线工具目录同步工具说明,工具名称和白名单未改动。
- 实际网页验证 Android 离线时勾选后执行按钮可用、取消后恢复阻塞,电脑插件筛选正常、控制台无错误;未提交真实任务或调用模型。前端新构建已加载,后台和 MCP 后端代码需在下一次正常重启后完整加载,本轮未重启服务。
合并前述修复后的最新验证:默认后端 **3072 项通过、6 项跳过、8 项排除**;前端 ChromeHeadless **326 项通过**,生产构建通过;Ruff 格式与静态检查、质量基线、核心类型检查、差异空白检查均通过,10 份变更文档的 67 个本地链接有效。后端保留 102 条既有 Pillow 弃用警告。未执行真实 PC 或 Android 业务用例,不将网页提交可用或确定性回归等同于端到端验收。
## 本会话后续修复:截图坐标、串行与观测恢复
- 像素校验按每张编码截图的尺寸换算原生设备坐标,红点及拒绝缓存裁剪使用同一转换;保留实际派发坐标,方向变化时要求重新观察。
- 2.2.0 固定所有目标串行执行,统一调度与原子共享执行锁覆盖网页、MCP、批量 JSON、CLI 和 SDK。旧并行参数保留兼容接收但不能启用并行;队首等待资源时不允许后续任务越过。保留同任务嵌套持锁、暂停释放和恢复排队。
- 观测预算传入 Helper 回退和 UIAutomator2 同步线程,启动等待与重试共用期限;退出后阻止后续恢复,清理并丢弃迟到连接,超时保留阶段和最近错误。
- 第57步失败前 Helper、UIAutomator2 和 ADB 截图均失去响应;连接在收尾期间才恢复。模拟器窗口运行不等于观测服务正常,最初卡顿的设备端原因未确认,不归为已证实离线或应用缺陷。
- RESULT 默认折叠、全文限高滚动与可复制已完成并在前一轮浏览器验证。本轮按用户要求暂缓 CUA 鼠标问题,等待复现。
本轮实际验证:默认后端 **3095 项通过、2 项跳过、8 项排除**,独立远程 SDK **24 项通过**;Ruff 格式与静态检查、质量基线、核心类型检查均通过,保留102条既有Pillow弃用警告。前端沿用上一轮326项测试及构建记录,本轮未再修改前端。未重启服务、未重跑设备业务任务、未提交或发布;完整加载后台修复需下一次正常重启。
## 后续实测发现与修复:Pro 收尾空转
后续真实测试中,安卓输入和清空均已完成,但普通 Pro 没有从内部工具循环及时返回最终验收;完成说明仍被当成缺少工具调用而继续恢复。另有局部 `update_note` 的 replacement 夹带 target 范围之外的后续里程碑,产生重复待办。这里的失败不能归因于手机离线。
- 普通 Pro 的完整计划可以直接返回既有收尾流程,包括最后一次允许的辅助工具调用;完成说明不再强制转成设备动作。未完成子任务、持续循环、新指导和验收反馈保留各自处理规则,探索仍需交付报告,执行完成不直接成为通过结论。
- Operator 的三种计划写入共用重复顶层里程碑检查;若同名项数量新增或增加,撤销写入并返回工具错误,提示修正替换范围。已有重复项可以减少或整理,正常状态更新不受影响。
- 本轮确定性验证:专项 **103 项通过**;默认后端 **3112 项通过、2 项跳过、8 项排除**,仍为102条既有Pillow弃用警告。Ruff 两项、质量基线、核心类型检查通过。
- 本次修复后尚未执行设备复测,也未重启服务、提交或发布。上一轮浏览器精确大小写断言失败和历史筛选期间使用旧坐标的问题,不据此归为已确认的产品代码缺陷;RESULT 交互的真实任务复测仍未完成。CUA 鼠标跟随问题继续按用户要求等待复现。
## 后续实测修复:输入清空与结果判定
- 旧全量清空依赖全选后固定 21 次退格;23 字符测试串在全选未生效时剩下 `AR`。已统一使用控件清空接口,清空失败停止后续输入,空文本不再触发粘贴;回执丢失不跨后端重复派发清空。
- Pro、Flash 按意图核对新鲜控件状态:输入要求 `present`,空文本替换要求 `empty`,未知状态不判成功。状态确认不等于最终业务通过。
- 实测进一步定位 Helper 的焦点节点选择错误:键盘窗口的不可编辑聚焦容器排在应用输入框之前。Helper 1.2.3(versionCode 9)跳过不可编辑、不可用或不可见的聚焦节点;源码、APK 与校验清单同步构建,模拟器已实际加载新版。
- Pro 实测首次清空成功,记录 `input_verification=empty`;正式验收为 5 项通过、1 项未验证,原因是禁止发送等断言未产出判定,不覆盖原结果。计划未同步时仍发生两次额外点击,随后将恢复提示改为先核对并同步计划、禁止为凑工具调用追加点击;该提示尚未再次进行 Pro 设备复跑。
- Flash 独立实测完整通过:点击、输入、截图、首次清空、截图、报告后进入最终验收;未追加点击,队列恢复空闲。8 次模型请求全部为 `gpt-6-luna / high`,没有注入指导。
- 最终确定性验证:默认后端 **3145 项通过、2 项跳过、8 项排除**;输入专项 **105 项通过**;Helper 构建后相关回归 **81 项通过**。Ruff 两项、质量基线、核心类型检查和差异空白检查通过;保留 102 条既有 Pillow 弃用警告。未重启主服务、未提交或发布。
## 补充实测:Pro 输入与收尾
用户要求继续实测后,Pro 独立回归正式验收通过:6 项通过、0 项失败、0 项未验证,约 217 秒完成。Helper 为 1.2.3,26 次请求均为 `gpt-6-luna / high`,没有请求重试或中途指导注入。完整输入、首次清空和两张截图均有实际证据;清空后只整理笔记与读取历史证据,没有追加点击或输入,队列恢复空闲。
本轮正常同步计划并收尾,没有触发此前的无工具调用恢复分支,因此记录为本轮未复现,不推断已穷尽所有计划不同步场景。本轮未修改程序代码、未重跑单元测试,保留之前任务的原结论。
## 集中回归及回执、证据引用修复
集中回归正式用例 9/9 通过,覆盖安卓三轮输入清空、暂停/恢复、PC 接续、安卓/PC/跨端各两轮,以及最终只读连接复检;针对性自动化检查 313 项通过。全部 224 次模型请求为 `gpt-6-luna / high`,包含探索准备 33 次和正式用例 191 次;一次请求因计划内暂停取消,没有请求重试或正式任务指导注入。探索准备另有 1 项范围约束失败(读取原 Brave 页面),原结果保留,不计入正式用例通过数。
用户随后要求修复回归发现的两个问题:
- MCP 在派发前标记 `pending`,收到入队回执后不再强行覆盖为 `running`;返回调度器任务状态,并优先保留工作进程已经写入的新状态。丢失回复后的队列补查使用相同规则。工具说明和离线目录同步注明排队状态及全局串行。
- Android 文件工具和笔记参数明确要求原样引用成功回执的 `trace_path`。新增笔记写入校验:当任务根目录的绝对文件引用不存在、但任务 `artifacts/` 中有同名文件时,拒绝本次写入并列出候选真实路径,供模型核对回执后修正;不自动移动文件或猜选同名证据。覆盖保存、追加、局部更新;已有根目录文件及没有同名证据的未来路径不按此规则拒绝。
- 原安卓三轮笔记的 5 条遗漏目录路径已只读复核,均能检出,原始笔记未更改。新增端到端工具测试验证截图一次后,错误笔记写入被拒绝、按回执路径重写成功,无需重新截图或执行设备动作。
- 修复后默认测试 **3162 项通过、2 项跳过、8 项排除**,保留 102 条已有 Pillow 警告;Ruff、格式、质量基线、核心类型和差异空白检查通过。
- 运行中的 ARTEMIS/MCP 未重启,修复后的真实任务尚未复测;下次正常重启/重连加载代码后再验收实时行为。历史回归成绩不冒充本次修复后实测。
## 用户重启后的实测与状态补修(10 月 26 日晚至 27 日凌晨)
- 截图路径校验已在真实 Pro 任务中触发:遗漏目录的引用被拒绝,使用成功回执完整路径后保存及追加成功;5 张截图的文件、笔记路径与 SHA-256 核对一致。负向测试中一次 Android 文件工具参数误用被拒绝,另有说明文字引用错误路径而再次被拒绝;这些实际过程均保留。
- 实测发现入队改为 pending 后,执行进程未将 MCP 状态更新为 running。现由工作进程取得资源、写入 running 控制状态时同步推进已有状态文件;锁内只允许 pending → running,避免迟到更新覆盖取消或终态。新工作进程已实际加载补丁;MCP 观察到 C running / D pending,随后 C completed / D running,最终均 completed,时序无重叠。
- 本轮四个真实任务正式结果为 **3 passed、1 inconclusive**。最后一个用例将提示中的排队说明误解为需要从手机观察队列,补充一次 MCP 调度证据后完成截图;指导已消费,不能记为无指导通过。
- 新发现尚未修复:最后用例的 Checker 将 `[verify] (on_complete)` / `[assert] (at_end)` 展示前缀写进 item_text,原文精确匹配未识别已覆盖项,同一三条要求被补为未验证。原始结论保持 3 项通过、3 项未验证,没有人工改判或自动重跑。
- 本轮共 61 次模型请求,均为 `gpt-6-luna / high`、completed,无请求重试;最终队列空闲、设备在线且未占用,未操作电脑。详细原始记录与审计保存在本地 artifacts/regression-fixes-20261026/live-results.md。
- 最新专项 85 项通过;完整默认测试 **3168 项通过、2 项跳过、8 项排除**,仍为 102 条已有 Pillow 警告;Ruff、格式、质量基线、核心类型及差异空白检查均通过。未提交或发布。
## 验收项展示标签匹配修复(10 月 27 日)
用户要求修复上述新增问题后,Checker 在完整 JSON 直接复用和结构化结果归一化两条路径中,共用本轮检查项展示标签的精确映射。仅还原本轮实际生成的 `[kind] (when)` 标签及可选列表符号;正文、类型或时点不同不模糊匹配,字面正文优先,已有失败和矛盾证据不丢弃。模型输出字段说明同步要求只返回检查正文。
- 原失败场景的三条模型结论只读复核后恰好匹配三个原检查项,不再额外产生未验证项;旧 ledger 未改写,历史正式结论保持原样。
- 新安卓 Pro 实测任务 `0cacbe39-4fe3-4995-bc2a-d7a034b28a27` 正式通过:3 项通过、0 项失败、0 项未验证。截图、笔记路径和 SHA-256 核对一致。11 次模型请求均为 `gpt-6-luna / high`、completed,无请求重试、无中途指导;新工作进程已加载修复。
- 针对性测试 74 项通过;最新默认测试 **3189 项通过、2 项跳过、8 项排除**,102 条已有 Pillow 警告。Ruff、格式、质量基线、核心类型及差异空白检查通过。
- 最终队列空闲、安卓在线且未占用。详细验证及边界见本地 artifacts/checker-label-fix-20261027/results.md;未提交或发布。