107 lines
9.6 KiB
Markdown
107 lines
9.6 KiB
Markdown
---
|
||
id: T-107
|
||
title: 固化合并式最终提交面板闸门三与提交控件只读判据
|
||
phase: 1
|
||
deps: [T-106]
|
||
status: DONE
|
||
created: 2026-08-04
|
||
vikunja_task_id: 42
|
||
context_ref: dbf9b8c
|
||
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_shifted_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-06T07:36:32Z sha256=0dc3e6197aaad376f4b2fa344a78d255caabeb82eda17e56f8b9643fad164ff4 -->
|
||
## 问题 / 背景
|
||
|
||
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 并验证返回后置条件。全路径静态不可达提交与付款。
|
||
|
||
### 2026-08-06T03:26:59Z · ila
|
||
|
||
2026-08-06 · Codex 已领取 T-107,基线 commit=dbf9b8c,独立 worktree/branch=task/t-107-confirm-gate3。完整 init.ps1 基线通过(admin test/vet/build、client 346 tests、compileall、上下文门禁)。本任务只从 T-106 两态真机证据固化 Gate3 纯 XML observer 与一次安全 Back;成功轨迹页面控件点击数必须为 0,绝不点击“提交订单”,不接触围栏、订单创建或付款能力。代码完成后保持 DOING,等待项目所有者真机人工验收。
|
||
|
||
### 2026-08-06T04:08:25Z · ila
|
||
|
||
2026-08-06 T-107 实现候选完成:基于 T-106 人工确认的拼多多 8.17.0 / goods_id 937122477375 两态原始 XML,实现纯 XML Gate3 observer、零页面控件动作 dry-run runner、成功后唯一一次 Android Back、连续两帧同商品返回正判据及本地原子证据。最终提交控件只读,未引入 fence/permit/submit/payment 能力。fixture/静态边界/金额/结构/一次返回等 36 项专项测试通过;client 全量 382 项 unittest、compileall、admin go test/vet/build、完整 init.ps1、agent-context 校验均通过;两份 T-106 原始 XML 离线复核通过。任务因 needs_device/needs_human_review 保持 DOING,等待项目所有者按任务命令确认 Gate2=Gate3=32.76、match_count=1、最近可点击祖先唯一、仅一次 Back,且未创建订单/进入付款。
|
||
|
||
### 2026-08-06T07:32:24Z · ila
|
||
|
||
2026-08-06 T-107 真机修复与运行记录:首次 dry-run 的首个真实错误为 Wi-Fi ADB 未连接,恢复后只读发现已选规格曾为“黑色 连线星星(纯棉)”,人工改回目标后,五项(黑色 CHA(纯棉)、M、数量2、顶部32.76、底部提交订单32.76)由项目所有者确认。新只读取证保存于 C:\Users\ila20\AppData\Local\cmbuyer\artifacts\T-107\gate3-layout-shift-937122477375-20260806\raw,PDD 8.17.0、1080x2376,0 页面动作/0 Back/0 submit;该态相对 T-106 面板整体上移77px。实现增加第二套互斥完整精确配置,禁止范围匹配和跨配置混搭。38项专项测试、client全量384项、compileall、admin test/vet/build、完整init.ps1、上下文校验通过;T-106原XML与新XML均离线通过。随后唯一一次真机dry-run成功,输出 C:\Users\ila20\AppData\Local\cmbuyer\artifacts\T-107\final-submit-panel-dry-run-937122477375;manifest:Gate2=Gate3=32.76、match_count=1、enabled=true、nearest_clickable_ancestor_unique=true、page_control_action_attempts=0、back_attempts=1、safe_exit=completed。保持DOING,等待项目所有者最终确认手机未创建订单、未进入付款/安全验证页面。
|
||
|
||
### 2026-08-06T07:35:47Z · ila
|
||
|
||
2026-08-06 项目所有者最终三项确认:手机已返回商品详情页且规格面板关闭;未创建待付款订单;未进入付款或安全验证页面。结合 manifest 的 Gate2=Gate3=32.76、match_count=1、最近可点击祖先唯一、页面控件动作0、Back恰好1次,以及完整门禁通过,T-107 全部验收要点满足,批准完成。
|
||
<!-- END VIKUNJA EXPORT -->
|
||
|
||
## 边界
|
||
|
||
- 合并式最终提交面板、Gate2 顶部金额、Gate3 最终控件金额、控件结构和返回后置条件只能来自 T-106
|
||
已由人确认的真机证据,以及 2026-08-06 T-107 人工五项确认的同版本精确布局证据
|
||
`C:\Users\ila20\AppData\Local\cmbuyer\artifacts\T-107\gate3-layout-shift-937122477375-20260806\raw`;
|
||
两者都必须与拼多多 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、最近可点击祖先唯一、一次安全返回,且未点击最终提交、未创建订单、未进入付款页面,
|
||
任务才可完成。
|