change:
forge-ai-hub-secure-actionsstatus: done created: 2026-07-12
| 时间 | 阶段 | 事件 | 结论 |
|---|---|---|---|
| 2026-07-12 | Archive | 归档 mcp-user-delegation-identity |
Identity 34/34、MCP 14/14、Admin 39/39,状态 done |
| 2026-07-12 | Direction | 用户要求开始新阶段开发 | 进入阶段 2.1 secure actions Proposal/Apply |
| 2026-07-12 | Mapping | 检查 Capability/MCP/Control Plane/Generator | 复用已发布业务动作,但必须增加发布快照、字段交集、R2 elicitation 和幂等指纹加固 |
| 2026-07-12 | Protocol | 检查 MCP SDK 0.17.0 公开 API | McpSyncServerExchange.createElicitation 可用于同调用 R2 确认,无需旧 SSE 或自建确认 Token |
执行时间:2026-07-12 12:04–12:10 +08:00。
McpToolContributor 与启动期聚合器;固定工具按名称稳定排序,重复名称失败关闭;ping 改为默认 contributor;executePublished 入口;BusinessActionExecutionServiceTest 3/3,模块 compile PASS;forge-plugin-capability-secure-actions,接入 plugin parent、BOM 和 Admin;默认未启用,避免未完成 Tool 误开放;-am compile,33/33 reactor modules SUCCESS;执行时间:2026-07-12 12:57–13:18 +08:00。
search/describe/invoke、MCP elicitation、字段三方交集和双审计关联;outputSchema、annotations、text JSON 和 structuredContent;capability:discover / capability:invoke 或能力级 scope,再叠加 client grant、平台权限、动作权限、tenant/activeOrg;OAuth metadata 与请求校验器同步支持受治理目录的通用 scope;capability_code + id keyset 分批扫描,权限过滤后仍能准确返回 hasMore,不把全量授权加载进内存;recordId;INSUFFICIENT_SCOPE、POLICY_MISMATCH、IDEMPOTENCY_CONFLICT 稳定错误码;Schema 越权映射为 INVALID_ARGUMENT 并在审计中只记录 Schema 路径;审计写入异常只记录 requestId、capabilityCode、exceptionType;| 验证项 | 命令/范围 | 结果 |
|---|---|---|
| 当前 Reactor 依赖安装 | mvn -pl ...forge-plugin-capability-secure-actions -am install -DskipTests |
33/33 SUCCESS |
| Secure Actions | 模块 mvn -Penable-tests test |
18/18 PASS |
| Generator 专项 | BusinessActionExecutionServiceTest,BusinessObjectActionServicePublishedTest |
7/7 PASS |
| Control Plane | 模块 mvn -Penable-tests test |
24/24 PASS |
| MCP | 模块 mvn -Penable-tests test |
16/16 PASS;协议 2025-06-18、STREAMABLE/SYNC Guard 保持 |
| Identity | 模块 mvn -Penable-tests test |
35/35 PASS |
| Admin 聚合 | mvn -pl forge-admin-server -am package -DskipTests |
40/40 SUCCESS |
| 禁用依赖 | Admin dependency:tree includes 扫描 |
无 Spring Authorization Server、无 Sa-Token OAuth2 |
| XML/SQL | xmllint + placeholder/tenant/DELETE 扫描 |
PASS;V1.0.23 未实库执行 |
| 传输 | MCP/Identity/Secure Actions 静态扫描 | 仅 Guard/负向测试出现 SSE、STATELESS、stdio、ASYNC;运行配置仍为单 /mcp Streamable HTTP |
-am install -DskipTests 安装当前工作区构件后解决,产品代码无需兼容旧构件;-am test 时,Generator 全量基线 289 项中存在 2 failures + 1 error:FormulaExecutionEngineLookupTest、FormulaValueMaskerTest、LowcodeRuntimeConfigBuilderTest。这些测试不在本轮改动路径;本轮 Generator 专项 7/7 和 Admin 聚合编译均通过,未修改无关公式/低代码逻辑;阶段 2.1 受控业务动作已达到 applied_pending_review:写副作用必须依次通过可信 USER 身份、Token scope、实时 client grant、用户权限、租户/组织、发布快照、字段交集、幂等键和 MCP elicitation ACCEPT + confirm=true。流程、消息、领域动作、高风险动作、旧 SSE/STATELESS/stdio/ASYNC 仍失败关闭。
本轮只读审查实现,没有修改产品代码、启动服务、执行 Flyway、调用真实模型或写数据库。
| 检查 | 结果 |
|---|---|
| 固定 Tool、Streamable HTTP、USER/Scope/权限、发布快照、elicitation、幂等、禁用依赖 | PASS |
| R1 grant 字段交集进入运行时 Schema | FAIL HARD-GATE;descriptor 保留版本原始 inputSchema,grant 缩小未生效 |
| R2 resolved version source binding | FAIL HARD-GATE;SQL 混用 v.version/policy 与 c.source_key/source_version |
| R3 递归步骤失败关闭 | FAIL HARD-GATE;validator 只遍历顶层 actionConfig.steps |
| R4 基础设施不可用错误 | FAIL;目录解析故障会成为 INVALID_ARGUMENT,普通 DB 故障成为 EXECUTION_FAILED |
| R5 Capability 双审计闭环 | FAIL;审计异常被吞,业务写入后仍可返回成功 |
| R6 elicitation 请求指纹 | FAIL;当前摘要只包含 requestId 与 idempotencyKey |
Review 结论:NEEDS_FIX。Spec Compliance 未通过,按两阶段规则未进入 Code Quality Review;当前状态为 reviewed_with_findings,不得归档或进入 Flow Actions。下一步执行 /fix forge-ai-hub-secure-actions。
steps/stepList,任何嵌套步骤和未知/禁用类型拒绝;CATALOG_UNAVAILABLE/AUTHORIZATION_UNAVAILABLE/AUDIT_UNAVAILABLE,安全日志不包含原始异常消息或参数;| 验证项 | 结果 |
|---|---|
| Reactor 当前构件安装 | -pl ...forge-plugin-capability-secure-actions -am install -DskipTests,33/33 SUCCESS |
| Secure Actions | 27 tests,0 failures,0 errors |
| Control Plane | 27 tests,0 failures,0 errors |
| Generator 专项 | 7 tests,0 failures,0 errors |
| MCP | 16 tests,0 failures,0 errors;协议仍为 2025-06-18 + Streamable HTTP/SYNC Guard |
| Identity | 35 tests,0 failures,0 errors |
| Admin 聚合 | 最终复跑 40/40 reactor modules SUCCESS |
| XML/静态安全 | 两个 Mapper xmllint PASS;trailing whitespace、禁用认证依赖、arguments 日志、Secure Actions 传输漂移扫描 PASS |
首次 Secure Actions 增量测试在 testCompile 阶段因 AssertJ 当前版本的 IteratorAssert 不支持 containsExactly 失败;改为显式收集字段列表后复跑 27/27 通过。该失败未进入产品运行逻辑。
Fix 结论:R1–R6 已修复并完成增量验证,状态更新为 fixed_pending_review。下一步再次执行 /review forge-ai-hub-secure-actions;复审通过前不归档或进入 Flow Actions。
| 验证项 | 结果 |
|---|---|
| Secure Actions 专项 | 2026-07-12 14:30,27/27 PASS |
| Mapper XML | xmllint --noout PASS |
| Flyway placeholder | V1.0.23 扫描无输出 |
| 文本质量 | 相关 git diff --check PASS |
| 既有回归基线 | Control Plane 27/27、Generator 7/7、MCP 16/16、Identity 35/35、Admin 40/40 |
第一次 placeholder 命令从子模块使用了错误的相对路径并返回“文件不存在”,随后改为正确的 ../../../db/migration/... 路径复跑,无输出;该命令问题不涉及产品代码。
done;code-copilot/changes/archive/2026-07-12-forge-ai-hub-secure-actions/;