fix(android): 去除规格选项外层与内部节点重复解析 #332

Open
opened 2026-09-22 09:37:36 +08:00 by ila · 2 comments
Owner

来源

#331 审核时发现,采购任务 535(SYB 260918CRGHU5JD,PDD 商品 8910,设备 8)在规格已选中的情况下仍报 PURCHASE_SPEC_SELECTION_UNCONFIRMED。

已确认根因

脱敏控件树经 Agent PddScreenParser 解析后,同一颜色选项块被计为两个值:外层可点击块文字“兰条纹”和内部文字“兰条纹\n零差评”同时标记为 selected。精确选中逻辑因此认为存在另一个已选颜色,判定目标未精确选中。该问题独立于规格面板等待和地址返回。

目标

同一规格选项块只解析一次,避免外层容器和内部 TextView 重复计数,同时保持精确规格匹配,不猜测相近候选。

实施范围

  • 修改 Android Agent 规格选项解析:同一可点击选项块优先使用外层 label;外层无文字时才读取内部文字。
  • 保留选中状态和目标规格精确比较。
  • 暂不做“零差评/快抢光”等标签清洗,除非新增真实样本证明外层 label 本身污染规格值。
  • 诊断输出脱敏后的候选值、selected 状态和目标值,限制长度,不包含地址、订单和账号信息。

