)]}'
{
  "log": [
    {
      "commit": "dc3eb23ea8541a39ec5e3aac13a6e65169cd6e54",
      "tree": "d81bf630f9801c71d4a03e315764b74cd3751cf1",
      "parents": [
        "191869de23ff2ed53154a0f2b233c627c03313bb"
      ],
      "author": {
        "name": "Nicoleta Lazar",
        "email": "nicoleta.lazar@fresha.com",
        "time": "Wed Oct 28 00:15:55 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 00:15:55 2026 +0000"
      },
      "message": "[elixir] Refactor Fluss.Admin module to use keyword opts (#4868)\n\nThis commit replaces the positional arguments in create/drop\ntable/database/partition with keyword options which are easier to extend\nin the future. Moreover, we now changed the defaults (`ignore_if_exists` /\n`ignore_if_not_exists`) to match the Python / C++ clients.\n\nMalformed arguments (names, opts, partition specs) raise `ArgumentError`\nwith details about what is incorrect instead of returning an error."
    },
    {
      "commit": "191869de23ff2ed53154a0f2b233c627c03313bb",
      "tree": "6b394ccbb9c80f2736113bf8124edfc64a97ab77",
      "parents": [
        "8a92b4fd8f3303650db61c99e761cb694a8dca7f"
      ],
      "author": {
        "name": "lz",
        "email": "971066723@qq.com",
        "time": "Wed Oct 28 08:15:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 00:15:04 2026 +0000"
      },
      "message": "[rust] Fix projection of remote logs with older schemas (#4881)\n\nResolve remote batches with their write-time schemas and align them to the projected output. Preserve server-side projection handling and cover row and Arrow batch polling.\n\nFixes #4880\n\nAI-assisted with OpenAI Codex.\n\nCo-authored-by: liuzhuo \u003cliuzhuo@xiaohongshu.com\u003e"
    },
    {
      "commit": "8a92b4fd8f3303650db61c99e761cb694a8dca7f",
      "tree": "09f65f26762d64c635c9747bab52161d63dcf738",
      "parents": [
        "1c4231e12fd57305a8db4ac0c08e143619eabbb2"
      ],
      "author": {
        "name": "falsity",
        "email": "31566267+falsity@users.noreply.github.com",
        "time": "Tue Oct 27 15:35:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 09:35:40 2026 +0200"
      },
      "message": "[filesystems] Implement obtainSecurityToken for Google filesystem (#4790)\n\n* [filesystems] Implement obtainSecurityToken for Google filesystem\n\nDistribute a short-lived Cloud Storage access token so clients can read\ntiered data without the service account key. The server refreshes its own\nservice-account or Compute Engine token. This follows the token receiver\napproach from #1696 and uses that author\u0027s recorded identity.\n\nCo-authored-by: gkatzioura \u003cgkatzioura@gmail.com\u003e\n\n* [filesystems] Issue read-only GCS tokens and accept ADC\n\nClients only download tiered data, so the issued token uses the Cloud\nStorage read-only scope. APPLICATION_DEFAULT is supported and used when\nfs.gs.auth.type is unset.\n\n* [filesystems] Expect read-only client tokens in the GCS bucket test\n\nThe service account key writes and deletes the object. The token issued\nto clients is only checked for read access, and a client write is rejected.\n\n* [filesystems] Reject user GCS tokens and honor the key file\n\nUser ADC ignores the read-only scope, so only a service account may mint\nthe client token. When fs.gs.auth.type is unset, a configured key file is\nused. The mock token server records the requested scope.\n\n* [filesystems] Mint GCS tokens for the connector identity and test the client path\n\n---------\n\nCo-authored-by: gkatzioura \u003cgkatzioura@gmail.com\u003e\nCo-authored-by: Giannis Polyzos \u003cipolyzos.se@gmail.com\u003e"
    },
    {
      "commit": "1c4231e12fd57305a8db4ac0c08e143619eabbb2",
      "tree": "295634bf12feba385fa686d52c0811635c55a4e4",
      "parents": [
        "e79e5bf6e946951d01f3e303300bc904eea0cc5f"
      ],
      "author": {
        "name": "Jark Wu",
        "email": "jark@apache.org",
        "time": "Tue Oct 27 15:24:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 15:24:47 2026 +0800"
      },
      "message": "[docs] Simplify GET_METADATA description in authorization.md (#4908)\n\nAI-Contributed/Feature: 0/3\nAI-Contributed/UT: 0/0"
    },
    {
      "commit": "e79e5bf6e946951d01f3e303300bc904eea0cc5f",
      "tree": "123f59a7ba7b90e3a691ac5639074a0255fbe63b",
      "parents": [
        "3a41bbeaf57e8d8647c49657c95467418abc5242"
      ],
      "author": {
        "name": "yunhong",
        "email": "337361684@qq.com",
        "time": "Tue Oct 27 14:38:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 14:38:55 2026 +0800"
      },
      "message": "[client] Unify cluster inspection in DescribeCluster (#4901)\n\nUnify cluster nodes and tablet server replica loads in Admin.describeCluster,\nusing RPC API key 1075. Keep getServerNodes on the Metadata discovery path\nand enforce cluster DESCRIBE authorization for cluster inspection.\n\nDocument coordinator routing and request volume guidance, and update the\nprotocol bindings and coverage for authorization, missing loads and retries.\n\nClassify NotCoordinatorLeaderException as InvalidMetadataException so\nretryable calls refresh cluster metadata before retrying after a leader\nchange. Cover successful recovery and the one-retry limit.\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\n\n---------\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "3a41bbeaf57e8d8647c49657c95467418abc5242",
      "tree": "fafeda10590f2c47c32cb5dfd0ea9c9762bf1edd",
      "parents": [
        "52480eb6d3def20fdf60ea01e37150dca4077b3a"
      ],
      "author": {
        "name": "Muhammet Orazov",
        "email": "916295+morazow@users.noreply.github.com",
        "time": "Tue Oct 27 06:55:00 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 13:55:00 2026 +0800"
      },
      "message": "[server] Retry kv snapshot lease metadata file writes (#4892)\n\nThe coordinator writes one metadata file per table to remote storage\nwhen it registers or updates a kv snapshot lease. A single failed write\nfailed the whole lease operation, so a short outage of an\nS3-compatible store was enough to fail it.\n\nWrap the write in RetryUtils.executeIOWithRetry, with the same settings\nProducerOffsetsStore uses for its offsets files: 3 attempts, 100 ms\ninitial backoff, at most 1000 ms.\n\nThe file path contains a random UUID, so the caller now resolves it once\nbefore the write. Every retry overwrites the same file. The path is also\nadded to createdFiles before the write, so the cleanup on failure deletes\na partially written file. Before, such a file stayed behind on stores\nlike HDFS, where create() makes the file before the write completes.\n\nAdd TestFileSystem.failNextCreates(n) to inject create() failures, and\ntests for both a recovered write and exhausted retries."
    },
    {
      "commit": "52480eb6d3def20fdf60ea01e37150dca4077b3a",
      "tree": "d8ac8d4f6f5f123ccce075bb2ef87f969ba0727f",
      "parents": [
        "c07dcc6072255d04e4003062041664a422c6260e"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Tue Oct 27 00:29:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 00:29:16 2026 +0800"
      },
      "message": "[server] Complete delayed fetches after log appends (#3412)"
    },
    {
      "commit": "c07dcc6072255d04e4003062041664a422c6260e",
      "tree": "36883811c266a31ef8eff1b5055165b45a0baa45",
      "parents": [
        "1b99b80aea0ba27767d5f3fb156ed465ab95afc9"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Mon Oct 26 23:41:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 23:41:22 2026 +0800"
      },
      "message": "[kafka] Serve Metadata from a consistent table property cache (#4825)\n\nCache table.kafka.enabled as a boolean and capture it with routing in one\nmetadata view. Reuse existing metadata notifications and authorization,\nand isolate topic failures without catalog scans or schema reads.\n\nKeep captured views immutable and prevent stale ZK cache-aside loads from\nundoing property updates or table deletion.\n\n\nAI-Model: gpt-6\nAI-Contributed/Feature: 712/712\nAI-Contributed/UT: 872/872\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "1b99b80aea0ba27767d5f3fb156ed465ab95afc9",
      "tree": "a4661add9ab7e4d14b349eb2c064dec529cf32e2",
      "parents": [
        "1da0eadb1e44c7687c795761992b9e955880ea3b"
      ],
      "author": {
        "name": "Anurag Vaibhav",
        "email": "75154376+Anurag15v@users.noreply.github.com",
        "time": "Mon Oct 26 20:27:31 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 22:57:31 2026 +0800"
      },
      "message": "[flink] Add source ITCase to cover restoration from savepoint(#4537)\n\nThis closes #280."
    },
    {
      "commit": "1da0eadb1e44c7687c795761992b9e955880ea3b",
      "tree": "26db925e2f0e8be6cd18d9181454f948fd87c9ac",
      "parents": [
        "b85258c872830f640f284c4b27adf9505c8c68a8"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Mon Oct 26 22:50:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 22:50:54 2026 +0800"
      },
      "message": "[kafka] Miscellaneous Kafka compatibility improvements (#4865)"
    },
    {
      "commit": "b85258c872830f640f284c4b27adf9505c8c68a8",
      "tree": "f7cbdddc92bb4c2b1bcce6261da4abfe56f642c8",
      "parents": [
        "3062864e6218e5d0e00fe3b1e51cc19c3c94518b"
      ],
      "author": {
        "name": "Giannis Polyzos",
        "email": "ipolyzos.se@gmail.com",
        "time": "Mon Oct 26 10:45:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 16:45:26 2026 +0800"
      },
      "message": "Revert \"[Client] Support bounded log scanning (#4545)\" (#4876)\n\nThis reverts commit aa2283f5c2d7749bc61f160c3ca3b731cf141601."
    },
    {
      "commit": "3062864e6218e5d0e00fe3b1e51cc19c3c94518b",
      "tree": "04a0221f013b1c275c2ae5563ec3af3f319eacf0",
      "parents": [
        "4e0926579fa4746d248e54d960c656e6d1dff1bf"
      ],
      "author": {
        "name": "shuyouZZ",
        "email": "dong63175921@163.com",
        "time": "Mon Oct 26 15:44:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 15:44:16 2026 +0800"
      },
      "message": "[hotfix] Fix daemon shutdown timeout message (#4872)\n\nCo-authored-by: dongshuyou \u003cdongshuyou@didiglobal.com\u003e"
    },
    {
      "commit": "4e0926579fa4746d248e54d960c656e6d1dff1bf",
      "tree": "04bd8674b653e180acca912b98b0066318be7502",
      "parents": [
        "05b215c05ca2337e71e468e719505b8a3651148c"
      ],
      "author": {
        "name": "Giannis Polyzos",
        "email": "ipolyzos.se@gmail.com",
        "time": "Mon Oct 26 08:58:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 14:58:21 2026 +0800"
      },
      "message": "[client] Retry getServerNodes on stale coordinator address (#4873) "
    },
    {
      "commit": "05b215c05ca2337e71e468e719505b8a3651148c",
      "tree": "3a81120fb93d079033ecad472b6b9a22dfc96db6",
      "parents": [
        "c5ca7d3509a3b9badd38a91db4801659f49f35d9"
      ],
      "author": {
        "name": "Junbo Wang",
        "email": "beryllwang@gmail.com",
        "time": "Mon Oct 26 14:16:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 14:16:06 2026 +0800"
      },
      "message": "[docs] Add newly appointed Fluss committers (#4827)\n\nAdd Fei Han, Junbo Wang, and Junfan Zhang to the team page with their\ncompany affiliations, GitHub profiles, and Apache IDs. Keep the existing\nrole grouping and alphabetical order by public name.\n\n\nAI-Model: gpt-6\nAI-Contributed/Feature: 3/3\nAI-Contributed/UT: 0/0\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "c5ca7d3509a3b9badd38a91db4801659f49f35d9",
      "tree": "464b6218905df12b29fc1e10fa8a8e1be5c019b6",
      "parents": [
        "75d84c91e3a51055594d549497909d34730a25ed"
      ],
      "author": {
        "name": "yuxia Luo",
        "email": "luoyuxia@alumni.sjtu.edu.cn",
        "time": "Mon Oct 26 13:44:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 13:44:06 2026 +0800"
      },
      "message": "[FLUSS-4821][client] Skip lake snapshot recovery for old table IDs (#4822)\n\n* [client] Skip lake snapshot recovery for previous table IDs\n\nCheck the table ID in the offsets file before registering a missing lake\nsnapshot. Warn and continue the current commit when the offsets belong to\na previous table, while preserving recovery for the current table ID.\n\nAdd regression coverage for empty and data commit rounds after recreating\na table with retained offsets from the previous table ID.\n\nFixes #4821\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 26/26\nAI-Contributed/UT: 65/65\n\n* [client] Derive recovered snapshot table ID from its offsets path\n\nParse the table ID suffix in the offsets file\u0027s table directory instead of\nopening and deserializing the file. This also skips old-table snapshots\nwhen their offsets files have already been cleaned up.\n\nCover nonexistent local and S3 offsets paths and hyphenated table names.\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 16/16\nAI-Contributed/UT: 29/29\n\n---------\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "75d84c91e3a51055594d549497909d34730a25ed",
      "tree": "afb9687901a89c8493c519ba3c51f0c37ddba8b4",
      "parents": [
        "0e4fce7c916bf3edde99de8533de535a2faca8ed"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Mon Oct 26 11:36:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 11:36:45 2026 +0800"
      },
      "message": "[server] feat: committed isr boundary (#3781)\n\n* feat: committed isr boundary\n\n* add test comment\n\n* [server] Unify committed ISR batch handling\n\nMove committedChanges initialization next to persistence and update the committed map and successful results in one pass.\\n\\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\\nAI-Model: gpt-5\\nAI-Contributed/Feature: 11/11\\nAI-Contributed/UT: 0/0\n\n* [test] Split adjust ISR coordinator tests\n\nMove Adjust ISR scenarios into a dedicated test class that reuses the coordinator test base and keeps CoordinatorEventProcessorTest below the file-length limit after rebasing onto main.\\n\\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\\nAI-Model: gpt-5\\nAI-Contributed/Feature: 0/0\\nAI-Contributed/UT: 887/887"
    },
    {
      "commit": "0e4fce7c916bf3edde99de8533de535a2faca8ed",
      "tree": "8d0958f6a3513a7c5d85d4515b30cc10771b4c53",
      "parents": [
        "f96bc2fa9268be7eacb3ce1f119d380086c4955b"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Mon Oct 26 07:55:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 07:55:20 2026 +0800"
      },
      "message": "[kafka] Add schema-aware JSON Produce with field rescue (#4682)\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e\nCo-authored-by: Jark Wu \u003cjark@apache.org\u003e"
    },
    {
      "commit": "f96bc2fa9268be7eacb3ce1f119d380086c4955b",
      "tree": "d9f469bc207cfc4f06d42fdf1e9bcf95e50cc7dc",
      "parents": [
        "aa2283f5c2d7749bc61f160c3ca3b731cf141601"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Sun Oct 25 22:10:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 22:10:58 2026 +0800"
      },
      "message": "[kafka] Add SASL/PLAIN authentication to Kafka listeners (#4861)"
    },
    {
      "commit": "aa2283f5c2d7749bc61f160c3ca3b731cf141601",
      "tree": "c11ee181aab14faddc3bf407ed1d74c50b89fa3e",
      "parents": [
        "c06677d6a97800dd2fbad73bf32fdd00987a8379"
      ],
      "author": {
        "name": "yangshangqing",
        "email": "50940701+yangshangqing95@users.noreply.github.com",
        "time": "Sun Oct 25 06:56:10 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 12:56:10 2026 +0200"
      },
      "message": "[Client] Support bounded log scanning (#4545)\n\n* [Client] Support bounded log scanning\n\n* [Client] Improve bounded log scan completion and error handling\n\n* [Client] Migrate lake snapshot log reader to bounded scanning\n\n* [client] Preserve compatibility for bounded EARLIEST scans\n\n* [rust] Remove duplicate proto restored by rebase\n\n---------\n\nCo-authored-by: Giannis Polyzos \u003cipolyzos.se@gmail.com\u003e"
    },
    {
      "commit": "c06677d6a97800dd2fbad73bf32fdd00987a8379",
      "tree": "856d834109ab42c3e72f3e0797ba8534628539c5",
      "parents": [
        "267c4f79d873a50cd6ac28e397ea2bcb8ac92308"
      ],
      "author": {
        "name": "Liebing",
        "email": "44154062+LiebingYu@users.noreply.github.com",
        "time": "Sun Oct 25 18:19:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 12:19:54 2026 +0200"
      },
      "message": "Change the implementation of Admin#getServerNodes() to support carrying ServerTag (#1410)\n\n* [server] Refactor Admin#getServerNodes to support carrying ServerTag\n\n* [server] Serve server tags from coordinator cache with fallback\n\n* [server] Fix checkstyle empty line in ServerRpcMessageUtils\n\n---------\n\nCo-authored-by: Giannis Polyzos \u003cipolyzos.se@gmail.com\u003e"
    },
    {
      "commit": "267c4f79d873a50cd6ac28e397ea2bcb8ac92308",
      "tree": "a11a6a90dda81e813d9339904c6383cf3e5c7a5a",
      "parents": [
        "e4ad14895605e281c84209dcde5b2653930e81a6"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Sun Oct 25 16:40:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 16:40:46 2026 +0800"
      },
      "message": "[kafka] Support convert JSON values to Fluss types (#4680)\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e\nCo-authored-by: Jark Wu \u003cjark@apache.org\u003e"
    },
    {
      "commit": "e4ad14895605e281c84209dcde5b2653930e81a6",
      "tree": "325f3a7e1e1fba12b08a2fc5234fc4722c1375b4",
      "parents": [
        "7dab023a68f471b2a1727704661b759caae51c2e"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Sun Oct 25 16:15:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 16:15:48 2026 +0800"
      },
      "message": "[kafka] Cover Produce lifecycle and replication regressions (#4299)"
    },
    {
      "commit": "7dab023a68f471b2a1727704661b759caae51c2e",
      "tree": "ccde953bb86a5cacc2ce1cec232cb10f748b265d",
      "parents": [
        "75c778d7c6ca6739fb4a64ac5ffdd14888fa064c"
      ],
      "author": {
        "name": "Muhammet Orazov",
        "email": "916295+morazow@users.noreply.github.com",
        "time": "Sun Oct 25 08:50:06 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 09:50:06 2026 +0200"
      },
      "message": "[server][rpc] Support DescribeTabletServers API for safe scaling and upgrades (#3743)\n\nAdd a read-only DescribeTabletServers RPC to the Coordinator, following\nthe pattern of GetClusterHealth (#3399). It returns, per tablet server,\nthe same four counters getClusterHealth() reports cluster-wide, scoped\nto that server: numReplicas, inSyncReplicas, numLeaderReplicas and\nactiveLeaderReplicas. It also returns leaderlessReplicas: the number of\nreplicas on that server whose bucket has no elected leader.\n\nThis lets operational tooling (e.g. the Fluss Kubernetes Operator):\n- gate scale-in on a server being empty (numReplicas \u003d\u003d 0),\n- gate rolling upgrades on a per-server green predicate\n  (inSyncReplicas \u003d\u003d numReplicas \u0026\u0026 activeLeaderReplicas \u003d\u003d numLeaderReplicas\n  \u0026\u0026 leaderlessReplicas \u003d\u003d 0),\n- report per-server tablet load in cluster status.\n\nEvery reported server is green exactly when getClusterHealth() reports\nGREEN, so a single response is enough for a rolling-upgrade gate.\n\nThe counters are computed from in-memory CoordinatorContext state on\nthe coordinator event thread via AccessContextEvent. Tablet servers\nforward the request to the coordinator. Live and shutting-down servers\nare always reported, even with zero replicas, and dead servers that\nstill hold assigned replicas remain visible so a scale-in gate cannot\ntreat them as drained.\n\nCloses #3570"
    },
    {
      "commit": "75c778d7c6ca6739fb4a64ac5ffdd14888fa064c",
      "tree": "04b2489328d987ad8abcb03d73f322c3b3594952",
      "parents": [
        "9d4bac61c3bb4c667cd741ddffe1574b327fe556"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Sun Oct 25 10:50:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 10:50:14 2026 +0800"
      },
      "message": "[kafka] Extract value decoding into format factories (#4678)\n\nMove binary and string conversion behind format factories while preserving\nexisting byte copying and borrowed BinaryString behavior. Keep raw STRING\nbytes unchanged, including malformed UTF-8, and retain the buffer range,\nrecord metadata, and Arrow output ownership contracts.\n\nMove buffer-range coverage to the decoder tests and retain the transcoder\nregression for raw bytes after the source buffer is released.\n\n\nAI-Model: gpt-6\nAI-Contributed/Feature: 299/299\nAI-Contributed/UT: 186/186\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "9d4bac61c3bb4c667cd741ddffe1574b327fe556",
      "tree": "97e2cca848e79b71ed91413ce052d0f224515232",
      "parents": [
        "d6eaaf0d7033ce240961e73926fd2513e332d7af"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Sun Oct 25 09:26:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 09:26:39 2026 +0800"
      },
      "message": "[kafka] Integrate Produce with native Fluss append (#4286)"
    },
    {
      "commit": "d6eaaf0d7033ce240961e73926fd2513e332d7af",
      "tree": "75d791eb02bbc42cf3e0b2bcb92aa99038fbdfa9",
      "parents": [
        "f17b16494122ac6aad737d621ebce043ceec3b37"
      ],
      "author": {
        "name": "Junbo Wang",
        "email": "beryllwang@gmail.com",
        "time": "Sat Oct 24 21:43:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 21:43:18 2026 +0800"
      },
      "message": "[flink] Expose the tiering reader waiting ratio (#4786)"
    },
    {
      "commit": "f17b16494122ac6aad737d621ebce043ceec3b37",
      "tree": "bdc5297ad00d54723d35a37ad6d1131d8b2f462d",
      "parents": [
        "9d3cf9e75d6ab54d53cfa7062714a04ba5791053"
      ],
      "author": {
        "name": "Jark Wu",
        "email": "jark@apache.org",
        "time": "Sat Oct 24 18:16:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 18:16:15 2026 +0800"
      },
      "message": "[build] Unify Maven module names (#4853)"
    },
    {
      "commit": "9d3cf9e75d6ab54d53cfa7062714a04ba5791053",
      "tree": "a0d4d317dcb749c4d5660f052e263377b27e5dba",
      "parents": [
        "d2073738ba1c56f77e0fda2832d1c2e71359c74b"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Sat Oct 24 17:31:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 17:31:44 2026 +0800"
      },
      "message": "[kafka] Transcode binary and string Produce records to Arrow (#4285)\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e\nCo-authored-by: Jark Wu \u003cjark@apache.org\u003e"
    },
    {
      "commit": "d2073738ba1c56f77e0fda2832d1c2e71359c74b",
      "tree": "ed4aaba08fee52a2bb7f9a5d2bb84f8272b2c6b5",
      "parents": [
        "e787adcae524a5caa6117e1c98b99a3d50d5c656"
      ],
      "author": {
        "name": "bryndenZh",
        "email": "49369598+bryndenZh@users.noreply.github.com",
        "time": "Sat Oct 24 10:02:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 10:02:17 2026 +0800"
      },
      "message": "[lake] Fix Paimon scan schema mismatch after schema evolution (#4826)"
    },
    {
      "commit": "e787adcae524a5caa6117e1c98b99a3d50d5c656",
      "tree": "fa7b00796f0d68de7325cddf09ac5832078046fa",
      "parents": [
        "c989478bbaa1829f24760a15a3539e0c554c568c"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Sat Oct 24 08:20:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 08:20:30 2026 +0800"
      },
      "message": "[kafka] Handle basic Produce requests independently of storage (#4284)"
    },
    {
      "commit": "c989478bbaa1829f24760a15a3539e0c554c568c",
      "tree": "4eedcbe6af0012d4298ea883eacbf116b0b7395c",
      "parents": [
        "5b3867a4a866cd25beb02308a5eb55c0a6fe462b"
      ],
      "author": {
        "name": "Yang Zhang",
        "email": "yangchuan.zy@alibaba-inc.com",
        "time": "Sat Oct 24 02:52:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 02:52:22 2026 +0800"
      },
      "message": "[spark] Add spark tiering service (#3099)\n\n* [spark] Add Spark tiering service\n\nRun tiering through a driver heartbeat loop and parallel Spark tasks,\nreusing the engine-independent split generator and commit protocol.\nProvide the Spark entry point and Paimon integration coverage for log\nand primary-key tables, partitioned reads, updates and incremental rounds.\n\nUse actual partition bucket counts and consumed WAL offsets when writing\nto the lake, and verify each tiering round against its expected offsets.\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 324/1209\nAI-Contributed/UT: 206/773"
    },
    {
      "commit": "5b3867a4a866cd25beb02308a5eb55c0a6fe462b",
      "tree": "74a4a606511bf8a53c8954e60e1d2a770a1df7c1",
      "parents": [
        "59bb49a507d2763e1b39808ab426f716ea0653b9"
      ],
      "author": {
        "name": "yuxia Luo",
        "email": "luoyuxia@alumni.sjtu.edu.cn",
        "time": "Sat Oct 24 00:02:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 00:02:30 2026 +0800"
      },
      "message": "[lake/paimon] Accept nested bounded types during enablement (#4805)\n\nNormalize Paimon VARCHAR and VARBINARY recursively when comparing an existing\nlake table with the schema generated from Fluss. Match Fluss\u0027s non-null MAP key\nconversion while retaining nullability checks for other nested types.\n\nAdd procedure coverage for ARRAY, MAP, and ROW mappings and a changed nested\nnullability, plus focused schema compatibility checks.\n\n\nAI-Model: gpt-6\nAI-Contributed/Feature: 12/12\nAI-Contributed/UT: 34/34\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "59bb49a507d2763e1b39808ab426f716ea0653b9",
      "tree": "1bb5aac78a43da9e85535abfa59eb5f973a0833f",
      "parents": [
        "e16448467b16fd5f4ecbed52eff102b4c0975aff"
      ],
      "author": {
        "name": "fhan",
        "email": "aaron.han.1986@gmail.com",
        "time": "Fri Oct 23 23:46:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 23:46:28 2026 +0800"
      },
      "message": "[flink] Add $buckets virtual table for bucket metadata (#4379)"
    },
    {
      "commit": "e16448467b16fd5f4ecbed52eff102b4c0975aff",
      "tree": "7b7ba6451987a9ea13a9c513d79714e208014d63",
      "parents": [
        "433581af2d1a98daf20fbfdb308298bbcfacffa5"
      ],
      "author": {
        "name": "Jark Wu",
        "email": "jark@apache.org",
        "time": "Fri Oct 23 23:05:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 16:05:13 2026 +0100"
      },
      "message": "[docs] Improve AGENTS.md testing and review guidance (#4808)\n\n* [docs] Improve AGENTS.md testing and review guidance\n\nClarify testing practices and add Fluss-specific review guidance,\ndrawing on Apache Flink\u0027s agent instructions. Update protocol\ngeneration and compatibility notes and reference the current PR template.\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 72/72\nAI-Contributed/UT: 0/0\n\n* address comments\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Contributed/Feature: 7/7\nAI-Contributed/UT: 0/0\n\n---------\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "433581af2d1a98daf20fbfdb308298bbcfacffa5",
      "tree": "e5727815a2984f589086acde336f49dbbdcd6419",
      "parents": [
        "15ab4c06b27db749f5b63660fba6dc9525e71dfe"
      ],
      "author": {
        "name": "lz",
        "email": "971066723@qq.com",
        "time": "Fri Oct 23 21:46:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 14:46:26 2026 +0100"
      },
      "message": "[rust] Allow configuring remote log download directory (#4603)\n\n* [rust] Allow configuring remote log download directory\n\nAdd a configurable parent for remote log downloads, matching the Java client capability while preserving the Rust OS temporary-directory default. Each scanner owns an isolated temporary subdirectory and retains the existing cleanup lifecycle.\n\nExpose the option in Python and C++ and document it in both API trees. Cover directory creation, isolation, cleanup, invalid paths, Unix permission errors, and binding configuration.\n\n* [elixir] Expose the remote log download directory option\n\n---------\n\nCo-authored-by: liuzhuo \u003cliuzhuo@xiaohongshu.com\u003e"
    },
    {
      "commit": "15ab4c06b27db749f5b63660fba6dc9525e71dfe",
      "tree": "08304ada671d1646af9e85973976a1f120a0389e",
      "parents": [
        "2ae53c86bfa3fe028c34f86e16d9512ae68b6f64"
      ],
      "author": {
        "name": "Anton Borisov",
        "email": "148864665+fresh-borzoni@users.noreply.github.com",
        "time": "Fri Oct 23 13:54:45 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 15:54:45 2026 +0300"
      },
      "message": "[build] Run Rust CI on arm64 for PRs and x86 on main (#4824)\n\n* [build] Run Rust CI on arm64 for PRs and x86 on main\n\n* [build] Bump skywalking-eyes to v0.9.0, which builds for arm64\n\n* [build] Run Gateway CI on arm64 for PRs and x86 on main"
    },
    {
      "commit": "2ae53c86bfa3fe028c34f86e16d9512ae68b6f64",
      "tree": "085f0ccdc3d7b4dfc7f460cdaaa7df95d5402d58",
      "parents": [
        "212c4d4cf2d6041cf03fd059345f4fdfadae59b7"
      ],
      "author": {
        "name": "Nicoleta Lazar",
        "email": "nicoleta.lazar@fresha.com",
        "time": "Fri Oct 23 12:18:11 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 12:18:11 2026 +0100"
      },
      "message": "[elixir] Add partition management to Admin (#4791)\n\n- Add create, drop and list partitions to `Fluss.Admin`, along with\n  their bang variants.\n- Add `Fluss.PartitionInfo`, containing the partition id, partition\n  name, partition spec and bucket count\n- Bad specs return %{:error, %Fluss.Error{}} instead of raising"
    },
    {
      "commit": "212c4d4cf2d6041cf03fd059345f4fdfadae59b7",
      "tree": "48d66f5dd5fd5b73c765380d566707d3b5450eb2",
      "parents": [
        "5d4bea8c6a4eda88e182d56d54588bcaea051f55"
      ],
      "author": {
        "name": "pisceslj",
        "email": "piscesjie96@gmail.com",
        "time": "Fri Oct 23 18:44:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 18:44:15 2026 +0800"
      },
      "message": "[server] Add consumer group owner discovery (#4716)"
    },
    {
      "commit": "5d4bea8c6a4eda88e182d56d54588bcaea051f55",
      "tree": "f81bae7d0c0db4d458a58960254d375c7d9f4b82",
      "parents": [
        "1fd09712785bb04251edf8ff191a014885da6066"
      ],
      "author": {
        "name": "yuxia Luo",
        "email": "luoyuxia@alumni.sjtu.edu.cn",
        "time": "Fri Oct 23 17:31:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 17:31:51 2026 +0800"
      },
      "message": "[docs] Avoid Mockito in AI agent testing guidelines (#4781)"
    },
    {
      "commit": "1fd09712785bb04251edf8ff191a014885da6066",
      "tree": "86206861fbc03fa11350effeb28eaaddb4804326",
      "parents": [
        "54ee27cd51be1264dc5da7459ac02d2ebb4b4e23"
      ],
      "author": {
        "name": "Jark Wu",
        "email": "jark@apache.org",
        "time": "Fri Oct 23 16:30:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 16:30:32 2026 +0800"
      },
      "message": "[kafka] Unify schema type validation for Kafka table mappings (#4766)\n\nCompare types recursively while ignoring ROW field descriptions and IDs,\npreserving field names, order, nullability, and type parameters. Reuse the\ncomparison for Kafka column contracts and cover metadata validation\nthrough unit tests and coordinator DDL integration tests.\n\nFixes #4765\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\n\nAI-Contributed/Feature: 0/146\nAI-Contributed/UT: 0/290"
    },
    {
      "commit": "54ee27cd51be1264dc5da7459ac02d2ebb4b4e23",
      "tree": "b1744c9738b848afe83e4007de9ece6cd2f52a33",
      "parents": [
        "774cd741245b2bb18d49490635225d2996f51401"
      ],
      "author": {
        "name": "yangshangqing",
        "email": "50940701+yangshangqing95@users.noreply.github.com",
        "time": "Fri Oct 23 03:32:31 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 10:32:31 2026 +0300"
      },
      "message": "[client] Fix flaky prefetch permit assertion in RemoteLogDownloaderTest (#4739)"
    },
    {
      "commit": "774cd741245b2bb18d49490635225d2996f51401",
      "tree": "dc461a0e62e44fd17322889de02d92c5bf389391",
      "parents": [
        "0faf47271296b36b2cae62300d9214a39877284b"
      ],
      "author": {
        "name": "yangshangqing",
        "email": "50940701+yangshangqing95@users.noreply.github.com",
        "time": "Fri Oct 23 03:18:14 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 10:18:14 2026 +0300"
      },
      "message": "[server] Fix flaky shutdown metric assertion in ControlRequestSendThreadTest (#4740)"
    },
    {
      "commit": "0faf47271296b36b2cae62300d9214a39877284b",
      "tree": "8e28a9933a4ca8d277975077233e6f77214651dd",
      "parents": [
        "737a93d1b665a5ac36a1fa293ec6e76b73ba01f7"
      ],
      "author": {
        "name": "yangshangqing",
        "email": "50940701+yangshangqing95@users.noreply.github.com",
        "time": "Fri Oct 23 03:09:52 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 10:09:52 2026 +0300"
      },
      "message": "[server] Handle uninitialized table ZNodes in ZooKeeper metadata reads (#4737)"
    },
    {
      "commit": "737a93d1b665a5ac36a1fa293ec6e76b73ba01f7",
      "tree": "58daca89bfdedaa84b98ad80d7057fc4e270508a",
      "parents": [
        "410efb95518a5f3af43956d42114bb17a91841c2"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Fri Oct 23 14:15:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 14:15:35 2026 +0800"
      },
      "message": "[kafka] Implement Metadata API over Fluss table metadata (#4261)"
    },
    {
      "commit": "410efb95518a5f3af43956d42114bb17a91841c2",
      "tree": "7889598d215991cd5c6f98c786cb678ed769291b",
      "parents": [
        "45c2e957bf53daa26a68a4b6f67c76b81a28d93a"
      ],
      "author": {
        "name": "Muhammet Orazov",
        "email": "916295+morazow@users.noreply.github.com",
        "time": "Fri Oct 23 07:59:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 08:59:31 2026 +0300"
      },
      "message": "[FIP-29][rpc] Wire TLS encryption into the server Netty pipeline (#4644)\n\nListeners named in security.ssl.enabled.listeners now encrypt their\nconnections: the server channel initializer adds an SslHandler first in\nthe pipeline, so framing and authentication run inside TLS. The server\nSSL context is built once in FlussProtocolPlugin#setup, so invalid TLS\nsettings fail the server at startup, and a name in\nsecurity.ssl.enabled.listeners that matches no listener is rejected\nrather than leaving the intended listener on plaintext.\n\nServers still connect to each other without TLS until the client side\nsupports it (#3797), so setup also rejects TLS on the internal\nlistener instead of letting requests between servers fail at runtime.\n\nSslHandler accepts only ByteBufs, while the log fetch path writes\nfile-backed records as a zero-copy FileRegion. TlsFileRegionHandler\ncopies those regions into 32 KiB ByteBuf chunks, reading the next chunk\nonly while the channel is writable, so a connection buffers about the\nwrite-buffer high-water mark rather than the whole fetch response. A\nfailed chunk copy closes the connection, since part of the response may\nalready be sent. TLS listeners give up zero-copy log fetches; plaintext\nlisteners keep it."
    },
    {
      "commit": "45c2e957bf53daa26a68a4b6f67c76b81a28d93a",
      "tree": "9a3607b4087bd45a3daa0436993db4772529f401",
      "parents": [
        "b620397e7d3fcc85e4a4bb0c196f61fbfb201eea"
      ],
      "author": {
        "name": "Anton Borisov",
        "email": "148864665+fresh-borzoni@users.noreply.github.com",
        "time": "Fri Oct 23 06:33:04 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 08:33:04 2026 +0300"
      },
      "message": "[build] Avoid the ubuntu-latest queue in client and gateway CI (#4806)\n\n* [build] Avoid the ubuntu-latest queue in client and gateway CI\n\n* [build] Run client integration PRs on arm64"
    },
    {
      "commit": "b620397e7d3fcc85e4a4bb0c196f61fbfb201eea",
      "tree": "94b1332f712db4e16300254ce9749da636b9eac8",
      "parents": [
        "59124cbe2e360a976f7c316742d4a7f44dbefb7b"
      ],
      "author": {
        "name": "Zhe Wang",
        "email": "jackeyzhe59@163.com",
        "time": "Fri Oct 23 11:15:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 11:15:37 2026 +0800"
      },
      "message": "[flink] Flush finished tiering tables when closing enumerator (#4663)\n\n* [flink] Flush finished tiering tables when closing enumerator\n\nReport pending finished tables in the final heartbeat so empty-split tables are released without waiting for the tiering service timeout.\nEnsure resources are closed even if the final heartbeat fails.\n\nAdd regression tests for finished-table reporting and cleanup on failure.\n\nLinked issue: #4233"
    },
    {
      "commit": "59124cbe2e360a976f7c316742d4a7f44dbefb7b",
      "tree": "30df349c1c00c2afd61d5a37187a22160d3daa64",
      "parents": [
        "37e4462192fcb9423c0120e90d6493420c869c84"
      ],
      "author": {
        "name": "naivedogger",
        "email": "yangyanghu365@gmail.com",
        "time": "Thu Oct 22 22:56:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 15:56:35 2026 +0100"
      },
      "message": "[rust] Preserve write request order across asynchronous dispatch (#4733)\n\nWith idempotence enabled the server validates batch_sequence per\n(writer_id, bucket) in arrival order, so a request that reaches a tablet\nserver before its predecessor is rejected with OutOfOrderSequenceException\nand the writer id is reset, dropping the exactly-once guarantee for\neverything already sent under it.\n\nThe sender used to turn every drained request into a future that connected,\nbuilt, wrote and awaited its own response, all polled concurrently in one\nFuturesUnordered. Cold connection setup, the connection write lock and the\nTokio cooperative budget then decided which frame was written first, so a\nsuccessor could reach the wire before the batch holding the previous\nsequence.\n\nOrdering is established by SendQueues, one drained round and one dispatch\nslot per node. Draining only enqueues; a round acquires its node\u0027s\nconnection once and writes that node\u0027s table requests in order, and the slot\nis released when the last frame has been written rather than when responses\narrive, so up to max-inflight-requests-per-bucket requests per bucket stay\nin flight and ACK handling remains concurrent. Connecting once per round\nalso keeps an unreachable node at one connect timeout instead of one per\ntable. A node with a queued or dispatching round is not drained again, which\nkeeps the accumulator\u0027s memory budget and retry ordering. Shutdown uses the\nsame loop and finishes only once queued rounds, dispatches and responses are\ndrained, so retries triggered during close are still processed.\n\nServerConnection::request is split into dispatch_request, which returns a\nPendingResponse once the frame is written, so the sender can free the node\nwithout holding the connection write lock across the round trip. Cancellation\nstill unregisters the request, and a cancelled partial write still poisons\nthe connection before the lock is handed to another request.\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "37e4462192fcb9423c0120e90d6493420c869c84",
      "tree": "e2460e0d92c005f7c6d54f569560453bccdf46c6",
      "parents": [
        "4dfb2d27463571701d6419b02647be6423745784"
      ],
      "author": {
        "name": "yuxia Luo",
        "email": "luoyuxia@alumni.sjtu.edu.cn",
        "time": "Thu Oct 22 19:48:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 19:48:32 2026 +0800"
      },
      "message": "[lake/paimon] Promote existing Paimon log tables to Fluss lake tables (#4619)"
    },
    {
      "commit": "4dfb2d27463571701d6419b02647be6423745784",
      "tree": "72c35decf3715547b27a6e11a614ae3f3ef8c444",
      "parents": [
        "3b67e6942f279dc33aa0d6db42a092cd3c6a2069"
      ],
      "author": {
        "name": "Yang Wang",
        "email": "ocean.wy@alibaba-inc.com",
        "time": "Thu Oct 22 03:53:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 03:53:55 2026 +0800"
      },
      "message": "[kv] Iterate prefix lookups outside the KV lock (#4749)\n\n* [kv] Iterate prefix lookups outside the KV lock\n\n* [test] Await prefix lookup test executor termination\n\n* [kv] Reuse iterator checks for prefix reads\n\nRemove the test-only lookup wrapper and use the request-scoped read API in tests. Preserve checked storage errors and cover failure cleanup when using RocksIteratorWrapper.\n\n* [kv] Format prefix read-view construction\n\n* [test] Exercise prefix reads with real RocksDB"
    },
    {
      "commit": "3b67e6942f279dc33aa0d6db42a092cd3c6a2069",
      "tree": "186d37a8c64eeaf8073e398c4dfa559cb1854ba1",
      "parents": [
        "13e708855e2fbea4728ce40742ba9f030317a7f1"
      ],
      "author": {
        "name": "Nicoleta Lazar",
        "email": "nicoleta.lazar@fresha.com",
        "time": "Wed Oct 21 17:16:08 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 17:16:08 2026 +0100"
      },
      "message": "[elixir] Add primary key and prefix lookup (#4704)\n\n* [elixir] Add primary key and prefix lookup\n\nBind the client\u0027s Lookuper and PrefixKeyLookuper so Elixir can read\nrows from primary key (KV) tables.\n\n- Introduce `Fluss.Lookuper` and `Fluss.PrefixLookuper`\n- Fluss.Lookuper: lookup/2 by primary key (list or map), returning\n  {:ok, row} or {:ok, nil}; lookup!/2 raises Fluss.NoResultsError.\n- Fluss.PrefixLookuper: lookup/2 returns every row with a bucket-key\n  prefix.\n- Allow configuring the five lookup.* config keys on Fluss.Config.\n- Add integration tests for both lookups, key validation, composite keys,\n  partitioned tables and concurrent use.\n\n* Add todo with the link to the core lookup issue found by tests\n\n* [elixir] Make lookups cancellable with a timeout\n\n  - lookup/3 and lookup!/3 take timeout: (default 5_000, or :infinity);\n    on timeout the lookup is cancelled and {:error, :request_time_out}\n    returned. A lookup whose caller exits is cancelled too, so core stops\n    retrying it.\n  - A reply that races the timeout is still returned, never left in the\n    mailbox."
    },
    {
      "commit": "13e708855e2fbea4728ce40742ba9f030317a7f1",
      "tree": "88daa562d24012de5bd5cb2599af387cdc438413",
      "parents": [
        "75e919b1ac57b5b3af48a0a92386dcbd5b95f93a"
      ],
      "author": {
        "name": "yuxia Luo",
        "email": "luoyuxia@alumni.sjtu.edu.cn",
        "time": "Wed Oct 21 23:01:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 23:01:34 2026 +0800"
      },
      "message": "[client] Avoid retry loops during historical partition writes (#4586)\n\nBack off historical writes rejected by the request queue using the existing\nper-bucket throttle. Clear stale partition ID mappings when a metadata\nrefresh reports a missing partition, allowing queued writes to reroute or\nfail instead of repeatedly targeting an expired partition.\n\n\nAI-Model: gpt-6\nAI-Contributed/Feature: 9/9\nAI-Contributed/UT: 66/66\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "75e919b1ac57b5b3af48a0a92386dcbd5b95f93a",
      "tree": "122486e190f255fed64aeceea4f16e72dfa3f452",
      "parents": [
        "b25ba46d8edb649080df00f9b695cb1dfd0215c5"
      ],
      "author": {
        "name": "naivedogger",
        "email": "yangyanghu365@gmail.com",
        "time": "Wed Oct 21 21:00:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 21:00:30 2026 +0800"
      },
      "message": "[rust] Reuse predicate binding and add local Arrow evaluation (#4717)\n\n* [rust] Reuse predicate binding and add local Arrow evaluation"
    },
    {
      "commit": "b25ba46d8edb649080df00f9b695cb1dfd0215c5",
      "tree": "08f60ed10fe7754c9fad0102774c6f475ce7eb36",
      "parents": [
        "5af9ddac63927dde050b834575b34bfe35daeda8"
      ],
      "author": {
        "name": "litiliu",
        "email": "38579068+litiliu@users.noreply.github.com",
        "time": "Wed Oct 21 15:50:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 15:50:30 2026 +0800"
      },
      "message": "[server] Skip unchanged upserts for primary-key tables (#4439)\n\n* [server] Support update_if_changed merge engine for primary-key tables\n\n* [common] Use locale-independent merge engine parsing\n\n* [server] Add opt-in skip-unchanged upserts\n\nReplace the update_if_changed merge engine with table.upsert.skip-unchanged. Compare complete candidate rows in the KV write path using schema-aware logical equality and reject incompatible WAL, TTL, merge engine, and overwrite modes.\n\nCover equality and configuration edge cases, update the Flink sink and documentation, and keep the implementation focused on the write path.\n\n* [server] Refine skip-unchanged upsert comparison\n\nCompare complete DataType definitions before treating rows as unchanged. Clarify the existing FULL-image lookup cost and describe skipped state writes without implying that upserts are rejected.\n\n* [docs] Clarify skip-unchanged upsert behavior\n\n* [server] Compare unchanged upserts by serialized bytes\n\nCompare the candidate BinaryValue schema ID and serialized row bytes with the stored value without materializing row fields. Cover schema changes, representation differences, batch duplicates, and overwrite rejection.\n\nMove the option guide into the primary key table documentation and link the option reference to its section."
    },
    {
      "commit": "5af9ddac63927dde050b834575b34bfe35daeda8",
      "tree": "95c6740fac68c563e69c870773b1c13023383baa",
      "parents": [
        "233092a884eefefc6e45229a5c92df63d17355f0"
      ],
      "author": {
        "name": "Yang Zhang",
        "email": "yangchuan.zy@alibaba-inc.com",
        "time": "Wed Oct 21 15:16:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 15:16:05 2026 +0800"
      },
      "message": "[tiering] Decouple common tiering class from flink module (#3554)"
    },
    {
      "commit": "233092a884eefefc6e45229a5c92df63d17355f0",
      "tree": "afe01077b851e4d3e629393361edfc8d1df66acc",
      "parents": [
        "26717b0e5468c004604391767c1739820709da2c"
      ],
      "author": {
        "name": "Yang Wang",
        "email": "ocean.wy@alibaba-inc.com",
        "time": "Wed Oct 21 10:32:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 10:32:05 2026 +0800"
      },
      "message": "[kv] Bound prefix lookups with an exclusive upper limit (#4744)\n\n* [kv] Bound prefix lookups with an exclusive upper limit\n\n* [kv] Remove unused byte prefix comparison"
    },
    {
      "commit": "26717b0e5468c004604391767c1739820709da2c",
      "tree": "02f40490999e6fe19a639fa6c5edc24a4348e0d1",
      "parents": [
        "d8a3d5b05e0b72e91abe36b5212a69eda7779ce3"
      ],
      "author": {
        "name": "Yang Wang",
        "email": "ocean.wy@alibaba-inc.com",
        "time": "Wed Oct 21 09:47:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 09:47:13 2026 +0800"
      },
      "message": "[server] Register external KV snapshots and restore replicas (#4242)"
    },
    {
      "commit": "d8a3d5b05e0b72e91abe36b5212a69eda7779ce3",
      "tree": "a8da027520e420a44e87e77c609506cbc34325e6",
      "parents": [
        "1831d26453f0a5c80a9701dfb9a4e5258af52693"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Tue Oct 20 16:28:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 16:28:52 2026 +0800"
      },
      "message": "[test] Stabilize cluster health test setup (#4734)\n\nWait for leader initialization of all tables created by the merge-engine\ntest before teardown deletes the schemas needed by KV recovery.\n\nRetry the initial cluster health assertions against one response until\nthe cluster is GREEN before stopping a tablet server. This allows prior\ntable deletion and leader activation to settle without racing a second\nhealth query.\n\nFixes #4722\n\n\nAI-Model: gpt-6\nAI-Contributed/Feature: 0/0\nAI-Contributed/UT: 31/31\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "1831d26453f0a5c80a9701dfb9a4e5258af52693",
      "tree": "28e5261be15f58504f1f991fc81eb32501c4cef0",
      "parents": [
        "cbb3ea674e00475d010b3e5f7c999de93bfd16be"
      ],
      "author": {
        "name": "fhan",
        "email": "aaron.han.1986@gmail.com",
        "time": "Tue Oct 20 13:49:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 13:49:11 2026 +0800"
      },
      "message": "[client] Back off writes rejected by disk protection (#4293)\n\n* [client] Back off writes rejected by disk protection\n\nWhen disk protection rejects a write with DISK_WRITE_LOCKED, the Log/KV\nwriters apply a bounded exponential backoff before retrying that bucket,\ninstead of hot-looping and hammering the rejecting server.\n\nWrite-throttling is unified in a new WriteThrottleController that owns two\nindependent gates per bucket:\n  - KV backpressure (wall-clock, quadratic) for KV upsert/delete\n  - disk-write backoff (monotonic nanos, exponential, never-shorten,\n    ceil-to-ms) for DISK_WRITE_LOCKED rejections\n\nPer bucket the effective delay is max(kvRemainingMs, diskRemainingMs); the\naccumulator wakes on the min across buckets. bucketReady keeps leader-first\nordering: a leaderless bucket is still reported to unknownLeaderTables while\na gate is pending, so metadata refresh (which sends no data) stays orthogonal\nto throttling.\n\nAdds ConfigOptions for the backoff bounds, documentation, unit coverage in\nRecordAccumulatorTest/SenderTest, and DiskWriteBackoffITCase.\n\n* fix(client): invalidate metadata before re-enqueuing write retries\n\n* fix(client): wake sender when KV pressure shortens throttle deadline\n\n* fix(client): back off retriable writes per bucket\n\n* [client] Deduplicate metadata invalidation before write retries\n\n* [client] Unify write throttle state maintenance\n\n* [build] Remove duplicate ConfigOptions checkstyle suppression"
    },
    {
      "commit": "cbb3ea674e00475d010b3e5f7c999de93bfd16be",
      "tree": "25143788353c0ed4466c11ccabdc6526bcc7ad6d",
      "parents": [
        "6be68ddde48a5798b8b2891dd909415f31407652"
      ],
      "author": {
        "name": "yunhong",
        "email": "337361684@qq.com",
        "time": "Tue Oct 20 11:57:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 11:57:50 2026 +0800"
      },
      "message": "[hotfix][rpc] Revert Netty shutdown optimization #4645 (#4746)\n\nThis reverts commit 6b43eaba5886fac3ac58b343cdf0b2f2c0222fdf.\n\nRestore the previous Netty shutdown behavior while investigating CI\ninstability. Preserve the subsequent fixes to the client disconnection test.\n\nValidation:\n- NettyClientTest, NettyServerTest, and RequestChannelTest: 14 tests passed.\n- FlinkUnionReadPrimaryKeyTableITCase#testUnionReadWithAddColumn passed.\n- Full-repository Spotless, Checkstyle, and license validation passed.\n\nFull verify stopped on RMI connection errors in\nJMXServerTest.testJMXServiceRegisterMBean and\nJMXReporterTest.testJMXAvailability. Validation used installed Maven 3.8.6\nbecause the Maven wrapper failed distribution checksum validation.\n\n\nAI-Model: gpt-6\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "6be68ddde48a5798b8b2891dd909415f31407652",
      "tree": "15e556efce08b04b2d2c72fa382c90f60d02d410",
      "parents": [
        "7f50969a79c5d374a132e0125508f5d774feb2fa"
      ],
      "author": {
        "name": "Yang Wang",
        "email": "ocean.wy@alibaba-inc.com",
        "time": "Tue Oct 20 09:53:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 09:53:19 2026 +0800"
      },
      "message": "[kv] Support partitioned metadata with HyperClockCache (#4612)\n\n* [kv] Support partitioned metadata and cache priority pools\n\n* [kv] Use HCC metadata controls for all block caches\n\n* [kv] Require explicit metadata partitioning\n\n* [test] Cover metadata partitioning transitions and iterator boundaries\n\n* [docs] Document partitioned RocksDB indexes and filters\n\n* [kv] Clarify partitioned Bloom filter configuration"
    },
    {
      "commit": "7f50969a79c5d374a132e0125508f5d774feb2fa",
      "tree": "20627a788668c66253fd8627ba41c4fc7a7e6f26",
      "parents": [
        "6f4ed053074a9a776e418810cc421bff5b14e1a9"
      ],
      "author": {
        "name": "yangshangqing",
        "email": "50940701+yangshangqing95@users.noreply.github.com",
        "time": "Mon Oct 19 11:22:48 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 16:22:48 2026 +0100"
      },
      "message": "[trino] Add predicate constraint handling and equality partition pruning (#4689)"
    },
    {
      "commit": "6f4ed053074a9a776e418810cc421bff5b14e1a9",
      "tree": "3dbd91f04ff43db08f280441560b03c5556d8ad3",
      "parents": [
        "dbd6dd731331567cbfb28ef2db004a0e25c76407"
      ],
      "author": {
        "name": "Xiaobing Fang",
        "email": "bingxf@qq.com",
        "time": "Mon Oct 19 19:45:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 19:45:57 2026 +0800"
      },
      "message": "[server] Fix stale remote log metrics on repeated leader updates (#4618)\n\nUnregister the previous remote log metrics before registering a replacement tablet.\n\nCover repeated leader notifications for partitioned and non-partitioned tables, checking all four remote log gauges after tiering."
    },
    {
      "commit": "dbd6dd731331567cbfb28ef2db004a0e25c76407",
      "tree": "e3ef04b47305caeea1acb18a5f169e15192371f2",
      "parents": [
        "1f352b96373d0277fe7c1c2ed4bda0781e5c0535"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Mon Oct 19 10:14:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 10:14:35 2026 +0800"
      },
      "message": "[kafka] Define DDL table mapping for Kafka compatibility (#4277)"
    },
    {
      "commit": "1f352b96373d0277fe7c1c2ed4bda0781e5c0535",
      "tree": "d86cffb7912d0f9d44969b98ae8c921b53fb347b",
      "parents": [
        "c3b462a5f1db4a93ca6c3de9a569e208fb2212f9"
      ],
      "author": {
        "name": "Anton Borisov",
        "email": "anton.borisov@fresha.com",
        "time": "Sun Oct 18 23:24:53 2026 +0100"
      },
      "committer": {
        "name": "Anton Borisov",
        "email": "148864665+fresh-borzoni@users.noreply.github.com",
        "time": "Mon Oct 19 00:26:16 2026 +0100"
      },
      "message": "fix smaller race\n"
    },
    {
      "commit": "c3b462a5f1db4a93ca6c3de9a569e208fb2212f9",
      "tree": "44e3d8046553281b64ca25aa9b1e250cab1741e8",
      "parents": [
        "70efa0b1712f19bb1c591fce34634a95676ae73c"
      ],
      "author": {
        "name": "Shangqing Yang",
        "email": "yangshangqing_tx@126.com",
        "time": "Sat Oct 17 13:50:14 2026 -0400"
      },
      "committer": {
        "name": "Anton Borisov",
        "email": "148864665+fresh-borzoni@users.noreply.github.com",
        "time": "Mon Oct 19 00:26:16 2026 +0100"
      },
      "message": "[rpc] Fix race in Netty client disconnection test\n"
    },
    {
      "commit": "70efa0b1712f19bb1c591fce34634a95676ae73c",
      "tree": "24b5639b6754acbe7708fab62cc10572b2a25719",
      "parents": [
        "496fd5adeb8ec0044b3fd9de721d35914b40743d"
      ],
      "author": {
        "name": "Muhammet Orazov",
        "email": "916295+morazow@users.noreply.github.com",
        "time": "Mon Oct 19 01:03:01 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 00:03:01 2026 +0100"
      },
      "message": "[FIP-29][security] Add SslPrincipalMapper for certificate DN to principal mapping (#4641)\n\nAdd SslPrincipalMapper, which maps the RFC 2253 distinguished name of a\nclient certificate to a Fluss principal name following Kafka\u0027s\nssl.principal.mapping.rules, and the security.ssl.principal.mapping.rules\noption (default DEFAULT). As in Kafka, a pattern or replacement may\ncontain an escaped slash (\\/).\n\nUnsupported or invalid rules are rejected when parsed, so the server can\nfail at startup: a replacement referring to a group the pattern lacks, a\nnamed group reference, or an invalid regex. A name that no rule applies\nto raises the checked NoMatchingRuleException, which the mTLS\nauthenticator (#3793) turns into an AuthenticationException. An empty\nmapped name does not apply, so no empty principal is produced."
    },
    {
      "commit": "496fd5adeb8ec0044b3fd9de721d35914b40743d",
      "tree": "d45aa236bf300367715d6ef38d1de41e7b51a0fe",
      "parents": [
        "d3e50c0362b17d1c3e81aae89a12361ddb7d64b5"
      ],
      "author": {
        "name": "yangshangqing",
        "email": "50940701+yangshangqing95@users.noreply.github.com",
        "time": "Sun Oct 18 18:10:49 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 23:10:49 2026 +0100"
      },
      "message": "[ci] Fix race in rebalance cluster model test (#4696)"
    },
    {
      "commit": "d3e50c0362b17d1c3e81aae89a12361ddb7d64b5",
      "tree": "c3895df70fc6f349f30e5e8eb0b1b3846fbd0c75",
      "parents": [
        "0529ab053a92d7ac2a3c6fa611e6369f50eee57b"
      ],
      "author": {
        "name": "Jandy",
        "email": "35187380+JandyTenedora@users.noreply.github.com",
        "time": "Sun Oct 18 22:54:50 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 22:54:50 2026 +0100"
      },
      "message": "[python] Add prefix lookup example and documentation (#4632)\n\n* [python] Add prefix lookup example and documentation\n\n* [python] Align prefix lookup example with Rust and C++\n\n* [docs] Align Python prefix lookup docs with Rust and C++\n\n* [docs] List Python prefix lookup example in development guide\n\n* [docs] Simplify Python prefix lookup validation wording\n\n* [python] Align prefix lookup tests with C++ coverage"
    },
    {
      "commit": "0529ab053a92d7ac2a3c6fa611e6369f50eee57b",
      "tree": "91b78989df00c13eb7a750ac858837b074a04dc5",
      "parents": [
        "33d1020a59a491a01f821ab7cf6c31a92cf4c4cc"
      ],
      "author": {
        "name": "naivedogger",
        "email": "yangyanghu365@gmail.com",
        "time": "Sun Oct 18 23:05:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 16:05:25 2026 +0100"
      },
      "message": "[rust] Support ossj scheme alias for OSS remote logs (#4577)"
    },
    {
      "commit": "33d1020a59a491a01f821ab7cf6c31a92cf4c4cc",
      "tree": "d449aa33f0bd418652eb9645e9c96f9c45ae4159",
      "parents": [
        "bbf2f28d2c2d59a844f5bc14aced7436fc0d947e"
      ],
      "author": {
        "name": "Anton Borisov",
        "email": "148864665+fresh-borzoni@users.noreply.github.com",
        "time": "Sun Oct 18 14:47:50 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 14:47:50 2026 +0100"
      },
      "message": "[cpp] Allow starting lookups without blocking (#4559)\n\n* [cpp] Allow starting lookups without blocking\n\n* address comment"
    },
    {
      "commit": "bbf2f28d2c2d59a844f5bc14aced7436fc0d947e",
      "tree": "f70263f2c44893c665db4f5472e929abc6ab9ac9",
      "parents": [
        "6b52163a247b4e8aad660f1d5fd281ba2567afde"
      ],
      "author": {
        "name": "Yang Zhang",
        "email": "yangchuan.zy@alibaba-inc.com",
        "time": "Sun Oct 18 06:53:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 23:53:20 2026 +0100"
      },
      "message": "[build] Extract Spark CI into a separate workflow (#4654)\n\n* [build] Run only Spark CI for Spark-only pull requests\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 49/49\nAI-Contributed/UT: 0/0\n\n* [test] Verify Spark-only CI job selection\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 1/1\nAI-Contributed/UT: 0/0\n\n* [test] Verify full CI for mixed Spark and client changes\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 1/1\nAI-Contributed/UT: 0/0\n\n* [test] Remove temporary CI trigger verification comments\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 2/2\nAI-Contributed/UT: 0/0\n\n* [build] Extract Spark CI into a separate workflow\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 137/137\nAI-Contributed/UT: 0/0\n\n* [build] Include Spark CI in unstable test reporting\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6\nAI-Contributed/Feature: 2/2\nAI-Contributed/UT: 0/0\n\n---------\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "6b52163a247b4e8aad660f1d5fd281ba2567afde",
      "tree": "4fd78fa2b0deaa85af2fd78275486d6256f26fd9",
      "parents": [
        "6b43eaba5886fac3ac58b343cdf0b2f2c0222fdf"
      ],
      "author": {
        "name": "Nicoleta Lazar",
        "email": "nicoleta.lazar@fresha.com",
        "time": "Sat Oct 17 23:36:00 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 23:36:00 2026 +0100"
      },
      "message": "[elixir] Don\u0027t block a scheduler in AppendWriter.append (#4691)\n\n- Queue appends like upserts: try with an immediate deadline, and on\n  BufferExhausted retry on a tokio blocking thread, returning\n  {:pending, ref} to await.\n- Return an error from WriteHandle.wait/1 on an already-consumed handle\n  instead of panicking: the error was sent with OwnedEnv::send_and_clear,\n  which rustler forbids on a scheduler thread.\n- Test NOT NULL and improper-list rejection for appends."
    },
    {
      "commit": "6b43eaba5886fac3ac58b343cdf0b2f2c0222fdf",
      "tree": "97dfecee252125c557cb439a7ada581ad03864f6",
      "parents": [
        "10355ba582bea56ec39f7fe22456ab74306fb2a2"
      ],
      "author": {
        "name": "Giannis Polyzos",
        "email": "ipolyzos.se@gmail.com",
        "time": "Sat Oct 17 14:08:05 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 21:08:05 2026 +0800"
      },
      "message": "[Server] improve CI test time for netty (#4645)"
    },
    {
      "commit": "10355ba582bea56ec39f7fe22456ab74306fb2a2",
      "tree": "ec7e0ad7154c895864c0e7ae14f07a537c2cb738",
      "parents": [
        "c751131ddce2632fd30ef0cf8b8e4871a9279210"
      ],
      "author": {
        "name": "Anton Borisov",
        "email": "148864665+fresh-borzoni@users.noreply.github.com",
        "time": "Sat Oct 17 13:15:27 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 13:15:27 2026 +0100"
      },
      "message": "[rust] Keep one unavailable server from stalling every lookup (#4563)"
    },
    {
      "commit": "c751131ddce2632fd30ef0cf8b8e4871a9279210",
      "tree": "a0005b42e77503d614a457ca5b91087ed230af3d",
      "parents": [
        "31852d4203313e869c66f02d0594d5e1b15011ba"
      ],
      "author": {
        "name": "Junfan Zhang",
        "email": "zuston@apache.org",
        "time": "Sat Oct 17 19:49:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 12:49:31 2026 +0100"
      },
      "message": "[rust] remove the duplicate proto definition (#4636)\n\n* [rust] remove the duplicate proto definition\n\n* [rust] Fail release on uncommitted proto changes\n\n---------\n\nCo-authored-by: zhangjunfan \u003czhangjunfan@qiyi.com\u003e\nCo-authored-by: Anton Borisov \u003canton.borisov@fresha.com\u003e"
    },
    {
      "commit": "31852d4203313e869c66f02d0594d5e1b15011ba",
      "tree": "842d5c11be6536ef954a09cc954e0e36576d97c6",
      "parents": [
        "55a61386f452b8cc2e096802d93068843d7df95a"
      ],
      "author": {
        "name": "Junfan Zhang",
        "email": "zuston@apache.org",
        "time": "Sat Oct 17 19:49:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 12:49:07 2026 +0100"
      },
      "message": "[server] Eliminate global lock for LOG tablet creation/deletion/load (#4621)\n\n* [server] Eliminate global lock for LOG tablet creation/deletion/load\n\n* extract the same method for the execution in the lock\n\n* add same bucket concurrent access\n\n* fix\n\n---------\n\nCo-authored-by: zhangjunfan \u003czhangjunfan@qiyi.com\u003e"
    },
    {
      "commit": "55a61386f452b8cc2e096802d93068843d7df95a",
      "tree": "5c09c4b5fbf31c6187da9704badd057ba027709e",
      "parents": [
        "6225c4dd9e938bbeef2d55d1ebf41a93f67f09b2"
      ],
      "author": {
        "name": "Anton Borisov",
        "email": "148864665+fresh-borzoni@users.noreply.github.com",
        "time": "Sat Oct 17 09:52:01 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 09:52:01 2026 +0100"
      },
      "message": "[client] Fix corruption after zero-copy lazy parse ByteBuf (#3008)\n\n* [client] Fix corruption in zero-copy lazy parse ByteBuf path\n\n* address feedback\n\n* Test that every type survives the fetch buffer release"
    },
    {
      "commit": "6225c4dd9e938bbeef2d55d1ebf41a93f67f09b2",
      "tree": "618b3dbc085379f2c67ac4f2e003d0949eea0f35",
      "parents": [
        "caa0679c2268c864bd9ac95ef2481c8674dafb4e"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Sat Oct 17 16:29:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 16:29:39 2026 +0800"
      },
      "message": "[server] Enable active segment retention rolling by default (#4668)"
    },
    {
      "commit": "caa0679c2268c864bd9ac95ef2481c8674dafb4e",
      "tree": "96dba49d4be3b58bd6b368c14c0826f9c0114def",
      "parents": [
        "8aada62f6ad0bd16ab6cd15e0c1e3b3d0ef3a2f1"
      ],
      "author": {
        "name": "Jark Wu",
        "email": "jark@apache.org",
        "time": "Sat Oct 17 15:01:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 15:01:44 2026 +0800"
      },
      "message": "[rpc] Add contiguous ID tests for Errors and ApiKeys (#4688)\n\nCheck sorted protocol IDs against consecutive ranges starting at -1 for\nErrors and 1000 for ApiKeys. Derive the upper bounds from enum counts so\nnew entries cannot silently introduce gaps.\n\n\nAI-Model: gpt-6\nAI-Contributed/Feature: 0/0\nAI-Contributed/UT: 45/45\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "8aada62f6ad0bd16ab6cd15e0c1e3b3d0ef3a2f1",
      "tree": "776214f62fd7312823c148040d538e732844381d",
      "parents": [
        "dcb831c4b59e15de4872b4440e91eafd4ac569e2"
      ],
      "author": {
        "name": "Jark Wu",
        "email": "jark@apache.org",
        "time": "Sat Oct 17 15:00:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 15:00:59 2026 +0800"
      },
      "message": "[docs] Fix DeepWiki badge image in README (#4690)\n\nUse the official PNG badge to avoid Vercel security challenges that break\nGitHub\u0027s image proxy. Keep the badge at 20 pixels high.\n\n\nAI-Model: gpt-6\nAI-Contributed/Feature: 2/2\nAI-Contributed/UT: 0/0\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "dcb831c4b59e15de4872b4440e91eafd4ac569e2",
      "tree": "cde39f0b9a21cee4be0de5285a9d442aa7512af3",
      "parents": [
        "4e846bd82f88bd43e895d7643b305c40ed033770"
      ],
      "author": {
        "name": "pisceslj",
        "email": "piscesjie96@gmail.com",
        "time": "Sat Oct 17 14:02:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 14:02:25 2026 +0800"
      },
      "message": "[rpc] Add consumer offset protocol and error definitions (#4664)"
    },
    {
      "commit": "4e846bd82f88bd43e895d7643b305c40ed033770",
      "tree": "da1d9580b0458b5590f0d5924d8f11309869ec70",
      "parents": [
        "0ca57ce49b291a5fff84900e9d410224ad49d58b"
      ],
      "author": {
        "name": "Yang Guo",
        "email": "jimmy_guoyang@outlook.com",
        "time": "Sat Oct 17 11:09:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 11:09:20 2026 +0800"
      },
      "message": "[kafka] Serve ApiVersions from registered capabilities (#4260)"
    },
    {
      "commit": "0ca57ce49b291a5fff84900e9d410224ad49d58b",
      "tree": "6eab38cb3583496d08ee7164a5d86683214c879e",
      "parents": [
        "09eeaaf5081dc75edabae71a607478783227c53a"
      ],
      "author": {
        "name": "pisceslj",
        "email": "piscesjie96@gmail.com",
        "time": "Sat Oct 17 10:14:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 10:14:12 2026 +0800"
      },
      "message": "[server] Add consumer offset table foundations (#4626)"
    },
    {
      "commit": "09eeaaf5081dc75edabae71a607478783227c53a",
      "tree": "79419593022dcb59dce489829a4b2dd4bdeba50d",
      "parents": [
        "33d32636803c667f113665f25e9a042d15faef20"
      ],
      "author": {
        "name": "Dionysis Stolis",
        "email": "dionysios.stolis@ververica.com",
        "time": "Fri Oct 16 17:23:52 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 16:23:52 2026 +0100"
      },
      "message": "[lake] Add Iceberg 1.12 plugin (#4671)\n\n* [lake] Add Iceberg 1.12 plugin\n\n* [lake] Add Iceberg 1.12 skip flag, align Jackson, fix writer close\n\n* [build] Exclude Iceberg 1.12 override classes from the coverage report\n\n---------\n\nCo-authored-by: Giannis Polyzos \u003cipolyzos.se@gmail.com\u003e"
    },
    {
      "commit": "33d32636803c667f113665f25e9a042d15faef20",
      "tree": "cfe7f4ea1e4f924e99da838f4430e2bf6408f0f2",
      "parents": [
        "651a34390c71f1e8321d9bae31598d72c0672ef2"
      ],
      "author": {
        "name": "Nicoleta Lazar",
        "email": "nicoleta.lazar@fresha.com",
        "time": "Fri Oct 16 13:33:30 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 13:33:30 2026 +0100"
      },
      "message": "[elixir] Add UpsertWriter for primary key tables (#4628)\n\n* [elixir] Add UpsertWriter for primary key tables\n\nBind the client\u0027s UpsertWriter so Elixir can write to primary key (KV)\ntables.\n\n- Fluss.TableUpsert builds the writer, optionally for a partial update\n  by column name or index.\n- Fluss.UpsertWriter adds upsert/2, delete/2 and flush/1. Rows are a\n  positional list or a map keyed by column name; maps are validated\n  before they reach core.\n- Integration tests for the changelog, partial updates, composite keys\n  and input validation.\n- README: add a primary key table example and fix the existing quick\n  start, which called the non-existent Fluss.Schema.build/0.\n\n* [elixir] Address UpsertWriter review feedback\n\n- Don\u0027t block a BEAM scheduler when the write buffer is full: try with\n  an immediate deadline, and on BufferExhausted retry on a tokio\n  blocking thread, returning {:pending, ref} to await.\n- Reject nil in a NOT NULL column for list rows too, naming the column.\n- Return an error, rather than raising or panicking, for invalid\n  partial-update indices and improper lists.\n- List upsert/2 and delete/2 in the Fluss.WriteHandle moduledoc."
    },
    {
      "commit": "651a34390c71f1e8321d9bae31598d72c0672ef2",
      "tree": "d4460b9f7ead1ad5136f1c6d30e767804a7bbf72",
      "parents": [
        "ac710a78d2f4f3e0071830b7f2f5d53dab756254"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Fri Oct 16 11:52:59 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 10:52:59 2026 +0100"
      },
      "message": "[flink] Respect DISTRIBUTED BY when creating tables (#4635)\n\nThe Fluss catalog ignored the DISTRIBUTED BY clause, so tables, CTAS tables and materialized tables got the default bucket key and bucket count.\n\nDISTRIBUTED BY HASH(k) INTO n BUCKETS now sets bucket key k and n buckets, and DISTRIBUTED INTO n BUCKETS sets only the count. RANGE distribution is rejected, as is combining the clause with the bucket.key or bucket.num options. Flink 1.18 and 1.19 have no DISTRIBUTED BY, so their adapters return empty."
    },
    {
      "commit": "ac710a78d2f4f3e0071830b7f2f5d53dab756254",
      "tree": "7ed231c0ade6681521c1c8b040a2534687322f24",
      "parents": [
        "132cf6ed653639f56d233aa377afa4befca41b2c"
      ],
      "author": {
        "name": "Dionysis Stolis",
        "email": "dionysios.stolis@ververica.com",
        "time": "Fri Oct 16 07:25:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 06:25:37 2026 +0100"
      },
      "message": "[lake] Add versioned v2 format for Iceberg split and tiering state (#4660)"
    },
    {
      "commit": "132cf6ed653639f56d233aa377afa4befca41b2c",
      "tree": "327fe60923409080efa3b421e0ab4d76d1d72ed9",
      "parents": [
        "b450e4c15b1150ebbe8d3d6e229a23332b72fd66"
      ],
      "author": {
        "name": "jonah-rpo",
        "email": "jpaascheorlow@coreweave.com",
        "time": "Fri Oct 16 00:27:00 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 12:27:00 2026 +0800"
      },
      "message": "[flink] Skip empty lake snapshot splits (#4649)"
    },
    {
      "commit": "b450e4c15b1150ebbe8d3d6e229a23332b72fd66",
      "tree": "fd16ae55a18621abfade9b2b1cfa722f9b7e9f17",
      "parents": [
        "25306d8f190aea686f92047648743fb6e508c6cb"
      ],
      "author": {
        "name": "yuxia Luo",
        "email": "luoyuxia@alumni.sjtu.edu.cn",
        "time": "Fri Oct 16 10:06:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 10:06:11 2026 +0800"
      },
      "message": "[lake][paimon] Resolve DV offsets from committed COMPACT (#4583)"
    },
    {
      "commit": "25306d8f190aea686f92047648743fb6e508c6cb",
      "tree": "96b5be1ae2acf69b81306be98769f0e3212474e9",
      "parents": [
        "431bc17129832ec166c6d7c7a0f17e11a82ae1cb"
      ],
      "author": {
        "name": "Giannis Polyzos",
        "email": "ipolyzos.se@gmail.com",
        "time": "Thu Oct 15 12:30:17 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 14:30:17 2026 +0300"
      },
      "message": "[build] Split Iceberg plugin into common, 1.10 and 1.12 modules (#4646)\n\n* [build] Split Iceberg plugin into common, 1.10 and 1.12 modules\n\n* [build] Add Iceberg common and 1.12 module builds, CI and docs\n\n* [build] Use a job-local Maven toolchains file in CI\n\n* address comment"
    },
    {
      "commit": "431bc17129832ec166c6d7c7a0f17e11a82ae1cb",
      "tree": "492b48e1bb7bf68cc123ad7921cfe2f41b00479f",
      "parents": [
        "7fbda7adb639c20949772bee955f658175370a59"
      ],
      "author": {
        "name": "Ramin Gharib",
        "email": "ramingharib@gmail.com",
        "time": "Thu Oct 15 09:39:38 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 08:39:38 2026 +0100"
      },
      "message": "[flink] Support SHOW MATERIALIZED TABLES on Flink 2.2+ (#4634)\n\nFlink 2.2 routes SHOW MATERIALIZED TABLES to Catalog#listMaterializedTables, whose default implementation throws. FlinkCatalog now implements it by filtering listTables by the materialized-table custom properties, fetching the table infos in parallel.\n\nThe method is declared without @Override so that fluss-flink-common still compiles against Flink 1.20, which doesn\u0027t have it."
    },
    {
      "commit": "7fbda7adb639c20949772bee955f658175370a59",
      "tree": "edc05c42dda861eedf1d30507d6ae5bfdc1ca714",
      "parents": [
        "79ca19ac129bd760aee8846363cf1292ed113185"
      ],
      "author": {
        "name": "yunhong",
        "email": "337361684@qq.com",
        "time": "Thu Oct 15 15:37:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 15:37:42 2026 +0800"
      },
      "message": "[server] Resume pending replica deletion after server restart (#4505)\n\n* [server] Resume pending replica deletion after server restart\n\nMark pending replica deletions as ineligible only while their tablet server is offline. When the server re-registers, move those replicas through OfflineReplica and ReplicaDeletionStarted to rebuild StopReplica requests. Keep offline replicas on live servers eligible for immediate deletion so transient replica failures do not stall table or partition drops.\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\n\nAI-Model: gpt-5\nAI-Contributed/Feature: 121/121\nAI-Contributed/UT: 527/527\n\n* address baiye\u0027s comments\n\n* address hongshun\u0027s comments\n\nCo-Authored-By: Codex \u003cnoreply@openai.com\u003e\nAI-Model: gpt-6-astra\nAI-Contributed/Feature: 23/23\nAI-Contributed/UT: 255/255\n\n---------\n\nCo-authored-by: Codex \u003cnoreply@openai.com\u003e"
    },
    {
      "commit": "79ca19ac129bd760aee8846363cf1292ed113185",
      "tree": "b4e92e8be1501da30ddd5a66b6085f6e4acc3a7a",
      "parents": [
        "d33fe999f862329f6bfe9e7bdd0881b7fa659734"
      ],
      "author": {
        "name": "yangshangqing",
        "email": "50940701+yangshangqing95@users.noreply.github.com",
        "time": "Thu Oct 15 03:19:13 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 08:19:13 2026 +0100"
      },
      "message": "[trino] Add initial connector build and plugin skeleton (#4207)\n\n* [trino] Add initial connector build and plugin skeleton\n\n* [trino] Add metadata support for Fluss tables\n\n* [trino] Add initial tests\n\n* [trino] Add bounded log table reads and tests\n\n* [trino] Refactor scan readers and add partitioned table reads\n\n* [Trino] fix ci, Clarified that SASL authentication for Fluss is not supported in Trino connector for now.\n\n* [trino] Improve connector robustness and error handling\n\n* [trino] Fix lock held across table open, tighten SASL config validation and CI triggers\n\n* [trino] Restore CI trigger paths for core modules\n\n---------\n\nCo-authored-by: Giannis Polyzos \u003cipolyzos.se@gmail.com\u003e"
    },
    {
      "commit": "d33fe999f862329f6bfe9e7bdd0881b7fa659734",
      "tree": "f946de3f3a8d446a3846c3354bd09dede773602e",
      "parents": [
        "96eed1485332b4d600df105241f51309095fe968"
      ],
      "author": {
        "name": "naivedogger",
        "email": "yangyanghu365@gmail.com",
        "time": "Thu Oct 15 12:13:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 12:13:40 2026 +0800"
      },
      "message": "[rust] Share the test cluster remote directory across servers (#4652)"
    },
    {
      "commit": "96eed1485332b4d600df105241f51309095fe968",
      "tree": "c595ff073eac650dc08e52c4fb7793879ca292e2",
      "parents": [
        "2d6d11419aaf9dad71c1f78cc472e5d7b1264ce3"
      ],
      "author": {
        "name": "fhan",
        "email": "aaron.han.1986@gmail.com",
        "time": "Thu Oct 15 10:09:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 10:09:10 2026 +0800"
      },
      "message": "[security] Fix concurrent ACL cache access in DefaultAuthorizer (#4501)"
    },
    {
      "commit": "2d6d11419aaf9dad71c1f78cc472e5d7b1264ce3",
      "tree": "66e344d879a2702abcaa3a840403fd39b9e99a1e",
      "parents": [
        "dfe8f5d41f3e18ed7ee862019bc9d71f13c1685f"
      ],
      "author": {
        "name": "Dionysis Stolis",
        "email": "dionysios.stolis@ververica.com",
        "time": "Wed Oct 14 15:19:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 14:19:21 2026 +0100"
      },
      "message": "[test] Avoid network retries in AzureFileSystemPluginTest (#4640)"
    },
    {
      "commit": "dfe8f5d41f3e18ed7ee862019bc9d71f13c1685f",
      "tree": "16de6fa82889ff8335298966a98710f544cc48c9",
      "parents": [
        "c3cebc8dd3e315e2465645be58c757fed46b6c62"
      ],
      "author": {
        "name": "Firas Bouzazi",
        "email": "115628206+firasbouzazi@users.noreply.github.com",
        "time": "Wed Oct 14 14:15:36 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 14:15:36 2026 +0100"
      },
      "message": "[lake] Name the Flink lake reader\u0027s Iceberg catalog like the server\u0027s (#4564)\n\nThe server and the tiering service build the Iceberg catalog with the\n`name` lake property, defaulting to \"fluss-iceberg-catalog\", but the\nFlink lake reader named it after the Flink catalog. Catalogs that scope\ntables by catalog name, such as JdbcCatalog, then could not find tables\nwritten by tiering, and `$lake` reads failed with NoSuchTableException\nunless both names happened to match.\n\nUse the `name` property from the table\u0027s lake options, with the same\ndefault, when creating the reader\u0027s Iceberg catalog."
    },
    {
      "commit": "c3cebc8dd3e315e2465645be58c757fed46b6c62",
      "tree": "2eb45f5b4839cd1ac07dce6d00afe9e7363bee77",
      "parents": [
        "c108f3418149e69b1cbcbc25940b4609a2ade064"
      ],
      "author": {
        "name": "Giannis Polyzos",
        "email": "ipolyzos.se@gmail.com",
        "time": "Tue Oct 13 10:48:28 2026 +0300"
      },
      "committer": {
        "name": "Anton Borisov",
        "email": "148864665+fresh-borzoni@users.noreply.github.com",
        "time": "Wed Oct 14 13:48:20 2026 +0100"
      },
      "message": "[build] Fix Java 8 nightly failures for flink2 and spark3-lake\n"
    },
    {
      "commit": "c108f3418149e69b1cbcbc25940b4609a2ade064",
      "tree": "a17199f40b157817ce98d2cc40c9c594e9143bd7",
      "parents": [
        "4c553b786e2e67e83a56bc78d881abfbdccb1cad"
      ],
      "author": {
        "name": "litiliu",
        "email": "38579068+litiliu@users.noreply.github.com",
        "time": "Wed Aug 12 11:23:10 2026 +0800"
      },
      "committer": {
        "name": "Anton Borisov",
        "email": "148864665+fresh-borzoni@users.noreply.github.com",
        "time": "Wed Oct 14 13:48:20 2026 +0100"
      },
      "message": "[build] Move Spark Scala 2.13 tests to nightly\n"
    }
  ],
  "next": "4c553b786e2e67e83a56bc78d881abfbdccb1cad"
}
