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

115 lines
11 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-103
title: 验证规格面板精确选择与 SKU 单价
phase: 1
deps: [T-102]
status: BLOCKED
created: 2026-08-04
vikunja_task_id: 23
context_ref: 1dc8308
work_branch: task/t-103-sku-panel
needs_device: true
needs_human_review: true
write_paths:
- docs/tasks/T-103.md
- client/src/cmbuyer_client/pdd/**
- client/src/cmbuyer_client/device/**
- client/tests/pdd/**
- client/tests/device/**
- client/scripts/capture_sku_panel_spike.py
- docs/02-requirements.md
- docs/03-tech-stack.md
- docs/04-architecture.md
- docs/api.md
- docs/current-state.md
---
<!-- BEGIN VIKUNJA EXPORT id=23 synced=2026-08-04T02:42:15Z sha256=d9d51a844857a5a9ffecf79c70380a559e3058a8390e14eab653d79af8a4fe7a -->
## 问题 / 背景
T-102 已在 PKG110 / Android 16 / 拼多多 8.17.0 上证明 canonical 链接可进入 goods_id `958756616606` 的目标商品,并留下截图/XML。MVP 生死线是第一趟能否在不进入下单流程的前提下打开规格面板、按维度精确选择并从面板读取该 SKU 单价。T-102 截图当前可见底部“单独购买 / 免拼购买”和“先用后付 / 0元下单”文案,这些均属于本任务禁止触碰的购买或资金入口;当前截图视口没有证明存在独立安全规格入口,不能从旧项目或推理补选择器。
## 关联需求与交互
- 功能:F-006 第一趟试选;只覆盖 `open_sku_panel()`、`select_sku_options()`、`read_sku_unit_price()` 的真机 spike。
- 用户故事:US-003、US-004、US-008;本任务无生产 GUI。
- 架构 / API:`docs/04-architecture.md` 第三、四、六节;`docs/api.md` 第三节设备自动化边界;T-104、T-105 与 Phase 2 的前置。
## 方案
1. 先执行证据门禁,后写页面判据。由人把手机停在同一商品的详情页,手工寻找并只通过独立的“规格 / 已选”等非购买入口打开规格面板;不得点击“单独购买”“免拼购买”“直接拼成”“现在买”“先用后付”“0元下单”或任何购买/下单入口。若拼多多 8.17.0 与当前商品没有独立安全规格入口,记录 no-go 并停止,不能为了跑通放宽第一趟边界。
2. 人在规格面板初始态、手工选择一个维度后、全部维度选中后三个状态分别用现有只读取证能力保存 screenshot/XML;记录 goods_id、PKG110、Android 16、拼多多 8.17.0、路径与 SHA-256,并完成隐私检查。商品应具有 `颜色分类` 与 `尺码` 两个维度;当前商品不满足时由人另选 canonical 链接并记录。原始证据只留 `%LOCALAPPDATA%`。
3. 主 agent 只在上述证据完成且经人确认隐私后分析 XML,提取最小、脱敏 fixture,并把每条面板入口、维度容器、选项、选中态和价格判据绑定到证据哈希与 PDD 8.17.0;不得复用 cmroubao/cmpdd 的节点、Activity、文本常量或结论。
4. 实现安全的规格面板边界:版本必须精确为 8.17.0;只允许点击证据证明的独立规格入口及规格面板内选项。按维度容器隔离候选,文本等值匹配并读回选中态;缺失、重复、禁用、维度不明或选中态不唯一均停止,不点击相近项。纯函数测试必须覆盖 `红`/`粉红`、`1`/`10` 等前缀碰撞,即使真实商品未恰好包含该组合。
5. 单价只从规格面板证据确定的节点读取,以十进制字符串返回,禁止浮点。必须记录实际文本是否含“券后”、货币符号是否拆节点、是否同时出现原价/区间价;语义不唯一、节点缺失、多个候选冲突或只能从详情页读到时返回 unreadable 并转人工,不用其他数字补。
6. 提供离线 mock/fixture 测试与受限真机 spike CLI。第一趟模块不得导入或引用数量、订单确认、提交订单、付款函数;测试证明找不到精确值时零点击、价格不可读时停止、购买/资金入口永不可达。由人最终执行真机脚本并确认实际选中颜色/尺码与面板单价、截图/XML 隐私;agent 始终保持 DOING。
## 验收要点
- 证据先行:任务执行记录先出现规格面板三态的设备/App/goods_id/路径/SHA-256 与人工隐私结论,之后才允许出现页面判据代码。
- 拼多多 8.17.0 上仅通过独立安全规格入口打开面板;若只能通过购买入口打开,则明确判定 MVP 当前边界下不可行,不写兜底点击。
- `颜色分类=X`、`尺码=Y` 在各自维度内精确唯一匹配并读回;前缀碰撞、缺失、重复、禁用和选中态不唯一均 fail closed。
- 从规格面板可靠读取选中 SKU 单价并记录真实文本语义;无法区分券后价、原价、区间价或节点拆分时返回 unreadable。
- 测试证明 T-103 路径不点击任何购买/下单/支付入口,不引用 `set_quantity()`、`go_to_order_confirm()`、`submit_order()` 或支付动作。
- client 全部单测、compileall、wheel metadata、上下文校验、完整 `init.ps1` 与 diff-check 通过。
- `needs_device=true`:只有人完成安全入口、精确选择、单价读取、页面对应性和隐私验收后才能 DONE。
## 执行记录
### 2026-08-04T01:58:01Z · ila
2026-08-04:已认领 T-103,工作分支 `task/t-103-sku-panel`,任务定义基线 `27999c8`。先执行人工证据门禁,不立即编写页面判据:T-102 现有详情截图只证明目标商品,且当前视口可见“单独购买 / 免拼购买”“先用后付 / 0元下单”等禁触入口,没有证明独立安全规格入口。下一步由人手工寻找非购买的“规格 / 已选”入口;若不存在就记录 no-go,不点击购买按钮兜底。规格面板三态证据与隐私确认完成前,受托 agent 只允许做证据采集脚手架、纯函数边界和只读审计,T-103 保持 DOING。
### 2026-08-04T02:09:48Z · ila
2026-08-04 离线实现与主审记录:
- 提交 `a92b8f6` 新增 T-103 人工声明三状态的只读取证 CLI、捕获模块与离线测试;脚本不打开链接/面板,不点击、滑动、选择规格或读取价格。
- 失败闭合覆盖:严格 URL/状态/版本/前台包校验、截图/XML 有效性、超时脱敏、原子发布、已有输出目录不覆盖;协议无购买、下单、支付或数量操作。
- 主 agent 独立复跑:client 55 项单测、compileall、wheel metadata、agent-context validator、diff-check 与完整 `init.ps1` 全部通过。
- `needs_device=true`,任务保持 DOING;等待人通过独立安全规格入口分别采集 initial、one-dimension-selected、all-dimensions-selected 三组证据并完成对应性与隐私检查。若只有购买/下单/资金入口可打开面板,则记录 no-go,不放宽边界。
### 2026-08-04T02:36:33Z · ila
2026-08-04 真机证据主审退回:
- goods_id `937122477375` 的三组 manifest、设备/App 元数据与文件 SHA-256 均一致。
- 人工给出隐私确认后,主 agent 只查看三张 screenshot,未读取 XML。
- `initial` 截图实际仍为商品详情页,不是规格面板初始态;`one-dimension-selected` 与 `all-dimensions-selected` 截图顶部含收货区域和掩码手机号,不满足任务的无地址/手机号证据边界。
- 本组证据判定不合格:不提取 fixture、不编写页面判据、不提交原始证据;T-103 保持 DOING。
- 下一步使用全新输出目录重采:人先在规格面板取消全部规格选择,并滚动到收货区域和手机号完全离开可见视口,同时保留规格面板价格与规格区域;三态逐次人工核对后再交主审。
### 2026-08-04T02:41:12Z · ila
2026-08-04 T-103 真机 no-go 结论:
- 人工确认 goods_id `937122477375` 的规格面板是通过商品详情页右下角“快要抢光”进入;通常“免拼购买 / 快要抢光 / 单独购买 / 直接拼成”等购买语义按钮才会打开规格面板。
- 这直接触发任务方案与边界中的 no-go 条件:第一趟不得点击任何购买、下单、提交或资金入口,也不得把购买按钮包装成规格入口。
- 因此不读取本轮 XML、不提取 fixture、不实现选择器;已有截图仅用于判定入口不可行,原始证据不提交 Git。
- 当前 MVP 的自动第一趟试选在现有安全边界下不可实现,T-103 转 BLOCKED。解除阻塞需要项目所有者选择新的架构方向,并先更新架构/任务边界;不得由 agent 擅自放宽。
<!-- END VIKUNJA EXPORT -->
## 边界
- 任何规格面板入口、维度容器、选项、选中态和价格判据都必须来自本项目新采集且已由人完成
隐私检查的拼多多 8.17.0 screenshot/XML;T-102 详情页证据只能证明已到目标商品,不能证明
规格面板结构。证据路径、SHA-256、goods_id、设备、Android 与 App 版本写入执行记录之前,
不得提交页面判据代码。
- 第一趟绝不点击“单独购买”“免拼购买”“直接拼成”“现在买”“先用后付”“0元下单”或任何
购买、下单、提交、付款入口。只有真机证据证明存在独立的“规格 / 已选”等非购买入口时才允许
自动打开面板;没有安全入口即判定 no-go 并停止,不能把购买按钮改名包装成规格入口。
- 规格选项只能在已确认的面板及对应维度容器内按文本精确唯一匹配;缺失、重复、禁用、维度不明、
选中态无法唯一读回或页面版本不符均 fail closed。不得前缀、包含、模糊、相似或跨维度匹配,
不得用 OCR / 坐标兜底猜选项。
- 单价只允许从规格面板证据确认的节点读取,并以十进制字符串表达;不得使用浮点,不得从详情页、
搜索卡片或其他页面的数字补值。券后价、原价、区间价、货币符号拆分或多个候选的语义无法唯一
证明时必须返回 unreadable 并转人工。
- T-103 代码路径不得引用或实现 `set_quantity()`、`go_to_order_confirm()`、`submit_order()`、
创建订单、授权、提交围栏或任何支付能力;不得进入订单确认页,不得创建待付款订单。
- 不把 `/mnt/d/chengma/cmroubao`、`/mnt/d/chengma/cmpdd` 或任何旧版本的节点、Activity、选择器、
坐标、文本形态和页面结论当作事实;前序项目只可用于理解为什么必须 fail closed。
- 原始 screenshot/XML 只保存在 `%LOCALAPPDATA%\cmbuyer\artifacts\T-103`,不得提交 Git 或 Vikunja;
只有最小脱敏 fixture、路径、SHA-256 与非敏感结论可入库。未由人确认隐私前 agent 不读取原始证据。
- `needs_device: true`:agent 只能完成离线实现并保持 `DOING`;只有人完成安全入口、精确规格选择、
SKU 单价语义、页面对应性与隐私验收后才能标 `DONE`。