From 3abbe1040d4a541a9112d47160e873964be76106 Mon Sep 17 00:00:00 2001 From: QiuSW <105186638@qq.com> Date: Thu, 6 Aug 2026 10:53:27 +0800 Subject: [PATCH] docs(task): replan Gate3 for combined submit panel --- docs/tasks/T-106.md | 58 ++++++++++++++++++++++++----------- docs/tasks/T-107.md | 74 ++++++++++++++++++++++----------------------- 2 files changed, 77 insertions(+), 55 deletions(-) diff --git a/docs/tasks/T-106.md b/docs/tasks/T-106.md index e426875..a9400d9 100644 --- a/docs/tasks/T-106.md +++ b/docs/tasks/T-106.md @@ -1,6 +1,6 @@ --- id: T-106 -title: 确认页、闸门三与返回路径真机取证 +title: 合并式最终提交面板、闸门三与返回路径真机取证 phase: 1 deps: [T-105] status: DOING @@ -11,42 +11,59 @@ work_branch: task/t-106-confirm-evidence needs_device: true needs_human_review: true write_paths: + - docs/00-ai-start-here.md + - docs/02-requirements.md + - docs/04-architecture.md + - docs/05-coding-rules.md + - docs/06-tasks.md + - docs/07-user-stories.md + - docs/08-interaction-checklist.md + - docs/api.md + - docs/routes.md - docs/tasks/T-106.md + - docs/tasks/T-107.md + - docs/tasks/T-208.md + - docs/tasks/T-210.md + - docs/tasks/T-305.md + - docs/tasks/T-400.md + - docs/tasks/T-401.md + - docs/tasks/T-403.md - client/src/cmbuyer_client/pdd/order_confirm_spike.py - client/tests/pdd/test_order_confirm_spike.py - client/scripts/capture_order_confirm_spike.py - docs/current-state.md --- - + ## 问题 / 背景 -T-105 验证规格面板数量与闸门二后,下一步会进入更高风险的订单确认页。T-106 只由人手工准备确认页、最终提交控件可见态和一次返回后的页面,再用完全只读脚本采集真机事实;本任务不自动导航、不写确认页判据。 +2026-08-06 真机证据证明:拼多多 8.17.0 的当前采购界面不存在“规格面板 → 独立订单确认页”导航。目标规格与数量设置后,同一合并式最终提交面板已经显示地址、支付方式、顶部 Gate2 总额和红色“提交订单 ¥金额”;点击该红色控件会立即创建待付款订单并进入付款界面。原四态方案已安全停止。 ## 关联需求与交互 - 功能:F-011、F-016。 - 用户故事:US-004、US-005。 - 依赖:T-105。 -- 后续消费者:T-107。 +- 后续消费者:T-107、T-210、T-305。 - 需要真机和人工页面对应性、安全结果确认。 ## 方案 -1. 提供只读取证 CLI,唯一能力为核对指定设备/App 版本、app_current、screenshot 与 compressed=false XML、hash 和原子 manifest;静态禁止 click、press/back、swipe、input、intent 和任意 UI 修改。 -2. 人先手工完成已取证规格/数量并进入确认页,停在规格、数量、应付总额及最终“提交订单”控件可见的安全状态;绝不能点击最终提交控件。 -3. 只读采集确认页主体与最终控件状态,记录准确规格、数量、应付总额、控件精确文案/匹配数/启用态;这些只是人工观察,不转成生产 selector。 -4. 随后由人只按一次返回并停手,再用同一只读取证 CLI 采集返回后的页面。Back 结果不明不再次按;记录页面身份与是否回到证据允许的安全页面。 -5. 三组证据都记录设备型号、Android、USB/WiFi、serial、PDD 版本、goods_id、截图/XML 路径和 SHA-256;完整 XML 仅留本机。 -6. 如果人误触最终提交、产生待付款订单、进入支付/安全验证/外部页面或页面结果不明,立即停止、不重试、不继续取证,并如实记录路径为不可用;绝不操作付款。 -7. 当前规格面板中出现“提交订单 ¥...”不能仅凭文案推断为确认页导航或最终控件;T-107 只能消费本任务由人确认的结构事实。 +1. 保留第一态原始截图/XML/App/manifest 与哈希:目标颜色/M、数量 2、面板顶部 Gate2 总额 32.76、唯一可见文本“提交订单 ¥32.76”;项目所有者确认该控件会直接创建待付款订单。 +2. 把页面模型改为“合并式最终提交面板”:Gate2 仍只读面板顶部目标数量总额;Gate3 是同一稳定面板中最终红色控件显示的金额。两者是独立 UI 位置,必须分别唯一读取、严格相等且都不超上限。 +3. Gate3 仅批准结构化精确文本“提交订单 ¥{规范十进制金额}”;不得包含/前缀猜测、OCR 或坐标兜底。它只能作为 Gate3 只读金额与最终控件身份,不得回流充当 Gate1/Gate2。 +4. 最终控件观察记录完整文本、匹配数、启用态、最近可点击祖先是否唯一;不返回 selector、坐标、节点或可点击对象。当前第一态观察到文本匹配数为 1,祖先结构留给 T-107 从最小 fixture 固化。 +5. 取消确认页导航动作。T-106/T-107 都不得点击最终红色控件;生产真实点击仍只允许在授权、服务端围栏、Gate2、Gate3、唯一控件四条件同时满足后执行一次。 +6. 人从合并式最终提交面板只按一次系统返回并停手,再运行纯只读 CLI 采集返回后状态;结果不明不得再次返回。 +7. 同步架构、API、编码规则、路线图和下游任务。旧 confirm_page_amount/confirm_amount 语义废止;T-210/T-208 消费前必须迁移为 gate3_submit_amount,迁移完成前不得建立提交围栏。 +8. 若误触最终提交、产生待付款订单、进入付款/安全验证/外部页面或结果不明,立即停止、不重试、不继续取证;绝不付款。 ## 验收要点 -- 静态证明 spike/CLI 没有任何 UI 修改 API;mock 覆盖设备/版本/包/截图/XML/超时/原子发布/异常脱敏。 -- 人工确认三组截图/XML对应:确认页规格数量金额、最终控件可见态、一次返回后页面。 -- 执行记录列出准确控件文案与匹配数,但不把坐标/selector 作为结论;完整 XML、地址、手机号、支付信息不进 Git/Vikunja/日志。 -- 明确记录未点击最终提交、未创建订单、未进入支付;若相反则任务保持 DOING/受阻且不自动处置。 +- 第一态证据哈希完整,人工确认合并式面板、目标规格、数量 2、Gate2 顶部 32.76、最终文本“提交订单 ¥32.76”匹配数 1,以及点击语义为直接创建待付款订单。 +- 一次人工返回后的截图/XML/App/manifest 完整,人工确认回到同一商品安全页;返回结果不明不重试。 +- 静态证明 spike/CLI 只有 app/截图/XML 读取能力,没有任何页面修改 API;只允许合并式面板历史态与人工返回态。 +- 架构保留三道逻辑闸门:Gate3 使用同一最终面板的独立最终控件金额,不删除 Gate3、不把其金额用于 Gate1/Gate2、不放宽提交四条件。 - client 全量 unittest、compileall、完整 init、上下文校验、Vikunja 导出与 diff-check 通过;agent 不得自行标 DONE。 ## 执行记录 @@ -73,15 +90,20 @@ T-106 四态纯只读取证代码已完成:新增 order_confirm_spike、captur 2026-08-06T02:41:40.982Z · Codex T-106 第一态真机事实(拼多多 8.17.0、PKG110/Android 16、goods_id 937122477375、WiFi):截图/XML/应用摘要与 manifest 完整,三项 SHA-256 均核对一致;页面显示目标颜色/M、数量 2、当前金额 32.76,并有唯一可见文本“提交订单 ¥32.76”。项目所有者确认该页仍是规格面板,点击红色“提交订单 ¥32.76”会立刻创建待付款订单并进入付款界面。因此原“四态”方案中独立确认页导航前提不成立;未点击该控件、未创建订单、未进入付款。立即禁止第二至第四态及任何该控件点击,T-106 保持 DOING,先重新定值 Gate3 架构,不能把底部按钮金额直接当 Gate3 或放宽提交四条件。截图 SHA-256=05531e020ac93048432d51554137fecf0879868ebad126771a041492cadca790;XML SHA-256=5ab31b45772e1b4e93976da5f029eeec1f5152207c2b8a75ee05ae5ce5673a7d;app 摘要 SHA-256=dcfd282da23bc5dee08e25446ed395c300c5ec9eb4d27d3c0b231a306641db50。 + +### 2026-08-06T02:53:01Z · ila + +2026-08-06T02:53:00.755Z · Codex +项目所有者明确同意“同一最终面板、两个独立金额位置”的 Gate3 方案。T-106/T-107 已重规划:取消确认页导航;Gate2 只读顶部总额,Gate3 只读最终控件结构化金额,两者必须分别唯一、严格相等且不超上限。T-106/T-107 不点击红色控件;只补一次人工 Back 返回证据。旧 confirm_page_amount/confirm_amount 语义将在 T-210/T-208 消费前迁移为 gate3_submit_amount,迁移前禁止提交围栏。 ## 边界 - 2026-08-06 第一态真机证据与项目所有者确认推翻了“规格面板后还有独立确认页”的前提:当前规格 面板已经显示地址、支付方式和唯一“提交订单 ¥32.76”,点击会立刻创建待付款订单并进入付款界面。 - 因此当前只批准 `gate2-navigation-source` 只读取证;第二至第四态及该红色控件点击全部禁用。下方 - 原四态边界保留为被真机事实阻断的审计记录,不得继续执行;T-106 保持 `DOING`,必须先通过独立 - 架构决策重新定值 Gate3,且不得把底部按钮金额直接当 Gate3 或放宽提交订单四条件。 + 项目所有者随后批准“同一最终面板、两个独立金额位置”方案:Gate2 仍是顶部总额,Gate3 只读最终 + 控件金额,二者必须唯一、严格相等且不超上限。下方原四态边界保留为被真机事实阻断的审计记录; + 现在只允许既有第一态和一次人工 Back 后的返回态,红色控件仍绝对禁止点击,不放宽提交四条件。 - 本任务只实现和运行只读取证能力:设备/App 摘要、`app_current`、screenshot、`compressed=false` XML、 hash 与原子 manifest。代码中不得出现 click、press/back、swipe、input、intent 或其他 UI 修改 API, diff --git a/docs/tasks/T-107.md b/docs/tasks/T-107.md index 02b53c7..046cce1 100644 --- a/docs/tasks/T-107.md +++ b/docs/tasks/T-107.md @@ -1,6 +1,6 @@ --- id: T-107 -title: 固化确认页、闸门三与提交控件只读判据 +title: 固化合并式最终提交面板闸门三与提交控件只读判据 phase: 1 deps: [T-106] status: TODO @@ -12,22 +12,20 @@ needs_device: true needs_human_review: true write_paths: - docs/tasks/T-107.md - - client/src/cmbuyer_client/pdd/order_confirm.py - - client/src/cmbuyer_client/pdd/order_confirm_runner.py - - client/tests/pdd/test_order_confirm.py - - client/tests/pdd/fixtures/order_confirm_source_8_17_0.xml - - client/tests/pdd/fixtures/order_confirm_gate3_8_17_0.xml - - client/tests/pdd/fixtures/order_submit_control_8_17_0.xml - - client/tests/pdd/fixtures/order_confirm_exit_8_17_0.xml - - client/scripts/run_t107_order_confirm_dry_run.py + - 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 --- - + ## 问题 / 背景 -T-106 将形成确认页导航前、闸门三、最终提交控件可见态和一次返回后的四组真机证据。T-107 只从这些已由人确认的本项目事实固化一次性确认页导航、闸门三读取、最终控件纯观察与一次安全返回;绝不点击最终提交。 +T-106 真机证据证明当前拼多多 8.17.0 使用合并式最终提交面板:没有独立确认页导航;面板顶部是 Gate2 总额,红色“提交订单 ¥金额”会直接创建待付款订单。T-107 只固化该稳定面板的 Gate3 只读金额、最终控件观察与一次安全返回;绝不点击最终提交。 ## 关联需求与交互 @@ -39,22 +37,22 @@ T-106 将形成确认页导航前、闸门三、最终提交控件可见态和 ## 方案 -1. 从 T-106 四态证据提取只含必要节点且去隐私的最小 fixture;页面版本、前台包、来源页面、导航控件或目标页面任一漂移都零点击。 -2. go_to_order_confirm 只允许点击 T-106 人工证明的导航前状态中精确唯一的已批准控件一次;点击后等待确认页精确后置条件。超时或结果不明不重试,不使用相似文案、OCR、裸坐标或其他购买按钮兜底。 -3. observe_gate3 只从确认页读取颜色、尺码、数量和应付总额;必须等于目标规格/数量且金额为规范十进制、不超最高总价。不得从详情页、规格面板或其他数字补值。 -4. 最终“提交订单”控件由纯 XML observer 只读:记录精确文本、匹配数、启用态和是否存在唯一可点击祖先,但不返回 selector、坐标、节点、祖先句柄或任何可点击对象;observer 不持有 device。 -5. Gate3Observation 包含规格、数量、确认页金额、最高总价、submit_control_text/match_count/enabled、确认页原始 screenshot_path 和 UTC captured_at。 -6. 观察完成后 exit_order_confirm_safely 只发送一次 Android Back,并稳定验证 T-106 post-back 正判据;超时/结果不明不重试,SystemUI/锁屏/其他 PDD 页/外部页都不是成功。 -7. runner 是永久围栏前 dry-run capability,不接受 allow_submit/dry_run=False 开关;composition/import 静态不可达 fence、SubmissionPermit、submit_order_once、payment。 -8. T-107 不上传证据、不定义 T-205 事件码、不申请围栏、不创建待付款订单。任何失败只停止并等待人工,不自动回 DRAFT/释放/转领。 +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 正反例覆盖来源页、唯一导航控件、确认页、规格/数量/金额、最终控件 0/1/2 个、一次返回后置条件与版本漂移。 -- 动作轨迹证明成功路径仅一个已批准导航点击和一次 Back;导航结果不明与 Back 结果不明均不重试。 -- Gate3 金额用 Decimal,规格/数量/上限严格;最终控件观察 DTO 不含 selector/坐标/节点/可点击对象。 -- AST/import closure 证明没有 fence/result/SubmissionPermit/click_permitted/submit_order_once/payment,最终控件 observer 无 device/click。 -- 真机人工确认闸门三、submit match count=1、一次安全返回、未点击最终提交、未创建订单/进入支付。 +- 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 等人工验收。 ## 执行记录 @@ -66,22 +64,24 @@ T-106 将形成确认页导航前、闸门三、最终提交控件可见态和 ## 边界 -- 任何确认页来源判据、导航控件、目标页结构、闸门三节点、最终提交控件和返回后置条件都只能来自 - T-106 已由人确认的四态真机证据,并与拼多多 8.17.0/goods_id 绑定。不得从前序项目、旧 XML、 - Activity 名、相似文案、OCR、裸坐标或推理补判据。 -- `go_to_order_confirm()` 只允许在精确来源页点击 T-106 已证明的唯一导航控件一次;超时或结果不明 - 不重试,不尝试其他购买按钮,不把规格面板中任意“提交订单 ¥...”文本直接当成已批准入口。 -- 闸门三只从确认页读取颜色、尺码、数量和应付总额;必须严格等于目标规格/数量且金额为规范十进制、 - 不超最高总价。不得用详情页、规格面板或其他位置数字凑齐,不得使用浮点数。 -- 最终“提交订单”控件只能由不持有 device/click 能力的纯 XML observer 只读。结果可含精确文本、 - 匹配数、启用态和“唯一可点击祖先是否存在”的布尔值,但不得返回 selector、坐标、节点、祖先句柄 - 或任何可点击对象;runner 不得对该控件或祖先调用 click。 +- 合并式最终提交面板、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 页面、外部支付/安全验证页或仅“确认页消失”都不是退出成功。 + 不明不重试。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。只有人确认闸门三、最终控件 match count=1、一次安全 - 返回,且未点击最终提交、未创建订单、未进入支付相关页面,任务才可完成。 +- `needs_device: true`:agent 不得自行标 DONE。只有人确认 Gate2/Gate3 两位置金额严格相等、最终控件 + match count=1、最近可点击祖先唯一、一次安全返回,且未点击最终提交、未创建订单、未进入付款页面, + 任务才可完成。