# 实施计划 > 开发过程的推进方案:**loop 模式**(每轮一个可验证批次)+ 八个阶段的验收标准。任务口径全部指向 `docs/design/` 的设计文档;本文件只回答「先做什么、怎样算做完、下一步做什么」。 | 项目 | 内容 | |------|------| | 状态 | 定稿(2026-09-14;**进度表随 loop 持续更新**) | | 关联 | `docs/design/API契约.md` · `docs/design/同步引擎设计.md` · `docs/design/交互设计.md` · 四张表字段设计 · `AGENTS.md`(命令) | | 范围 | 阶段划分、每批验收标准、loop 机制与停车规则;技术细节一律以设计文档为准 | | 当前进度 | 阶段 0 已完成;下一批:**阶段 1**(数据层与密钥) | --- ## 1. loop 机制(每轮固定动作) 1. **取任务**:计划表(§3)中当前批次的第一项 2. **实现**:以设计文档为准,不自由发挥 3. **验证**:跑该批次的验收命令(type-check / 单测 / 实测 curl / 浏览器走查) 4. **记录**:勾选进度表(日期 + 验证方式) 5. **提交**:一个逻辑单元一个 commit(**作者已授权 loop 内直接提交**,dev 分支;`git push` 永远由作者手工) 6. **报告**:一句话——做了什么 / 验证结果 / 下一项 7. **停车规则**:遇设计文档未覆盖的问题 → **停下问作者**,不猜着往下写(已知的待定问题见 §4) ## 2. 前提(2026-09-14 定) - **开发库**:Docker 本地 PostgreSQL(`docker-compose.yml` 随阶段 1 落地;连接串走 `.env`,不入库) - **上游联调**:真实 sk-key(作者提供,放 `.env`;文件不入库)——阶段 2 / 4 依赖它 - **提交**:loop 内直接提交已授权;push 由作者手工(仓库有两个远端) ## 3. 阶段与验收标准 | 批次 | 内容 | 验收标准 | 状态 | |------|------|---------|------| | 0 | 脚手架 + 契约类型 + 501 骨架 | 命令链全绿(type-check / test / build) | ✅ 2026-09-14 | | 1 | **数据层与密钥**:crypto(HKDF 派生 / HMAC-SHA256 / AES-256-GCM)· 时间工具(+08:00 序列化、UTC 秒转换)· `docker-compose.yml` · 建表 | 单测:哈希确定性 + 加解密往返;`db:push` 后四张表在库 | ☐ | | 2 | **上游客户端 + key 管理**(`GET` / `POST` / `PATCH` 三端点) | curl 实测:登记 → 清单 → 停用/启用;三类错误码分支正确(`key_rejected` / `already_registered` / `upstream_unavailable`) | ☐ | | 3 | **管理面其余**:purchases 五端点 + qpu 一端点 | curl 实测:CRUD 全流程 + 观测聚合(`matched_purchase_id` 判定正确) | ☐ | | 4 | **同步引擎**:tick(5 分钟 + 防重入 + 启动即跑)· 日志整批事务入库 · 额度采集 · QPU 采样 · 401 状态机(N=3) | 库中出现真实数据;`[sync]` 日志符合引擎设计;连续 401 触发摘除且 `disabled_source = auto_401` | ☐ | | 5 | **查看面数据面**:`logs/query` + `summary` + 折算链(按购买期间分段取尺) | curl 实测:字段齐全、`meta.data_until` 取最慢、金额按购买分段累加正确 | ☐ | | 6 | **前端 `/usage-log`**:筛选区(key 标签 + datetimerange + 快捷项)· 卡片 · 表格 + 展开行 · 分页器 · 六种状态模式 | 浏览器实测:真实数据走一遍;六态逐一可见(加载 / 初始 / 未收录 / 无记录 / 同步中 / 失败) | ☐ | | 7 | **前端管理面**:口令门帘 + 侧边栏 + 三页(key 管理 / 购买记录含核对提示与补录 / 换算参数) | 浏览器实测:登记、启停、CRUD、补录、时间线全操作 | ☐ | | 8 | **收尾**:部署文档(`docs/delivery/`)· 端到端走查 · 文档状态更新(设计文档 → 已实现) | 一条命令链可部署(前后端独立 + 后端单实例注记);走查无阻 | ☐ | ## 4. 实现中的待定问题(遇到即停车问作者) | # | 问题 | 归属批次 | |---|------|---------| | 1 | `amount_rmb` 在「日志无归属购买记录」时取什么值(0 / 退化为额度美元 / 前端显示「—」) | 5 | | 2 | 充值(`wallet`)路径的折算近似(设计文档标「后议」) | 5(遇到再说) | | 3 | `dedupe_key` 内容指纹的拼接细节(`request_id` 为空时) | 4 | | 4 | 上游对同账号请求的态度(限流 / 并发被拒时的表现) | 4(遇到再说) | ## 5. 风险 - 真实上游联调依赖作者提供的 key 与网络可达;不可用时临时以假上游过渡(不改变验收口径) - 折算链(阶段 5)依赖已登记的购买记录——无记录时的退化行为即待定问题 #1 - **后端必须单实例**(同步引擎前提):部署文档(阶段 8)必须写明;本地开发也不要起两个后端