| ci(verify): 修首跑判红——安装事实改读 composer.lock(composer show 列格式把 awk 掏出一个冒号) | 13 天前 |
| fix(demo-init): 种子 CLI 路径同样注册 DemoUserProvider(issues/124)——demo-init 实证 25/25 种子实例带 u_realName、autoGenTitle 无缺姓名 | 12 天前 |
| feat(core,parser,handler): issues/142 A 批 从零补齐 custom 记录类一档(CustomModel+CustomNodeParser+按名注册表+历史行真落库) php 这一栈不是"形状偏了",是这条能力整个没有:ModelParser 只注册七档、无 custom 档 ⇒ snaker:custom 节点连同出边在解析期被 error_log+continue 吞掉。比普查写的更糟一条实测: 被丢节点的入边 target 为 null,TransitionModel.php:33 直接 $this->target->execute() ⇒ 办理动作硬崩(Call to a member function execute() on null),"记日志再跳过"其实跳不干净。 补齐后按 §6.2 三条落: - 新增 CustomModel/CustomNodeParser/CustomHandlerInterface/CustomHandlerRegistry (注册表沿用本栈 AssignmentHandlerRegistry 的形状挂在既有 ServiceContext 定位器上,不另起容器); ModelParser 只多注册一档,**查表方式一字未改、未做大小写归一与别名**(G4 义务 1/3 另批); - 历史行走独立列表(Execution.historyTasks)→ persistHistoryTasks 覆盖发起+办理两条漏斗 ⇒ **只 saveTask 发 INSERT,不进 processTaskList**:不发码 3(记录类出生即 20,混进去=广播假待办)、 不过 applySurrogate(别把代理人并进留痕行的参与者)、不出现在 executeProcessTask 返回值里; 子流程腿(EndProcessHandler)同样把父实例临时 exec 的历史行上收; - clazz 两档日志分别可诊断(空串/缺失 一档带 nodeId;非空未注册 一档带 clazz 原串+注册姿势), 两条都照常落行续流;处理器自身抛错、以及 methodName 指向不存在的方法 ⇒ 照旧外抛(后者 java 逐字同文案, 不在豁免面);args 逗号 key 从执行变量取实参、缺失档保留 null 位置(同 java), 返回值按 val/缺省 custom_return_val 落变量(那个零调用者常量本单接上)。 任务类腿**实读确认本来就合规**(CreateTaskHandler 无 actors 判空、ProcessTask 直收空集、PDO 侧任务行照 INSERT), 未动,只加一格 testTaskLegStillCreatesRowWithZeroActors 当回归钉(该格改前也绿)。 测试:新增 16 格(Core 14 + PDO/SQLite 真表 2,含"第二个仓储实例复用同连接再读"=证据在库里不在对象里、 待办只 audit 一条、expire_time/form_key/task_type 均 NULL 不造默认值)。 逐处还原实测改前会红:custom 档摘回未知类型 15 红(含 10 处 execute() on null 硬崩)/ 落库通道摘掉 9 红/两档还原成抛错 4 红。 既有格一条按裁定删除:UnknownNodeTypeDiagnosisTest::testCustomNodeInSharedFixtureIsDiagnosed ——它断言的正是"夹具里的 custom1 不进模型、只出未知档诊断"(注释还写着"本轮不新增 custom 档(owner 明确)", 那是 G4 C 方案当时的边界),与本单裁定正面互斥、且同方法内两条断言在摘掉第一条后仍会红; 义务 2 的诊断覆盖由同文件另两格继续守着,custom 的新形状由 CustomNodeRecordLegTest 反向钉住。 phpunit 两种口径 518 格 0 红(T0 Skipped 44/全跑 Skipped 37;基线 503)。 ProcessRepositoryInterface 零改动 ⇒ 上一轮 G2 那两个必选方法的致命账没有加重。 | 6 天前 |
| fix(core): issues/126 案 A 任务行 expire_time 五处写点按节点表达式真算(基准=boot2) 本栈原先只在**实例**级搬一次原串,且注释自承"不处理变量替换";任务行五处写点一个都没有, 也没有表达式求值器(§1.5 普查)。 - packages/core/src/Util/FlowUtil.php:50 新增 processTime() 三档(变量档→毫秒/日期串, 类型不认识落穿;Ns/Nm/Nh/Nd,d 走日历加不乘 86400;绝对档严格 Y-m-d H:i:s;失败 null, 任何分支不返回 now());:118 前缀非整数按 §1.9-3 走"落穿→null"(与 Java 抛 NumberFormatException 是故意差异:配置写错不该让建单卡死),注释里写明 - Domain/ProcessInstance.php:154 applyExpireTime / :169 applyNodeExpireTime(绕道路径的公开入口), 写点 :191 普通建单 / :227 串行首位 / :239 并行全员 / :299 回退新建(随行 vars); Handler/CountersignHandler.php:163 第五处=串行推进出的下一位成员; Handler/CreateTaskHandler.php 把节点表达式交给 helper(跳转新建走这条) - tests/Core/ExpireTimeOnCreateTest.php 六格:同行 expire−create≈2h、变量名档、未配两态、 解析不出、并行全员、回退新建;负向格把"行没读到"与"值为空"分开断 - SharedFlowParseTest 计数 15→16:新夹具 06-countersign-sequential-expire.json 进共享 flows, 注释按该测试既有惯例写明是谁加的、为什么(唯一一处既有断言改动,属台账计数不属判据) 三场景:正向 / 负向 / 回归 phpunit 全量 **Tests: 394, Assertions: 2935, Failures: 0, Skipped: 37** (37 skip 是改前基线同数,env 依赖)。变异对照两层都有牙:①求值换成 date('Y-m-d H:i:s') ⇒ 新件 6 跑 4 红("实得 0s"、"变量档期望 2026-12-31 10:00:00 实得 now");②摘掉第五处写点 ⇒ "推进新建的 第二成员 必须带到期时间 Failed asserting that null is not null",首成员格仍绿=红可归因。 两次均按 sha256 还原核对(ProcessInstance 74a99767… / CountersignHandler c6a825ec… == 变异前备份), grep MUTATION 零残留。未跑:T1(37 skip 沿用基线)、L2-27 跨栈门禁、镜像轮。 实例级 expire_time(JeeflowEngine.php:106 原串直搬)按 §1.9-2 只报不改。 | 8 天前 |
| feat(repository-pdo): §3-10 步骤③ schema-mysql.sql 副本改为编辑源逐字分发件+补 .gitattributes - 副本由手写 VARCHAR(64) 版换成 jeeflow-java 编辑源的逐字分发件:15 个 BIGINT id 列、14 条二级索引、 8 条表级 COMMENT、content 由 TEXT 变 BLOB 一起带入;与编辑源 diff 0 行(剥 CR 后逐字相同,与其余七栈同形) - 原副本首行那 58 行差异说明删除(差异已不存在),其中被实测确认为真的三条(IF NOT EXISTS 静默不生效、 1366 报错码、引擎侧 string 绑定/strId 归正/stringifyIds 三处等价)迁进 scripts/sync-schema.sh 的纳入注释留档 - 首行"对齐 Java schema-mysql.sql"这句自 08-11 起假了 50 天(09-30 才诚实化标注),本轮起变成真的 - 本仓此前无 .gitattributes,按 rust/csharp 同形补 *.sql text eol=lf(只加这一条,不动其它行尾规则); 现读两份 .sql 的 blob CR 字节数均为 0 ⇒ 不触发重规范化、零行尾漂移 - gate:分发幂等复跑后其余七仓 git status 全干净、只有本仓副本按预期变更; REQUIRE_MYSQL=1 全量 640 tests 4832 assertions Skipped 0 | 4 天前 |
| test(repository-pdo): §3-10 步骤① 真库种子 id 归正成数字串(66 处/22 种),为 schema 逐字分发让路 - 判据:任何被写进 BIGINT 列的字符串字面量;负向三枚('non-existent'/'no-such-id'/'no-such-task')按只读不改 ——STRICT_TRANS_TABLES 管写不管 SELECT,串被 cast 成 0 不报错、"查不到"仍成立,留着比归正更贴近真实坏输入 - 四种形状全扫:数组键 'id'、setter(setInstanceId/setTaskId)、仓储 API 首参(create 的 define 数组与 instanceId/parentId、 find*ById、createCcInstance)、裸 SQL 谓词里的**转义引号** \'inst-1\'(A:169;上一轮底账 §1.4 行号列了它, 但替换按 'inst-1' 匹配落不到——这一种形状启动词 §2.2 的"三种形状"没记,改前红样跑出 1 枚 Failure 才现形) - 号段按族划独占段,避免插值族整段撞号:bulk-d 920100+i / i-state 920160+i / t-state 920170+i / bulk-i 920180+i / bulk-t 920210+i / t-linked 920250+i;读侧 'bulk-d-25'→920125 与写侧公式同段配对 - 3 枚既有断言期望值随号段前进(A:112/113、B:182)——机理是 PdoValue::strId 把 BIGINT 读回成字符串, 不动则必红;判据强度不变(比的仍是同一个 id)。owner 2026-10-02 点名允许 - varchar 业务列零改动:name/display_name/content/actor_id/operator/form_key/parent_node_name/business_no 一个不碰('test-flow'/'flow-25'/'task1'/"task{\$i}"/"flow{\$i}"'cc1..cc5' 逐条守恒断言验过) - gate:改前红样 22 Errors,报错原文 SQLSTATE[HY000] 1366 Incorrect integer value(⇒ 启动词 §4 那句"1366 是错的、 实际 1292/22007"被实测推翻,副本头注释一直是对的);改后 repository-pdo 113/697 全绿、 全量 640 tests 4832 assertions Skipped 0(基线 4708/37 skip) | 4 天前 |
| refactor(flows): 流程定义解耦 java 仓,本仓自带 flows/ 副本 + 执行期精确镜像 - 新增 flows/(15 个 JSON 入库副本)+ jeeflow-flows-dir.php(仓根 resolver,composer psr-4 只发 packages/*,不打包)+ .dockerignore - 读路径只认本仓 flows/;java 兄弟目录存在时执行期全量镜像(复制+删孤儿) - 18 文件 30 处路径改用 jeeflow_flows_dir();新增 tests/bootstrap.php;Dockerfile.demo/CI 改单仓上下文 - docs 同步(15 个 + resolver 说明 + 会签段 issues/91 回灌) - 单语言用户下载即用,无需 checkout jeeflow-java | 1 个月前 |
| feat(repository-pdo): §3-10 步骤③ schema-mysql.sql 副本改为编辑源逐字分发件+补 .gitattributes - 副本由手写 VARCHAR(64) 版换成 jeeflow-java 编辑源的逐字分发件:15 个 BIGINT id 列、14 条二级索引、 8 条表级 COMMENT、content 由 TEXT 变 BLOB 一起带入;与编辑源 diff 0 行(剥 CR 后逐字相同,与其余七栈同形) - 原副本首行那 58 行差异说明删除(差异已不存在),其中被实测确认为真的三条(IF NOT EXISTS 静默不生效、 1366 报错码、引擎侧 string 绑定/strId 归正/stringifyIds 三处等价)迁进 scripts/sync-schema.sh 的纳入注释留档 - 首行"对齐 Java schema-mysql.sql"这句自 08-11 起假了 50 天(09-30 才诚实化标注),本轮起变成真的 - 本仓此前无 .gitattributes,按 rust/csharp 同形补 *.sql text eol=lf(只加这一条,不动其它行尾规则); 现读两份 .sql 的 blob CR 字节数均为 0 ⇒ 不触发重规范化、零行尾漂移 - gate:分发幂等复跑后其余七仓 git status 全干净、只有本仓副本按预期变更; REQUIRE_MYSQL=1 全量 640 tests 4832 assertions Skipped 0 | 4 天前 |
| feat: SQLite default + RepositoryFactory for demo persistence - Add PdoProcessExtRepository (design/surrogate tables) - Add RepositoryFactory (env: sqlite/mysql/memory) - Add bin/demo-init.php (idempotent schema + flow deploy) - Rewrite public/index.php to use RepositoryFactory - HTTP cross-request persistence verified (A→B→C→D) | 1 个月前 |
| refactor(flows): 流程定义解耦 java 仓,本仓自带 flows/ 副本 + 执行期精确镜像 - 新增 flows/(15 个 JSON 入库副本)+ jeeflow-flows-dir.php(仓根 resolver,composer psr-4 只发 packages/*,不打包)+ .dockerignore - 读路径只认本仓 flows/;java 兄弟目录存在时执行期全量镜像(复制+删孤儿) - 18 文件 30 处路径改用 jeeflow_flows_dir();新增 tests/bootstrap.php;Dockerfile.demo/CI 改单仓上下文 - docs 同步(15 个 + resolver 说明 + 会签段 issues/91 回灌) - 单语言用户下载即用,无需 checkout jeeflow-java | 1 个月前 |
| docs: 补 LICENSE/NOTICE(Apache-2.0, Copyright mldong),composer MIT→Apache-2.0,README 去版本 changelog Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 |
| docs: 补 LICENSE/NOTICE(Apache-2.0, Copyright mldong),composer MIT→Apache-2.0,README 去版本 changelog Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 |
| refactor(flows): 流程定义解耦 java 仓,本仓自带 flows/ 副本 + 执行期精确镜像 - 新增 flows/(15 个 JSON 入库副本)+ jeeflow-flows-dir.php(仓根 resolver,composer psr-4 只发 packages/*,不打包)+ .dockerignore - 读路径只认本仓 flows/;java 兄弟目录存在时执行期全量镜像(复制+删孤儿) - 18 文件 30 处路径改用 jeeflow_flows_dir();新增 tests/bootstrap.php;Dockerfile.demo/CI 改单仓上下文 - docs 同步(15 个 + resolver 说明 + 会签段 issues/91 回灌) - 单语言用户下载即用,无需 checkout jeeflow-java | 1 个月前 |
| docs: 补 LICENSE/NOTICE(Apache-2.0, Copyright mldong),composer MIT→Apache-2.0,README 去版本 changelog Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 |
| refactor(flows): 流程定义解耦 java 仓,本仓自带 flows/ 副本 + 执行期精确镜像 - 新增 flows/(15 个 JSON 入库副本)+ jeeflow-flows-dir.php(仓根 resolver,composer psr-4 只发 packages/*,不打包)+ .dockerignore - 读路径只认本仓 flows/;java 兄弟目录存在时执行期全量镜像(复制+删孤儿) - 18 文件 30 处路径改用 jeeflow_flows_dir();新增 tests/bootstrap.php;Dockerfile.demo/CI 改单仓上下文 - docs 同步(15 个 + resolver 说明 + 会签段 issues/91 回灌) - 单语言用户下载即用,无需 checkout jeeflow-java | 1 个月前 |
| refactor(flows): 流程定义解耦 java 仓,本仓自带 flows/ 副本 + 执行期精确镜像 - 新增 flows/(15 个 JSON 入库副本)+ jeeflow-flows-dir.php(仓根 resolver,composer psr-4 只发 packages/*,不打包)+ .dockerignore - 读路径只认本仓 flows/;java 兄弟目录存在时执行期全量镜像(复制+删孤儿) - 18 文件 30 处路径改用 jeeflow_flows_dir();新增 tests/bootstrap.php;Dockerfile.demo/CI 改单仓上下文 - docs 同步(15 个 + resolver 说明 + 会签段 issues/91 回灌) - 单语言用户下载即用,无需 checkout jeeflow-java | 1 个月前 |