修复:PDD 规格遍历误点“查看尺码建议”导致尺码缺失 #189

Open
opened 2026-09-01 16:37:46 +08:00 by ila · 4 comments
Owner

原始需求摘要

  • 来源:用户于 2026-09-01 反馈,最新 Agent 在 PDD 规格面板遍历颜色后未采集尺码,却打开“查看尺码建议”页面;用户确认按诊断建议修复 Android Agent。
  • 目标:规格采集不得把尺码建议等导航控件当成颜色/尺码值;意外离开规格面板时必须安全停止,不能继续提交误导性的尺码遍历结果。
  • 非目标:不修改 Admin 采集规则;不新增 OCR/VLM;不创建采购任务、订单或支付动作;本工单不执行线上发布。

当前事实与根因证据

  • 有线设备 PKG110,Agent 0.9.37,任务 #127(采集任务 ID 127)结果为 completed_partial,只保存 3 个颜色并缺少 size;任务 126 同样复现。
  • 设备脱敏诊断:任务 127 的 COLOR_DISCOVERY/COLOR_EDGE_REACHED 运行约 8696ms,随后 SIZE_DISCOVERY/SIZE_SWIPE_FAILED 仅 9ms;任务 126 同类失败。
  • 系统日志显示 16:26:10.008 在颜色遍历结束前,PDD 已新建另一个 NewPageActivity,与人工观察到的“查看尺码建议”页一致。
  • 当前解析器把已识别标题区间内的可点击节点作为规格候选;导航类控件未被完整排除。详情页和尺码建议页还可能共用 Activity,现有页面证据未能及时识别跳页。

前置依赖与并行性

  • 无代码依赖,可独立实施。
  • 仅影响 Android 采集交付单元及其测试;不改服务端、Web、数据库和共享 API。
  • Gitea MCP 在当前会话未提供可调用工具,因此按仓库规则回退到 Gitea API;凭据仅从忽略的 gitea.env 读取,未输出或写入仓库。

实施方案

  1. 在 Agent 固定安全边界中排除“查看尺码建议/尺码助手/选码建议”等明确导航语义,规则不能把这些控件重新放宽为点击目标。
  2. 收紧规格候选:导航控件及其可点击父容器不得进入颜色或尺码候选。
  3. 颜色点击成功后重新读取页面;若规格面板已消失或页面实例/强证据变化,禁止继续取价和尺码遍历,返回明确失败或进行一次安全恢复(以最小可靠实现为准),不得点击相似候选。
  4. 增加回归测试:颜色区域包含“查看尺码建议”时不会点击;跳转到同 Activity 的非规格页面时不会继续当作正常规格面板。

设计证据

  • 恢复既有采集安全行为的 Android 缺陷,不新增页面、组件、布局或用户交互;按规则豁免 UI 原型。

验收标准

  • “查看尺码建议”等导航控件不出现在颜色/尺码候选中,也不会成为可点击祖先目标。
  • 正常颜色与尺码采集行为保持不变。
  • 意外离开规格面板后 Agent 不继续尺码滑动,不以正常部分采集掩盖跳页。
  • 相关 Android 单元测试通过,APK 可构建。
  • 不保存原始控件树或整屏截图,不新增订单/支付点击目标。

验证计划

  • 运行受影响的 PddProductDetailCollectorTest。
  • 运行 Android 单元测试及 Debug APK 构建;如受本机环境限制,明确记录。
  • 真机回归需同一 PDD 商品和版本安装后复测;本工单实施阶段不自动重跑线上采集。

风险与回退

  • 误伤包含“建议”等字样的真实规格值:使用明确导航短语/语义组合,而非泛化单字 denylist,并补正常规格测试。
  • PDD 同 Activity 页面跳转:以规格面板强证据作为执行门禁,不只比较 Activity 名。
  • 回退方式:回退本工单 Android 提交;Admin 规则与服务端数据无迁移。

文档影响

  • 预计无长期文档影响:本次只恢复既有“规格遍历锁定已识别规格节点、不得点击非规格导航”的安全规则,不改变 API、数据、配置、运维命令或长期业务契约;完成时据实际差异复核。
