version: V9 status: complete baseline-created: 2026-07-21
47/47、Flow 12/12、Flow Reactor 32/32、Admin Reactor 43/43 成功记录。JobFlowRuntimeServiceTest:7/7 通过,覆盖固定定义校验、挂起/不匹配失败和 businessKey 幂等恢复。RemoteJobFlowExecutorTest:6/6 通过,覆盖 FLOW_API、服务端 Bearer Token、无 X-Inner-Call、嵌套 jobInput、显式失败关闭及响应丢失恢复。job:11:22 固定输出为 job%3A11%3A22;远程基础地址尾部斜杠已归一化。mvn -Penable-tests -pl forge-flow/forge-flow-client -am -Dtest=RemoteJobFlowExecutorTest -Dsurefire.failIfNoSpecifiedTests=false test,结果 BUILD SUCCESS。mvn -pl forge-flow/forge-flow-server -am -DskipTests compile,32 个 Reactor 模块全部 SUCCESS。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-job \
-Penable-tests -Dforge.test.groups= \
-Dtest=JobFlowMigrationContractTest,JobSchedulerTest,JobConfigValidatorTest,JobFlowOrchestrationServiceTest,QuartzJobExecutorTest,JobExecutionLifecycleServiceTest test
48/48 通过,Failures 0、Errors 0、Skipped 0,BUILD SUCCESS。JobSchedulerTest 主动关闭 Scheduler 后验证异常透传,会输出一次 SchedulerException;QuartzJobExecutorTest 包含失败分支;生命周期幂等用例会输出“终态更新被忽略” WARN。均为故障注入预期,不是测试失败。@SaCheckPermission("system:jobConfig:trigger"),复用既有“立即运行任务”权限。FORGE_FLOW_JOB_REMOTE_TOKEN 必须属于拥有该权限的服务账号;Flowable 实际发起身份仍只取 Flow 服务技术身份配置,不取 Token 用户或请求体身份字段。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-flow/forge-flow-server \
-Penable-tests -Dforge.test.groups= \
-Dtest=JobFlowControllerSecurityContractTest test
1/1 通过,Failures 0、Errors 0、Skipped 0,BUILD SUCCESS。cd forge-admin-ui
source ~/.nvm/nvm.sh
nvm use v20.19.0
pnpm exec vitest run \
src/views/system/job-config/__tests__/job-config-form.test.js \
src/views/system/job-config/__tests__/job-permission.test.js \
src/views/system/__tests__/job-log-query.test.js \
src/views/system/__tests__/job-api-token.test.js
25/25 用例通过;覆盖 FLOW payload、JSON 对象边界、Long ID 字符串、权限操作和日志查询。8721 modules transformed,耗时约 2m 6s。cd forge-server
mvn -pl forge-flow/forge-flow-server -am package -DskipTests
mvn -pl forge-admin-server -am package -DskipTests
32/32 Reactor 模块成功,BUILD SUCCESS。43/43 Reactor 模块成功,BUILD SUCCESS。UserSelectModal 自动组件命名冲突、既有 CSS // 注释和部分静态/动态 import chunk 提示;均未阻断构建,本轮未扩展这些问题。rg -n '\$\{[^}]+\}' forge-server/db/migration
rg -n 'tenant_id\s*=\s*0' forge-server/db/migration/V1.0.48__add_job_flow_orchestration.sql
xmllint --noout \
forge-server/forge-framework/forge-plugin-parent/forge-plugin-job/src/main/resources/mapper/SysJobConfigMapper.xml \
forge-server/forge-framework/forge-plugin-parent/forge-plugin-job/src/main/resources/mapper/SysJobLogMapper.xml \
forge-server/forge-framework/forge-plugin-parent/forge-plugin-flow/src/main/resources/mapper/FlowModelMapper.xml
rg -n 'RestTemplate|WebClient|HttpClient|OkHttpClient|openConnection' <V9生产文件>
rg -n 'X-Inner-Call|X_INNER_CALL' <V9生产文件>
rg -n 'ScriptEngine|GroovyShell|ProcessBuilder|Runtime.getRuntime().exec|SpelExpressionParser|Class.forName|.invoke(' <V9生产文件>
rg -n 'latestVersion|latest(' <V9生产文件>
git diff --check
rg 按无匹配语义返回 1,符合预期。tenant_id=0,字典数据固定 tenant_id=1,INSERT 显式列名并使用 NOT EXISTS。xmllint 校验通过。X-Inner-Call、无 latestVersion、无任意脚本/反射执行入口;既有 SINGLE/BEAN 的 Method.invoke 不属于 FLOW 新链路。git diff --check:返回 0,无空白错误。