aps-agent/docs/round-4-confirm-batch-plan.md

4.8 KiB
Raw Blame History

第 4 轮工作计划(轻量合并版):批量审批(confirm-batch)

更新日期:2026-08-01

1. 本轮目标

新增批量审批能力:一条请求处理多条待审批确认卡(同一批准/驳回决定 + 每条可带意见),复用现有 P2/P3 单条 confirm 的完整语义(证据校验、双人分离、执行/驳回、审计),前端门禁管理台待审批列表支持多选批量操作;矩阵 P3「外部副作用二次确认」剩余项之一完成。

2. 背景和当前状态

  • 当前已完成:单条 confirm 链路完整(P2 一次放行、P3 双人、证据链强校验、审批意见 note 落库);GovConsole 有 PendingView(单条批准/驳回)+ ApprovalHistoryView。
  • 当前缺口:待审批列表只能逐条操作;无批量入口;后端无聚合批量端点。
  • 本轮为什么现在做:矩阵 P3 剩余「批量审批」;本地可完整验证(双后端单条语义已被第 3 轮覆盖,批量是编排层)。
  • Workspace preflight:第 3 轮收口(435 passed);服务 8003/5173 正常;共享脏工作区、无提交。
  • 方向分析:Q1 推荐选项 A(批量审批),目标续跑轮授权执行。

3. 本轮工作方向

单条 confirm
-> POST /api/actions/confirm-batch { confirmIds, approve, note? }(逐条走 execute_confirmed,聚合结果)
-> 前端 PendingView 多选 + 批量按钮(复用 postConfirm 语义)
-> 黄金测试:批量批准 P2 多条、批量含 P3 需二次确认、批量驳回、逐条隔离失败
-> 矩阵 P3 注记「批量审批已完成」;CHANGELOG

4. 已确认决策

任务重量:

  • 档位:轻型(单域:gateway 端点 + GovConsole 前端 + 黄金测试)。
  • 规模依据:核心是编排层(循环复用现有语义),不新增双后端状态机;风险 LOW。
  • 选择原因:最小且独立的 P0 剩余项,可完整本地验证。

P0/P1 决策(按 Q1 推荐采纳):

  • 决策 1(P0):本轮切片 = 批量审批(选项 A)。
  • 决策 2(P1):不新建分支、不提交、不推送。
  • 决策 3(P1):验证深度 = 聚焦批量端点测试 + 全量黄金回归。

默认假设:

  • 假设 1:批量 = 同一 approve 决定应用于多条 confirmId;note 为公共意见(逐条落库)。
  • 假设 2:逐条执行并聚合;单条失败不阻断其余(逐条隔离),响应含每条结果与失败原因。
  • 假设 3:P3 首次批准(needsSecondConfirm)在批量结果中标记 secondConfirmRequired,不视为失败。
  • 假设 4:批量仅限当前用户可审批的作用域(复用 allowed 谓词,天然隔离)。

未决但不阻塞:委托/转派审批、文件→DB 存量迁移、WORM 归档(后续轮)。

5. 范围

In scope:

  • server/gateway/app.py:ConfirmBatchRequest(confirmIds: list[str]、approve: bool、note?: str)+ POST /api/actions/confirm-batch,逐条调用 execute_confirmed,聚合 {results: [{confirmId, ok, message, secondConfirmRequired}]}。
  • apps/web/src/api/client.ts:postConfirmBatch(sessionId, confirmIds, approve, note?)。
  • apps/web/src/gov/GovConsole.tsx:PendingView 多选(Checkbox)+ 批量批准/驳回按钮。
  • tests/golden/test_gov_api.py 或新增 test_confirm_batch.py:批量 P2 通过、批量含 P3 二次确认、批量驳回、单条失败隔离、note 落库。
  • 文档:docs/architecture/harness.md、docs/product/plan-completion-matrix.md(P3 注记)、docs/CHANGELOG.md。

Out of scope:

  • 委托/转派、文件→DB 迁移、WORM、MySQL 实机故障注入。
  • 提交/推送/合并/清理用户改动。

6. 成功标准

  • 聚焦:python -m pytest -q tests/golden/test_confirm_batch.py tests/golden/test_gov_api.py -p no:cacheprovider 通过。
  • 全量:python -m pytest tests/golden -q -p no:cacheprovider(固定 .venv)≥ 435。
  • ruff 干净;前端 tsc 通过;git diff --check 无空白错误。

7. 验证方式

  • 批量端点 API 测试(TestClient + install_test_auth);前端 tsc;全量黄金回归。

8. 关键风险

风险 影响 控制方式
批量逐条执行中断言耦合 部分失败语义不清 每条独立 try/except,聚合结果含 ok/message
P3 二次确认在批量中误判失败 语义错误 secondConfirmRequired 单独标记
前端多选交互回归 编译/交互问题 tsc + 复用既有 decide 逻辑

9. 停止条件

  • 全量黄金测试非本轮相关回归无法快速定位时暂停。
  • 任何提交/推送/合并/清理操作停下等待授权。

10. 本轮完成定义

  • 实现、测试、文档完成;聚焦与全量通过;矩阵/CHANGELOG 回写;不提交。
  • 收口:报告主要结论、关键洞察、需要特别留意的地方。

11. 下一步

轻量合并版:主 agent 实现 + 验证 + 收口报告。