Page:
T-003
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
Table of Contents
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.
同步来源:
docs/tasks/T-003.md· commitafc651f75a3a
id: T-003 title: 建立 Android workflow 测试骨架 phase: 0 deps:
- T-001
status: DONE
created: 2026-07-25
context_ref:
d013ac8c84work_branch: main write_paths: - android-buyer/app/build.gradle.kts
- android-buyer/app/src/main/java/com/roubao/autopilot/workflow/**
- android-buyer/app/src/test/java/com/roubao/autopilot/workflow/**
- docs/03-tech-stack.md
- docs/current-state.md
- docs/tasks/T-003.md
- progress.md
问题 / 背景
现有 Roubao MobileAgent 直接组合 VLM、设备控制和 UI 状态,无法在本地 JVM 中稳定
验证采购步骤的超时、重试和安全停止。T-101 开始操作拼多多前,需要先建立一个小型、
可注入 Fake automation 的工作流内核,防止自动化逻辑只能靠真机人工回归。
关联需求与交互
- 功能:为 F-004 至 F-007 提供可测试执行骨架。
- 用户故事:US-004 执行受限采购探针、US-006 安全失败和可恢复。
- 交互:本任务无新界面。
- 架构:Android workflow 层和 automation adapter 接口。
方案
- 定义步骤、自动化结果、状态、失败原因、安全停止原因和运行报告。
WorkflowRunner每次只运行一个工作流;每步使用协程 timeout,重试次数有硬上限。- 用户停止只取消当前 automation 子任务并返回
STOPPED报告,不取消调用方协程。 - 登录、验证码、风控、未知页面和支付边界作为不可重试的
BLOCKED终态。 - 使用
kotlinx-coroutines-test和 Fake automation 覆盖成功、重试、超时、阻塞、 用户停止和并发运行拒绝。
验收要点
- Fake automation 下可以验证多步骤成功状态迁移。
- 单步 timeout 可确定性触发,且不会形成无界等待。
- retry 次数有明确上限,耗尽后进入结构化失败。
- 登录、验证码、风控、未知页面和支付边界不自动重试。
- 用户停止会取消当前步骤并返回
STOPPED,调用方测试协程仍可完成。 - 同一 Runner 拒绝并发运行。
lintDebug test assembleDebug通过。
边界
- 不实现拼多多搜索、点击或页面解析。
- 不接入 MainActivity 或替换现有 MobileAgent。
- 不做任务持久化、进程恢复、后台 API 或前台服务。
- 不允许无限 retry;
maxRetries必须为非负且由步骤显式给出。
执行记录
2026-07-25:任务开始
- 基于 T-002 提交
d013ac8开始。 - T-002 已提供设备就绪和安全阻塞事实;T-003 只定义如何消费 automation 结果。
2026-07-25:实现和验证完成
- 新增纯 Kotlin
WorkflowStep、AutomationGateway、状态/结果/报告模型和WorkflowRunner,没有 Android UI、设备或 VLM 依赖。 - 单步强制正 timeout;
maxRetries只能是 0 至 3。timeout 作为结构化可重试失败, 重试预算耗尽后进入FAILED。 - 登录、验证码、风控、未知页面和支付边界统一返回
BLOCKED,即使步骤配置了重试 也只调用 automation 一次。 requestStop()只取消当前 automation 子任务;runner 捕获该取消并返回STOPPED, 不取消调用方协程。原子运行标记拒绝同一 runner 并发执行。- 增加
kotlinx-coroutines-test 1.7.3,用虚拟时间验证两次 100ms timeout 在 200ms 后失败,不产生真实等待。 - 新增 6 个 workflow 测试;连同 T-002 的 5 个测试,在 Debug/Release 两个变体 共执行 22 次,0 failure、0 error、0 skipped。
.\gradlew.bat lintDebug test assembleDebug --no-daemon:成功。