docs(tasks): keep procurement execution on device
This commit is contained in:
+66
-51
@@ -1,13 +1,13 @@
|
||||
---
|
||||
id: T-206
|
||||
title: App 接入手动领取和执行进度
|
||||
title: App 接入领取、有限离线执行和进度
|
||||
phase: 2
|
||||
deps:
|
||||
- T-202
|
||||
- T-205
|
||||
status: TODO
|
||||
created: 2026-07-27
|
||||
context_ref: 45d4d11
|
||||
context_ref: 45d1436
|
||||
work_branch: null
|
||||
write_paths:
|
||||
- README.md
|
||||
@@ -15,6 +15,7 @@ write_paths:
|
||||
- backend-api/**
|
||||
- docs/00-ai-start-here.md
|
||||
- docs/02-requirements.md
|
||||
- docs/03-tech-stack.md
|
||||
- docs/04-architecture.md
|
||||
- docs/05-coding-rules.md
|
||||
- docs/07-user-stories.md
|
||||
@@ -29,75 +30,89 @@ write_paths:
|
||||
## 问题 / 背景
|
||||
|
||||
T-205 已实现 BUYER + 设备联合鉴权、readiness heartbeat、原子 claim、任务参考图、
|
||||
start、租约 heartbeat、release 和取消确认,但当前 Android 仍只消费本地 fixture。
|
||||
管理员创建的 `PENDING` 任务无法在手机领取,真实端到端流程因此被阻塞。
|
||||
start、90 秒运行租约、release 和取消确认,但 Android 仍只消费本地 fixture。
|
||||
管理员创建的 `PENDING` 任务无法在手机领取。
|
||||
|
||||
现有 Roubao 基线包含端上模型服务商、Base URL 和 API Key 设置。正式采购工作流必须
|
||||
把模型调用收口到肉包后端,避免采购手机持有供应商密钥或由执行员改变模型策略。
|
||||
90 秒运行租约要求手机持续连接管理后端,与“手机独立完成采购,只从管理后端领取并
|
||||
回传结果”的目标冲突。T-206 需要接入后端任务,同时把运行租约扩展为有限离线执行
|
||||
授权;后台失联不能导致任务被另一台设备重复执行,也不能让手机无限离线运行。
|
||||
|
||||
Roubao 原有独立模式和端上 VLM 设置必须保留。后台任务不得下发或覆盖 VLM provider、
|
||||
Base URL、model、prompt 或 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 边界。
|
||||
- 架构/API:`HttpTaskSource`、设备联合身份、claim/运行租约、有限离线执行、前台服务
|
||||
和本地 outbox。
|
||||
|
||||
## 已定合约
|
||||
|
||||
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. 管理后端只负责身份、任务分配、状态、取消和结果审计;App 独立负责 VLM、拼多多
|
||||
自动化、人工确认、本地状态和待上传结果。
|
||||
2. BUYER 登录同时提交预授权 device ID/secret;access token、device secret、
|
||||
claim token 和幂等 key 使用 Android Keystore 支撑的加密存储,不进入 SavedState、
|
||||
普通 SharedPreferences、崩溃报告或日志。
|
||||
3. App 每次领取前发送设备 heartbeat。未就绪、已有活跃任务或服务端离线时不能领取;
|
||||
用户点击后才生成并持久化 claim token 与幂等 key。
|
||||
4. `CLAIMED` 默认租约仍为 10 分钟。start 后默认运行授权从 T-205 的 90 秒调整为
|
||||
30 分钟,可在 5 至 120 分钟范围配置;成功 heartbeat 使用服务端时间滑动续期。
|
||||
5. App 计划每 30 秒 best-effort heartbeat,以同步步骤和取消请求。heartbeat 失败时
|
||||
可在服务端下发的 `execution_expires_at` 前继续,不能因为短时断网停止或生成新
|
||||
execution;到期仍未恢复连接时必须在安全检查点停止自动化。
|
||||
6. `RUNNING/WAITING_CONFIRMATION` 无论授权是否过期都不自动回队列。重新分配必须先
|
||||
由人员结束旧 execution,避免两台手机同时操作同一任务。
|
||||
7. 管理取消在 App 离线期间不能保证即时生效。恢复连接后 App 必须先 heartbeat,
|
||||
收到取消标志便在下一个安全检查点停止并 `cancel-ack`,不得先继续页面动作。
|
||||
8. App 在授权内完成但暂时无法上传时,把结果、事件和证据引用写入加密 outbox。
|
||||
T-207 允许原设备在授权过期后补交终态结果,并标记
|
||||
`received_after_execution_expiry=true`;过期后不得继续自动化。
|
||||
9. App 重启先恢复加密本地 execution,再与服务端核对。无法证明任务归属、授权时间
|
||||
或本地步骤安全时停止并等待人工处理,不领取第二条任务。
|
||||
10. Roubao 独立模式与后台任务共享现有本地 workflow/VLM 能力,但任务源和同步边界
|
||||
独立。后台任务不能携带 provider 配置,也不能触发 App 修改本地模型设置。
|
||||
11. T-206 验证登录、领取、预览、start、前台步骤、有限离线、恢复、release 和取消;
|
||||
真实候选/截图/事件/终态回传由 T-207 完成。
|
||||
|
||||
## 方案
|
||||
|
||||
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、幂等、租约和状态机语义。
|
||||
1. 增加严格的后端地址、认证 client、Keystore-backed secret store、持久 task state
|
||||
和稳定错误映射。Release 后端地址只接受 HTTPS;开发证书路径与生产隔离。
|
||||
2. 实现 `HttpTaskSource`,把 claim 和 task-scoped 参考图规范化为现有领域输入;
|
||||
workflow/AI/automation 不判断任务来自 fixture 还是 HTTP。
|
||||
3. 接入登录、任务主页、预览、运行和恢复状态;重复点击、空队列、登录失效、授权
|
||||
到期和服务端冲突均使用已确认页面反馈。
|
||||
4. 扩展后端运行租约配置及 start/heartbeat 响应,显式返回
|
||||
`execution_expires_at`;保持 RUNNING 不自动回收的 T-205 安全规则。
|
||||
5. 前台服务持有 execution,best-effort heartbeat 并使用服务端时间偏移判断离线
|
||||
截止点。网络恢复后先同步取消/归属,再恢复允许的步骤。
|
||||
6. 增加加密本地状态/outbox 基础接口;T-206 只验证恢复和安全停止,不实现 T-207
|
||||
的完整结果 payload。
|
||||
|
||||
## 验收要点
|
||||
|
||||
- [ ] 预授权 BUYER 在真机登录成功,错误账号、错误设备、禁用和过期状态均不能进入
|
||||
任务页;敏感值不出现在日志和普通存储。
|
||||
- [ ] 真机 heartbeat 后点击“获取任务”能领取管理 Web 创建的一条 `PENDING` 任务,
|
||||
- [ ] 预授权 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 通过。
|
||||
- [ ] 重复点击和模拟响应丢失不会重复领取;App 重启能恢复同一 `CLAIMED`/RUNNING。
|
||||
- [ ] start 返回默认约 30 分钟 `execution_expires_at`;断开管理后端超过 90 秒后,
|
||||
受控 fake workflow 仍能在授权内继续,任务不会分配给第二台设备。
|
||||
- [ ] 离线授权到期后 App 安全停止;恢复网络先同步服务端状态,不擅自续作。
|
||||
- [ ] 管理取消在在线时及时处理;离线时恢复连接后的首个同步点处理并确认。
|
||||
- [ ] Roubao 原独立模式、端上 provider 选择和本地 fixture 探针回归通过;后台任务
|
||||
不下发、覆盖或读取来自任务内容的 provider 配置。
|
||||
- [ ] Android/后端测试、根 `init.ps1` 和 OnePlus PKG110 Android 16 真机 smoke
|
||||
通过,验证过程中不提交订单。
|
||||
|
||||
## 边界
|
||||
|
||||
- 不实现真实 VLM 代理、候选/截图/事件、complete/fail 和人工理由回传;属于 T-207。
|
||||
- 不实现后台推送、自动领取、自动下单、支付、多任务并行或跨设备调度。
|
||||
- 不允许生产 App 绕过后端直连任意模型地址,不提交真实账号、设备 secret 或订单。
|
||||
- 不实现候选、截图、事件、complete/fail 和人工理由回传;属于 T-207。
|
||||
- 不把模型调用代理到管理后端,不实现后台 provider 配置、推送、自动领取或多任务。
|
||||
- 不承诺离线期间即时取消;不允许离线授权无限延长、自动下单或支付。
|
||||
- 不提交真实账号、设备 secret、VLM Key、订单或证据。
|
||||
|
||||
## 执行记录
|
||||
|
||||
|
||||
+70
-70
@@ -1,12 +1,12 @@
|
||||
---
|
||||
id: T-207
|
||||
title: 接入后端 VLM、候选、事件和结果回传
|
||||
title: 接入 App 本地 VLM、候选、事件和结果回传
|
||||
phase: 2
|
||||
deps:
|
||||
- T-206
|
||||
status: TODO
|
||||
created: 2026-07-27
|
||||
context_ref: 45d4d11
|
||||
context_ref: 45d1436
|
||||
work_branch: null
|
||||
write_paths:
|
||||
- README.md
|
||||
@@ -14,6 +14,7 @@ write_paths:
|
||||
- backend-api/**
|
||||
- docs/00-ai-start-here.md
|
||||
- docs/02-requirements.md
|
||||
- docs/03-tech-stack.md
|
||||
- docs/04-architecture.md
|
||||
- docs/05-coding-rules.md
|
||||
- docs/07-user-stories.md
|
||||
@@ -27,95 +28,94 @@ write_paths:
|
||||
|
||||
## 问题 / 背景
|
||||
|
||||
T-206 跑通任务领取和执行生命周期后,App 仍不能安全使用真实 VLM,也不能把候选、
|
||||
步骤、截图、失败和人工结论保存到后端。Roubao 原有端上 provider 设置会把供应商
|
||||
选择和密钥交给采购手机,难以统一审计、限流、切换模型和积累可比较数据。
|
||||
T-206 跑通任务领取和有限离线生命周期后,还需要把现有 App 本地 VLM、最多 5 个
|
||||
候选、截图、事件、失败和人工结论接入后台任务,并在网络恢复后可靠回传。
|
||||
|
||||
第一版需要支持管理员配置一个 OpenAI 兼容 VLM 服务商,由后端代理所有模型调用;
|
||||
App 只传任务/execution 标识和受控候选证据。候选优化用的完整结构化人工标签仍由
|
||||
T-208 后置,不能阻塞本任务的端到端闭环。
|
||||
手机独立执行意味着后端不保存 VLM Key、不代理模型请求,也不决定具体 provider。
|
||||
代价是不同设备的模型和提示词可能不同,因此结果必须携带非秘密 provenance,管理端
|
||||
才能区分搜索、模型和人工判断。端上 Key 只能做到受控保护,Root/受控设备仍可能在
|
||||
运行时提取,所以必须使用独立、可撤销、有限额度的设备 Key。
|
||||
|
||||
## 关联需求与交互
|
||||
|
||||
- 功能:F-002、F-004、F-005、F-006、F-007、F-009。
|
||||
- 用户故事:US-002、US-004、US-005、US-006、US-009。
|
||||
- 交互:IX-003、IX-006、IX-007、IX-008、IX-010。
|
||||
- 架构/API:后端托管 VLM、OpenAI 兼容 adapter、AI 合约、执行事件/资产、
|
||||
`complete`/`fail` 和管理 Web VLM 设置。
|
||||
- 架构/API:App 本地 VLM Gateway、候选/事件/资产、加密 outbox、
|
||||
`complete`/`fail` 和管理任务详情。
|
||||
|
||||
## 已定合约
|
||||
|
||||
1. 生产数据流固定为 `Android App -> 肉包后端 -> VLM Provider`。BUYER 不能读取、
|
||||
选择或覆盖 provider、Base URL、model、prompt version、timeout、retry 或 API Key。
|
||||
2. 第一版 provider 协议只支持 OpenAI 兼容 `/v1/chat/completions` 多模态请求;
|
||||
`/v1/responses` 和供应商私有协议后置。管理员配置名称、HTTPS Base URL、模型、
|
||||
超时、重试上限、启用状态和默认版本。
|
||||
3. MVP 同时只有一个默认 provider 版本供新 execution 使用。配置修改创建新版本;
|
||||
execution 在首次 AI 调用时绑定不可变的 provider/model/config version 和
|
||||
prompt version,后续调用不得漂移。
|
||||
4. API Key 是 write-only secret。后端使用环境变量提供的 256 bit master key,以
|
||||
AEAD 和随机 nonce 加密后落库;AAD 绑定 provider/version。GET、HTML、日志、
|
||||
错误、审计事件和备份说明均不回显明文。缺少 master key 时禁止保存含 Key 的配置
|
||||
和真实调用,但仍可启动管理/任务功能。
|
||||
5. 远程端点只允许 HTTPS,禁止 userinfo、query、fragment 和重定向;解析/连接阶段
|
||||
阻断 loopback、私网、链路本地、组播和云 metadata 地址,避免 SSRF/DNS rebinding。
|
||||
无 Key 的 loopback HTTP 仅允许显式 Debug 测试配置,不能从生产管理页面创建。
|
||||
6. 管理员可用内置脱敏文本和测试图片检查连接,不发送订单、店铺、SKU 或任务图片。
|
||||
测试失败只显示稳定分类和 request ID,不显示供应商响应正文或密钥。
|
||||
7. 后端从原任务读取需求图片/文字;App 不能替换 SKU、数量、预算或参考图。候选评估
|
||||
只接受当前 execution 已上传、已鉴权和解码的截图资产。
|
||||
8. 每个 execution 最多一次需求提取、最多 5 次按 ordinal 串行候选评估。默认不重试;
|
||||
配置最多允许 1 次仅限确定未收到响应的临时网络失败,schema/4xx/安全错误不重试。
|
||||
9. provider 响应经过严格 schema、大小、置信度和确定性硬约束校验。模型不能产生
|
||||
点击动作、候选授权、人工结论或订单授权,MVP 始终 `order_submitted=false`。
|
||||
10. App 用本地持久 outbox 幂等回传步骤事件、受控截图、候选摘要、complete/fail;
|
||||
上传失败可以补报,但不得恢复已经安全停止的自动化。
|
||||
11. T-207 保存第一版候选和模型理由及必填 `operator_reason`,足以审计完整流程;
|
||||
逐候选结构化 reason code、改选修订和训练/离线评估数据合约属于 T-208。
|
||||
1. 数据流固定为:App 从管理后端领取任务;App 直接调用本机已配置的 OpenAI 兼容
|
||||
VLM;App 操作拼多多并人工确认;App 向管理后端回传结构化结果和证据。
|
||||
2. 管理后端不保存或下发 VLM provider、Base URL、model、prompt 或 API Key,不实现
|
||||
`/tasks/{id}/ai/*` 代理接口,也不根据候选外链请求第三方网络。
|
||||
3. 后台任务不能覆盖 App 的 VLM 配置。执行开始时 App 把 provider ID、model、
|
||||
prompt version、schema version 和相关证据 SHA-256 固定为 execution provenance;
|
||||
API Key、Authorization 和完整 Base URL 不进入结果。
|
||||
4. App 支持 `MANUAL_FIRST` 与 `AI_ASSISTED`。前者直接从原始标题/SKU产生有界搜索词并
|
||||
由人员判断;后者调用本地 VLM 做需求提取和候选评估。VLM 不可用不能阻止人员完成
|
||||
任务,但模式切换必须显式记录,不能静默降级。
|
||||
5. 现有 provider 设置保留,API Key 从普通 SharedPreferences 迁移到
|
||||
Android Keystore 包装的加密存储;迁移成功后删除旧明文,失败时不继续真实调用。
|
||||
6. 每台采购设备使用独立、可撤销、有限额度的 provider Key。Release 远程端点只允许
|
||||
HTTPS,禁止 userinfo/query/fragment/重定向;HTTP 只用于 Debug 无 Key 本机 mock。
|
||||
7. 每个 execution 最多一次需求提取、最多 5 次按 ordinal 串行候选评估。模型输出经
|
||||
严格 schema、大小、置信度和确定性约束校验,不能授权点击、人工结论或订单提交。
|
||||
8. SKU、数量、预算和参考图来自后端原任务。App 不把订单号、店铺名、数量或本机路径
|
||||
发给 provider,只发送必要标题、SKU、参考图和当前候选受控证据。
|
||||
9. 候选观测、模型判断、本地确定性推荐和人工理由分开序列化。T-207 要求简短
|
||||
`operator_reason`;T-208 再增加逐候选结构化 reason code 和修订版本。
|
||||
10. App 使用加密 outbox 幂等上传事件、截图、候选、complete/fail。后端以
|
||||
task/execution/device/claim 重新授权,校验任务哈希、asset、状态和幂等键。
|
||||
11. App 可以在执行授权内完成后离线上传。授权过期后的补报标记
|
||||
`received_after_execution_expiry=true`,但服务端不把补报等同于允许过期后继续
|
||||
自动化;管理详情必须显示该审计状态。
|
||||
12. 所有终态强制 `order_submitted=false`。人员确认后不恢复自动点击,安全/取消错误
|
||||
不重试,后端结果 API 没有订单或支付权限。
|
||||
|
||||
## 方案
|
||||
|
||||
1. 新增版本化 provider 配置、加密 secret、execution provenance、候选、执行事件、
|
||||
outcome/error 和 evidence 资产 migration;原始任务事实与模型派生值分表保存。
|
||||
2. 后端实现 provider 管理 usecase、SSR 设置页和 CSRF 保护的写入动作。配置更新只
|
||||
追加版本,停用只影响新 execution,审计记录 actor、时间和非秘密字段。
|
||||
3. 实现安全 HTTP transport、OpenAI Chat Completions adapter、严格请求映射/响应
|
||||
schema、调用预算、取消、超时、重试和错误分类;普通测试只连接本机 mock。
|
||||
4. 实现 `extract-requirements`、`evaluate-candidate`、event、asset、complete 和
|
||||
fail API;全部验证 BUYER/device/claim/execution/version/租约和幂等键。
|
||||
5. Android 用后端 AI client 替换生产工作流的端上 provider client,上传受控截图,
|
||||
按最多 5 个候选执行并在硬停止点要求人工填写简短理由。
|
||||
6. 管理任务详情展示原始需求、provider provenance、候选评估、人员结论、事件和鉴权
|
||||
证据;模型理由、确定性推荐和人员理由视觉及数据上保持分离。
|
||||
7. 清除采购模式遗留的端上 provider secret,并用测试证明 Release 不再读取或发出
|
||||
直连 provider 请求。Debug 探针继续使用独立、被忽略的本机配置。
|
||||
1. Android 把现有 SettingsManager/provider secret 迁移到 Keystore-backed store,
|
||||
保留 Roubao 独立模式;为后台 execution 增加不可变本地 provenance snapshot。
|
||||
2. 用已有 RequirementExtractor、CandidateEvaluator 和 workflow 处理
|
||||
`HttpTaskSource` 任务,增加 `MANUAL_FIRST` 显式分支和禁止任务覆盖 provider 的
|
||||
契约测试。
|
||||
3. 新增本地加密 execution/outbox,按事件、资产、候选和终态的依赖顺序上传;网络
|
||||
结果不确定时复用原幂等键,进程重启后继续同步但不继续已停止的自动化。
|
||||
4. 后端新增候选、执行事件、outcome/error 和 evidence migration,以及鉴权 asset、
|
||||
events、candidates、complete、fail API;不新增 provider 表、Key 或第三方 HTTP。
|
||||
5. 完整结果保存 task/execution ID、任务内容哈希、App/Android/拼多多版本、模式、
|
||||
搜索词、最多 5 个候选、VLM provenance/判断、本地推荐、人工结论、错误和
|
||||
`order_submitted=false`。
|
||||
6. 管理任务详情展示原始输入、设备/版本、候选、模型判断、推荐、人工理由、事件、
|
||||
离线补报标志和鉴权证据,各层信息不合并。
|
||||
|
||||
## 验收要点
|
||||
|
||||
- [ ] ADMIN 能新增/更新/启用一个 OpenAI 兼容 provider 版本并执行脱敏连接测试;
|
||||
非 ADMIN/BUYER 不能访问,API Key 永不回显。
|
||||
- [ ] 数据库只含带随机 nonce 的密文;错误 master key、篡改密文和缺少 master key
|
||||
均安全失败,日志/HTML/JSON/事件不包含 Key 或供应商正文。
|
||||
- [ ] 私网、loopback、metadata、重定向、DNS rebinding 和非法 URL 被拒绝;生产只
|
||||
连接受控 HTTPS 目标。
|
||||
- [ ] 真机领取后台任务后,需求提取和最多 5 个候选评估均经肉包后端完成,抓包/测试
|
||||
证明 App 不直连 VLM,不携带 provider Key。
|
||||
- [ ] SKU、数量、预算和参考图只能来自原任务;低置信度、无效 schema、超预算、
|
||||
证据不完整和模型越权输出均转人工或拒绝。
|
||||
- [ ] 事件、截图、候选、complete/fail 在断网重试后不重复,管理详情可以还原执行
|
||||
过程;人工接受/拒绝/无匹配/转人工均要求 `operator_reason`。
|
||||
- [ ] 任一路径不提交订单,终态明确保存 `order_submitted=false`;取消和安全错误不
|
||||
自动重试或继续点击。
|
||||
- [ ] Roubao 原有独立模式和 provider 选择可继续使用;旧 Key 成功迁移后普通
|
||||
SharedPreferences 无明文,迁移/解密失败安全阻断真实调用。
|
||||
- [ ] 后台任务 payload 无 provider 地址、模型或 Key;伪造这些字段被拒绝/忽略且
|
||||
不能修改 App 设置。
|
||||
- [ ] `MANUAL_FIRST` 在无 VLM 时能完成候选采集和人工确认;`AI_ASSISTED` 由 App
|
||||
直连配置的 HTTPS provider,抓包/测试证明管理后端不代理模型。
|
||||
- [ ] 最多一次需求提取、最多 5 个候选评估;SKU/数量/预算保持原值,低置信度、
|
||||
无效 schema、超预算、证据不足和越权输出转人工或拒绝。
|
||||
- [ ] 结果包含 provider/model/prompt/schema 和证据哈希但不含 Key、Authorization、
|
||||
完整 endpoint、订单号、店铺名或供应商原始响应正文。
|
||||
- [ ] 事件、截图、候选、complete/fail 在断网、进程重启和响应丢失后不重复;授权
|
||||
过期补报可审计,后台不会把 RUNNING 自动分给其他设备。
|
||||
- [ ] 接受、拒绝、无匹配和转人工均要求 `operator_reason`;管理详情可还原执行过程,
|
||||
并明确显示 `order_submitted=false`。
|
||||
- [ ] migration up/down/up、Go unit/integration/race/vet、Android unit/instrumented、
|
||||
Playwright 三视口、根 `init.ps1` 和 OnePlus PKG110 真机 smoke 通过。
|
||||
|
||||
## 边界
|
||||
|
||||
- 不支持 `/v1/responses`、供应商私有协议、多 provider 按任务选择、采购员切换模型、
|
||||
自动模型路由、实时价格或成本报表。
|
||||
- 不实现 T-208 的逐候选结构化人工标签、修订历史、离线评估或训练管线。
|
||||
- 不下载客户端提交的任意商品/图片 URL,不自动提交订单、支付或绕过平台风险控制。
|
||||
- 不把真实 provider Key、订单、截图、模型正文或解密 master key 纳入 Git。
|
||||
- 不实现后端 VLM 配置/代理、多设备统一模型、自动 provider 路由或费用报表。
|
||||
- 不实现 T-208 的结构化人工标签、修订历史、离线评估或训练管线。
|
||||
- 不下载客户端提交的任意商品/图片 URL,不自动提交订单、支付或绕过风险控制。
|
||||
- 不承诺 Keystore 能抵抗已 Root/完全受控设备;不提交真实 Key、订单或证据。
|
||||
|
||||
## 执行记录
|
||||
|
||||
|
||||
Reference in New Issue
Block a user