# 测试规格 — 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 使用 `:`,同记录运行中流程不重复启动; - 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. 计划命令 ```bash 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。