status: done created: 2026-07-12
USER_DELEGATION_REQUIRED;2025-06-18;/sse、STATELESS、stdio、ASYNC 或第二 MCP endpoint。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-secure-actions -am install -DskipTests
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-generator/pom.xml \
-Dtest=BusinessActionExecutionServiceTest,BusinessObjectActionServicePublishedTest 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
现有测试通过不能覆盖或推翻以下失败项;Fix 后必须先补 Red、再给 Green:
| Review 项 | 当前缺口 | Fix 验收 |
|---|---|---|
| R1 字段交集 | 只断言 descriptor.allowedFields,未证明 grant 缩小后原版本 Schema 中的额外字段会被拒绝 |
grant 仅允许 status 时,版本 Schema 中的 remark 必须在 elicitation 前拒绝且零副作用 |
| R2 版本 binding | 未覆盖 capability 当前版本与 PINNED/FOLLOW_MAJOR resolved version 的 source binding 不同 | 目录必须返回 resolved version 自身的 sourceKey/sourceVersion/policy;重绑定不得串动作 |
| R3 递归步骤 | 只覆盖顶层禁用步骤 | stepList、嵌套 steps、childSteps 和未知步骤均在发布与 invoke 阶段失败关闭 |
| R4 不可用错误 | 未注入目录 Mapper、策略解析和审计存储故障 | 分别返回稳定 CATALOG_UNAVAILABLE、AUTHORIZATION_UNAVAILABLE、AUDIT_UNAVAILABLE,不得映射为参数错误 |
| R5 双审计 | 只验证正常审计调用 | 审计写失败不能形成“业务成功但无 Capability 审计”的静默缺口 |
| R6 请求指纹 | 未校验 elicitation 指纹与请求体的绑定关系 | capability/version/recordId/arguments 任一变化时规范化摘要必须变化,键顺序变化时摘要保持一致 |
Review 结论:Spec Compliance FAIL,状态 reviewed_with_findings;阶段一未通过,因此未执行 Code Quality Review。
| Review 项 | Red/Green 证据 | 结果 |
|---|---|---|
| R1 字段交集 | Catalog 测试验证版本 status,remark + grant status 后有效 Schema 只剩 status;invoke 另有显式字段交集检查 |
PASS |
| R2 版本 binding | Mapper XML 测试要求 v.source_key/v.source_version 且禁止 c.source_key/c.source_version,查询同时约束版本行为、风险和可见性 |
PASS |
| R3 递归步骤 | 顶层 stepList、嵌套 START_FLOW、嵌套 CREATE_RECORD 均失败关闭;invoke 在审计和执行前拒绝 |
PASS |
| R4 不可用错误 | 授权 Mapper 故障稳定返回 AUTHORIZATION_UNAVAILABLE;目录数据返回 CATALOG_UNAVAILABLE;审计故障返回 AUDIT_UNAVAILABLE |
PASS |
| R5 双审计 | 审计预留失败时执行次数为 0;recordOrUpdate 覆盖首次插入、可信身份更新、身份冲突和 JDBC 未报告 changed rows |
PASS |
| R6 请求指纹 | 参数 Map 键顺序变化摘要相同,recordId/请求内容变化摘要不同 | PASS |
回归结果:Secure Actions 27/27、Control Plane 27/27、Generator 专项 7/7、MCP 16/16、Identity 35/35、Admin 40/40。V1.0.23 真实数据库迁移、真实外部 MCP 客户端和真实模型调用继续按原条件跳过,未冒充 PASS。
mvn -Penable-tests test:Secure Actions 27/27 PASS;xmllint --noout SecureActionCatalogMapper.xml:PASS;${...} placeholder 扫描:无输出,PASS;git diff --check:PASS;