fix(agent): 取消规格面板强制预滑动,修复 CG68 探测前失败 #238

Open
opened 2026-09-07 21:25:34 +08:00 by ila · 3 comments
Owner

当前状态:代码与 APK 已交付,待验收(2026-09-07)

实现 58a6c1c,Wiki 镜像 7ac1355,分支 fix/238-spec-panel-preswipe 已推送;未合并 main。Android 0.9.60 / 73 APK 已经用户明确授权覆盖安装到 192.168.0.173:42681,版本回读一致;未上传线上,CG68 真机采购未执行。无数据库迁移、线上规则/任务改写或服务重启。下方保留需求、方案与原始验收定义,最终证据见本次交付评论。

来源与目标

2026-09-07 用户反馈线上 CG68 在颜色尺码很少、无需滑动即可全部看到时失败,提示“规则要求的有限滑动失败”。用户确认“按照你的建议建工单,做”。目标:取消采购打开规格面板后的机械预滑动,交由规格探测/精确查找按需有界滚动,不因无必要滚动阻断正常商品。

基线与已核实事实

代码基线 origin/main 9d5242b,Android 0.9.59/72;线上设备及连接手机版本均为 0.9.59。线上部署目录 20260907-29ba16e-236。本次只读核验 CG68 三次 attempt 均 spec_probe/failed,耗时约3.74/4.03/3.26秒,规则哈希相同;主任务 RULE_ACTION_FAILED。
任务快照 openSpecPanel.swipeAfter={direction:up,count:2,durationMs:500,intervalMs:1000}。PurchaseRehearsalExecutor.applyPostAction 在 probeSpecs 前执行该滑动,仅 NON_SCROLLABLE_CONFIRMATION 特判跳过;其他面板无论选项是否可见均滑动。GoAutoAccessibilityService.swipePurchase 从全窗口找滚动控件,返回 false 后统一失败。
事实边界:未获得失败瞬间面板/手势分类日志,不能断言是哪一种底层 false 分支;不保存原始控件树、整屏截图或个人信息。关联 #202 的不可滚动面板兼容,保留 #230/#231 的有界规格查找与面板识别。

方案与范围(本单开始实施)

  1. Android 仅废弃 openSpecPanel 的规则附加 swipeAfter 执行,所有已验证打开的面板一致处理;waitAfterMs 继续生效,规则解析和校验保留以兼容旧快照,既有快照不修改。
  2. 首趟进入原 probeSpecs 遍历,第二趟按原精确 selectSpec 查找。标题、目标未找到仍按现有容器限定、最大次数、稳定终止执行有界滚动,失败仍失败;不放宽精确规格、面板强证据、地址、价格、租约、创建订单和禁止支付边界。
  3. 其他动作的 swipeAfter 仍是必需动作,失败仍 RULE_ACTION_FAILED。增加脱敏日志:跳过原因与动作类型、面板类型;保留必需滑动的失败分类(窗口缺失、容器缺失、无效边界、手势拒绝/取消/超时)。不记录节点文字、坐标、凭据或业务个人数据。
  4. APK 递增版本,执行 Android 回归测试和 APK 构建;本次不安装、不触发采购/重试、不修改线上规则/任务、不重启或发布 Server/Web。无需数据库迁移。若需真机下单验证,另行取得明确授权。

依赖、设计证据与交付单元

Android + 对应共享契约/Wiki;Server/Web 生产代码不变。#202/#230/#231 实现已在基线,无新增实施依赖,不与其他 Android 同文件任务并行。恢复既有采购流程的非 UI 缺陷,不需要交互原型;以上流程为用户已确认建议的具体化。全栈影响:旧 Server/旧快照可向新 APK 下发同一 JSON;旧 APK 保留原行为,必须升级 APK 才生效。

