docs(#61): archive safe spec entry fix evidence

ila
2026-08-21 16:11:18 +08:00
parent f43efc01a8
commit 052f51785b
@@ -1,42 +1,63 @@
# 61 修复采购规格探测未识别安全入口
- 类型:需求 / 缺陷 / 重构
- 所属 Epic:#
- 所属 MVP / 版本:#
- 状态:待验收 / 已完成
- 类型:缺陷修复
- 所属 Epic:无
- 所属 MVP / 版本:PDD 自动采购 MVP
- 状态:待用户验收
- 日期:2026-08-21
- Gitea 工单:https://git.ilapage.cn/OPC/goauto/issues/61
- Wiki 页面:Task-61-修复采购规格探测未识别安全入口
- Wiki revision:见本地镜像头
## 背景与目标
<!-- 原来有什么问题,这次达到什么结果。 -->
采购任务 CG-3、CG-4 在三星商品 `172119352488` 的第一趟规格探测中失败,错误为“没有找到商品规格入口”。旧默认规则把 `选择规格` 作为硬编码文字别名;Agent 一旦收到别名会改用页面原始文本扫描,绕过 PDD 语义解析。实际页面提供的是底部“快要抢光 免拼购买”安全入口,因此任务没有进入规格面板。
目标是在不扩大点击范围的前提下,使 Agent 能使用已确认的规格/购买语义入口开始规格探测;不得修改地址、创建订单或支付。
## 最终方案
<!-- 说明实际实现。与建单方案不同之处必须写清原因。 -->
1. 默认正式采购规则移除 `openSpecPanel.textAliases`,由 Agent 使用 PDD 页面解析器给出的语义安全入口。
2. 即使某个历史规则提供文字别名,Agent 也只会在已确认的规格入口和底部购买入口中按别名过滤;别名不能再把任意页面同名文字(例如商品评价)变成可点击入口。
3. 新增单元测试覆盖底部“免拼购买”入口,以及“商品评价”别名不能绕过安全候选。
与建单方案一致;没有引入 OCR/VLM、原始控件树或截图持久化。
## 修改文件
- `<文件>`:<改动说明>
- `server/app/goauto/purchasecontract/default.go`:默认采购规则取消硬编码规格文字。
- `server/app/goauto/purchasecontract/default_test.go`:锁定默认规则必须使用语义安全入口。
- `android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseRehearsalExecutor.kt`:别名改为安全候选的交集过滤。
- `android/app/src/test/java/cn/ilapage/goauto/agent/PurchaseRehearsalExecutorTest.kt`:覆盖安全底部购买入口与评价页防误点。
- Wiki `Business-Rules-and-Glossary`、`Android-Agent-API-Contract`、`OnePlus-Real-Device-Acceptance`:记录行为边界与真机证据。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| | 通过 / 未通过 |
| 默认规则不再把任意“选择规格”文字当作入口 | 通过(自动化测试) |
| 别名不能触发商品评价等非规格控件 | 通过(自动化测试) |
| 新规则可在三星进入规格面板并提交第一趟探测 | 通过:采购任务 5(CG-5)attempt 1 返回 `spec_probe_completed` |
| 不修改地址、不创建订单、不支付 | 通过:CG-5 没有订单号、下单时间或不可逆标记 |
| 用户最终验收 | 待确认 |
CG-5 回传了 2 个颜色、8 个尺码以及两个颜色的 3112 分价格,随后按既有两趟流程进入 `spec_probe_pending`。其后因 #46 尚未实施,服务端不会自动处理繁简/单位差异的规格匹配;这不是本缺陷的规格入口失败。
## 测试
- 执行命令:`<命令>`
- 结果:
- **未验证部分**:<!-- 必填;没有就写“无”。 -->
- 执行命令:`go test ./app/goauto/purchasecontract/... ./app/goauto/purchase/...`
- 结果:通过。
- 执行命令:`.\\gradlew.bat testDebugUnitTest --tests cn.ilapage.goauto.agent.PurchaseRehearsalExecutorTest`
- 结果:通过。
- 执行命令:`.\\gradlew.bat test assembleDebug`
- 结果:通过。
- 真机:三星 SM-G9700 覆盖安装 Debug APK,启用无障碍服务后以新规则重试;第一趟规格探测成功。
- **未验证部分**:未修改真实地址、未创建真实待付款订单、未支付;这些不属于本工单且需要独立人工授权。#46 的自动规格匹配尚未实施。
## 遗留问题
<!-- 没有就删除本节。 -->
- #46 的服务端“确定性规格标准化 → AI 兜底”尚未实施。当前 CG-5 因目标规格繁简/重量单位与 PDD 实际文字不同,保持在 `spec_probe_pending`,不会自动进入第二趟。
## 相关提交
- `<提交哈希>` <提交说明>
- `aebe80f` `fix(#61): use safe purchase spec entry`
- `5a94f4f` `docs(#61): record safe purchase spec entry`