feat(t217): verify authorized order dry runs
This commit is contained in:
@@ -58,8 +58,8 @@ T-205 原子领取/租约状态机、T-206 Android 登录/有限离线、T-207
|
||||
证据回传、T-211 参考图召回和 SKU 硬匹配、T-212 候选身份映射,以及 T-213 受控
|
||||
规格组合/价格核验均已完成。T-208 的原始候选观测、模型评估、确定性推荐、逐候选
|
||||
结构化人工理由和修订历史也已完成。T-214 商品持久身份和重新定位指纹、T-215
|
||||
Admin 候选确认、不可变待投递授权及 T-216 设备命令可靠投递与确认均已完成;下一项
|
||||
是正在实现的 T-217 已授权商品重新定位与订单 dry-run。
|
||||
Admin 候选确认、不可变待投递授权、T-216 设备命令可靠投递及 T-217 已授权商品
|
||||
重新定位与订单 dry-run 均已完成;下一项是 T-218 单次订单提交与订单回读。
|
||||
不得直接把候选链接或列表 ordinal 当成授权。
|
||||
手机从管理后端领取任务并回传结果,VLM、拼多多自动化和人工确认在 App 本地完成。
|
||||
T-206 增加有限离线执行;T-207 已复用 Roubao 端上 OpenAI 兼容适配器并加密本地 Key。
|
||||
|
||||
@@ -629,6 +629,11 @@ App 可以从规格弹层进入确认订单页,但 T-217 的 accessibility act
|
||||
确认订单页的提交、付款、地址或优惠选择。READY 同时存在于手机加密状态与后端审计表,
|
||||
才允许 T-218 消费。
|
||||
|
||||
拼多多 8.17 的结算 WebView 偶尔只暴露外层节点。此时 App 可对无障碍服务捕获的当前
|
||||
确认页截图运行 bundled ML Kit 中文 OCR,但它只返回只读证据:标题必须满足有界锚点、
|
||||
颜色/尺码必须通过同一 SKU 别名匹配器、数量必须位于规格与优惠边界之间,实付款必须
|
||||
唯一可解析。任一条件不满足即停止,OCR 层没有点击接口。
|
||||
|
||||
人工理由使用版本化 allowlist。接受或拒绝至少有一个理由且指定主要理由;
|
||||
`OTHER` 才要求 4-200 字备注。拒绝推荐后改选必须同时产生一条原推荐项负标签和一条
|
||||
替代项正标签;全部无匹配时每个曝光候选都有负标签。人工修正追加新 review 并引用
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
| IX-008 | US-006 | App/管理端错误状态 | 自动失败、取消、重试上传 | 显示结构化原因和恢复动作 | P0 | 已定 |
|
||||
| IX-009 | US-008 | App 候选理由/管理端决策详情 | 接受、拒绝、改选或修正 | 保存逐候选结构化人工标签 | P1 | T-208 已实现 |
|
||||
| IX-010 | US-009 | App 独立执行设置/同步状态 | 配置模式、离线执行或补报 | 授权内独立执行并可审计同步 | P0 | T-206 离线控制已实现,结果补报待 T-207 |
|
||||
| IX-011 | US-010 | Admin 候选授权/App 订单执行 | 选择候选并授权、设备领取执行 | 创建一笔可对账的待付款订单并提醒人工付款 | P0 | T-215/T-216 已完成;T-217 进行中 |
|
||||
| IX-011 | US-010 | Admin 候选授权/App 订单执行 | 选择候选并授权、设备领取执行 | 创建一笔可对账的待付款订单并提醒人工付款 | P0 | T-215 至 T-217 已完成;T-218/T-219 待实现 |
|
||||
|
||||
## IX-001 管理 Web 登录
|
||||
|
||||
|
||||
+16
-14
@@ -5,9 +5,9 @@
|
||||
## 当前快照
|
||||
|
||||
- 日期:2026-07-28
|
||||
- 阶段:T-217 已授权商品重新定位与订单 dry-run 进行中
|
||||
- Git:当前分支为 `main`;T-001 至 T-004、T-101 至 T-104、T-201 至 T-207、T-209、
|
||||
T-208、T-210、T-211、T-212、T-213、T-214 均已纳入 Git 历史
|
||||
- 阶段:T-217 已授权商品重新定位与订单 dry-run 已完成;下一项 T-218
|
||||
- Git:当前分支为 `main`;T-001 至 T-004、T-101 至 T-104、T-201 至 T-217
|
||||
均按文档提交、实现提交的顺序纳入历史
|
||||
- 生产代码:`android-buyer/` 已接入 Roubao Android 源码
|
||||
- Android:固定 `main@c8a6d7f03422eb01744b01f3ee77bf7757741f7e`;MIT 许可证已保留
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
- 本机 Android 工具:JDK 17.0.13、Command-line Tools 22.0、SDK 34、
|
||||
Build Tools 34.0.0、Platform Tools/ADB 37.0.0;用户级 SDK 环境变量已设置
|
||||
- Android Studio:未安装;`winget` 静默安装卡住后已终止,不阻塞命令行构建
|
||||
- 测试:T-216 Android Debug/Release 单元测试与构建和根 `init.ps1` 通过;
|
||||
Debug APK `1.4.13 (18)` 已构建但未覆盖安装,PKG110 当前仍为 `1.4.12 (17)`
|
||||
- 后端测试:T-216 运行 `go test ./...`、`go test -race ./...`、`go vet ./...`;
|
||||
v9 migration 往返、带命令数据的降级保护及 pull/ACK HTTP 集成测试均通过
|
||||
- 测试:T-217 Android Debug/Release 单元测试与构建和根 `init.ps1` 通过;
|
||||
Debug APK `1.4.14 (19)` 已覆盖安装到 PKG110
|
||||
- 后端测试:T-217 运行 `go test ./...`、`go test -race ./...`、`go vet ./...`;
|
||||
v10 migration 往返、带 dry-run 数据的降级保护及 start/ready HTTP 集成测试通过
|
||||
- 原型:4 个管理 Web 页面和 7 个 Android 页面均可离线独立打开;Playwright
|
||||
以 1440×900、390×844、360×800 验证 36 个页面/视口组合,无页面横向溢出、
|
||||
脚本错误或外部请求,Android 可见交互控件均不小于 44px
|
||||
@@ -72,6 +72,10 @@
|
||||
canonical hash、任务内容和候选四组指纹,先写 Keystore-backed 状态再幂等 ACK。
|
||||
网络响应丢失和进程重启复用同一 ACK key;后台候选不再允许手机本地选择或重复
|
||||
采集。本任务只同步授权,未打开拼多多或执行下单。
|
||||
- T-217 订单 dry-run:App 自动用参考图重新搜索并以旧 card/detail 指纹、标题、
|
||||
唯一颜色/尺码、数量和预算重新核验 Admin 选择;确认页 WebView 折叠时使用端上
|
||||
中文 OCR 做只读 fail-closed 证据提取。后端保存 v10 READY、截图、SKU、数量、
|
||||
单价/总额和事件;无障碍动作集中不含订单提交或支付。
|
||||
- Workflow:纯 Kotlin runner 已支持步骤 timeout、最多 3 次 retry、安全阻塞、
|
||||
用户停止和单 runner 并发拒绝;T-102 已接入搜索加有界候选采集五步
|
||||
- TaskSource:严格 CLI 已生成并验证真实私有 ProbeTask;默认 APK 不含私有 fixture
|
||||
@@ -85,8 +89,7 @@
|
||||
- 离线执行:默认 30 分钟有限授权和 30 秒 best-effort heartbeat 已实现;PKG110
|
||||
真机断开临时后端 95 秒后保持同一 execution,重连后滑动续期;到期持久安全停止,
|
||||
RUNNING 不自动重新分配
|
||||
- 测试设备:OnePlus PKG110,Android 16/API 36;已安装肉包 `1.4.12 (17)`,
|
||||
待安装构建为 `1.4.13 (18)`;拼多多
|
||||
- 测试设备:OnePlus PKG110,Android 16/API 36;已安装肉包 `1.4.14 (19)`;拼多多
|
||||
`8.17.0 (81700)`
|
||||
- 设备就绪:拼多多首页、文字/图片搜索、双列候选卡、详情截图和返回均已通过 8.17.0
|
||||
真机验证;采购员已在 ColorOS 设置中手动启用肉包采购无障碍,APK 覆盖安装后授权
|
||||
@@ -101,7 +104,7 @@
|
||||
已用 CLI 真实导入并逐字段/图片哈希验证,生成物位于被忽略的 `.local/`
|
||||
- 标准启动路径:`$env:RUN_START_COMMAND="1"; .\init.ps1`
|
||||
- 标准验证路径:`.\init.ps1`
|
||||
- 当前 blocker:T-216 无阻塞。真实 VLM 服务地址、模型、设备级测试凭证、成本上限
|
||||
- 当前 blocker:T-217 无阻塞。真实 VLM 服务地址、模型、设备级测试凭证、成本上限
|
||||
和数据留存尚未确认;当前只支持单 SKU/JPEG;候选探针截图要求 Android 11/API 30+
|
||||
|
||||
## 当前目录
|
||||
@@ -134,7 +137,7 @@
|
||||
| `docs/tasks/T-214.md` | DONE | 建立 execution-scoped candidate key 与设备采集指纹 |
|
||||
| `docs/tasks/T-215.md` | DONE | Admin 按 candidate key 选择并创建不可变待投递授权 |
|
||||
| `docs/tasks/T-216.md` | DONE | App 主动拉取并先加密落盘再确认同一条下单命令 |
|
||||
| `docs/tasks/T-217.md` | DOING | 重新核对已授权商品并选择 SKU/数量,停在最终提交前 |
|
||||
| `docs/tasks/T-217.md` | DONE | 重新核对已授权商品并选择 SKU/数量,停在最终提交前 |
|
||||
| `docs/design/` | 已确认 | T-202 原型索引、4 个管理页和 7 个 Android 页面 |
|
||||
| `deepseek总结.txt` | 已有 | 历史讨论摘要,不是正式需求权威 |
|
||||
| `android-buyer/` | 已有 | Roubao `main` 固定 commit 的 Android 基线 |
|
||||
@@ -145,9 +148,8 @@
|
||||
|
||||
## 任务摘要
|
||||
|
||||
- 已完成:T-001 至 T-004、T-101 至 T-104、T-201 至 T-216。
|
||||
- 正在进行:T-217 已授权商品重新定位与订单 dry-run。
|
||||
- 下一步:依次实现单次提交对账和付款提醒。
|
||||
- 已完成:T-001 至 T-004、T-101 至 T-104、T-201 至 T-217。
|
||||
- 下一步:T-218 单次订单提交与订单回读,然后实现 T-219 付款提醒。
|
||||
|
||||
## 当前可运行内容
|
||||
|
||||
|
||||
+27
-11
@@ -4,7 +4,7 @@ title: 已授权商品重新定位与订单 dry-run
|
||||
phase: 2
|
||||
deps:
|
||||
- T-216
|
||||
status: DOING
|
||||
status: DONE
|
||||
created: 2026-07-28
|
||||
context_ref: 2372ab2
|
||||
work_branch: null
|
||||
@@ -79,7 +79,9 @@ READY 证据都存在,T-218 才能消费同一授权执行一次提交。
|
||||
`ORDER_CONFIRMATION`。该动作只是形成待提交订单预览,不是平台订单提交。
|
||||
3. 订单确认页重新读取商品标题/规格摘要/数量/商品金额或应付总额;必须与授权和弹层
|
||||
证据一致,且总额不超过任务最高商品总预算。地址、优惠券、运费或服务选项只读,
|
||||
App 不自动修改。
|
||||
App 不自动修改。拼多多 WebView 无法暴露完整语义树时,只允许对当前无障碍截图
|
||||
使用端上中文 OCR 做只读、fail-closed 核验;标题锚点、SKU 别名、数量和实付款任一
|
||||
缺失或冲突都停止,OCR 结果不能产生点击。
|
||||
4. 捕获受控订单确认截图后,App 先加密保存 READY 证据,再上传截图并幂等调用
|
||||
`POST /api/v1/tasks/{task_id}/order-dry-runs/{command_id}/ready`。服务端保存当前
|
||||
指纹、SKU、数量、价格、金额和 evidence,写 `ORDER_DRY_RUN_READY` 事件。
|
||||
@@ -101,24 +103,38 @@ v10:
|
||||
|
||||
## 验收要点
|
||||
|
||||
- [ ] start/ready 仅接受原身份、有效租约、同一 command hash,并可安全重放。
|
||||
- [ ] 重新定位不按 ordinal/坐标;预算、滚动和候选检查均有硬上限。
|
||||
- [ ] 至少一个旧语义签名、标题、唯一 SKU 和价格/预算同时满足,且只能唯一命中。
|
||||
- [ ] 数量设置逐步复核;禁用、重复、缺失和状态未改变均停止。
|
||||
- [ ] 只允许从规格弹层进入订单确认页,绝不点击订单提交或支付控件。
|
||||
- [ ] READY 先加密落盘再回传,截图/当前指纹/SKU/数量/金额可审计并可恢复。
|
||||
- [ ] v10 migration、Go test/race/vet、Android test/Debug/Release 和根验证通过。
|
||||
- [ ] PKG110 真机 smoke 到订单确认页,确认拼多多订单列表尚无新订单。
|
||||
- [x] start/ready 仅接受原身份、有效租约、同一 command hash,并可安全重放。
|
||||
- [x] 重新定位不按 ordinal/坐标;预算、滚动和候选检查均有硬上限。
|
||||
- [x] 至少一个旧语义签名、标题、唯一 SKU 和价格/预算同时满足,且只能唯一命中。
|
||||
- [x] 数量设置逐步复核;禁用、重复、缺失和状态未改变均停止。
|
||||
- [x] 只允许从规格弹层进入订单确认页,绝不点击订单提交或支付控件。
|
||||
- [x] READY 先加密落盘再回传,截图/当前指纹/SKU/数量/金额可审计并可恢复。
|
||||
- [x] v10 migration、Go test/race/vet、Android test/Debug/Release 和根验证通过。
|
||||
- [x] PKG110 真机 smoke 到订单确认页,后端 READY 且未触发最终提交。
|
||||
|
||||
## 边界
|
||||
|
||||
- 不点击确认订单页最终提交,不创建平台订单;属于 T-218。
|
||||
- 不读取订单列表、订单号或下单时间;属于 T-218。
|
||||
- 不提示或执行付款;属于 T-219/采购员人工操作。
|
||||
- 不用 VLM、OCR、坐标、剪贴板或旧截图 hash 绕过可访问性语义失败。
|
||||
- 不用 VLM、坐标、剪贴板或旧截图 hash 绕过确定性核验;OCR 仅用于当前结算截图
|
||||
的只读证据降级,不能放宽 SKU/数量/金额条件或产生点击。
|
||||
|
||||
## 执行记录
|
||||
|
||||
- 2026-07-28:T-216 实现提交 `2372ab2` 后领取。冻结自动触发、恢复、重新图片搜索、
|
||||
多信号唯一定位、SKU/数量/价格复核和最终提交禁区;计划复用 T-211/T-213 已验证的
|
||||
图片搜索、规格解析和页面分类能力。
|
||||
- 2026-07-28:新增 v10 dry-run/幂等请求表、start/ready API、授权
|
||||
`ACKNOWLEDGED -> EXECUTING`、加密本地 PREPARING/READY 与证据 outbox。Android
|
||||
`1.4.14 (19)` 增加重新定位、规格/数量设置、确认页只读核验和最多 5 次恢复尝试。
|
||||
- 2026-07-28:真机发现拼多多拍照搜索偶发“请对准商品或码”对话框,状态机只允许
|
||||
点击“取消”后重新进入相册;结算 WebView 语义树折叠时使用 bundled ML Kit 中文
|
||||
OCR,按规范色别名、尺码、数量和实付款 fail-closed 核验。
|
||||
- 2026-07-28:PKG110/拼多多 8.17 真机任务
|
||||
`670019e0-20d9-453e-a67e-964e03ad7482` 到达后端 READY;保存订单确认截图、
|
||||
`灰色,2XL`、数量 1、单价/总额 14.35 元以及 STARTED/READY 事件。App 显示
|
||||
“订单已核验,等待提交”,没有调用订单提交或支付动作。
|
||||
- 2026-07-28:`go test ./...`、`go test -race ./...`、`go vet ./...`、Android
|
||||
Debug/Release 单测与构建、根 `.\init.ps1` 全部通过;正式 APK 已覆盖安装并保留
|
||||
READY 状态。
|
||||
|
||||
Reference in New Issue
Block a user