验收与验证

  • 旧快照含强制2次滑动时,普通/不可滚动/确认形态的安全面板直接进入探测或精确选择,不调用全局预滑动,即使该滑动驱动配置为失败。
  • openSpecPanel 后等待保留;规则参数格式校验不弱化;其他 action 必需滑动及失败语义不变。
  • 规格不在首屏时原有横向/纵向有界查找仍执行;目标不存在、歧义或面板证据不足仍失败;大规格/动态行/已选证明/地址/订单既有测试回归。
  • 跳过和真实必需滑动失败日志仅含固定分类与标量,并经现有日志上下文关联task/attempt/device/规则快照。
  • Android 测试、APK 构建、git diff --check、Wiki 镜像检查与提交推送完成;真实 CG68 同商品验证明确标记未执行,不以模拟测试宣称已真机成功。

文档影响与风险

更新 Wiki Business-Rules-and-Glossary、Android-Agent-API-Contract、Architecture-and-Code-Map:说明 openSpecPanel.swipeAfter 从新 APK 起兼容读取但不执行,其他动作不变,按需滚动与脱敏诊断位置。先线上更新/回读 revision,再一次 sync 与 sync --check;不导出工单归档/HTML。
风险:某些旧规则依赖预滑动才能露出规格,须通过现有探测/选择搜索回归验证;未知真机样式继续明确记录。禁止把所有滑动失败一概忽略。
当前未提供 Gitea MCP,回退项目忽略配置的 Gitea API,凭据不输出。本单停在待用户验收,不自动关闭。

