Files
cmbuyer/docs/tasks/T-107.md
T

88 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: T-107
title: 固化合并式最终提交面板闸门三与提交控件只读判据
phase: 1
deps: [T-106]
status: TODO
created: 2026-08-04
vikunja_task_id: 42
context_ref: 83b244f
work_branch: task/t-107-confirm-gate3
needs_device: true
needs_human_review: true
write_paths:
- docs/tasks/T-107.md
- client/src/cmbuyer_client/pdd/final_submit_panel.py
- client/src/cmbuyer_client/pdd/final_submit_panel_runner.py
- client/tests/pdd/test_final_submit_panel.py
- client/tests/pdd/fixtures/final_submit_panel_8_17_0.xml
- client/tests/pdd/fixtures/final_submit_panel_exit_8_17_0.xml
- client/scripts/run_t107_final_submit_panel_dry_run.py
- docs/api.md
- docs/current-state.md
---
<!-- BEGIN VIKUNJA EXPORT id=42 synced=2026-08-06T02:52:05Z sha256=fa2a65bb48ad33c6179d848e4265fb1db8584d73b3cf986b71cc38cec05a00d6 -->
## 问题 / 背景
T-106 真机证据证明当前拼多多 8.17.0 使用合并式最终提交面板:没有独立确认页导航;面板顶部是 Gate2 总额,红色“提交订单 ¥金额”会直接创建待付款订单。T-107 只固化该稳定面板的 Gate3 只读金额、最终控件观察与一次安全返回;绝不点击最终提交。
## 关联需求与交互
- 功能:F-011、F-016、F-017 的围栏前只读部分。
- 用户故事:US-004、US-005。
- 依赖:T-106。
- 后续消费者:T-210、T-305、T-208。
- 需要真机与人工安全验收。
## 方案
1. 从 T-106 合并式面板和人工一次返回证据提取不含个人信息的最小 fixture;页面版本、前台包、规格、数量、两个金额角色或结构任一漂移都零提交动作。
2. 删除 go_to_order_confirm 导航能力。观察入口只接受已通过 Gate2 且仍停留在证据绑定合并式面板的实时状态;T-107 成功路径不点击任何页面控件。
3. observe_gate3 分别复核目标颜色、尺码、数量、Gate2 顶部总额,并从唯一结构化文本“提交订单 ¥{金额}”读取 gate3_submit_amount;两金额必须规范、严格相等且不超最高总价。
4. 最终控件纯 XML observer 记录完整文本、匹配数、启用态以及最近可点击祖先是否唯一;不返回 selector、坐标、节点、祖先句柄或可点击对象,observer 不持有 device。
5. Gate3Observation 包含规格、数量、gate2_panel_total_price、gate3_submit_amount、最高总价、submit_control_text/match_count/enabled/nearest_clickable_ancestor_unique、原始 screenshot_path 和 UTC captured_at。
6. 观察完成后 exit_final_submit_panel_safely 只发送一次 Android Back,并稳定验证 T-106 返回后正判据;超时或结果不明不重试。
7. runner 是永久围栏前 dry-run capability,不接受 allow_submit/dry_run=False;composition/import 静态不可达 fence、SubmissionPermit、submit_order_once、payment。
8. T-107 不上传证据、不申请围栏、不创建待付款订单。任何失败只停止并等待人工。
## 验收要点
- fixture 正反例覆盖合并式面板、规格/数量、Gate2 顶部金额、Gate3 最终控件金额、0/1/2 个文本、最近可点击祖先、一次返回和版本漂移。
- 成功轨迹证明页面控件点击数为 0,仅一次 Back;Back 结果不明不重试。
- 金额使用 Decimal,Gate3 严格等于 Gate2且不超上限;按钮金额绝不用于 Gate1/Gate2。
- Gate3 DTO 不含 selector/坐标/节点/可点击对象;AST/import closure 不含 fence/result/permit/submit/payment。
- 真机人工确认两金额一致、submit match count=1、最近可点击祖先唯一、一次安全返回,未点击最终提交、未创建订单/进入付款。
- client 全量 unittest、compileall、完整 init、上下文校验、Vikunja 导出与 diff-check 通过;agent 保持 DOING 等人工验收。
## 执行记录
### 2026-08-04T14:04:47Z · ila
2026-08-04 预研定值:T-107 只消费 T-106 四态证据;确认页导航最多一次,最终提交控件由无 device 的纯 observer 读取且 DTO 不暴露节点/坐标/selector,随后最多一次 Back 并验证返回后置条件。全路径静态不可达提交与付款。
<!-- END VIKUNJA EXPORT -->
## 边界
- 合并式最终提交面板、Gate2 顶部金额、Gate3 最终控件金额、控件结构和返回后置条件只能来自 T-106
已由人确认的真机证据,并与拼多多 8.17.0/goods_id 绑定。不得从前序项目、旧 XML、Activity 名、
相似文案、OCR、裸坐标或推理补判据。
- 不存在也不得重新引入 `go_to_order_confirm()` 或任何确认页导航点击。T-107 成功路径对页面控件的
点击数必须为 0;只有观察完成后的一次 Android Back。
- Gate2 仍只从面板顶部已批准角色读取目标数量总额;Gate3 只从最终控件的结构化精确文本
`提交订单 ¥{规范十进制金额}` 读取。两个候选必须分别唯一、严格相等且不超最高总价;最终控件金额
绝不能充当 Gate1/Gate2,详情页和其他数字仍全部禁止。
- 最终控件只能由不持有 device/click 能力的纯 XML observer 只读。结果可含完整文本、匹配数、启用态
和“最近可点击祖先是否唯一”的布尔值,但不得返回 selector、坐标、节点、祖先句柄或任何可点击对象;
runner 不得对该控件或祖先调用 click。
- 观察完成后只允许一次 Android Back,并必须命中 T-106 固化的稳定 post-back 正判据;超时或结果
不明不重试。SystemUI/锁屏、其他 PDD 页面、付款/安全验证页或仅“面板消失”都不是退出成功。
- Runner 是永久围栏前 dry-run capability,不接受 `allow_submit`、`dry_run=False` 等开关;构造和
import 闭包不得引用 submission fence、SubmissionPermit、`click_permitted`、`submit_order_once()`、
结果调和、支付、免密支付、先用后付或任何扣款能力。
- T-107 不上传证据、不定义 T-205 事件、不申请围栏、不创建待付款订单。任何失败只停止并等待人工,
不自动释放 claim/授权、不回 DRAFT、不转领或重试页面动作。
- `needs_device: true`:agent 不得自行标 DONE。只有人确认 Gate2/Gate3 两位置金额严格相等、最终控件
match count=1、最近可点击祖先唯一、一次安全返回,且未点击最终提交、未创建订单、未进入付款页面,
任务才可完成。