## 原始需求摘要 - 来源:用户于 2026-09-01 反馈,最新 Agent 在 PDD 规格面板遍历颜色后未采集尺码,却打开“查看尺码建议”页面;用户确认按诊断建议修复 Android Agent。 - 目标:规格采集不得把尺码建议等导航控件当成颜色/尺码值;意外离开规格面板时必须安全停止,不能继续提交误导性的尺码遍历结果。 - 非目标:不修改 Admin 采集规则;不新增 OCR/VLM;不创建采购任务、订单或支付动作;本工单不执行线上发布。 ## 当前事实与根因证据 - 有线设备 PKG110,Agent 0.9.37,任务 #127(采集任务 ID 127)结果为 `completed_partial`,只保存 3 个颜色并缺少 `size`;任务 126 同样复现。 - 设备脱敏诊断:任务 127 的 `COLOR_DISCOVERY/COLOR_EDGE_REACHED` 运行约 8696ms,随后 `SIZE_DISCOVERY/SIZE_SWIPE_FAILED` 仅 9ms;任务 126 同类失败。 - 系统日志显示 16:26:10.008 在颜色遍历结束前,PDD 已新建另一个 `NewPageActivity`,与人工观察到的“查看尺码建议”页一致。 - 当前解析器把已识别标题区间内的可点击节点作为规格候选;导航类控件未被完整排除。详情页和尺码建议页还可能共用 Activity,现有页面证据未能及时识别跳页。 ## 前置依赖与并行性 - 无代码依赖,可独立实施。 - 仅影响 Android 采集交付单元及其测试;不改服务端、Web、数据库和共享 API。 - Gitea MCP 在当前会话未提供可调用工具,因此按仓库规则回退到 Gitea API;凭据仅从忽略的 `gitea.env` 读取,未输出或写入仓库。 ## 实施方案 1. 在 Agent 固定安全边界中排除“查看尺码建议/尺码助手/选码建议”等明确导航语义,规则不能把这些控件重新放宽为点击目标。 2. 收紧规格候选:导航控件及其可点击父容器不得进入颜色或尺码候选。 3. 颜色点击成功后重新读取页面;若规格面板已消失或页面实例/强证据变化,禁止继续取价和尺码遍历,返回明确失败或进行一次安全恢复(以最小可靠实现为准),不得点击相似候选。 4. 增加回归测试:颜色区域包含“查看尺码建议”时不会点击;跳转到同 Activity 的非规格页面时不会继续当作正常规格面板。 ## 设计证据 - 恢复既有采集安全行为的 Android 缺陷,不新增页面、组件、布局或用户交互;按规则豁免 UI 原型。 ## 验收标准 - “查看尺码建议”等导航控件不出现在颜色/尺码候选中,也不会成为可点击祖先目标。 - 正常颜色与尺码采集行为保持不变。 - 意外离开规格面板后 Agent 不继续尺码滑动,不以正常部分采集掩盖跳页。 - 相关 Android 单元测试通过,APK 可构建。 - 不保存原始控件树或整屏截图,不新增订单/支付点击目标。 ## 验证计划 - 运行受影响的 `PddProductDetailCollectorTest`。 - 运行 Android 单元测试及 Debug APK 构建;如受本机环境限制,明确记录。 - 真机回归需同一 PDD 商品和版本安装后复测;本工单实施阶段不自动重跑线上采集。 ## 风险与回退 - 误伤包含“建议”等字样的真实规格值:使用明确导航短语/语义组合,而非泛化单字 denylist,并补正常规格测试。 - PDD 同 Activity 页面跳转:以规格面板强证据作为执行门禁,不只比较 Activity 名。 - 回退方式:回退本工单 Android 提交;Admin 规则与服务端数据无迁移。 ## 文档影响 - 预计无长期文档影响:本次只恢复既有“规格遍历锁定已识别规格节点、不得点击非规格导航”的安全规则,不改变 API、数据、配置、运维命令或长期业务契约;完成时据实际差异复核。
Author
Owner

实施完成,待验收

实现

  • Android 固定安全边界新增尺码建议导航短语(简繁体),Admin 规则不能把这些导航控件重新放宽为规格点击目标。
  • 规格候选同时检查自身及后代节点;包含“查看尺码建议”等导航后代的可点击父容器不再成为颜色/尺码候选。
  • 颜色点击后连续两次读取不到规格面板强证据时,返回 SPEC_PANEL_EVIDENCE_NOT_MATCHED(“点击规格后离开了商品规格面板”),不再继续取价和尺码滑动。同 Activity 跳页也受此门禁保护。
  • 未修改服务端、Admin 采集规则、数据库、API、采购或支付行为。

回归测试

  • 新增:直接“查看尺码建议”控件及包含该导航后代的可点击父容器均不会成为颜色值。
  • 新增:颜色点击后跳到同 NewPageActivity 的尺码建议页时立即失败,且不会执行尺码向上滑动。
  • android\\gradlew.bat :app:testDebugUnitTest --tests cn.ilapage.goauto.agent.PddProductDetailCollectorTest:通过。
  • scripts\\verify.ps1 -Component android:Debug/Release 单元测试通过,Debug APK 构建通过。
  • 编译保留一条既有警告:lastPanelScreen 初始值冗余,与本工单无关。

