spec.md、tasks.md、test-spec.md 和自动化测试规范,只对能力注册、客户端、授权及其安全链路做增量验证。http://127.0.0.1:3000/ 运行。| 问题 | 根因 | 处理 |
|---|---|---|
| 前端不知道如何注册能力 | 目录页原先只提供查询和停用,受控发布 API 没有可视化入口 | 新增业务动作/流程动作注册弹窗,复用受控发布器生成 Schema 与策略 |
| 授权管理下拉为空 | 使用分页接口拉 500 条,但后端上限 100,且客户端/能力查询需要额外权限 | 新增同权限 /ai/capability/grant/options,返回安全候选项与白名单摘要 |
| 授权策略无法正确填写 | 页面暴露任意 JSON,用户无法知道 allowedFields / allowedOperations 结构 |
改为字段与流程操作多选,按能力版本策略快照初始化 |
| 动作/流程能力授权后仍被拒绝 | CapabilityGrantPolicy 把所有非 READ_ONLY 能力统一拒绝 |
仅保留 HIGH 风险拒绝,ACTION/FLOW 继续执行既有租户、组织、状态、版本和策略校验 |
| 客户端需手填用户/组织 ID | 表单没有接入系统用户与组织绑定数据 | 改为 UserSelectPicker + 用户组织绑定下拉 |
| 下拉已选中仍无法通过校验 | 雪花 Long 超出 JS 安全整数时会序列化为字符串,表单却限定 type: number |
能力对象、客户端、服务账号和组织 ID 均改为无精度损失的正整数 ID 校验 |
| 新建 OAUTH 客户端无法兑换 Token | 创建服务固定写 oauth_enabled=0,身份模块会按该字段拒绝客户端 |
按 authModes 同步写入;OAUTH=1,纯 SIGNATURE=0,并补分支测试 |
| 签名 AppId 不可见且会随 OAuth 密钥轮换变化 | 签名认证错误地用内部 keyId 查客户端 |
改用稳定的数值 clientId;前端列表和一次性凭据弹窗明确显示“客户端 ID / AppId” |
| 流程注册可选到无主流程对象 | 目录只校验对象已发布,没有校验启用主流程绑定 | 新增同发布权限的注册来源校验接口;START 额外要求平台托管运行对象 |
| 流程能力注册来源接口返回 404 | 管理 Controller 与运行时执行 Bean 共用 flow-actions.enabled,开关关闭时 Spring 没有注册路由 |
拆分管理控制面与运行时装配;发布/来源校验始终可用,真实执行仍受开关失败关闭 |
| 字典下拉无选项 | V1.0.74/V1.0.75 尚未执行或 Flyway locations 被覆盖 | 新增缺失错误态并阻止无效提交;迁移脚本补齐认证模式、主体类型和流程动作字典 |
| USER_DELEGATION 首次手机号映射可能命中重复用户 | 原登录查询 LIMIT 1,数据库未保证手机号唯一 |
新增外部身份专用唯一匹配查询,最多读取两条有效候选;无匹配或重复匹配均返回 invalid_grant |
| 范围 | 命令 | 结果 | 警告/跳过 |
|---|---|---|---|
| 前端定向 Lint | Node 20.19.0 下 pnpm exec eslint src/api/ai/capability.js src/views/ai/capability/*.vue src/views/ai/capability/components/*.vue |
passed,零错误 | 无 |
| 流程来源与发布 | Flow Actions 模块执行 FlowActionSourceServiceTest,FlowActionCapabilityPublisherTest |
passed,5/5 | Reactor 首次尝试被既有 forge-starter-datascope Surefire/JUnit 配置阻断,改为目标模块直跑后通过 |
| 控制面 | Control Plane 模块执行 CapabilityGrantPolicyTest,CapabilityCatalogServiceTest,CapabilityClientServiceTest,CapabilityGrantServiceTest |
passed,23/23 | 无 |
| 防重放 | OpenAPI Security 模块执行 OpenApiReplayGuardTest |
passed,10/10 | 测试覆盖 Redis 异常失败关闭,日志中的 ERROR 为预期分支 |
| 网关认证与编排 | Open Gateway 模块执行 OpenGatewayAuthenticatorTest,CapabilityInvokeOrchestratorTest |
passed,12/12 | 测试覆盖稳定数值 AppId、非法 AppId、503 失败映射;WARN 为预期分支 |
| Admin 聚合打包 | Java 17 下 mvn -Penable-tests -pl forge-admin-server -am package -Dforge.tests.skip=true |
passed,47/47 Reactor 模块,BUILD SUCCESS |
测试通过上述目标命令独立执行;存在既有 deprecated/unchecked 编译警告 |
| 前端生产构建 | Node 20.19.0 下 NODE_OPTIONS=--max-old-space-size=8192 pnpm build |
passed,8818 modules,2m11s | 既有组件命名冲突、CSS // 注释、动态/静态导入 chunk 警告 |
| 流程动作装配分支 | Flow Actions 模块 -Penable-tests -Dtest=FlowActionAutoConfigurationTest,FlowActionSourceServiceTest,FlowActionCapabilityPublisherTest test |
passed,8/8 | 默认 JDK 首次编译报目标版本 17 无效;切换 Java 17 后重跑 |
| 受控业务动作装配分支 | Secure Actions 模块 -Penable-tests -Dtest=SecureActionAutoConfigurationTest,BusinessActionCapabilityPublisherTest test |
passed,9/9 | 不带 enable-tests 的中间尝试只编译主码且跳过测试,未计为通过证据 |
| Admin 聚合编译 | Java 17 下 mvn -pl forge-admin-server -am -DskipTests compile |
passed,47/47 Reactor 模块,BUILD SUCCESS |
存在既有 deprecated/unchecked 编译警告 |
| 404 前端提示 | Node 20.19.0 下定向 ESLint | passed,零错误 | 未重启用户已启动 Admin,故当前进程尚不包含新映射 |
| System 用户目录 | Java 17 下目标模块 mvn -Penable-tests test |
passed,46/46 | 短信通道异常日志为既有预期测试分支 |
| Identity 外部委托 | Java 17 下目标模块 mvn -Penable-tests test |
passed,48/48 | 仓储/JWK 不可用日志为预期失败关闭分支 |
| Control Plane | Java 17 下目标模块 mvn -Penable-tests test |
passed,36/36 | 含 USER_DELEGATION 客户端与 OpenAPI 文档契约 |
| Flow Actions | Java 17 下目标模块 mvn -Penable-tests test |
passed,26/26 | 含 USER 身份 serviceUserId 可空与 Mapper 装配回归 |
| Open Gateway | Java 17 下目标模块 mvn -Penable-tests test |
passed,13/13 | INTERNAL_ERROR WARN 为预期异常映射分支 |
| 最终 Admin 聚合编译 | Java 17 下 mvn -pl forge-admin-server -am -DskipTests compile |
passed,47/47 Reactor 模块 | 仅既有 deprecated/unchecked 编译警告 |
| 最终前端生产构建 | Node 20.19.0 下 pnpm build |
passed,8818 modules,1m33s | 既有组件命名冲突、CSS 注释与 chunk 提示 |
| 最终前端定向 Lint | Node 20.19.0 下 capability API/页面/组件 ESLint | passed,零错误 | 无 |
| V1.0.76 与 Mapper 静态检查 | 占位符/tenant_id/逻辑删除规则扫描 + xmllint |
passed | 未连接真实数据库执行迁移 |
forge_schema_history。| 偏差 | 影响 | 结论 |
|---|---|---|
Spec 业务规则 1 写明网关能力类型不设限;当前 OpenGatewayCapabilityResolver 与执行适配器只支持 BUSINESS_ACTION/ACTION、FLOW_ACTION/FLOW |
本次可视化注册的两类能力均可执行;通过通用 /publish 注册的其它来源/行为即使授权,网关仍会返回 CONFLICT |
本轮不伪造通用执行语义;列为后续架构任务,需要为其它来源提供受控执行适配器或接入可验证的 CapabilityRegistry |
8580;本轮未重启,需重启后加载新 Controller 映射。8081。MySQL/Redis 未由本轮启动或停止。http://127.0.0.1:3000/。crypto.properties 升级。| 范围 | 命令 | 结果 | 警告/跳过 |
|---|---|---|---|
| 失败测试基线 | Starter Crypto -Penable-tests -Dtest=CryptoSecretEnvironmentPostProcessorTest test |
按预期在新增 Pepper 常量/行为未实现时编译失败 | 实现后复跑通过 |
| Starter Crypto 全量 | Java 17 下目标模块 mvn -Penable-tests test |
passed,43/43 | AES 异常日志为既有预期测试分支 |
| Capability Identity 全量 | Java 17 下目标模块 mvn -Penable-tests test |
passed,48/48 | 数据库/JWK 不可用日志为既有失败关闭测试分支 |
| Admin 聚合编译 | Java 17 下 mvn -pl forge-admin-server -am -DskipTests compile |
passed,47/47 Reactor 模块 | 仅既有 deprecated/unchecked 编译警告 |
| 静态差异 | git diff --check |
passed,无空白错误 | 工作区其它未提交差异保持不动 |
验证覆盖首次生成、三个 32 字节随机值互异、重启复用、仅显式配置 Crypto 传输密钥时补齐、逐项显式覆盖、空占位符忽略、Bootstrap 关闭、旧文件原子升级、并发首次启动和 POSIX 权限。
8580;本轮未重启或停止。需要用户重启后才会执行旧密钥文件升级并加载新 Pepper。8081;本轮未重启或停止。3000;本轮未启动或停止。