144 lines
12 KiB
Markdown
144 lines
12 KiB
Markdown
# 任务路线图(Roadmap)
|
||
|
||
> 本文维护阶段、依赖和建议拆分,不跟踪状态。真实状态、写路径和执行证据在
|
||
> [`docs/tasks/T-XXX.md`](tasks/README.md);状态权威是 git frontmatter。
|
||
|
||
## 使用规则
|
||
|
||
1. 从路线图领取任务前先落任务文件、边界、写路径和验收门禁。
|
||
2. 一个 agent 同时只负责一个 `DOING`;只有写路径互不重叠才并行。
|
||
3. `needs_device: true` 只能由人完成验收,agent 写完代码仍保持 `DOING`。
|
||
4. 页面判据必须先在本项目真机取证。真机结论变化时先修订契约/原型,再写生产流程。
|
||
5. 管理员点击“开始采购”是创建待付款订单的授权;单趟业务流程不等于跳过分段取证。
|
||
|
||
## 并行执行与关键路径
|
||
|
||
Phase 是里程碑分组,不是整段串行栅栏。推荐波次:
|
||
|
||
| 波次 | 采购服务 agent | 采购工具 agent | 大脑 / 集成 |
|
||
| --- | --- | --- | --- |
|
||
| 1 | T-001 → T-004 → T-201 → T-202 | T-002 → T-101 → T-102 | T-003、原型与契约 |
|
||
| 2 | T-209 → T-203 → T-204 | T-103 → T-104 → T-105 → T-107 | T-111 单趟重构;逐任务主审 |
|
||
| 3 | T-210 → T-205 → T-206 → T-207 → T-208 | T-301 → T-302 → T-303,再并行 T-304 / T-306 / T-307 | 双端契约完整门禁 |
|
||
| 4 | T-403 → T-402 | T-305;T-208 / T-303 / T-307 后做 T-308;再汇合到 T-400 | 围栏前 dry-run、客户端围栏恢复与离线单次提交主审 |
|
||
| 5 | - | T-401 | 新真实单趟、首次一次性提交与人工调和验收 |
|
||
| 6 | - | T-405 | T-404 完整只读验收 |
|
||
|
||
并行门禁:
|
||
|
||
- T-202 只创建/展示 `DRAFT`,可与 T-103 并行;T-203 只实现管理员授权与任务状态,不依赖页面
|
||
选择器,也可在 T-103 完成前推进。
|
||
- T-210 必须等待 T-107 真机确认三闸门证据类型;T-205 再基于三类真实 asset 冻结事件与摘要,
|
||
不允许用 mock 或缺证据事件绕过生产 schema。
|
||
- T-103、T-105、T-106、T-107 的 capability 相互隔离;未经取证的后续动作不可提前暴露。
|
||
- T-401 前任何任务都不得真实点击“提交订单”;支付能力永远不实现。
|
||
- 主 agent 独立审阅每个子 agent 的 diff 并重跑验证,不以其自报完成作为证据。
|
||
|
||
## 建议拆分清单
|
||
|
||
### Phase 0 · 地基
|
||
|
||
| ID | 任务 | 依赖 | 验收要点 |
|
||
| --- | --- | --- | --- |
|
||
| T-001 | 初始化采购服务 `admin/` | - | Go 模块、健康检查、`go test` / `go vet` 可运行 |
|
||
| T-002 | 初始化采购工具 `client/` | - | Python 包、unittest、compileall、日志/产物目录可运行 |
|
||
| T-003 | 建立 `init.ps1` 统一入口 | T-001, T-002 | 一条命令安装并验证两端;失败明确,不静默跳过 |
|
||
| T-004 | 建立核心数据模型与状态机 | T-001 | 基础 tasks / authorization / submission 模型、十进制金额和状态测试 |
|
||
| T-005 | 网页端 MVP 原型 | - | 采购服务登录、传统表格、创建、批量开始采购、路由详情、待付款/调和状态可演示 |
|
||
| T-006 | 桌面端 MVP 原型 | - | 采购工具固定 tabs、轮询、当前任务/图片/日志、记录详情双视图和单趟状态可演示 |
|
||
| T-007 | 统一产品与目录名称 | - | 项目 `cmbuyer`;网页端“采购服务”在 `admin/`;桌面端“采购工具”在 `client/` |
|
||
| T-010 | 原型与交互核对 | T-005, T-006 | 人工确认 P0 页面、布局、键盘、异常和无生产副作用 |
|
||
|
||
### Phase 1 · 真机取证(最高风险)
|
||
|
||
> 每个任务均 `needs_device: true`。截图、XML、goods_id、设备、Android、连接方式和拼多多 App
|
||
> 版本写入任务记录;只有人能把任务标为 DONE。
|
||
|
||
| ID | 任务 | 依赖 | 验收要点 |
|
||
| --- | --- | --- | --- |
|
||
| T-101 | 验证 ADB / uiautomator2(USB + WiFi) | T-002 | 两通道截图和 dump;同手机双通道 fail closed;超时可配置 |
|
||
| T-102 | 验证按链接打开商品详情页 | T-101 | canonical goods 链接进入对应商品;前台包与 goods_id 有证据 |
|
||
| T-103 | 验证受控规格面板、精确选择与 SKU 单价 | T-102, T-110, T-111 | 精确唯一入口、维度内等值选择/读回、防前缀碰撞、当前价唯一读取;隔离 capability 不含数量/确认/提交 |
|
||
| T-104 | 验证规格选择能力安全退出 | T-103 | 完成选择/读价/截图后可关闭面板或退出;不接触最终提交控件 |
|
||
| T-105 | 验证数量设置、读回与闸门二 | T-104 | 先只读取证并由人确认,再设置数量、精确读回并复核规格/目标数量面板总额;规格或数量不一致、总额不可读/超上限即停 |
|
||
| T-106 | dry-run:合并式最终提交面板与闸门三取证 | T-105 | 只读采集 Gate2/Gate3 两个独立金额位置及一次人工 Back 状态;红色最终控件不点击 |
|
||
| T-107 | 固化最终提交面板与提交控件安全判据 | T-106 | 零页面点击读取 Gate3;结构化最终文本与最近可点击祖先唯一;一次 Back;静态不可达提交 |
|
||
| T-110 | 批准证据绑定的受控规格入口 | T-103 no-go 决策 | 仅批准拼多多 8.17.0 已取证的精确唯一“快要抢光”,不泛化 |
|
||
| T-111 | 调整为开始采购授权的单趟流程 | T-004, T-010, T-110 | 状态/API/原型/任务依赖一致;删除试选后确认但不放宽三闸门和围栏 |
|
||
|
||
T-106 / T-107 是发布前只读验证,不是业务任务的第一趟。首次允许创建真实待付款订单的是 T-401,
|
||
执行前必须有明确人工授权,并记录订单是否产生及如何处置。
|
||
|
||
### Phase 2 · 采购服务核心
|
||
|
||
| ID | 任务 | 依赖 | 验收要点 |
|
||
| --- | --- | --- | --- |
|
||
| T-201 | 管理员登录与会话 | T-004, T-005 | 会话、CSRF、站内 return path 与权限测试 |
|
||
| T-202 | 手工建单(F-001) | T-201 | 创建/展示 `MANUAL + DRAFT`;链接/金额/幂等/倒序;不含授权或执行 |
|
||
| T-209 | 把核心 schema / 状态机迁移为单趟模型 | T-004, T-111 | 新 migration 安全替换旧 `spec_trials` / 授权锁价结构;新增 `purchase_attempts`;删除旧 MVP 状态;无业务数据事实写入迁移前置,遇未知旧数据 fail closed;领域/迁移测试同步 |
|
||
| T-203 | 表格查询与批量开始采购(F-004、F-008、F-018) | T-202, T-209 | 只选 DRAFT;按钮明确“不付款”;事务内创建锁定任务字段的一次性授权并全批 `DRAFT → PENDING`;重放/冲突测试 |
|
||
| T-204 | 路由化任务详情与内部截图资产(F-007、F-011) | T-203 | 抽屉/完整页共享 URL;状态详情;受保护 `INTERNAL_RAW` screenshot 上传/读取、SHA-256 与 no-store;不接收 XML |
|
||
| T-210 | 扩展闸门二与闸门三证据类型 | T-107, T-204, T-302 | 扩展 Gate2/最终提交面板 Gate3 kind,并迁移 gate3_submit_amount;保留 Gate1、归属/FK/trigger/幂等;有新事实时拒绝降级 |
|
||
| T-205 | purchase attempt、事件与执行摘要 API | T-210 | 三条成功事件分别绑定正确 Gate1/2/3 asset,冻结摘要与围栏前 reason;不再创建 `spec_trials` 审批记录 |
|
||
| T-206 | 单趟状态视图与安全主动作 | T-205 | PENDING/CLAIMED/ORDERING/NEEDS_MANUAL/WAITING_PAYMENT/RECONCILIATION_REQUIRED 显示和允许动作一致;无中途确认 |
|
||
| T-207 | 授权有效期与围栏前重置(F-010) | T-206 | 围栏前过期/关闭旧授权后回 DRAFT;围栏后拒绝释放、取消、重新授权 |
|
||
| T-208 | 提交围栏与结果调和 API(F-017) | T-207, T-210 | 原子复核授权/attempt/三闸门/唯一控件;首次许可一次;重放不许可点击;结果不明永久围栏且只调和 |
|
||
|
||
### Phase 3 · 双端打通(单趟围栏前)
|
||
|
||
| ID | 任务 | 依赖 | 验收要点 |
|
||
| --- | --- | --- | --- |
|
||
| T-301 | 设备凭据与身份隔离(F-013) | T-201 | Bearer 不能建单/授权;管理会话不能领任务;凭据可撤销 |
|
||
| T-302 | 已授权任务原子领取与租约(F-005) | T-301, T-203 | 只领 PENDING+有效授权;并发唯一;重放同一 attempt;claim token/generation 有效 |
|
||
| T-303 | HTTP 任务源、证据 sink 与可恢复本地状态 | T-002, T-204, T-302 | `http.client` 单次回环请求、DPAPI/SQLite append-only 状态图、Global 单实例和 durable gateway;不伪造完整 ResultSink |
|
||
| T-304 | 定时轮询与会话边界 | T-303, T-006 | 人启动后轮询;停止只阻止下次领取;连续失败停;当前任务/记录详情双视图 |
|
||
| T-306 | 规格面板原始截图与可靠证据上传 | T-104, T-303 | 只发布 Gate1 的显式原始 PNG;唯一恢复槽;可含页面地址/手机号;不上传 XML/路径或扩 kind |
|
||
| T-307 | 客户端 attempt 事件与失败 sink | T-205, T-303 | 窄 events/fail HTTP 与同键恢复;不实现 ResultSink、围栏、结果、PDD 或 UI |
|
||
| T-308 | 客户端提交围栏与结果 sink | T-208, T-303, T-307 | 复用同一 transport/localstate;首次明确且 durable 的 CREATE_ONCE 才产生当前进程 opaque permit;重启不可重建 |
|
||
| T-305 | **单趟围栏前端到端 dry-run** | T-107, T-304, T-306, T-307, T-210 | 连续跑到同一最终面板三闸门及最终控件只读观察,随后一次安全 Back 并以固定 reason 停在围栏前;不申请许可、不点击提交 |
|
||
|
||
### Phase 4 · 真实提交与收尾
|
||
|
||
| ID | 任务 | 依赖 | 验收要点 |
|
||
| --- | --- | --- | --- |
|
||
| T-400 | 离线单次提交安全编排 | T-305, T-308 | 只用 fixture/fake port 证明四条件、点击意图先落盘、调用恰好一次和崩溃后只调和;生产接线仍不可达 |
|
||
| T-403 | 失败分类、证据归档与管理员调和视图 | T-208 | 只展示已有事实并复用同一 submission 调和事务;围栏后无重试、释放或重新授权 |
|
||
| T-402 | 待付款人工收口与付款事实记录 | T-403 | 只记录人已在外部付款的事实;三组确认、完整 lineage 与追加式审计;系统不付款 |
|
||
| T-401 | **首次真实提交与生产接线** | T-400, T-402 | 新真实单趟重新通过三闸门;首次明确许可后点击一次;首次运行固定 UNKNOWN 并人工调和;绝不付款 |
|
||
| T-405 | 采购工具 Windows 打包与运行文档 | T-401 | PyInstaller onedir ZIP;拒绝秘密/状态/证据/tests/XML;记录 commit 与 SHA-256 |
|
||
| T-404 | 完整 MVP 只读验收 | T-401, T-402, T-403, T-405 | 冻结同一候选 commit/产物做 P0、双端门禁和真机记录复核;缺陷退回原任务,不在验收任务修复 |
|
||
|
||
### V2 及以后
|
||
|
||
| ID | 任务 | 说明 |
|
||
| --- | --- | --- |
|
||
| T-501 | 图片搜索产出 goods_id(F-014) | 不在结果页读价;最多 5 个 |
|
||
| T-502 | 候选对照台(F-015) | 多候选对照,窄屏降级 |
|
||
| T-503 | Excel 批量建单(F-002) | 等表头契约 |
|
||
| T-504 | ERP 同步与建单(F-003) | 等字段映射 |
|
||
| T-505 | 批量编排与运行中接管(F-012) | 排序、暂停继续、运行中冻结 |
|
||
| T-506 | 订单自动核对回读(F-016) | 五项唯一匹配,否则人工 |
|
||
| T-507 | 本地执行轨迹留档(F-103) | NDJSON 与模型/规则分歧 |
|
||
| T-508 | AI 辅助(F-101、F-102) | 模型结论不能放宽安全边界 |
|
||
|
||
## 里程碑
|
||
|
||
- **M0**:两端原型确认;单趟主动作、状态、异常和键盘可枚举。(T-005、T-006、T-111)
|
||
- **M1**:两端骨架、基础模型与验证入口可运行。
|
||
- **M2**:真机按链接打开商品、精确选择颜色/尺码并读 SKU 单价。(T-103)
|
||
- **M3**:真机设置数量、闸门二、同一最终面板闸门三和唯一提交控件 dry-run 通过,不点击。(T-107)
|
||
- **M4**:管理员建单并通过批量开始采购创建一次性授权;设备可安全领取。(T-203、T-302)
|
||
- **M5**:围栏前 dry-run 跑通,客户端围栏恢复和离线一次性提交安全闭包成立。(T-305、T-308、T-400)
|
||
- **M6**:新真实单趟只创建可能的待付款订单,围栏/调和/人工收口、Windows 交付和只读验收闭环。(T-401~T-405)
|
||
|
||
**M2 仍是生死线。** M2 前可以并行管理会话、DRAFT 建单和开始采购的服务端授权事务,但不能编写
|
||
依赖未取证页面字段的生产执行逻辑。提速来自两端并行、窄任务和主审复用门禁,不来自删除安全闸门。
|
||
|
||
## 待办池
|
||
|
||
- V2:T-501~T-508;多设备、完整 RBAC、多平台。
|
||
- 证据保留期和自动清理策略。
|
||
- SQLite → Postgres 迁移评估。
|
||
- 设备凭据轮换。
|
||
- 风控友好的轮询与动作间隔(需真机观察)。
|