Appearance
MoonBit 更新日志
当前版本 v0.1.54(0.1.16 是半代次:facade 缺位,见该页首两节) · mooncakes.io(
mldong/jeeflow-core/jeeflow-persist/jeeflow-repository-mysql/jeeflow-facade四模块,独立0.x版本线)· 仓库 mldong/jeeflow-moon · Releases 版本日期以本仓 git tag 为准;跨语言对齐脉络见 更新记录总览。
v0.1.54 — 2026-10-31
「退回修改、重提直返」首轮发版(0.1.53 未记本节,见下"注";本轮 tag v0.1.54= 8bf98ec(实现)+78ef4ef(守卫)+633965a(出口契约)+1e0e321(版本号与接力 pin), 四模块同号)。条文见 规范 04 引擎操作「退回修改、重提直返」节。
- 新增:
reapplyMode节点属性与非法值解析期报错、submitType=6直返建带_reapplyContext的申请待办、submitType=5重提直接回来源节点、_branchCtx分支归属 与汇合等齐判据、保留键入口剥离。实现落点:core/engine/reapply.mbt+core/engine/engine_ops.mbt(全异步 SPI)。 - 变更(补齐带标记申请待办的入口守卫):此前只在命名跳转那一档挡了,且文案与他栈不同; 现按 java 同形在
execute_and_jump_async入口整体覆盖(命名跳转+血缘回退两档),execute_and_jump_to_end_async/execute_and_jump_to_first_async各补守卫, 四档文案统一为"…不允许{动作},只接受重新提交(submitType=5)"。 - 修复(
ext回退契约被新保留键打破):facade/args.mbt的task_row_to_json判据 补两枚保留键;回退语义从并入改为替换(旧写法把实例变量叠在控制键上,回退后ext仍带着_branchCtx),现按其余七栈同形取实例变量副本再合回_reapplyContext。 本栈实例变量写回只挑f_*,结构上不带保留键。 - 注:
v0.1.53(雪花号单实例+bizData 键形)当时未在本页留节,此处一并补记。
v0.1.52 — 2026-10-17
audit8 R110+R112+R119+R115 C3⑬(四模块 0.1.51)。
- 新增(删除定义守卫):
processDefine/remove删除前校验任何实例存在即拒,批量先整批校验。 - 诊断(未知档的边):决策+4 个出边循环落穿时打印
from/to,行为不变。 - 修复(首任务节点尺子,R119):按 nodes 序取首个
snaker:task,不再跟 start 首条出边(首边到 decision 时会导致isFirstTaskNode全假)。 - 修复(串行会签零参与者,R115 C3⑬):零参与者照样建一行 DOING,不再静默
return留下无可办行的僵尸实例。 - 修复(雪花号同毫秒重号,R111):
repository-mysql默认发号器此前每次调用都new一个生成器 ⇒ 同毫秒连续取号返回同一枚 id,写wf_process_task_actor等表会撞主键;现改为进程内单实例。 - 修复(bizData 出口键形,R111):动态读面行键是驼峰、引擎 reader 的 strict 匹配按列名取数,两形不一致导致业务字段被当“元数据外列”再小写平铺(
companyname);插件读侧先回转列名,出口恢复companyName。
MoonBit 引擎(jeeflow-moon)为联邦第七个成员,独立版本线:mooncakes 早期阶段平台强制
0.x(决策 D-M5-1),平台放开 1.x 后首个版本即 1.0.0,不跳号。2026-09-05 首发日连发 0.1.0→0.1.2。发版通道与坑位见引擎仓jeeflow-moon/MAINTAINING.md§3 与同文件 §4 的代决策日志(D-M5-/D-M6-)。
v0.1.49 — 2026-10-16
audit8 R91+R78 甲/甲′+R86+R95(tag v0.1.49,四模块 core→persist→repository-mysql→facade 齐发; release 提交 39cf841,14 处 version+relay pin 同笔)。
- R91:通用按名解析件+节点级声明的优先序/回落/显性暴露,条文=规范 02 §3。
- R78 甲/甲′:元数据腿五处调用钉
strict=true(禁分隔符归一),直通闸与字段消费改用同一把严格尺子; 幂等键仍由引擎按 java 同形注入 snake 键(既有件,未动夹具期望值)。条文=规范 10 §5.1。 - R86:
jump目标节点不存在改显式报错+空串档与"没带"同档。 - R95:补 规范 12 §12.4 空转档第一腿(T1-M10:事务内走真实读路径
find_instance_by_id读回自己刚写的行/提交前独立连接读不到/回滚后不存在)。同轮现读更正:本栈三档落点名不是T1-F120/121/122, 而是repository-mysql/smoke的 M4/M6/M7/M8。
v0.1.48 — 2026-10-16
audit8 R68①② 行为变更(tag v0.1.48,引擎 commit fa20d1e+判据消警告 f794345; 四模块 core/persist/repository-mysql/facade 同代,模块间接力 pin 与版本同笔抬)。
- 行为变更(委托 update 缺键档):
processName/surrogate缺键此前保留旧值(混合第三形), 现改清空(时间窗与enabled本就已是清空派)⇒ 与 java 参考实现及多数派对齐,见 规范 06 §4.5 条款 4。 - 修复(
enabled的布尔档):载荷enabled传 JSON 布尔true时旧形状落 0(启用被读成停用), 现补Json::True/False两臂 ⇒ 1/0;字符串/数值档行为不变。 - 本栈代次纪律:新增判据曾带 2 枚
Show-弃用警告使moon check46→48,已改unwrap_or取真值消回 46 warnings/0 errors(与上代代基线全等),断言数值一字未动;moon test --target wasm492/492,真机腿 T1 仓储级与 T1-F 门面级两腿发版前均 ALL PASS。
v0.1.47 — 2026-10-15
issues/212 收口:分页 action 缺省 pageSize 由 20 改为 10(tag v0.1.47,引擎 commit 0035ca8+release c7b4401; core/persist/repository-mysql/facade 四模块同代,模块间接力 pin 与版本同笔抬)。
- 行为变更:六枚分页 action 缺省档 20L → 10L,对齐 规范 06 §2.2「
pageNum从 1 起;pageSize默认 10」全局档。 - 升级影响:依赖"不传就返 20 条"的调用方现看到 10 条;显式传
pageSize的不受影响。 - 判据:发版前 T0 488/488,T1 仓储级与 T1-F 门面级真库两腿 ALL PASS;
moon check46 warnings/0 errors 与上代基线全等。
v0.1.46 — 2026-10-14
issues/201 收口:SPI 求值抛错不再静默折 false(tag v0.1.46,引擎 commit 215fc79+release 500269e)。 条文见 规范 06 · 门面 §4.6「求值失败留痕」(issues/201 立法,2026-10-14 owner 拍 C)。
- 现读更正:静默点在引擎
evaluate_expression的 SPI catch——门面那条 catch 对「求值失败」结构性 不可达(它只罩simple_eval,而后者零 raise)。 - 新增(可观测性,行为零变化):引擎 SPI catch 臂补带原因输出(实例号/定义号/expr/err 四件,引擎层 拿不到 nodeId 未硬造)+新增
eval_failure_warning纯函数;遍历宽度维持折 false,合法判假不落这条日志。
v0.1.45 — 2026-10-14
issues/197 收口:PageQuery.order_by 全栈零消费者+内存腿 page_defines 连 filters 都不滤 (tag v0.1.45,引擎 commit 439f867)。
- 修复(后果级):内存腿三条 SQL/查询分支硬编码
ORDER BY id DESC、且完全不读过滤条件 ⇒ 带条件的内部调用点四处全打在内存腿上:processDesign/redeploy会把新内容覆盖到另一条定义行、deploy/saveDeployedDefine的 version 基数取自别的流程、getLastByName返回异名定义且code=0。order_by参数则是"能传但没人消费"的死面。 - 跨栈现读:java/go/python/node 四家的内存腿都滤条件 ⇒ 本栈独家。
- 判据:新格+变异对照+
moon check警告数与基线全等(46 warnings/0 errors,零新增)。 - 发版链:publish 四步(core→persist→repository-mysql→facade)逐支 success+
pull_verifyOK; 接力 pin 14 处同步(5 模块 version+9 处内部 pin)。 - 传播面:本栈不走 13 壳矩阵——经
mldong-moon插件跟版→第 14 栈一键包镜像, 通道门禁51/0/3(3 SKIP=结构性无 redis)→ 原样晋升(起栈实测装载器报jeeflow v0.1.45)。
v0.1.44 — 2026-10-13
issues/194 收口:flow.auto/flow.admin 哨兵大小写两派(tag v0.1.44,引擎 commit dac457f+51dd738)。
- 修复(本栈重一档):两处敏感腿(聚合根与引擎判定)用精确串比对认哨兵 ⇒ 宿主传异写时代执行/ 管理员语义失效;且本栈栈内有两套口径(一处忽略、一处精确),同一份输入两个答案。 条文 规范 04 逐字带「忽略大小写」⇒ 改的是行为,非契约缺口。
- 同批:rust
v1.0.41+phpv1.3.34;本栈腿经插件跟版到第 14 栈通道。 - 判据:两处腿各钉异写档;
moon check46 warnings/0 errors 与基线全等。
v0.1.43 — 2026-10-13
两案并批发版:issues/184(.impl. 类全名错串)+ issues/185(监听器异常隔离但零日志) (tag v0.1.43,引擎 commit 7068eb1+1c5ecab+release fbfeb67)。
- issues/184:内置第 8 档
ActionPermissionProvider的className多一段.impl.、displayName非同串——两字段同改,对齐 java/csharp 参照串。本栈头注写「移植 rust」,把 rust 的错串连带搬了过来, 故两栈同案同批(参照串源在 csharp)。 - issues/185:监听器隔离是做到了(
catch { _ => () }不吃异常流),但异常原因整条丢掉=零日志, 缺裁定的「带原因 ERROR 日志」半句。本版补日志并把文案抽成纯函数便于判据断言。 - 判据:两处变异各咬合;全量 467/467;
moon check与基线全等。 - 传播面:rust→salvo+本栈→插件,1 镜像+通道
51/0/3全晋升。
v0.1.42 — 2026-10-13
issues/182 收口:properties.ext 错键族——本栈读 ext 恒 {}(tag v0.1.42, 引擎 commit e0dee34+release c2abb8f)。
- 修复(一行):
actions_main.mbt那处改读properties.field。基准就是properties.field—— 全仓没有任何生产方往ext写 ⇒ persist 字段权限与taskModel.ext原料恒空。 - 同案两栈:rust
v1.0.38是同族另一形(读ext恒null);本栈的入口过滤缺失早由 issues/150 收口。 - 判据:3 枚+变异+还原后 md5 全等。
- 传播面:插件跟版→第 14 栈通道
51/0/3→ 晋升。
v0.1.41 — 2026-10-13
issues/180 收口:abandonTask 不再连带把整单置 99(tag v0.1.41,引擎 commit e907463+f0f2503)。
- 变更:任务级废弃只废任务,删掉实例 state 的写点——对齐 spec 与 go/python/node; 五栈同批(java/php/rust/csharp/moon),五栈该方法全部零生产调用者(调用面 grep 仅定义处命中)⇒ 现生产零行为变化,收的是「一旦接上就会顺手废整单」的潜伏形状。
- 判据:3 枚+夹具改为直接置态(避免夹具自身依赖废弃语义);变异对照。
- 传播面:插件跟版;本轮 5 引擎→6 壳+插件→6 镜像+通道全晋升。
v0.1.40 — 2026-10-12
issues/178 收口:candidatePage 四派里的本栈形——只走第二级+搜索腿丢入参+分页默认值写死 (tag v0.1.40,引擎 commit 9f6d947)。条文见 规范 06 · 统一门面。
- 修复(三处同案):① 候选映射只吃到第二级(
getUser),没接findById优先档; ② 搜索腿入参(pageNum/pageSize/m_*)不透传——PageQuery::new(1L,10L)写死, 前端翻页与条件搜索全部失效;本版让写死退役。 - 判据:七个用例族+变异 MA/MB/MC;复跑全量 459 绿。
- 传播面:插件跟版→第 14 栈一键包,通道
50/0/3→ 晋升;同批 go/py/node/rust 共 9 张镜像+moon 全晋升。
v0.1.39 — 2026-10-12
issues/177 收口:候选人两键改「顶层优先·properties.field 嵌套兜底」(tag v0.1.39,引擎 commit b6c5bb2)。 条文见 规范 08 场景 43「字段权限族」。
- 修复(用户可感知):parser 只读顶层,设计器写在嵌套形里的候选人被读成空 ⇒ 待办没人能办。
- 判据:2 枚新格+变异红样;复跑 453 绿。
- 传播面:插件跟版;同批六引擎,9 张镜像+moon 一键包 10/10 晋升。
v0.1.38 — 2026-10-12
issues/176 收口:startAndExecute 自动办理腿 operator 改 flow.auto(tag v0.1.38,引擎 commit 3d3edfd)。
- 变更(用户可感知):一键发起并办理的那条任务办理人记成系统哨兵,真实发起人不再同时出现在「我已办」; 三不变量不动(实例发起人/apply 参与者/
u_*仍记发起人)。八引擎同批。 - demo 期望随动:
F118的期望值随本次改动翻新——custom记录行的执行主体随动flow.auto(T1-F 真库腿复跑抓出,两档+参与者锚全绿)。 - 判据:跨栈门禁
L2-43同轮落格;修前通道预跑48/1/3,唯一红即这一格(双锚红)。 - 传播面:本栈经插件→第 14 栈一键包;本轮总传播面 8 引擎→13 壳+moon→14/14 全晋升。
v0.1.37 — 2026-10-11
issues/164 A+166 A(种子)收口(tag v0.1.37,引擎 commit 1010188;五模块+九处接力 pin 同批)。
- 变更(用户可感知):决策节点零命中显式报错——遍历完全部出边仍无命中(带 expr 的边全判 false/ 判定变量缺失/零出边/自定义决策处理器未命中)时抛
decision节点无法确定下一步执行路线(逐字=javaWfErrEnum.NOT_FOUND_NEXT_NODE,门面出口99999999+该 msg)。改前本栈该档 静默停住(令牌不前进也不报错):办理人看到 code=0"成功"、实例挂在 state=10 且没有任何人的 待办。条文见 规范 06 §4.6「零命中档」。 - 种子:demo FINISHED 三行(F5/F8/F9)补
finalAmount=8000(issues/166——define 映射漂移, flows 目录加入 06-…-expire.json 后 define=12 已是 10-mixed-mode;补键走 e8→boss→end 与旧蒙臂 同形,demo 重置读数回 15/10)。 - 判据:
core/engine/i164_decision_nomatch_test.mbt3 格(内联夹具)+变异对照; core/engine 151/151、全项目 449/449 绿;moon demo(内置 simple_eval 通用求值)重置 15/10 零种子报错。 消费方mldong-moon插件 pin 四处+descriptorplugin_version同批跟版(本地)。
v0.1.36 — 2026-10-10
issues/159 收口随 157/160 轮发版(此前 changelog 漏记,此处补一行):决策边出口取边 id(旧形状取 label 优先)+simple_eval 三缺陷收口(裸名不代入不蒙 0、排序运算非数字判 false、> Some(2) 死臂与 ${} 双查)。
v0.1.35 — 2026-10-10
issues/153 ②③ + issues/154 ①④(mooncakes.io:仓内 5 个 moon.mod 同批抬号、发布物四件同号,引擎 commit ed42f1d/tag 2bb7d35)。
- 变更:
core的公开面变了——Engine::evaluate_expression由包内fn抬成pub, 让facade的 highLight 路径补全复用引擎那一支求值口,不在门面里另立第二套决策求值。 按「改过已发布模块就要前进代次」这条治理约束必须发新版本。 - 新增:
approvalRecord九键与id ASC、highLight的模型补全与决策边求值过滤,向 Java 基准并齐。 - 发版形状:5 个
moon.mod的 version 与 9 枚接力 pin 同批抬(bump-version.sh只改 version 不改 pin, 历史上的 0.1.7/0.1.9 半代次事故即源于此),自检=发布物内部不留旧代次 pin。
v0.1.34 — 2026-10-08
issues/152 委托三件收口(mooncakes.io(四模块同号),引擎 commit 43325e0)。规范条文见 规范 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 五档判据(作用域优先级/停用不自愈/自委托/写侧三档/分页归属两层), 每档配真值档阳性对照;摘掉兜底判据必红。
v0.1.27 — 2026-10-06
四模块同号重发(core → persist → repository-mysql → facade;demo 不发布)。本版含破坏性 API 变化,见下"变更"首条。
- 修复(issues/144):事务句柄从进程级全局槽改挂到仓储实例上。旧形状下
let tx_conn : Ref[MysqlConn?]判的是"进程里有没有事务",而本栈单线程事件循环且无 task-local ⇒ 并发请求在 await 点交错时会互相看见同一个槽:后进入的事务既不BEGIN也不COMMIT、把写并进前一个事务, 前者回滚时把后者已经返回给调用方的确认写入一起抹掉(160 真库实测复现)。现行形状:MysqlRepository持实例字段tx,new_request()派生请求级实例(同配置、独立槽),execute_in_tx(op)上提到仓储实例并把绑定后的实例交给回调,MysqlTxTemplate改为持仓储实例委派。 SPI 的 42 个方法签名零改动。 - 变更(破坏面三处):①
MysqlTxTemplate::make入参由连接配置改为仓储实例; ② 自由函数current_tx_conn()/close_conn(conn)改为仓储实例方法(后者转私有,仓外调用点改用conn.close()); ③MysqlRepository多一个字段 ⇒ 以记录字面量构造该类型的代码编译失败。 - 新增(issues/144 第二步):
Ctx::for_request(repository, ext_repository)——请求级派生入口。 本栈结构体是引用语义,既有with_*全是"原地改self再返回self",照那个样式换仓储会让请求 A 的替换全进程可见;for_request因此新建注册表、六个容器字段逐个copy(),而闭包字段(尤其 id 生成器)按引用共享 ——雪花worker_id固定、sequence每毫秒归零,每请求新建生成器会在同一毫秒撞出同一个 id。 配套纪律:SPI 注册只允许启动期做。demo 的 MySQL 分支已改为按请求派生。 - 变更:事务模板回调的错误集由闭集
raise JeeflowError放开成开放raise。本栈async fn不写raise注解即被推成开放效应,闭集签名下宿主无法把一次门面动作包进事务(编译期直接拒)。模板对"抛什么错"本就不该挑: 任何错都回滚、原样外抛。 - 新增判据(事务这件事第一次有行为门禁;判据本体见 规范 12 · 事务契约 §12.4):仓储级并发原子/ 嵌套不重复 BEGIN/归属边界两方向;门面级原子档(四张表逐个反查+"不包事务就有残留"的阳性对照)/ 空转档(事务内写→同实例读得到、派生实例读不到、回滚后无残留)/反题桩。三枚变异对照在副本树跑, 各自把对应判据当场变红——其中把取连接逻辑改成"每句自取新连接"那枚,红在门面级原子档, 说明空转档抓得住别的栈的形状。
- 钉出来的现状缺陷:
Facade::flow把 raise 吞成{code,msg,data}信封 ⇒ 宿主外包事务时动作内部失败不会触发回滚, 半完成实例照旧提交。本版把它钉成读数(反题桩,不是认可);契约侧对应 规范 12 · 事务契约 §12.2 「宿主外包事务的两条硬义务」。 - 门禁(2026-10-06 同窗现跑):T0
moon test --target wasm403/403;T1 仓储级真库冒烟 111→124 断言 ALL PASS; T1-F 门面级 130→141 断言 ALL PASS;T2 demo 冒烟 ALL PASS;action 清单双向无差集;跨语言一致性载荷逐字节等值; 警告数按两棵干净树同窗对比零新增。消费者侧scripts/pull_verify.sh 0.1.27⇒ PULL-VERIFY OK (正向code=0含分页五键/负向99999999),装到的依赖代次async 0.22.4 / moondb 0.2.0 / moonmysql 0.7.3。 发布链终局(publish 四步逐步 success、Demo Deploy、sync-cn 三个 run 号)记在引擎仓jeeflow-moon/docs/CHANGELOG.md。 - 未做:引擎与门面自身仍零事务接线(原子性依赖宿主外包并按契约检查出口
code);SPI 的拦截器/监听器/ 动态表写出器都是同步形状,而同步函数调 async 判 4149 ⇒ 本栈业务规则落不了库,缺的是 SPI 的 async 形状立法。
v0.1.26 — 2026-10-02(补记)
摘掉 vendored——上游 moonbitstack/moonmysql@0.7.3 放开了 client 的 wasm 目标 ⇒ 引擎仓 vendored 那两个文件 的整目录删除,代码侧只 2 行改动,代次从 0.1.25 前进一格、四模块同号重发(5 version + 7 pin)。 本轮零行为变化:改动本身是把一份"本仓拷贝"换回它对应的那份注册表原件。 发布链读数记在引擎仓 docs/CHANGELOG.md。
四模块同代发(core → persist → repository-mysql → facade;demo 不发布)。
- 新增(issues/115 §3-8):门面第 47 个 action
processTask/removeTaskActor。 - 修复(issues/137 §3-1):门面出口固定文案「流程处理失败」+判别式;坏 JSON 与内部异常原文 只走
detail()落日志(issues/137-G/139 同批)。 - 修复(issues/137 §3-6):删除腿收口为**「原值 ∪ trim 值」两形并集**(
core内存仓 +repository-mysql)。 - 修复(issues/137 A §3-4):实例级
expire_time按定义级表达式求值(两处写点), 并补demo/cmd/i137a_mysql真库腿——实例列真过 160 的DATETIME(3)读回,不只看内存对象。 - 修复(issues/137 D/E):新增
parse_int_non_negative(一处裁四档);相对档前缀 trim 裁在调用点, 判负单点不掺和。 - 文档(§3-11、批一 A6):过期注释随批;README 补 native 目标说明(
--target wasm六处一处未删)。 - 发版机制:本版把接力 import pin 与 version 一并前进(五份
moon.mod的 version + 七枚mldong/jeeflow-*@pin 全指 0.1.25)。bump-version.sh --lang moon只改 version 那一行、不改 pin, v0.1.22 就栽过一次(tag 指到修复前 commit)⇒ 本栈发版固定手工补这一步。 - 测试:T0
moon test(wasm 档——本栈preferred_target = "wasm",wasm-gc 会静默丢 async 用例还 exit 0) ⇒ Total tests: 402, passed 402, failed 0;T1moon run --target wasm repository-mysql/smoke⇒T1 ALL PASS (wasm → 160)(专用库jeeflow_moon_t1);T1-Fdemo/cmd/t1_mysql⇒ 130 PASS; 消费者侧scripts/pull_verify.sh 0.1.25⇒ PULL-VERIFY OK(正向code=0含分页五键/负向99999999)。
v0.1.24 — 2026-09-30(补记)
issues/141(G1/G2/G10 抄送腿)+ issues/142(A 记录类/B 归属值归一)+ issues/134/130 那一批的 moon 腿, 另含内存仓水合缺口全修(六条读路单点水合,8bb6a2d + 5ab9dc0)。 本版门禁读数与发布链终局(四步 publish 逐步 success、registry 四件命中、Demo Deploy、sync-cn) 记在引擎仓 jeeflow-moon/docs/CHANGELOG.md, 此处不重复抄;上一节 v0.1.22 与本节之间无其他发布(0.1.23 那批是"只改文档未发版")。
v0.1.22 — 2026-09-30
- 新增(issues/142 A 批):记录类(
snaker:custom)独立执行腿——parser 兜底臂_ => Custom拆成「显式snaker:custom档」+新增Unknown(未知档先println一条带 nodeId 与实得类型串 的 WARNING——文案抽成纯函数unknown_node_warning,判据留纯函数、副作用留调用点);Ctx加custom_handlers+ 注册/解析两成员;任务类零参与者照样建单(1bis 的 expire_time 留 NULL)。 - 变更(issues/142 B 批 · spec 06 §2.11):
@model.normalize_actors升格通用入口(旧名normalize_cc_actors保留为转发)+normalize_actor单值档;门面四条任务写点接同一枚 (surrogate/addCandidate 两形同判据、transfer 单值档、主键档响亮报错、f_/tf_nextNodeOperator 过漏斗);两仓remove_task_actor删除位同 trim(' 8601 '删得掉 8601;归一后为空 ⇒ 一行不删, 空串不得批量误删历史actor_id=''脏行);门面updateCCStatusoperator 补 trim (operator_arg 回落 user1 + normalize)。 - 注意:本版四模块接力 import pin 全部同步到 0.1.22(0.1.22 首次发布时 pin 仍指 0.1.21, repository-mysql 的 publish 自检拉旧 core 编不过,属发版机制修正,使用方无感)。
- 测试:
moon test --target wasm316/316;T1-F 真机(160:3306/jeeflow)ALL PASS, 含 "custom1/custom2 expire_time 留 NULL" 两格复读。
v0.1.21 — 2026-09-29
- 修复(issues/138 ·
ccList行形状三要件):MySQL 腿把cc.actor_id AS operator、NULL AS variable、cc.create_*换成共用实例行列清单(instance_select_columns(), 与pageInstances逐字同一份 ⇒ 两条查询出行同形);pageInstances改引用共用清单, 拼出的 SQL 逐字不变。内存腿page_cc_instances改走instance_row_of(与pageInstances共用)。 归属谓词仍是cc.actor_id(issues/129「空值即空页」不动)。 - 既有断言改判(本栈唯一一处,逐字交代):已发布的 issues/108 格原写
assert_eq(pagec.rows()[0].operator, "leader")(查询者本人)——那正是 spec 06 §ccList 点名的错法(投cc.actor_id⇒ 在被抄送人自己的查询里恒等于他本人,「非空」类判据永远照不出来)。 现按基准改成「该行所属实例的发起人」,并把两格做成互相反向的夹具 (instA 发起人 user1 由 leader 查、instB 发起人 leader 由 user1 查)⇒ 只 echo 查询者的实现两格必红。 - 本栈三处差异(记账,不统一):① 谓词经
PageQuery.operator下传,不是门面query.add("cc.actor_id",…)条件列(同列同义);② MySQL 腿保留SELECT DISTINCT+COUNT(DISTINCT pi.id),而 java/PDO 是非去重t.*+COUNT(*)⇒ 同实例多张 cc 时本栈出行 1 条,换纯实例列后 rows 与既有 count 口径首次自洽 (旧为 count=1/rows=2 打架)——去重口径本身归 issues/141 G2 待拍;③ 悬挂 cc 行 java/php 天然不出行, 内存腿为不动已发布计数语义保留出行(主键=实例 id、operator空串)。 - 测试:
moon test(wasm 档)225/225(基线 218 + 7)。两层变异:operator退回cc.actor_id⇒ 红样点名「operator=流程发起人 boss(实际<ccuser>)」;投影换 cc 表原样 ⇒ 「id 的值=实例 id 100001(实际 100004;旧写法出口的是 cc.id)」。 native 档与真库 MySQL 腿本机跑不了(同上一代口径记豁免)⇒ MySQL 腿只守 SQL 文本形状。
v0.1.20 — 2026-09-29
- 新增(issues/127 + 132):
core/event码表补齐 A 套1..9,新建notify_events.mbt把九支的构造与广播集中一处便于逐键审计;直传载荷键按 §11.3 落齐——3/5/6/7这几支sourceId是 taskId,载荷必须带instanceId,否则集成层事件流水会被拆成多个 taskId 键、 顺序读不全(这是硬要求而非「方便字段」)。 - 形状记账:「
state落库后 fire」在本栈由「两处码 2 都排在update_instance之后」满足; 因 MoonBit 引擎不做完整子流程展开,java 的父实例待播上收结构性不适用(不造第二套语义)。 - 测试:
moon test(wasm 档)218/218 通过;native 档本机跑不了(vendored 需 cc、moonbitlang/asyncC 运行时只认 MSVC)⇒ 与上一代同口径记豁免。 - 立案未修:
tf_ccActors/f_ccActors在本栈只吃逗号串,数组形态静默丢值(java 两形态都收) ——同一份共用夹具在七栈建 cc、在本栈一支不建,见 issues/141 G6。
v0.1.19 — 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 任务行 不改写")原样保留,实例级守卫排在它之前。落点:core/model/aggregate.mbt::withdraw签名改raise @error.JeeflowError,守卫排在 任务行循环前。moon test208/208(基线 199)+moon check0 errors。moon 栈 130 侧无需改动。
v0.1.18 — 2026-09-28
- 修复(issues/126 案 A):本栈无求值器 ⇒ 新增
core/model/expire_time.mbt(放 model 而非 util——本栈没有core/util/,钟与时刻串在model/clock.mbt):process_time三档逐字(变量档终局 NULL/类型不认识落穿/s·m·h·d相对档,d走add_days日历加/绝对档严格 19 位),任何一档都不返回基准时刻。 五处写点:engine.mbt普通建单 / 串行首位 / 并行全员,engine_ops.mbt串行推进位与回退新建—— 回退那支原形状是「继承history.expire_time」(抄上一行的值),改成置 None 后按被回退掉的当前节点表达式重算。 - 测试
moon check0 errors(11 警告=基线,新增文件零警告)、moon test199/199(基线 179+20)。 两向变异对照各自把测试跑红(红在「配 2h ⇒ 同行差值≈2h」与「§1.8 首成员∧推进第二成员都带到期」)。 行尾按本仓惯例保住,未跑moon fmt(它会洗行尾)。 - 发版核验(这一版是"接力式 pin"的正面案例):
bump-version.sh --lang moon只改四模块自身版本, 本次手工把 facade/persist/repository-mysql/demo 的importpin 一起对齐到0.1.18(persist 与 repository-mysql 当时还钉在core@0.1.14,比 0.1.16 半代次更深一层), publish CI 四步 core/persist/repository-mysql/facade 全 success,moon update后索引四模块都读到0.1.18。 - 跨栈一致性(同批八栈一起发,基准=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)+反向钉一档「当前未配 ⇒ 必须空」。
v0.1.17 — 2026-09-28(facade 单独一代)
- 本版只为解开发版卡点:
facade/moon.mod的依赖 pin 从jeeflow-core@0.1.14提到0.1.16(persist 同批),并把 facade 自身版本提到 0.1.17 ⇒ publish CI 第四次全绿,四模块齐发。 功能内容与 0.1.16 那一代相同(131 的改动在 core 侧)。 - 为什么必须单独一代(接力式 pin,与本页 0.1.7/0.1.9 半代次同族但根因不同):
bump-version.sh --lang moon只改各模块自身版本,不动import的依赖 pin; 而 publish 的包体自检从 registry 取依赖源码编译(不吃本仓源码)⇒ 新 facade 配旧 core,FlowData.get_string_array必找不到。本地moon test179/179 全绿证不到这一层(workspace 用本仓 core), 只有 publish 能证。 - 处置纪律:发布物不可变 ⇒ 没有动
v0.1.16标签(重跑只会一直 409)。 下轮 moon 发版的起跳点=四个模块的自身版本与依赖 pin一起对齐到 0.1.17。
v0.1.16 — 2026-09-28(半代次:core / persist / repository-mysql 出,facade 当时没出)
- 变更(issues/131 案 A,与 Rust
1.0.18同题):串行会签簿记从实例变量搬到任务变量。core/json/flow_data.mbt新增insert_string_array/get_string_array(数组型簿记, 本栈原来只有逗号串的insert_str/get_str);建单侧seed_countersign_bookkeeping写进首个成员任务, 推进侧从_task.variables读回名单并把三键抄给下一成员任务;门面actions_ext.mbt按数组读。 复活行控制键过滤is_control_var_key未动——现读它本来就列着csv_/loopCounter/nrOfInstances/operatorList四个前缀(外加tf_/f_),搬家后剔除腿天然覆盖新键名; 实施卡里"moon 只剔csv_、不补就静默留残留"那条预警经git show d995870~1现读证伪,没据此改代码。 - 测试
moon check0 errors;moon test(wasm,本机口径)179/179(.scratch/moon-131-test.log)。surrogate_test.mbt第 1.3 条断言按 A 案从"实例带簿记"改写到任务侧。 - 变异对照(
.scratch/mutate-moon-131.py,两处独立):名册值退回逗号串 ⇒engine.blackbox_test红; 读侧退回exec.process_instance.variables⇒ 同一格红。按 sha256 还原后全绿。 - 发版 tag
v0.1.16(d32c244)触发的 publish 两次红在 "Publish facade" 步 ⇒ 本代只出三模块, facade 缺位;补全在v0.1.17(见上一节)。
v0.1.15 — 2026-09-28
- 修复(issues/129 案 A,与 Java
1.8.32同题):新增operator_arg(args)(判空用 trim、非空白返回原串=javaoperatorArg逐字同形),替换actions_main.mbt9 处 +actions_ext.mbt3 处arg_str_or(args, "operator", "user1")。没改通用取值函数arg_str_or(别的 key 也在用)。 - 症状与 php 同档:本栈归属列空串不丢条件(
Some("")照绑 ⇒ 0 行),线上表现是"我的列表悄悄变空"而非那五栈的读全库(160 探针 moon 空串档=0)。第二层只在repository-mysql/query/query.mbt的if is_empty_value(value) { continue }——那是 javaJdbcProcessRepository:1095的同形通用放行,而m_EQ_operator/m_pi_EQ_operator/m_ta_EQ_actorId/m_cc_EQ_actorId正好命中那四个归属列(本栈别名ta)⇒ 归属列 EQ 空值不再丢条件,改写AND 1=0且不 bind;非归属列行为与改前逐字一致(哨兵格钉住)。内存通道的m_解析本就没有空值跳过 ⇒ 不硬造一层,只加测试留判据。 - 既有语义保持:缺键(
None)档仍是"不加条件"=全库,与 java"没 add 这条条件"同形,不是漏收;门面归一化后四条归属出口经门面永远拿Some(user1)。issues/114/115 硬必填与 8 处"system"审计缺省未动。 - 测试 T0(wasm,本机口径):
moon check0 errors(警告数与改前同基线)、moon test179/179(改前基线 168:facade +7、query +4)。既有断言一行未改(query_test.mbtnumstat = 69 插入 / 0 删除)。native 档本机跑不了(vendoredmoon_mysql_client要 cc,moonbitlang/async的 C 源在 Windows 只认 MSVC)⇒ 由 CI 的 ubuntu Native Probe 裁决。 - 变异对照两层互不遮蔽:只回退
operator_arg⇒ facade 包 31/36(5 红,四出口空串档 0≠2);只回退第二层 ⇒ query 包 4/7(3 红:归属列空值 filter 被通用放行丢掉);六文件按 sha256 还原后全量 179 绿。 - 发版核验:mooncakes 四模块齐发(CI publish job steps:core / persist / repository-mysql / facade 四步全 success;半代次号只出 core+persist 的先例见本页 0.1.7/0.1.9 注)。demo(
/moon-api)部署绿后线上复验:四出口空串档 = 4 / 5 / 1 / 2。
v0.1.14 — 2026-09-26
- 变更(registry 依赖换代,无行为变化):
moonbitlang/async 0.20.3 → 0.22.4、moonbitstack/moondb 0.1.8 → 0.2.0、moonbitstack/moonmysql 0.4.0 → 0.7.2。 单发一版的理由只有一个:依赖 pin 写在发布物的moon.mod元数据里——不发版, 用户moon add mldong/jeeflow-*拿到的仍是 0.20.3 那一代(本地编译走 workspace,证不到这一层)。 - 验证:三个 bump 逐个做、每步以全工程
moon check为验收人,三次读数都是 0 error / 11 warning(那 11 条即 0.1.13 里逐条证伪过不可摘的结构性误报,一条没多); T0 168/168、T1 仓储级 111 格、T1-F 门面级 104 格(真机 MySQL)、T2 全链路冒烟、 action manifest 46/46 全绿,八栈一致性快照consistency/moon.json载荷逐字节等值。 - 消费者侧回拉验证已固化为
scripts/pull_verify.sh:在临时工程里只从注册表装四包, 跑正向(processInstance/page⇒code=0含分页五键)与负向(未知 action ⇒99999999)两支, 并打印实际解析到的第三方代次(本版为 async 0.22.4 / moondb 0.2.0 / moonmysql 0.7.2)。 - API 与出口形状零变化:46 个 action、SPI 签名、错误码、JSON 出口与 0.1.13 完全一致, 升级 = 改一行版本号。
v0.1.13 — 2026-09-26
- 变更(新工具链适配轮,无行为变化):适配 moon 0.1.20260920 / moonc v0.10.14, 从"能编译"推到 0 error、诊断 629 → 11 条。采用的新形状:
impl方法不再被隐式提升为常规方法 ⇒ 补 48 条pub extend T with Trait::{…};try?全量塌成try { 块 } catch { 臂 }; 事务模板的收尾改errdefer(工具链声明try/catch将来不再捕获异步取消);substring(…)⇒ 切片s[a:b](38 处)、StringView 尾巴.to_string()⇒.to_owned()(42 处); 弃办fn meth(self : T)⇒fn T::meth(self : T);SPI provider 改带类型标注的箭头值。 - 两处对外形状收敛(消费方需知):
ProcessInstance/Task::resume⇒resume_from_interrupt(resume是工具链预留字;全仓 0 调用点,且不是跨栈契约名——契约只钉 action 串与 JSON 形状); 若干从不抛错的函数摘掉raise声明(含门面出口flow),效果收窄对调用方源码兼容。 - 判据未动:T0 168 例、T1 仓储级 111 格、T1-F 门面级 104 格、T2 全链路冒烟全绿; 八栈一致性快照
consistency/moon.json逐字节不变。 - 残留 11 条警告已逐条证伪"可摘"(8
unused_trait_bound+ 3unused_error_type): 它们是"只看函数体、不看调用链"的结构性误报——摘掉要么编译不过(本工具链效果不参与函数子类型), 要么只是把告警搬到另一行;条目级静音在这版无可用机制。证据与四种试法见MAINTAINING.md §1.3。 - 发版通道顺带修了一处:
publish.yml四模块改可重入(每步先moon update刷索引、 已在注册表则跳过)——0.1.13 首发就卡在"core 刚发完、索引没刷新,persist 解析不到jeeflow-core@0.1.13",重跑又撞重复发布。
v0.1.12 — 2026-09-26
- 变更(issues/120 附证:时钟基准):SQL 侧摘掉第二把钟——
repository-mysql六条写路径的NOW()全部改绑引擎钟(新增repo.now_v()),库里update_time/create_time与finish_time从此同基准(160 实测@@session.time_zone=+08:00,旧形状同行两列差 8 小时)。 facade/stats.mbt的逾期判据由裸@model.epoch_secs()(注入不了)改走current_time_str(), 与todayNew、写库列、委托生效窗同一把钟。- demo 时钟基准由宿主注入:环境变量
JEEFLOW_TZ_OFFSET(东为正小时,支持8/+8/-5/5.5/+05:30,上限 UTC+14;未配或非法 ⇒ 保持 UTC 并打印所选基准,不静默猜区)。线上演示站已带=8, 实例createTime与宿主墙钟同秒。 - 新增判据:
facade/stats_clock_test.mbt3 格(注入钟 = 真实 UTC − 12h 铺 ±1h 真窗, 带阳性对照)+ T1-I120 七格(六列 + 摘掉注入的对照组);变异对照实测"换成 DB 钟必红"。 - 读码所得:
moonbitlang/x/time的Zone::from_tzif2吃真实 tzdata 不报错但静默给Z;iceBear67/time的 wasm 臂是桩;moondb 把DATETIME(3)投成 Blob(按文本读回得<BLOB>)。
v0.1.11 — 2026-09-24
- 变更(issues/124 变量出口立法,对齐 Java v1.8.30 基准):
processInstance/detail出口variables更名为ext,variable原串退出任务行出口(facade/actions_main.mbt+facade/args.mbt);唯一出口 =ext(实例侧)+instanceExt(任务行侧),空变量出{};持久层variable列不动。 - 测试 162 例全绿;mooncakes 四模块
moon add全部可装——完整代次(四模块齐发,无半代次断档)。
v0.1.10 — 2026-09-23
- 变更(发布通道,零行为变更)四模块统一升 0.1.10,同仓依赖 pin 抬到已发布的 0.1.9 —— 解 0.1.9 只发出 core/persist 的接力问题(
moon publish的包体自检 vendored 的是注册表里的已发布 core,不吃本仓源码,机理见下节)。代码与 0.1.9 完全同源,无新增能力。 - 发版状态 ✅ tag
v0.1.10→ publish CI completed / success;外部回拉核验用moon add走注册表解析器本身(api/v3/...路径猜不中、mooncakes.io/docs/*是 SPA 壳恒返 200,两条探针都不成立):mldong/jeeflow-{core,persist,repository-mysql,facade}@0.1.10四件解析全通。moon test升 pin 前后同读数 162/162。 - ⚠️ 装配口径:MoonBit 侧请取 0.1.10 全套,不要把 0.1.9 当完整代次混装(0.1.9 只有 core/persist 在 mooncakes 上,按 0.1.9 拉 facade / repository-mysql 必失败)。demo 不发布,其 pin 不动。
v0.1.9 — 2026-09-23(⚠️ 仅 core / persist 两模块发布)
- 修复(委托判据取行顺序,对齐 Java 参考实现):
core/model/rows.mbt新增单条裁决ProcessSurrogate::is_effective(enabled严格 1 / 被委托人非空且非本人 / 窗口覆盖判定时刻,起止空 = 该侧不限、time传空串不比窗)+surrogate_scope_hit供两仓共用 ⇒ 双仓同答案由构造保证;内存仓拆掉扫描期过滤(pick_surrogate→newest_surrogate,只按 operator + 作用域取 id 最大);SQL 仓撤掉AND surrogate <> operator/AND enabled = 1/ 窗口谓词;精确作用域判否(含池空)后仍查全流程作用域的最新一条(不得判否即止)。新增 6 格内存仓用例 + smoke 双仓对拍 12 行 / 6 探针(含兜底格)。 - 变更
conn.mbt的 NULLenabled缺省由 1 改 0:撤掉 WHERE 谓词后 NULL 行会真被读到,缺省必须落在不生效侧(本栈enabled : Int非可空,表达不了 null)。 - 测试
moon test162/162(基线 156,+6)、moon check0 errors;变异对照:内存仓改回「先滤后取」逐格隔离跑 ⇒ 窗外 /enabled=0/ 脏值 2 / 自委托四格红,正向与兜底两格仍绿(red=4),cp 备份还原后 diff 无差异。未测:repository-mysql的 smoke 与 demo 的 T1(本机真库凭据未设),SQL 侧形状与内存侧同构。 - 跨栈验证 MoonBit 仅引擎、无框架集成仓 ⇒ 不进 13 栈门禁对拍面,本栈判据由 T0 162 例 + 双仓对拍自证;同批跨栈实证见其余七语言页的
L2-17。 - 发版状态 ⚠️ 本版只发出一半:CI run 的
Publish repository-mysql步退出 255,真错是Error: [4021] Value surrogate_scope_hit not found in package model(repository/repository_ext.mbt)。机理:moon publish会把产物解包后再moon check一遍,而包体校验阶段的依赖是从注册表 vendored 的已发布件取的——当时四模块的 pin 还停在 0.1.7,那份 core 里没有本轮新增的surrogate_scope_hit⇒ 本地moon test162 全绿而 CI publish 必红(同仓依赖「接力式 pin」:下一代发布前必须先把 pin 抬到已发布版本,否则自检永远看不到本仓新符号)。注册表实测 core@0.1.9 可解析、persist@0.1.9 可下载、facade@0.1.9 报no version satisfies requirement⇒ 同号重发必撞「版本已存在」,故四件统一升 0.1.10 收口(见上节)。 - 同批说明 退回上一步两格对外
msg的删码前缀(本栈两格原为中文带2001000x:前缀)已随上一代次落地,测试断言同时由「前缀匹配」升级为逐字相等(更强:前后缀回归都抓)——本版无该项遗留。
v0.1.8 — 2026-09-23
tag v0.1.8(01:50),单 commit 793f833。这一代次才是 MoonBit 的完整可装配版本。
- 修复(issues/121 文案口径):两格"退回上一步"的对外
msg删掉2001000x:码前缀 (本栈原为中文带前缀),对齐 Java 逐字文案与规范 06 §4.3 统一表。 - 发版通道(关键一步):同仓依赖 pin 由
0.1.0抬到0.1.7—— publish 的包体校验吃的是 注册表已发布件而非本仓源码,旧 pin 拉到的 vendored 版本带旧泛型语法,直接把 publish 卡死 (本地moon check只有 warning,CI 却是81 warnings, 2 errors,错位就在被 vendored 的依赖编译路径)。 - 发版状态 ✅ publish run
35763278556completed/success,逐步核验:Publish core/Publish persist/Publish repository-mysql/Publish facade四步全 success ⇒ 0.1.8 四模块齐发,可与 0.1.10 同代次混装(0.1.9 不行,见其节)。
v0.1.7 — 2026-09-22
tag v0.1.7(19:27),bump commit 2494efc。号已占死但只发出半代次 ⇒ 装配时不要指定 0.1.7。
- 新增(121 P1/P2 血缘回退 carry 口径):
persist_tasks建单写parent_task_id与行级isFirstTaskNode(830ea3e); 退回上一步改血缘版并拆开 3/6 共用分支(11f4bc6);门面ext.isFirstTaskNode改「行上值优先、存量行才现算」(a7f5e94); 无血缘用例补到三种形状并各自证明绑的是自己那条支路(97cb829)。 - 修复(issues/116):委托条款 1.1 补
trim——流程名带空白时委托曾静默失效(d6e96c7); 委托自动生效内置 +「我已办」判据与窗口比较同一把尺子(c82e360)。 - 120 时基:MoonBit 豁免(不注入时钟、不造 FFI),跨栈对拍面也不含本栈(仅引擎、无框架集成仓)。
- 发版状态 ⚠️ 半代次:publish run
35721568129completed/failure,逐步看是Publish core✅ →Publish persist✅ →Publish repository-mysqlfailure →Publish facadeskipped。 真错在被 vendored 的依赖编译路径(moon_mysql_client一带的 2 errors);mooncakes 版本号不可覆盖 ⇒ 0.1.7 这个号从此"有 core/persist、缺另两件",修复只能走 0.1.8(即上一节那条 pin 抬升)。
v0.1.6 — 2026-09-19
- 变更(本版主体)MySQL 依赖坐标随上游迁移到
moonbitstack(纯改名,零行为变化)——repository-mysql拉的 moonbit 官方 MySQL 驱动改了 org,代码与语义不动。 - 新增 PostgreSQL 建表 DDL
schema/schema-postgres.sql(8 表与 mysql 版同构),此前只有 mysql 一份,按 postgres 起库无从下手。 - CI 补
sync-cnworkflow,与六语言仓(java/go/python/node/rust/ui)同款模板:打v*tag 或手动触发时把master+ 全部 tag 同步到 Gitee / GitCode 国内镜像。 - 文档(对外口径一次性收敛,占本版绝大多数提交):门面 action 计数统一写
40+不写死精确数(历次 40/42/43/45 漂移的教训,历史版本节与 manifest 断言仍留精确值);公开文档清洗私有台账引用(不再出现issues/NNN、#NN);docs/只留用户文档、维护者向内容收拢到仓根MAINTAINING.md,其中内网主机字面值全换<DB_HOST>纯文本、from_env内置默认改指conn.mbt;import 示例改moon add <pkg>不钉版本;Quickstart clone 改 HTTPS(SSH 形式会卡死评审首步);README 补 Live demo 小节(jeeflow-demo.mldong.com/?lang=moon);修 mermaid 边标签反引号致 GitHub 渲染 Lexical error;发布通道三条错误归因更正留痕(403 归因、EXPECTED_MOON_VERSION守卫职责、latest与 yank 的关系)。 - 验证 本板未重跑引擎测试;该仓当前基线为
moon test156/156 +demo/cmd/t1_mysql(wasm→真机 MySQL)ALL PASS(2026-09-22 复跑读数)。 - 发版状态 tag
v0.1.6(2026-09-19 20:30 +0800)实证已打;mooncakes 四模块产物回拉验证本板未复核(站内 SPA,直接 curl 取不到版本列表),留作发版轮各 registry 统一核验的一条。
v0.1.5 — 2026-09-09
- 修复 五语言 SQL 仓聚合水合:
MysqlRepository::find_instance_by_id此前只查wf_process_instance单表,tasks硬编码[],门面processInstance/detail的 tasks/activeTaskList 恒空(gate26 L2-12 门禁真根因,非会签语义)。二次查wf_process_task(复用find_history_tasks:ORDER BY id+hydrate_tasks批查 actor_ids,事务内经open_or_tx复用环境连接,autocommit 独立连接语义不变)水合任务副本,语义对齐 JavafindTasksByInstanceId/ PHPPdoProcessRepository/ C#FindTasksInternalAsync(聚合水合口径)。update_instance本就不级联任务(仅实例行 state/variable/update_time),withdraw 逐任务路径不变。memory 仓本就水合(基线正确,未动);引擎核心会签语义未动。 - 测试 T0 新增
smoke.mbt::t1_i110_hydrate(T1 通道moon run --target wasm,真实 160 MySQL,9903xx 独立 id 段 +clean_9x自清理):引擎start_async发起 doing 实例 → 断言find_instance_by_id水合任务非空 + 带 actor_ids,且门面 detail 消费(遍历inst.tasks组 tasks/activeTaskList)非空。 - 验证
moon test --target wasm119/119 绿(单测套件未动);moon run repository-mysql/smokeT1 ALL PASS(M1–M5 + 新增 I110 五断言全过);moon check --target wasm全 workspace 无硬错误。 - 发版状态 ✅ 已发布(2026-09-09,publish run 34331706389 四模块全绿,mooncakes 产物实下回拉验证)。过程留痕:首轮卡点经全量日志更正为 latest 漂移(官方
latest前进到 0.1.20260904,被EXPECTED_MOON_VERSION守卫按设计拦截,非 CDN 403);owner 定调去掉版本守卫(latest 为向前别名只前进、发布不强校验)后 re-run 通过,配套0d23278适配新编译器 3 处旧式泛型(双编译器 T0 119/119 全绿)。发布通道策略定调见jeeflow-moon/docs/PUBLISH.md。
v0.1.4 — 2026-09-07
- 修复 instancePage/ccList 缺 operator 过滤(
core/memory/memory.mbt):page_instances此前全量构建 rows 不读query.operator(),任意用户「流程实例」页可见所有人实例 → 新增operator_eq(String 列版),实例 operator 即发起人(与 javat.operator EQ/JeeflowFacade.java:254同源,spec 06-facade §2.5);page_cc_instances补cc.actor_id = operator过滤(java:649同口径)。过滤在构建 rows 时执行,recordCount为过滤后计数(分页教训)。 - 核查 repository-mysql 路径无需改:
page_instances/page_cc_instances的 count/select 本就有AND pi.operator=?/AND cc.actor_id=?,与 memory/java 三方口径一致(无 式「OR create_user」偏宽)。 - 测试 T0 119 用例全绿(新增 instancePage/ccList operator 正负向 + 无 operator 全量回归);T1 wasm→160 mysql smoke ALL PASS(M1–M5,含 instancePage 分页五键 + operator 过滤回归)。
- 红线保持:
processSurrogate/page(我的委托)无过滤是全语言现状(T003 矩阵不变量 7 依赖),未动;page_todo_tasks/page_done_tasks行为不变(收口保持)。
v0.1.3 — 2026-09-06
- 修复 doneList 双缺陷:
page_done_tasks此前 define 传 None(行processDefineDisplayName恒 null,公网「我的已办」流程列整列「-」)且未应用 operator 过滤(混入他人任务)。照page_todo_tasks解析 instance→define + 新增done_operator_match按t.actor_id=我过滤(对齐 javat.operator EQ/ spec 06-facade doneList),过滤在算 total 前执行保证 recordCount=命中数。 - 变更 repository-mysql doneList operator 收敛
t.operator=?(原t.operator=? OR t.create_user=?过宽,对齐 java;T1 wasm→160 smoke ALL PASS)。 - 契约对齐 stats 一致性 4 处偏差随本版带出:overview
total按 stateIn 门控 /stuckApprover按 actor 关系逐人计数 /durationBucket固定 4 桶全枚举 / 分组平级确定序;新增一致性驱动demo/cmd/consistency(快照consistency/moon.json15/15 与 java/rust 逐字段全等)。 - 测试 T0 118 用例全绿(含 doneList 显示名非 null + operator 正负向 + 无过滤回归);tag
v0.1.3→ publish.yml CI 发 mooncakes 四模块(run 34046826425)+ demo-deploy 公网重建(run 34046826422);公网复核「我的已办」流程列非「-」且仅本人任务(API + 浏览器双证据)。
v0.1.2 — 2026-09-05
- 变更(发布通道)publish.yml CI 通道恢复(D-M5-4):装
latest工具链 +EXPECTED_MOON_VERSION守卫(漂移即 fail-fast)+moon update前置 +validate_only自检通道;tag 实战发版成功(run 33951631628,四模块生效)。 - 修复 stats overview 均值口径(D-M5-5):group/define 维 overview 改均值,本地 + 公网复核。
- 契约对齐 stats 计数/时长字段 JSON 类型与契约 §4.2 同口径(int),七语言类型断言 84 项 PASS;demo 公网
https://jeeflow-demo.mldong.com/moon-api,UI?lang=moon发起→待办→同意→state=20 全链路验证通过。
v0.1.1 — 2026-09-05
- 修复 0.1.0 的 parity 缺陷:Number→Int64/id 串转换 double 截断(雪花 id 超 2^53 后 T2 假绿,是否复现取决于 id 低位是否凑巧 double 可精确表示,health 门禁探不出)。5 处改 repr 优先:core/json
as_i64、facade/argsarg_actor_ids、core/engineparse_cc_actors、facade/outboundstringify_id_value(出口安全网同步加固)、repository-mysqlvalue_to_string(SQL 字面量)。 - 测试 T0 增大整数精度回归至 117 用例;demo-deploy.yml 部署后加 T2 冒烟门禁(数字 id 全链路,防假绿复发)。checklist 全绿:T0 117 / T1 160 / T2 多轮 / manifest 45 / mooncakes 回拉验证 PASS。
v0.1.0 — 2026-09-05(首发)
- MoonBit 首发版本(第 7 语言)。全异步架构(仓储 SPI / 引擎 / 门面全 async fn),DDD 聚合根 + 状态机 spec/03 全集,45 action 契约基线(与 java
JeeflowFacade实查双向无差集,manifest 固化),LogicFlow 解析 / 会签门控 / 事件三型 / 7 内置 AssignmentHandler。 - mooncakes 四模块拓扑序:core → persist → repository-mysql → facade(demo 不发布,
:8092内存/MySQL 双存储 + jeeflow-ui?lang=moon)。 - ⚠️ 本版含雪花 id double 截断缺陷,0.1.1 修复——外部装配请直接用 ≥0.1.1。