code-app-metadata-config。spec.md、tasks.md、test-spec.md 和本执行日志。BusinessFlowAppConfigService、BusinessFlowService。BusinessFlowAppConfigPanel.vue、BusinessCodeAppMetadataPanel.vue、useCodeAppMetadata.js、purchase-order-test.vue。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/designer/BusinessFlowAppConfigPanel.vue src/views/app-center/components/designer/BusinessCodeAppMetadataPanel.vue src/views/business/purchase-order-test.vue src/composables/useCodeAppMetadata.jsJAVA_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-generator -am compile -DskipTestsBUILD SUCCESS。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --checksys_flow_model WHERE model_key = d98f5733-743e-11f1-9216-bec23233f0f6 并返回 0;该参数是 Flowable 的 UUID 型流程定义 ID,不是业务流程模型 Key。sys_flow_form WHERE form_key = sample_purchase_order_approval_form 返回 0;采购审批使用的是业务代码表单资产,不是动态表单资产,不应该走 sys_flow_form 查询。taskId 表单信息已可返回完整配置,但 generator 侧仍继续调用流程实例表单信息接口,导致同请求内再次兜底查询流程模型/表单。FlowTaskServiceImpl、BusinessFlowService。spec.md、tasks.md、test-spec.md、execution-log.md。FlowTaskServiceImpl 新增流程定义 Key 解析:优先从 Flowable ProcessDefinition.getKey() 读取,必要时从 BPMN process id 兜底,不再把 UUID 型 processDefinitionId 当 sys_flow_model.model_key。formMode/formType/type;当节点 formKey 对应流程全局业务表单,或 formMode 为 BUSINESS_CODE_FORM/BUSINESS_OBJECT_FORM 时,返回 formType=business,不再调用 resolveFormJson 查询 sys_flow_form。BusinessFlowService#loadFlowNodeFormInfo 在 taskId 返回完整表单信息时直接复用,避免继续调用流程实例表单信息接口造成重复查询。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-flow,forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTestsBUILD SUCCESS。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-server/forge-framework/forge-plugin-parent/forge-plugin-flow/src/main/java/com/mdframe/forge/starter/flow/service/impl/FlowTaskServiceImpl.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdmodel_key 不再出现 UUID,sample_purchase_order_approval_form 不再走 sys_flow_form 查询。taskName,当后端返回 部门负责人审批 dept_leader_approve 时会把技术编码暴露给业务用户。BusinessFlowService#enrichBusinessListDisplay 在列表循环中每条任务调用 resolveCanonicalObjectCode,同一业务对象会重复查询 ai_business_document_config。resolveTaskFormRuntimeContext 先解析 canonical object,再重新查询运行配置和单据配置,审批表单加载链路存在重复解析。processDisplay.js、todo.vue、done.vue、started.vue。BusinessFlowService。spec.md、tasks.md、test-spec.md、execution-log.md。getTaskDisplayName,按 taskDefKey/taskDefinitionKey/activityId/activityKey/nodeKey 去掉节点名尾部技术编码;纯编码节点名使用业务兜底文案。BusinessRuntimeContext 缓存,同一业务对象只解析一次运行配置和单据配置,再按 canonical object 分组处理。AiCrudConfig 和 AiBusinessDocumentConfig 重复查询。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/flow/utils/processDisplay.js src/views/flow/todo.vue src/views/flow/done.vue src/views/flow/started.vueprocessDisplay.js 通用清理正则触发 regexp/no-super-linear-backtracking、regexp/no-useless-escape、regexp/prefer-w、regexp/use-ignore-case。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && NODE_OPTIONS=--max-old-space-size=8192 pnpm build✓ built in 2m 32s。UserSelectModal 命名冲突、动态/静态混合 import chunk 提示、CSS // 注释 minify 提示。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-generator -am compile -DskipTestsBUILD SUCCESS。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-admin-ui/src/views/flow/utils/processDisplay.js forge-admin-ui/src/views/flow/todo.vue forge-admin-ui/src/views/flow/done.vue forge-admin-ui/src/views/flow/started.vue forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdengineeringManagerRemark,采购单基础信息都被隐藏。BusinessFlowService#applyBusinessCodeFieldPermissions、BusinessFlowService#buildTaskFormFields。useBusinessTaskFormContext.canShowField。spec.md、tasks.md、test-spec.md。readable=false 的字段才隐藏。writable=true 的字段才可编辑。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/composables/useBusinessTaskFormContext.js src/views/business/purchase-order-test.vuecd 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-generator -am compile -DskipTestsBUILD SUCCESS。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --checkviews.LIST/DETAIL 作为主协议。BusinessCodeAppMetadataPanel.vue 改为输出现有兼容结构:
formDesignerSchema.schemaVersion=form-first-v2formDesignerSchema.settings.formAssetsviewSchema.schemaVersion=view-schema-v1viewSchema.list.columnsviewSchema.detail.sectionsuseCodeAppMetadata.js 改为优先读取 viewSchema,旧 views 仅保留历史兜底。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/designer/BusinessCodeAppMetadataPanel.vue src/composables/useCodeAppMetadata.js src/views/business/purchase-order-test.vue src/views/app-center/components/designer/BusinessFlowAppConfigPanel.vueBusinessCodeAppMetadataPanel.vue:
formDesignerSchema.settings.formAssets、viewSchema.list.columns、viewSchema.detail.sections。formDesignerSchema。viewSchema.list.columns 和 viewSchema.detail.sections。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/designer/BusinessCodeAppMetadataPanel.vueobject-designer.[objectCode].vue、BusinessFlowAppConfigPanel.vue、BusinessDetailDesigner.vue。BusinessFlowAppConfigService 提示文案与 metadata 随流程绑定保存路径。spec.md、tasks.md、test-spec.md、code-copilot/memory/decisions.md。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint 'src/views/app-center/object-designer.[objectCode].vue' src/views/app-center/components/designer/BusinessFlowAppConfigPanel.vue src/views/app-center/components/designer/BusinessDetailDesigner.vue src/views/business/purchase-order-test.vue src/composables/useCodeAppMetadata.jssource ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/designer/BusinessFlowAppConfigPanel.vuecd forge-admin-ui && source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm build✓ built in 3m 4s。UserSelectModal 组件命名冲突提示;既有动态/静态混合 import chunk 提示;既有 CSS // 注释 minify 警告。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-generator -am compile -DskipTestsBUILD SUCCESS。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --checkSamplePurchaseOrderServiceImpl#ensureFlowModel 在发起采购单前发现现有 BPMN XML 与 SamplePurchaseOrderFlowBpmn.build() 不一致时会 updateModel 并重新发布,覆盖流程设计器节点抽屉保存的字段权限。BusinessFlowService#resolveFlowNodeForm 只按 taskId 读取任务表单信息,读不到时退回旧 bindingConfig.nodeForms,无法稳定读取 BPMN 主数据源中的 formFieldPermissions。purchase-order-test.vue 只传 taskId 时会先解析业务单 ID,解析不到直接返回,业务表单上下文和字段权限都不会加载;顶部“采购单信息”只按详情视图过滤,没有叠加节点字段权限。SamplePurchaseOrderServiceImpl。FlowClient、FlowTaskService、FlowTaskServiceImpl、FlowTaskController、FlowCcController。BusinessFlowService。useBusinessTaskFormContext.js、purchase-order-test.vue。spec.md、tasks.md、test-spec.md、code-copilot/memory/pitfalls.md。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/composables/useBusinessTaskFormContext.js src/views/business/purchase-order-test.vue src/composables/useCodeAppMetadata.jscd 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-business/forge-business-core,forge-flow/forge-flow-client,forge-flow/forge-flow-server,forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTestsBUILD SUCCESS。@Builder 默认值警告;既有 deprecated/unchecked 编译提示。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && NODE_OPTIONS=--max-old-space-size=8192 pnpm build✓ built in 2m 13s。UserSelectModal 命名冲突、动态/静态混合 import chunk 提示、CSS // 注释 minify 提示。git diff --checkmetadata.fields,导致 Provider/业务表后续新增字段不会进入“表单设计 / 列表设计 / 详情设置”。pageSchema/viewSchema/formDesignerSchema 会让现有设计器没有内容,看起来仍然只能在代码里维护。fields[].formVisible,采购新增/编辑表单和待办自定义 Vue 表单不会消费应用管理里的表单显隐配置。BusinessFlowService。object-designer.[objectCode].vue、BusinessDetailDesigner.vue、formDesignerSchema.js。useCodeAppMetadata.js、purchase-order-test.vue。spec.md、tasks.md、test-spec.md。codeAppMetadata 只叠加标签、显隐、排序等用户配置。formVisible,后端待办上下文和采购自定义表单都会按 FORM 配置裁剪字段。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint 'src/views/app-center/object-designer.[objectCode].vue' src/views/app-center/components/designer/BusinessDetailDesigner.vue src/views/app-center/components/designer/form-first/formDesignerSchema.js src/composables/useCodeAppMetadata.js src/views/business/purchase-order-test.vuecd 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-generator -am compile -DskipTestsBUILD SUCCESS。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && NODE_OPTIONS=--max-old-space-size=8192 pnpm build✓ built in 3m 29s。UserSelectModal 命名冲突、动态/静态混合 import chunk 提示、CSS // 注释 minify 提示。git diff --checkBusinessFlowAppConfigPanel.vue、BusinessCodeAppFormAssetPanel.vue、flow/design.vue、ApproverConfig.vue。BusinessFlowService、FlowTaskServiceImpl、SamplePurchaseOrderFlowDefinition。spec.md、tasks.md、execution-log.md。options.codeAppMetadata.formAssets,不覆盖表单/列表/详情设计器输出。FlowModel.formType=business + formJson 引用 JSON;节点未配置表单时字段权限目录继承全局业务表单资产。codeAppMetadata.formAssets,配置化 formKey/formUrl/providerKey/formMode 不再被 Provider 原始资产覆盖。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/designer/BusinessFlowAppConfigPanel.vue 'src/views/app-center/object-designer.[objectCode].vue' src/views/flow/design.vue src/components/flow-designer/panel/ApproverConfig.vueflow/design.vue 存在 no-use-before-define;ApproverConfig.vue 存在导入排序和二元操作符缩进问题。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-generator,forge-business/forge-business-core -am compile -DskipTestsBUILD SUCCESS。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。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-flow,forge-framework/forge-plugin-parent/forge-plugin-generator,forge-business/forge-business-core -am compile -DskipTestsBUILD SUCCESS,覆盖本轮新增修改的 forge-plugin-flow。git diff --checkappName/objectName/businessName 都暴露为可编辑项,业务用户会误以为需要维护三份业务名称。BusinessCodeFormProvider,旧 UI 允许自由输入,缺少来源说明。pageSchema/formDesignerSchema 可能被当成可用 schema,导致左侧“表单设计 / 列表设计 / 详情设置”没有字段内容。BusinessCodeAppFormAssetPanel.vue、object-designer.[objectCode].vue。tasks.md、test-spec.md、execution-log.md。BusinessCodeFormProvider Spring Bean。formKey/formUrl/providerKey/formMode 等引用信息,同时继续以 Provider 当前字段为字段基准。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/designer/BusinessCodeAppFormAssetPanel.vue 'src/views/app-center/object-designer.[objectCode].vue'BusinessCodeAppFormAssetPanel.vue 的自定义事件名需要使用 camelCase。git diff --check -- forge-admin-ui/src/views/app-center/components/designer/BusinessCodeAppFormAssetPanel.vue 'forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue'source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && NODE_OPTIONS=--max-old-space-size=8192 pnpm build✓ built in 1m 49s。UserSelectModal 命名冲突、动态/静态混合 import chunk 提示、CSS // 注释 minify 提示。BusinessCodeFormProvider Bean。ai_business_object 占位对象,但没有低代码模型字段;左侧设计器必须直接消费 Provider 字段目录,不能要求把后台业务表再导入成低代码对象。BusinessCodeFormProviderRegistry、BusinessFlowService、BusinessFlowAppConfigService。BusinessCodeAppFormAssetPanel.vue、BusinessFlowAppConfigPanel.vue、object-designer.[objectCode].vue。tasks.md、test-spec.md、execution-log.md。getFormAssets 返回 providerCatalog,目录来自所有 Spring Bean 形式注册的 BusinessCodeFormProvider,并携带每个 Provider 的默认资产字段。ai_business_object 的代码应用也会在配置响应中补齐 options.codeApp/codeAppMetadata,避免前端按普通低代码对象理解。providerCatalog[].assets[].fields 兜底生成 modelSchema/pageSchema/formDesignerSchema/viewSchema。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/designer/BusinessCodeAppFormAssetPanel.vue src/views/app-center/components/designer/BusinessFlowAppConfigPanel.vue 'src/views/app-center/object-designer.[objectCode].vue'git diff --check -- forge-admin-ui/src/views/app-center/components/designer/BusinessCodeAppFormAssetPanel.vue forge-admin-ui/src/views/app-center/components/designer/BusinessFlowAppConfigPanel.vue 'forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue' forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessCodeFormProviderRegistry.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowAppConfigService.javacd 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-generator -am compile -DskipTestsBUILD SUCCESS。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && NODE_OPTIONS=--max-old-space-size=8192 pnpm build✓ built in 1m 33s。UserSelectModal 命名冲突、动态/静态混合 import chunk 提示、CSS // 注释 minify 提示。providerCatalog 响应。ai_business_object 占位对象,嵌入式打开对象设计器时传入了 objectId,但 URL 没有 codeApp=1。object-designer.[objectCode].vue 解析到对象后直接调用普通 businessObjectDesigner(object.id),由于采购审批对象没有低代码模型字段,左侧“表单设计 / 列表设计 / 详情设置”加载到空 schema。BusinessFlowAppConfigService#saveConfig 在已有对象分支没有处理 options.codeAppMetadata,导致代码应用表单设计/列表设计保存后无法写入流程绑定 options。object-designer.[objectCode].vue。BusinessFlowAppConfigService。spec.md、tasks.md、test-spec.md、execution-log.md。objectCode 拉完整业务对象,识别 options/designerOptions.codeApp=true 后强制进入代码应用虚拟设计器路径。businessObjectDesigner(object.id),而是用 businessFlowAppConfig 返回的 Provider/formAssets/providerCatalog 字段生成 modelSchema/pageSchema/formDesignerSchema/viewSchema。options.codeAppMetadata 时也会写入流程绑定 options;带流程绑定保存时同步合并 metadata 并归一化为代码适配器绑定。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint 'src/views/app-center/object-designer.[objectCode].vue'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-generator -am compile -DskipTestsBUILD SUCCESS。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && NODE_OPTIONS=--max-old-space-size=8192 pnpm build✓ built in 3m 2s。UserSelectModal 命名冲突、动态/静态混合 import chunk 提示、CSS // 注释 minify 提示。git diff --check -- 'forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue' forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowAppConfigService.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdBusinessFlowService#validateTaskAccess 仍把请求里的 processDefKey 和任务详情里的 processDefKey 做直接字符串比较。sys_flow_task 和 Flowable 运行时可能分别携带业务流程模型 Key、key:version:id 或历史 UUID 型流程定义标识,导致同一流程被误判为“流程定义与当前任务不匹配”。FlowTaskServiceImpl#getTaskDetail。BusinessFlowService#validateTaskAccess。spec.md、tasks.md、test-spec.md、execution-log.md。code-copilot/memory/pitfalls.md。processDefKey 归一化为业务流程模型 Key,优先从 Flowable ProcessDefinition.getKey() / BPMN process id 解析。key、key:version:id 和历史 UUID 型流程定义表示,不再因为表示差异误拦截。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-flow,forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTestsBUILD SUCCESS,总耗时 13.431 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-server/forge-framework/forge-plugin-parent/forge-plugin-flow/src/main/java/com/mdframe/forge/starter/flow/service/impl/FlowTaskServiceImpl.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.md code-copilot/memory/pitfalls.mdtodo.vue 先请求 /api/flow/task/form/{taskId},返回后再串行请求 /ai/business/flow/task-form-context。businessFormContext 后,FlowBusinessForm 没有把它传给采购审批组件;purchase-order-test.vue 挂载后又重复请求业务表单上下文、代码应用配置和采购单详情。todo.vue、FlowBusinessForm.vue、purchase-order-test.vue、useBusinessTaskFormContext.js。spec.md、tasks.md、test-spec.md、execution-log.md。code-copilot/memory/pitfalls.md。FlowBusinessForm 新增 initialTaskContext 透传协议。recordData,不再重复请求业务上下文、代码应用配置和采购单详情。useBusinessTaskFormContext 支持注入已有上下文,并基于上下文字段目录判断显示/编辑。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/components/common/FlowBusinessForm.vue src/views/flow/todo.vue src/views/business/purchase-order-test.vue src/composables/useBusinessTaskFormContext.jssource ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && NODE_OPTIONS=--max-old-space-size=8192 pnpm build✓ built in 5m 55s。UserSelectModal 命名冲突、动态/静态混合 import chunk 提示、CSS // 注释 minify 提示。git diff --check -- forge-admin-ui/src/components/common/FlowBusinessForm.vue forge-admin-ui/src/views/flow/todo.vue forge-admin-ui/src/views/business/purchase-order-test.vue forge-admin-ui/src/composables/useBusinessTaskFormContext.js code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.md code-copilot/memory/pitfalls.mdtodo.vue 并行加载 /api/flow/task/form/{taskId} 和 /ai/business/flow/task-form-context。processDefKey,而列表行里的流程定义值不一定已经按 FlowTaskServiceImpl#getTaskDetail 归一化。todo.vue。BusinessFlowService。spec.md、tasks.md、test-spec.md、execution-log.md。code-copilot/memory/pitfalls.md。taskId,由后端任务详情补齐流程实例、业务 Key、任务节点和流程定义。buildBusinessTaskFormQuery 不再从待办列表行回退读取 processDefKey,只接受已加载表单信息中的归一化值。BusinessFlowService#assertProcessDefinitionMatches 对流程定义表示差异只记录 debug 日志,不再硬抛错;任务 ID、办理人、流程实例、业务 Key 和任务节点校验保持不变。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/flow/todo.vuecd 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-generator -am compile -DskipTestsBUILD SUCCESS,总耗时 23.367 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-admin-ui/src/views/flow/todo.vue forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.md code-copilot/memory/pitfalls.md/api/flow/task/form/{taskId} 请求和业务上下文后台 FlowClient 请求同一接口并存,导致同一个任务表单信息加载两次。FlowTaskServiceImpl#getTaskFormInfo 内部先查流程模型和 BPMN 节点解析表单配置,随后 getTaskApprovalPolicy 又重复查询流程模型和解析 BPMN。sys_flow_form_instance。todo.vue。FlowTaskServiceImpl。BusinessFlowService、BusinessTaskFormContextVO。spec.md、tasks.md、test-spec.md、execution-log.md。/ai/business/flow/task-form-context;如果返回业务对象表单或业务代码表单,前端不再额外请求 /api/flow/task/form/{taskId}。getTaskFormInfo 内复用同一次解析出的 FlowModel 和 FlowNode,审批策略不再重复查模型和 BPMN。sys_flow_form_instance 查询,只有动态表单需要快照时才查询。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/flow/todo.vuecd 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-flow,forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTestsBUILD SUCCESS,总耗时 20.767 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-admin-ui/src/views/flow/todo.vue forge-server/forge-framework/forge-plugin-parent/forge-plugin-flow/src/main/java/com/mdframe/forge/starter/flow/service/impl/FlowTaskServiceImpl.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessTaskFormContextVO.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.md/api/flow/task/form/{taskId},且来自 /ai/business/flow/task-form-context 后台链路。purchase-order-test.vue 头部标签。currentTaskDefKey,所以公共流程列表和抽屉节点展示修正后,这里仍会显示 dept_leader_approve。purchase-order-test.vue。spec.md、tasks.md、test-spec.md、execution-log.md。currentNodeDisplayName,通过 getTaskDisplayName 清理节点名尾部技术编码。taskDefKey,不影响字段展示和校验。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/business/purchase-order-test.vuegit diff --check -- forge-admin-ui/src/views/business/purchase-order-test.vue code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mddept_leader_approve。suiteCode,但如果只更新 ai_business_object.suite_code,访问入口、设计版本、触发器和单据配置仍留在旧业务域,应用中心展示会割裂。BusinessObjectEditorDrawer.vue、BusinessUnitCard.vue、ObjectCard.vue、index.vue、suite.[suiteCode].vue、object.[objectCode].vue。BusinessObjectService、BusinessObjectMapper.java、BusinessObjectMapper.xml。spec.md、tasks.md、test-spec.md、execution-log.md。modelId/modelCode/options 等隐藏配置。suite_code;存在对象关系时阻止移动并提示先调整关系。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/BusinessUnitCard.vue src/views/app-center/components/ObjectCard.vue src/views/app-center/components/BusinessObjectEditorDrawer.vue src/views/app-center/index.vue 'src/views/app-center/suite.[suiteCode].vue' 'src/views/app-center/object.[objectCode].vue'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-generator -am compile -DskipTestsBUILD SUCCESS,总耗时 15.662 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-admin-ui/src/views/app-center/components/BusinessUnitCard.vue forge-admin-ui/src/views/app-center/components/ObjectCard.vue forge-admin-ui/src/views/app-center/components/BusinessObjectEditorDrawer.vue forge-admin-ui/src/views/app-center/index.vue 'forge-admin-ui/src/views/app-center/suite.[suiteCode].vue' 'forge-admin-ui/src/views/app-center/object.[objectCode].vue' forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectService.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/BusinessObjectMapper.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper/BusinessObjectMapper.xml code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdgit diff --no-index --check /dev/null forge-admin-ui/src/views/app-center/components/BusinessObjectEditorDrawer.vueBusinessObjectWizardDrawer.vue、BusinessObjectEditorDrawer.vue、object-designer.[objectCode].vue。spec.md、tasks.md、test-spec.md、execution-log.md。displayField,避免清空历史配置。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/BusinessObjectWizardDrawer.vue src/views/app-center/components/BusinessObjectEditorDrawer.vue 'src/views/app-center/object-designer.[objectCode].vue'git diff --check -- forge-admin-ui/src/views/app-center/components/BusinessObjectWizardDrawer.vue forge-admin-ui/src/views/app-center/components/BusinessObjectEditorDrawer.vue 'forge-admin-ui/src/views/app-center/object-designer.[objectCode].vue' code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdgit diff --no-index --check /dev/null forge-admin-ui/src/views/app-center/components/BusinessObjectEditorDrawer.vuemergeCodeAppAssets 仍会把 Provider 默认资产自动补回。SamplePurchaseOrderServiceImpl#submit 直接硬编码 采购单审批-采购单号,绕过了应用管理中的流程标题模板。BusinessCodeAppFormAssetPanel.vue、index.vue、suite.[suiteCode].vue、object.[objectCode].vue、BusinessObjectEditorDrawer.vue、SuiteEditorDrawer.vue。BusinessFlowService、SamplePurchaseOrderServiceImpl。spec.md、tasks.md、test-spec.md、execution-log.md。codeAppMetadata.removedFormAssetKeys;新增或切换 Provider 会清除对应移除标记。removedFormAssetKeys,Provider 默认资产不会在刷新后自动恢复。titleTemplate,支持 ${field} 和 {field},未配置时保留原兜底标题。source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-admin-ui && pnpm exec eslint src/views/app-center/components/designer/BusinessCodeAppFormAssetPanel.vue src/views/app-center/index.vue 'src/views/app-center/suite.[suiteCode].vue' 'src/views/app-center/object.[objectCode].vue' src/views/app-center/components/BusinessObjectEditorDrawer.vue src/views/app-center/components/SuiteEditorDrawer.vuecd 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-business/forge-business-core,forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTestsBUILD SUCCESS,总耗时 18.672 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-admin-ui/src/views/app-center/components/designer/BusinessCodeAppFormAssetPanel.vue forge-admin-ui/src/views/app-center/index.vue 'forge-admin-ui/src/views/app-center/suite.[suiteCode].vue' 'forge-admin-ui/src/views/app-center/object.[objectCode].vue' forge-admin-ui/src/views/app-center/components/BusinessObjectEditorDrawer.vue forge-admin-ui/src/views/app-center/components/SuiteEditorDrawer.vue forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/service/impl/SamplePurchaseOrderServiceImpl.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdgit diff --no-index --check /dev/null forge-admin-ui/src/views/app-center/components/designer/BusinessCodeAppFormAssetPanel.vuegit diff --no-index --check /dev/null forge-admin-ui/src/views/app-center/components/BusinessObjectEditorDrawer.vueFlowTaskServiceImpl#reject 只把 approvalResult=reject、approved=false 作为 taskService.complete 参数传入。IN_PROCESS。FlowTaskServiceImpl。SamplePurchaseOrderServiceImpl。spec.md、tasks.md、test-spec.md、execution-log.md。completeTask 在完成任务前先把审批动作变量写入流程实例,再调用 taskService.complete,保证任务完成监听器和后续流程事件能读取到本次动作变量。TASK_COMPLETED 回调同时识别 approvalResult=reject 和 approved=false;普通审批节点驳回后状态流转为“待修改”,申请人修改节点驳回后状态流转为“已驳回”。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-flow,forge-business/forge-business-core -am compile -DskipTestsBUILD SUCCESS,总耗时 12.297 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-server/forge-framework/forge-plugin-parent/forge-plugin-flow/src/main/java/com/mdframe/forge/starter/flow/service/impl/FlowTaskServiceImpl.java forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/service/impl/SamplePurchaseOrderServiceImpl.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdIN_PROCESS,重新提交前保存申请人修改字段时报“当前采购单不是待修改状态”。TASK_COMPLETED 事件里的驳回变量仍不够稳,业务状态应以“申请人修改任务已创建”作为兜底事实;已经错过事件的存量待办也需要在保存前自愈。SamplePurchaseOrderServiceImpl。spec.md、tasks.md、test-spec.md、execution-log.md。TASK_CREATED;当创建的任务是 applicant_modify 且采购单仍为 IN_PROCESS 时,立即同步为 NEED_MODIFY。IN_PROCESS,先在同一事务内修复为 NEED_MODIFY,再保存业务字段,兼容已经卡住的旧待办。APPROVED/REJECTED/CANCELED 或非申请人修改节点不会被该兜底逻辑改回待修改。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-business/forge-business-core -am compile -DskipTestsBUILD SUCCESS,总耗时 13.010 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/service/impl/SamplePurchaseOrderServiceImpl.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdNEED_MODIFY。TASK_COMPLETED 回调漏掉,状态不会回到 IN_PROCESS。SamplePurchaseOrderServiceImpl、SamplePurchaseOrderFlowDefinition。spec.md、tasks.md、test-spec.md、execution-log.md。SamplePurchaseOrderFlowDefinition 增加普通审批节点判断,统一识别部门负责人、工程部经理和采购会签。TASK_CREATED 回调新增普通审批节点兜底:当新建任务是普通审批节点且采购单仍为 NEED_MODIFY 时,自动同步为 IN_PROCESS。NEED_MODIFY 的存量待办,先修复为 IN_PROCESS 再保存字段。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-business/forge-business-core -am compile -DskipTestsBUILD SUCCESS,总耗时 16.364 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/service/impl/SamplePurchaseOrderServiceImpl.java forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/support/SamplePurchaseOrderFlowDefinition.java code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdTASK_CREATED,因此仅靠事件兜底无法让列表/详情立即恢复状态。IN_PROCESS/NEED_MODIFY 两类流转中状态。SamplePurchaseOrderMapper、SamplePurchaseOrderMapper.xml、SamplePurchaseOrderServiceImpl。spec.md、tasks.md、test-spec.md、execution-log.md。sys_flow_task 中状态为待办/已签收的当前任务节点。page/detail/detailsByIds 返回前对账:当前活跃节点是 applicant_modify 则状态应为 NEED_MODIFY;当前活跃节点是普通审批节点则状态应为 IN_PROCESS。IN_PROCESS/NEED_MODIFY,不修改草稿、已通过、已驳回、已取消等状态。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-business/forge-business-core -am compile -DskipTestsBUILD SUCCESS,总耗时 13.445 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/mapper/SamplePurchaseOrderMapper.java forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/service/impl/SamplePurchaseOrderServiceImpl.java forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/support/SamplePurchaseOrderFlowDefinition.java forge-server/forge-business/forge-business-core/src/main/resources/mapper/business/SamplePurchaseOrderMapper.xml code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.mdcd 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-business/forge-business-core -am compile -DskipTestsBUILD SUCCESS,总耗时 12.994 s。GenTableServiceImpl 既有 deprecated API 警告;BusinessObjectDesignerService 既有 unchecked/unsafe operations 警告。git diff --check -- forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/mapper/SamplePurchaseOrderMapper.java forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/service/impl/SamplePurchaseOrderServiceImpl.java forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/purchase/support/SamplePurchaseOrderFlowDefinition.java forge-server/forge-business/forge-business-core/src/main/resources/mapper/business/SamplePurchaseOrderMapper.xml code-copilot/changes/code-app-metadata-config/spec.md code-copilot/changes/code-app-metadata-config/tasks.md code-copilot/changes/code-app-metadata-config/test-spec.md code-copilot/changes/code-app-metadata-config/execution-log.md code-copilot/memory/pitfalls.md