T25 PDD 假售罄页面一次性下拉恢复 #27

Closed
opened 2026-08-15 17:15:08 +08:00 by ila · 2 comments
Owner

原始需求摘要

多次通过链接进入 PDD 商品详情页时,偶发显示页面级“商品已售罄”;在商品页向下拉动两次、间隔约 1 秒后,可恢复正常商品详情。需要在规则中增加受限判断与恢复,真正售罄不能误报成功。

目标与非目标

新增 v2 pageRecovery.transientSoldOut 安全配置、服务端校验/模板/管理端表单和 Android 一次性恢复状态机。非目标:不刷新 SKU 局部售罄、不无限重试、不自动重建任务、不创建订单或支付、不保存控件树/截图。

前置依赖

T20 #22、T21 #23、T22 #24 已验收;T23 #25、T24 #26 已实现待验收。依赖能力均已存在。

是否可并行

不可与 v2 RuleContract、内置模板、规则编辑表单或 PddProductDetailCollector 的其它修改并行。

子项目影响

  • server:v2 合同校验、内置模板及测试。
  • web:安全表单及测试。
  • android:规则解析、页面分类/恢复状态机及测试。
  • docs:共享契约、业务规则、真机验收与工单索引。

方案

  1. 规则新增 pageRecovery.transientSoldOut:enabled、exactText、pullDownCount、intervalMs、settleMs、maxAttempts。
  2. 服务端限制:精确文案固定为“商品已售罄”;下拉 1~3 次,间隔 500~2000ms,稳定等待 500~5000ms,最多恢复 1 次。
  3. Android 仅在 PDD 商品 Activity、页面级精确售罄文案且正常商品证据不足时触发;SKU 选项中的售罄不触发。
  4. 锁定商品页纵向容器,连续向下拉动,按配置等待;刷新后重新读取并验证页面。
  5. 恢复成功继续采集;仍售罄返回 PDD_GOODS_SOLD_OUT,不重试任务。
  6. 管理端只允许开关和安全数值范围,不允许改动作类型或任意文本。

验收

  • 假售罄按配置只恢复一次,正常页面恢复后继续采集。
  • 真售罄刷新后仍存在时明确失败 PDD_GOODS_SOLD_OUT。
  • SKU 局部售罄不触发页面刷新。
  • 最大恢复次数固定为 1,无无限循环。
  • 服务端、Web、Android 测试和构建通过;真机至少验证正常页面不误触发,若现场可复现假售罄则验证恢复链。
  • 不保存控件树/截图,不触发订单/支付。

验证

Go 服务端合同/模板测试;Web Jest 与生产构建;Android 页面判断和恢复状态机单测、gradlew.bat test assembleDebug;一加真机任务复采。

风险

页面文案可能出现在 SKU 选项中,必须使用页面级强证据;下拉刷新可能被内层列表接管,必须在规格面板打开前锁定商品页外层纵向容器;刷新动作返回与页面真正更新可能异步,必须等待稳定证据。

文档影响

更新项目档案、业务规则、共享 API、交付工单索引、真机验收、迁移分析和三端 README/相关说明。

## 原始需求摘要 多次通过链接进入 PDD 商品详情页时,偶发显示页面级“商品已售罄”;在商品页向下拉动两次、间隔约 1 秒后,可恢复正常商品详情。需要在规则中增加受限判断与恢复,真正售罄不能误报成功。 ## 目标与非目标 新增 v2 `pageRecovery.transientSoldOut` 安全配置、服务端校验/模板/管理端表单和 Android 一次性恢复状态机。非目标:不刷新 SKU 局部售罄、不无限重试、不自动重建任务、不创建订单或支付、不保存控件树/截图。 ## 前置依赖 T20 #22、T21 #23、T22 #24 已验收;T23 #25、T24 #26 已实现待验收。依赖能力均已存在。 ## 是否可并行 不可与 v2 RuleContract、内置模板、规则编辑表单或 PddProductDetailCollector 的其它修改并行。 ## 子项目影响 - server:v2 合同校验、内置模板及测试。 - web:安全表单及测试。 - android:规则解析、页面分类/恢复状态机及测试。 - docs:共享契约、业务规则、真机验收与工单索引。 ## 方案 1. 规则新增 `pageRecovery.transientSoldOut`:enabled、exactText、pullDownCount、intervalMs、settleMs、maxAttempts。 2. 服务端限制:精确文案固定为“商品已售罄”;下拉 1~3 次,间隔 500~2000ms,稳定等待 500~5000ms,最多恢复 1 次。 3. Android 仅在 PDD 商品 Activity、页面级精确售罄文案且正常商品证据不足时触发;SKU 选项中的售罄不触发。 4. 锁定商品页纵向容器,连续向下拉动,按配置等待;刷新后重新读取并验证页面。 5. 恢复成功继续采集;仍售罄返回 `PDD_GOODS_SOLD_OUT`,不重试任务。 6. 管理端只允许开关和安全数值范围,不允许改动作类型或任意文本。 ## 验收 - 假售罄按配置只恢复一次,正常页面恢复后继续采集。 - 真售罄刷新后仍存在时明确失败 `PDD_GOODS_SOLD_OUT`。 - SKU 局部售罄不触发页面刷新。 - 最大恢复次数固定为 1,无无限循环。 - 服务端、Web、Android 测试和构建通过;真机至少验证正常页面不误触发,若现场可复现假售罄则验证恢复链。 - 不保存控件树/截图,不触发订单/支付。 ## 验证 Go 服务端合同/模板测试;Web Jest 与生产构建;Android 页面判断和恢复状态机单测、`gradlew.bat test assembleDebug`;一加真机任务复采。 ## 风险 页面文案可能出现在 SKU 选项中,必须使用页面级强证据;下拉刷新可能被内层列表接管,必须在规格面板打开前锁定商品页外层纵向容器;刷新动作返回与页面真正更新可能异步,必须等待稳定证据。 ## 文档影响 更新项目档案、业务规则、共享 API、交付工单索引、真机验收、迁移分析和三端 README/相关说明。
Author
Owner