非目标

  • 不修改规格面板识别、地址保存返回等待(见 #331)。
  • 不修改服务端规格匹配、采购规则、地址流程、下单和付款行为。
  • 不使用 OCR/VLM,不保存原始控件树或整屏截图。

验收

  • 535 脱敏样本中颜色只解析为“兰条纹”“白条纹”两个值,目标“兰条纹”可确认选中。
  • 只有内部文字、没有外层 label 的选项仍可正常解析。
  • 外层和内部文字重复时不产生两个候选或两个 selected 值。
  • 既有颜色/尺码精确选择和最终复核测试无回归。
  • Android 全量单元测试通过;真机验证需单独授权,不执行付款。

风险与文档

这是 Android 采购规格选择逻辑变化,属于高风险范围;实施前需要人工授权。若仅改变本地解析,不涉及服务端 API;长期规则变化时更新业务规则/架构 Wiki。

## 来源 #331 审核时发现,采购任务 535(SYB `260918CRGHU5JD`,PDD 商品 8910,设备 8)在规格已选中的情况下仍报 `PURCHASE_SPEC_SELECTION_UNCONFIRMED`。 ## 已确认根因 脱敏控件树经 Agent `PddScreenParser` 解析后,同一颜色选项块被计为两个值:外层可点击块文字“兰条纹”和内部文字“兰条纹\n零差评”同时标记为 selected。精确选中逻辑因此认为存在另一个已选颜色,判定目标未精确选中。该问题独立于规格面板等待和地址返回。 ## 目标 同一规格选项块只解析一次,避免外层容器和内部 TextView 重复计数,同时保持精确规格匹配,不猜测相近候选。 ## 实施范围 - 修改 Android Agent 规格选项解析:同一可点击选项块优先使用外层 label;外层无文字时才读取内部文字。 - 保留选中状态和目标规格精确比较。 - 暂不做“零差评/快抢光”等标签清洗,除非新增真实样本证明外层 label 本身污染规格值。 - 诊断输出脱敏后的候选值、selected 状态和目标值,限制长度,不包含地址、订单和账号信息。 ## 非目标 - 不修改规格面板识别、地址保存返回等待(见 #331)。 - 不修改服务端规格匹配、采购规则、地址流程、下单和付款行为。 - 不使用 OCR/VLM,不保存原始控件树或整屏截图。 ## 验收 - 535 脱敏样本中颜色只解析为“兰条纹”“白条纹”两个值,目标“兰条纹”可确认选中。 - 只有内部文字、没有外层 label 的选项仍可正常解析。 - 外层和内部文字重复时不产生两个候选或两个 selected 值。 - 既有颜色/尺码精确选择和最终复核测试无回归。 - Android 全量单元测试通过;真机验证需单独授权,不执行付款。 ## 风险与文档 这是 Android 采购规格选择逻辑变化,属于高风险范围;实施前需要人工授权。若仅改变本地解析,不涉及服务端 API;长期规则变化时更新业务规则/架构 Wiki。
Author
Owner

实施状态(2026-09-22)

本单代码已在 fix/331-spec-panel-recognition 的 99f2384 中与 #331 一起实现,正在拆为单独提交(引用 #332)。审核人已用 535 真实样本在该分支验证:颜色解析为 兰条纹(已选)、白条纹 两个值,尺码不变。#331 的验收依赖本单,建议本单先合并或两单同批合并。

## 实施状态(2026-09-22) 本单代码已在 `fix/331-spec-panel-recognition` 的 `99f2384` 中与 #331 一起实现,正在拆为单独提交(引用 #332)。审核人已用 535 真实样本在该分支验证:颜色解析为 `兰条纹`(已选)、`白条纹` 两个值,尺码不变。#331 的验收依赖本单,建议本单先合并或两单同批合并。
Author
Owner

合并与部署(2026-09-22,用户授权“合并#331,#332,#333,部署”)

  • main:0edc78a(#332)→ d8382e6(#331)→ 3bf428a(#333,由 0ab5a96 cherry-pick)→ 36810f3(Android 版本号 0.9.60 / versionCode 73)。
  • Server:从 3bf428a 构建 linux/amd64,SHA-256 01f59582cc037b2d9d5cd0ce0e9f7cbcaa57c4ba38d9f6f6eefcfc588a88a9b8;新发布目录 /home/goauto/releases/20260922-3bf428a-331-333(config/dist 复制自上一发布 20260922-5e0a9d1-328-330,本批无 Web 改动;static/var 链接沿用上一发布);current 原子切换,goauto.service active,外部首页/健康检查 HTTP 200,未认证管理接口 401,重启后日志无 panic/fatal/1146/1054。发布前采购/采集运行中任务均为 0。回滚目标:20260922-5e0a9d1-328-330。
  • Android:debug APK(commit 36810f3,0.9.60/73,SHA-256 c39569f92fc94cbc91f98489c25a5a860bcaff3de91b06518b895195d39e4877)已安装到设备 8(采购1,192.168.0.173:34581),安装前该设备无待执行/运行任务;启动 Agent 后心跳恢复,服务端显示 online、agent_version 0.9.60。
  • 未做:设备 7(采购2)当时 offline,未安装;APK 未上传到 Admin Agent 版本;Wiki 尚未更新;#333 线上采购员选设备效果、#331/#332 真机采购效果均未验证。
## 合并与部署(2026-09-22,用户授权“合并#331,#332,#333,部署”) - **main**:`0edc78a`(#332)→ `d8382e6`(#331)→ `3bf428a`(#333,由 `0ab5a96` cherry-pick)→ `36810f3`(Android 版本号 0.9.60 / versionCode 73)。 - **Server**:从 `3bf428a` 构建 linux/amd64,SHA-256 `01f59582cc037b2d9d5cd0ce0e9f7cbcaa57c4ba38d9f6f6eefcfc588a88a9b8`;新发布目录 `/home/goauto/releases/20260922-3bf428a-331-333`(config/dist 复制自上一发布 `20260922-5e0a9d1-328-330`,本批无 Web 改动;static/var 链接沿用上一发布);`current` 原子切换,`goauto.service` active,外部首页/健康检查 HTTP 200,未认证管理接口 401,重启后日志无 panic/fatal/1146/1054。发布前采购/采集运行中任务均为 0。回滚目标:`20260922-5e0a9d1-328-330`。 - **Android**:debug APK(commit `36810f3`,0.9.60/73,SHA-256 `c39569f92fc94cbc91f98489c25a5a860bcaff3de91b06518b895195d39e4877`)已安装到设备 8(采购1,192.168.0.173:34581),安装前该设备无待执行/运行任务;启动 Agent 后心跳恢复,服务端显示 online、agent_version 0.9.60。 - **未做**:设备 7(采购2)当时 offline,未安装;APK 未上传到 Admin Agent 版本;Wiki 尚未更新;#333 线上采购员选设备效果、#331/#332 真机采购效果均**未验证**。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#332