)]}'
{
  "log": [
    {
      "commit": "d661eeae7a2322579f7c010355e117490f7aa146",
      "tree": "826be9817f0e047026c0f31b50dbbd88ea9657b0",
      "parents": [
        "22cf6e67a889eb8cfcc78cf394cdd5c0ec589592"
      ],
      "author": {
        "name": "wenjie liang",
        "email": "97488304+liang-wenjie@users.noreply.github.com",
        "time": "Wed Aug 12 10:12:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 10:12:58 2026 +0800"
      },
      "message": "[DSIP-18454][Scheduler] Add schedule missed fire policy (#18464)"
    },
    {
      "commit": "22cf6e67a889eb8cfcc78cf394cdd5c0ec589592",
      "tree": "92767395d1c2ea16c374885ee98339bbd39593de",
      "parents": [
        "db8ec273940812069f086f0eadcadb23d2b88b81"
      ],
      "author": {
        "name": "Sepuri Sai Krishna",
        "email": "saik20533@gmail.com",
        "time": "Tue Aug 11 11:41:30 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 14:11:30 2026 +0800"
      },
      "message": "[Fix-18538][Master] Schedule task retry at endTime + retryInterval (#18539)"
    },
    {
      "commit": "db8ec273940812069f086f0eadcadb23d2b88b81",
      "tree": "e5fc4fc5d857de19040ba83bc7d1137708b9406b",
      "parents": [
        "fde6e592d37372777bfa4424ecd6174e0563632f"
      ],
      "author": {
        "name": "Sepuri Sai Krishna",
        "email": "saik20533@gmail.com",
        "time": "Mon Aug 10 14:47:23 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 10 17:17:23 2026 +0800"
      },
      "message": "[Fix-18540][Master] Reset the runtime state when recreating a failed task instance (#18541)"
    },
    {
      "commit": "fde6e592d37372777bfa4424ecd6174e0563632f",
      "tree": "cd571e96aea9f56fa533a756e624d1ca55490c0b",
      "parents": [
        "51057477b815eef59c68f1b76563567814c72a93"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Mon Aug 10 14:38:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 10 14:38:25 2026 +0800"
      },
      "message": "[Doc-18474][Upgrade] Fix zh/en incompatible upgrade docs out of sync (#18478)"
    },
    {
      "commit": "51057477b815eef59c68f1b76563567814c72a93",
      "tree": "36e2dca58f8741d544eda1900ae733df46454742",
      "parents": [
        "d6ff33adb91b90fd30b1b3b3c31022ccbb7788bc"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Fri Aug 07 11:05:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 11:05:18 2026 +0800"
      },
      "message": "[Improvement-18441][API\u0026DAO] Optimize TaskInstanceMapper to exclude large text fields from list queries (#18442)"
    },
    {
      "commit": "d6ff33adb91b90fd30b1b3b3c31022ccbb7788bc",
      "tree": "3270edb11e21f1c37e295ecf8ae566a923bdad08",
      "parents": [
        "375234665081ccf9e56819580957842e0e3e84e9"
      ],
      "author": {
        "name": "huangrunxing",
        "email": "huangrunxingxing@163.com",
        "time": "Thu Jul 30 14:10:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 14:10:19 2026 +0800"
      },
      "message": "[Fix-18446] [task-sql] Persist sqlSource and sqlResource fields when saving SQL task node (#18447)"
    },
    {
      "commit": "375234665081ccf9e56819580957842e0e3e84e9",
      "tree": "46fea919375b2ae3ceb9e57fa96db50a65696fc3",
      "parents": [
        "db695440b764bd0f2b2125e9b7e67de83ca766d2"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Sun Jul 26 18:07:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 26 18:07:02 2026 +0800"
      },
      "message": "[Improvement-18439][API]Add composite index idx_project_start_time for workflow instance query (#18440)"
    },
    {
      "commit": "db695440b764bd0f2b2125e9b7e67de83ca766d2",
      "tree": "465f8b03372460a9198b04aa729267ccc0a3a1ff",
      "parents": [
        "c1cad902a986872fd022da6ba3c4628626241cd0"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Thu Jul 23 21:21:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 21:21:58 2026 +0800"
      },
      "message": "[Improvement-18437][API] Add index idx_project_submit_time for queryTaskInstanceListPaging (#18438)"
    },
    {
      "commit": "c1cad902a986872fd022da6ba3c4628626241cd0",
      "tree": "75ce36f32181680cd3754e9560883e3b17e94400",
      "parents": [
        "1f71cfcbd9f983ccaed48f2ffeb849f7e0eb2fd6"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Fri Jul 17 14:58:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 14:58:53 2026 +0800"
      },
      "message": "[Fix-18338] Check task if it\u0027s waiting for TaskGroup slot when pause/kill (#18414)"
    },
    {
      "commit": "1f71cfcbd9f983ccaed48f2ffeb849f7e0eb2fd6",
      "tree": "5d0eaef9f1cabc41a275499e5db0c37348936b41",
      "parents": [
        "65bfc935c9dd37db92206575cf0c991a4f12496b"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Wed Jul 15 17:55:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 17:55:11 2026 +0800"
      },
      "message": "[Fix-18406] Fix task instance failed but workflow instance remains in running state while using continue strategy with a blocked intermediate predecessor (#18415)"
    },
    {
      "commit": "65bfc935c9dd37db92206575cf0c991a4f12496b",
      "tree": "8ab1c68bb9d6ce10452ff5b43d2a4ca98a4a8cad",
      "parents": [
        "a60271d6c9c1050e0cb8bfdef9c0303233514655"
      ],
      "author": {
        "name": "Nikita Kuprins",
        "email": "61872798+nkuprins@users.noreply.github.com",
        "time": "Wed Jul 15 11:10:07 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 16:10:07 2026 +0800"
      },
      "message": "[Fix-18409][Common] Fix DAG.addEdge accepting an edge that creates a cycle when paths converge (#18410)"
    },
    {
      "commit": "a60271d6c9c1050e0cb8bfdef9c0303233514655",
      "tree": "1de1ffa620a62811f939608dc586182d1f0297e5",
      "parents": [
        "cf5704616fb9046ddf3958651cd3d55703e39f08"
      ],
      "author": {
        "name": "HomminLee",
        "email": "hommin84255@163.com",
        "time": "Wed Jul 15 14:49:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 14:49:30 2026 +0800"
      },
      "message": "[Improvement-18388][TASK] Killed shell tasks should be displayed as FAILURE (#18407)"
    },
    {
      "commit": "cf5704616fb9046ddf3958651cd3d55703e39f08",
      "tree": "14efdbacb94bea89e107826cdcd930a9b033430a",
      "parents": [
        "0e8db82a96935ee5f6b1dd314356b3dd4243651e"
      ],
      "author": {
        "name": "destinyoooo",
        "email": "57470814+destinyoooo@users.noreply.github.com",
        "time": "Tue Jul 14 00:00:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 00:00:29 2026 +0800"
      },
      "message": "[Improvement-18412][api] Fix missing validation for resource preview limit parameter (#18411)"
    },
    {
      "commit": "0e8db82a96935ee5f6b1dd314356b3dd4243651e",
      "tree": "4b9071b8713ae6f18d9b3182dac450ef8fcf53b5",
      "parents": [
        "e12fa9dab6bdff1e8b0313acb6166dce51efce0e"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Mon Jul 13 15:28:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 15:28:37 2026 +0800"
      },
      "message": "[Fix-18391] [Alert] Remove redundant plugin definition table existence check during AlertServer startup (#18392)"
    },
    {
      "commit": "e12fa9dab6bdff1e8b0313acb6166dce51efce0e",
      "tree": "28d5e3a998911c353fc73091331d5ce2606e558a",
      "parents": [
        "17ce56905b3f7760636dc4b7f1a719c9abb137c7"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Fri Jul 10 16:43:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 16:43:12 2026 +0800"
      },
      "message": "[Improvement-18403][API\u0026Security] Avoid raw password exposure in user parameter validation errors (#18404)"
    },
    {
      "commit": "17ce56905b3f7760636dc4b7f1a719c9abb137c7",
      "tree": "fe1b61dffa2c1058d2e542593ed7f32cbcca78c1",
      "parents": [
        "8592557809d2d041d9d727371c090aef82e4dcae"
      ],
      "author": {
        "name": "Yanjun Qiu",
        "email": "153984347+qiuyanjun888@users.noreply.github.com",
        "time": "Wed Jul 01 10:04:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:04:33 2026 +0800"
      },
      "message": "[Improvement-17933][api] Restrict audit logs for non-admin users (#18368)"
    },
    {
      "commit": "8592557809d2d041d9d727371c090aef82e4dcae",
      "tree": "d5d42843c84c6b8a6324781c604bab783c543ce2",
      "parents": [
        "3cfee610644b007211eacaaca92b8dd16f27569c"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Fri Jun 26 11:35:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 11:35:19 2026 +0800"
      },
      "message": "[Fix-18378] Fix list resources returned only 1000 records in s3 storage type (#18381)"
    },
    {
      "commit": "3cfee610644b007211eacaaca92b8dd16f27569c",
      "tree": "fcacc33d36703d9ee59a4d3ef170861fd37e624f",
      "parents": [
        "ced52f50b7576e85fc5bb76142fe927db09c5e87"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Tue Jun 23 15:46:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 15:46:18 2026 +0800"
      },
      "message": "[Fix-18307][API] The frontend is correctly using the preferred values of the associated project for task creating and workflow scheduling (#18308)"
    },
    {
      "commit": "ced52f50b7576e85fc5bb76142fe927db09c5e87",
      "tree": "c3b95a77f1425b405038dd902a71c4d2d6def954",
      "parents": [
        "2ed0975b793356ebbc3ccc15bfd8c16a8e719b73"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Tue Jun 23 14:43:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 14:43:14 2026 +0800"
      },
      "message": "[Chore] Fix auto labeler error (#18375)"
    },
    {
      "commit": "2ed0975b793356ebbc3ccc15bfd8c16a8e719b73",
      "tree": "c46b8f2afcbad254ec8b66aeb9c35856613ab7da",
      "parents": [
        "9cf0f15dd19cc8f1379f08ed4009bbea5647da86"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Tue Jun 23 11:28:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 11:28:34 2026 +0800"
      },
      "message": "[Chore] Remove sonar check (#18374)"
    },
    {
      "commit": "9cf0f15dd19cc8f1379f08ed4009bbea5647da86",
      "tree": "1ee91f83a6fde802881f02d18b4cfadacffa0c7a",
      "parents": [
        "869d9aa4e3afa27de3b7fc64af69861fe34ac0b7"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Mon Jun 22 16:25:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 16:25:27 2026 +0800"
      },
      "message": "[Chore] Fix sonar token leak (#18363)"
    },
    {
      "commit": "869d9aa4e3afa27de3b7fc64af69861fe34ac0b7",
      "tree": "02503d4d79ffcc412b71e3d818eeef270a5fb94f",
      "parents": [
        "6a442ab67318637d7e2135c1cfa3b7c6685104a4"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Mon Jun 22 10:26:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 10:26:44 2026 +0800"
      },
      "message": "[Fix-18247] Fix when forceTaskSuccess is performed on the last unsuccessful workflow instance, the workflow instance cannot be reset to the success state (#18351)"
    },
    {
      "commit": "6a442ab67318637d7e2135c1cfa3b7c6685104a4",
      "tree": "4e4a4d82c7167331fc19e8ef90a7da9e0721e51d",
      "parents": [
        "7a102f34f8ccf7ac77664c98f5b916ec2d845978"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Thu Jun 18 09:41:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 09:41:56 2026 +0800"
      },
      "message": "[Improvement-18359][UI] Change the description field to optional in k8s config  (#18360)"
    },
    {
      "commit": "7a102f34f8ccf7ac77664c98f5b916ec2d845978",
      "tree": "eb3e3d90c0794feef1a9f30bf33054b01b58bdac",
      "parents": [
        "a06a05f9e2d10a59fc9362371dd92e3526da94e7"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Wed Jun 17 14:59:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 14:59:08 2026 +0800"
      },
      "message": "[Fix-17794] Fix rerun workflow instance should follow the specified workerGroup parameter (#18352)"
    },
    {
      "commit": "a06a05f9e2d10a59fc9362371dd92e3526da94e7",
      "tree": "5c8d4c8e49b428234210057c292fb8c0cdb94683",
      "parents": [
        "c6dbc8989aa0a189b175d9b054e59134209c4d0d"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Wed Jun 17 14:25:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 14:25:04 2026 +0800"
      },
      "message": "[Improvement-17705] Add kill-application-when-task-failover logic (#18353)"
    },
    {
      "commit": "c6dbc8989aa0a189b175d9b054e59134209c4d0d",
      "tree": "cee047d4c51ed0259948667f670d3431be0761b9",
      "parents": [
        "76e6963bf02c3f8dd4e300ffe99493230c03d081"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Tue Jun 16 17:03:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 17:03:52 2026 +0800"
      },
      "message": "[Improvement-18354][UI] Change the description field to optional (#18355)\n\nCo-authored-by: xiangzihao \u003c460888207@qq.com\u003e"
    },
    {
      "commit": "76e6963bf02c3f8dd4e300ffe99493230c03d081",
      "tree": "38036ebcf89110194de24dc7d4076a478f9c0f93",
      "parents": [
        "d46079f7166b410ede518323a7a4054dec57b895"
      ],
      "author": {
        "name": "suyc",
        "email": "su_yichao@sina.com",
        "time": "Tue Jun 16 11:39:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 11:39:31 2026 +0800"
      },
      "message": "[Doc-18326][Parameter] Fix and Enrich the documentation for parameter priority. (#18327)\n\nCo-authored-by: xiangzihao \u003c460888207@qq.com\u003e"
    },
    {
      "commit": "d46079f7166b410ede518323a7a4054dec57b895",
      "tree": "e8c4fe1132190c67bacf71a78f7bc196d719ea46",
      "parents": [
        "9cea76be29f059752013432f33d8e5c6ae9286a7"
      ],
      "author": {
        "name": "eye-gu",
        "email": "734164350@qq.com",
        "time": "Mon Jun 15 10:07:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 10:07:44 2026 +0800"
      },
      "message": "[Fix-18346] countTaskInstanceStateByProjectCodes uses submit_time filtering (#18347)"
    },
    {
      "commit": "9cea76be29f059752013432f33d8e5c6ae9286a7",
      "tree": "32ad690c904f7f5ef1e4e2e45fd9c5b7581d994b",
      "parents": [
        "adb0c7d95132cf6126ba834bb1437ca37d7713e5"
      ],
      "author": {
        "name": "Yanjun Qiu",
        "email": "153984347+qiuyanjun888@users.noreply.github.com",
        "time": "Fri Jun 12 17:08:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 17:08:43 2026 +0800"
      },
      "message": "[Improvement-17563][Helm] Update mysql helm chart version (#18336)"
    },
    {
      "commit": "adb0c7d95132cf6126ba834bb1437ca37d7713e5",
      "tree": "b1139126c040d875e63718bf1cf3155120136f6d",
      "parents": [
        "18ea0cf1093871c8778a791f60fb8d25b7b1bde5"
      ],
      "author": {
        "name": "njnu-seafish",
        "email": "su_yichao@sina.com",
        "time": "Fri Jun 12 10:43:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 10:43:27 2026 +0800"
      },
      "message": "[Improvement-18332][Worker] Remove plaintext passwords from the logs (#18333)"
    },
    {
      "commit": "18ea0cf1093871c8778a791f60fb8d25b7b1bde5",
      "tree": "18ad1a0c3e350f00fcded0a2a3ffe18bdab2c776",
      "parents": [
        "386fc0ace2955bfcf0151729a484496e1bdd93e6"
      ],
      "author": {
        "name": "Victor Laborie",
        "email": "vlaborie@leni.tech",
        "time": "Fri Jun 12 04:08:01 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 10:08:01 2026 +0800"
      },
      "message": "[Fix-18340][Helm] Fix duplicate app.kubernetes.io/name label on ConfigMap (#18341)"
    },
    {
      "commit": "386fc0ace2955bfcf0151729a484496e1bdd93e6",
      "tree": "e2ede40b5573461918e602b914a531e9c5aead13",
      "parents": [
        "c9e373e30bda27f1d3fa6d0273264f03c2f2ccb6"
      ],
      "author": {
        "name": "eye-gu",
        "email": "734164350@qq.com",
        "time": "Wed Jun 10 20:28:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 20:28:15 2026 +0800"
      },
      "message": "[Fix-18330] Replace HashMap with ConcurrentHashMap in UserGroupInformationFactory to avoid ConcurrentModificationException (#18331)"
    },
    {
      "commit": "c9e373e30bda27f1d3fa6d0273264f03c2f2ccb6",
      "tree": "9564a21c107c54fc9a637920880fbcc0a9559913",
      "parents": [
        "9a86abea47ec5b94f7107bc35931f0d676004621"
      ],
      "author": {
        "name": "luxiaolong",
        "email": "lindaluo83@126.com",
        "time": "Sun Jun 07 12:20:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 07 12:20:37 2026 +0800"
      },
      "message": "[Fix-18304][API] Remove dead code after t_ds_relation_user_alertgroup table dropped (#18316)"
    },
    {
      "commit": "9a86abea47ec5b94f7107bc35931f0d676004621",
      "tree": "e4f7d1441513353aef9116f4777d4711e85b7186",
      "parents": [
        "63b837b032196b69e6474007d2876e8359a17a0a"
      ],
      "author": {
        "name": "njnu-seafish",
        "email": "su_yichao@sina.com",
        "time": "Fri Jun 05 18:17:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 18:17:24 2026 +0800"
      },
      "message": "[Doc-18322][Parameter] Add a note to the parameter priority documentation specifying and fix some issues (#18323)"
    },
    {
      "commit": "63b837b032196b69e6474007d2876e8359a17a0a",
      "tree": "ee51f6d793bfb92b83bb70643883246cf2d9bddf",
      "parents": [
        "123df9ffa46201e3b21a23bd2527b3b170bdac12"
      ],
      "author": {
        "name": "njnu-seafish",
        "email": "su_yichao@sina.com",
        "time": "Fri Jun 05 15:10:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 15:10:47 2026 +0800"
      },
      "message": "[Improvement-18040] [Doc] Update the parameter priority explanation in the docs. (#18321)"
    },
    {
      "commit": "123df9ffa46201e3b21a23bd2527b3b170bdac12",
      "tree": "1a236d2554065042b36dc16b7395a483da056e2e",
      "parents": [
        "7b336490c6c8b37fb533417786fa8e619f04ed88"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Thu Jun 04 16:35:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 16:35:02 2026 +0800"
      },
      "message": "[Chore] Hotfix 3.4.2 doc error (#18319)"
    },
    {
      "commit": "7b336490c6c8b37fb533417786fa8e619f04ed88",
      "tree": "082f07fb6654a6b1981d289c1fb5ae5034724148",
      "parents": [
        "f5dff77571aa7b8c4d9d847a8377c413e6e29c4c"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Thu Jun 04 09:27:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 09:27:12 2026 +0800"
      },
      "message": "[Chore] Release 3.4.2 (#18317)"
    },
    {
      "commit": "f5dff77571aa7b8c4d9d847a8377c413e6e29c4c",
      "tree": "bd5fabbd8a4cd195e4f95d464674167825ed11b0",
      "parents": [
        "eed37a9fa3c37f2f5823d56bbc3f5b95995fd1e7"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Tue Jun 02 05:50:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 11:50:37 2026 +0800"
      },
      "message": "[Chore] Add AGENTS.md + SECURITY.md to make the security model discoverable (#18310)"
    },
    {
      "commit": "eed37a9fa3c37f2f5823d56bbc3f5b95995fd1e7",
      "tree": "4abb49250413115f78177344d2735d886f9927d7",
      "parents": [
        "25c6a879991a69a29dc2148f276fa0a902252e57"
      ],
      "author": {
        "name": "陈家名",
        "email": "chenjiaming@kezaihui.com",
        "time": "Thu May 28 21:01:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 21:01:11 2026 +0800"
      },
      "message": "[Fix-18302][Common] Fix SQL license header parsing (#18301)"
    },
    {
      "commit": "25c6a879991a69a29dc2148f276fa0a902252e57",
      "tree": "1470a0a9f69b287af78e34344d7c33204659217b",
      "parents": [
        "e973efad927d38d1a3b7f10a65bb97d39a3474e1"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Thu May 28 14:32:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 14:32:57 2026 +0800"
      },
      "message": "[Fix-18299][API] Enforce access token owner checks (#18300)"
    },
    {
      "commit": "e973efad927d38d1a3b7f10a65bb97d39a3474e1",
      "tree": "920f1c7cf43b0273e30cb94b9c3943e666a7a4fc",
      "parents": [
        "8cd7aec07cc63657866c3e6929be237b56eb9937"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Tue May 26 18:50:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 18:50:09 2026 +0800"
      },
      "message": "[Fix-18292][Registry] Carry deleted node value in JDBC registry REMOVE event (#18296)\n\nThe JDBC registry built REMOVE events without eventData, so downstream\nlisteners (AbstractClusterSubscribeListener / AbstractHAServer) parsed a\nnull heartbeat, logged \"Unknown cluster change event\" and dropped the\nevent, leaving stale master/slot state in memory after ephemeral nodes\nwere purged.\n\nThread the deleted node value through onJdbcRegistryDataDeleted so the\nREMOVE event carries it as eventData, matching the ZooKeeper and Etcd\nregistries."
    },
    {
      "commit": "8cd7aec07cc63657866c3e6929be237b56eb9937",
      "tree": "c477095c48aee594745620a0f7c531693777346a",
      "parents": [
        "2cb705aef9b1d5c94f9618d2ebe97f2ca59014e5"
      ],
      "author": {
        "name": "Molin Wang",
        "email": "wcmolin@gmail.com",
        "time": "Tue May 26 11:30:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 11:30:42 2026 +0800"
      },
      "message": "[Improvement-18267][Remote Logging] Allow custom S3 region with endpoint (#18268)\n\nCo-authored-by: xiangzihao \u003c460888207@qq.com\u003e"
    },
    {
      "commit": "2cb705aef9b1d5c94f9618d2ebe97f2ca59014e5",
      "tree": "a42837ac7136bb04d906c2f56cdd6e7b8aadf1d6",
      "parents": [
        "3f90d20db0d2b057857bc70b91451a73c79cbe43"
      ],
      "author": {
        "name": "陈家名",
        "email": "chenjiaming@kezaihui.com",
        "time": "Sun May 24 10:14:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 24 10:14:35 2026 +0800"
      },
      "message": "[Doc] Fix English FAQ answer formatting (#18288)\n\nCo-authored-by: xiangzihao \u003c460888207@qq.com\u003e"
    },
    {
      "commit": "3f90d20db0d2b057857bc70b91451a73c79cbe43",
      "tree": "28281446252e2b2e502de045f1f37ae5b3647225",
      "parents": [
        "a08de7bb4feecf625735d87d8e57d70591061ec1"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 24 10:10:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 24 10:10:05 2026 +0800"
      },
      "message": "[Fix-18283][API] Add project permission check on workflow lineage and workflow-definition list endpoints (#18284)"
    },
    {
      "commit": "a08de7bb4feecf625735d87d8e57d70591061ec1",
      "tree": "b0bd5cb5ccc17ea043a3d3925151a67653b12332",
      "parents": [
        "cd8abbaa626d1b7da229fc6883cbb80b687428d6"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 22 09:40:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 09:40:51 2026 +0800"
      },
      "message": "[Fix-18276][API] Fix alert plugin instance permission check (#18279)"
    },
    {
      "commit": "cd8abbaa626d1b7da229fc6883cbb80b687428d6",
      "tree": "5dbdd7b1a081e8b82d426927645412f0d25ec794",
      "parents": [
        "8a3edb93d5ce590f7bb143978d0253750bb52e13"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Wed May 20 11:42:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 11:42:13 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route TaskDefinitionMapper access through TaskDefinitionDao (#18254)"
    },
    {
      "commit": "8a3edb93d5ce590f7bb143978d0253750bb52e13",
      "tree": "739500f0f55e5cd2c478ebef50535cb0ceefa4f0",
      "parents": [
        "adf2068c93b3da7a105d19a7cf824174ab2dc9bd"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Wed May 20 09:51:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 09:51:52 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route AlertGroupMapper and AccessTokenMapper access through repository Dao (#18261)"
    },
    {
      "commit": "adf2068c93b3da7a105d19a7cf824174ab2dc9bd",
      "tree": "f51f0790d05a5fdbd079a83745aa5bc378d9a4de",
      "parents": [
        "376d2149ce0e423866a26261fe4c8305d36707bc"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Tue May 19 11:48:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 11:48:00 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route ProjectUserMapper access through ProjectUserDao (#18262)"
    },
    {
      "commit": "376d2149ce0e423866a26261fe4c8305d36707bc",
      "tree": "35141d4b9c7110b82f2b90a7f61b8e903754ed31",
      "parents": [
        "49773e580a7b40b3aa689e8e156746ebc27e124e"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Tue May 19 11:10:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 11:10:52 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route QueueMapper access through QueueDao (#18263)"
    },
    {
      "commit": "49773e580a7b40b3aa689e8e156746ebc27e124e",
      "tree": "2081b7cb0b683701536cf555f9640eaa3f75e5a6",
      "parents": [
        "6af38d0d9bf6e1c10f6b5c987e69d85961056c2f"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Tue May 19 10:15:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 10:15:00 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route WorkflowInstanceMapper access through WorkflowInstanceDao (#18256)"
    },
    {
      "commit": "6af38d0d9bf6e1c10f6b5c987e69d85961056c2f",
      "tree": "3a459f8ab2dd0baa4afe5e9be84c555a4ff3d7b5",
      "parents": [
        "673b3615824c7e01d7435163e72509706b2e1605"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Mon May 18 21:47:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 21:47:40 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route DataSourceMapper and DataSourceUserMapper access through repository Dao (#18259)"
    },
    {
      "commit": "673b3615824c7e01d7435163e72509706b2e1605",
      "tree": "058ebb183a82747f0d205e443d5b809cc5f65751",
      "parents": [
        "f954412defc81a57d6b3a9514222785a38e292ec"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 17 22:28:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 22:28:02 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route WorkflowTaskRelationMapper access through WorkflowTaskRelationDao (#18260)"
    },
    {
      "commit": "f954412defc81a57d6b3a9514222785a38e292ec",
      "tree": "d02790fbc4d2b595033ec739b7e59dbcbdb61128",
      "parents": [
        "074c41c87a4dd478ef16e7c1489bfc49a2327445"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 17 19:47:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 19:47:01 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route UserMapper access through UserDao (#18253)"
    },
    {
      "commit": "074c41c87a4dd478ef16e7c1489bfc49a2327445",
      "tree": "2bb870c6dbcb5b5664b7c358113a92d2d0fff8d9",
      "parents": [
        "27784c62e7b45def6d5c1ca0cda65d4a6426b244"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sat May 16 12:04:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 16 12:04:40 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route TenantMapper access through TenantDao (#18258)"
    },
    {
      "commit": "27784c62e7b45def6d5c1ca0cda65d4a6426b244",
      "tree": "e1881ee16ba2a19da67a3d59151dc5a7d14dc116",
      "parents": [
        "9d3c0085fb2927d30dc37c5ddcbc222135b0cb93"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 15 17:48:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 17:48:57 2026 +0800"
      },
      "message": "[Chore][Docs] Add AGENT.md (#18271)\n\nCo-authored-by: xiangzihao \u003c460888207@qq.com\u003e"
    },
    {
      "commit": "9d3c0085fb2927d30dc37c5ddcbc222135b0cb93",
      "tree": "800c9a5d590fe567afb2f8ebd91fcda7163bf7ff",
      "parents": [
        "5c5dd9014544538211acdd0d25f63c65f2b52ae9"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 15 15:25:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 15:25:21 2026 +0800"
      },
      "message": "[Fix-18269][Master] Move LogicFakeTask to test scope (#18270)"
    },
    {
      "commit": "5c5dd9014544538211acdd0d25f63c65f2b52ae9",
      "tree": "3b82932d5c54839b44294925c5bd216265937b4c",
      "parents": [
        "4f42022ac78cbf7436ddb771fad5a931a4441b2e"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 15 12:25:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 12:25:00 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route ClusterMapper and K8sNamespaceMapper access through repository Dao (#18257)"
    },
    {
      "commit": "4f42022ac78cbf7436ddb771fad5a931a4441b2e",
      "tree": "abe4293c31d87ea92bbd15c64bc393ca05b21453",
      "parents": [
        "daea87bca989c6c10cb128c96fb9403b816c773d"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 15 11:37:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 11:37:14 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route TaskInstanceMapper access through TaskInstanceDao (#18252)"
    },
    {
      "commit": "daea87bca989c6c10cb128c96fb9403b816c773d",
      "tree": "f6c7ce5f3ae3f5490ede1b7bebb270c186c69163",
      "parents": [
        "f428e3d162ebcb53c9cbd8ec011f0282a0ab964e"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 15 09:32:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 09:32:43 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route ScheduleMapper access through ScheduleDao (#18251)"
    },
    {
      "commit": "f428e3d162ebcb53c9cbd8ec011f0282a0ab964e",
      "tree": "065f6aeab80d3f66ccbaf343ea3b098dd9ff64b7",
      "parents": [
        "3ec74298922b9ffa25f274438e4b674e394465f8"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Wed May 13 13:56:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 13:56:06 2026 +0800"
      },
      "message": "[Improvement-18249][DAO] Route ProjectMapper and WorkflowDefinitionMapper access through repository Dao (#18250)"
    },
    {
      "commit": "3ec74298922b9ffa25f274438e4b674e394465f8",
      "tree": "087bd5d66dc4e08730c5093b9c3e7b07da11fa7e",
      "parents": [
        "6fde27b162ac600e066308331d9768808ed5ebc4"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Tue May 12 11:44:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 11:44:02 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate ProjectService Map\u003cString,Object\u003e returns to typed returns (#18245)"
    },
    {
      "commit": "6fde27b162ac600e066308331d9768808ed5ebc4",
      "tree": "e3adb96dac65d4e6288d02627ef1ab922f6b953e",
      "parents": [
        "0524fa77bb4848a2cb80d9a2828a4b8becc6b87f"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Mon May 11 14:14:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 14:14:37 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate TaskGroupService and ExecutorService.forceStartTaskInstance to typed returns (#18233)\n\nCo-authored-by: xiangzihao \u003c460888207@qq.com\u003e"
    },
    {
      "commit": "0524fa77bb4848a2cb80d9a2828a4b8becc6b87f",
      "tree": "2455b6378a3008b177afa008609e69e5d4607211",
      "parents": [
        "ac9741bf03bc7f61356f689c00434dfe42aadb36"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Mon May 11 11:54:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 11:54:27 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate WorkflowDefinitionService Map\u003cString,Object\u003e returns to typed returns (#18236)"
    },
    {
      "commit": "ac9741bf03bc7f61356f689c00434dfe42aadb36",
      "tree": "58207bca76e51cee2c491a373804679b8c8faf24",
      "parents": [
        "b589e4fef759309f38746015d218d15823f610f0"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Mon May 11 09:07:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 09:07:19 2026 +0800"
      },
      "message": "[Chore][Docs] Refresh commit message convention to match current practice (#18242)"
    },
    {
      "commit": "b589e4fef759309f38746015d218d15823f610f0",
      "tree": "d7391c9e005e165614af3063a0361d01f278dbb2",
      "parents": [
        "1149e9aaa39aab079d1669b9006471f2cf45c2ac"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 10 22:18:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 22:18:31 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate UsersService Map\u003cString,Object\u003e returns to typed returns (#18234)\n\nRefactor 17 UsersService methods that returned Map\u003cString, Object\u003e to\ntyped returns / void with ServiceException, mirroring the pattern\nestablished by EnvironmentService.\n\nMethods migrated:\n- createUser(8 args) -\u003e User\n- deleteUserById -\u003e void\n- grantProject / grantProjectWithReadPerm / grantProjectByCode -\u003e void\n- revokeProject / revokeProjectById -\u003e void\n- grantNamespaces / grantDataSource -\u003e void\n- getUserInfo -\u003e User (tenantCode / alertGroup / timeZone populated, password stripped)\n- queryAllGeneralUsers / queryUserList(User) -\u003e List\u003cUser\u003e\n- unauthorizedUser / authorizedUser -\u003e List\u003cUser\u003e\n- registerUser / activateUser -\u003e User\n- batchActivateUser -\u003e Map\u003cString, Object\u003e (kept Map; nested success/failed\n  buckets keep wire field names byte-for-byte)\n\nbatchActivateUser switches its inner loop to a try/catch around\nactivateUser since activateUser now throws ServiceException; the wire\nshape (success.{sum, userName} / failed.{sum, info}) is unchanged.\n\nUsersController forwards typed values via Result.success and the\nauthorizedUser endpoint drops its bespoke try/catch since\nApiException + ApiExceptionHandler now provide the equivalent fallback.\n\nPythonGateway.deleteUser already discarded the return value, so the\nvoid return causes no Py4J impact. The other Py4J / SSO callers all\nuse the already-typed createUser overloads.\n\nFull module test suite: 682 tests, 0 failures."
    },
    {
      "commit": "1149e9aaa39aab079d1669b9006471f2cf45c2ac",
      "tree": "06d9e71f520fc4bc2af69083685eee376e21dd17",
      "parents": [
        "a5cddc8ffceaefefa92cbf9de8048654a86eabe3"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 10 21:07:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 21:07:11 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate small-service Map\u003cString,Object\u003e returns to typed returns (#18230)\n\nBatch-migrate seven Map\u003cString, Object\u003e methods across five small services\nto typed return / void + ServiceException, with cascading updates to the\ncontrollers, PythonGateway and unit tests:\n\nTenantService\n- queryByTenantCode(String): Tenant (nullable; only consumed by PythonGateway)\n\nTaskGroupQueueService\n- queryTasksByGroupId(...): PageInfo\u003cTaskGroupQueue\u003e\n\nProjectWorkerGroupRelationService\n- queryAssignedWorkerGroupsByProject(User, Long): List\u003cProjectWorkerGroup\u003e\n\nUiPluginService\n- queryUiPluginsByType(PluginType): List\u003cPluginDefine\u003e\n- queryUiPluginDetailById(int): PluginDefine\n\nEnvironmentWorkerGroupRelationService\n- queryEnvironmentWorkerGroupRelation(Long): List\u003cEnvironmentWorkerGroupRelation\u003e\n- queryAllEnvironmentWorkerGroupRelationList(): List\u003cEnvironmentWorkerGroupRelation\u003e\n\nHTTP wire format is preserved:\n* Standard endpoints (TaskGroup, UiPlugin) now wrap the typed return in\n  Result.success(data); ApiExceptionHandler converts ServiceException to\n  the same Result(code, msg) shape that BaseController.returnDataList(map)\n  produced.\n* The non-standard ProjectWorkerGroupController.queryAssignedWorkerGroups\n  endpoint still returns a raw Map\u003cString, Object\u003e; the controller now\n  builds the {STATUS, MSG, DATA_LIST} map from the typed service return so\n  the JSON body remains byte-for-byte identical on success. Permission\n  failures translate the legacy hasProjectAndPerm(Map) status into a\n  ServiceException, so the error path now goes through ApiExceptionHandler\n  (Result shape) instead of the raw Map.\n\nPy4J boundary is preserved: PythonGateway.queryTenantByCode now returns\nthe Tenant directly from the service (still null on miss, matching the\nprevious behavior where DATA_LIST was unset).\n\nExecutorService.forceStartTaskInstance is intentionally deferred — its\nonly caller is TaskGroupServiceImpl.forceStartTask, which itself returns\nMap\u003cString, Object\u003e and is part of the larger TaskGroupService migration.\nMigrating it now would require a temporary Map-rebuild in TaskGroupServiceImpl\nthat the next PR would immediately undo.\n\nPart of the migration series tracked by #18224."
    },
    {
      "commit": "a5cddc8ffceaefefa92cbf9de8048654a86eabe3",
      "tree": "b8fa547019897e95ca62202e18e075b29058aad3",
      "parents": [
        "b9153fbd60878e7c8ac22477d55c45bfb71ed8f9"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 10 20:12:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 20:12:17 2026 +0800"
      },
      "message": "[Fix-18222][JdbcRegistry] Reuse a singleton scheduler executor in JdbcRegistryThreadFactory (#18223)\n\n* [Fix-18222][JdbcRegistry] Reuse a singleton scheduler executor in JdbcRegistryThreadFactory\n\nJdbcRegistryThreadFactory#getDefaultSchedulerThreadExecutor returned a\nfreshly created ScheduledExecutorService on every call, so the four\nscheduleWithFixedDelay sites in JdbcRegistryServer#start and\nJdbcRegistryDataManager#start each ran on their own pool, while the\nshutdown/shutdownNow calls in JdbcRegistry#close and\nJdbcRegistryServer#close closed yet another empty pool instead of the\nrunning ones. Daemon threads kept this from leaking on JVM exit, but the\nlogic was inconsistent and the process held 4x the configured scheduled\nthreads.\n\nCache the executor as a lazy singleton (double-checked locking with\nvolatile) so all callers share one pool and the close calls land on the\nactually-running pool.\n\n* [Fix-18222][JdbcRegistry] Bind scheduler executor to JdbcRegistryServer instance\n\nThe JdbcRegistryThreadFactory class held a JVM-global singleton\nscheduled executor. Multiple JdbcRegistryServer instances (tests,\nembedded StandaloneServer) shared the same pool, blurring lifecycle\nownership and forcing JdbcRegistry#close() to shutdownNow() on a pool\nthat other instances might still be using.\n\nMove the executor onto JdbcRegistryServer as an instance field, inject\nit into JdbcRegistryDataManager via the constructor, and shut it down\nin JdbcRegistryServer#close(). The state-guard at the top of the\nperiodic tasks short-circuits any task that observes STOPPED, so a\ngraceful shutdown() — combined with daemon threads — is enough to stop\nthe JVM stalling.\n\nDelete the now-unused JdbcRegistryThreadFactory class and its test;\nthe test only covered JDK ScheduledExecutorService basics and the\nstatic singleton identity that no longer exists."
    },
    {
      "commit": "b9153fbd60878e7c8ac22477d55c45bfb71ed8f9",
      "tree": "a2567377c9850a0cb72c57441b86b18f7e374d86",
      "parents": [
        "f5accbcddae9fec64c5b43e3df0dcca42af352e7"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 10 19:40:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 19:40:32 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate WorkflowInstanceService Map\u003cString,Object\u003e returns to typed returns (#18232)\n\nMigrate 9 service methods from Map\u003cString,Object\u003e returns to typed returns\nor void with ServiceException, following the EnvironmentService pattern.\n\nMethods migrated:\n- queryTopNLongestRunningWorkflowInstance -\u003e List\u003cWorkflowInstance\u003e\n- queryWorkflowInstanceById -\u003e WorkflowInstance\n- queryTaskListByWorkflowInstanceId -\u003e WorkflowInstanceTaskListDTO (new)\n- querySubWorkflowInstanceByTaskId -\u003e Map\u003cString,Integer\u003e (single-key)\n- updateWorkflowInstance -\u003e WorkflowDefinition\n- queryParentInstanceBySubId -\u003e Map\u003cString,Integer\u003e (single-key)\n- viewVariables -\u003e WorkflowInstanceVariablesDTO (new)\n- viewGantt -\u003e GanttDto\n- queryByTriggerCode -\u003e List\u003cWorkflowInstance\u003e\n\nTwo new DTOs encapsulate the multi-field payloads:\n- WorkflowInstanceTaskListDTO (workflowInstanceState + taskList)\n- WorkflowInstanceVariablesDTO (globalParams + localParams)\n\nThe single-field nested-id payloads (subWorkflowInstanceId,\nparentWorkflowInstance) keep their wire shape via Map\u003cString,Integer\u003e.\n\nError paths uniformly throw ServiceException; the HTTP wire format is\npreserved by ApiExceptionHandler converting the exception to the same\nResult(code, msg) shape that putMsg produced.\n\nWorkflowInstanceController forwards typed values through Result.success;\nbatchDeleteWorkflowInstanceByIds uses Result.errorWithArgs for the\ndeleteFailed branch.\n\nWorkflowInstanceService and WorkflowInstanceController have no\nPythonGateway / cross-service callers, so the migration is fully\ncontained within these files plus the two test updates."
    },
    {
      "commit": "f5accbcddae9fec64c5b43e3df0dcca42af352e7",
      "tree": "cfaef9b5a211e852f129a90ed1e764497f80123c",
      "parents": [
        "8ff3558f1c15b7dd7ba76b26a669333f6da775ef"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 10 18:59:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 18:59:26 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate TaskDefinitionService Map\u003cString,Object\u003e returns to typed returns (#18229)\n\nRefactor 7 TaskDefinitionService methods from Map\u003cString, Object\u003e to typed\nreturn / void + ServiceException, with cascading updates to controller,\nPythonGateway and unit test:\n\n- queryTaskDefinitionByName(...): TaskDefinition\n- updateTaskWithUpstream(...): Long (the updated task code)\n- switchVersion(...): void\n- deleteByCodeAndVersion(...): void\n- queryTaskDefinitionDetail(...): TaskDefinitionVO\n- genTaskCodeList(Integer): List\u003cLong\u003e\n- releaseTaskDefinition(...): void\n\nThe private updateTask helper now throws ServiceException for every error\npath; it still returns null for the \"task body unchanged\" case so the\npublic method can short-circuit when both the body and upstream relations\nare unchanged. As a side effect this fixes a latent bug in\nupdateTaskWithUpstream where any error from the helper was silently\noverridden with SUCCESS whenever the new and existing upstream code sets\nhappened to match (e.g. TASK_DEFINE_NOT_EXIST returned 200 OK). No test\ncovered that edge case.\n\nA small private helper requireProjectAndWritePerm replaces the inline\nhasProjectAndWritePerm(Map) call sites; ProjectService remains untouched\nand will be migrated last in the #18224 series.\n\nHTTP wire format is preserved: ApiExceptionHandler converts ServiceException\nto the same Result(code, msg) shape that BaseController.returnDataList(map)\nproduced; success paths use Result.success(data) matching the prior JSON\nbody byte-for-byte.\n\nPy4J boundary is preserved: PythonGateway.genTaskCodeList still returns\nMap\u003cString, Object\u003e with the same {STATUS, MSG, DATA_LIST} keys, now\nconstructed in the wrapper from the service\u0027s typed return.\n\nPart of the migration series tracked by #18224."
    },
    {
      "commit": "8ff3558f1c15b7dd7ba76b26a669333f6da775ef",
      "tree": "cd15032c7a0637124e4d06328fb84545d636babf",
      "parents": [
        "7e518396909e6a67ea2fb9cb3949c5ea10cfe32f"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 10 16:50:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 16:50:59 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate WorkerGroupService Map\u003cString,Object\u003e returns to typed returns (#18228)"
    },
    {
      "commit": "7e518396909e6a67ea2fb9cb3949c5ea10cfe32f",
      "tree": "5a31130ed2f7cdbc797714e66b3641fc5b3971ab",
      "parents": [
        "86c6844014c063e74fea59bd52b915fffc06f113"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 10 13:30:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 13:30:42 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate SchedulerService Map\u003cString,Object\u003e returns to typed returns (#18226)\n\nRefactor 5 SchedulerService methods from Map\u003cString, Object\u003e to typed\nreturn + ServiceException, with cascading updates to the controller,\ncontroller test and PythonGateway:\n\n- insertSchedule(...): Schedule\n- updateSchedule(...): Schedule\n- queryScheduleList(User, long): List\u003cScheduleVO\u003e\n- previewSchedule(User, String): List\u003cString\u003e\n- updateScheduleByWorkflowDefinitionCode(...): Schedule\n\nHTTP wire format is preserved: ApiExceptionHandler converts ServiceException\nto the same Result(code, msg) shape that BaseController.returnDataList(map)\nproduced; success paths use Result.success(data) matching the prior JSON\nbody byte-for-byte. The private updateSchedule helper now throws on\nvalidation failure and returns the persisted Schedule on success, replacing\nthe Map-mutation contract.\n\nPy4J boundary is preserved: PythonGateway.createOrUpdateSchedule reads the\nnew scheduleId via Schedule#getId() instead of result.get(\"scheduleId\"),\nso Python SDK clients see no behavior change.\n\nPart of the migration series tracked by #18224."
    },
    {
      "commit": "86c6844014c063e74fea59bd52b915fffc06f113",
      "tree": "3310de0a1276ddc85f9c2fa0f30f7c8256984a3c",
      "parents": [
        "835c49529035e83b32cec1caa4b7769cf08bb25d"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 10 12:38:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 12:38:31 2026 +0800"
      },
      "message": "[Chore][Master] Quietly exit WorkerGroupDispatcher loop on interrupt (#18240)\n\nWorkerGroupDispatcher#run consumed TaskDispatchableEventBus#take() which\nwas annotated with @SneakyThrows, so an InterruptedException raised when\nthe master shuts down (the dispatch thread is parked on the queue) was\nrethrown as a RuntimeException and surfaced with a full stack trace —\nalarming \"thread died\" noise during a perfectly graceful shutdown.\n\nDrop @SneakyThrows from take() so it declares InterruptedException, and\nlet the dispatch loop catch it: re-set the interrupt flag, log a single\ninfo line, and return so the daemon thread exits cleanly.\n\nAlso clamp the dispatch-retry waiting time to \u003e\u003d 1s so a freshly-counted\nfailure does not immediately re-enqueue the task against the same\nunhealthy worker group.\n\nIn addition, document how to run dolphinscheduler-master tests in the\nmodule\u0027s CLAUDE.md: no Docker required, watch out for stale JaCoCo\nclasses, surefire forks 4 JVMs in parallel, and the trailing\n\"kill self fork JVM ... 30 seconds after System.exit(0)\" line is a\nharmless warning."
    },
    {
      "commit": "835c49529035e83b32cec1caa4b7769cf08bb25d",
      "tree": "653ab8c3e39b8e4c8a28e5a7aca97bc64582b7f4",
      "parents": [
        "713e53a9d4a4ee4ba0525bdca6451f8e5afa2802"
      ],
      "author": {
        "name": "yueqingshu",
        "email": "llphxdgg@gmail.com",
        "time": "Sun May 10 09:33:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 09:33:51 2026 +0800"
      },
      "message": "[Fix-18239] [Docs] Fix outdated Spark documentation links (#18241)\n\nCo-authored-by: xiangzihao \u003c460888207@qq.com\u003e"
    },
    {
      "commit": "713e53a9d4a4ee4ba0525bdca6451f8e5afa2802",
      "tree": "9c2fcee2d77f230cff317d1db91670f9f8a64f05",
      "parents": [
        "16044f72afc1c7e1518c8a331f9de82990e0a2b5"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 10 08:22:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 08:22:12 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate K8sNamespaceService Map\u003cString,Object\u003e returns to typed returns (#18227)\n\nRefactor 4 K8sNamespaceService methods from Map\u003cString, Object\u003e to typed\nreturn / void + ServiceException, with cascading updates to the controller\nand unit test:\n\n- registerK8sNamespace(User, String, Long): K8sNamespace\n- deleteNamespaceById(User, int): void\n- queryUnauthorizedNamespace(User, Integer): List\u003cK8sNamespace\u003e\n- queryAuthorizedNamespace(User, Integer): List\u003cK8sNamespace\u003e\n\nHTTP wire format is preserved: ApiExceptionHandler converts ServiceException\nto the same Result(code, msg) shape that BaseController.returnDataList(map)\nproduced; success paths use Result.success(data) matching the prior JSON\nbody byte-for-byte.\n\nNo Py4J impact: K8sNamespaceService is not exposed via PythonGateway.\n\nPart of the migration series tracked by #18224."
    },
    {
      "commit": "16044f72afc1c7e1518c8a331f9de82990e0a2b5",
      "tree": "67d5563fd2edb301bdbc17065b145780cdf0920a",
      "parents": [
        "9c5808c34c5477e0e309fc4d4c362f2832c70544"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sat May 09 15:16:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 09 15:16:10 2026 +0800"
      },
      "message": "[Improvement-18224][API] Migrate EnvironmentService Map\u003cString,Object\u003e returns to typed returns (#18225)"
    },
    {
      "commit": "9c5808c34c5477e0e309fc4d4c362f2832c70544",
      "tree": "054270d79c4bdc1e2d679af76b7c05063850a59d",
      "parents": [
        "fe368053c2358d5afaa46c5974a6eabf4bebcd30"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Thu May 07 22:03:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 22:03:16 2026 +0800"
      },
      "message": "[Chore][API] Remove deprecated ProjectService#checkProjectAndAuth (#18218)\n\nMigrate all internal callers to checkProjectAndAuthThrowException and drop\nthe two @Deprecated overloads (Map-returning and Result-mutating) along\nwith the unused private getCheckResult helper. Tests are updated to mock\nthe new throwing API via doThrow / doNothing and assert exceptions\ninstead of inspecting result-map status codes. Permission failures now\nflow through ApiExceptionHandler, preserving the wire format."
    },
    {
      "commit": "fe368053c2358d5afaa46c5974a6eabf4bebcd30",
      "tree": "4c41e5a9c1dbd236deb17167d0ccde2a65ea64bd",
      "parents": [
        "00550017032e9219c8b9900b1161093cc3949d88"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Thu May 07 19:51:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 19:51:37 2026 +0800"
      },
      "message": "[Chore] Hotfix ut ci (#18221)"
    },
    {
      "commit": "00550017032e9219c8b9900b1161093cc3949d88",
      "tree": "8f50bebd843b47669b3ada7422bd3fb9806a6932",
      "parents": [
        "756f2f248b2297d5adec8f3c6eceffa092b9ef52"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Wed May 06 13:49:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 13:49:06 2026 +0800"
      },
      "message": "[Chore] Unit-Test optimize (#18214)"
    },
    {
      "commit": "756f2f248b2297d5adec8f3c6eceffa092b9ef52",
      "tree": "309ebd1660c72ba479d7dab3bddf17b6d48a23a2",
      "parents": [
        "5f11cc2d28437f163f5a3a5f4909c22b21e8442c"
      ],
      "author": {
        "name": "leocook",
        "email": "leocook@163.com",
        "time": "Mon May 04 17:07:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 17:07:27 2026 +0800"
      },
      "message": "[Fix-18201][TaskPlugin] Fix RemoteShell task NullPointerException and… (#18210)"
    },
    {
      "commit": "5f11cc2d28437f163f5a3a5f4909c22b21e8442c",
      "tree": "a6929da5df0ef9d01f68191558a504355daa968c",
      "parents": [
        "7611941d97671173e326e9294810c4b96f52a24c"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sun May 03 13:50:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 03 13:50:27 2026 +0800"
      },
      "message": "[Fix][API] Add missing project authorization on view-gantt/view-variables and trigger workflow APIs (#18212)\n\nThe view-gantt / view-variables endpoints on WorkflowInstanceController\nand the start-workflow-instance / batch-start-workflow-instance\nendpoints on ExecutorController did not verify that the login user had\npermission on the URL projectCode, allowing any authenticated user to\nread another project\u0027s workflow instance details or trigger another\nproject\u0027s online workflows.\n\n* WorkflowInstanceServiceImpl#viewVariables/viewGantt now require\n  loginUser and call projectService.checkProjectAndAuthThrowException\n  with WORKFLOW_INSTANCE before reading the instance.\n* WorkflowTriggerRequest / WorkflowBackFillRequest carry the URL\n  projectCode. ExecutorServiceImpl#triggerWorkflowDefinition /\n  backfillWorkflowDefinition gate the call with\n  checkProjectAndAuthThrowException(RERUN) and reject when the\n  resolved workflowDefinition does not belong to that projectCode.\n* ExecutorController and PythonGateway propagate projectCode into the\n  request builders. batchTriggerWorkflowDefinitions also accepts the\n  path variable so the inner per-code call inherits it.\n* Both ProjectService#checkProjectAndAuth overloads are marked\n  @Deprecated; new code should use checkProjectAndAuthThrowException.\n* New ExecutorServiceTest covers the unauthorized and cross-project\n  trigger/backfill paths; existing WorkflowInstance tests are updated\n  to the new viewVariables/viewGantt signatures."
    },
    {
      "commit": "7611941d97671173e326e9294810c4b96f52a24c",
      "tree": "2b1355ba493220eabaf7c6dac65d0d5bd7d2cc39",
      "parents": [
        "dd8857b84c65c663fd0a494f1a7828a69648eba5"
      ],
      "author": {
        "name": "includetts",
        "email": "117636492+includetts@users.noreply.github.com",
        "time": "Sun May 03 11:19:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 03 11:19:59 2026 +0800"
      },
      "message": "[Fix-18177][Task Plugin] Fix AliyunServerlessSpark plugin dependency conflicts and improve exception handling (#18180)\n\nCo-authored-by: xiangzihao \u003c460888207@qq.com\u003e"
    },
    {
      "commit": "dd8857b84c65c663fd0a494f1a7828a69648eba5",
      "tree": "666e627dccbc484811f26cbcd0d3bf0de84a4a52",
      "parents": [
        "5c85e15a8b96d4449c53c0260a72e3ae59c81253"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Sat May 02 21:08:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 02 21:08:25 2026 +0800"
      },
      "message": "[Chore] Recover python e2e test in ci (#18209)"
    },
    {
      "commit": "5c85e15a8b96d4449c53c0260a72e3ae59c81253",
      "tree": "5936b81c2a9cede8f4368bf79ab1df11c2c43252",
      "parents": [
        "9563c66627c8d62b0225bd45cd7174d6d4381786"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Sat May 02 20:22:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 02 20:22:45 2026 +0800"
      },
      "message": "[Chore] Unit-Test performance optimize (#18213)"
    },
    {
      "commit": "9563c66627c8d62b0225bd45cd7174d6d4381786",
      "tree": "ff3b89c2492b8c426480b5d104916a00cef7520a",
      "parents": [
        "710236bddd1bb890b6a88142bd2458504b16a45a"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Sat May 02 18:39:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 02 18:39:55 2026 +0800"
      },
      "message": "[Chore] Fix UT will be skip at CI (#18205)\n\nCo-authored-by: SbloodyS \u003c460888207@qq.com\u003e"
    },
    {
      "commit": "710236bddd1bb890b6a88142bd2458504b16a45a",
      "tree": "8f1f55963ca818d3a0dad1e91dd986dacfdf8fc5",
      "parents": [
        "0f975bac396da3604aa5b28757420ac8112f2777"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 01 23:26:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 23:26:38 2026 +0800"
      },
      "message": "[Fix-18197][Master] Fix master failover lock leak (#18207)\n\nThe per-master failover lock was acquired at\n/lock/master-failover/\u003cmasterAddress\u003e but released at the parent path\n/lock/master-failover, so the per-master lock node was never released\nand blocked subsequent failover from peer masters.\n\n* RegistryClient#getLock now returns an AutoCloseable RegistryLock,\n  enforcing acquire/release symmetry via try-with-resources.\n* RegistryClient#releaseLock(String) is removed; callers use the\n  returned handle.\n* FailoverCoordinator#doMasterFailover stores the lock path in a local\n  variable and uses try-with-resources."
    },
    {
      "commit": "0f975bac396da3604aa5b28757420ac8112f2777",
      "tree": "083521d33b34501696dc2cf8ad966c7be6e66d3d",
      "parents": [
        "6ba9f6651ff2be7723591d8f10239b3c393451da"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 01 21:28:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 21:28:38 2026 +0800"
      },
      "message": "Revert \"[Improvement-18056] Clean up unused methods and classes in the dolphi…\" (#18206)"
    },
    {
      "commit": "6ba9f6651ff2be7723591d8f10239b3c393451da",
      "tree": "352c0a88bce76e62b084b24ef6725a967a64c88d",
      "parents": [
        "ef306362698d892186670e563e3c2d800ff33c7d"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 01 19:01:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 19:01:14 2026 +0800"
      },
      "message": "[Chore][CI] Temporarily disable PythonTaskE2ETest due to CI runner issue (#18208)"
    },
    {
      "commit": "ef306362698d892186670e563e3c2d800ff33c7d",
      "tree": "c931b4ba380acc9ca1e6bc8863d0e1cc08727d86",
      "parents": [
        "16dbda94c8eb2d2c904096608d9979d5db7a822f"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Fri May 01 11:49:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 11:49:02 2026 +0800"
      },
      "message": "[Fix-18199][Doc] Fix incorrect description of Serial Discard execution strategy (#18204)"
    },
    {
      "commit": "16dbda94c8eb2d2c904096608d9979d5db7a822f",
      "tree": "9490e1a83f83b867a7e1526bb9458624b11cce6c",
      "parents": [
        "c502ea1778630f59c2972d6e8d38462d1e10dd05"
      ],
      "author": {
        "name": "leocook",
        "email": "leocook@163.com",
        "time": "Thu Apr 30 14:45:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 30 14:45:30 2026 +0800"
      },
      "message": "[Improvement-16754][DataX] Support DataX writer parameter batchSize (#18192)"
    },
    {
      "commit": "c502ea1778630f59c2972d6e8d38462d1e10dd05",
      "tree": "b02cc4a42b107bed30d947c9fa49292d4366358e",
      "parents": [
        "e07a7023fd844fc4bb26f60c42dbd01f938a751a"
      ],
      "author": {
        "name": "xiangzihao",
        "email": "460888207@qq.com",
        "time": "Tue Apr 28 14:13:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 14:13:45 2026 +0800"
      },
      "message": "[Doc-18193][dolphinscheduler-alert-http] Fix incorrect alert param doc (#18194)"
    },
    {
      "commit": "e07a7023fd844fc4bb26f60c42dbd01f938a751a",
      "tree": "96ce3fcb04ec5fff7767054b469c92582c91550a",
      "parents": [
        "74baefa4a12a3f3ee6f48bddee88932a0ca9f5f9"
      ],
      "author": {
        "name": "njnu-seafish",
        "email": "su_yichao@sina.com",
        "time": "Tue Apr 28 10:59:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 10:59:18 2026 +0800"
      },
      "message": "[Improvement-18056] Clean up unused methods and classes in the dolphinschudler-master module (#18164)"
    },
    {
      "commit": "74baefa4a12a3f3ee6f48bddee88932a0ca9f5f9",
      "tree": "44ff43328e9b697a43c60cfc4de9378090cb94e1",
      "parents": [
        "a29ce4b223eaefef1b0f9fd77da9f696685474c9"
      ],
      "author": {
        "name": "njnu-seafish",
        "email": "su_yichao@sina.com",
        "time": "Mon Apr 27 19:03:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 19:03:52 2026 +0800"
      },
      "message": "[Improvement-18064][ApiServer] Update globalParams replace logic and test case (#18068)"
    },
    {
      "commit": "a29ce4b223eaefef1b0f9fd77da9f696685474c9",
      "tree": "2fe44d7f5f96bdf389dd19d240b08e78693a1cfd",
      "parents": [
        "cfe064c276649ae76d148dc54df63f4ee62ffbaf"
      ],
      "author": {
        "name": "huangsheng",
        "email": "huangshengtx@163.com",
        "time": "Fri Apr 24 13:37:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 24 13:37:11 2026 +0800"
      },
      "message": "[Chore][UI] Fix @types/lodash version causing pnpm install failure (#18187)"
    },
    {
      "commit": "cfe064c276649ae76d148dc54df63f4ee62ffbaf",
      "tree": "336646b8717be1eab7b1b12399803b82f5ca1c05",
      "parents": [
        "939439cd830e56d8cd660d785ade961f1a24d61e"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Thu Apr 23 11:23:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 11:23:07 2026 +0800"
      },
      "message": "[Chore] Initialize CLAUDE.md (#18188)"
    },
    {
      "commit": "939439cd830e56d8cd660d785ade961f1a24d61e",
      "tree": "0650e01f891fe1ff2cf43a4bd2f1bd976064e7b6",
      "parents": [
        "91b75ee3792753bf35a69b44a2cd6f4c703aeb7a"
      ],
      "author": {
        "name": "Wenjun Ruan",
        "email": "wenjun@apache.org",
        "time": "Mon Apr 20 13:53:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 13:53:09 2026 +0800"
      },
      "message": "[Fix-18182] [API] User can delete task definitions in unauthorized projects (#18183)"
    },
    {
      "commit": "91b75ee3792753bf35a69b44a2cd6f4c703aeb7a",
      "tree": "05c0c14b101cc238a7e5abb0f1e4e71010398d0b",
      "parents": [
        "1df9f6614129a5fa0a88fef17d87eeb52c687eab"
      ],
      "author": {
        "name": "SHRIHARI KULKARNI",
        "email": "163467964+shrihari7396@users.noreply.github.com",
        "time": "Sun Apr 19 09:15:22 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 11:45:22 2026 +0800"
      },
      "message": "[Improvement-17843][Master] Add IT case for task timeout alert (#18001)"
    },
    {
      "commit": "1df9f6614129a5fa0a88fef17d87eeb52c687eab",
      "tree": "62e430cb215fb54adb5514371e518955dd587615",
      "parents": [
        "5314ac0813c2145555c5ed79c6558901576957d3"
      ],
      "author": {
        "name": "luxiaolong",
        "email": "lindaluo83@126.com",
        "time": "Thu Apr 16 09:58:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 09:58:31 2026 +0800"
      },
      "message": "[DSIP-95][API] Complete the functionality of using dependencies in the complement data (#18003)"
    },
    {
      "commit": "5314ac0813c2145555c5ed79c6558901576957d3",
      "tree": "0a16c10390c04f95a4535317f105dfec5f839bb8",
      "parents": [
        "94bfbb048afe76f8ac534807a52878f5b43605b4"
      ],
      "author": {
        "name": "njnu-seafish",
        "email": "su_yichao@sina.com",
        "time": "Wed Apr 15 11:34:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 11:34:56 2026 +0800"
      },
      "message": "[Improvement-18056] Clean up unused methods and classes in the dolphinschudler-registry module (#18165)"
    },
    {
      "commit": "94bfbb048afe76f8ac534807a52878f5b43605b4",
      "tree": "fc0d0787af154db6c9e1bb99670364ec8ff88507",
      "parents": [
        "53a84b97d58e1eca683d4e448bcf2a1a3071a0d0"
      ],
      "author": {
        "name": "Jingyin Song",
        "email": "155625585+CloudExtreme@users.noreply.github.com",
        "time": "Tue Apr 14 15:30:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 15:30:05 2026 +0800"
      },
      "message": "[Fix-18168] Fix OBS listStorageEntity not returning subdirectories (#18170)"
    },
    {
      "commit": "53a84b97d58e1eca683d4e448bcf2a1a3071a0d0",
      "tree": "c74a70ca593d4d714f732a06405ea6abab75110c",
      "parents": [
        "64e3e276261fa57db057261c90da100285a4b112"
      ],
      "author": {
        "name": "njnu-seafish",
        "email": "su_yichao@sina.com",
        "time": "Tue Apr 14 14:51:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 14:51:06 2026 +0800"
      },
      "message": "[Improvement-18056] Clean up unused methods and classes in the dolphinschudler-service module (#18169)"
    }
  ],
  "next": "64e3e276261fa57db057261c90da100285a4b112"
}
