)]}'
{
  "log": [
    {
      "commit": "e01bbcacd962189c726d8324a35d66cc162712e7",
      "tree": "03b70375517ff123de6ad4023945ea2953e0de4c",
      "parents": [
        "a9d5b293f6ab152bd80d46433a7b934b07620149"
      ],
      "author": {
        "name": "Archit Goyal",
        "email": "argoyal+01@linkedin.com",
        "time": "Fri Sep 11 12:10:47 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 21:10:47 2026 +0200"
      },
      "message": "[FLINK-34246][runtime] Add option to only archive failed jobs to history server (#29015)\n\n* [FLINK-34246][runtime] Add option to only archive failed jobs to history server\n\nAdds jobmanager.archive.only-failed-jobs (default false) to skip archiving finished/canceled/suspended jobs to the history server.\n\n* Add missing positive archiving test and fix config option wording\n\n* Fix new test hanging by marking the application job status as failed\n\n* Set a failure cause on the archived execution graph for failed jobs in the test to avoid a hang\n\n* Regenerate the jobmanager archive only failed jobs config doc so it matches the option description\n\n---------\n\nCo-authored-by: argoyal_Linkedin \u003cargoyal@linkedin.com\u003e"
    },
    {
      "commit": "a9d5b293f6ab152bd80d46433a7b934b07620149",
      "tree": "9701df5c08fe77986883fa2f1662fcf5eadad66e",
      "parents": [
        "dd8eeed0d0216d79ee19218ef256e9869fa19d31"
      ],
      "author": {
        "name": "Federico Dolce",
        "email": "fdolce@confluent.io",
        "time": "Fri Sep 11 17:01:23 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 23:01:23 2026 +0800"
      },
      "message": "[FLINK-40197][python] Support UDF bindings in DataFrame.sql (#29146)"
    },
    {
      "commit": "dd8eeed0d0216d79ee19218ef256e9869fa19d31",
      "tree": "089606cbd50c695ffbdd75198bec491ec2e0f4b4",
      "parents": [
        "383996fa423f1315475ec36dd60987002dad6b2c"
      ],
      "author": {
        "name": "Timo Theusner",
        "email": "32929874+Timm0@users.noreply.github.com",
        "time": "Fri Sep 11 16:03:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 22:03:03 2026 +0800"
      },
      "message": "[FLINK-40424][table][python] Support windowing TVFs in the DataFrame API (#29070)"
    },
    {
      "commit": "383996fa423f1315475ec36dd60987002dad6b2c",
      "tree": "02b5d8b026d254e488fa83c9b9053ca35bd15866",
      "parents": [
        "1d6a308844678a2658d0af513dc32b7f0da38711"
      ],
      "author": {
        "name": "Purushottam Sinha",
        "email": "psinha@confluent.io",
        "time": "Tue Sep 08 23:57:28 2026 +0530"
      },
      "committer": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Fri Sep 11 15:02:35 2026 +0200"
      },
      "message": "[FLINK-40600][runtime-web] Add missing web dashboard specs and tighten thin ones\n\nFLINK-40117 added Vitest specs for most web dashboard views, but\npages/application/overview and pages/application/exceptions still had\nnone, and several existing specs only checked that mocked data was\nloaded rather than what the component derived from it.\n\nAdds the two missing specs, and tightens the timeline, job overview,\nand cluster overview specs to assert their computed values, expands\nTaskManagerService coverage beyond loadManagers/loadManager, and\nreplaces the HumanizeDatePipe format-\u0027B\u0027 test\u0027s reliance on an\nAngular-internal throw with one driven by an unregistered locale.\n\nGenerated-by: Claude Code (claude-sonnet-5)\n"
    },
    {
      "commit": "1d6a308844678a2658d0af513dc32b7f0da38711",
      "tree": "6c74197b18489946b06635da0005924565b71125",
      "parents": [
        "dd33da5a2da017f1020258c9d73ca84b968c64d5"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Fri Sep 11 14:17:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 14:17:41 2026 +0200"
      },
      "message": "[FLINK-40631][table] Pin `serialVersionUID` in `Variant`"
    },
    {
      "commit": "dd33da5a2da017f1020258c9d73ca84b968c64d5",
      "tree": "08fa3cc6c4fc320cba49c09e73bfff665fe49a56",
      "parents": [
        "b7d7313040c923bd91f6ababd0ed0dfb9d7749e2"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Wed Sep 09 23:48:34 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Thu Sep 10 19:09:47 2026 +0200"
      },
      "message": "[FLINK-40520][checkpointing] Release spilled channel state on recovery abort between fetch and drain\n\nSpill files produced by readInputData were only deleted once drain() ran, so any\nabort between fetch and drain leaked them until TaskManager shutdown.\n\n- readInputData deletes the handler\u0027s spill directory if it fails before handing the\n  state off. This does not depend on the produced FetchedChannelState having been\n  built, since stateHandler.close() itself may be what failed.\n- fetchChannelState registers the fetched state with the task\u0027s resourceCloser, so\n  cleanUp() deletes the spill files whenever recovery aborts afterwards (drainer\n  never built, mailbox mail rejected or dropped, drain() never scheduled). close()\n  is idempotent, so a completed drain makes this a no-op; a fetch that finishes\n  after cleanUp() is closed by the registry on the spot.\n"
    },
    {
      "commit": "b7d7313040c923bd91f6ababd0ed0dfb9d7749e2",
      "tree": "1e5e648c94b15a8df09655590ce57996b3e7477f",
      "parents": [
        "21f6a0787663c7ab6ede99daf081e47065efc5e4"
      ],
      "author": {
        "name": "Lorenzo Nicora",
        "email": "1433255+nicusX@users.noreply.github.com",
        "time": "Thu Sep 10 17:36:37 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 17:36:37 2026 +0100"
      },
      "message": "[FLINK-40282][docs] Expand and correct the concepts Glossary (#28863)\n\n* [FLINK-40282][docs] Expand and correct the concepts Glossary\n\n* [FLINK-40282][docs] Expand and correct Glossary: Addressed PR comments\n\n* [FLINK-40282][docs] Removed incorrect sentences identified by Claude. Fixed stale inbound link from Flink Architecture page.\n\n* [FLINK-40282][docs] Addressing PR comments: 1) added definition of Key Group; 2) Reworded and expanded the statement about Transformations mapping to Operators. Also added newlines to break accidentally long lines (to keep consistency across the doc)\n\n* [FLINK-40383][docs] Clarified maxParallelism\n\n* [FLINK-40383][docs] Addressed comments. Added links to Flink Architecture. Fixed minor typos\n\n* [FLINK-40383][docs] Add link to Region Failover Strategy\n\n* [FLINK-40383][docs] Addressed PR comments"
    },
    {
      "commit": "21f6a0787663c7ab6ede99daf081e47065efc5e4",
      "tree": "6725cafaade868640ae40a750ef2c0e3a672c58c",
      "parents": [
        "30a02eaa93c99ec3fcd179b67560e6bd8504d334"
      ],
      "author": {
        "name": "Moritz Manner",
        "email": "moritz.manner@gmail.com",
        "time": "Thu Sep 10 15:24:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 15:24:36 2026 +0200"
      },
      "message": "[FLINK-40492][table] Support casting from VARIANT to TIME and nanosecond timestamps\n\nThis closes #29080."
    },
    {
      "commit": "30a02eaa93c99ec3fcd179b67560e6bd8504d334",
      "tree": "54681710938e9ceb5058314bda7024fb29cea437",
      "parents": [
        "c31f46757a412bdd273e6c2f3802f906ce8602a2"
      ],
      "author": {
        "name": "Moritz Manner",
        "email": "moritz.manner@gmail.com",
        "time": "Thu Sep 10 15:03:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 15:03:37 2026 +0200"
      },
      "message": "[FLINK-40515][core] Extend BinaryVariant to support UUID"
    },
    {
      "commit": "c31f46757a412bdd273e6c2f3802f906ce8602a2",
      "tree": "a65c0fcabee0cfc611aa0143f2ba1cfaadd3f2c2",
      "parents": [
        "ca17e52868e2da8995c9d7a2dcb942c083a28bc1"
      ],
      "author": {
        "name": "florianvazelle",
        "email": "florian@harfanglab.fr",
        "time": "Thu Sep 10 14:37:00 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 20:37:00 2026 +0800"
      },
      "message": "[FLINK-40464][python] Bump cibuildwheel to 4.2.0 (#29016)"
    },
    {
      "commit": "ca17e52868e2da8995c9d7a2dcb942c083a28bc1",
      "tree": "59865cd0c1217c2352e627d5544bad4c01d9fefe",
      "parents": [
        "0a6d74100d4f0a84373bbb2aafbf7f88c0d6c190"
      ],
      "author": {
        "name": "Gabor Somogyi",
        "email": "gabor_somogyi2@apple.com",
        "time": "Thu Sep 10 13:05:33 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 16:35:33 2026 +0530"
      },
      "message": "[FLINK-40593][s3] Batch recursive S3 deletes in native s3 connector with global and per-bucket opt-out\n\n* [FLINK-40593][s3] Batch recursive S3 deletes in native s3 connector with global and per-bucket opt-out"
    },
    {
      "commit": "0a6d74100d4f0a84373bbb2aafbf7f88c0d6c190",
      "tree": "23f9aba41074c155c8c8d8022fc755b044481598",
      "parents": [
        "dcb63992ff22e33b270c2897180f15b2670bbdaf"
      ],
      "author": {
        "name": "Piotr Rudnicki",
        "email": "piotr.rudnicki94@protonmail.com",
        "time": "Thu Sep 10 12:36:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 11:36:03 2026 +0100"
      },
      "message": "[FLINK-35321][runtime] Ensure pendingCommitables metric is not re-registered while copying CommittableCollector (#27598)\n\n* [FLINK-35321] Add flag for metric registration\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Add unit test and refactor constructor method\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Rename local param\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Refactor test to not use Mockito\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Add license agreement\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Rename plus code format\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Revert flag in serialization path\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Custom test metric group implementation\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Get rid on flag and move metric registration to static constructor\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Correct tests\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n* [FLINK-35321] Restore static class for testing\n\nSigned-off-by: Piotr Rudnicki \u003cpiotr.rudnicki94@protonmail.com\u003e\n\n---------\n\nSigned-off-by: deamondev \u003cpiotr.rudnicki94@protonmail.com\u003e\nSigned-off-by: Piotr Rudnicki \u003cpiotr.rudnicki94@protonmail.com\u003e"
    },
    {
      "commit": "dcb63992ff22e33b270c2897180f15b2670bbdaf",
      "tree": "83be58734bfa60d3d7649f82f5b4720cab0e960a",
      "parents": [
        "d5c4ba054b7e90465aa5229826385a67ad9c51c5"
      ],
      "author": {
        "name": "Archit Goyal",
        "email": "argoyal+01@linkedin.com",
        "time": "Thu Sep 10 03:23:13 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 12:23:13 2026 +0200"
      },
      "message": "[FLINK-40478][runtime-web] Log effective HistoryServer configuration at startup (#29020)\n\n* Log effective HistoryServer configuration at startup\n\nAdds storage type, load mode, and retention settings to the startup log.\n\n* Update flink-runtime-web/src/main/java/org/apache/flink/runtime/webmonitor/history/HistoryServer.java\n\nCo-authored-by: Purushottam Sinha \u003csinhapurushottam911@gmail.com\u003e\n\n---------\n\nCo-authored-by: Purushottam Sinha \u003csinhapurushottam911@gmail.com\u003e"
    },
    {
      "commit": "d5c4ba054b7e90465aa5229826385a67ad9c51c5",
      "tree": "f4103b1c5ade8d015f64234c25965a32ea86d345",
      "parents": [
        "8ae4de695201457bb0c582426859262f46709324"
      ],
      "author": {
        "name": "Archit Goyal",
        "email": "argoyal+01@linkedin.com",
        "time": "Thu Sep 10 03:20:59 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 12:20:59 2026 +0200"
      },
      "message": "[FLINK-40530][runtime-web] Isolate per-entry failures in job overview aggregation (#29062)\n\nA single malformed archive no longer aborts the whole /jobs/overview update; it is skipped and logged, and a good overview is kept if all entries fail.\n\nCo-authored-by: argoyal2212 \u003cargoyal@linkedin.com\u003e\nGenerated-by: GitHub Copilot CLI"
    },
    {
      "commit": "8ae4de695201457bb0c582426859262f46709324",
      "tree": "a3c7af4a5c9312d3775d3a046dfdf2f0cdce37e9",
      "parents": [
        "97af402781ef356de81c5cd4ec5156d8ab935d7a"
      ],
      "author": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Mon Jul 13 18:56:43 2026 +0200"
      },
      "committer": {
        "name": "Junrui Lee",
        "email": "jrlee.ljr@gmail.com",
        "time": "Thu Sep 10 16:44:57 2026 +0800"
      },
      "message": "[FLINK-31931][runtime-web] Stop polling a TaskManager once it is gone\n\nThe TaskManager status and metrics views re-requested the TaskManager detail\non every refresh tick, so a TaskManager that had been lost kept generating\nfailing /taskmanagers/\u003cid\u003e requests indefinitely. loadManager also swallowed\nevery error, hiding the not-found case from callers.\n\nLet loadManager propagate errors and share a small poll helper that stops\nonce the backend reports the TaskManager is gone (404), while transient\nerrors keep retrying. The status view then shows a \"no longer available\"\nnotice instead of an endless skeleton, and the metrics cards are hidden\ninstead of rendering blank tables.\n\nThe global HTTP interceptor turns every error body into a persistent\n\"Server Response Message\" notification, which for the now-expected 404 meant\na full server stack trace popping up next to the notice. loadManager marks\nits request with an EXPECTED_NOT_FOUND HttpContext token and the interceptor\nskips the notification for a 404 on such a request; every other error is\nstill surfaced as before.\n\nGenerated-by: Claude Fable 5.1\n"
    },
    {
      "commit": "97af402781ef356de81c5cd4ec5156d8ab935d7a",
      "tree": "9f647338be36f0c3ef6d4f2609cfc3f84a4a501c",
      "parents": [
        "330291437309c829378006f5109c947d1bf4216e"
      ],
      "author": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Mon Jul 13 18:56:32 2026 +0200"
      },
      "committer": {
        "name": "Junrui Lee",
        "email": "jrlee.ljr@gmail.com",
        "time": "Thu Sep 10 16:44:57 2026 +0800"
      },
      "message": "[FLINK-31931][runtime/rest] Return 404 instead of 500 for unknown TaskManager in TaskManagerDetailsHandler\n\nTaskManagerDetailsHandler stripped the failure from its exceptionally stage\nwith stripExecutionException, which does not unwrap the CompletionException\nthat a CompletableFuture reports failures with. The\ninstanceof UnknownTaskExecutorException check therefore never matched, so a\nrequest for a gone TaskManager returned 500 with an \"Unhandled exception\"\nERROR log instead of the intended 404. Use stripCompletionException, as the\nsibling TaskManager handlers already do.\n\nGenerated-by: Claude Opus 4.8 (1M context)\n"
    },
    {
      "commit": "330291437309c829378006f5109c947d1bf4216e",
      "tree": "0fb9a14f98e2b9b5a8cef347ae33a022e02c39ca",
      "parents": [
        "fb806c8fcaabc3854f33a752a1c26af5551d743c"
      ],
      "author": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Fri Aug 21 11:14:36 2026 +0200"
      },
      "committer": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Thu Sep 10 10:04:49 2026 +0200"
      },
      "message": "[FLINK-40449][table] Reject non-temporal streaming sort during planning\n\nA streaming sort on a non-time attribute is unsupported, but the check\nlived in StreamExecSort.translateToPlanInternal, so it only fired at job\n(re)submission, not during optimization: COMPILE PLAN succeeded and the\nquery failed later.\n\nReject it in StreamPhysicalSortRule.convert() during optimization, with\ntwo targeted messages (non-time-attribute key, and descending time\nattribute) built in SortUtil. A sort key that is an expression is\nprojected into a generated column (EXPR$n from SQL, $fn from the Table\nAPI); the message describes it as \"the sort key expression\" instead of\nleaking that name.\n\nThe StreamExecSort check is kept as a backstop for compiled plans loaded\nvia loadPlan, which bypasses optimization. It uses\nLogicalTypeChecks.isTimeAttribute so a TIMESTAMP_LTZ rowtime is\nrecognized after deserialization, and guards against a plan without sort\nkeys.\n\nExisting tests whose ORDER BY became invalid in streaming are adapted:\nthose that sorted only incidentally keep asserting their feature\n(TableSinkTest.testDistribution, GroupingSetsTest.testFromBlogspot), the\nrest assert the rejection. SortValidationTest covers the rule, the\nexpression cases, and compile/load round trips for the backstop.\n\nGenerated-by: Claude Code (Claude Opus 4.8, Claude Fable 5.1)\n"
    },
    {
      "commit": "fb806c8fcaabc3854f33a752a1c26af5551d743c",
      "tree": "e4b312b25da369f4b93ae4166553d824e390d7ad",
      "parents": [
        "f7ed53ef05483184b6e83675951206ac09cdc23b"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Wed Sep 09 14:47:17 2026 +0200"
      },
      "committer": {
        "name": "Timo Walther",
        "email": "twalthr@apache.org",
        "time": "Thu Sep 10 09:46:59 2026 +0200"
      },
      "message": "[FLINK-40616][table] Make BITMAP and VARIANT conversion handling consistent\n\nBITMAP and VARIANT are sealed built-in binary types with a single canonical internal representation, RoaringBitmapData and BinaryVariant. Their handling had diverged across the type system, and the canonical-form invariant was enforced in several overlapping places for BITMAP but only in the serializer for VARIANT.\n\nThis change makes the two types follow the same paths and enforces the canonical form once per type, in the serializer:\n\n- BitmapType and VariantType use Class.isAssignableFrom in supportsInputConversion and supportsOutputConversion, dropping the static whitelist sets.\n- ClassDataTypeConverter and ValueDataTypeConverter resolve both types to their interface conversion class uniformly.\n- DataStructureConverters returns a shared stateless IdentityConverter.INSTANCE for both types, removing the bespoke BitmapBitmapConverter and the redundant switch guard.\n- DataFormatConverters.BitmapConverter becomes a plain identity converter, matching VariantConverter.\n- BitmapSerializer.serialize enforces the canonical form via RoaringBitmapData.toRoaringBitmapData, matching VariantSerializer.\n\nThere is no user-facing change for the supported implementations. A non-canonical conversion class is now rejected at the serialization boundary instead of by a plan-time whitelist.\n"
    },
    {
      "commit": "f7ed53ef05483184b6e83675951206ac09cdc23b",
      "tree": "ddb0e87d59f12339968ac1c6fc8dcbebfe41447a",
      "parents": [
        "558fd5d63f4829e9d9be2fb3a80ce00c8c0a46ae"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Tue Sep 08 16:24:47 2026 +0200"
      },
      "committer": {
        "name": "Timo Walther",
        "email": "twalthr@apache.org",
        "time": "Thu Sep 10 09:46:59 2026 +0200"
      },
      "message": "[FLINK-40488][table] Support comparison and ordering for the UUID type\n\nEnable UUID as an ordering, grouping and join key. UUID is stored as its 16-byte big-endian encoding and orders by the same unsigned byte-wise comparison as binary strings, so it is routed through the existing binary compare paths (SortUtil.compareBinary for sorting and SqlFunctionUtils.byteArrayCompare for predicates) at the code-generation sites that previously threw: the comparability gate, comparison and sort code generation, and the normalized-key computer (a fixed 16-byte, fully determining key consistent with the DataStream UuidComparator).\n"
    },
    {
      "commit": "558fd5d63f4829e9d9be2fb3a80ce00c8c0a46ae",
      "tree": "f8c8ea229b9560db7932ea60b57c8e74884a24a3",
      "parents": [
        "f83a73c19a41a066360cb353877b1ca145a18929"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Tue Sep 08 16:24:14 2026 +0200"
      },
      "committer": {
        "name": "Timo Walther",
        "email": "twalthr@apache.org",
        "time": "Thu Sep 10 09:46:59 2026 +0200"
      },
      "message": "[FLINK-40488][table] Support UUID value literals\n\nAllow a UUID to be used as a value literal in the expression layer. ValueDataTypeConverter now derives DataTypes.UUID() from a java.util.UUID value (so Expressions.lit(uuid) works), and ExpressionConverter builds the literal RexNode via RexBuilder.makeUuidLiteral, since RexBuilder.makeLiteral has no generic UUID support. This also lets filter push-down round-trip a UUID predicate back into a RexNode, and lets a UUID literal be serialized as UUID \u0027...\u0027.\n"
    },
    {
      "commit": "f83a73c19a41a066360cb353877b1ca145a18929",
      "tree": "0c9f8d236cdd034f6a647620541cc8deac395ae3",
      "parents": [
        "75892ba1214137a3dd18fefe719244616d813a6c"
      ],
      "author": {
        "name": "Milesian111",
        "email": "chuanbge@vip.qq.com",
        "time": "Thu Sep 03 17:09:23 2026 +0800"
      },
      "committer": {
        "name": "Dian Fu",
        "email": "dianfu@apache.org",
        "time": "Thu Sep 10 14:29:36 2026 +0800"
      },
      "message": "[FLINK-40421][python] Add sorting APIs to DataFrame API\n\nThis closes #29078.\n\nGenerated-by: Codex GPT-5\n"
    },
    {
      "commit": "75892ba1214137a3dd18fefe719244616d813a6c",
      "tree": "ec6f98ec2c6d1ddd105d30176d8c42a92e105dd2",
      "parents": [
        "f2beda6d9340f5faf97b450475ba85423546de45"
      ],
      "author": {
        "name": "Deepyaman Datta",
        "email": "deepyaman.datta@utexas.edu",
        "time": "Wed Sep 09 23:52:21 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 13:52:21 2026 +0800"
      },
      "message": "[FLINK-40529][python] Warn on use of deprecated APIs not at import time (#29061)\n\nGenerated-by: Claude Code 2.1.252 (Claude Opus 5)"
    },
    {
      "commit": "f2beda6d9340f5faf97b450475ba85423546de45",
      "tree": "1a680179ecf5a0d5e1ff587c20561eb304bcdff7",
      "parents": [
        "ef4e64c5b018a6f82888e4d07e4c7273d400a8ec"
      ],
      "author": {
        "name": "Beetle brank",
        "email": "120192315+beetle0915@users.noreply.github.com",
        "time": "Thu Sep 10 11:02:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 11:02:48 2026 +0800"
      },
      "message": "[FLINK-23758][python] Fix semantics of Expression.__invert__ (#29148)\n\nGenerated-by: OpenAI Codex (GPT-5)"
    },
    {
      "commit": "ef4e64c5b018a6f82888e4d07e4c7273d400a8ec",
      "tree": "e54cd6087e760687ebd339b129dc00053b3b1d18",
      "parents": [
        "0bc5d308ba80aecac618701d28f3d69aa2c1ec29"
      ],
      "author": {
        "name": "dylanhz",
        "email": "53137516+dylanhz@users.noreply.github.com",
        "time": "Thu Sep 10 02:35:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 20:35:52 2026 +0200"
      },
      "message": "[FLINK-40606][table-planner] Fix code generation for binary array casts"
    },
    {
      "commit": "0bc5d308ba80aecac618701d28f3d69aa2c1ec29",
      "tree": "8095c986b062f26f86fc302abd9653d8d721cc04",
      "parents": [
        "44edc3c9694c46a45a62d53d20f98fa595e9559a"
      ],
      "author": {
        "name": "florianvazelle",
        "email": "florian@harfanglab.fr",
        "time": "Wed Sep 09 13:56:52 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 19:56:52 2026 +0800"
      },
      "message": "[FLINK-40599][python] Allow pyarrow up to 25.x (#29134)"
    },
    {
      "commit": "44edc3c9694c46a45a62d53d20f98fa595e9559a",
      "tree": "45b3bef040de4a5e84eb796ca151ae51664b59bc",
      "parents": [
        "bf88c8304b0fe7b8fec7b975aff1222642c2c249"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "rgharib@confluent.io",
        "time": "Wed Sep 09 11:25:40 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 11:25:40 2026 +0200"
      },
      "message": "[FLINK-40580][table] Render VARIANT object/array as SQL when casting to character string\n\nThis closes #29125."
    },
    {
      "commit": "bf88c8304b0fe7b8fec7b975aff1222642c2c249",
      "tree": "ef39f8bea04f98ed7a93d9442e9f756a1bcd6771",
      "parents": [
        "7bd29266b499c2fbf136f0902cc9e102d9174f03"
      ],
      "author": {
        "name": "Timo Theusner",
        "email": "32929874+Timm0@users.noreply.github.com",
        "time": "Wed Sep 09 10:57:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 16:57:53 2026 +0800"
      },
      "message": "[FLINK-40423][python] Add Top-N support to the DataFrame API (#29105)"
    },
    {
      "commit": "7bd29266b499c2fbf136f0902cc9e102d9174f03",
      "tree": "93da67a255efc58be570b37b71ec9de3e47595ca",
      "parents": [
        "e63885d9db398684d4a935a395ed3c59246e1c94"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Wed Sep 09 09:13:39 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 09:13:39 2026 +0200"
      },
      "message": "[FLINK-40603][build] Use hadoop 3.4.3 for jdk25"
    },
    {
      "commit": "e63885d9db398684d4a935a395ed3c59246e1c94",
      "tree": "58246f5b9319416a02c0f02a92d1025a22b3982d",
      "parents": [
        "4e9d5412d3dcd4776b750e8a94ba6e86d2b409c6"
      ],
      "author": {
        "name": "Federico Dolce",
        "email": "fdolce@confluent.io",
        "time": "Tue Sep 01 16:01:32 2026 +0200"
      },
      "committer": {
        "name": "Dian Fu",
        "email": "dianfu@apache.org",
        "time": "Wed Sep 09 11:48:34 2026 +0800"
      },
      "message": "[FLINK-40430][python] Add configuration support to DataFrame API\n\nThis closes #29088.\n"
    },
    {
      "commit": "4e9d5412d3dcd4776b750e8a94ba6e86d2b409c6",
      "tree": "5c8e2e80bd2dece212b00bfd420fbf1e63163d8e",
      "parents": [
        "7ebd1522f77d24f78209085bea539d91d2c6a3c6"
      ],
      "author": {
        "name": "Purushottam Sinha",
        "email": "psinha@confluent.io",
        "time": "Wed Sep 09 00:13:07 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 20:43:07 2026 +0200"
      },
      "message": "[FLINK-40567][tests] Avoid @TempDir cleanup race in HistoryServerArchiveFetcherTest (#29116)\n\nEach test creates a HistoryServerArchiveFetcher that owns two fixed thread\npools which write archives into the @TempDir, but the fetcher was never\nclosed - tearDown() only closed the storage. Its executor threads could\ntherefore still be writing when JUnit deleted the temp directory, failing\nthe run with \"Failed to close extension context\" /\n\"Failed to delete temp directory ... DirectoryNotEmptyException: .../jobs\".\n\nTrack the fetcher in a field and close it in @AfterEach before the storage,\nso ExecutorUtils.gracefulShutdown drains both pools before the @TempDir is\nremoved. This also removes the same latent thread leak in the other tests.\n\nGenerated-by: Claude Code (claude-opus-4-8)"
    },
    {
      "commit": "7ebd1522f77d24f78209085bea539d91d2c6a3c6",
      "tree": "4e66842bc4602ad2024ba754afef178b6413d52b",
      "parents": [
        "e712083fb4e750d644876db9d2d20c3bb2dbf2a2"
      ],
      "author": {
        "name": "Purushottam Sinha",
        "email": "psinha@confluent.io",
        "time": "Tue Jul 28 00:34:28 2026 +0530"
      },
      "committer": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Tue Sep 08 19:37:00 2026 +0200"
      },
      "message": "[FLINK-40117][runtime-web] Extend Vitest smoke-test coverage to more web-dashboard views\n\nFLINK-40035 introduced a Vitest setup with smoke tests for three views.\nExtend that coverage to 30 additional spec files: the remaining\nhigh-traffic pages plus the services, pipes, badges, guards, and the\nHTTP interceptor they depend on.\n\n- Job: overview, checkpoints, timeline, data skew, rescales, configuration\n- Task Manager: metrics, logs\n- Job Manager: metrics\n- Application (cluster) overview\n- Services: application, jar, metrics, task-manager\n- Pipes: humanize-bytes, humanize-chart-numeric, humanize-date,\n  humanize-duration, humanize-watermark, parse-int\n- Badges: application, backpressure, checkpoint, duration, job\n- Guards: cluster-config, running-application, running-job\n- Components: navigation\n- app.interceptor\n\nEach spec mocks the view\u0027s services through TestBed and asserts that the\ncomponent loads its data and populates its key bindings. Chart- and\ngraph-backed views (timeline, job overview) drive the component logic\ndirectly and stub the rendering layer, which relies on browser APIs jsdom\ndoes not implement.\n\nAlso add a no-op Web Worker stub to src/test-setup.ts: @antv/g2 creates a\nworker at module load for its label layout, and Worker is undefined in jsdom.\n\nGenerated-by: Claude Code (claude-opus-4-8)\n"
    },
    {
      "commit": "e712083fb4e750d644876db9d2d20c3bb2dbf2a2",
      "tree": "27bb8dc25617fcf0fc3087770c3226a1c6e59a25",
      "parents": [
        "e57428cafc9a79ca989ad8b9a39d621f7e250be0"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Tue Sep 08 18:57:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 18:57:34 2026 +0200"
      },
      "message": "[FLINK-40596] Closing metric might lead to a number of test failures"
    },
    {
      "commit": "e57428cafc9a79ca989ad8b9a39d621f7e250be0",
      "tree": "acf177e75c7bd0aa028e08ef2e70214fd495bac2",
      "parents": [
        "d8f92d44ba1941e3dc6f5690c4b9de769806bc1b"
      ],
      "author": {
        "name": "Purushottam Sinha",
        "email": "psinha@confluent.io",
        "time": "Tue Sep 08 14:55:12 2026 +0530"
      },
      "committer": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Tue Sep 08 14:36:23 2026 +0200"
      },
      "message": "[FLINK-40590][runtime-web] Update Angular and monaco-editor to latest available versions\n\nBumps @angular/* (animations, common, compiler, core, forms,\nplatform-browser, platform-browser-dynamic, router, compiler-cli) from\n21.2.17 to 21.2.22, and @angular/build/@angular/cli to 21.2.23.\nBumps monaco-editor from 0.55.1 to 0.56.0 (latest available), which also\nupdates its bundled dompurify to 3.4.8. Runs npm audit fix for the\nremaining in-range dev-tooling dependencies.\n\nmonaco-editor\u0027s own package.json pins dompurify at exactly 3.4.8; the\ndashboard build copies monaco\u0027s prebuilt min/vs bundle into assets/vs,\nwhich vendors that DOMPurify copy inline and never imports the npm\npackage, so npm\u0027s own dompurify resolution has no bearing on what\u0027s\nactually shipped. The remaining npm audit findings against\ndompurify@\u003c\u003d3.4.12 live in that vendored copy and are tracked upstream\nat microsoft/monaco-editor#5454; we\u0027ll bump monaco-editor again once it\nships with a newer bundled DOMPurify.\n\nRegenerates flink-runtime-web/src/main/resources/META-INF/NOTICE to\nmatch, keeping dompurify listed as Apache-2.0 (it\u0027s dual-licensed\nMPL-2.0/Apache-2.0; Apache-2.0 was the deliberate prior choice).\n\nGenerated-by: Claude Code (claude-sonnet-5)\n"
    },
    {
      "commit": "d8f92d44ba1941e3dc6f5690c4b9de769806bc1b",
      "tree": "d9772d91147d80b05595ebd7573c3f01bd1ff56e",
      "parents": [
        "39bf636b5140868d744cc651001e5421c8e9a53c"
      ],
      "author": {
        "name": "Ilya Soin",
        "email": "soin08@users.noreply.github.com",
        "time": "Tue Sep 08 12:23:55 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 11:23:55 2026 +0200"
      },
      "message": "[FLINK-40399][state] Separate key filter runtime contract from push-down planning"
    },
    {
      "commit": "39bf636b5140868d744cc651001e5421c8e9a53c",
      "tree": "fde1b1114e9f890447ae3762387d2c5e3d11ac9b",
      "parents": [
        "7fcc6b8d11aa58f95c14cfe5efd01925e6eee893"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Mon Sep 07 15:01:23 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 15:01:23 2026 +0200"
      },
      "message": "[hotfix][table] Fix tryParseJson() docs to say NULL instead of throws an error\n\nThis closes #29124."
    },
    {
      "commit": "7fcc6b8d11aa58f95c14cfe5efd01925e6eee893",
      "tree": "af6007bd28b640c59c51976782dff0b00ef50c17",
      "parents": [
        "88a28540dfd4721fae441ea453466b8f6d2ac4bd"
      ],
      "author": {
        "name": "Efrat Levitan",
        "email": "elevitan@confluent.io",
        "time": "Thu Sep 03 19:28:13 2026 +0300"
      },
      "committer": {
        "name": "Piotr Nowojski",
        "email": "pnowojski@users.noreply.github.com",
        "time": "Mon Sep 07 12:12:32 2026 +0200"
      },
      "message": "[FLINK-40549][metrics] Close splitMetricGroup along with the child splitWatermarkMetricGroup\n\nPreviousely we incorrectly closed the child splitWatermarkMetricGroup on split finished, leaving the parent metricGroup unclosed\n"
    },
    {
      "commit": "88a28540dfd4721fae441ea453466b8f6d2ac4bd",
      "tree": "26bc70480893b2b87479577467fe3aec7e777e6f",
      "parents": [
        "78b0df60e341c7c0996b2bd9f511acf9e293a647"
      ],
      "author": {
        "name": "Efrat Levitan",
        "email": "elevitan@confluent.io",
        "time": "Thu Sep 03 19:26:10 2026 +0300"
      },
      "committer": {
        "name": "Piotr Nowojski",
        "email": "pnowojski@users.noreply.github.com",
        "time": "Mon Sep 07 12:12:32 2026 +0200"
      },
      "message": "[FLINK-40549][metrics] Remove metricGroup parent reference upon close()\n\nToday there\u0027s no API to deregister child metric groups added via MetricGroup#addGroup. This is not a problem as long as child metric groups are permanent through parent lifecycle.\n\nFor split level metric group this is a problem because they might not live as long as the source (aka splitFinished). As a result we are left with a closed child metric group reference on the parent, preventing the object GC.\n"
    },
    {
      "commit": "78b0df60e341c7c0996b2bd9f511acf9e293a647",
      "tree": "46f2d645de1957c1ebe1be64ead4d1fa3e235b4e",
      "parents": [
        "4ad8e8372f28a8aeac2b4b28077bfed3049e9b7a"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Mon Sep 07 12:11:24 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 12:11:24 2026 +0200"
      },
      "message": "[FLINK-37926][table] Support casting from VARIANT to MAP\n\nThis closes #29118."
    },
    {
      "commit": "4ad8e8372f28a8aeac2b4b28077bfed3049e9b7a",
      "tree": "4afc2d3f7bf927a3d34dcab944fcc9060574792b",
      "parents": [
        "ae5734854c7d2d3eefd71c1f9ea11695e8724452"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Mon Sep 07 10:30:06 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 10:30:06 2026 +0200"
      },
      "message": "[FLINK-37926][table] Support casting from VARIANT to ROW and STRUCTURED\n\nThis closes #29092."
    },
    {
      "commit": "ae5734854c7d2d3eefd71c1f9ea11695e8724452",
      "tree": "6b0264b8370bb8d150f410ebb27bcff914e83703",
      "parents": [
        "9c674275ca28acc05b9fc5755634ef8c39335c4f"
      ],
      "author": {
        "name": "Gustavo de Morais",
        "email": "gustavopguto@gmail.com",
        "time": "Mon Sep 07 09:27:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 09:27:03 2026 +0200"
      },
      "message": "[hotfix][docs] Add 2.3 to PreviousDocs list\n\nThis closes #29108."
    },
    {
      "commit": "9c674275ca28acc05b9fc5755634ef8c39335c4f",
      "tree": "260ee845d78031d1063868beb228ebc7cc871b7f",
      "parents": [
        "0fb6dcf6b75db3b12f64b91bf119646c30093ac0"
      ],
      "author": {
        "name": "Fabian Hueske",
        "email": "fhueske@confluent.io",
        "time": "Mon Sep 07 09:13:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 09:13:17 2026 +0200"
      },
      "message": "[FLINK-40541][table] Add on_time argument to SNAPSHOT for LATERAL SNAPSHOT join\n\nThis closes #29098.\n\nCo-Generated: Claude Opus 4.8 (1M context)"
    },
    {
      "commit": "0fb6dcf6b75db3b12f64b91bf119646c30093ac0",
      "tree": "8121e0257529f20e9ca4ab83c35e2e1d7a1c4a93",
      "parents": [
        "ad4a20ab48635f7b3446678d3446ac240b8c14b3"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "rgharib@confluent.io",
        "time": "Mon Sep 07 08:24:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 08:24:02 2026 +0200"
      },
      "message": "[FLINK-40487][table] `CAST` between `UUID` and `STRING` / `BINARY(16)`"
    },
    {
      "commit": "ad4a20ab48635f7b3446678d3446ac240b8c14b3",
      "tree": "75fb9ae87cbb933f90dd827d0d8f7ed65b90a0ad",
      "parents": [
        "1705984b43f52dba74ff11044e96be1cb7bd5cdb"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Mon Sep 07 08:21:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 08:21:26 2026 +0200"
      },
      "message": "[FLINK-40573][build] Remove wildcard imports while spotless apply"
    },
    {
      "commit": "1705984b43f52dba74ff11044e96be1cb7bd5cdb",
      "tree": "72253426aa45f476b9237bc5c2b2cd4df7162e24",
      "parents": [
        "396faceb6b1419fad7058469957de9603567a82b"
      ],
      "author": {
        "name": "Zakelly",
        "email": "zakelly.lan@gmail.com",
        "time": "Fri Sep 04 22:11:05 2026 +0800"
      },
      "committer": {
        "name": "Zakelly",
        "email": "zakelly.lan@gmail.com",
        "time": "Sun Sep 06 17:09:38 2026 +0800"
      },
      "message": "[FLINK-39977][runtime] Add ITCase for file-merged channel state recovery\n\nGenerated-by: OpenAI Codex (GPT-5.6 Sol)\n"
    },
    {
      "commit": "396faceb6b1419fad7058469957de9603567a82b",
      "tree": "407f102a8f01bdec763b17db3c9a33da5ac9c7bd",
      "parents": [
        "bf4a71a990dd82225ab33ba331c2f80021b5f1da"
      ],
      "author": {
        "name": "Zakelly",
        "email": "zakelly.lan@gmail.com",
        "time": "Sat Aug 29 21:27:01 2026 +0800"
      },
      "committer": {
        "name": "Zakelly",
        "email": "zakelly.lan@gmail.com",
        "time": "Sun Sep 06 17:09:38 2026 +0800"
      },
      "message": "[FLINK-39977][runtime] Recovery of merged channel state handles\n"
    },
    {
      "commit": "bf4a71a990dd82225ab33ba331c2f80021b5f1da",
      "tree": "59eb1ca83e1b0d85cbe092bf83abe9120daff0a6",
      "parents": [
        "ca6e927c187a658a3fd37c496af8548586c5ac2a"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "rgharib@confluent.io",
        "time": "Sun Sep 06 10:41:44 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 06 10:41:44 2026 +0200"
      },
      "message": "[FLINK-40545][table] Add `parseJson()` and `tryParseJson()` Table API expression methods"
    },
    {
      "commit": "ca6e927c187a658a3fd37c496af8548586c5ac2a",
      "tree": "c85197822de1801ff6e8deaf34aae83ca9fbda3a",
      "parents": [
        "c51e71536edf02e0e496be28058d7f709dd18158"
      ],
      "author": {
        "name": "Purushottam Sinha",
        "email": "psinha@confluent.io",
        "time": "Sun Sep 06 12:57:04 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 06 09:27:04 2026 +0200"
      },
      "message": "[FLINK-40071][build] Bump jackson-bom to 2.22.2"
    },
    {
      "commit": "c51e71536edf02e0e496be28058d7f709dd18158",
      "tree": "99e093042d4413f7ff3343a7ec70afab4dc3a912",
      "parents": [
        "fc2b5efc5208fd35afd13a3cc49940af75b1faa9"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Sat Sep 05 22:23:43 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 22:23:43 2026 +0200"
      },
      "message": "[FLINK-40565] Bump netty to 4.2.17"
    },
    {
      "commit": "fc2b5efc5208fd35afd13a3cc49940af75b1faa9",
      "tree": "a3639b632ae0d9c7e5fd1e5723b4b2f0bcf68037",
      "parents": [
        "3593f080f09fb9f974dca62279a98cc16505acb9"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Sat Sep 05 20:52:22 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 05 20:52:22 2026 +0200"
      },
      "message": "[FLINK-40563][build] Bump lombok to 1.18.48"
    },
    {
      "commit": "3593f080f09fb9f974dca62279a98cc16505acb9",
      "tree": "6203e138d013abc9c51ec8f3090c993a79423c1b",
      "parents": [
        "30b5f50125dc395f82baf61774cad8541a5b33d9"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Mon Aug 31 17:44:43 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Sat Sep 05 16:53:38 2026 +0200"
      },
      "message": "[FLINK-40517][checkpointing] Aggregate cross-channel watermarks on the recovery unspilling thread for fan-in rescale\n"
    },
    {
      "commit": "30b5f50125dc395f82baf61774cad8541a5b33d9",
      "tree": "7c4375665ab3ade7a90be3377e0af13fc3f4f6ba",
      "parents": [
        "9a3b1a8d796b4ccbca2ca66f52ee2446a302e9bb"
      ],
      "author": {
        "name": "Sepuri Sai Krishna",
        "email": "saik20533@gmail.com",
        "time": "Fri Sep 04 21:49:32 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 18:19:32 2026 +0200"
      },
      "message": "[FLINK-40350][table-runtime] `LPAD`/`RPAD` split supplementary-plane characters into unpaired surrogates"
    },
    {
      "commit": "9a3b1a8d796b4ccbca2ca66f52ee2446a302e9bb",
      "tree": "c7e1fd6fbae1b1b8e27feae1dc5e680593779209",
      "parents": [
        "dd2bc4b41ce78a5b361d5336b8399b1d5ac0e8a9"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Fri Sep 04 17:10:01 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 17:10:01 2026 +0200"
      },
      "message": "[FLINK-40527] Update flink-shaded to 22.0"
    },
    {
      "commit": "dd2bc4b41ce78a5b361d5336b8399b1d5ac0e8a9",
      "tree": "28cd93e3a48749644fe15e37d61da3fc892a336f",
      "parents": [
        "5d3597c253fcb6383ca74df9c43257c283dc821e"
      ],
      "author": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Wed Sep 02 17:17:58 2026 +0200"
      },
      "committer": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Fri Sep 04 16:25:35 2026 +0200"
      },
      "message": "[FLINK-40540][table-planner] Put the rule\u0027s reason first in the planning error\n\nA rule that rejects a query already explains why, but the message buried\nthat sentence behind the full logical plan. Put the reason on the header\nline and mark the plan with \"Plan:\" so that tools rewriting the message\ncan find it. The wrapper type and cause chain stay as they are. A\nValidationException thrown while applying a rule now gets the same\ntreatment instead of leaking as Calcite\u0027s RuntimeException.\n\nGenerated-by: Claude Code (Claude Fable 5.1)\n"
    },
    {
      "commit": "5d3597c253fcb6383ca74df9c43257c283dc821e",
      "tree": "cdee8731633f0e387271bbc7786cbdbc960de7a5",
      "parents": [
        "d5ff3fed3381d7564c220583e37d4f179419b638"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "rgharib@confluent.io",
        "time": "Fri Sep 04 14:35:59 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 14:35:59 2026 +0200"
      },
      "message": "[FLINK-37926][table] Support casting from `VARIANT` to `ARRAY`"
    },
    {
      "commit": "d5ff3fed3381d7564c220583e37d4f179419b638",
      "tree": "80c4665cd1f1c79e29549b931fc563f0ca9661aa",
      "parents": [
        "995865e08a7633df7a403abedccf8f27747cdf84"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Fri Sep 04 13:11:44 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 13:11:44 2026 +0200"
      },
      "message": "[FLINK-40548][ci] Use image with ubuntu 24.04"
    },
    {
      "commit": "995865e08a7633df7a403abedccf8f27747cdf84",
      "tree": "7444f9b7302b3fe5d7c440ea6a8560f4cbb37d1b",
      "parents": [
        "aff06f86705abbe70723a28e336dd8d6d8fecd93"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Fri Sep 04 09:09:33 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 09:09:33 2026 +0200"
      },
      "message": "[FLINK-40490][table] Add runtime serialization and codegen for the `UUID` type"
    },
    {
      "commit": "aff06f86705abbe70723a28e336dd8d6d8fecd93",
      "tree": "ab45005e9f832136f80a10fe6ea682ccdb5c601b",
      "parents": [
        "a1b2ccd18a6c061aa2436efcadf8e03f3d3d4da7"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Fri Sep 04 07:34:04 2026 +0200"
      },
      "committer": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@confluent.io",
        "time": "Fri Sep 04 08:55:34 2026 +0200"
      },
      "message": "Revert \"[FLINK-39977][runtime] Recovery of merged channel state handles\"\n\nThis reverts commit 85d60af8b4413c2d223982bf7bc1e17f0cfedae6.\n"
    },
    {
      "commit": "a1b2ccd18a6c061aa2436efcadf8e03f3d3d4da7",
      "tree": "5b820177fd90b7ae9c4e9e7ec0356bb308dd10bf",
      "parents": [
        "e0fed5bfefafa4ab732730494629184c00ee8b82"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Fri Sep 04 07:33:43 2026 +0200"
      },
      "committer": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@confluent.io",
        "time": "Fri Sep 04 08:55:34 2026 +0200"
      },
      "message": "Revert \"[FLINK-39977][runtime] Add ITCase for file-merged channel state recovery\"\n\nThis reverts commit ab65430b64a6cdeb7b5dec8c22987a6ca9a15e33.\n"
    },
    {
      "commit": "e0fed5bfefafa4ab732730494629184c00ee8b82",
      "tree": "1139733f5f102d050e7f36df19d966027750bd28",
      "parents": [
        "ab65430b64a6cdeb7b5dec8c22987a6ca9a15e33"
      ],
      "author": {
        "name": "Mika Naylor",
        "email": "mnaylor@confluent.io",
        "time": "Thu Sep 03 20:50:49 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 20:50:49 2026 +0200"
      },
      "message": "[FLINK-40466][table] Refactor defining table arguments in PTF Test Harness for more complex table arguments (#29018)"
    },
    {
      "commit": "ab65430b64a6cdeb7b5dec8c22987a6ca9a15e33",
      "tree": "d328895b1a1238ddea3b958dc29b4b5dfca44323",
      "parents": [
        "85d60af8b4413c2d223982bf7bc1e17f0cfedae6"
      ],
      "author": {
        "name": "Zakelly",
        "email": "zakelly.lan@gmail.com",
        "time": "Sat Aug 29 22:08:25 2026 +0800"
      },
      "committer": {
        "name": "Zakelly",
        "email": "zakelly.lan@gmail.com",
        "time": "Thu Sep 03 22:33:21 2026 +0800"
      },
      "message": "[FLINK-39977][runtime] Add ITCase for file-merged channel state recovery\n\nGenerated-by: OpenAI Codex (GPT-5.6 Sol)\n"
    },
    {
      "commit": "85d60af8b4413c2d223982bf7bc1e17f0cfedae6",
      "tree": "7d0b770bc863ecadef5c5cd8f0fc31d8ca6d4cc0",
      "parents": [
        "c4bfcd5ea7521eac786ebf578b7cd549695864b0"
      ],
      "author": {
        "name": "Zakelly",
        "email": "zakelly.lan@gmail.com",
        "time": "Sat Aug 29 21:27:01 2026 +0800"
      },
      "committer": {
        "name": "Zakelly",
        "email": "zakelly.lan@gmail.com",
        "time": "Thu Sep 03 22:33:21 2026 +0800"
      },
      "message": "[FLINK-39977][runtime] Recovery of merged channel state handles\n"
    },
    {
      "commit": "c4bfcd5ea7521eac786ebf578b7cd549695864b0",
      "tree": "968d7e528942c56dc1818447665a9dd014e17c9f",
      "parents": [
        "26c1062dfc464c86267f5d47a61af8c8bbd97847"
      ],
      "author": {
        "name": "vbhanuchander-lang",
        "email": "v.bhanuchander@gmail.com",
        "time": "Thu Sep 03 10:05:12 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 22:05:12 2026 +0800"
      },
      "message": "[FLINK-40370][python] Fix bytes-backed Avro decimal framing (#28996)"
    },
    {
      "commit": "26c1062dfc464c86267f5d47a61af8c8bbd97847",
      "tree": "2dfca9a965303b7ea2d16f650f91d59d57d855ce",
      "parents": [
        "d554162df59e643b256ee1a2de0e12a8e045a317"
      ],
      "author": {
        "name": "Moritz Manner",
        "email": "moritz.manner@gmail.com",
        "time": "Thu Sep 03 15:22:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 15:22:29 2026 +0200"
      },
      "message": "[FLINK-40491][core] Extend `BinaryVariant` with `TIME`, `TIMESTAMP_NS`, `TIMESTAMP_LTZ_NS` primitives"
    },
    {
      "commit": "d554162df59e643b256ee1a2de0e12a8e045a317",
      "tree": "0956d0ad83a875c387a0a2536bd440a4a8f4cdf4",
      "parents": [
        "e67c9363c8653c7b2e7fa996d13b4d5fd5854775"
      ],
      "author": {
        "name": "Fabian Hueske",
        "email": "fhueske@confluent.io",
        "time": "Thu Sep 03 12:52:05 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 12:52:05 2026 +0200"
      },
      "message": "[FLINK-40477][table] Fix constraint enforcer for partial deletes (#29067)\n\nThe sink NOT NULL enforcer inspected every row regardless of RowKind,\nso a by-key (partial) delete tombstone, whose non-key columns are legitimately null,\nwas rejected (ERROR) or silently dropped (DROP), losing the delete.\n\nRelax NOT NULL for the non-key columns of DELETE rows in key-only-delete pipelines;\nkey columns and all other row kinds stay enforced.\n\nCo-Generated: Claude Opus 4.8 (1M context)"
    },
    {
      "commit": "e67c9363c8653c7b2e7fa996d13b4d5fd5854775",
      "tree": "22bbb2929f17cb5dcc8120ac77f58fc1bf15c076",
      "parents": [
        "81389aca7136fd2e69d9c308dbe0db005ddd46b2"
      ],
      "author": {
        "name": "Gabor Somogyi",
        "email": "gabor_somogyi2@apple.com",
        "time": "Thu Sep 03 08:45:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 08:45:34 2026 +0200"
      },
      "message": "[FLINK-40539][sql-gateway] Redact sensitive values in SET; and session config responses"
    },
    {
      "commit": "81389aca7136fd2e69d9c308dbe0db005ddd46b2",
      "tree": "b800f4af15268b2371c2d748bfe80c0c4f535a4c",
      "parents": [
        "3e1c65ec36aa7725427b39b9affa5709a1f05b5b"
      ],
      "author": {
        "name": "Liu Liu",
        "email": "imbiansl@live.cn",
        "time": "Wed Sep 02 23:18:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 23:18:03 2026 +0800"
      },
      "message": "[FLINK-40431][python] Add UDF support to DataFrame API (#29029)"
    },
    {
      "commit": "3e1c65ec36aa7725427b39b9affa5709a1f05b5b",
      "tree": "0bb5f942fb4ab1bf067ff8a56e6cec3bab825e93",
      "parents": [
        "7d194385601701283df5da9f296f3eb5c61b46ba"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Mon Aug 31 17:34:53 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Wed Sep 02 16:16:29 2026 +0200"
      },
      "message": "[FLINK-40519][network] Deliver priority barrier to a credited remote reader while the subpartition is blocked during recovery\n"
    },
    {
      "commit": "7d194385601701283df5da9f296f3eb5c61b46ba",
      "tree": "a4e80e8be3172ee80eafb7eac29f3d21a98571bd",
      "parents": [
        "916248ea8f06778a4562b4a8712b2d16adb58165"
      ],
      "author": {
        "name": "Arvid Heise",
        "email": "AHeise@users.noreply.github.com",
        "time": "Wed Sep 02 16:11:00 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 16:11:00 2026 +0200"
      },
      "message": "[FLINK-40496][table-planner] Apply append-only column rules consistently when altering a materialized table (#29034)\n\nCREATE OR ALTER derived its column changes from a different diff implementation than ALTER ... AS and did not surface a query-driven column reorder to the append-only validation, so reordering existing columns behaved inconsistently: it was silently applied when the query text was unchanged - rewriting the stored column order with no error - and rejected otherwise. The silent path left the stored schema disagreeing with the query, which then miscompiled the positional refresh INSERT.\n\nRoute both statements through one diff (validateAndExtractColumnChanges, dropping buildSchemaTableChanges), computing the CREATE OR ALTER diff from the query the same way ALTER ... AS does and positioning old columns by their rank among the columns that survive into the new schema so retained non-persisted columns do not skew it. Apply the append-only rules to every query-carrying alter regardless of whether the query text changed, so reordering or retyping existing columns is rejected consistently; a query-inferred nullability change is treated directionally - a tightening flip such as STRING to STRING NOT NULL is tolerated as an inference artifact while a loosening flip from NOT NULL to nullable renders as a physical column type change and is rejected.\n\nCo-authored-by: Arvid Heise \u003c4559103+AHeise@users.noreply.github.com\u003e\nCo-authored-by: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "916248ea8f06778a4562b4a8712b2d16adb58165",
      "tree": "7515f4941e83e58e16cd87ff1a55c4adefd72ab4",
      "parents": [
        "008e440edc9203daa4cf7b43ee3f5a691cd92a0c"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Wed Sep 02 15:21:40 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 15:21:40 2026 +0200"
      },
      "message": "[FLINK-40537][build] IDEA should use java version same as in `source.java.version`"
    },
    {
      "commit": "008e440edc9203daa4cf7b43ee3f5a691cd92a0c",
      "tree": "07e23bde6be1ae1d65b3e19b5a31f9b556eec1a6",
      "parents": [
        "9bd05c557c74c21e68faa6f5a11e47c6c513c025"
      ],
      "author": {
        "name": "Milesian111",
        "email": "chuanbge@vip.qq.com",
        "time": "Fri Aug 28 14:39:06 2026 +0800"
      },
      "committer": {
        "name": "Dian Fu",
        "email": "dianfu@apache.org",
        "time": "Wed Sep 02 20:34:39 2026 +0800"
      },
      "message": "[FLINK-40422][python] Add slicing APIs to DataFrame API\n\nThis closes #29033.\n"
    },
    {
      "commit": "9bd05c557c74c21e68faa6f5a11e47c6c513c025",
      "tree": "ff419efbe948a39cc95f12bb99d7f036010f2381",
      "parents": [
        "a0d52bdb14520661c0332938ec4b073ae5e57aac"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Mon Aug 31 18:57:52 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Wed Sep 02 13:42:41 2026 +0200"
      },
      "message": "[FLINK-40524][network] Skip the recoveredBuffers monitor on the getNextBuffer hot path for channels that never recover\n"
    },
    {
      "commit": "a0d52bdb14520661c0332938ec4b073ae5e57aac",
      "tree": "dec22b90b424b8edebacbb0356fa5648f6e64b1c",
      "parents": [
        "8ce71ee0b9ce3dcc53711326a2a92338dfe9c185"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Mon Aug 31 17:29:45 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Wed Sep 02 13:42:14 2026 +0200"
      },
      "message": "[FLINK-40521][network] Document potential lost priority-barrier wakeup in LocalInputChannel during checkpointing-during-recovery\n"
    },
    {
      "commit": "8ce71ee0b9ce3dcc53711326a2a92338dfe9c185",
      "tree": "f7107396b0306843ac3390f2cf9bdc8520301b80",
      "parents": [
        "3cdde2a7b13a67002b66e0d9a9a2f33d08f7b6bd"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Mon Aug 31 17:28:20 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Wed Sep 02 13:41:37 2026 +0200"
      },
      "message": "[FLINK-40518][checkpointing] Only enable checkpointing-during-recovery when unaligned checkpoints are enabled\n"
    },
    {
      "commit": "3cdde2a7b13a67002b66e0d9a9a2f33d08f7b6bd",
      "tree": "16a80be0d8ee5604955481fc64cfea8d43bfce31",
      "parents": [
        "c7489bc5eb892659482b5ce88f7dbcb532693598"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Mon Aug 31 17:24:51 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Wed Sep 02 13:41:13 2026 +0200"
      },
      "message": "[FLINK-40522][network] Deduplicate RecoveryCheckpointBarrier sentinel helpers shared by LocalInputChannel and RemoteInputChannel\n"
    },
    {
      "commit": "c7489bc5eb892659482b5ce88f7dbcb532693598",
      "tree": "437a96986291fc36d8b829bedc56f9a2577b8c15",
      "parents": [
        "03e57af1f65fa0718a4e592abced9e8d7dc37a72"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Mon Aug 31 18:46:37 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Wed Sep 02 13:40:42 2026 +0200"
      },
      "message": "[FLINK-40525][network] Remove residual receivedBuffers lock in finishReadRecoveredState to avoid ABBA deadlock\n\nfinishReadRecoveredState() wrapped onRecoveredStateBuffer() in synchronized(receivedBuffers), but that method already locks receivedBuffers internally and, when the queue was empty, calls notifyChannelNonEmpty(), which acquires inputChannelsWithData while receivedBuffers is still held. This inverts the task thread\u0027s inputChannelsWithData -\u003e receivedBuffers lock order and can deadlock on the error path (ABBA). Removing the redundant outer lock restores the correct order with no behavior change, since onRecoveredStateBuffer already provides the required mutual exclusion.\n"
    },
    {
      "commit": "03e57af1f65fa0718a4e592abced9e8d7dc37a72",
      "tree": "383e665093dfd3955b05d990653bcb017eeba996",
      "parents": [
        "bee138d17ea09dc670bb5fdbfa67a784a3d01d55"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Mon Aug 31 18:43:55 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Wed Sep 02 13:38:21 2026 +0200"
      },
      "message": "[FLINK-40523][network] Compute tracePersist debug string only when trace logging is enabled\n"
    },
    {
      "commit": "bee138d17ea09dc670bb5fdbfa67a784a3d01d55",
      "tree": "976bf5154e3b2bf970d132989884719988a332d8",
      "parents": [
        "9e76ac48dab13733dce130de0da5b017f4c2dae2"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Wed Sep 02 11:30:08 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 11:30:08 2026 +0200"
      },
      "message": "[FLINK-40536][build] Bump cyclonedx-maven-plugin to 2.9.3"
    },
    {
      "commit": "9e76ac48dab13733dce130de0da5b017f4c2dae2",
      "tree": "65e9ca544bb7030c1df1ae824f0ee08a424e1397",
      "parents": [
        "878844f937f78963b8765d848731d13b4592ce32"
      ],
      "author": {
        "name": "Federico Dolce",
        "email": "fdolce@confluent.io",
        "time": "Fri Aug 28 12:39:36 2026 +0200"
      },
      "committer": {
        "name": "Dian Fu",
        "email": "dianfu@apache.org",
        "time": "Wed Sep 02 11:55:30 2026 +0800"
      },
      "message": "[FLINK-40197][python] Add sql() to the DataFrame API\n\nAdd pyflink.dataframe.sql(), which executes a SQL SELECT query and\nreturns the result as a DataFrame. Referenced DataFrames are registered\nas temporary views for the duration of the call and dropped afterwards:\nauto-binding registers DataFrames from the caller\u0027s scope under their\nvariable names (best-effort, with warnings on invalid identifiers and\ncollisions, never shadowing permanent catalog objects), while explicit\nkeyword bindings are strict, take precedence, and may intentionally\nshadow permanent catalog tables.\n\nThis closes #29036.\n"
    },
    {
      "commit": "878844f937f78963b8765d848731d13b4592ce32",
      "tree": "4bc207853c18220d6d1cb91533e434c58197ccb3",
      "parents": [
        "76b7ed3d4648d3e2e1bc40a70f2e597699b6d392"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "rgharib@confluent.io",
        "time": "Tue Sep 01 10:48:40 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 10:48:40 2026 +0200"
      },
      "message": "[FLINK-40486][table] Introduce the UUID logical type \n\nThis closes #29041"
    },
    {
      "commit": "76b7ed3d4648d3e2e1bc40a70f2e597699b6d392",
      "tree": "7289263776abed782b4b27fbc740528dbbf78bb8",
      "parents": [
        "a922643b248fe22e21a8a4701bc4603a76fe678a"
      ],
      "author": {
        "name": "Samrat",
        "email": "dbsamrat@apache.org",
        "time": "Tue Sep 01 12:45:31 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 12:45:31 2026 +0530"
      },
      "message": "[FLINK-40017] Introduce Seaweedfs in native-s3-fs"
    },
    {
      "commit": "a922643b248fe22e21a8a4701bc4603a76fe678a",
      "tree": "afcfcf16d6136bdf4620915d4f52d2de2c885489",
      "parents": [
        "8b0f380304dff08ac763c7b94aa37839dc714bbc"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Mon Aug 31 13:41:35 2026 +0200"
      },
      "committer": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Mon Aug 31 22:03:38 2026 +0200"
      },
      "message": "[hotfix][build] Bump `directory-maven-plugin` to 1.0\n"
    },
    {
      "commit": "8b0f380304dff08ac763c7b94aa37839dc714bbc",
      "tree": "063324ae3b6cf8d523d6fb72053f917a847d7624",
      "parents": [
        "622106923e09b76c3e3d13624b3e7bbb83cc1d73"
      ],
      "author": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Sun Aug 30 21:03:25 2026 +0200"
      },
      "committer": {
        "name": "Sergey Nuyanzin",
        "email": "snuyanzin@gmail.com",
        "time": "Mon Aug 31 22:03:38 2026 +0200"
      },
      "message": "[FLINK-40510][build] Bump Apache Parent pom to 39\n"
    },
    {
      "commit": "622106923e09b76c3e3d13624b3e7bbb83cc1d73",
      "tree": "6172d5108a19f1dd515a823a65741c91e76c7149",
      "parents": [
        "097f914d6f2c0e71da6d6c50d16681eabdf8e2ce"
      ],
      "author": {
        "name": "Purushottam Sinha",
        "email": "psinha@confluent.io",
        "time": "Tue Sep 01 00:33:05 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 21:03:05 2026 +0200"
      },
      "message": "[FLINK-40382][tests] Execute static nested test class variants and guard against regressions"
    },
    {
      "commit": "097f914d6f2c0e71da6d6c50d16681eabdf8e2ce",
      "tree": "1ef71c296970ab3e9646b7c0a53d0e5528a9eef6",
      "parents": [
        "cea216a8ee8545bcba7e07e18ab02608c3b1a5e1"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Mon Aug 31 21:00:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 21:00:16 2026 +0200"
      },
      "message": "[FLINK-40207][table-runtime] Modernize BinaryStringDataTest with JUnit 5"
    },
    {
      "commit": "cea216a8ee8545bcba7e07e18ab02608c3b1a5e1",
      "tree": "3e2774dfc15465884ef269aac502867d246c0f51",
      "parents": [
        "0cca58263ae70e31c0741b6795adea114de31250"
      ],
      "author": {
        "name": "Vasudev Kelappassery",
        "email": "150450112+VasShabu@users.noreply.github.com",
        "time": "Mon Aug 31 17:21:57 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 18:21:57 2026 +0200"
      },
      "message": "[FLINK-40356][table] Add new MapFromEntries built-in function\n\nThis closes #28948."
    },
    {
      "commit": "0cca58263ae70e31c0741b6795adea114de31250",
      "tree": "6d535c2514b6cf6072ad36c5f56dedb46ac8aedc",
      "parents": [
        "76e774e04ff84ea305714153c5f4790fff98437c"
      ],
      "author": {
        "name": "Vaibhav Mashal",
        "email": "110161673+vaibhavmashal@users.noreply.github.com",
        "time": "Mon Aug 31 19:35:22 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 19:35:22 2026 +0530"
      },
      "message": "[hotfix][docs] Fix AzureTableConfiguration class name casing in Azure Table Storage doc (#29044)"
    },
    {
      "commit": "76e774e04ff84ea305714153c5f4790fff98437c",
      "tree": "5a7fe2ef0dbcfc58f81731beebd2b64e2a63777f",
      "parents": [
        "13a86e49d8f9be5ca7c54ceeffbbadc46b092696"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "yangweiqing001@gmail.com",
        "time": "Sun Aug 30 07:14:19 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 30 22:14:19 2026 +0800"
      },
      "message": "[hotfix][runtime] Fix getOrinalTypeSerializerSnapshot typo (#29046)\n\nRename TtlAwareSerializerSnapshot#getOrinalTypeSerializerSnapshot to\ngetOriginalTypeSerializerSnapshot, matching the correctly spelled\nTtlAwareSerializer#getOriginalTypeSerializer that it mirrors.\n\nGenerated-by: Claude Code (Opus 5)"
    },
    {
      "commit": "13a86e49d8f9be5ca7c54ceeffbbadc46b092696",
      "tree": "346dc74835e25da52bb9f24668666921a391c0f9",
      "parents": [
        "b53ea1b1c4d5ab0ec882559a4a050d82ae5740e0"
      ],
      "author": {
        "name": "Gabor Somogyi",
        "email": "gabor_somogyi2@apple.com",
        "time": "Sat Aug 29 21:10:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 29 21:10:03 2026 +0200"
      },
      "message": "[FLINK-40506][s3] Shade all runtime deps in flink-s3-fs-native to avoid silently dropping plugin dependencies"
    },
    {
      "commit": "b53ea1b1c4d5ab0ec882559a4a050d82ae5740e0",
      "tree": "e22d8c24dcbe279523bb30599a019dc12f3fbe4a",
      "parents": [
        "cc633c644e510eac74b06ab470e467b43a1987b2"
      ],
      "author": {
        "name": "Arvid Heise",
        "email": "AHeise@users.noreply.github.com",
        "time": "Fri Aug 28 17:18:24 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 17:18:24 2026 +0200"
      },
      "message": "[FLINK-40481][table] Fix SHOW CREATE FROM_NOW timestamp direction (#29030)\n\nShowCreateUtil.extractStartMode adds the interval to now() when\nannotating FROM_NOW/RESUME_OR_FROM_NOW in SHOW CREATE output,\nproducing a future timestamp in the \"Evaluated to\nFROM_TIMESTAMP(...)\" comment instead of the documented past\nresolution. Purely a display bug; it does not affect which data is\nactually read.\n\nThread a Clock through extractStartMode and through a package-private\noverload of buildShowCreateMaterializedTableRow (the public API keeps\nits existing signatures and hardcodes Clock.systemUTC()), switch to\nnow(clock).minus(amount), and normalize the clock to UTC before\nreading its wall-clock time so a clock in a non-UTC zone can never be\nsilently mislabeled by the subsequent toInstant(ZoneOffset.UTC).\n\nShowCreateUtilTest previously normalized the evaluated timestamp in\nboth the actual and expected strings via regex before comparing,\nsince it relied on the wall clock and the exact value couldn\u0027t be\nknown in advance. That normalization erased the value being tested,\nso it could never have caught a sign error. Inject FIXED_CLOCK into\nthe parameterized materialized-table test instead and assert the\nliteral expected string with no normalization; that case already\ncovers the sign fix, so the only additional unit test kept is one\nproving a non-UTC clock zone can\u0027t leak into the display.\n\nCo-authored-by: Arvid Heise \u003c4559103+AHeise@users.noreply.github.com\u003e"
    },
    {
      "commit": "cc633c644e510eac74b06ab470e467b43a1987b2",
      "tree": "293e60053418a7e5f5de408fe10bb6c3a70282c8",
      "parents": [
        "a24de2e8589b74b2379fd270a78a531304651f7d"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Fri Aug 28 16:44:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 16:44:53 2026 +0200"
      },
      "message": "[FLINK-40241][table-runtime] Support `VARIANT` as column type in the \u0027raw\u0027 format\n\nThe \u0027raw\u0027 format now accepts a single VARIANT column, treating the bytes as a JSON document. On read the bytes are decoded with \u0027raw.charset\u0027 and parsed like PARSE_JSON with duplicate keys rejected; on write the value is rendered with Variant#toJson and encoded with the same charset. The round trip is value-lossless but not byte-lossless: insignificant whitespace is dropped and object keys are ordered. \u0027raw.endianness\u0027 does not apply to VARIANT.\n\nCombined with \u0027raw.line-delimiter\u0027 this reads and writes newline-delimited JSON, one row per line."
    },
    {
      "commit": "a24de2e8589b74b2379fd270a78a531304651f7d",
      "tree": "e80b512b447d4abcd17cf743c1e319faf25aff45",
      "parents": [
        "e439490a9c565b142e17fe001ce2a6ca200148e3"
      ],
      "author": {
        "name": "Fabian Hueske",
        "email": "fhueske@confluent.io",
        "time": "Fri Aug 28 16:32:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 16:32:21 2026 +0200"
      },
      "message": "[FLINK-40498][tests] Adjust LateralSnapshotJoin tests for optional TABLE keyword (#29035)\n\nDrop the now-optional TABLE keyword from the LATERAL table-function calls in\nthe LATERAL SNAPSHOT test suite, using the \"LATERAL SNAPSHOT(...)\" form. One\nplan test (testInnerJoin) and one semantic test program (INNER_JOIN) keep the\nexplicit \"LATERAL TABLE(SNAPSHOT(...))\" form to retain coverage of that syntax.\n\nCo-Generated: Claude Opus 4.8 (1M context)"
    },
    {
      "commit": "e439490a9c565b142e17fe001ce2a6ca200148e3",
      "tree": "ad933c43fa3d77d9a197f303c995eced04752489",
      "parents": [
        "bb773b5fb8a4a87dd4efc3a8ae261b7e08e602a6"
      ],
      "author": {
        "name": "Samrat002",
        "email": "decorde.apex@gmail.com",
        "time": "Wed Aug 12 10:58:50 2026 +0530"
      },
      "committer": {
        "name": "Roman",
        "email": "khachatryan.roman@gmail.com",
        "time": "Fri Aug 28 15:03:50 2026 +0200"
      },
      "message": "[FLINK-37666] CWE-378: Creation of Temporary File With Insecure Permissions in Temporary File Creation\n"
    },
    {
      "commit": "bb773b5fb8a4a87dd4efc3a8ae261b7e08e602a6",
      "tree": "20802964f0f162bd4f0eb10f7933c1f3f75b319a",
      "parents": [
        "e3a53a5e1abf9dfd99c2485fed854fc379cef64b"
      ],
      "author": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Fri Aug 28 14:15:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 14:15:57 2026 +0200"
      },
      "message": "[FLINK-40475][runtime] Fix watermark loss and stall in StatusWatermarkValve when subpartitions realign after idleness (#29024)\n\n[FLINK-40475][runtime] Fix watermark loss and stall in StatusWatermarkValve when subpartitions realign after idleness\n\nThe emission logic of StatusWatermarkValve relies on two invariants over\nthe set of watermark-aligned subpartitions: it is only empty when no\nsubpartition is active, and whenever it is non-empty its min watermark\nequals the last output watermark. Both were violated once an unaligned\nsubpartition - one that went idle, resumed, and only partially caught up\nto the last output watermark - was involved:\n\n- The FLINK-7728 all-idle flush was skipped unless the last subpartition\n  to become idle held the current min watermark. That assumption doesn\u0027t\n  hold when unaligned subpartitions are involved, since an unaligned\n  subpartition\u0027s watermark is invisible to the min-derive path. This made\n  the final watermark depend on the order in which inputs became idle -\n  exactly the defect FLINK-7728 was meant to fix.\n- The idle-\u003eactive branch re-added a caught-up subpartition to the aligned\n  set without re-deriving the min. When no other aligned subpartition\n  remained, the realigned subpartition\u0027s watermark stalled indefinitely,\n  emitted only once an even larger watermark arrived on it.\n\nFix both by re-deriving from the aligned set unconditionally instead of\nrelying on the broken shortcut:\n- Flush the max watermark unconditionally once all subpartitions go idle.\n  findAndOutputMaxWatermarkAcrossAllSubpartitions only emits when the max\n  advances past the last output watermark, so this cannot regress\n  monotonicity, and it keeps the valve consistent with\n  CombinedWatermarkStatus, which has flushed unconditionally since\n  FLINK-38454.\n- Re-derive (and possibly emit) the min watermark after a subpartition\n  realigns, after the ACTIVE status is emitted so downstream inputs don\u0027t\n  drop the watermark while they still consider the input idle.\n\nDocuments the invariants on alignedSubpartitionStatuses.\n\nGenerated-by: Claude Code (claude-fable-5)"
    },
    {
      "commit": "e3a53a5e1abf9dfd99c2485fed854fc379cef64b",
      "tree": "4196df383b3045034f06156332ce7f1178a93c78",
      "parents": [
        "6fc280fb16372f23f2aa4ab6af3f18dbdda6285a"
      ],
      "author": {
        "name": "Martijn Visser",
        "email": "2989614+MartijnVisser@users.noreply.github.com",
        "time": "Fri Aug 28 10:42:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 10:42:31 2026 +0200"
      },
      "message": "[FLINK-40459][build] Bump Maven from 3.8.6 to 3.9.16 (#29009)\n\nUpdates the enforcer requireMavenVersion pin, wrapper distributionUrl/\nchecksum, and documented Maven version (README, AGENTS.md, docs) in\nlock-step. Switches docs.sh to build via the Maven wrapper instead of\nthe CI image\u0027s system Maven, consistent with the rest of CI.\n\nMaven 3.9 changed plugin execution logging from artifactId-based to\ngoal-prefix-based; flink-ci-tools\u0027 CI log parsers now accept both\nforms."
    },
    {
      "commit": "6fc280fb16372f23f2aa4ab6af3f18dbdda6285a",
      "tree": "c32c6dabd3247860d9b1bbbb44a46bc1e309e590",
      "parents": [
        "3265f06cadd23a1979e6569b73990d044c73d293"
      ],
      "author": {
        "name": "Fabian Hueske",
        "email": "fhueske@confluent.io",
        "time": "Fri Aug 28 09:59:33 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 09:59:33 2026 +0200"
      },
      "message": "[FLINK-39780] Make TABLE keyword optional in LATERAL context (#28276)\n\nExtend the SQL parser accept the implicit table-function-call form (e.g. \"FROM t, LATERAL fn(args)\") in addition to the explicit \"LATERAL TABLE(fn(args))\" form.\nForward ports the Calcite change CALCITE-7183 to Flink.\n\n* Apply CALCITE-7183 Parser.jj change\n* extend FlinkSqlParserImplTest\n* adjust documentation to favor LATERAL table function calls without TABLE keyword\n\nCo-Generatedy: Claude Opus 4.8 (1M context)\u003e"
    },
    {
      "commit": "3265f06cadd23a1979e6569b73990d044c73d293",
      "tree": "167f9cd472717ab0538e72fa1afe7dcbef1e40d4",
      "parents": [
        "8e9e69cb0ed430fbce873ea0e6ab6afdbad85421"
      ],
      "author": {
        "name": "Rango",
        "email": "lhl.snail@gmail.com",
        "time": "Fri Aug 28 15:56:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 09:56:24 2026 +0200"
      },
      "message": "[hotfix][docs] Fix OPTIONS hint key in time attributes docs"
    },
    {
      "commit": "8e9e69cb0ed430fbce873ea0e6ab6afdbad85421",
      "tree": "df110141e779e3643aea59e2d1c1cca2924be390",
      "parents": [
        "438b3a8aeb04f58809e65ea4d83e68e9eb46ece4"
      ],
      "author": {
        "name": "RaoraoXiong",
        "email": "xiongraorao@gmail.com",
        "time": "Fri Aug 28 11:14:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 11:14:24 2026 +0800"
      },
      "message": "[FLINK-39986][table-planner] Support Python UDF deduplication in projection and condition (#28638)\n\nThe duplication originates in the planner: RexProgram already shares\nstructurally identical expressions through RexLocalRef, but the Python calc\ntranslation calls RexProgram#expandLocalRef, which expands the shared\nreference back into independent expression trees.\n\nThis is now addressed by two logical optimizer rules, so that neither\nCommonExecPythonCalc nor the projection codegen needs to be aware of it:\n\n- RemoteCalcConditionProjectionCseRule rewrites a Calc projection to\n  reference UDF calls already computed by the Calc below it, which removes\n  duplicates shared between a WHERE condition and a SELECT projection.\n- RemoteCalcProjectionCseRule splits a Calc containing duplicated\n  deterministic calls into a bottom Calc computing each distinct call once\n  plus a top Calc projecting the shared results back into their original\n  positions.\n\nBoth rules share their reusability predicate through RemoteCalcCseUtil so\nthey agree on which calls may safely share a single evaluation.\nNon-deterministic calls are always evaluated independently.\n\nGenerated-by: Claude-4.6-Opus"
    },
    {
      "commit": "438b3a8aeb04f58809e65ea4d83e68e9eb46ece4",
      "tree": "96e56139b52c1d9d6504b8ffab0061f2134b873d",
      "parents": [
        "57de4676f3b6c6e67675ef3c4cbbacee445a1267"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Thu Aug 27 20:43:20 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Thu Aug 27 22:42:34 2026 +0200"
      },
      "message": "[FLINK-40484][tests] Run UnalignedCheckpointTestBase with the DefaultScheduler\n\nThe test base was tagged with FailsWithAdaptiveScheduler, so the whole suite\nwas excluded by surefire whenever the enable-adaptive-scheduler profile was\nactive. Pin JobManagerOptions#SCHEDULER to Default in the job configuration\ninstead and drop the tag, so the suite always runs with the DefaultScheduler\nregardless of the scheduler selected by the build profile.\n"
    },
    {
      "commit": "57de4676f3b6c6e67675ef3c4cbbacee445a1267",
      "tree": "c0f16e17581472d5f7b773adc430c58a34009aac",
      "parents": [
        "52659086b597bc23705d80c237d3bc0938410e76"
      ],
      "author": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Thu Aug 27 15:27:26 2026 +0200"
      },
      "committer": {
        "name": "Rui Fan",
        "email": "1996fanrui@gmail.com",
        "time": "Thu Aug 27 22:14:15 2026 +0200"
      },
      "message": "[FLINK-40482][runtime] Abort checkpoint unless all tasks are RUNNING or FINISHED\n\nDefaultCheckpointPlanCalculator used Execution.isFinished(), which returns\nstate.isTerminal(), to decide whether a task is finished. This treats any\nterminal task -- FINISHED, FAILED or CANCELED -- as finished. During a\nfailover, FAILED/CANCELED tasks were therefore excluded from tasksToWaitFor,\nproducing a checkpoint plan that expects fewer acks than it should.\n\n- calculateCheckpointPlan: replace checkAllTasksInitiated() with\n  checkAllTasksRunningOrFinished(), which requires every task to have an\n  attached Execution in RUNNING or FINISHED state, the only states a\n  checkpoint can be based on. Any other state aborts the checkpoint with a\n  graceful CheckpointException instead of building a plan from a transient\n  state.\n- collectTaskRunningStatus: classify explicitly; a non-terminal task is\n  running, and a terminal task must be genuinely FINISHED.\n- Remove the misleading Execution.isFinished() (its only caller).\n\nThe check is condition-based rather than mode-based, so it is correct for both\nstreaming and batch. calculateCheckpointPlan and all task state transitions run\non the JobManager main thread, so the pre-check and plan computation are atomic.\n"
    },
    {
      "commit": "52659086b597bc23705d80c237d3bc0938410e76",
      "tree": "a271e55799432122978698ead65dd99f47379aef",
      "parents": [
        "2e224426850258c9a342db9ea87fd625c6692744"
      ],
      "author": {
        "name": "Timo Theusner",
        "email": "32929874+Timm0@users.noreply.github.com",
        "time": "Thu Aug 27 14:11:46 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 20:11:46 2026 +0800"
      },
      "message": "[FLINK-40194][python] Add drop_duplicates to the DataFrame API (#29022)"
    }
  ],
  "next": "2e224426850258c9a342db9ea87fd625c6692744"
}