实施完成,待人工验收

提交:dbeb151 feat: recover transient PDD sold-out pages (#27)

实现

  • v2 规则新增 pageRecovery.transientSoldOut,旧快照缺省时保持原行为。
  • 内置模板默认精确识别“商品已售罄”,下拉 2 次、间隔 1000ms、刷新等待 2000ms,最多 1 轮。
  • Android 仅在 PDD 商品 Activity、精确文案存在且缺少标题/店铺/销量/价格/规格入口等正常证据时触发;规格面板及 SKU 售罄不触发。
  • 恢复后继续原采集;仍售罄或手势失败返回 PDD_GOODS_SOLD_OUT,不重试。
  • 管理端增加有界安全表单,固定识别文案和最大尝试次数。
  • API 文档、规则样例和交付索引已同步。

验证

  • go test ./app/goauto/...:通过。
  • android/gradlew.bat testDebugUnitTest assembleDebug:通过。
  • pnpm lint:0 error(30 条为仓库既有 warning)。
  • pnpm build:prod:通过。
  • pnpm exec playwright test tests/e2e/collection-rule-editor.spec.ts:2 passed。
  • 自动化覆盖:正常证据不误触发、两次下拉后继续、恢复后仍售罄失败、最多只执行一轮。
  • APK 已覆盖安装到一加 192.168.0.173:5555,并恢复 GoAuto 无障碍服务。现场未稳定复现“假售罄”页面,因此未声明真实假售罄恢复通过;真实复现仍留作人工验收。

工单保持打开,等待用户验收。

## 实施完成,待人工验收 提交:`dbeb151 feat: recover transient PDD sold-out pages (#27)` ### 实现 - v2 规则新增 `pageRecovery.transientSoldOut`,旧快照缺省时保持原行为。 - 内置模板默认精确识别“商品已售罄”,下拉 2 次、间隔 1000ms、刷新等待 2000ms,最多 1 轮。 - Android 仅在 PDD 商品 Activity、精确文案存在且缺少标题/店铺/销量/价格/规格入口等正常证据时触发;规格面板及 SKU 售罄不触发。 - 恢复后继续原采集;仍售罄或手势失败返回 `PDD_GOODS_SOLD_OUT`,不重试。 - 管理端增加有界安全表单,固定识别文案和最大尝试次数。 - API 文档、规则样例和交付索引已同步。 ### 验证 - `go test ./app/goauto/...`:通过。 - `android/gradlew.bat testDebugUnitTest assembleDebug`:通过。 - `pnpm lint`:0 error(30 条为仓库既有 warning)。 - `pnpm build:prod`:通过。 - `pnpm exec playwright test tests/e2e/collection-rule-editor.spec.ts`:2 passed。 - 自动化覆盖:正常证据不误触发、两次下拉后继续、恢复后仍售罄失败、最多只执行一轮。 - APK 已覆盖安装到一加 `192.168.0.173:5555`,并恢复 GoAuto 无障碍服务。现场未稳定复现“假售罄”页面,因此未声明真实假售罄恢复通过;真实复现仍留作人工验收。 工单保持打开,等待用户验收。
Author
Owner

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:24 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#27