## 当前状态:代码与 APK 已交付,待验收(2026-09-07) 实现 58a6c1c,Wiki 镜像 7ac1355,分支 fix/238-spec-panel-preswipe 已推送;未合并 main。Android 0.9.60 / 73 APK 已经用户明确授权覆盖安装到 192.168.0.173:42681,版本回读一致;未上传线上,CG68 真机采购未执行。无数据库迁移、线上规则/任务改写或服务重启。下方保留需求、方案与原始验收定义,最终证据见本次交付评论。 ## 来源与目标 2026-09-07 用户反馈线上 CG68 在颜色尺码很少、无需滑动即可全部看到时失败,提示“规则要求的有限滑动失败”。用户确认“按照你的建议建工单,做”。目标:取消采购打开规格面板后的机械预滑动,交由规格探测/精确查找按需有界滚动,不因无必要滚动阻断正常商品。 ## 基线与已核实事实 代码基线 origin/main 9d5242b,Android 0.9.59/72;线上设备及连接手机版本均为 0.9.59。线上部署目录 20260907-29ba16e-236。本次只读核验 CG68 三次 attempt 均 spec_probe/failed,耗时约3.74/4.03/3.26秒,规则哈希相同;主任务 RULE_ACTION_FAILED。 任务快照 openSpecPanel.swipeAfter={direction:up,count:2,durationMs:500,intervalMs:1000}。PurchaseRehearsalExecutor.applyPostAction 在 probeSpecs 前执行该滑动,仅 NON_SCROLLABLE_CONFIRMATION 特判跳过;其他面板无论选项是否可见均滑动。GoAutoAccessibilityService.swipePurchase 从全窗口找滚动控件,返回 false 后统一失败。 事实边界:未获得失败瞬间面板/手势分类日志,不能断言是哪一种底层 false 分支;不保存原始控件树、整屏截图或个人信息。关联 #202 的不可滚动面板兼容,保留 #230/#231 的有界规格查找与面板识别。 ## 方案与范围(本单开始实施) 1. Android 仅废弃 openSpecPanel 的规则附加 swipeAfter 执行,所有已验证打开的面板一致处理;waitAfterMs 继续生效,规则解析和校验保留以兼容旧快照,既有快照不修改。 2. 首趟进入原 probeSpecs 遍历,第二趟按原精确 selectSpec 查找。标题、目标未找到仍按现有容器限定、最大次数、稳定终止执行有界滚动,失败仍失败;不放宽精确规格、面板强证据、地址、价格、租约、创建订单和禁止支付边界。 3. 其他动作的 swipeAfter 仍是必需动作,失败仍 RULE_ACTION_FAILED。增加脱敏日志:跳过原因与动作类型、面板类型;保留必需滑动的失败分类(窗口缺失、容器缺失、无效边界、手势拒绝/取消/超时)。不记录节点文字、坐标、凭据或业务个人数据。 4. APK 递增版本,执行 Android 回归测试和 APK 构建;本次不安装、不触发采购/重试、不修改线上规则/任务、不重启或发布 Server/Web。无需数据库迁移。若需真机下单验证,另行取得明确授权。 ## 依赖、设计证据与交付单元 Android + 对应共享契约/Wiki;Server/Web 生产代码不变。#202/#230/#231 实现已在基线,无新增实施依赖,不与其他 Android 同文件任务并行。恢复既有采购流程的非 UI 缺陷,不需要交互原型;以上流程为用户已确认建议的具体化。全栈影响:旧 Server/旧快照可向新 APK 下发同一 JSON;旧 APK 保留原行为,必须升级 APK 才生效。 ## 验收与验证 - 旧快照含强制2次滑动时,普通/不可滚动/确认形态的安全面板直接进入探测或精确选择,不调用全局预滑动,即使该滑动驱动配置为失败。 - openSpecPanel 后等待保留;规则参数格式校验不弱化;其他 action 必需滑动及失败语义不变。 - 规格不在首屏时原有横向/纵向有界查找仍执行;目标不存在、歧义或面板证据不足仍失败;大规格/动态行/已选证明/地址/订单既有测试回归。 - 跳过和真实必需滑动失败日志仅含固定分类与标量,并经现有日志上下文关联task/attempt/device/规则快照。 - Android 测试、APK 构建、git diff --check、Wiki 镜像检查与提交推送完成;真实 CG68 同商品验证明确标记未执行,不以模拟测试宣称已真机成功。 ## 文档影响与风险 更新 Wiki Business-Rules-and-Glossary、Android-Agent-API-Contract、Architecture-and-Code-Map:说明 openSpecPanel.swipeAfter 从新 APK 起兼容读取但不执行,其他动作不变,按需滚动与脱敏诊断位置。先线上更新/回读 revision,再一次 sync 与 sync --check;不导出工单归档/HTML。 风险:某些旧规则依赖预滑动才能露出规格,须通过现有探测/选择搜索回归验证;未知真机样式继续明确记录。禁止把所有滑动失败一概忽略。 当前未提供 Gitea MCP,回退项目忽略配置的 Gitea API,凭据不输出。本单停在待用户验收,不自动关闭。
Author
Owner

实现、验证与交付

按用户确认方案完成最小 Android 修复:openSpecPanel 成功后不再执行规则预滑动,waitAfterMs 保留,旧 swipeAfter 仍解析并校验,不更改任务快照。原 probeSpecs 与 selectSpec 的按需横向/纵向有界滚动保持;不修改面板识别器、规格匹配、地址或订单算法。其他动作的必需滑动继续执行,失败仍 RULE_ACTION_FAILED。

新增固定枚举失败分类:unknown/root_unavailable/no_scrollable/invalid_bounds/gesture_unsupported/gesture_rejected/gesture_cancelled/gesture_timeout;共享 swipeNode 只增加可选分类回调,原布尔结果、目标轨迹和1500ms等待不变。GoAutoPurchasePanel 输出跳过原因/面板枚举或失败分类/动作/方向/次数,日志上下文关联 task、attempt、device 和规则快照哈希;不输出原始树、节点文字、坐标、凭据或个人数据。

