Appearance
Java 更新日志
当前版本 v1.8.54 · Maven Central(
com.mldong:jeeflow-*)· 仓库 mldong/jeeflow-java · Releases
v1.8.54 — 2026-10-31
「退回修改、重提直返」首轮发版(参考实现,tag v1.8.54=commit d99fb66;实现两笔 d99fb66+e6546f0,出口契约修复 9cdbfaf)。条文见 规范 04 引擎操作 「退回修改、重提直返」节。
新增(节点属性):审批节点
properties.reapplyMode=NORMAL(缺省)/RETURN_TO_SOURCE, 非法值在解析期报配置错误,不静默按缺省处理。新增(
submitType=6直返档):来源节点配了RETURN_TO_SOURCE时,退发起人不再走 "重放申请节点出边",而是完成来源任务、给发起人建一条绑定本轮来源的申请待办 (任务变量保留键_reapplyContext = {mode, sourceTaskId, sourceNode, branch}), 不创建来源之后的任务、并行分支中其他分支可继续办。准入校验排在任何状态变更之前 (会签来源、申请节点自身配直返 ⇒ 先报错不留半截事实)。新增(
submitType=5重提直返):带该上下文的申请待办只接受重新提交;重提直接回来源节点 建待办(parentTaskId=本轮申请行),不执行申请节点出边、不重算来源前条件、不重触发分叉; 参与者按来源节点规则重新解析(不锁定原退回人),遗留的tf_nextNodeOperator不参与建单。新增(并行分支归属与汇合):建单逐档继承父任务同档
round/root(分支根的round=父任务 id、root=自身 id),落保留键_branchCtx;汇合判据改为"本轮各分支根下无进行中任务、 且无申请任务携带指向该根该轮的_reapplyContext.branch等待"才放行且只放行一次; 存量任务没有_branchCtx时回落既有按分支节点名扫描的判据(零 DDL、零迁移)。新增(并发与入口纪律):办理入口先剥离客户端传入的同名保留键(伪造控制键被忽略且 不落库);同实例办理串行化(进程内按实例互斥),并发重提至多一个成功;带标记的申请待办 在跳转/拒绝/再次退回三个入口一律在任何状态变更之前显式拒绝(只接受
submitType=5)。新增(直返路径的拦截器与事件):直返建单走
FlowInterceptor链并 fireTASK_START, 来源节点完成后的postInterceptors在直返腿同样执行(NodeModel的 post 拦截器可见性随e6546f0补齐)。修复(
ext回退契约被新保留键打破):建单无条件写入_branchCtx(空分支也写[]), 而"任务变量只剩引擎控制键 ⇒ 任务行ext回退实例变量"的判据 (issues/82-3 / 121 P1)原先只认isFirstTaskNode⇒ 每条任务行都从此 不再回退、内部键还直接从公开出口透出。现把两枚保留键算进控制键集合,回退后把_reapplyContext原样合回任务行ext(前端「重新提交后返回:X」的唯一取数口), 合回落在副本上、不污染同一响应的instanceExt。同笔补齐内存测试仓的instance_variable投影(与JdbcProcessRepository的pi.variable AS instance_variable同形,spec 06 §4.5 条款 6「同栈两仓同答案」)——缺这一列时门面级回退断言在 T0 恒真空。夹具(八栈同源):共享
flows/新增14-return-to-source(线性)、15-return-to-source-fork(并行+汇合)、16-return-to-source-decision(条件分支)、18-return-to-source-nested(嵌套并行)四份;故意配错reapplyMode的那份 (17-...-bad-config.json)不进共享目录——它会污染所有"解析全部共享流程"的套件 与发版漂移门禁,只留在 java 的jeeflow-core/src/test/resources/flows-invalid/。
读数:jeeflow-core 全量 322/322(直返专项 ReturnToSourceTest 17/17,含嵌套并行、 条件不重算、多分支分别退回、重复退回绑定本轮、并发重提只一个成功、伪造保留键、 非法配置报错、审批人重解析);jeeflow-repository-jdbc 66/66(含 H2 MODE=MySQL 的 ReturnToSourceJdbcTest:直返上下文经 SQL 列往返后仍可消费、并行等待生效、两线程同 重提只 1 个成功);事务三档 TransactionTierTest 10/10;演示站矩阵 23 格全绿。
v1.8.53 — 2026-10-17
audit8 R110+R112(tag v1.8.53)。
- 新增(删除定义守卫):
processDefine/remove删除前校验该定义下是否存在任何实例(含已办结/已撤回),存在即拒(对外99999999,内部码 20010005,msg 逐字「存在正在未完成的流程实例,不允许删除!」);批量{ids}先整批校验再删,全无实例才执行。 - 修复(委托 update 缺键清空):
surrogate列 NOT NULL,缺键清空此前落null导致更新失败;现落空串(读侧 null 与''同档),修平 L2-13 门禁。 - 诊断(未知档的边):highLight 补全与决策出边落穿时补
from/to告警,行为不变。
v1.8.51 — 2026-10-16
audit8 R68② 修复(tag v1.8.51,引擎 commit ca3576e)。
- 修复(委托
enabled的布尔档):processSurrogate/save|update的enabled传 JSON 布尔true时, 此前走Integer.parseInt("true")抛NumberFormatException落默认值 ⇒ 启用被读成停用, 与 规范 06 §4.5 条款 5「布尔true⇒ 1」相反。现toInt补 Boolean 支:true→1、false→0。 字符串数字档与数值档行为逐字不变(回归腿同判据内钉住)。 - 同版携带(不改 java 行为):issues/230 R92 把 go/python/node 三栈的执行族返回值对齐本栈既有形状 (四法回传「本次动作产出的任务行」、空档
Collections.emptyList());issues/236 R68① 的 「缺键=清空」四腿基准也取自本参考实现——java 侧代码零改动,本条只为跨栈对账留痕。
v1.8.50 — 2026-10-15
audit8 R63+R90 并批(tag v1.8.50,引擎 commit 2e9b524+ea73052)。
- 行为变更(决策路由,issues/234 丙-9):decision 节点多条出边表达式同时为真时,改首条真边独走 (此前全部执行=多路并行流转)。对齐 规范 02 §5 与 go/python/node/rust/moon 五栈多数派;存量里依赖"多真边齐走"的流程受影响, 升级前自查 decision 节点出边表达式是否可能同时为真。
- 修复(issues/231①):task 节点 ext 镜像判据沿 superclass 上溯——原
getDeclaredFields()只看本类声明, 父类NodeModel/BaseModel已识别的 name/displayName/layout/pre/postInterceptors 被重复镜像一份进 ext。 对齐 boot2 内置版血统语义;规范 02 头注立法「已识别键(含父类继承链/黑名单 判据识别的)不得再镜像进 ext」。width/height 等非模型字段键仍照常镜像(判据收紧未误伤)。
v1.8.49 — 2026-10-13
issues/180 收口:abandonTask 不再连带把整张单置 99(tag v1.8.49,引擎 commit 670163a)。 条文见 规范 04 · 引擎核心操作 §abandon 一档。
- 变更:任务级废弃动作只废任务,实例 state 的写点已删——此前废弃一个任务会把同实例 其余待办一起打进「已废弃」。对齐 spec 与 Go/Python/Node 三栈既有形状(五栈同批改动,见各语言页)。
- 现读更正:「连带置 99」不是内置版(boot2)的产品血统,全仓
abandonTask零命中,系本栈自创后被 四家移植;五栈该方法全部零生产调用者(调用面 grep 仅定义处命中)⇒ 现生产零行为变化。 - 判据:废弃后实例仍进行中/其余待办仍可见/整单废弃另走一条腿,三枚齐(摘守卫即红)。
- 传播面:java→boot2/boot3/boot4,3 张镜像;同批 php/rust/csharp/moon 五引擎。
v1.8.48 — 2026-10-12
issues/179 补修(真机探针定案,同一案的第二腿):processDesign/updateDefine 缺 name 时不再撞 NOT NULL (tag v1.8.48,引擎 commit 2c43ae5+2940b6f)。条文见 规范 08 场景 44。
- 修复(用户可感知):
name/displayName/type三处改逐字段判空(缺=保持旧值)。改前缺名 content 无条件setName(null)⇒UPDATE撞wf_process_design.nameNOT NULL(MySQL 1048)⇒ 动作级 事务整体回滚、缺名快照存不进,对外只报「更新流程设计失败」;而redeploy随后读到 save 阶段含 name 的旧快照,静默code=0——同一次缺名调用两条腿两个答案。 - 为什么守卫在字段级而非动作级:内存腿
?? stored.Name会遮罩 null,拒收边界只能落在真正落库的那一腿; 跨栈门禁L2-45轴⑤ 用真库把这一形照出来。 - 判据:
JeeflowFacadeTest#test179*五枚(新增缺名草稿入库一枚,摘 name 守卫定向跑红)+全仓回归绿。 - 传播面:java→boot2/boot3/boot4 三壳三镜像(与 C# 同轮,见 csharp 页)。
v1.8.47 — 2026-10-12
issues/179 前半(tag v1.8.47)。空值当没填这条通用放行在定义定位腿上的后果收口。
- 修复(后果级):
getLastByName缺名/空串/全空白三档此前丢掉t.name条件继续查——返回的是 另一条流程的定义且code=0;缺 name 时saveDeployedDefine的版本号会 +1 到别的流程头上。 本版起三档统一报「缺少processDefineName参数」。 - 拒收边界:
deploy/designDeploy/designRedeploy缺name⇒ 报「流程定义缺少 name」且不落行。 - 判据:跨栈门禁
L2-45五轴(含双拒收且recordCount不落行);本栈 5 枚新格。
v1.8.46 — 2026-10-12
issues/176 收口:startAndExecute 自动办理腿的 operator 改 flow.auto(tag v1.8.46, 引擎 commit a9f9cec)。条文见 规范 04 · 引擎核心操作。
- 变更(用户可感知):一键「发起并直接办掉申请节点」时,那条任务的办理人记成系统哨兵
flow.auto, 不再记成真实发起人。此前发起人同时出现在「我发起的」与「我已办」两栏,doneList可见性与产品语义相反; 审批记录里那条「已办理」也随之换人。 - 八引擎同批(go/py/node/php/rust/csharp/moon+java),java 是门面腿、其余六家含引擎腿,见各语言页。
- 判据:跨栈门禁
L2-43落格同轮完成;修前红四家族51/1+moon 通道48/1/3,唯一红即这一格。 - 传播面:java→boot2/boot3/boot4;本轮总传播面 8 引擎→13 壳+moon 插件→14 张镜像全晋升。
v1.8.45 — 2026-10-11
issues/145 事务七条债 · java 第二轮=动作级事务边界(tag v1.8.45,引擎 commit 02183d7+c46f8a8)。 条文见 规范 12 · 事务与持久化 §12.2。
- 补的是首轮的盲区:
v1.8.44只把引擎入口包进事务,门面自组的复合写仍各拍各的——startAndExecute=发起+参与者写+办理三拍、redeploy=define+design 两拍,中途失败留半完成 (实例行在、任务行缺这类坏形状)。 - 修法:
inTx提为JeeflowEngine默认方法(有则用、无则裸跑=§12.1 原则 4 的显式降级档);JeeflowFacade.flow()把整次 dispatch 收进engine.inTx;入口内已有的包裹嵌套并入(Spring REQUIRED); 信封在门面 catch(事务外)生成 ⇒ 先整体回滚再转失败信封。 - 判据:
TransactionTierTest扩到 10/10(动作档两枚=复合回滚+裸拼对照红样);摘engine.inTx包裹 ⇒ 复合枚红「动作档:实例行必须整体回滚 expected:<0> but was:<1>」,其余 9 枚照绿。
v1.8.44 — 2026-10-11
issues/145 事务七条债 · java 第一轮(tag v1.8.44,引擎 commit 12e7af7+47df025)。
- 变更:引擎入口的写腿并入宿主事务(§12.2「一次动作=一个事务边界」),persist 业务表写腿与引擎 自身写腿同源提交/回滚。动作级边界在下一版
v1.8.45补齐(见该节盲区说明)。 - 判据:
TransactionTierTest真库 tier 档;变异对照=摘包裹即红。
v1.8.43 — 2026-10-11
issues/174 收口:redeploy 原地替换保留 version/state(tag v1.8.43,release commit b9c3e5f); 同批带上 issues/162 的 java 腿。条文见 规范 08 场景 42。
- 修复(用户可感知):
processDesign/redeploy与processDefine/redeploy两 action+两条仓储腿此前 原地替换时把version/state覆成1。已办结/已废弃的实例指向的定义一旦重部署,行状态被打回, 实例列表与审批记录按 state 取数的那几格随之错乱。本版保留原值。 - 参考实现在少数边:本栈与 go/python/node/csharp 五栈同批修;php/rust/moon 与内置 boot2 本就不丢。
- issues/162 java 腿:门面
catch (Exception ignored)静默原件改为降级面保留+可诊断日志—— 坏定义高亮补全失败时不再无声吞掉,日志带原因、对外仍code=0。 - 判据:跨栈门禁
L2-41(deploy/redeploy 两 action 此前整族零格);修前红三家族49/1。 - 传播面:java→boot2/boot3/boot4、go→三壳、py→三壳、node→nestjs、csharp→csharp,11 张镜像。
v1.8.42 — 2026-10-11
issues/165 A+issues/166 A(种子)收口(Maven Central,引擎 commit 8dcc4c3)。条文见 规范 04 · 引擎核心操作「放行表达式的求值原料」。
- 变更(用户可感知):
CountersignHandler.buildCountersignVars的求值原料同时挂裸名 (nrOfInstances/nrOfActivateInstances/nrOfCompletedInstances)与前缀键(csv_{node}_*, 保留兼容)。改前按文档/设计器形状#nrOfCompletedInstances>=2配的并行会签在生产 SpEL 上恒 false (#变量精确查表查不到裸名,活栈实测 3/3 全办完仍停住);本版起按文档配的会签真能按阈值放行。 - 测试基建:
TestExpressionEvaluator(core 测试)摘掉 endsWith 后缀桥(#key精确查表, 对齐生产形状)——"测试绿生产红"的根源拆除;jeeflow-spring-boot-autoconfigure补测试模块,SpelExpressionEvaluatorTest5 格按生产求值器实例化判裸名/前缀键/缺失档。 - 种子:demo
BusinessSeedFINISHED 三行(F5/F8/F9)补finalAmount=8000(issues/166, define 映射漂移修复,读数回 15/10)。 - 不变:java 是决策零命中的报错派基准(
NOT_FOUND_NEXT_NODE),本版零改动; go/node/rust/moon 四栈于同日对齐(见各语言页)。
版本日期以本仓 git tag 为准;跨语言对齐脉络见 更新记录总览。
1.0.0–1.8.4 为四语言同构对齐期(Java / Go / Python / Node 同号演进);1.8.5 起按语言节奏发版,版本号不必同号(Java 未发布 1.8.22–1.8.24,该区间为 Go / Python 独立发版,Java 无对应变更;1.8.38 与 1.8.39 两号有 tag 但从未上架 Maven Central——发布链的 CI 工具链换代导致校验失败,同一批内容改从 1.8.40 发出,与 Go / Python / Node 的 1.8.38 是同一批语义)。
跨栈对齐:自 v1.8.29 起,Java 的退回上一步两格对外文案与委托查询判据取行顺序同时被写成硬性条款(见 规范 04 · 引擎核心操作 与 规范 06 · 统一门面),其余七栈逐字对齐 Java;对外
msg一律不带内部码数字前缀。
v1.8.41 — 2026-10-10
issues/154 ①④ 两条:审批记录行的排序尺子与主键出口(Maven Central,引擎 commit 2461b8b)。 条文见 规范 06 · 统一门面 §4.6,判据基线见 规范 08。
- 新增:
processInstance/approvalRecord每行补首列id(任务行主键,显式字符串化—— 19 位雪花 id 不经数字出口,JS 侧取值不会掉精度)。 - 变更:该行集排序从
create_time并成id ASC,与 Go / Python / Node 用同一把尺子; 同一份流程定义在不同语言后端上,审批记录的行序不再漂。 - 不变:
highLight三条义务(模型路径补全、决策出边先求值、成员姓名解析走IUserProvider)本栈原样是基准实现, 其余七栈向它对齐;本版本没有改这条腿的行为。
v1.8.40 — 2026-10-08
issues/152 委托三件收口(Maven Central,引擎 commit 2ddd203)。规范条文见 规范 06 §2.5 口径表 与 §4.5「processSurrogate/page 归属不变式」, 判据基线=规范 08 用例 38–41。升级前两处用户可感知的行为变更必读(见下)。
- 新增:
processSurrogate/page的归属不变式落到引擎自己身上——门面按 §2.5 把归一后的 operator (缺键/空串/全空白 ⇒ demo 缺省user1)作为t.operator EQ下发,形状与本栈instancePage一致; 仓储侧补第二层(SQL 侧AND 1=0、内存侧判不命中),内存仓与 SQL 仓同答案。 此前这条语义全靠集成壳注入operator(换宿主/直调 SPI 即退化成全库台账,vben5 前端本就不传)。 - 变更:归属条件的缺失档与空值档同判——绕过门面直调
pageSurrogates时,t.operator那条 EQ 值为空或整条没给都返回空页,不再"这条条件不加"放出全库;只收归属列,m_LIKE_*那套"空值当没填"的可选过滤放行原样不动(与 §2.5 抄送侧同一条尺子)。 - 修复:写侧授权人三档归一。
processSurrogate/save收到空串/全空白operator时不再落进operator(那种行是死行:getSurrogate的WHERE operator = ?永不命中,台账看得见、待办永不并人);save缺省档落归一值,update缺省档保留原授权人不变。 - 不变:委托查询的作用域优先级(精确优先)与择优顺序(先按 id 取最新一条再交判据裁决) 维持 v1.8.2x 起的既有立法(issues/123 收口形状),与内置 mldong-wf 版方向相反—— 差异与迁移动作已写进 §4.5「与内置版(mldong-wf)的三条方向差异」。
- ⚠️ 行为变更(用户可感知):① 集成方若曾依赖"
processSurrogate/page不带 operator 返回全库", 升级后该档只返回归一缺省user1名下的行;② 直调仓储的调用方若不给归属条件,将拿到空页。 jeeflow-ui 与 vben5 两条前端腿都经门面且各栈已实测零回归。 - 测试:仓内 T0 五档判据(作用域优先级/停用不自愈/自委托/写侧三档/分页归属两层), 每档配真值档阳性对照;摘掉兜底判据必红。
v1.8.37 — 2026-10-02
本版是 issues/137 那一批的基准腿(八栈同批改,Java 侧每一处都是其余七栈逐字对齐的对象), 另收 issues/115 的门面第 47 个 action。
- 新增(issues/115 §3-8):门面 action
processTask/removeTaskActor(摘单个参与人), 语义 5/6 定形——匹配取归一后的值、DELETE取行上的原值,历史脏行(" 9101 ")不算"另一个人"; 主键档定形:processTaskId缺失/空串/纯空白/0/负数统一并入缺参数档(八栈逐字文案一致)。 门面 action 从此 47 个。 - 修复(issues/137 A §3-4):
ModelParser没把流程根上的expireTime搬进ProcessModel⇒ 实例级expire_time在基准栈自己也断链(不是只有别的语言漏);补写点,实例到期时间按定义级表达式求值。 - 修复(issues/137 D/E):相对档前缀判非负——
-5h/-5d/-30s此前落穿成 NULL, 只裁负不裁加号(+5h仍合法);Java 基准侧Integer.parseInt前统一text.trim()(E 档两端空白)。 - 修复(issues/137-G):顶层与
bizData两处出口不再裸拼内部异常文案——对外固定文案, 底层原文只进日志(判别式五条见 规范 06 §2.12)。 - 变更(issues/137 §3-6):删除腿收口为**「原值 ∪ trim 值」两形并集**,一条
DELETE两行都摘掉, 其余参与人不动(spec 06 语义 6 已改写)。 - 测试:JDK8
mvn -B clean test -pl '!:jeeflow-demo-boot4'(demo-boot4 需 JDK21,发布集一贯排除) BUILD SUCCESS:core 277/repository-jdbc 63/persist 31 = 371 格,0 失败 0 跳过。 Java 侧 SQL 腿用 H2MODE=MySQL(本栈无仓内真 MySQL 件,真库面由集成壳 L2 与镜像门禁覆盖)。
v1.8.36 — 2026-09-30
- 新增(issues/142 A 批 · 本栈为参考实现):
snaker:custom记录类与任务类分家——Execution新增historyTasks队列(addHistoryTask/addHistoryTasks/drainHistoryTasks,与pendingEnds同款"先登记、写库后 flush、drain 保证一次登记只写一次"),JeeflowEngineImpl.saveHistoryTasks只repository.saveTask、不 notifyTaskStart(码 3)、不套委托; 留痕行补写operator与finish_time(spec 02 §6.2 第 1bis 条),expire_time保持 NULL。 任务类零参与者必须建 DOING 行(不许跳过建行、不许兜底挂当前操作人)。 - 修复(issues/143):出边指向未知档节点时落穿停住——
TransitionModel补 null-target 守卫, 记一条带 from/to 的 WARNING 后令牌停住,不再 NPE 打断办理(此前一次配置写错把整次办理打崩)。 - 变更(issues/142 B 批 · 归属值写侧归一,spec 06 §2.11):
StringUtils.normalizeCcActors→normalizeActors(String…)(旧名保留@Deprecated薄转发);新增normalizeActorArg(Object)(集合/逗号串/标量/null 四档同一枚尺子:trim、空串/纯空白/null 元素丢弃、同次折叠、保序; 严禁String.valueOf(null)把'null'落进归属列)与normalizeActor(String)。addCandidate/surrogate/transfer/nextNodeOperator/两仓addTaskActor全链接同一枚; 主键档(processTaskId缺失/空)响亮报错。 - 测试:JDK8
mvn -o -pl jeeflow-core,jeeflow-repository-jdbc,jeeflow-persist -am clean testBUILD SUCCESS:core 222/0/0、repository-jdbc 54/0/0、persist 31/0/0(基线 206/46/31,只增不减)。
v1.8.35 — 2026-09-29
- 新增(issues/127 + 132 · 事件契约落地,本栈为参考实现):规范 11「事件契约」立章后补齐 A 套后五支
TASK_COMPLETE(5)/TASK_REJECT(6)/TASK_TRANSFER(7)/TASK_WITHDRAW(8)/INSTANCE_TERMINATED(9); 办理抄送腿tf_ccActors收进引擎路径并与流转同事务(§11.7 边界 1),覆盖面只算executeProcessTask一条腿(jump / rollback / 退发起人本轮不建 cc、不发 4)。 - 修复(时机债,§11.2 原则 3):码 2
PROCESS_INSTANCE_END原在EndProcessHandler里就地 fire, 而实例那一行要等persistTasks的updateInstance才落库 ⇒ 监听器反查读到旧state, 且后续步骤抛异常回滚时事件已漏出。改成本栈基准形状:登记 → 级联上收 → 统一 flush 三段式 (新event/PendingInstanceEnd+Execution.addPendingEnd/addPendingEnds/drainPendingEnds+JeeflowEngineImpl.flushInstanceEndEvents);子流程级联里被连带办结的父实例随待播队列上收, flush 时按登记的聚合根补一次updateInstance再播(漏那一行=父实例终态事件整支丢掉)。 - 测试:
EventContractRecorderTest钉单条流逐位序列[1,3,5,2,4,4](只断"出现过"不算过) + 逐码载荷键;InstanceEndEventTimingTest用写序快照探针仓钉四档"回调时那一行已是终态" (含子流程父子两支、各只播一次)。读数:mvn -B test(排除jeeflow-demo-boot4)BUILD SUCCESS, core 27 + repository-jdbc 31(真连 160 MySQL),0 失败。jeeflow-demo-boot4要 JDK 21, 本机默认 mvn 不带 21 ⇒ 属环境而非代码缺陷。 - 本栈不改名:
PROCESS_INSTANCE_START / PROCESS_INSTANCE_END / PROCESS_TASK_START / CC_CREATE早就是规范名 ⇒ §11.6「旧名保留一代别名」的义务对本栈不适用(无改名即无兼容债)。
v1.8.34 — 2026-09-29
- 修复(issues/134 · 撤回不校验实例状态):对已办结/非进行中的实例调撤回,改前会被静默改写—— 实例
state被写成30且返回code=0(症状现场:boot2 生产镜像code=0 msg='成功',state 20→30)。 聚合根withdraw入口加实例态守卫:state != 10(进行中)一律拒,内部码 20010009,被拒时 实例与任务行零改写、不落库;出口按 issues/121 口径透出code=99999999+ 逐字文案 「流程实例非进行中,无法撤回」(内部码不进 msg)。任务行层面的既有保护(spec 06 的"20/40 任务行 不改写")原样保留,实例级守卫排在它之前。落点:WfErrEnum加 20010009 + 聚合根ProcessInstance.withdraw守卫(排在任务行循环前)。 新增 T0 八格(负向 20/40 与正向对照 10 照旧落 30),mvn -o -pl jeeflow-core test146 格全绿(基线 138); 摘守卫 ⇒ 5 红、守卫写反 ⇒ 正向一并红(两层变异对照都有牙)。java 栈 130 侧无需改动(Integer.valueOf(1).equals(enabled)本就是严形状,静态类型存不进字符串)。
v1.8.33 — 2026-09-28
- 修复(issues/126 案 A · 任务行
expire_time由建单路径真算):ProcessInstance.createTask里那句占位task.setExpireTime(LocalDateTime.now()); // will be overridden by util later删除——注释承诺的 util 从来没跑过, 于是配了到期表达式的节点建单即逾期(同行差值≈0),而回退那支倒是真按表达式算 ⇒ "只有回退过的任务这一列有值"。 收成applyExpireTime一把尺子+五处调用(普通建单 / 串行会签首位 / 并行全员 / 回退新建 / 串行推进出的下一位成员,最后一处绕过createTask直建,故聚合根开公开入口applyNodeExpireTime)。 节点没配(null 与空串两档)⇒ 该列保持 NULL,不造默认值(owner 拍板口径)。 - 测试
ExpireTimeOnCreateTest六格(2h⇒同行差值≈2h、表达式是变量名⇒取该变量的值、未配两档⇒NULL、 解析不出⇒NULL 而不是 now、并行全员正/负)+JeeflowFacadeTest两格(串行会签首成员∧推进第二成员都带到期; 同夹具去掉表达式⇒两行都空,且把"行没读到"与"值为空"分开断)。mvn -o -pl jeeflow-core test136 格全绿;T1mvn -o -pl jeeflow-repository-jdbc -am clean test27 格全绿。 - 变异对照两层都有牙:helper 体内换回
LocalDateTime.now()⇒ 新测试类 4 跑 3 红; 摘掉第五处写点 ⇒ 推进那格红在「第二成员必须带到期时间」;摘掉并行那处 ⇒ 红在「成员 [u1] 的行必须带到期时间」。 三次均按 sha256 还原核对后复跑全绿。 - 一处量纲留痕:
FlowUtil.toLocalDateTime(Date)落秒级、行上createTime带毫秒 ⇒ 差值实测 7199.x s, 断言带宽取[2h−5s, 2h+60s](写>=7200会假红)。 - 跨栈一致性(同批八栈一起发,基准=boot2 内置版
ProcessTaskServiceImpl:213/386/524三处写):普查发现写点其实是五处,第五处=串行会签推进出的下一位成员(boot2 的推进回调createCountersignTask(:485,内含 :524 到期写)),各栈这一支普遍绕过本栈建单 helper 直建行,只看建单/回退两支会漏。另一处分叉在落地中被抓出来:回退新建的表达式该取 boot2 的current=被回退掉的那个节点(:363 current = model.getNode(currentTask.getTaskName())→:385 ((TaskModel)current).getExpireTime()),而不是落地行所属的prev;java/php/csharp/rust/node/moon 取 current,go 与 python 头一轮取成了 prev,两栈当时的夹具只给一个节点配表达式 ⇒ 取错也全绿,是比对隔壁栈代码才发现。修完的判据改成双节点不同偏移(落地1d∧ 当前3h⇒ 断 ≈3h)+反向钉一档「当前未配 ⇒ 必须空」。
v1.8.32 — 2026-09-28
- 修复(issues/129 案 A · owner 拍板「空串=缺键,回落 user1」):
{"operator":""}此前与缺键不同档——门面toStr(args.get("operator"), "user1")只在 null 时兜缺省,空串原样落进query.add("t.operator","EQ",""),再被JdbcProcessRepository.buildWhere那句"空值当作没填"的通用放行整条丢掉 ⇒ 「我的实例 / 我已办」读出全库。现按双层义务收:门面新增集中operatorArg()(trim 后判空回落user1)替换 12 处缺省点;buildWhere在原有那句之前对归属列(t.operator/pi.operator/pta.actor_id/cc.actor_id)空值写AND 1=0。⚠️ 只收 EQ 归属列——下面那句通用放行是m_LIKE_*等可选过滤的行为,照字面改成"空值即空页"会把可选过滤一起改坏(测试里用"空值非归属条件仍返回全库"这一格钉住改动面)。withdraw的 issues/114 硬必填(空串必须报错)不属本条管辖,未动。 - 判据(core
JeeflowFacadeTest+ jdbcJdbcRepositoryTest,H2MODE=MySQL):四出口 × 三档(空串 / 全空白 / 缺键)逐行数相等且等于显式user1档,并先断 user1 档非空(否则"0==0"是自等假绿);仓储件绕过门面直喂空值三形 ⇒ 空页,另留"归属列真值命中""非归属列空值仍被忽略"两格对照。T0mvn testcore 128/128 + repository-jdbc 27/27(改前基线 127+26 与本栈其余用例全绿)。 - 变异对照两发各自转红:只回退门面归一化 ⇒
processInstance/page 空串档应=缺键档 expected:<1> but was:<0>;只删仓储兜底 ⇒ H2 里原症状复现空串归属条件不得读成全库实例 expected:<0> but was:<2>。两发之后按 sha256 字节级还原。 - 线上复验:160 demo 部署 tag
v1.8.32后重打三路探针,四出口读数为 4 / 5 / 1 / 2(与user1档逐出口相同),__nobody__全 0;修前同一份库同一时刻是 25 / 46 / 24 / 31(全库)。 - 发版核验:Maven Central 七模块
.pom回 200(CIRelease的 publish→verify 全绿,排除 demo-boot4)。同批跨栈:Go1.8.32/ Python1.8.32/ Node1.8.32/ PHP1.3.15/ Rust1.0.17/ MoonBit0.1.15/ C#1.0.9。
v1.8.31 — 2026-09-27
- 修复(issues/125 · SQL 侧数据库时钟,issues/120 的下半段):
JdbcProcessRepository.statsPendingAndOverdueCount的逾期判据原先在 SQL 里写expire_time < NOW()——MySQL 的NOW()取的是@@session.time_zone的墙钟,而expire_time是引擎进程钟写进去的裸墙钟 ⇒ 同一件事两把钟,一个SET time_zone(或换一台默认 UTC 的托管库)就把逾期计数整体平移一个时区偏移,且换仓储实现(内存仓用进程钟)数字会变。现改为新增受保护出口statsNow()(默认LocalDateTime.now(),与写create_time/update_time同一把钟),SQL 变成expire_time < ?绑参,方法内只取一次钟、pending / overdue 两半共用同一个瞬间。Python / Node / PHP 本来就是绑参数形状,本栈与它们对齐;SQL 文本里不再有任何时间函数。 - 判据(新增
JdbcStatsOverdueClockTest,跑 H2MODE=MySQL,不依赖外部数据库):正向注入基准钟 ⇒(pending=4, overdue=1);负向边界 ⇒expire_time IS NULL的行钟拨到 +30 天仍不计入;有牙那条 ⇒ 注入钟前移 2 小时,逾期必须 1→2(只断"数对"而钟挪不动等于没测);回归 ⇒ 同注入值重复调用读数稳定。变异对照:把实现临时换回NOW()不绑参 ⇒ 红在expected:<1> but was:<3>,还原后绿。 - 修复(测试侧既存红两条,非本栈行为变更):
JdbcRepositoryTest的转办 / 台账用例还在读 v1.8.30(issues/124)已下线的variable原串出口 ⇒ NPE;按 core 侧口径改读ext(断言一条没弱化),并补assertFalse(row.containsKey("variable"))把 124 的立法在 SQL 仓路径也钉住——上一轮只改了 core 用例,SQL 仓副本是"同一件事的第二个落点漏走一条腿"。 - 测试
mvn clean test⇒ jeeflow-core 127 例 + jeeflow-repository-jdbc 26 例 + jeeflow-persist 31 例全绿,Failures / Errors 归 0(jeeflow-demo-boot4是演示模块、不参与 Central 发布通道)。 - 发版核验 Maven Central
com.mldong:jeeflow-*七模块1.8.31.pom回拉全 200(Release workflow 的 verify 步 + 外部 curl 双证)。 - 同批跨栈:Go
v1.8.31、Rust1.0.16、C#1.0.7同题同修(各栈落点见各自版本页);静态普查门禁jeeflow-hub/scripts/dbclock_census.py的基线已随四处核销清空,并改为每次实跑先过常驻canary()探针自检。
v1.8.30 — 2026-09-24
- 变更(issues/124 变量出口立法,本版为八语言同批基准):
processInstance/detail出口variables更名为ext(同一份实例变量,键形态与列表行ext一致),variables全集退出契约;任务行与processTask/detail的variable/instanceVariable原串出口同步摘除。变量唯一对外出口是ext(实例侧)与instanceExt(任务行侧);变量为空时ext出空对象{}不缺键;持久层variable列是存储不是出口,不受此限(立法见 规范 06 · 统一门面)。 - 测试
JeeflowFacadeTest#testVariablesOnlyExitViaExt正负两向(正向 detailext带f_reasonType/u_realName/autoGenTitle且出口无variables/variable键、行出口无variable/instanceVariable;负向空变量 detailext出{});存量断言改读ext后既有测试全绿。 - 发版核验 Maven Central
com.mldong:jeeflow-*七模块1.8.30.pom回拉全 200。
v1.8.29 — 2026-09-23
- 修复(委托判据取行顺序):
getSurrogate改为「各作用域先取 id 最新一条,再交四判据裁决」,并明确禁止「先按判据过滤掉不生效的、再从剩下的取 id 最大」这种错误顺序(旧顺序会让一条历史有效委托永久生效,用户后续的停用 / 改期 / 改成自委托全被旧记录盖掉)。新顺序下精确作用域那条判否仍要兜底全流程作用域(空processName),不得判否即止。SQL 形状钉死:WHERE operator = ? [AND process_name = ?] ORDER BY id DESC LIMIT 1——不带enabled = 1/ 窗口 /surrogate <> operator谓词,判据落在读出之后的单条裁决里(ProcessSurrogate.isEffective)。四判据:enabled严格等于整数 1、被委托人非空且非本人、时间窗覆盖判定时刻(起止 NULL 该侧不限)、作用域回落先精确后全流程。 - 修复(出口形状统一):退回上一步两格失败对外
msg以 Java 逐字文案为基准统一(上一步任务ID为空,无法驳回至上一步处理/无法驳回至上一步处理,请确认上一步骤并非fork、join、suprocess以及会签任务),20010007/20010008定位成引擎内部码——只用于区分两格语义,严禁出现在对外msg;响应体不透传业务码(恒99999999)。其余七栈(含 MoonBit)本轮按此删前缀,Java 本栈行为不变。 - 新增(发布通道)
scripts/verify-maven-central.sh并接入 Release workflow 的 verify 步:轮询七个发布模块(jeeflow-demo-boot4不参与)的<模块>-<版本>.pom全 200 才算发出去;可调MAVEN_BASE/VERIFY_TIMEOUT(默认 1500s)/VERIFY_INTERVAL(默认 30s)/VERIFY_MODULES。本版为该步首次实跑,repo1.maven.org 七模块.pom全 200。 - 测试
mvn clean test -pl jeeflow-core,jeeflow-repository-jdbc⇒ core 126 例、jdbc 25 例全绿;SurrogateAutoApplyTest新增 4 格钉住新语义(最新无效压过旧有效:窗外 /enabled=0/ 脏值 2 / 自委托)。 - 变异对照 把内存仓选路改回「先滤后取」⇒ 恰好这 4 格红、其余 18 格绿(证明用例真在钉语义,非恒绿)。
- 跨栈验证 13 个集成栈候选镜像门禁对拍:
L2-17(委托自动生效:窗内并入 + 原人保留 + 窗外 / 停用 / 脏值 / 自委托四判据)13/13 全 PASS,上一代次的「9 栈无条件并入 + 4 栈一律不并」两营垒消除;L2-1813/13 同形失败且逐字一致(同样两条:脏值enabled=2并入 + 自委托未过滤),归因在门禁夹具自身矛盾:该格逐条建委托却只在开头清场一次,于是前一条建的「活着的全流程委托」在后两格仍生效 ⇒ 按条款跨层兜底必然并入代理人,而格子期望的却是「代理人不得进」——没有任何正确实现能同时满足,与 Java 既有测试JdbcProcessExtRepositoryTest#testSurrogateCrudAndGet(精确已过期 → 兜底全流程)的结论也冲突。非引擎缺陷(13 栈同形同错即归因证据),修法为夹具支间清场,待授权,本轮未改门禁。
v1.8.28 — 2026-09-22
09-22 夜发版轮(issues/120 时钟基座 + issues/121 P1/P2 血缘回退)Java 侧代次;tag v1.8.28(19:24),bump commit 530dc4f。
- 新增(121 P1):建单写
task_parent_id与行级isFirstTaskNode,门面读时"行上值优先、存量行才现算"(95d4360); 引擎控制键不再算「任务变量非空」,P1 不打断ext回退实例变量的契约(5f4a923)。 - 变更(121 P2):退回上一步改血缘版——复活血缘前驱行、参与者取该行办结人(
e7a8558),本栈即其余七栈的对齐参考。 - 修复(issues/116 批次 D):委托条款 1.1 补
wf_process_define.name回落 + 逐路径用例与乱序 id 夹具(8cd6e3c); 委托代理自动生效改为内置默认开启(03474fe,参考实现位)。 - 发版核验:Maven Central 回拉以外部
curl …/1.8.28.pom为凭(该仓 release workflow 的 verify 步在 1.8.29 那轮才补上)。
v1.8.27 — 2026-09-05
- 修复:stats 统计计数/时长被集成层
Long→String序列化器字符串化(overview 13 字段中 9 个计数、trend started/finished、group count、JDBC define 维 avgDurationSeconds),与契约 §4.2「统计计数/时长为 int」不符。组装层统计计数一律 int 出参(Integer 不在 Long→String 序列化范围),id 字符串化规则不动;其余六语言同源实现天然走 int 不受影响。 - 验证 Maven Central 七构件 200 + 公网 demo 实测全 number;七语言灌数据类型断言 84 项全 PASS。
v1.8.26 — 2026-09-05
- 修复「stats 三 action 登录放行」:
DefaultActionPermissionProvider的 NO_PERM_ACTIONS 补processInstance/stats/overview|trend|group(契约 v1.1 冻结「登录即可、不配权限码」 归纳放行清单时 stats 尚不存在后补遗漏),boot2/3/4 走引擎默认 SPI,普通用户分析页不再 99990406。 - 验证 三场景单测
DefaultActionPermissionProviderTest;Maven Central 全构件可解析。 - 发版注 bump 需九文件同改(根 pom + 八子模块 parent version),首跑漏子模块被 Central 以「构件已存在」拒收(bundle 混入旧版本构件),补齐后强推重打 tag 收口。
v1.8.25 — 2026-09-04
- 新增 stats 三 action(
processInstance/stats/overview|trend|group):overview / trend / group 全维度统计。 - 修复 stats 契约对齐 A–E 验收(Java 为 wire 契约参考实现);publisher 单监听器异常兜底(P2,一个监听器异常不打断其余)。
- 修复(发布通道)javadoc 插件关 doclint——历史注释债不应阻塞发布(v1.8.25 首次 CI 挂 javadoc)。
v1.8.21 — 2026-09-03
- 新增 CC_CREATE 抄送知会事件(六语言统一缺口 Java 栈)。
v1.8.20 — 2026-09-02
- 修复(引擎侧根因):TASK_CREATE 任务创建事件原在
CreateTaskHandler落库前 fire(监听器按taskId反查时任务行尚未提交,findTask落空 → 静默丢,「wf 流程消息写路径缺失 / messagePage 恒空」)。统一改到任务行落库之后 fire(sourceId=taskId可反查处理人),对齐「事件→消息」职责边界契约(引擎只 fire、不保证消息落库)。
v1.8.19 — 2026-08-30
- 修复 批量入参契约:删除/启停类 action(
processSurrogate/remove、processDefine/remove、processDesign/remove、processDefine/upAndDown)统一走idListArgs助手——{ids}数组优先、单{id}兼容,两者皆缺失 / 空数组 / 含非法值一律99999999,不再空值静默成功。 - 票面偏差(如实记):无真库 T1——
jeeflow-repository-jdbc连的是 H2(MODE=MySQL),按 1.8.16–1.8.18 惯例发版;发布集(排除jeeflow-demo-boot4)JDK 8 下clean testBUILD SUCCESS。
v1.8.18 — 2026-08-24
- 语义修正 会签对齐内置引擎(boot2/3):
submitType=20(COUNTERSIGN_DISAGREE)默认软拒绝(flag 记录、流程不阻断);仅节点countersignCompletionCondition=ONE_VOTE_VETO时一票否决推进;会签 merged(任意路径)后废弃该节点剩余 DOING 任务(taskState=99),不留孤儿待办。 - 修复 串行会签「一次建全」回归,改回逐个创建:节点入口只建
actors[0]一个 DOING 任务,全量成员 + 计数器存任务变量,每完成非最后一人建下一人;buildNodeProgress会签成员清单改读任务变量operatorList_{node}(逐个创建后不再漏显后续成员)。
v1.8.17 — 2026-08-23
- 修复–82 门面字段级契约与负向断言缺口:
processSurrogate补 update / detail;taskDetailtaskVo 出口performType/taskType改数字 code;candidatePage行键归一{id,realName,userName?,deptName?};listByTypeitems 补processDefineState;id 精度守卫(float64 超 2^53 显性报错,toLong);taskDetail补ext.isFirstTaskNode+ designPage remark/icon 回显 + 内存仓储toTaskRow补finishTime/expireTime;委托(授权人=操作人、时间入参兼容空格、分页m_IN/m_EQ、生效时间窗 + enabled 过滤);submitType2/3/4/5/6/20 门面行为 + 抄送空 actors → 99999999 测试。 - SPEC processSurrogate update/detail、candidatePage 行键、listByType processDefineState、taskDetail ext + m_pd_* 搜列映射、id 字符串契约。
v1.8.16 — 2026-08-13
- 修复:
processTask/detail的taskModel补全ext/form字段,用于字段权限下发(五语言)。
v1.8.15 — 2026-08-10
- 变更(发布通道)
jeeflow-demo-boot4从 Maven Central 发布集排除(该模块需 JDK 21)。
v1.8.14 — 2026-08-09
- 变更(CI)test job 移除、aliyun mirror;为 CI 发布流水线做准备,无引擎行为变更。
v1.8.13 — 2026-08-09
- 新增:
PersistPostInterceptor提供registerMeta注册助手,集成方一行调用同步字典项与实例。 - 变更 流程定义声明
postInterceptors但注册表无实例时,发起 / 办理改为显式报错(原为静默跳过)。 - 修复 Java 8 兼容:
Map.ofEntries等 JDK 9+ API 改为 JDK 8 等价写法,修复 JDK 8 运行时NoSuchMethodError。
v1.8.12 — 2026-08-08
- 修复:
designRedeploy替换分支未保留原 version,JDBC 仓储误写 1;显式保留last.version。 - 改进
updateDefine/save/deploy的content字段支持 string 与 JSON 对象双形态(四语言同批)。
v1.8.11 — 2026-08-06
- 修复:办理时抄送
tf_ccActors未创建抄送。 - 修复:
FormFieldAssigneeHandler先匹配f_前缀变量再回落裸名(Go/Python/Node 于 1.8.18 对齐)。
v1.8.10 — 2026-08-06
- 修复:串行会签完成判定缺陷——改为全部成员完成才流转后续节点,避免每次成员完成都重复创建审批任务。
v1.8.9 — 2026-08-05
- 新增
JeeflowFacade.highLight新增nodeProgress(成员进度回显),与 Node / Go / Python 对齐(、)。
v1.8.8 — 2026-08-05
- 无本语言行为变更(版本对齐;nodeProgress name 解析随 Node/Go/Python 批次,见其语言页)。
v1.8.7 — 2026-08-05
- 无本语言行为变更(版本对齐)。
v1.8.6 — 2026-08-05
- 无本语言行为变更(版本对齐)。
v1.8.5 — 2026-08-05
- 无本语言代码改动(闭环收口);联邦 E9「id 出口字符串化」以 Java 既有全局实现为基准。
v1.8.4 — 2026-08-05
- 无本语言行为变更(版本对齐;三门引擎– 对齐随版)。
v1.8.3 — 2026-08-04
- 新增:
updateDefine无content时兼容 boot3 顶层 JSON。 - 新增:
processDefine/remove、processDesign/remove兼容{ids}批量;新增processDesign/listByType与processInstance/bizData。 - 新增:权限码 SPI
IActionPermissionProvider及内置默认实现,集成方可删除静态权限表。
v1.8.2 — 2026-08-04
- 修复:SYNC 字段权限不可绕过——任务完成入变量前按节点字段权限过滤,被拒字段不进变量,下游无法写入。
v1.8.1 — 2026-08-04
- 修复:SYNC 字段权限键兼容前端
PERMISSION_f_{字段名}约定,恢复只读 / 隐藏字段防护。
v1.8.0 — 2026-08-04
- 新增:
persistMode双模式——缺省ARCHIVE(结束归档)保持向后兼容;SYNC模式实现「发起 INSERT → 节点 UPDATE → 结束定稿」的同步演进入库。 - 新增 任务节点级字段权限:
PERMISSION_{字段名}= 1 只读 / 2 可编辑 / 3 隐藏。 - 新增 状态字段写入:列名优先
{节点ID}_{状态码},回落{节点ID}。 - 新增
tf_前缀变量去前缀冗余到业务表;writer.update参数化 UPDATE。 - 改进 幂等标记改为节点级;任务创建不触发节点拦截器(对齐
CreateTaskHandler),任务完成显式触发;结束节点按 submitType 定稿。 - 修复 子表递归插入继承主表
apply_user_id;读侧 EXPAND 展开列不重复平铺。 - 新增
MetaTableWriter.update按元数据 storageType 组装 SET 列。
v1.7.0 — 2026-08-04
- 新增 元数据驱动的动态写入 / 读取:
StorageType(NORMAL / EXPAND / JSON / ONE2ONE / ONE2MANY)、FieldMeta/TableMeta模型;IDynamicMetaProviderSPI 与内置JsonMetaProvider;MetaTableWriter(含子表递归)与MetaTableReader。
v1.6.6 — 2026-08-04
- 修复:persist 表结构探测增加 schema 限定,避免多库同名表返回两套列。
v1.6.5 — 2026-08-04
- 新增:persist 主键生成支持——方言自增检测 +
setPrimaryKeyGenerator,非自增主键未配置生成器时给出明确报错。
v1.6.4 — 2026-08-04
- 改进:persist 默认列匹配宽松化(驼峰 ↔ 下划线归一),可通过
setStrictColumnMatch(true)恢复严格模式。
v1.6.3 — 2026-08-04
- 改进:persist 用户列默认取
operator(回落apply_user_id);增加同执行链重复触发防护。
v1.6.2 — 2026-08-04
- 新增:业务数据通用入库——
DynamicTableWriter接口 +JdbcDynamicTableWriter;PersistPostInterceptor模型级postInterceptors挂载,流程结束时把f_字段 + 流程上下文 + 系统字段写入业务表,process_instance_id幂等。
v1.6.1 — 2026-08-04
- 修复:starter 增加
IOrgUserProvider装配。 - 修复
processDesign/page时间格式化为yyyy-MM-dd HH:mm:ss。 - 改进
HandlerRegistry构造即内置 7 个通用 handler 元数据。
v1.6.0 — 2026-08-04
- 新增 表单数据契约:
formData/taskFormData/ 审批记录行ext。 - 新增
IOrgUserProviderSPI(部门领导 / 角色成员查询);7 个内置通用参与者处理器:发起人、表单字段分配、部门领导 / 分管领导、任务角色。 - 新增
candidatePage双源候选:candidateUsers+candidateGroups。 - 改进
AssignmentHandler.assign增加operator参数,区分「当前操作人」与「发起人」。
v1.5.1 — 2026-08-03
- 新增:
processDesign/redeploy、updateDefine、update三个 action,并同步is_deployed状态。
v1.5.0 — 2026-08-02
- 新增 详情
jsonObject:processInstance/detail、processDefine/detail、processTask/detail直接返回定义解析结果。 - 新增 列表字段契约:分页行输出
ext/instanceExt/displayName/version,时间统一yyyy-MM-dd HH:mm:ss;m_前缀查询参数(MyBatis-Plus 约定),7 个分页列表白名单过滤。 - 修复:
highLight决策节点输出边按表达式求值过滤;processDesign/detail的 jsonObject 缺失基本信息时从设计表补齐。 - 改进 依赖坐标版本号不写死——
${jeeflow.version}统一管理。
v1.4.0 — 2026-08-02
- 新增 引擎元数据能力:枚举字典注册表(7 个内置状态枚举字典,key 对齐 boot3);SPI 实现清单
HandlerRegistry注册式元数据(type / className / displayName / order / group),供前端设计器字典使用。
v1.3.0 — 2026-08-02
- 新增
ccList分页补齐:核心表分页 SPIpageCcInstances加入各语言。 - 修复:
addTaskActor追加语义——去重后仅插入新增,不清空原参与者。
v1.2.0 — 2026-08-02
- 新增:门面补齐 13 个视图端点(
highLight/approvalRecord/candidatePage/taskSurrogate/addCandidate/latest等)。 - 新增
IUserSearchProvider可选 SPI:candidatePage 无模型候选时的用户分页搜索钩子。
v1.1.0 — 2026-08-02
- 新增 管理扩展:
wf_process_design/wf_process_design_his/wf_process_surrogate三张表 + 扩展仓储 SPIIProcessExtRepository。 - 新增 统一门面
JeeflowFacade.flow(action, map):27 个 action,统一返回{code, msg, data};deploy / redeploy 版本管理(按流程编码自动 version+1)。 - 修复 定义写操作 SPI;
updateInstance级联持久化;assignee 变量解析;系统代执行(flow.auto/flow.admin)。
v1.0.0 — 2026-08-01
- 引擎核心四语言同构实现(Java 为参考实现):5 张核心表(
wf_process_define/wf_process_instance/wf_process_task/wf_process_task_actor/wf_process_cc_instance)。 - 核心能力:启动 / 执行 / 驳回 / 跳转 / 退回发起人 / 会签(并行、串行、按比例)/ 抄送 / 委托扩展点。
- SPI:
IProcessRepository/UserProvider/IDGenerator/ExpressionEvaluator;多数据库适配 MySQL / PostgreSQL。 - 发布通道:Maven Central;文档站上线。