status: propose created: 2026-08-03 拆分顺序:协议与权限 -> 节点保存 -> 集合校验 -> 节点动作 -> 批量生成 -> 消息 -> 验收 每个任务为可独立审查的原子变更;开始
/apply时再根据工作区最新代码校准文件列表和 Flyway 版本。
spec.md 第 9 节待澄清问题。spec.md 第 13 节 HARD-GATE,明确授权 /apply kpi-full-lowcode-capability-closure。sys_user 原表或沿用不存在的 sys_user_position 名称。/apply 授权全部 P0/P1,或仅授权 P0;未明确授权的 P1 不得实施。/apply 前读取最新 AGENTS.md、本变更四份文档、memory 和编码规范;每个 Phase 验证前读取自动化测试标准并增量更新 test-spec.md/execution-log.md。code-copilot/changes/kpi-full-lowcode-capability-closure/test-spec.md — 按确认后的业务口径增量冻结 P0/P1 测试矩阵。code-copilot/changes/kpi-full-lowcode-capability-closure/execution-log.md — 逐次追加命令、结果、警告、跳过项和服务清理。code-copilot/changes/kpi-full-lowcode-capability-closure/spec.md — 只回填确认、风险、执行和审查状态。code-copilot/changes/kpi-full-lowcode-capability-closure/tasks.md — 只更新当前 Task 状态和实际文件。forge-admin-ui/src/views/flow/utils/form-field-catalog.js — 扩展主表/子表字段目录标准化,输出稳定 relationCode/fieldCode。forge-admin-ui/src/components/flow-designer/panel/FormPermissionConfig.vue — 分组展示子表权限和 allowAdd/allowDelete。forge-admin-ui/src/components/flow-designer/converter/user-task-writer.js — 只写入子表权限扩展属性。forge-admin-ui/src/components/flow-designer/converter/user-task-parser.js — 兼容解析新旧权限协议。forge-admin-ui/src/components/flow-designer/panel/__tests__/FormPermissionConfig.spec.js — 覆盖权限编辑与历史协议回显。json
{
"relationCode": "task_details",
"field": "self_score",
"readable": true,
"writable": true,
"requiredOnComplete": true,
"allowAdd": false,
"allowDelete": false
}
forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessTaskFormContextVO.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/dto/businessapp/BusinessTaskFormContextQueryDTO.java — 保持任务身份参数明确,禁止客户端指定权限。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowTaskChildPermissionTest.java — 新增权限归一、旧协议和越权测试。java
private List<Map<String, Object>> resolveTaskChildPermissions(
TaskFormRuntimeContext runtime,
JSONObject nodeForm);
PUT task-form-context 只受控保存主子表草稿,办理数据统一交给 Task 8B 的唯一命令。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessTaskFormSaveDTO.java — 增加受控 children payload,协议固定为草稿保存。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/DynamicCrudService.java — 提供节点权限感知的主子表 merge 内部入口,忽略并审计客户端公式字段,触发公式刷新。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowTaskChildSaveTest.java — 新增草稿、越权字段、公式字段和跨主记录行测试。public Map mergeTaskFormDataById(
String configKey,
Long recordId,
Map<String, Object> mainData,
Map<String, Object> children,
TaskFormWritePolicy policy);
- **验收**:草稿可保留空评分;PUT 不能以任何参数触发办理;只读字段、公式字段和其它任务明细不能被修改。
## Task 4:待办页按节点权限编辑子表与保存草稿(P0)
- **目标**:去掉待办子表全局只读限制,让本阶段草稿只走 PUT,并保持布局稳定、已办只读;POST 唯一办理命令在 Phase 2 的 Task 7B/8B 闭环。
- **涉及文件**:
- `forge-admin-ui/src/views/flow/todo.vue` — 向子表编辑器传递节点权限并组装草稿请求;不在本 Task 改造办理协议。
- `forge-admin-ui/src/components/page-templates/ChildTableEditor.vue` — 支持字段级只读、必填和行操作权限。
- `forge-admin-ui/src/api/flow.js` — 扩展任务表单保存 payload,不改变现有接口路径。
- `forge-admin-ui/src/views/flow/utils/__tests__/form-field-catalog.spec.js` — 覆盖子表字段目录和权限映射。
- `forge-admin-ui/src/components/page-templates/__tests__/ChildTableEditorTaskPermission.spec.js` — 新增节点权限交互测试。
- **验收**:自评节点只能编辑自评分,上级节点只能编辑上级评分;保存草稿只发一次 PUT;固定格式表格在桌面和窄屏不发生字段/按钮重叠。办理单次 POST 的验收归 Task 7B/8B。
## Task 5A:服务端条件必填协议与执行器(P0)
- **目标**:让低代码条件必填在服务端成为可信规则,并支持按节点结果校验申诉/调分补充字段。
- **涉及文件**:
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/validation/ConditionalValidationRule.java` — 新增字段、公式字段和节点结果条件协议。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/validation/ConditionalValidationService.java` — 新增白名单条件比较和 required 执行器。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.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/test/java/com/mdframe/forge/plugin/generator/service/validation/ConditionalValidationServiceTest.java` — 覆盖分差评语、申诉原因、调分、非法来源和绕过前端提交。
- **验收**:路由/URL/客户端用户/表达式条件不能进入服务端规则;公式分差超阈值缺评语被拒绝;确认结果不误要求申诉字段。
## Task 5B:声明式集合校验后端协议与执行器(P0)
- **目标**:提供安全、可审计的跨行规则,严格按普通保存 `SAVE`、节点办理 `COMPLETE` 的阶段矩阵执行。
- **涉及文件**:
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/validation/CollectionValidationRule.java` — 新增白名单规则模型。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/validation/CollectionValidationService.java` — 新增 `ROW_COUNT/SUM/UNIQUE/ALL_REQUIRED` 执行器。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.java` — 普通主子表保存接入 SAVE 规则。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java` — 在内存合并完整主子表候选、重算公式后接入 COMPLETE 规则;校验成功后再原子持久化和刷新聚合。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/validation/CollectionValidationServiceTest.java` — 覆盖精度、空集合、唯一性和阶段规则。
- **关键签名**:
```java
public void validate(
List<CollectionValidationRule> rules,
ValidationPhase phase,
Map<String, Object> mainData,
Map<String, List<Map<String, Object>>> children);
99.99/100.00/100.01 判定准确;后端拒绝绕过前端提交的非法集合。forge-admin-ui/src/views/app-center/components/designer/BusinessRelationDesigner.vue — 增加关系集合规则入口。forge-admin-ui/src/views/app-center/components/designer/CollectionValidationRuleDesigner.vue — 新增结构化规则编辑器。forge-admin-ui/src/views/app-center/components/designer/__tests__/CollectionValidationRuleDesigner.spec.js — 新增配置交互测试。SUM(weight)=100、ROW_COUNT>=1 和 UNIQUE(indicator_id);即时预览明确标注为设计辅助,不替代后端保存/办理校验。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectDesignerService.java — 保存时归一规则并做字段、关系、阶段和操作符白名单校验。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessApplicationReadinessService.java — 静态检查损坏规则、条件必填的不可信来源、缺失字段、公式精度/舍入和公式字段误配置为可写。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessValidationReadinessTest.java — 覆盖合法协议、未知阶段、损坏引用、公式字段可写和零业务数据扫描。SAVE/COMPLETE 校验当发布校验执行。forge-admin-ui/src/components/flow-designer/panel/PermissionConfig.vue — 配置主/次结果文案、动作、受控流程变量及补充/必填字段;失败策略首期固定为补偿。forge-admin-ui/src/components/flow-designer/constants/default-configs.js — 增加兼容默认值。forge-admin-ui/src/components/flow-designer/converter/user-task-writer.js — 写入节点结果配置。forge-admin-ui/src/components/flow-designer/converter/user-task-parser.js — 解析并回显节点结果配置。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessApplicationReadinessService.java — 阻断节点结果动作与绑定级 APPROVED/REJECTED callbackActions 共存,允许独立 CANCELED 回调。forge-admin-ui/src/components/flow-designer/converter/__tests__/user-task-parser-permissions.spec.js — 增加 round-trip 测试。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowOutcomeActionReadinessTest.java — 覆盖新旧动作互斥及 CANCELED 兼容。json
{
"approveLabel": "提交自评",
"approveActionCode": "kpi_submit_self",
"approveVariables": {"outcome": "self_submitted"},
"rejectLabel": "发起申诉",
"rejectActionCode": "kpi_create_appeal",
"rejectVariables": {"outcome": "appeal_requested"},
"rejectFormFields": ["appeal_type", "appeal_reason", "appeal_evidence"],
"rejectRequiredFields": ["appeal_type", "appeal_reason"],
"failureStrategy": "COMPENSATE"
}
forge-admin-ui/src/views/flow/todo.vue — 根据结果配置打开补充字段弹窗,并把字段合入唯一 task-action 请求。forge-admin-ui/src/views/flow/components/BusinessTaskOutcomeDialog.vue — 新增复用 AiForm 的结果字段弹窗。forge-admin-ui/src/api/flow.js — 保持单次 POST,传递结果字段、完整表单、幂等键和请求摘要。forge-admin-ui/src/views/flow/components/__tests__/BusinessTaskOutcomeDialog.spec.js — 覆盖申诉、确认、HR 调分、取消和重复提交。sys_flow_task 建立可恢复的唯一办理命令状态,并建立可查询、可 CAS 重试的流程节点动作补偿台账;二者均不替代现有动作日志的幂等权威。forge-server/db/migration/V<next>__add_lowcode_flow_task_action_state_and_compensation.sql — 扩展 sys_flow_task 命令阶段/最小恢复上下文,新建补偿表、索引、状态字典和查询/重试权限资源。forge-server/forge-framework/forge-plugin-parent/forge-plugin-flow/src/main/java/com/mdframe/forge/starter/flow/entity/FlowTask.java — 复用既有幂等键/摘要/动作类型并增加阶段、固定动作引用、最小上下文和稳定结果摘要。forge-server/forge-framework/forge-plugin-parent/forge-plugin-flow/src/main/resources/mapper/FlowTaskMapper.xml — 增加按期望阶段 CAS 预留/推进命令和恢复查询 SQL。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessFlowActionCompensation.java — 新增补偿实体。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/BusinessFlowActionCompensationMapper.java — 新增查询和 CAS Mapper。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper/BusinessFlowActionCompensationMapper.xml — 显式租户、状态、分页和 CAS SQL。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowActionCompensationService.java — 固定动作发布版本、流程/业务定位、规范化变量、原幂等键/摘要和 action_log_id,并编排分页及补偿状态。RESERVED -> FORM_SAVED -> FLOW_COMPLETED -> ACTION_SUCCEEDED/COMPENSATION_PENDING CAS 前进;相同 tenant/task/outcome/action 只能有一条逻辑补偿记录;补偿固定原动作发布版本且不保存完整表单/评分正文;跨租户查询/重试拒绝。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessTaskActionDTO.java — 携带节点结果、完整主子表 COMPLETE 数据、幂等键和请求摘要。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowService.java — 编排命令预留、完整候选状态/公式/校验、本地原子保存、Flowable 历史核对、任务完成、动作和补偿状态。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessActionExecutionService.java — 提供受控 FAILED 日志 CAS 基础能力,强制原幂等键、原请求摘要和固定动作版本。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessActionRetryService.java — 新增流程补偿和批量失败项共用的可信重试入口,统一 CAS、权限主体、尝试审计和返回语义。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessFlowController.java — 保持 task-action 原路径,并增加补偿分页/详情/重试接口和权限。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowNodeActionTest.java — 新增重复回调、动作失败和重试测试。java
private BusinessActionExecuteResultVO executeNodeOutcomeAction(
TaskFormRuntimeContext runtime,
String taskId,
String outcome,
String actionCode);
FORM_SAVED 恢复;Flowable 成功但响应丢失时通过任务/历史核对收敛;最终响应丢失时相同键/摘要返回稳定结果;相同键不同摘要、不同键抢占和任务并发完成均有确定冲突语义。受控重试复用原失败日志且只产生一次逻辑业务副作用,绝不再次完成 Flowable 任务。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowActionCompensationSchedulerService.java — 使用 @ScheduledJob、租户上下文、集群锁和分页扫描执行 CAS 重试。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowActionCompensationService.java — 统一自动/人工重试、退避、最大次数和人工处理状态,并委托通用 BusinessActionRetryService。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessFlowActionCompensationSchedulerServiceTest.java — 覆盖集群锁、退避、并发人工重试、成功收敛和超限停止。forge-admin-ui/src/api/business-app.js — 增加补偿分页、详情和手工重试 API。forge-admin-ui/src/views/app-center/flow-action-compensation.vue — 新增紧凑列表、状态筛选、详情和重试入口。forge-admin-ui/src/views/app-center/components/FlowActionCompensationDetail.vue — 展示固定动作版本、流程/业务定位、尝试历史和脱敏错误。forge-admin-ui/src/views/app-center/components/__tests__/FlowActionCompensationDetail.spec.js — 覆盖权限、长 ID、状态、并发重试和敏感字段隐藏。sys_user + sys_user_post.is_main + 当前组织关系 的白名单投影,generator 只依赖 SPI,不直接跨插件查询表。QUERY_RECORDS 任意访问 sys_user/sys_user_post 原表。forge-server/db/migration/V<next>__add_lowcode_batch_trigger_runtime.sql — 新建运行表、扩展日志、索引、字典和权限资源。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessTriggerRun.java — 新增运行汇总实体并固定触发器版本/摘要、period JSON、绑定用户/组织、源查询摘要和动作发布版本。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/domain/entity/AiBusinessTriggerLog.java — 增加运行、源记录、逻辑幂等键、actionLogId、尝试序号和可重试字段。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/mapper/BusinessTriggerRunMapper.java — 新增运行 Mapper。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper/BusinessTriggerRunMapper.xml — 运行汇总和失败项查询 SQL。tenant_id=1、显式列名;触发日志幂等索引不是 UNIQUE,同一逻辑项的失败重试可保留多个 attempt 并关联同一动作日志;run 能独立恢复原配置/周期/身份/源查询/动作版本;运行和失败项按租户隔离。FOREACH/CREATE_RECORD 提供命名输出,不开放 SQL 或脚本。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/QueryRecordsActionStepExecutor.java — 新增 QUERY_RECORDS 白名单只读步骤和命名输出。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessActionExecutionContext.java — 承载后续步骤可读取的受控查询输出。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.java — 提供显式 DataScopeContext、字段/操作符白名单、分页上限和已声明子表加载的内部查询入口。forge-admin-ui/src/views/app-center/components/designer/BusinessActionDesigner.vue — 通过对象、字段、操作符、上下文值、排序、上限和输出名配置查询步骤。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/QueryRecordsActionStepExecutorTest.java — 覆盖岗位查模板、模板明细、越权、非法字段、超上限和命名输出。json
{
"stepType": "QUERY_RECORDS",
"targetObjectCode": "KPI_TEMPLATE",
"filters": [
{"field": "post_id", "operator": "EQ", "valueFrom": "record.post_id"},
{"field": "status", "operator": "EQ", "value": 1}
],
"includeChildren": ["template_details"],
"limit": 1,
"orderBy": [{"field": "update_time", "direction": "DESC"}, {"field": "id", "direction": "ASC"}],
"expect": "EXACTLY_ONE",
"output": "matchedTemplates"
}
CREATE_RECORD + FOREACH 的目标主表及子表快照协议,供批量服务稳定调用。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/CreateRecordActionStepExecutor.java — 支持结构化 children 映射。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessActionStepConfigHelper.java — 解析父上下文、循环项和嵌套子表数据。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.java — 保证目标主子表同一单条事务写入并复用唯一索引校验。forge-admin-ui/src/views/app-center/components/TriggerActionConfigPanel.vue — 结构化配置目标主表、子表字段映射和目标唯一键。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/CreateRecordWithChildrenActionTest.java — 覆盖快照、回滚、非法字段和目标唯一键。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerBatchService.java — 新增预览、运行、结构化周期上下文、分页、可信执行身份和单条隔离事务编排。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerSchedulerService.java — 路由 DUE_FIELD/BATCH_QUERY 两种模式。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerService.java — 保存运行/尝试日志;失败重试读取原 run 上下文并委托通用 BusinessActionRetryService。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.java — 使用显式 DataScopeContext 提供受数据权限和字段白名单保护的批量源查询内部入口。forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerBatchServiceTest.java — 覆盖稳定分页、周期、身份、幂等、部分失败和租户隔离。public Long run(Long triggerId, TriggerRunType runType, Long retryRunId);
- **验收**:月/季/年及时区/偏移生成稳定 `period` 上下文;一次 run 固定触发器配置、period、绑定用户/组织 ID、源查询和动作发布版本;触发器编辑后失败重试仍使用原 run 上下文,但实时复核固定身份的账号状态和当前权限。身份失效或撤权时失败关闭;一条失败不回滚其它记录;触发日志通过 `actionLogId` 引用原动作日志;动作日志原子占位和目标唯一索引共同阻止重复目标记录。
## Task 12:批量触发器管理与运维页面(P1)
- **目标**:实施人员可以配置、预览、执行和重试批量触发器,不接触 JSON 或数据库。
- **涉及文件**:
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/controller/BusinessTriggerController.java` — 增加 preview/run/runs/retry-failed 接口。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/vo/businessapp/BusinessTriggerPreviewVO.java` — 新增脱敏预览 VO。
- `forge-admin-ui/src/api/business-app.js` — 增加批量触发器 API。
- `forge-admin-ui/src/views/app-center/trigger.vue` — 增加批量模式配置、预览和运行记录入口。
- `forge-admin-ui/src/views/app-center/components/TriggerActionConfigPanel.vue` — 增加源查询、周期/时区/偏移、绑定执行用户/当前组织、幂等、目标唯一键和失败策略配置。
- **验收**:预览不写数据;运行详情和失败项按 `pageNum/pageSize` 分页;失败项可单独重试;长 ID 保持字符串;错误信息不泄露敏感记录全文。
## Task 13:消息字段接收人规则(P1)
- **目标**:站内消息可以从当前记录中已声明为用户引用/消息接收人的合法字段解析接收人。
- **涉及文件**:
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessMessageReceiverResolver.java` — 新增统一接收人解析器,消除两个 Executor 的重复逻辑。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerExecutor.java` — 复用统一解析器。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/SendMessageActionStepExecutor.java` — 复用统一解析器。
- `forge-admin-ui/src/views/app-center/components/TriggerActionConfigPanel.vue` — 从字段目录选择接收人字段和失败策略。
- `forge-admin-ui/src/views/app-center/components/designer/BusinessActionDesigner.vue` — 为业务动作的 `SEND_MESSAGE` 步骤提供同一字段接收人选择器和失败策略,替代高级 JSON 主路径。
- `forge-admin-ui/src/views/app-center/components/designer/__tests__/BusinessMessageActionDesigner.spec.js` — 覆盖触发器/业务动作两类配置入口、字段筛选和协议回显。
- `forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/test/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessMessageReceiverResolverTest.java` — 覆盖 FIELD、多值、空值和非法字段。
- **关键协议**:
```text
FIELD:evaluatee_id
FIELD:evaluator_id
code-copilot/changes/kpi-full-lowcode-capability-closure/fixtures/kpi-lowcode-fixture.schema.json — 定义 schemaVersion/fixtureId/namespace、资源依赖、稳定编码和清理元数据。code-copilot/changes/kpi-full-lowcode-capability-closure/fixtures/kpi-lowcode-fixture-loader.mjs — 提供 load/cleanup 命令,按依赖顺序调用现有受保护管理 API。code-copilot/changes/kpi-full-lowcode-capability-closure/fixtures/README.md — 冻结命令、所需身份、测试环境门禁、UPSERT/冲突和清理行为。bash
node code-copilot/changes/kpi-full-lowcode-capability-closure/fixtures/kpi-lowcode-fixture-loader.mjs load --fixture <path> --namespace kpi_acceptance
node code-copilot/changes/kpi-full-lowcode-capability-closure/fixtures/kpi-lowcode-fixture-loader.mjs cleanup --fixture-id kpi_lowcode_v1 --namespace kpi_acceptance
fixtureId + namespace 重复加载受控 UPSERT;清理预览和结果只包含该命名空间资源。若 HARD-GATE 不授权测试加载器,则 Task 14B 改为人工配置验收且不得声称 fixture 可直接导入。code-copilot/changes/kpi-full-lowcode-capability-closure/kpi-lowcode-acceptance.md — 新增对象、关系、公式、权限、流程、动作、触发器和消息配置说明。code-copilot/changes/kpi-full-lowcode-capability-closure/fixtures/kpi-lowcode-acceptance.json — 新增符合 Task 14A Schema 的脱敏低代码配置 fixture;加载器未实施时仅作为声明式配置清单。code-copilot/changes/kpi-full-lowcode-capability-closure/fixtures/kpi-lowcode-test-data.sql — 新增仅含合成人员/评分数据的准备与清理脚本。forge-admin-ui/tests/e2e/kpi-lowcode-closure.spec.js — 新增核心流程 E2E;具体目录在 /apply 前按现有 E2E 基线校准。code-copilot/changes/kpi-full-lowcode-capability-closure/test-spec.md — 增量回填实际测试范围、命令和跳过项。code-copilot/changes/kpi-full-lowcode-capability-closure/execution-log.md — 追加最终构建、接口、数据库、浏览器和服务清理证据。| 阶段 | Tasks | 完成门禁 |
|---|---|---|
| Phase 0:验证基线 | 0 | 四份 SDD 文档完整,增量验证矩阵和 Proposal 证据可复用 |
| Phase 1:节点主子表 | 1-4 | 子表权限、草稿和历史只读全部通过;办理能力在 Phase 2 闭环 |
| Phase 2:规则与动作 | 5A-8D(含 6A/6B) | 条件/集合校验、公式、唯一办理命令、结果补充字段、节点动作及自动/人工补偿通过 |
| Phase 3:批量生成 | 9A-12(含 9B/10A/10B) | 权威员工来源、关联模板查询、预览、分页、主子表快照、幂等和失败重试通过 |
| Phase 4:消息与验收 | 13-14C | 动态收件人、可重复样板和绩效纯低代码 E2E 通过 |
每个 Phase 完成后先更新 spec.md/tasks.md/execution-log.md 并执行增量验证,再进入下一阶段。HARD-GATE 必须明确授权“全部 P0/P1”或“仅 P0”;仅确认 P0 时,P1 Tasks 保持 pending,不能随 P0 实现自动带入。任何实现发现与 Spec 冲突时,先修订并重新确认 Spec,不允许直接扩大代码范围。
各 Phase 的 P0 Task 构成“核心运行闭环”里程碑,P1 Task 构成对应的可视化配置、自动运维或可重复验收增强里程碑。若只授权 P0,阶段日志必须写明未交付的 P1 能力及其人工/API 替代方式,最终结论不得表述为“全部低代码体验已完成”。