docs: align Gate3 with combined submit panel
This commit is contained in:
+33
-22
@@ -82,8 +82,8 @@ MVP 只做任务自带商品链接的 A 路径。创建任务与开始采购分
|
||||
│ 4. 【闸门一】读 SKU 单价;单价×数量不得超过最高总价
|
||||
│ 5. 设置数量并精确读回
|
||||
│ 6. 【闸门二】重读规格、数量与面板总额;总额不超最高总价
|
||||
│ 7. 进入订单确认页
|
||||
│ 8. 【闸门三】规格/数量一致,应付总额等于闸门二且不超最高总价
|
||||
│ 7. 保持在合并式最终提交面板,不执行页面导航
|
||||
│ 8. 【闸门三】重核规格/数量;最终控件金额等于闸门二且不超最高总价
|
||||
│ 9. 上传验证摘要并申请服务端提交围栏
|
||||
│ 10. 仅在 click_permitted=true 且提交控件唯一时点击一次
|
||||
│ 11. 回传观察结果;不确定时只调和,不重试
|
||||
@@ -104,13 +104,14 @@ T-103 最新真机证据表明:拼多多 `8.17.0`、goods_id `937122477375`、
|
||||
|
||||
- 只能精确唯一匹配底部非点击文本叶节点、其直接可点击 PDD 父容器及证据绑定结构,并且只点击
|
||||
第一行文本叶节点中心;缺失、重复、版本失配、结构漂移或打开后面板不唯一时零后续点击。
|
||||
- 商品内容区同名促销小字明确禁止作为入口。底部按钮中的金额只参与结构识别,不得解析、返回或
|
||||
充当价格来源;价格仍只能从规格面板和订单确认页读取。
|
||||
- 商品内容区同名促销小字明确禁止作为入口。底部购买区入口金额只参与结构识别,不得解析、返回或
|
||||
充当价格来源;规格选择后的最终红色控件金额也不得用于 Gate1/Gate2,只在 T-106 已确认的合并式
|
||||
最终提交面板中作为 Gate3 独立金额角色。
|
||||
- `免拼购买` 只允许作为已取证、不可点击的精确兄弟节点验证底部结构,不能作为选择器、目标或兜底;
|
||||
它变为可点击、位置漂移或出现在其他结构时必须拒绝。“单独购买 / 直接拼成”等其他文案同样不能
|
||||
用包含、前缀、同义或坐标兜底。
|
||||
- 受控入口只负责进入已取证面板,不等于支付授权,也不能暴露通用任意点击能力。
|
||||
- T-103 的隔离验证 capability 只包含开商品、开面板、选规格、读价和安全退出;数量、确认页、
|
||||
- T-103 的隔离验证 capability 只包含开商品、开面板、选规格、读价和安全退出;数量、最终提交面板、
|
||||
提交和支付仍由后续真机任务分别取证后才能接入生产单趟执行器。
|
||||
|
||||
2026-08-05 的五组 8.17.0 真机证据进一步证明,面板刚打开时颜色与尺码均未选中,尺码选项尚未
|
||||
@@ -136,16 +137,19 @@ T-103 最新真机证据表明:拼多多 `8.17.0`、goods_id `937122477375`、
|
||||
| --- | --- | --- | --- |
|
||||
| 一 | 规格面板,选中目标规格后 | 单价唯一可读;`单价 × 授权数量 <= 最高总价` | 不可读、有歧义或超上限 |
|
||||
| 二 | 规格面板,数量读回后 | 颜色、尺码仍正确;目标数量面板总额唯一可读且不超最高总价 | 规格/数量漂移、总额不可读/有歧义或超上限 |
|
||||
| 三 | 订单确认页 | 规格、数量正确;应付总额唯一可读、严格等于闸门二且不超最高总价 | 任一不一致、不可读、有歧义或超上限 |
|
||||
| 三 | 同一合并式最终提交面板 | 规格、数量正确;最终红色控件结构化文本中的金额唯一可读、严格等于闸门二且不超最高总价 | 任一不一致、不可读、有歧义或超上限 |
|
||||
|
||||
金额一律使用十进制字符串和十进制定点运算,不用浮点数。价格只从规格面板和订单确认页读取;
|
||||
详情正文、搜索卡片、底部购买/提交按钮的数字不作为价格来源。
|
||||
金额一律使用十进制字符串和十进制定点运算,不用浮点数。Gate1/Gate2 只从规格面板顶部已批准角色
|
||||
读取;Gate3 只从同一最终面板唯一结构化精确文本 `提交订单 ¥{规范十进制金额}` 读取。详情正文、
|
||||
搜索卡片、底部购买入口和其他按钮数字都不是价格来源;Gate3 金额也不得回流充当 Gate1/Gate2。
|
||||
|
||||
2026-08-06 的拼多多 `8.17.0` 真机证据证明同一规格的多件优惠是非线性的:数量 1 时规格面板顶部
|
||||
当前金额为 `12.88`,数量 2 时变为 `32.76`,而不是 `12.88 × 2`。因此闸门一仍是设置数量前的单价
|
||||
预检,闸门二必须读取设置后的**面板总额** `gate2_panel_total_price` 并直接比较最高总价;不得把
|
||||
Gate1 乘数量、不得要求 Gate2 等于 Gate1,也不得把底部“提交订单 ¥...”金额作为价格候选或兜底。
|
||||
Gate3 再要求确认页应付总额与 Gate2 面板总额严格相等,这比只检查上限多一道跨页防漂移约束。
|
||||
Gate1 乘数量、不得要求 Gate2 等于 Gate1。2026-08-06 T-106 进一步证明当前版本没有独立确认页:
|
||||
同一面板的红色 `提交订单 ¥32.76` 会直接创建待付款订单并进入付款界面。因此 Gate3 改为在不可逆
|
||||
动作前只读该最终控件金额,并要求它与 Gate2 顶部总额严格相等;这是同一稳定页面两个独立 UI 位置的
|
||||
交叉校验,不是把按钮金额当 Gate2 兜底。
|
||||
|
||||
闸门一与闸门二发生在同一设备会话中,不需要管理员在中间确认。旧截图、缓存值和发布前 dry-run
|
||||
都不能替代这次实时读取。
|
||||
@@ -162,7 +166,7 @@ Gate3 再要求确认页应付总额与 Gate2 面板总额严格相等,这比
|
||||
| --- | --- | --- |
|
||||
| 不付款 | 不点击支付、免密支付、先用后付或任何扣款控件 | 真实资金损失 |
|
||||
| 提交四条件 | 授权+围栏、闸门二、闸门三、控件唯一同时成立,只点一次 | 误下单 / 重复下单 |
|
||||
| 确认页零点击 | 除返回和满足四条件后的“提交订单”外不点击任何控件 | 未知副作用 |
|
||||
| 最终面板零点击 | 除安全返回和满足四条件后的最终红色控件外不点击任何控件 | 未知副作用 |
|
||||
| 规格精确匹配 | 维度内等值唯一匹配,防 `红/粉红`、`1/10` 前缀碰撞 | 买错规格 |
|
||||
| 数量读回复核 | 设置后精确读回,不一致即停 | 买错数量 |
|
||||
| 三道价格闸门 | 任一道不可读、有歧义或不通过都停,不用别处数字凑 | 超预算 |
|
||||
@@ -183,8 +187,10 @@ Gate3 再要求确认页应付总额与 Gate2 面板总额严格相等,这比
|
||||
1. **一次性授权有效且服务端提交围栏已建立**:围栏把授权、任务、领取和本次验证摘要原子绑定到
|
||||
唯一 `order_submission`;明确响应包含 `click_permitted=true`。
|
||||
2. **闸门二通过**:目标规格和数量未漂移,目标数量面板总额唯一可读且不超过授权最高总价。
|
||||
3. **闸门三通过**:确认页规格、数量正确,应付总额严格等于闸门二面板总额,且不超过授权最高总价。
|
||||
4. **提交控件唯一**:文本精确等于“提交订单”,可点击祖先唯一。
|
||||
3. **闸门三通过**:同一最终面板的规格、数量正确;唯一结构化文本 `提交订单 ¥{金额}` 中金额严格
|
||||
等于闸门二顶部总额,且不超过授权最高总价。
|
||||
4. **提交控件唯一**:完整结构化文本唯一、启用,且其最近可点击祖先唯一。不得使用包含、前缀、
|
||||
OCR、裸坐标或返回通用可点击对象。
|
||||
|
||||
围栏请求超时、断网、冲突或响应不明时不得点击。围栏建立后:
|
||||
|
||||
@@ -199,8 +205,9 @@ Gate3 再要求确认页应付总额与 Gate2 面板总额严格相等,这比
|
||||
|
||||
### 发布前 dry-run 与生产围栏的区别
|
||||
|
||||
首次启用某一 App 版本的真实提交能力前,必须用独立真机任务完成只读 dry-run:进入确认页,验证
|
||||
规格、数量、金额与提交控件唯一,然后退出且不点击。它用于证明判据和不可达测试,不是每笔采购的
|
||||
首次启用某一 App 版本的真实提交能力前,必须用独立真机任务完成只读 dry-run:在合并式最终提交
|
||||
面板验证规格、数量、Gate2 顶部总额、Gate3 最终控件金额与最近可点击祖先唯一,然后退出且不点击。
|
||||
它用于证明判据和不可达测试,不是每笔采购的
|
||||
“第一趟”,也不产生可复用页面事实。生产任务仍在同一趟内重新通过三道闸门并申请服务端围栏。
|
||||
|
||||
## 五、数据模型
|
||||
@@ -254,7 +261,7 @@ CREATE TABLE purchase_attempts (
|
||||
gate1_unit_price TEXT,
|
||||
gate2_panel_total_price TEXT,
|
||||
quantity_read INTEGER,
|
||||
confirm_amount TEXT,
|
||||
gate3_submit_amount TEXT,
|
||||
failure_code TEXT,
|
||||
started_at TEXT NOT NULL,
|
||||
finished_at TEXT,
|
||||
@@ -304,7 +311,7 @@ CREATE TABLE order_submissions (
|
||||
gate1_unit_price TEXT NOT NULL,
|
||||
gate2_panel_total_price TEXT NOT NULL,
|
||||
quantity_read INTEGER NOT NULL,
|
||||
confirm_amount TEXT NOT NULL,
|
||||
gate3_submit_amount TEXT NOT NULL,
|
||||
created_at TEXT NOT NULL,
|
||||
resolved_at TEXT,
|
||||
UNIQUE (authorization_id),
|
||||
@@ -349,6 +356,10 @@ MVP 不再用 `spec_trials` 作为审批记录,也不存在 `authorized_unit_p
|
||||
`purchase_attempts` / `order_submissions` 的执行与审计事实;管理员授权的资金边界始终是
|
||||
`total_price_cap`。
|
||||
|
||||
上述 `gate3_submit_amount` 是 T-106 真机结论后的目标 schema。当前历史 migration 仍含
|
||||
`confirm_amount` / `confirm_page_amount`;T-210 必须在 T-205/T-208 消费前用受保护 migration 完成
|
||||
迁移,旧列存在期间不得开放 submission fence,不能把旧名字继续解释成新事实。
|
||||
|
||||
设备凭据由本机管理 CLI 签发、列出和撤销。token 是 32 字节加密随机值,以 64 位小写十六进制
|
||||
只显示一次;服务端把 token 解码回原始字节后计算 SHA-256,并与按设备 id 查出的 32 字节 BLOB
|
||||
恒定时间比较。未知 id 也执行固定宽度 dummy compare。认证逐请求查库,因此撤销事务提交后才开始的
|
||||
@@ -432,7 +443,7 @@ DRAFT / PENDING / NEEDS_MANUAL ─管理员取消(围栏前)→ CANCELED
|
||||
|
||||
| 数据 | 位置 | 边界 |
|
||||
| --- | --- | --- |
|
||||
| 商品 / 规格 / 确认页原始 screenshot | 采购工具本机 + 采购服务内部证据存储 | 可含页面已显示地址/手机号;设备鉴权上传、管理员登录查看,不遮罩 |
|
||||
| 商品 / 规格 / 最终提交面板原始 screenshot | 采购工具本机 + 采购服务内部证据存储 | 可含页面已显示地址/手机号;设备鉴权上传、管理员登录查看,不遮罩 |
|
||||
| 完整 XML | 仅采购工具本机隔离目录 | 可在内存解析页面判据;不上传、不写日志、Git、Vikunja |
|
||||
| 最小 XML fixture | 采购工具测试 / Git | 只保留判据所需结构,确认无地址、手机号、支付凭据 |
|
||||
| 外部支付页或支付凭据 | 不保存、不上传 | 检测到交接立即停止 |
|
||||
@@ -463,8 +474,8 @@ DRAFT / PENDING / NEEDS_MANUAL ─管理员取消(围栏前)→ CANCELED
|
||||
| --- | --- | --- |
|
||||
| 页面结构随版本变化 | 旧选择器误点新页面 | 每条判据先真机取证,记录 App 版本、截图、XML、goods_id |
|
||||
| 购买语义入口才打开面板 | 能力范围易扩散 | 只批准证据绑定的精确唯一入口;每种文案单独取证 |
|
||||
| 当前价与原价/按钮价混杂 | 读错价格 | 限定已取证结构和语义;价格只在面板/确认页读,歧义即停 |
|
||||
| 单趟页面状态变化 | 数量或促销导致金额非线性变化 | 同一趟读 Gate1 单价与 Gate2 面板总额,再要求确认页总额与 Gate2 严格相等 |
|
||||
| 当前价与原价/按钮价混杂 | 读错价格 | Gate1/Gate2 只读顶部角色;Gate3 只读最终控件结构化金额,角色不互相兜底 |
|
||||
| 单趟页面状态变化 | 数量或促销导致金额非线性变化 | 同一趟读 Gate1 单价与 Gate2 顶部总额,再要求最终控件 Gate3 金额与 Gate2 严格相等 |
|
||||
| WiFi ADB / 双通道 | 断连或操作错设备 | serial 必填;USB/WiFi 同设备或身份不明时 fail closed |
|
||||
| 不可逆动作超时 | 可能已创建订单 | 服务端围栏 + 点击一次 + 只调和,不重试 |
|
||||
| 双端契约漂移 | 静默不兼容 | [api.md](api.md) 唯一权威;契约改动跑完整双端门禁 |
|
||||
@@ -472,14 +483,14 @@ DRAFT / PENDING / NEEDS_MANUAL ─管理员取消(围栏前)→ CANCELED
|
||||
## 七、推荐开发顺序
|
||||
|
||||
1. **Phase 0 地基**:双端骨架、测试命令、初始化脚本和原型。
|
||||
2. **Phase 1 真机取证**:逐段验证商品打开、受控面板入口、精确规格与读价、数量、确认页和提交
|
||||
2. **Phase 1 真机取证**:逐段验证商品打开、受控面板入口、精确规格与读价、数量、最终提交面板和提交
|
||||
控件;真实点击前先完成独立 dry-run。每个 spike 的 capability 只覆盖当期动作。
|
||||
3. **Phase 2 采购服务核心**:DRAFT 建单/列表、批量开始采购与授权、状态/证据/围栏/调和接口。
|
||||
4. **Phase 3 双端打通**:设备身份、原子领取、单趟执行到围栏前、事件与截图。
|
||||
5. **Phase 4 闭环**:经明确真机授权验证一次提交、待付款收口、失败分类、打包。
|
||||
6. **V2**:图搜、Excel、ERP、自动核对、AI、多设备。
|
||||
|
||||
T-103 继续作为“规格选择与读价”的隔离前置,不含数量、确认页或提交。生产单趟并不意味着在一个
|
||||
T-103 继续作为“规格选择与读价”的隔离前置,不含数量、最终提交面板或提交。生产单趟并不意味着在一个
|
||||
任务里跳过逐段取证;它只意味着这些已验证能力集成后,每笔业务任务不再等待中途人工确认。
|
||||
|
||||
## 八、项目结构
|
||||
|
||||
Reference in New Issue
Block a user