AGENTS.md
cc326eb
采购执行器无任何售罄处理:PurchaseRehearsalExecutor.kt 全文无 售罄 / SOLD_OUT 相关代码。
PurchaseRehearsalExecutor.kt
售罄
SOLD_OUT
verifyProduct(PurchaseRehearsalExecutor.kt:200-208)的通过条件仅为「包名是 PDD 且存在可见节点」:
verifyProduct
PurchaseRehearsalExecutor.kt:200-208
if (snapshot.packageName == PDD_PACKAGE && snapshot.nodes.any { it.visible }) return null
pageProblem 依赖的 PddPageClassifier.classify(PddNavigation.kt:10-22)只识别四类问题:登录失效、验证码/人机验证、风控、链接无效或已下架,不含售罄。
pageProblem
PddPageClassifier.classify
PddNavigation.kt:10-22
采集侧的售罄判定位于 ParsedPddScreen.isTransientSoldOut(PddProductDetailCollector.kt:120-139),并配有有界下拉恢复(:604-621),采购路径从未调用。
ParsedPddScreen.isTransientSoldOut
PddProductDetailCollector.kt:120-139
:604-621
规格值级别的可选性已有实现:PddProductDetailCollector.kt:1423 依据标签是否含「售罄/缺货/不可选」标记 VisibleSpecValue.available。
PddProductDetailCollector.kt:1423
VisibleSpecValue.available
selectSpecs 在无可用规格时返回 PURCHASE_SPEC_NOT_MATCHED「没有下发可用的商品规格」(:240)。
selectSpecs
PURCHASE_SPEC_NOT_MATCHED
:240
售罄商品会正常通过 verifyProduct,随后在规格入口或规格选择环节失败,典型错误为 PURCHASE_SPEC_NOT_MATCHED「没有下发可用的商品规格」。
该错误信息具有误导性:采购员据此会判断为规格映射配置错误,前往 Admin 反复调整映射,而真实原因是商品已售罄,任何映射调整都无效。
#130 已将 PDD_GOODS_SOLD_OUT 纳入可发起替换的错误码集合,依据是该错误码产生于有界恢复失败之后、代表确认失效。
PDD_GOODS_SOLD_OUT
但采购路径不会产生该错误码,因此采购因售罄失败时:
用户当初提出替换需求时明确包含「链接已失效或已售罄」两种情况,而「采购时才发现售罄」正是其中最典型的一种——目前这条路是断的。
PddPageClassifier
currentScreen(input)
ParsedPddScreen
isTransientSoldOut(...)
isTransientSoldOut
available
cd android && .\gradlew.bat :app:testDebugUnitTest :app:assembleDebug
Business-Rules-and-Glossary
Android-Agent-API-Contract
sync
sync --check
待实施。
已按 #158 范围完成 Android 采购售罄识别与有界恢复,提交:77a2b25(已推送 main)。
77a2b25
main
available=false
RULE_NOT_MATCHED
PurchaseRehearsalExecutorTest
.\scripts\verify.ps1 -Component android
gradlew :app:testDebugUnitTest --tests cn.ilapage.goauto.agent.PurchaseRehearsalExecutorTest :app:assembleDebug
python dev_scripts/harness.py check --strict
python dev_scripts/harness.py sync
2e474dd5f804c3e754ecc8e8722c9469e424acf0
GITEA_TOKEN
用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。
No dependencies set.
The note is not visible to the blocked user.
所属与来源
AGENTS.md「Gitea 交互与工单最小读取」记录回退原因。当前事实(提交
cc326eb复核)采购执行器无任何售罄处理:
PurchaseRehearsalExecutor.kt全文无售罄/SOLD_OUT相关代码。verifyProduct(PurchaseRehearsalExecutor.kt:200-208)的通过条件仅为「包名是 PDD 且存在可见节点」:pageProblem依赖的PddPageClassifier.classify(PddNavigation.kt:10-22)只识别四类问题:登录失效、验证码/人机验证、风控、链接无效或已下架,不含售罄。采集侧的售罄判定位于
ParsedPddScreen.isTransientSoldOut(PddProductDetailCollector.kt:120-139),并配有有界下拉恢复(:604-621),采购路径从未调用。规格值级别的可选性已有实现:
PddProductDetailCollector.kt:1423依据标签是否含「售罄/缺货/不可选」标记VisibleSpecValue.available。selectSpecs在无可用规格时返回PURCHASE_SPEC_NOT_MATCHED「没有下发可用的商品规格」(:240)。问题
售罄商品会正常通过
verifyProduct,随后在规格入口或规格选择环节失败,典型错误为PURCHASE_SPEC_NOT_MATCHED「没有下发可用的商品规格」。该错误信息具有误导性:采购员据此会判断为规格映射配置错误,前往 Admin 反复调整映射,而真实原因是商品已售罄,任何映射调整都无效。
连带缺口:替换流程在采购场景下无法触发
#130 已将
PDD_GOODS_SOLD_OUT纳入可发起替换的错误码集合,依据是该错误码产生于有界恢复失败之后、代表确认失效。但采购路径不会产生该错误码,因此采购因售罄失败时:
用户当初提出替换需求时明确包含「链接已失效或已售罄」两种情况,而「采购时才发现售罄」正是其中最典型的一种——目前这条路是断的。
目标
PDD_GOODS_SOLD_OUT明确失败。非目标
PddPageClassifier已识别的四类问题。实施方案
一、在采购流程中加入售罄判定
verifyProduct通过之后、进入规格环节之前,增加一次售罄判定。currentScreen(input)取得ParsedPddScreen,调用isTransientSoldOut(...),不重写判定逻辑。二、补充「规格全不可选」这一采购特有情形
isTransientSoldOut要求「没有主商品证据」(规格面板未打开、无规格入口)。而采购流程走到该步时规格入口通常存在,仅是其中所有规格值不可选,因此该条件在采购场景下可能不成立。available均为 false,同样判为售罄。可直接复用VisibleSpecValue.available(事实 5),不新增解析逻辑。三、有界恢复
PDD_GOODS_SOLD_OUT,提示恢复失败;PDD_GOODS_SOLD_OUT,提示确认售罄;四、与替换流程衔接
PDD_GOODS_SOLD_OUT需被 #130 的可替换错误码集合覆盖(该集合由服务端集中定义)。实施时确认采购侧的该错误码已在集合内,使替换入口可正常出现。安全边界
验收标准
PDD_GOODS_SOLD_OUT失败,不再误报为PURCHASE_SPEC_NOT_MATCHED。isTransientSoldOut,未出现第二套售罄判定实现(代码检查佐证)。验证方式
cd android && .\gradlew.bat :app:testDebugUnitTest :app:assembleDebug依赖、并行与风险
文档影响
Business-Rules-and-Glossary:采购流程的售罄识别与有界恢复口径,以及PDD_GOODS_SOLD_OUT在采购场景下的产生条件。Android-Agent-API-Contract:如售罄恢复配置需在采购规则中新增字段,需同步说明。sync与一轮sync --check,把页面与 revision 写回本工单。状态
待实施。
实施完成,待验收
已按 #158 范围完成 Android 采购售罄识别与有界恢复,提交:
77a2b25(已推送main)。实现
ParsedPddScreen.isTransientSoldOut,没有新增第二套页面售罄文案分类器。available=false时按售罄处理。PDD_GOODS_SOLD_OUT;恢复后商品页证据丢失返回既有RULE_NOT_MATCHED,不会继续选择规格、修改地址或创建订单。PDD_GOODS_SOLD_OUT,本单无需服务端改动。验证
PurchaseRehearsalExecutorTest:通过。新增覆盖临时售罄恢复成功、恢复后仍售罄、手势失败、恢复后商品证据丢失、规格值全部不可选恢复并重开面板;原有正常采购回归保持通过。.\scripts\verify.ps1 -Component android:通过(Debug/Release 单测及 Debug APK 构建)。gradlew :app:testDebugUnitTest --tests cn.ilapage.goauto.agent.PurchaseRehearsalExecutorTest :app:assembleDebug:通过。python dev_scripts/harness.py check --strict:通过。python dev_scripts/harness.py sync与sync --check:通过。文档与边界
Business-Rules-and-Glossary,在线回读 revision:2e474dd5f804c3e754ecc8e8722c9469e424acf0,本地镜像已同步。GITEA_TOKEN当前失效,Wiki 写入按仓库规则回退到 Git 已配置凭据调用 Gitea API;未输出或落盘凭据。用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。