验证证据

  • 修改前先运行新增2个回归测试:旧实现2项失败,包含可见规格被机械预滑动阻断的复现。修改后通过。
  • PurchaseRehearsalExecutorTest 共84项通过:普通/不可滚动面板在 spec_probe 与 purchase 两阶段不做预滑动,快捷确认/订单确认形态仍可进入探测,等待321ms保留,其他动作2次必需滑动与失败停止保留;全部固定分类日志、旧规则非法count拒绝、横向多规格、纵向隐藏尺码/动态行、精确选中、未知面板等回归通过。
  • 仓库 scripts/verify.ps1 -Component android 最终通过:Debug 326项、Release 326项,均0失败/0错误/0跳过;assembleDebug成功。既有SDK XML版本与废弃/冗余变量编译警告不在本单改动范围。
  • git diff --check、harness check --strict、一轮 Wiki sync + sync --check 通过。Server/Web 未变更,未运行与本单无关的服务端/Web构建。
  • 真机CG68复测、真实系统手势失败分类触发尚未执行;单元测试使用可控驱动/固定无效数据,不冒充真机验证。没有采集原始控件树/整屏截图,没有创建/重试真实采购或付款。

版本与文档

代码 58a6c1c;Wiki 镜像 7ac1355;分支 fix/238-spec-panel-preswipe 已推送,未合并 main。根工作区原有改动保持未动。
APK:Android 0.9.60 / versionCode 73;D:/OPC/goauto-worktrees/issue-238/android/app/build/outputs/apk/debug/app-debug.apk。
SHA256:11e9adb7af582dd57dcd9b09e1a8a1a01dadeaef94bfdee86e40fab5bc571c0e。
Wiki-first 显式保留非空标题,在线回读正文/revision后再同步镜像:

  • Architecture-and-Code-Map:20a1ca65dccde9ca1ecd93419cc1b164a5717fdf
  • Business-Rules-and-Glossary:a53adfd64faa86b21c800bb11ae95aa73833b107
  • Android-Agent-API-Contract:49dec4c35da793a32822a82e00f3b657757b6d44
    不导出任务归档或原型;Gitea MCP不可用,沿用已记录的项目API回退。

待验收与部署边界

安装新APK即可获得本次兼容,不需要迁移、修改线上规则/旧快照或重启Server/Web。当前APK尚未安装或上传线上;安装和CG68同商品采购真机验证待用户明确授权。不能据此宣称CG68已经采购成功。工单保持open,用户验收后再关闭。

## 实现、验证与交付 按用户确认方案完成最小 Android 修复:openSpecPanel 成功后不再执行规则预滑动,waitAfterMs 保留,旧 swipeAfter 仍解析并校验,不更改任务快照。原 probeSpecs 与 selectSpec 的按需横向/纵向有界滚动保持;不修改面板识别器、规格匹配、地址或订单算法。其他动作的必需滑动继续执行,失败仍 RULE_ACTION_FAILED。 新增固定枚举失败分类:unknown/root_unavailable/no_scrollable/invalid_bounds/gesture_unsupported/gesture_rejected/gesture_cancelled/gesture_timeout;共享 swipeNode 只增加可选分类回调,原布尔结果、目标轨迹和1500ms等待不变。GoAutoPurchasePanel 输出跳过原因/面板枚举或失败分类/动作/方向/次数,日志上下文关联 task、attempt、device 和规则快照哈希;不输出原始树、节点文字、坐标、凭据或个人数据。 ### 验证证据 - 修改前先运行新增2个回归测试:旧实现2项失败,包含可见规格被机械预滑动阻断的复现。修改后通过。 - PurchaseRehearsalExecutorTest 共84项通过:普通/不可滚动面板在 spec_probe 与 purchase 两阶段不做预滑动,快捷确认/订单确认形态仍可进入探测,等待321ms保留,其他动作2次必需滑动与失败停止保留;全部固定分类日志、旧规则非法count拒绝、横向多规格、纵向隐藏尺码/动态行、精确选中、未知面板等回归通过。 - 仓库 scripts/verify.ps1 -Component android 最终通过:Debug 326项、Release 326项,均0失败/0错误/0跳过;assembleDebug成功。既有SDK XML版本与废弃/冗余变量编译警告不在本单改动范围。 - git diff --check、harness check --strict、一轮 Wiki sync + sync --check 通过。Server/Web 未变更,未运行与本单无关的服务端/Web构建。 - 真机CG68复测、真实系统手势失败分类触发尚未执行;单元测试使用可控驱动/固定无效数据,不冒充真机验证。没有采集原始控件树/整屏截图,没有创建/重试真实采购或付款。 ### 版本与文档 代码 58a6c1c;Wiki 镜像 7ac1355;分支 fix/238-spec-panel-preswipe 已推送,未合并 main。根工作区原有改动保持未动。 APK:Android 0.9.60 / versionCode 73;D:/OPC/goauto-worktrees/issue-238/android/app/build/outputs/apk/debug/app-debug.apk。 SHA256:11e9adb7af582dd57dcd9b09e1a8a1a01dadeaef94bfdee86e40fab5bc571c0e。 Wiki-first 显式保留非空标题,在线回读正文/revision后再同步镜像: - Architecture-and-Code-Map:20a1ca65dccde9ca1ecd93419cc1b164a5717fdf - Business-Rules-and-Glossary:a53adfd64faa86b21c800bb11ae95aa73833b107 - Android-Agent-API-Contract:49dec4c35da793a32822a82e00f3b657757b6d44 不导出任务归档或原型;Gitea MCP不可用,沿用已记录的项目API回退。 ### 待验收与部署边界 安装新APK即可获得本次兼容,不需要迁移、修改线上规则/旧快照或重启Server/Web。当前APK尚未安装或上传线上;安装和CG68同商品采购真机验证待用户明确授权。不能据此宣称CG68已经采购成功。工单保持open,用户验收后再关闭。
Author
Owner

