feat(t215): add admin order authorization

This commit is contained in:
QiuSW
2026-07-28 12:50:42 +08:00
parent 16c2ea410a
commit 827afc7257
24 changed files with 2688 additions and 113 deletions
+3 -2
View File
@@ -57,8 +57,9 @@
T-205 原子领取/租约状态机、T-206 Android 登录/有限离线、T-207 本地 VLM/候选/
证据回传、T-211 参考图召回和 SKU 硬匹配、T-212 候选身份映射,以及 T-213 受控
规格组合/价格核验均已完成。T-208 的原始候选观测、模型评估、确定性推荐、逐候选
结构化人工理由和修订历史也已完成。T-214 商品持久身份和重新定位指纹也已完成;
当前正在实现 T-215 Admin 下单授权,不得直接把候选链接或列表 ordinal 当成授权。
结构化人工理由和修订历史也已完成。T-214 商品持久身份和重新定位指纹、T-215
Admin 候选确认与不可变待投递授权也已完成;下一步实现 T-216 设备命令投递与确认。
不得直接把候选链接或列表 ordinal 当成授权。
手机从管理后端领取任务并回传结果,VLM、拼多多自动化和人工确认在 App 本地完成。
T-206 增加有限离线执行;T-207 已复用 Roubao 端上 OpenAI 兼容适配器并加密本地 Key。
管理后端不保存/代理 VLM,后台任务不能覆盖手机 provider 配置。
+12 -8
View File
@@ -5,7 +5,7 @@
## 当前快照
- 日期:2026-07-28
- 阶段:T-215 Admin 候选确认与一次性下单授权进行中
- 阶段:T-215 Admin 候选确认与一次性下单授权已完成,准备 T-216
- 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 历史
- 生产代码:`android-buyer/` 已接入 Roubao Android 源码
@@ -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-214 Android 单元测试、Debug/Release 构建和根 `init.ps1` 通过;
- 测试:T-215 Android 单元测试、Debug/Release 构建和根 `init.ps1` 通过;
Debug APK `1.4.12 (17)` 已安装并启动于 PKG110
- 后端测试:T-214 运行 `go test ./...`、`go test -race ./...`、`go vet ./...`、
migration `up/down/up` 和带 identity 数据的降级保护均通过
- 后端测试:T-215 运行 `go test ./...`、`go test -race ./...`、`go vet ./...`;
v8 migration 往返、带授权数据的降级保护和 Admin 授权接口集成测试均通过
- 原型:4 个管理 Web 页面和 7 个 Android 页面均可离线独立打开;Playwright
以 1440×900、390×844、360×800 验证 36 个页面/视口组合,无页面横向溢出、
脚本错误或外部请求,Android 可见交互控件均不小于 44px
@@ -64,6 +64,10 @@
已上传 asset 后,在 v7 表中生成 execution-scoped `candidate_key`。Admin API/Web
展示 key、指纹、原始 observation、模型/人工结论和截图;缺少真实平台 URL 时保持
空值,后端不请求第三方 URL。
- T-215 下单授权:非空候选回传原子进入 `WAITING_CONFIRMATION`;Admin 按
candidate key 选择并为全部候选填写结构化理由,服务端在同一事务追加人工 review、
不可变授权快照、事件和幂等记录。领取前可按版本改选,已投递后禁改;页面明确仅
授权创建设备端待付款订单,不授权付款。
- Workflow:纯 Kotlin runner 已支持步骤 timeout、最多 3 次 retry、安全阻塞、
用户停止和单 runner 并发拒绝;T-102 已接入搜索加有界候选采集五步
- TaskSource:严格 CLI 已生成并验证真实私有 ProbeTask;默认 APK 不含私有 fixture
@@ -92,7 +96,7 @@
已用 CLI 真实导入并逐字段/图片哈希验证,生成物位于被忽略的 `.local/`
- 标准启动路径:`$env:RUN_START_COMMAND="1"; .\init.ps1`
- 标准验证路径:`.\init.ps1`
- 当前 blocker:T-214 无阻塞。真实 VLM 服务地址、模型、设备级测试凭证、成本上限
- 当前 blocker:T-215 无阻塞。真实 VLM 服务地址、模型、设备级测试凭证、成本上限
和数据留存尚未确认;当前只支持单 SKU/JPEG;候选探针截图要求 Android 11/API 30+
## 当前目录
@@ -123,7 +127,7 @@
| `docs/tasks/T-213.md` | DONE | 真机选择目标 SKU、读取组合价并安全返回 |
| `docs/tasks/T-208.md` | DONE | 归一化候选决策数据并增加结构化人工 review |
| `docs/tasks/T-214.md` | DONE | 建立 execution-scoped candidate key 与设备采集指纹 |
| `docs/tasks/T-215.md` | DOING | Admin 按 candidate key 选择并创建不可变待投递授权 |
| `docs/tasks/T-215.md` | DONE | Admin 按 candidate key 选择并创建不可变待投递授权 |
| `docs/design/` | 已确认 | T-202 原型索引、4 个管理页和 7 个 Android 页面 |
| `deepseek总结.txt` | 已有 | 历史讨论摘要,不是正式需求权威 |
| `android-buyer/` | 已有 | Roubao `main` 固定 commit 的 Android 基线 |
@@ -134,8 +138,8 @@
## 任务摘要
- 已完成:T-001 至 T-004、T-101 至 T-104、T-201 至 T-214。
- 正在进行:T-215 Admin 候选确认与一次性下单授权。
- 已完成:T-001 至 T-004、T-101 至 T-104、T-201 至 T-215。
- 正在进行:准备 T-216 设备命令投递与确认。
- 下一步:依次实现设备命令、订单 dry-run、单次提交对账和
付款提醒。
+13 -8
View File
@@ -4,7 +4,7 @@ title: Admin 候选确认与一次性下单授权
phase: 2
deps:
- T-214
status: DOING
status: DONE
created: 2026-07-28
context_ref: 56e7a2b
work_branch: null
@@ -124,13 +124,13 @@ REVOKED/SUPERSEDED`;T-215 只产生 `PENDING_DELIVERY` 和 `SUPERSEDED`。存
## 验收要点
- [ ] 非空候选批次原子进入 `WAITING_CONFIRMATION`,重复回传不重复增加事件/version。
- [ ] Admin 请求只用 candidate key,完整覆盖候选且每项接受/拒绝都有合法理由。
- [ ] review、授权、旧授权 supersede、任务事件和幂等记录原子提交。
- [ ] 跨任务/execution、旧 hash/version、伪造 key、缺 identity 和并发双授权被拒绝。
- [ ] 授权数量/SKU/价格/指纹均由服务端快照,Admin 不能篡改。
- [ ] Admin API/Web 可选候选、查看证据和理由,明确只创建待付款订单且不授权付款。
- [ ] v8 migration、Go test/race/vet、根验证和管理页面桌面/移动视口通过。
- [x] 非空候选批次原子进入 `WAITING_CONFIRMATION`,重复回传不重复增加事件/version。
- [x] Admin 请求只用 candidate key,完整覆盖候选且每项接受/拒绝都有合法理由。
- [x] review、授权、旧授权 supersede、任务事件和幂等记录原子提交。
- [x] 跨任务/execution、旧 hash/version、伪造 key、缺 identity 和并发双授权被拒绝。
- [x] 授权数量/SKU/价格/指纹均由服务端快照,Admin 不能篡改。
- [x] Admin API/Web 可选候选、查看证据和理由,明确只创建待付款订单且不授权付款。
- [x] v8 migration、Go test/race/vet、根验证和管理页面桌面/移动视口通过。
## 边界
@@ -144,3 +144,8 @@ REVOKED/SUPERSEDED`;T-215 只产生 `PENDING_DELIVERY` 和 `SUPERSEDED`。存
- 2026-07-28:T-214 实现提交 `56e7a2b` 后领取。决定复用
`WAITING_CONFIRMATION`,并把 Admin review 与一次性授权放在同一事务;设备投递和
页面动作继续保持为后续独立权限层。
- 2026-07-28:完成 v8 migration、候选就绪原子状态迁移、Admin API/SSR 表单、
不可变授权快照、修订/幂等/并发保护和审计历史。`go test ./...`、
`go test -race ./...`、`go vet ./...` 与根 `init.ps1` 通过。
- 2026-07-28:真实 Gin handler、嵌入模板和 CSS 在 Playwright `1440x900`、
`390x844` 通过;均无横向溢出,主要控件高度至少 44px,控制台无错误。