test-spec.md 6.4 KB

测试规格 — Forge AI 中枢受控流程动作

status: reviewed_passed created: 2026-07-12

1. P0 安全矩阵

  • SERVICE invoke、scope 不足、grant 撤销、用户权限撤销、tenant/org 不一致均零 FlowClient 调用;
  • 未发布/停用对象、无 FLOW binding、binding/model/version 漂移拒绝;
  • 客户端 userId、flowModelKey、variables、processInstanceId 和未知字段被 Schema 拒绝;
  • START 使用 <objectCode>:<recordId>,同记录运行中流程不重复启动;
  • APPROVE/REJECT 只允许当前 A 已签收任务,候选未签收、他人任务、已办任务拒绝;
  • task businessKey/objectCode/recordId/processDefKey 任一不匹配拒绝;
  • 无 elicitation、DECLINE/CANCEL/confirm=false 均零副作用;
  • 相同幂等键同请求返回已有结果,不同请求拒绝;
  • 审计或幂等预留失败时零副作用;
  • 正常和异常路径无身份、租户、MDC 泄漏。

2. P0 协议矩阵

  • initialize 协议仍为 2025-06-18
  • tools/list 仍只有固定 ping/search/describe/invoke;
  • /mcp Streamable HTTP,不出现旧 SSE/STATELESS/stdio/ASYNC;
  • FLOW_ACTION search/describe 返回结构化 Schema,invoke 返回统一结果;
  • 未认证/Origin/身份基础设施错误仍由 HTTP 401/403/503 处理。

3. P1 功能矩阵

  • 发布 API 为每个 operation 生成稳定 sourceKey、Schema、policy snapshot;
  • START 从发布业务记录和 FLOW binding 构建流程;
  • APPROVE/REJECT 固定使用 A,comment 和 action 正确映射;
  • CapabilityInvocationLog 与 FlowActionLog requestId 可关联;
  • actorUserId/clientId/serviceUserId/tenant/activeOrg 完整记录,不保存 comment 正文。

4. 计划命令

cd forge-server
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home \
PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH \
mvn -pl forge-framework/forge-plugin-parent/forge-plugin-capability-flow-actions -am install -DskipTests

mvn -Penable-tests -f forge-framework/forge-plugin-parent/forge-plugin-capability-flow-actions/pom.xml test
mvn -Penable-tests -f forge-framework/forge-plugin-parent/forge-plugin-capability-secure-actions/pom.xml test
mvn -Penable-tests -f forge-framework/forge-plugin-parent/forge-plugin-capability-control-plane/pom.xml test
mvn -Penable-tests -f forge-framework/forge-plugin-parent/forge-plugin-mcp/pom.xml test
mvn -Penable-tests -f forge-framework/forge-plugin-parent/forge-plugin-capability-identity/pom.xml test
mvn -pl forge-admin-server -am package -DskipTests

5. 条件跳过

  • 无受控 MySQL 时不执行 V1.0.24 真实迁移,只做静态检查;
  • 无独立 Flow 服务与测试流程数据时不冒充真实 START/APPROVE/REJECT E2E,通过 mock FlowClient/BusinessFlowService 验证安全编排;
  • 不调用真实大模型;本阶段验证能力与流程执行链,不验证模型自主决策。

6. Apply 验证结论

  • Flow Actions 11/11、Secure Actions 29/29、Control Plane 29/29、Identity 35/35、MCP 16/16 全部通过;
  • Flow Actions Reactor 34/34、Admin 聚合 41/41 成功;Generator 由 Reactor 编译 438 个源码文件通过;
  • Mapper XML、迁移静态规则、JAR 装配、禁止依赖和 Streamable HTTP 配置扫描通过;
  • 未执行的真实 Flyway、真实 Flowable E2E 和真实模型调用仍按条件跳过,等待 Review 后由人工环境验收。

7. Review 增量验证(2026-07-12)

本轮只读复跑:

  • Flow Actions:11/11 PASS;
  • Secure Actions:29/29 PASS;
  • 两个 Flow Actions Mapper XML:xmllint --noout PASS;
  • 未启动服务、未执行 Flyway、未调用真实 Flowable 或模型。

Review 发现测试矩阵缺口:

  • 缺少顶层 userId/tenantId/activeOrgId/flowModelKey/variables/processInstanceId/unknown 失败关闭测试;
  • 缺少任务确认后转签、跨租户任务和 Flow 服务最终 assignee 校验测试;
  • 缺少 START 成功、历史实例重发 businessKey、binding/version 漂移测试;
  • 缺少远程 Flow 成功、本地 link/SUCCESS 日志提交失败后的幂等恢复测试;
  • 缺少 search/describe 返回 sourceType/behavior/operation 的契约测试。

结论:现有测试均绿,但 Spec Compliance FAIL,状态为 reviewed_with_findings。Fix 后必须先补上述 Red/Green,再复跑共享回归。

8. Fix 增量验证(2026-07-12)

  • Flow Actions:16/16 PASS,新增 START 专用固定 key 入口、FAILED/超时 RUNNING 恢复、发布版本事实锚定;
  • Flow 最终授权:7/7 PASS,覆盖跨租户、确认后转签、非办理人幂等探测、同请求完成态和普通 UI 自动分配兼容;
  • Secure Actions:31/31 PASS,覆盖七类顶层危险字段失败关闭、目录元数据真实输出和 Schema;
  • Generator 发布动作:3/3 PASS;Capability Core:6/6 PASS;MCP:16/16 PASS;Control Plane 与 Identity 共享回归 PASS;
  • Admin + Flow Server 聚合:43/43 PASS;Generator 438 源码、Flow plugin 124 源码、Flow Server 25 源码编译通过;
  • 三个 Mapper XML、V1.0.25 静态规则、禁止依赖、旧 transport 和 git diff --check PASS。

本轮仍不执行真实 Flyway、真实 Flowable E2E 或真实模型调用。状态进入 fixed_pending_review,待二次两阶段 Review。

9. 二次 Review 与身份桥增量验证(2026-07-12)

  • Flow Client delegated identity:2/2 PASS,确认请求体不传 userId/userName/deptId/deptName,委托签发失败不降级静态 Token;
  • Sa-Token 委托签发与 Session verifier:7/7 PASS,覆盖 60 秒 TTL、唯一 device、空 Token、SERVICE 身份、普通 Session 无标记和非正 clientId;
  • Flow delegated controller:3/3 PASS,确认 START 只取可信 Session,任务身份/租户不能由 DTO 覆盖;
  • Flow Actions:19/19 PASS;Flow 最终任务授权:7/7 PASS;
  • Secure Actions 31/31、Identity 35/35、Control Plane 29/29、MCP 16/16 PASS;MCP 协议仍为 2025-06-18 且仅 Streamable HTTP;
  • Admin + Flow Server 聚合 package:43/43 PASS;三个 Mapper XML、迁移静态规则、禁止依赖和尾随空格检查 PASS。

一次从仓库根目录运行 Maven dependency tree 因 reactor 路径错误失败,切换到 forge-server 后同命令 PASS;这是命令工作目录问题,不是代码或依赖失败。

未启动服务,无 PID 需要清理;真实 Flyway、真实 Flowable E2E 和真实模型调用继续按条件跳过。二次 Review 结论为 PASS。