Files
cmroubao/docs/tasks/T-206.md
T

105 lines
5.4 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-206
title: App 接入手动领取和执行进度
phase: 2
deps:
- T-202
- T-205
status: TODO
created: 2026-07-27
context_ref: 45d4d11
work_branch: null
write_paths:
- README.md
- android-buyer/**
- backend-api/**
- docs/00-ai-start-here.md
- docs/02-requirements.md
- docs/04-architecture.md
- docs/05-coding-rules.md
- docs/07-user-stories.md
- docs/08-interaction-checklist.md
- docs/api.md
- docs/current-state.md
- docs/routes.md
- docs/tasks/T-206.md
- progress.md
---
## 问题 / 背景
T-205 已实现 BUYER + 设备联合鉴权、readiness heartbeat、原子 claim、任务参考图、
start、租约 heartbeat、release 和取消确认,但当前 Android 仍只消费本地 fixture。
管理员创建的 `PENDING` 任务无法在手机领取,真实端到端流程因此被阻塞。
现有 Roubao 基线包含端上模型服务商、Base URL 和 API Key 设置。正式采购工作流必须
把模型调用收口到肉包后端,避免采购手机持有供应商密钥或由执行员改变模型策略。
## 关联需求与交互
- 功能:F-003、F-007、F-009。
- 用户故事:US-003、US-006、US-007、US-009。
- 交互:IX-004、IX-005、IX-006、IX-008、IX-010。
- 架构/API:`HttpTaskSource`、设备联合身份、claim 租约状态机、前台服务和后端托管
VLM 边界。
## 已定合约
1. 采购 App 只配置肉包后端 HTTPS 地址,不直接配置或调用 VLM 服务商。模型名称、
Base URL 和 API Key 不进入生产采购页面、任务缓存、日志或网络响应。
2. Debug 技术探针可保留本机直连 OpenAI 兼容 mock,但必须位于 Debug source set,
不得进入 Release APK,也不得用于后端任务。
3. BUYER 登录必须同时提交预授权 device ID/secret;access token、device secret、
claim token 和幂等 key 使用 Android Keystore 支撑的安全存储。敏感值不进入
SavedState、普通 SharedPreferences、崩溃报告或日志。
4. App 每次领取前先发设备 heartbeat。无障碍未连接、拼多多未安装、网络不可用、
服务端认为设备不就绪或已有活跃任务时不生成新的 claim 请求。
5. claim token 和幂等 key 必须在请求前持久化;结果不确定时原样重放,不能生成新
token。领取成功后下载 task-scoped 参考图并校验媒体类型、大小和解码结果。
6. 用户在预览页确认后调用 start 并启动前台服务;运行中每 30 秒 heartbeat。服务端
version、generation、execution 和租约是权威状态。
7. T-206 先验证登录、领取、预览、start、前台步骤、续租、release、取消安全停止和
进程恢复。真实后端 VLM、候选/截图/事件/结果回传属于 T-207。
8. T-206 的执行进度使用 fake/受控步骤到达明确的“等待 T-207 AI 接入”结果,不把
未上传的本地结果伪装成服务端完成,也不触发拼多多不可逆操作。
## 方案
1. 在 Android 增加严格的后端配置、认证 client、token 安全存储和稳定错误映射;
Release 只接受 HTTPS,Debug 可显式信任开发证书或使用受控本机测试路径。
2. 实现 `HttpTaskSource`,把 claim 响应和参考图规范化为现有 `ProbeTask`/领域输入,
workflow 不判断任务来自 fixture 还是 HTTP。
3. 按已确认原型接入登录、任务主页、任务预览、运行和结果状态;重复点击、空队列、
登录过期、租约过期和服务端冲突都有稳定反馈。
4. 使用前台服务持有当前 execution、定时 heartbeat 并轮询取消标志;取消只在
workflow 安全检查点停止,再调用 `cancel-ack`。
5. App 重启后先用 heartbeat/任务详情核对服务端活跃任务;不能证明可恢复时停止
自动化并显示人工处理,不自行领取第二条任务。
6. 后端如缺少 App 当前任务查询所需字段,只做兼容性最小补充,不改变 T-205 的
token、幂等、租约和状态机语义。
## 验收要点
- [ ] 预授权 BUYER 在真机登录成功,错误账号、错误设备、禁用和过期状态均不能进入
任务页;敏感值不出现在日志和普通存储。
- [ ] 真机 heartbeat 后点击“获取任务”能领取管理 Web 创建的一条 `PENDING` 任务,
显示标题、SKU、数量、描述和参考图;无任务显示空状态。
- [ ] 重复点击和模拟响应丢失不会重复领取;App 重启后能继续同一 `CLAIMED` 任务。
- [ ] 预览可开始或释放;开始后前台服务显示步骤并按约 30 秒续租,不领取第二条任务。
- [ ] 管理 Web 请求安全停止后,App 在安全检查点停止并确认,服务端最终为
`CANCELED`;过期租约不会被 App 擅自续作。
- [ ] 生产采购页面没有 VLM 服务商、Base URL 或 API Key 输入;后端任务不会读取
Roubao 旧的端上 provider 配置;Release APK 不含 Debug mock 配置。
- [ ] Android 单元/集成测试、后端回归测试、根 `init.ps1` 和 OnePlus PKG110
Android 16 真机端到端 smoke 通过。
## 边界
- 不实现真实 VLM 代理、候选/截图/事件、complete/fail 和人工理由回传;属于 T-207。
- 不实现后台推送、自动领取、自动下单、支付、多任务并行或跨设备调度。
- 不允许生产 App 绕过后端直连任意模型地址,不提交真实账号、设备 secret 或订单。
## 执行记录
- 尚未开始。