ai_formula_execution_log。FormulaExecutionLogServiceTest 覆盖日志落库、脱敏、分页查询和详情查询。| 验证项 | 命令 | 预期 |
|---|---|---|
| 公式执行日志服务单测 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaExecutionLogServiceTest |
单测通过,目标模块测试编译通过 |
| 公式执行日志服务行为 smoke | javac ... /private/tmp/FormulaExecutionLogServiceSmoke.java + java ... FormulaExecutionLogServiceSmoke |
输出 FormulaExecutionLogServiceSmoke PASS |
| SQL 防重复检查 | 人工检查 V1.0.69__add_formula_observability_and_function_market.sql |
使用 CREATE TABLE IF NOT EXISTS,索引内联,tenant_id 默认 1 |
maven-compiler-plugin <skip>true</skip> 与 maven-surefire-plugin <skipTests>true</skipTests> 影响,命令行参数无法触发实际 testCompile/surefire,本轮用临时 Java runner 覆盖 Service 行为。FormulaExecutionTrace、FormulaExecutionStep、FormulaTraceOptions。ExecutionResult 增加可空 trace 字段,保持默认构建不带 trace。ExecutionResult 测试文件。| 验证项 | 命令 | 预期 |
|---|---|---|
| Trace 数据结构单测目标 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaExecutionTraceTest,ExecutionResultTest |
目标模块主代码编译通过 |
| Trace 数据结构行为 smoke | javac ... /private/tmp/FormulaExecutionTraceSmoke.java + java ... FormulaExecutionTraceSmoke |
输出 FormulaExecutionTraceSmoke PASS |
ExecutionResult 默认兼容行为。FormulaExecutionEngine 新增带 FormulaTraceOptions 的重载执行方法。FormulaErrorHandler 支持带 traceId 的错误日志。AbstractFormulaRuntime 接入 trace 执行、失败日志记录和 debug 成功日志记录。StoredFormulaRuntime、VirtualFormulaRuntime 增加可注入 FormulaExecutionLogService 的构造器。FormulaExecutionEngineTraceTest、FormulaRuntimeTraceLoggingTest。| 验证项 | 命令 | 预期 |
|---|---|---|
| Runtime trace 目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaExecutionEngineTest,StoredFormulaRuntimeTest,VirtualFormulaRuntimeTest |
目标模块主代码编译通过 |
| Runtime trace 行为 smoke | javac ... /private/tmp/FormulaRuntimeTraceSmoke.java + java ... FormulaRuntimeTraceSmoke |
输出 FormulaRuntimeTraceSmoke PASS,错误日志包含 traceId= |
| 本轮新增测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaExecutionEngineTraceTest.java FormulaRuntimeTraceLoggingTest.java ... |
编译通过 |
FormulaController 新增执行日志分页和详情接口。FormulaExecutionLogDetailResponse。FormulaControllerTest,覆盖日志查询参数绑定和详情返回。| 验证项 | 命令 | 预期 |
|---|---|---|
| Controller 目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaControllerTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| Controller 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaControllerTest.java |
测试源码编译通过 |
| Controller 日志接口 smoke | javac ... /private/tmp/FormulaControllerLogSmoke.java + java ... FormulaControllerLogSmoke |
输出 FormulaControllerLogSmoke PASS |
FormulaDebugRequest、FormulaDebugResponse。FormulaDebugService,封装 debug trace、单字段依赖闭包、调试日志记录。FormulaController 新增 POST /api/ai/business/formula/debug。FormulaExecutionEngine 的 CONDITIONAL trace step metadata 增加条件结果和分支值。FormulaDebugServiceTest,扩展 FormulaControllerTest。| 验证项 | 命令 | 预期 |
|---|---|---|
| Debug API 目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaDebugServiceTest,FormulaControllerTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| Debug 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaDebugServiceTest.java FormulaControllerTest.java |
测试源码编译通过 |
| Debug 行为 smoke | javac ... /private/tmp/FormulaDebugServiceSmoke.java + java ... FormulaDebugServiceSmoke |
输出 FormulaDebugServiceSmoke PASS |
FormulaDependencyGraphRequest、FormulaDependencyGraphResponse、FormulaDependencyGraphNode、FormulaDependencyGraphEdge。FormulaDependencyGraphService,将公式 DAG 转换为 nodes / edges。FormulaController 新增 POST /api/ai/business/formula/dependency/graph。FormulaDependencyGraphServiceTest,扩展 FormulaControllerTest。| 验证项 | 命令 | 预期 |
|---|---|---|
| Dependency Graph 目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaDependencyGraphServiceTest,FormulaControllerTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| Dependency Graph 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaDependencyGraphServiceTest.java FormulaControllerTest.java |
测试源码编译通过 |
| Dependency Graph 行为 smoke | javac ... /private/tmp/FormulaDependencyGraphSmoke.java + java ... FormulaDependencyGraphSmoke |
输出 FormulaDependencyGraphSmoke PASS |
formula.js 新增调试、日志查询、依赖图 API 封装。FormulaDebuggerPanel、FormulaExecutionLogDrawer、FormulaDependencyGraph、FormulaTraceSteps。BusinessFieldPropertyPanel 新增公式可观测性入口,并将当前未保存公式配置合并给调试器和依赖图。BusinessFieldManager 与对象设计页补充 objectCode 透传。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" forge-admin-ui/src/api/formula.js forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue 'forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue' forge-admin-ui/src/views/app-center/components/designer/formula |
无输出 |
| Git diff 空白检查 | git diff --check -- forge-admin-ui/src/api/formula.js forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue 'forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue' forge-admin-ui/src/views/app-center/components/designer/formula |
无输出 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
| 页面加载冒烟 | 启动 Vite 后执行 python3 /private/tmp/forge_formula_ui_smoke.py |
输出 forge_formula_ui_smoke PASS |
FormulaType 新增 LOOKUP。FormulaConfig 新增 lookup、crossObject、rule、functionRefs。LookupConfig、CrossObjectConfig、CrossObjectRecomputeMode。AggregateConfig、ConditionConfig 补充 Jackson 构造注解,保证旧配置 JSON 兼容。AbstractFormulaRuntime、FormulaPublishValidator 支持解析 LOOKUP / crossObject 元数据。BusinessFieldDTO、BusinessFieldVO 保持 formulaConfig JSON 透传并更新注释。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" <Task 8 相关 Java 文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 8 相关 Java 文件> |
无输出 |
| FormulaConfig 目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaConfigTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| FormulaConfig 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaConfigTest.java |
测试源码编译通过 |
| FormulaConfig 行为 smoke | javac ... /private/tmp/FormulaConfigSmoke.java + java ... FormulaConfigSmoke |
输出 FormulaConfigSmoke PASS |
FormulaLookupResolver、LookupResolveResult。FormulaExecutionEngine 接入 LOOKUP 执行和 trace metadata。FormulaValidationService 支持 LOOKUP 空表达式、sourceField 依赖提示和非法 path-style relationCode 拦截。FormulaDependencyAnalyzer 将 LOOKUP sourceField 纳入拓扑排序、深度和字段存在性校验。FormulaDebugRequest、FormulaDependencyGraphRequest、FormulaDebugService、FormulaDependencyGraphService 支持 lookup 配置解析;依赖图输出 LOOKUP 边。FormulaLookupResolverTest、FormulaExecutionEngineLookupTest,扩展依赖分析、校验服务和依赖图测试。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" <Task 9 相关 Java 文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 9 相关 Java 文件> |
无输出 |
| LOOKUP 目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaLookupResolverTest,FormulaExecutionEngineLookupTest,FormulaDependencyAnalyzerTest,FormulaValidationServiceTest,FormulaDependencyGraphServiceTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| LOOKUP 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaLookupResolverTest.java FormulaExecutionEngineLookupTest.java FormulaDependencyAnalyzerTest.java FormulaValidationServiceTest.java FormulaDependencyGraphServiceTest.java |
测试源码编译通过 |
| LOOKUP 行为 smoke | javac ... /private/tmp/FormulaLookupSmoke.java + java ... FormulaLookupSmoke |
输出 FormulaLookupSmoke PASS |
CrossObjectPath、FormulaCrossObjectResolver、FormulaReferenceResolver。VirtualFormulaRuntime 对 VIRTUAL 跨对象公式执行批量预取,并只回写公式字段。DetailRecordFetcher、DynamicDetailRecordFetcher、DynamicCrudRepository 支持目标对象批量 IN 查询。FormulaDebugRequest、FormulaDependencyGraphRequest、FormulaDebugService、FormulaDependencyGraphService 支持 crossObject 元数据;依赖图输出 CROSS_OBJECT 边。FormulaCrossObjectResolverTest,扩展 VirtualFormulaRuntimeTest、FormulaDependencyGraphServiceTest。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" <Task 10 相关 Java 文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 10 相关 Java 文件> |
无输出 |
| 跨对象目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaCrossObjectResolverTest,VirtualFormulaRuntimeTest,FormulaDependencyGraphServiceTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| 跨对象测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaCrossObjectResolverTest.java VirtualFormulaRuntimeTest.java FormulaDependencyGraphServiceTest.java |
测试源码编译通过 |
| 跨对象行为 smoke | javac ... /private/tmp/FormulaCrossObjectSmoke.java + java ... FormulaCrossObjectSmoke |
输出 FormulaCrossObjectSmoke PASS |
FormulaObjectDependencyAnalyzer,将跨对象公式转换为对象图依赖边,校验关系、目标对象字段并检测对象级循环依赖。CrossObjectRecomputeTaskService,为 STORED 跨对象公式生成 PENDING 待重算任务和幂等键。FormulaPublishValidator 新增对象图上下文校验重载,并保留旧入口兼容。BusinessObjectPublishService 发布检查接入对象图校验,发布成功后生成当前对象跨对象重算任务。FormulaObjectDependencyAnalyzerTest,扩展 FormulaPublishValidatorTest 和 BusinessObjectPublishServiceFormulaTest 构造器。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" <Task 11 相关 Java 文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 11 相关 Java 文件> |
无输出 |
| 跨对象发布校验目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaObjectDependencyAnalyzerTest,FormulaPublishValidatorTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| Task 11 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaObjectDependencyAnalyzerTest.java FormulaPublishValidatorTest.java BusinessObjectPublishServiceFormulaTest.java |
测试源码编译通过 |
| Task 11 行为 smoke | javac ... /private/tmp/FormulaObjectDependencySmoke.java + java ... FormulaObjectDependencySmoke |
输出 FormulaObjectDependencySmoke PASS |
FormulaConfigPanel.vue,从字段属性面板拆出公式配置区域。FormulaLookupPanel.vue,支持 LOOKUP 一跳关联字段配置。FormulaCrossObjectPanel.vue,支持一跳跨对象路径选择。BusinessFieldPropertyPanel.vue,改为使用公式配置组件并保持原有调试、日志和依赖图入口。FormulaDebuggerPanel.vue、FormulaDependencyGraph.vue,透传 lookup 和 crossObject 配置。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaLookupPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaCrossObjectPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaDebuggerPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaDependencyGraph.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/api/formula.js |
无输出 |
| Git diff 空白检查 | git diff --check -- forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaLookupPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaCrossObjectPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaDebuggerPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaDependencyGraph.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/api/formula.js |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/formula/*.vue src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue src/api/formula.js |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
listen EPERM: operation not permitted 127.0.0.1:4174,未作为产品缺陷处理。ConditionRuleNode。ConditionRuleOperator。ConditionRuleCompiler,负责编译规则 AST、校验字段和值类型、输出 Aviator 表达式。ConditionRuleCompileRequest、ConditionRuleCompileResponse。FormulaController 新增 /rule/compile 和 /rule/validate。ConditionRuleCompilerTest,扩展 FormulaControllerTest。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" <Task 13 相关 Java 文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 13 相关 Java 文件> |
无输出 |
| 条件规则目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=ConditionRuleCompilerTest,FormulaControllerTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| Task 13 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... ConditionRuleCompilerTest.java FormulaControllerTest.java |
测试源码编译通过 |
| Task 13 行为 smoke | javac ... /private/tmp/ConditionRuleCompilerSmoke.java + java ... ConditionRuleCompilerSmoke |
输出 ConditionRuleCompilerSmoke PASS |
formula.js 新增 compileConditionRule、validateConditionRule。FormulaConditionRuleNode.vue,实现递归规则节点编辑。FormulaConditionRuleDesigner.vue,实现规则设计、表达式快照和后端编译校验。FormulaConfigPanel.vue,CONDITIONAL 支持表达式模式和规则设计模式切换。BusinessFieldPropertyPanel.vue,保存 rule JSON、表达式快照和规则校验状态。FormulaDebuggerPanel.vue,展示规则节点命中状态。| 验证项 | 命令 | 预期 |
|---|---|---|
| 前端 eslint | cd forge-admin-ui && source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm exec eslint src/views/app-center/components/designer/formula/*.vue src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue src/api/formula.js |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
| 行尾空白检查 | rg -n "[ \t]+$" <Task 14 相关前端文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 14 相关前端文件> |
无输出 |
127.0.0.1 端口,浏览器点击冒烟沿用 Task 12 的环境边界记录。V1.0.69__add_formula_observability_and_function_market.sql 新增函数注册表、函数版本表、租户安装表和内置函数 seed。AiFormulaFunction、AiFormulaFunctionVersion、AiFormulaFunctionInstall 实体。FormulaFunctionMapper 和 FormulaFunctionMapper.xml。FormulaFunctionPersistenceTest。| 验证项 | 命令 | 预期 |
|---|---|---|
| 函数持久化目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaFunctionPersistenceTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| Task 15 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaFunctionPersistenceTest.java |
测试源码编译通过 |
| Task 15 行为 smoke | javac ... /private/tmp/FormulaFunctionPersistenceSmoke.java + java ... FormulaFunctionPersistenceSmoke |
输出 FormulaFunctionPersistenceSmoke PASS |
| 行尾空白检查 | rg -n "[ \t]+$" <Task 15 相关 SQL/Java/XML 文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 15 相关 SQL/Java/XML 文件> |
无输出 |
FormulaFunctionDefinition、FormulaBuiltinFunctionProvider、FormulaFunctionInvoker、FormulaFunctionRegistry。ExpressionExecutor,执行前安装注册函数。FormulaValidationService,校验表达式函数引用状态。FormulaExecutionEngine,Spring 注入路径复用函数注册中心。FormulaController,/functions 返回注册中心启用函数。FormulaFunctionRegistryTest,扩展 ExpressionExecutorTest、FormulaValidationServiceTest、FormulaControllerTest。| 验证项 | 命令 | 预期 |
|---|---|---|
| 函数注册中心目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaFunctionRegistryTest,ExpressionExecutorTest,FormulaValidationServiceTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| Task 16 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaFunctionRegistryTest.java ExpressionExecutorTest.java FormulaValidationServiceTest.java FormulaControllerTest.java |
测试源码编译通过 |
| Task 16 行为 smoke | javac ... /private/tmp/FormulaFunctionRegistrySmoke.java + java ... FormulaFunctionRegistrySmoke |
输出 FormulaFunctionRegistrySmoke PASS |
| 行尾空白检查 | rg -n "[ \t]+$" <Task 16 相关 Java 文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 16 相关 Java 文件> |
无输出 |
/functions 真实 HTTP 调用和市场安装状态联动留到 Task 17/18。FormulaFunctionMarketService 负责市场分页、安装状态 upsert、可用函数列表和函数引用市场状态校验。FormulaController.functions() 改为读取已安装且启用的市场函数。FormulaValidationService 在 Spring 注入路径下接入市场状态,禁用或未启用函数会阻断公式校验。V1.0.69__add_formula_observability_and_function_market.sql 补齐全部内置函数种子。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" <Task 17 相关 Java/XML/SQL 文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 17 相关 Java/XML/SQL 文件> |
无输出 |
| 函数市场目标命令 | mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaFunctionMarketServiceTest,FormulaControllerTest,FormulaValidationServiceTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| Task 17 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes ... FormulaFunctionMarketServiceTest.java FormulaControllerTest.java FormulaValidationServiceTest.java |
编译通过 |
| Task 17 行为 smoke | javac ... /private/tmp/FormulaFunctionMarketSmoke.java + java ... FormulaFunctionMarketSmoke |
输出 FormulaFunctionMarketSmoke PASS |
formula.js 新增函数市场分页、详情、安装、启用、禁用 API。FormulaFunctionBrowser.vue,从后端动态读取可用函数并支持搜索、分类筛选、插入表达式。FormulaExpressionEditor.vue,替换 FormulaConfigPanel.vue 原静态函数下拉。FormulaFunctionMarket.vue,提供函数市场分页、详情、安装、启用、禁用弹窗。BusinessFieldPropertyPanel.vue,保存 formulaConfig.functionRefs。BusinessObjectDesignerShell.vue 和 object-designer.[objectCode].vue,增加函数市场入口。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" <Task 18 相关前端文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 18 相关前端文件> |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/api/formula.js src/views/app-center/components/designer/formula/FormulaFunctionBrowser.vue src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue src/views/app-center/components/designer/formula/FormulaFunctionMarket.vue src/views/app-center/components/designer/formula/FormulaConfigPanel.vue src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue src/views/app-center/components/designer/BusinessObjectDesignerShell.vue 'src/views/app-center/object-designer.[objectCode].vue' |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
FormulaValueMasker,执行日志统一脱敏手机号、身份证、银行卡、Token、AK/SK 等敏感值。FormulaRuntimeProperties,配置执行日志总开关、失败/成功/debug 日志开关、debug 输入/输出快照和函数 timeout。FormulaController 增加 @SaCheckPermission("ai:businessObject:design"),调试器、执行日志、依赖图和函数市场复用对象设计权限。FormulaExecutionLogService、FormulaDebugService、AbstractFormulaRuntime、FormulaFunctionInvoker 接入运行时配置。FormulaLookupResolver、FormulaCrossObjectResolver、FormulaValidationService 增强配置校验,拒绝 SQL 片段和非法字段编码,LOOKUP 返回字段必须来自目标模型字段资产或 id。FormulaValueMaskerTest、FormulaExecutionLogServiceTest、FormulaFunctionRegistryTest、FormulaValidationServiceTest。| 验证项 | 命令 | 预期 |
|---|---|---|
| 安全加固目标命令 | JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=... mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am test -Dtest=FormulaValueMaskerTest,FormulaExecutionLogServiceTest,FormulaFunctionRegistryTest,FormulaValidationServiceTest -DskipTests=false -Dmaven.test.skip=false |
目标模块主代码编译通过 |
| Task 19 测试源码编译 | javac -d /private/tmp/forge_formula_test_classes -cp "forge-framework/forge-plugin-parent/forge-plugin-generator/target/classes:$(cat /private/tmp/forge_generator_cp.txt)" FormulaValueMaskerTest.java FormulaExecutionLogServiceTest.java FormulaFunctionRegistryTest.java FormulaValidationServiceTest.java /private/tmp/FormulaSecurityHardeningSmoke.java |
编译通过 |
| Task 19 行为 smoke | java -cp "/private/tmp/forge_formula_test_classes:forge-framework/forge-plugin-parent/forge-plugin-generator/target/classes:$(cat /private/tmp/forge_generator_cp.txt)" FormulaSecurityHardeningSmoke |
输出 FormulaSecurityHardeningSmoke PASS |
| 行尾空白检查 | rg -n "[ \t]+$" <Task 19 相关 Java 文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <Task 19 相关 Java 文件> |
无输出 |
@SaCheckPermission 的真实 HTTP 403/权限资源联调、操作日志入库和 Flyway 实跑留到服务级验收环境覆盖。BusinessFieldManager.vue 将右侧长属性面板改为字段摘要区,详细属性进入大弹窗工作台。BusinessFieldPropertyPanel.vue 将字段属性拆分为基础属性、显示与校验、开发者属性、公式与调试标签页。FormulaFunctionBrowser.vue 从卡片网格改为函数列表 + 详情预览 + 参数 Schema + 明确插入动作。FormulaDependencyGraph.vue 从节点/边列表改为 SVG 节点连线图,支持缩放、箭头、边标签和循环高亮。FormulaFunctionMarket.vue 增加“注册函数”入口,首期仅注册 Java Bean 函数元数据,不开放脚本执行。formula.js、FormulaController、FormulaFunctionMarketService、FormulaFunctionMapper.xml 等补齐自定义函数注册 API、持久化 upsert 和运行时注册同步。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" <本轮相关前后端文件> |
无输出 |
| Git diff 空白检查 | git diff --check -- <本轮相关已跟踪文件> |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/api/formula.js src/views/app-center/components/designer/BusinessFieldManager.vue src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue src/views/app-center/components/designer/formula/FormulaFunctionBrowser.vue src/views/app-center/components/designer/formula/FormulaDependencyGraph.vue src/views/app-center/components/designer/formula/FormulaFunctionMarket.vue |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
| 后端 generator 编译 | JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=... mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests |
编译成功 |
FormulaExpressionEditor.vue 从 textarea + 折叠函数浏览器改为字段浏览、表达式编辑、函数树浏览和依赖字段 chips 的三栏工作台。FormulaConfigPanel.vue 移除旧的依赖字段多选重复配置,条件表达式复用同一套表达式工作台。FormulaExecutionLogDrawer.vue 执行日志分页增加页大小选择、快速跳页、总量和当前范围显示。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExecutionLogDrawer.vue |
无输出 |
| Git diff 空白检查 | git diff --check -- forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExecutionLogDrawer.vue |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue src/views/app-center/components/designer/formula/FormulaConfigPanel.vue src/views/app-center/components/designer/formula/FormulaExecutionLogDrawer.vue |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
FormulaConfigPanel.vue 将公式名称、公式类型、触发方式、保存、校验、预览、调试、日志、依赖入口合并到顶部紧凑命令栏。FormulaConfigPanel.vue 压缩公式卡片边距、表单控件高度、聚合/条件配置布局,减少“公式与调试”标签页纵向滚动。FormulaExpressionEditor.vue 新增 compact 模式,缩小表达式工作台标题、字段项、函数项、编辑区和依赖 chips 高度。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue |
无输出 |
| Git diff 空白检查 | git diff --check -- forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/formula/FormulaConfigPanel.vue src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
FormulaConfigPanel.vue 将 FormulaCrossObjectPanel 提前到表达式编辑器之前展示。FormulaCrossObjectPanel.vue 增加生成表达式预览,并局部控制表单项高度、边框、背景和层级,避免被父级紧凑样式影响。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaCrossObjectPanel.vue |
无输出 |
| Git diff 空白检查 | git diff --check -- forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaCrossObjectPanel.vue |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/formula/FormulaConfigPanel.vue src/views/app-center/components/designer/formula/FormulaCrossObjectPanel.vue |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
FormulaConfigPanel.vue 将表达式工作台从 n-form-item 中移出,避免 Naive 表单项内容容器限制宽度。FormulaExpressionEditor.vue 调整三栏网格比例,提升中间表达式区和右侧函数区的最小宽度。BusinessFieldManager.vue 将字段属性弹窗放宽到接近整屏,并增加可用高度。BusinessFieldPropertyPanel.vue 明确 tab pane 和 form 容器 min-width: 0 与 width: 100%,避免内部工作台无法撑开。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue |
无输出 |
| Git diff 空白检查 | git diff --check -- forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/BusinessFieldManager.vue src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue src/views/app-center/components/designer/formula/FormulaConfigPanel.vue src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
FormulaExpressionEditor.vue 为表达式工作台三栏网格增加显式 align-items: stretch,避免左侧字段浏览面板按内容高度收缩。FormulaExpressionEditor.vue 为字段浏览、表达式编辑、函数浏览三栏统一设置 height: 100%、align-self: stretch 和 box-sizing: border-box。FormulaExpressionEditor.vue 将左侧字段面板单独设为 auto auto minmax(0, 1fr) 行结构,字段列表滚动区占满剩余高度,修复截图中左侧白色面板底部未撑满的问题。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue |
无输出 |
| Git diff 空白检查 | git diff --check -- forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue src/views/app-center/components/designer/formula/FormulaConfigPanel.vue src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue src/views/app-center/components/designer/BusinessFieldManager.vue |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
FormulaConfigPanel.vue 去除 formula-setting-card 外层灰底、边框、圆角和内边距,公式设置改为铺满公式 tab 的白色工作区,减少“卡片套卡片”的层级感。FormulaExpressionEditor.vue 去除表达式工作台外壳灰底、边框和内边距,只保留三栏内部面板边界,避免公式设置区域背景看起来没有撑满。BusinessFieldPropertyPanel.vue 将属性面板 body、tabs pane wrapper、公式 tab form 的背景统一为白色,避免浅灰底从公式区域边缘露出。FormulaExpressionEditor.vue 字段浏览项改为第一行展示字段中文名,第二行展示字段编码;compact 模式不再隐藏字段中文/编码副信息。| 验证项 | 命令 | 预期 |
|---|---|---|
| 行尾空白检查 | rg -n "[ \t]+$" forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue |
无输出 |
| Git diff 空白检查 | git diff --check -- forge-admin-ui/src/views/app-center/components/designer/BusinessFieldManager.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue forge-admin-ui/src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/formula/FormulaExpressionEditor.vue src/views/app-center/components/designer/formula/FormulaConfigPanel.vue src/views/app-center/components/designer/BusinessFieldPropertyPanel.vue src/views/app-center/components/designer/BusinessFieldManager.vue |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |
FormulaConfigPanel.vue 移除模板上的 :class="{ active: formulaEnabled }",不再生成 class="formula-setting-card active"。FormulaConfigPanel.vue 将外层类名从 formula-setting-card 改为 formula-setting-workspace,避免继续保留卡片语义和旧样式覆盖点。FormulaConfigPanel.vue 删除 .formula-setting-card.active 样式块,公式启用状态只用于逻辑展示,不参与外层视觉布局。| 验证项 | 命令 | 预期 |
|---|---|---|
| 旧类名检查 | `rg -n "formula-setting-card | formula-setting-workspace |
| 行尾空白检查 | rg -n "[ \t]+$" forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue |
无输出 |
| Git diff 空白检查 | git diff --check -- forge-admin-ui/src/views/app-center/components/designer/formula/FormulaConfigPanel.vue |
无输出 |
| 前端 eslint | source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/formula/FormulaConfigPanel.vue |
无错误 |
| 前端生产构建 | source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build |
构建成功 |