2026-09-21,线上同款 PDD 商品在设备 7、8 上多次出现 PURCHASE_SPEC_PANEL_EVIDENCE_NOT_MATCHED;保存收货地址后又出现规格面板无法恢复或过早判定失败。目标是提高规格面板识别和地址保存返回后的稳定性,不放宽真正下单按钮的安全判断。
PURCHASE_SPEC_PANEL_EVIDENCE_NOT_MATCHED
summary=false
orderAction=false
这是采购页面识别变化,属于高风险范围;实施前需要人工授权,真机采购验证不得执行付款。长期识别规则变化后更新业务规则与架构 Wiki;无 API 变化则不修改 Agent API 契约。
与 #332 可分别实施;建议先完成本单的识别与等待,再验证 #332 的规格选择确认。
用户用 uiautomator2 导出 PDD 商品页控件树时,连接后不等待直接导出数据不全,需要等几秒。
PurchaseLiveAutomation.kt
waitForStableAddressEditorExit
isPurchaseConfirmationPanel
driver.backPurchase()
waitFor
PURCHASE_ADDRESS_SAVE_TIMEOUT
面板已返回但尚未加载完整时,第 2 步认不出,第 3 步按返回键可能把规格面板关闭,导致后续一直等不到而报错。线上该错误 7 次中可能有一部分属于此情况;需要失败现场的结构化诊断证实。
waitForSpecPanel
仍属采购流程,高风险,实施前需人工确认;真机验证另行授权。
任务 535(SYB 260918CRGHU5JD,PDD 商品 8910,设备 8)失败:PURCHASE_SPEC_SELECTION_UNCONFIRMED“无障碍点击和受控手势后未能确认精确选中状态”。服务端下发(ai_match):颜色 兰条纹,尺码 2XL建议130-150斤。该报错来自首次选规格(selectExactSpecWithRetry),不是地址返回后的最终复核。
260918CRGHU5JD
PURCHASE_SPEC_SELECTION_UNCONFIRMED
兰条纹
2XL建议130-150斤
selectExactSpecWithRetry
xml_data/
PddScreenParser.parse
兰条纹\n 零差评
白条纹
isExactSpecSelected
otherSelected=true
同一样本解析为 specPanelOpen=false、type=UNKNOWN、selectedSummary=null:选中后摘要为 #快抢光#兰条纹 2XL建议130-150斤(无“已选/请选择”前缀),底部为 提交订单 ¥23.99。说明本单“规格面板识别”问题在该商品选中后状态同样存在。
specPanelOpen=false
type=UNKNOWN
selectedSummary=null
#快抢光#兰条纹 2XL建议130-150斤
提交订单 ¥23.99
采购流程判定变化,高风险,实施前需人工确认;真机验证另行授权。
范围已拆分:#331 仅处理规格面板识别和保存地址后的稳定等待。规格选项外层节点/内部文字重复解析导致颜色或尺码确认失败的问题已单独建立 #332;两单分别测试和验收。
规格重复解析已拆分为新工单 #332,请按新工单单独实施和验收。
本地验证(分支 fix/331-spec-panel-recognition 提交 99f2384,用 Agent 真实解析代码解析 8910 样本):main 上该面板为 UNKNOWN,分支上可识别;部分原因是 #332 的选项去重让规格维度解析正确。因此“与 #332 可分别实施”不完全成立:#331 的验收在 #332 合并之后进行(或两单同批合并)。
fix/331-spec-panel-recognition
99f2384
UNKNOWN
99f2384 同时包含 #331(识别、等待、提交步骤收紧、诊断)与 #332(选项去重、选中失败诊断)。按“提交只含当前工单内容”,重新整理为两个提交,分别引用 #331、#332。
当前实现只检查页面上是否存在“带打码手机号的可点击行”“带支付关键词的可点击行”“唯一数量输入框”,未校验三者属于同一规格面板容器。需补:三项必须位于同一面板容器(同一浮层/窗口内),并补“地址/支付节点来自其他页面或弹窗”的反例测试。
采购用 Android 手机必须事先:PDD App 已登录、微信已登录、PDD 已设置默认收货地址、PDD 默认支付方式为微信支付。规格面板的地址入口、支付入口依赖此前提。
本单验收要求设备 7、8 的真实规格面板样本;目前只有另外三台手机的样本(4d8258ec、R28M30T2JWE、192.168.0.173:34581 的 8910),8580 在设备 7/8 上的样本尚未导出,该验收项暂未满足。需采购员配合在设备 7 或 8 上打开 8580 规格面板后导出(只读,不改设备状态)。
4d8258ec
R28M30T2JWE
192.168.0.173:34581
0edc78a
d8382e6
3bf428a
0ab5a96
36810f3
01f59582cc037b2d9d5cd0ce0e9f7cbcaa57c4ba38d9f6f6eefcfc588a88a9b8
/home/goauto/releases/20260922-3bf428a-331-333
20260922-5e0a9d1-328-330
current
goauto.service
c39569f92fc94cbc91f98489c25a5a860bcaff3de91b06518b895195d39e4877
No dependencies set.
The note is not visible to the blocked user.
原始需求摘要
2026-09-21,线上同款 PDD 商品在设备 7、8 上多次出现
PURCHASE_SPEC_PANEL_EVIDENCE_NOT_MATCHED;保存收货地址后又出现规格面板无法恢复或过早判定失败。目标是提高规格面板识别和地址保存返回后的稳定性,不放宽真正下单按钮的安全判断。当前事实
summary=false、orderAction=false,但仍有地址入口、支付方式入口、数量输入框和其他面板证据。本单范围
非目标
验收
风险与文档
这是采购页面识别变化,属于高风险范围;实施前需要人工授权,真机采购验证不得执行付款。长期识别规则变化后更新业务规则与架构 Wiki;无 API 变化则不修改 Agent API 契约。
依赖
与 #332 可分别实施;建议先完成本单的识别与等待,再验证 #332 的规格选择确认。
范围补充:保存地址后等待规格面板加载完成(2026-09-21,用户确认补入)
用户观察
用户用 uiautomator2 导出 PDD 商品页控件树时,连接后不等待直接导出数据不全,需要等几秒。
代码事实(origin/main 5e0a9d1,
PurchaseLiveAutomation.kt)waitForStableAddressEditorExit每 200ms 采样,连续 2 次看不到地址编辑页即返回(约 0.4 秒),只判断编辑页消失,不判断规格面板是否加载完成。isPurchaseConfirmationPanel对这一份快照只判断一次。driver.backPurchase()),再用waitFor最多 50×200ms(约 10 秒)等待地址证据,超时报PURCHASE_ADDRESS_SAVE_TIMEOUT“地址保存后无法返回订单页面”。推断(未验证)
面板已返回但尚未加载完整时,第 2 步认不出,第 3 步按返回键可能把规格面板关闭,导致后续一直等不到而报错。线上该错误 7 次中可能有一部分属于此情况;需要失败现场的结构化诊断证实。
补充方案
waitForSpecPanel)同样改为以新判定三项 + 稳定签名为完成条件。验收补充
风险
仍属采购流程,高风险,实施前需人工确认;真机验证另行授权。
范围补充:规格选项重复计数导致选中确认失败(任务 535,2026-09-21,用户确认补入)
线上现象
任务 535(SYB
260918CRGHU5JD,PDD 商品 8910,设备 8)失败:PURCHASE_SPEC_SELECTION_UNCONFIRMED“无障碍点击和受控手势后未能确认精确选中状态”。服务端下发(ai_match):颜色兰条纹,尺码2XL建议130-150斤。该报错来自首次选规格(selectExactSpecWithRetry),不是地址返回后的最终复核。证据(真机导出 + 本地解析验证)
xml_data/,含地址,未提交)。PddScreenParser.parse(origin/main 5e0a9d1)在本地临时单测解析该样本(测试已删除,未提交),结果:兰条纹(ViewGroup,selected)、兰条纹\n 零差评(其内部 TextView,selected)、白条纹(未选)。同一选项块被计为两个值。2XL建议130-150斤selected,其余未选,正常。isExactSpecSelected逻辑:颜色otherSelected=true(带“零差评”的重复值文字≠目标且已选中)→ 直接判定未选中;尺码通过。附带发现(属本单范围一)
同一样本解析为
specPanelOpen=false、type=UNKNOWN、selectedSummary=null:选中后摘要为#快抢光#兰条纹 2XL建议130-150斤(无“已选/请选择”前缀),底部为提交订单 ¥23.99。说明本单“规格面板识别”问题在该商品选中后状态同样存在。补充方案
验收补充
兰条纹、白条纹两个值;兰条纹判定已选中;尺码判定不变。风险
采购流程判定变化,高风险,实施前需人工确认;真机验证另行授权。
范围已拆分:#331 仅处理规格面板识别和保存地址后的稳定等待。规格选项外层节点/内部文字重复解析导致颜色或尺码确认失败的问题已单独建立 #332;两单分别测试和验收。
规格重复解析已拆分为新工单 #332,请按新工单单独实施和验收。
拆单后调整(2026-09-22,用户确认)
1. 依赖修正
本地验证(分支
fix/331-spec-panel-recognition提交99f2384,用 Agent 真实解析代码解析 8910 样本):main 上该面板为UNKNOWN,分支上可识别;部分原因是 #332 的选项去重让规格维度解析正确。因此“与 #332 可分别实施”不完全成立:#331 的验收在 #332 合并之后进行(或两单同批合并)。2. 提交拆分
99f2384同时包含 #331(识别、等待、提交步骤收紧、诊断)与 #332(选项去重、选中失败诊断)。按“提交只含当前工单内容”,重新整理为两个提交,分别引用 #331、#332。3. 同一面板校验(本单范围第 2 条,当前实现未满足)
当前实现只检查页面上是否存在“带打码手机号的可点击行”“带支付关键词的可点击行”“唯一数量输入框”,未校验三者属于同一规格面板容器。需补:三项必须位于同一面板容器(同一浮层/窗口内),并补“地址/支付节点来自其他页面或弹窗”的反例测试。
4. 采购环境前提(写入长期文档)
采购用 Android 手机必须事先:PDD App 已登录、微信已登录、PDD 已设置默认收货地址、PDD 默认支付方式为微信支付。规格面板的地址入口、支付入口依赖此前提。
5. 验收样本待取得
本单验收要求设备 7、8 的真实规格面板样本;目前只有另外三台手机的样本(
4d8258ec、R28M30T2JWE、192.168.0.173:34581的 8910),8580 在设备 7/8 上的样本尚未导出,该验收项暂未满足。需采购员配合在设备 7 或 8 上打开 8580 规格面板后导出(只读,不改设备状态)。合并与部署(2026-09-22,用户授权“合并#331,#332,#333,部署”)
0edc78a(#332)→d8382e6(#331)→3bf428a(#333,由0ab5a96cherry-pick)→36810f3(Android 版本号 0.9.60 / versionCode 73)。3bf428a构建 linux/amd64,SHA-25601f59582cc037b2d9d5cd0ce0e9f7cbcaa57c4ba38d9f6f6eefcfc588a88a9b8;新发布目录/home/goauto/releases/20260922-3bf428a-331-333(config/dist 复制自上一发布20260922-5e0a9d1-328-330,本批无 Web 改动;static/var 链接沿用上一发布);current原子切换,goauto.serviceactive,外部首页/健康检查 HTTP 200,未认证管理接口 401,重启后日志无 panic/fatal/1146/1054。发布前采购/采集运行中任务均为 0。回滚目标:20260922-5e0a9d1-328-330。36810f3,0.9.60/73,SHA-256c39569f92fc94cbc91f98489c25a5a860bcaff3de91b06518b895195d39e4877)已安装到设备 8(采购1,192.168.0.173:34581),安装前该设备无待执行/运行任务;启动 Agent 后心跳恢复,服务端显示 online、agent_version 0.9.60。