真机覆盖安装完成(2026-09-07)

用户明确授权安装到 192.168.0.173:42681。安装前设备在线、runtime state=ONLINE,无 current_task_id;原版本0.9.59/72。APK SHA256与交付一致,apksigner校验通过。adb install -r 返回Success,安装后dumpsys回读0.9.60/versionCode73。未卸载、未清数据,未更改服务端配置、规则或任务状态,未主动启动App/重试采购或执行下单。安装完成不等于CG68采购验收通过;工单继续open待验收。无新长期事实变化,不重复同步Wiki。

## 真机覆盖安装完成(2026-09-07) 用户明确授权安装到 192.168.0.173:42681。安装前设备在线、runtime state=ONLINE,无 current_task_id;原版本0.9.59/72。APK SHA256与交付一致,apksigner校验通过。adb install -r 返回Success,安装后dumpsys回读0.9.60/versionCode73。未卸载、未清数据,未更改服务端配置、规则或任务状态,未主动启动App/重试采购或执行下单。安装完成不等于CG68采购验收通过;工单继续open待验收。无新长期事实变化,不重复同步Wiki。
Author
Owner

2026-09-08 按用户明确请求覆盖安装到指定真机。安装前版本 0.9.44/57,无本地 active task;使用已验证 #238 APK(源码 58a6c1c,SHA256 11e9adb7af582dd57dcd9b09e1a8a1a01dadeaef94bfdee86e40fab5bc571c0e),adb install -r 返回 Success;安装后包管理器回读为 0.9.60/versionCode 73。未卸载或清除数据,未启动采集/采购、创建订单或付款。本次只证明安装成功,不替代业务真机验收;工单保持打开。

2026-09-08 按用户明确请求覆盖安装到指定真机。安装前版本 0.9.44/57,无本地 active task;使用已验证 #238 APK(源码 58a6c1c,SHA256 11e9adb7af582dd57dcd9b09e1a8a1a01dadeaef94bfdee86e40fab5bc571c0e),adb install -r 返回 Success;安装后包管理器回读为 0.9.60/versionCode 73。未卸载或清除数据,未启动采集/采购、创建订单或付款。本次只证明安装成功,不替代业务真机验收;工单保持打开。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#238