提交与推送

  • 提交:b5a08bf fix(android): block PDD size advice navigation (#189)
  • 已推送:origin/main。

文档影响

  • 无长期文档影响:本次恢复既有“只点击规格节点、不得点击非规格导航”的安全行为,不改变接口、数据、配置或运维方式;未更新 Wiki,也未运行 Wiki 同步。

未验证项

  • 尚未安装新 APK,也未在任务 127 对应 PDD 商品上重新真机采集。真机验收需发布/安装新 Agent 后,由人工重新打开同一商品并触发采集;本次没有自动操作手机页面。
## 实施完成,待验收 ### 实现 - Android 固定安全边界新增尺码建议导航短语(简繁体),Admin 规则不能把这些导航控件重新放宽为规格点击目标。 - 规格候选同时检查自身及后代节点;包含“查看尺码建议”等导航后代的可点击父容器不再成为颜色/尺码候选。 - 颜色点击后连续两次读取不到规格面板强证据时,返回 `SPEC_PANEL_EVIDENCE_NOT_MATCHED`(“点击规格后离开了商品规格面板”),不再继续取价和尺码滑动。同 Activity 跳页也受此门禁保护。 - 未修改服务端、Admin 采集规则、数据库、API、采购或支付行为。 ### 回归测试 - 新增:直接“查看尺码建议”控件及包含该导航后代的可点击父容器均不会成为颜色值。 - 新增:颜色点击后跳到同 `NewPageActivity` 的尺码建议页时立即失败,且不会执行尺码向上滑动。 - `android\\gradlew.bat :app:testDebugUnitTest --tests cn.ilapage.goauto.agent.PddProductDetailCollectorTest`:通过。 - `scripts\\verify.ps1 -Component android`:Debug/Release 单元测试通过,Debug APK 构建通过。 - 编译保留一条既有警告:`lastPanelScreen` 初始值冗余,与本工单无关。 ### 提交与推送 - 提交:`b5a08bf fix(android): block PDD size advice navigation (#189)` - 已推送:`origin/main`。 ### 文档影响 - 无长期文档影响:本次恢复既有“只点击规格节点、不得点击非规格导航”的安全行为,不改变接口、数据、配置或运维方式;未更新 Wiki,也未运行 Wiki 同步。 ### 未验证项 - 尚未安装新 APK,也未在任务 127 对应 PDD 商品上重新真机采集。真机验收需发布/安装新 Agent 后,由人工重新打开同一商品并触发采集;本次没有自动操作手机页面。
Author
Owner

真机安装记录

  • 用户于 2026-09-01 明确要求把最新 APK 安装到数据线手机。
  • 从提交 b5a08bf 重新执行 :app:assembleDebug:通过。
  • APK SHA-256:D0E3CF1AB3217E1D86DD9F0BD4FDC008638982ABC9234446839E85AD81E50128。
  • 已通过 ADB 覆盖安装到有线 PKG110:Success;保留应用数据与配置。
  • 安装后版本:0.9.37 (50),更新时间 2026-09-01 16:43:38;无障碍服务仍启用。
  • 未主动启动 Agent,手机仍停留在 PDD 页面;未触发采集、采购、订单或支付行为。
  • 待用户用同一商品重新采集验收 #189。
## 真机安装记录 - 用户于 2026-09-01 明确要求把最新 APK 安装到数据线手机。 - 从提交 `b5a08bf` 重新执行 `:app:assembleDebug`:通过。 - APK SHA-256:`D0E3CF1AB3217E1D86DD9F0BD4FDC008638982ABC9234446839E85AD81E50128`。 - 已通过 ADB 覆盖安装到有线 PKG110:`Success`;保留应用数据与配置。 - 安装后版本:`0.9.37 (50)`,更新时间 `2026-09-01 16:43:38`;无障碍服务仍启用。 - 未主动启动 Agent,手机仍停留在 PDD 页面;未触发采集、采购、订单或支付行为。 - 待用户用同一商品重新采集验收 #189。
Author
Owner

真机复测失败与根因修订

用户安装 b5a08bf 后以同一商品复测,任务 128、129 仍进入尺码建议页。

  • 两次任务均在 COLOR_DISCOVERY 结束前约 350ms 新建 PDD NewPageActivity,随后 SIZE_DISCOVERY/SIZE_SWIPE_FAILED 仅 3~4ms。
  • 350ms 与颜色横向翻页后的固定等待完全吻合;跳页发生在颜色发现阶段末尾,并非尺码采集主动点击规格值。
  • 第一版只保护规格候选点击和点击后的取价,未覆盖横向翻页。当前 swipeSpec 在无法锁定锚点横向滚动祖先时会回退到页面全局滚动区域,并优先调用 ACTION_SCROLL_FORWARD;PDD 将该动作作用到尺码建议控件并打开新页。

修订方案:

  1. 横向颜色翻页只允许使用颜色节点自身唯一的横向滚动祖先;无法锁定时返回失败并停止横向发现,不回退到全局区域。
  2. 已锁定的横向翻页不使用 ACTION_SCROLL_FORWARD/BACKWARD,改为容器内受控手势;纵向逻辑保持不变。
  3. 增加驱动层回归测试/可测试边界,保留第一版导航 denylist 和规格面板丢失保护。

该修订仍只影响 Android 采集,不修改 Admin 规则、服务端、API、数据库或采购/支付行为。

## 真机复测失败与根因修订 用户安装 `b5a08bf` 后以同一商品复测,任务 128、129 仍进入尺码建议页。 - 两次任务均在 `COLOR_DISCOVERY` 结束前约 350ms 新建 PDD `NewPageActivity`,随后 `SIZE_DISCOVERY/SIZE_SWIPE_FAILED` 仅 3~4ms。 - 350ms 与颜色横向翻页后的固定等待完全吻合;跳页发生在颜色发现阶段末尾,并非尺码采集主动点击规格值。 - 第一版只保护规格候选点击和点击后的取价,未覆盖横向翻页。当前 `swipeSpec` 在无法锁定锚点横向滚动祖先时会回退到页面全局滚动区域,并优先调用 `ACTION_SCROLL_FORWARD`;PDD 将该动作作用到尺码建议控件并打开新页。 修订方案: 1. 横向颜色翻页只允许使用颜色节点自身唯一的横向滚动祖先;无法锁定时返回失败并停止横向发现,不回退到全局区域。 2. 已锁定的横向翻页不使用 `ACTION_SCROLL_FORWARD/BACKWARD`,改为容器内受控手势;纵向逻辑保持不变。 3. 增加驱动层回归测试/可测试边界,保留第一版导航 denylist 和规格面板丢失保护。 该修订仍只影响 Android 采集,不修改 Admin 规则、服务端、API、数据库或采购/支付行为。
Author
Owner

第二版修复已安装,待真机复验

修复

  • 横向规格滑动找不到唯一锚点时直接阻止,不再回退到页面全局滚动区域。
  • 已锁定的横向颜色容器改用受控手势,不再调用 ACTION_SCROLL_FORWARD/BACKWARD;纵向规格面板滑动保持原行为。
  • 新增纯策略测试,覆盖横向禁止全局回退、横向禁止无障碍滚动动作。
  • Agent 版本提升为 0.9.38 (51),便于区分第一版 0.9.37。

验证与提交

  • scripts\\verify.ps1 -Component android:Debug/Release 单元测试通过,Debug APK 构建通过。
  • 提交:37dea33 fix(android): lock horizontal spec swipes (#189),已推送 origin/main。
  • APK SHA-256:CF769E2EA1F98DBDF64673557B006665052EEA353FC1BC80C1EA40BD2A71E1CA。

安装

  • 已覆盖安装到有线 PKG110:Success。
  • 安装后确认 0.9.38 (51),更新时间 2026-09-01 16:49:45;无障碍服务仍启用。
  • 未主动启动 Agent、未触发新采集,手机仍在 PDD NewPageActivity。

待用户以同一商品再次采集,重点确认颜色遍历结束后不再进入尺码建议页,并检查是否采集到真实尺码。

## 第二版修复已安装,待真机复验 ### 修复 - 横向规格滑动找不到唯一锚点时直接阻止,不再回退到页面全局滚动区域。 - 已锁定的横向颜色容器改用受控手势,不再调用 `ACTION_SCROLL_FORWARD/BACKWARD`;纵向规格面板滑动保持原行为。 - 新增纯策略测试,覆盖横向禁止全局回退、横向禁止无障碍滚动动作。 - Agent 版本提升为 `0.9.38 (51)`,便于区分第一版 `0.9.37`。 ### 验证与提交 - `scripts\\verify.ps1 -Component android`:Debug/Release 单元测试通过,Debug APK 构建通过。 - 提交:`37dea33 fix(android): lock horizontal spec swipes (#189)`,已推送 `origin/main`。 - APK SHA-256:`CF769E2EA1F98DBDF64673557B006665052EEA353FC1BC80C1EA40BD2A71E1CA`。 ### 安装 - 已覆盖安装到有线 PKG110:`Success`。 - 安装后确认 `0.9.38 (51)`,更新时间 `2026-09-01 16:49:45`;无障碍服务仍启用。 - 未主动启动 Agent、未触发新采集,手机仍在 PDD `NewPageActivity`。 待用户以同一商品再次采集,重点确认颜色遍历结束后不再进入尺码建议页,并检查是否采集到真实尺码。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#189