)]}'
{
  "log": [
    {
      "commit": "e5a3735c2e146d665caa3e75b343887c33655db2",
      "tree": "bd257360d1d5aaa406e32905dd6e1f67102f4541",
      "parents": [
        "3ac1779100f38d8d2e145dac2324b2bf48481d61"
      ],
      "author": {
        "name": "Goutam Adwant",
        "email": "8672451+goutamadwant@users.noreply.github.com",
        "time": "Sun Aug 16 00:55:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 15:55:30 2026 +0800"
      },
      "message": "[AURON #2431] Prune Iceberg changelog tasks by metadata predicates (#2456)\n\n# Which issue does this PR close?\n\nCloses #2431\n\n# Rationale for this change\n\nIceberg changelog metadata values are constant per changelog task. Auron\ncurrently plans every supported `AddedRowsScanTask` in a changelog range\neven when a simple predicate on `_change_type`, `_commit_snapshot_id`,\nor `_change_ordinal` proves that a task cannot match.\n\n# What changes are included in this PR?\n\n- Associate supported metadata-only filters with a direct Iceberg\nchangelog scan, allowing only deterministic projections between the\nfilter and scan.\n- Match filter attributes to the scan by expression ID before tagging\nit.\n- Prepare extension plans in the existing pre-columnar transition pass.\n- Prune `AddedRowsScanTask` instances for `\u003d` and `IN` predicates\ncombined with `AND`.\n- Preserve the changelog filter tag when Spark rebuilds a\n`BatchScanExec` for runtime filters.\n- Keep `OR`, `NOT`, mixed data-column predicates, unsafe operator\nshapes, and non-`AddedRowsScanTask` tasks on the existing path.\n\n# Are there any user-facing changes?\n\nYes. Eligible native Iceberg changelog scans plan and read fewer insert\ntasks. There are no public API or configuration changes.\n\n# How was this patch tested?\n\n- `AuronIcebergIntegrationSuite`: 45 tests passed on Spark 3.5 / Iceberg\n1.10.1 with the native engine.\n- `./dev/reformat --check`: passed both Spark 3.5 formatting\nconfigurations and compile/test-compile across Spark 3.0-3.4 and Spark\n4.0-4.1.\n- Regressions cover supported and unsupported predicates,\naggregate/limit/nondeterministic barriers, expression-ID mismatches,\npre-columnar staging, runtime-filter copies, dynamic partition pruning,\nand retention of non-insert tasks.\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [x] Yes\n- [ ] No\n\nGenerated-by: OpenAI Codex (GPT-5.6)\n\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e\nSigned-off-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "3ac1779100f38d8d2e145dac2324b2bf48481d61",
      "tree": "955805437c1f538c971b8e363c6a6bffd9e64db3",
      "parents": [
        "91ced1fbdd1ed45ebb9f9f2f5c04ca2ead04e827"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Sun Aug 16 10:46:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 10:46:46 2026 +0800"
      },
      "message": "[AURON #2457] Fix per-partition job submission in NativeCollectLimit (#2458)\n\n# Which issue does this PR close?\n\nCloses #2457\n\n# Rationale for this change\n\n`NativeCollectLimitBase.executeCollect()` currently uses\n`toLocalIterator`, which submits a separate Spark job for every scanned\npartition.\n\nFor empty or highly selective inputs, this can produce many unnecessary\njobs and make driver-side scheduling dominate query execution.\n\n# What changes are included in this PR?\n\n- Replace the `toLocalIterator` collection loop with `executeTake`.\n- Add a regression test to verify that partitions are scanned in\nbatches.\n\n# Are there any user-facing changes?\n\nQueries over empty or sparse partitions may submit fewer Spark jobs.\n\n# How was this patch tested?\n\nAdded a regression test to `AuronExecSuite`.\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [x] Yes\n- [ ] No\n\nIf yes, include: `Generated-by: GPT-5`\n\nASF guidance: https://www.apache.org/legal/generative-tooling.html\n\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e\nSigned-off-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "91ced1fbdd1ed45ebb9f9f2f5c04ca2ead04e827",
      "tree": "400f2ae0202f323b03f756eac341242aa9853a2d",
      "parents": [
        "53200b03fafd9e57af30b0ddf27577207f065df1"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Sat Aug 15 15:57:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 15:57:45 2026 +0800"
      },
      "message": "[AURON #2451] Add Paimon COW multi-commit correctness coverage (#2452)\n\n**Which issue does this PR close?**\n\nCloses #2451 \n\n**Rationale for this change**\n\nThe existing Paimon COW test verifies only a single commit. It does not\nprotect against stale rows being returned after a later commit updates\nan existing primary key.\n\nThis change adds multi-commit correctness coverage while keeping the\nnative scan implementation unchanged.\n\n**What changes are included in this PR?**\n\nUpdates the existing Paimon COW primary-key integration test to:\n\n- Write the initial rows.\n- Write a newer value for an existing primary key in a second commit.\n- Verify that only the latest value is returned.\n- Verify that the query still uses `NativePaimonV2TableScan`.\n\n**Are there any user-facing changes?**\n\nNo user-facing changes.\n\n**How was this patch tested?**\n\nUT.\n\n---------\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "53200b03fafd9e57af30b0ddf27577207f065df1",
      "tree": "2c3dabf1a1ad605ea7053223aeccd84e17ae208c",
      "parents": [
        "38f63964d2010fe07e0d208310292642e10d1c8d"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Sat Aug 15 15:36:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 15:36:21 2026 +0800"
      },
      "message": "[AURON #2437] Support inner residual join conditions in native broadcast hash join (#2438)\n\n# Which issue does this PR close?\n\nCloses #2437 \n\n# Rationale for this change\n\nAuron currently cannot execute Spark broadcast hash joins natively when\nan inner join contains a residual non-equi condition in addition to its\nequi-join keys.\n\nSupporting these conditions improves native execution coverage for\ncommon broadcast join queries and keeps the condition evaluation inside\nthe join operator.\n\n# What changes are included in this PR?\n\n- Passes the BroadcastHashJoinExec residual condition to\nNativeBroadcastJoinExec.\n- Converts the residual condition to the existing native JoinFilter\nrepresentation.\n- Adds the JoinFilter to the native broadcast join protobuf plan.\n- Parses and passes the filter through the native planner.\n- Evaluates the residual condition against candidate rows produced by\nthe broadcast hash lookup.\n- Supports both BuildLeft and BuildRight.\n- Limits residual-condition support to inner broadcast hash joins.\n- Adds Scala and Rust test coverage for both broadcast build sides.\n\nOuter, semi, anti, null-aware anti, and broadcast nested-loop join\ncondition support are not included.\n\n# Are there any user-facing changes?\n\nNo user-facing API changes. More inner broadcast hash joins with\nresidual conditions can now be executed natively by Auron.\n\n# How was this patch tested?\n\nUT.\n\n# Was this patch authored or co-authored using generative AI tooling?\n\n- [x] Yes\n- [ ] No\n\nGenerated-by: OpenAI Codex (GPT-5)\n\n---------\n\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e"
    },
    {
      "commit": "38f63964d2010fe07e0d208310292642e10d1c8d",
      "tree": "66ca33636603d7731c418dce5c8e5034938b469e",
      "parents": [
        "67cff189d74de42d8c39bc1ba156d2d21d35a06c"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Sat Aug 15 10:20:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 10:20:29 2026 +0800"
      },
      "message": "[AURON #2463] Fix native Top-K with only sort keys (#2464)\n\n# Which issue does this PR close?\n\nCloses #2463\n\n# Rationale for this change\n\nWhen all output columns are sort keys, the native sorter stores the sort\nkeys separately and creates a zero-column data batch.\n\nFor Top-K queries, the sorted indices are limited before this batch is\ncreated, but the batch currently retains the original input row count.\nThis mismatch can cause the merge cursor to read past the retained\nsort-key rows.\n\n# What changes are included in this PR?\n\n- Use the number of retained sorted indices as the row count of the\nzero-column batch.\n\n# Are there any user-facing changes?\n\nBug fix only.\n\n# How was this patch tested?\n\nAdded a regression test to AuronExecSuite.\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [x] Yes\n- [ ] No\n\nIf yes, include: `Generated-by: GPT-5`\n\nASF guidance: https://www.apache.org/legal/generative-tooling.html\n\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "67cff189d74de42d8c39bc1ba156d2d21d35a06c",
      "tree": "11b6160bf2cbe3c6c2c5bfecd1f98fdb98d48b52",
      "parents": [
        "779b2456a42c5eaefe48d75b5aa1f42a92651038"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "yangweiqing001@gmail.com",
        "time": "Wed Aug 12 00:34:52 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 15:34:52 2026 +0800"
      },
      "message": "[AURON #1863] Support the zero-argument Flink UNIX_TIMESTAMP natively (#2465)\n\n# Which issue does this PR close?\n\nPart of #1863.\n\n#1863 enumerates all three argument forms of `UNIX_TIMESTAMP`. The\n1-argument and 2-argument string-parsing forms landed in #2409 and\n#2448, and this PR adds the remaining 0-argument form. #1863 stays open\nafter this one merges, for the timezone configuration work tracked as\nsub-issue #2455.\n\n# Rationale for this change\n\n`UNIX_TIMESTAMP()` with no arguments returns the current epoch seconds.\nThe converter rejected it, so any Calc containing it fell back to Flink\nwholesale, taking every other expression in that Calc down with it.\n\nTwo things were believed to block it. Both turned out to be false, and I\nstated one of them myself earlier in this issue.\n\n**\"A zero-argument ext function cannot size its output.\"** The\next-function ABI drops the batch row count, so a 0-argument function\nappears to have no way to know how many values to return. That is true\nonly for a function returning an `Array`. The length check in\n`ScalarFunctionExpr::evaluate` sits entirely inside the\n`ColumnarValue::Array` branch, so a function returning\n`ColumnarValue::Scalar` never reaches it, and the projection broadcasts\nthe scalar to the batch width. No operand is needed, and no carrier\ncolumn either.\n\n**\"The 0-argument form needs the session time zone.\"** It does not. The\ngenerated Flink operator holds a `timeZone` field, passes it to the\n1-argument and 2-argument calls, and emits `result$1 \u003d\nDateTimeUtils.unixTimestamp()` with no argument at all. The result is\nepoch seconds, which is zone-independent.\n\nAn approach was proposed on #1863 that works around the first premise:\npass any input column to the Rust function purely to convey the batch\nlength, ignore its data, and return that many timestamps. That would\nhave worked, and it was a sound answer to the constraint as I had\ndescribed it. This PR does not use it, because once the constraint turns\nout not to exist the carrier column has no job left. The difference is\nvisible in the diff, so it is worth stating plainly: no column is\npassed, the Rust function reads no length, and the row count comes from\nthe projection broadcasting a scalar. The observable behavior is the\nsame either way.\n\n# What changes are included in this PR?\n\nThree commits.\n\n1. A native zero-argument ext function `Flink_UnixTimestampNow`\nreturning `ColumnarValue::Scalar(Int64)`. The clock is read as\n`timestamp_millis() / 1000`, mirroring Flink\u0027s\n`System.currentTimeMillis() / 1000` operator for operator.\n2. The converter admits the 0-argument form and emits that function with\nan empty operand list. The 0-argument arm sits **above** the session\ntime zone check, since a zone the native side cannot resolve is no\nreason to fall back a query that never consults a zone. Class and method\njavadoc are corrected: they previously described the 0-argument form as\nfalling back and described `UNIX_TIMESTAMP` as always mapping to\n`Flink_UnixTimestamp` with `[value, chronoFormat, zoneId]`.\n3. End-to-end coverage in `AuronFlinkCalcITCase`.\n\nNo protobuf change, no `Cargo.toml` change, no `pom.xml` change. It is a\nseparate native function rather than a fourth arity on\n`Flink_UnixTimestamp`, whose contract is \"parse this string with this\nformat in this zone\" and which the 0-argument form shares none of.\n\n# Are there any user-facing changes?\n\nYes, and one of them is a deliberate semantic divergence worth reviewing\non its own merits.\n\nA query using `UNIX_TIMESTAMP()` that previously fell back to Flink now\nruns natively.\n\n**Flink evaluates the niladic form per record. This implementation reads\nthe clock once per call site per evaluation and broadcasts it across the\nbatch**, so rows in one batch share a timestamp, and that timestamp is\ntaken when the batch is evaluated rather than when each row arrived. Two\n`UNIX_TIMESTAMP()` calls in one projection are read independently, which\nmatches Flink.\n\nHow large the skew can get depends on what closes the batch:\n\n| Path | Bound |\n|---|---|\n| Calc with a declared `WATERMARK FOR` | about 205 ms, the default\n`autoWatermarkInterval` |\n| Calc with no watermark strategy | 8192 rows only, so `8192 / rate`\nseconds. About 82 s at 100 rec/s |\n| Fused Kafka plan | the native scan blocks until its buffer fills,\ndefault 3000, with no time flush |\n\nThe unwatermarked case is the common shape for a processing-time query,\nso this is not a corner case. It was discussed and settled on the issue\n(https://github.com/apache/auron/issues/1863#issuecomment-5249021849):\nper-batch is acceptable, since the zero-argument form is non-idempotent\nanyway and what users generally want is to know roughly when a record\nwas processed. It is also the finest granularity among comparable\nengines: StreamFusion stamps `PROCTIME()` once per operator compile,\nFlink\u0027s own batch mode folds `CURRENT_TIMESTAMP` to a query-start\nliteral, DataFusion, ClickHouse and Velox are per query, DuckDB is per\ntransaction, and ClickHouse ships `nowInBlock()` as a documented\nper-block clock. Flink also declares the niladic form only\n`SqlMonotonicity.INCREASING`, which a per-batch constant satisfies.\n\nGating it conditionally on a declared watermark was considered and\nrejected: the converter has no access to the ExecNode graph, the\npredicate misses DataStream-level watermarks,\n`auto-watermark-interval\u003d0` and idle partitions, it keys native support\noff an unrelated DDL clause, and it only shrinks the skew rather than\nremoving it.\n\n# How was this patch tested?\n\nNative unit tests for the scalar return and its broadcast to batch\nwidth, and for the value being a plausible epoch second rather than\nmilliseconds.\n\nConverter tests for the emitted node shape, and\n`testUnixTimestampZeroArgSupportedWithFixedOffsetZone`, which exists to\ncatch the 0-argument arm being placed below the time zone check. It is a\nreal discriminator: moving the arm below the check fails that test and\nno other. Two tests that asserted the form falls back are inverted.\n\nAn ITCase asserting one clock-bracketed row per input row and no\nrecorded fallback. Both assertions are load-bearing and neither subsumes\nthe other. A zero fallback count establishes that the Calc converted,\nnot that it ran: a native library holding no registry arm for the\nfunction still converts at plan time and fails only during execution,\nwhere nothing records a fallback, leaving the counter at zero and the\nresult set empty. The row count is what establishes the native plan\nexecuted.\n\nThe ITCase was checked to be non-vacuous by running rather than by\ninspection: reverting the converter gate fails it on the fallback count,\nand running against a library without the registry arm fails it on the\nrow count.\n\nFull module build green, 0 checkstyle violations, spotless clean.\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [x] Yes\n- [ ] No\n\n`Generated-by: Claude Code (Claude Opus 5)`"
    },
    {
      "commit": "779b2456a42c5eaefe48d75b5aa1f42a92651038",
      "tree": "406aef92c58271d2a62594afd8cb095223b71f71",
      "parents": [
        "14d17f7ce5fa8084f8f4af73fccc89180bb0161f"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "yangweiqing001@gmail.com",
        "time": "Mon Aug 10 23:08:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 14:08:43 2026 +0800"
      },
      "message": "[AURON #1863] Support native Flink UNIX_TIMESTAMP: converter integration (#2448)\n\n# Which issue does this PR close?\n\nPart of #1863. Not `Closes`, because the issue description also covers\nthe 0-input form, which this PR does not implement.\n\nThis is the Flink Java side of `UNIX_TIMESTAMP`. The native function it\ncalls merged in #2409. Together they cover the 1-input and 2-input forms\nfrom the issue description.\n\nThe 0-input form is still outstanding. It is a different function rather\nthan a missing branch: Flink binds the niladic form to\n`DateTimeUtils.unixTimestamp()`, which reads the clock per record and\nparses nothing, so it needs its own design pass. The converter rejects\nit explicitly and falls back to Flink\u0027s engine, and #1863 stays open to\ntrack it.\n\n# Rationale for this change\n\nThis completes native support for Flink\u0027s `UNIX_TIMESTAMP` by wiring the\nFlink Calc converter to emit the native function added in #2409. Without\nit the native function is unreachable, and any Calc containing\n`UNIX_TIMESTAMP` falls back to Flink\u0027s engine for the whole Calc.\n\n# What changes are included in this PR?\n\nThe converter recognizes `UNIX_TIMESTAMP` and lowers the 1-argument and\n2-argument forms to the native `Flink_UnixTimestamp` node.\n\n`UNIX_TIMESTAMP` resolves to `SqlKind.OTHER_FUNCTION`, so it is matched\nby reference identity on the operator before the supported-kinds switch,\nthe same way `TRY_CAST` is handled.\n\nA format scanner translates the supported subset of Java date-format\nletters (`yyyy MM dd HH mm ss` and literals) to the native format.\nAnything outside that subset falls back: other pattern letters,\nunsupported run-lengths, a non-literal format argument, the 0-argument\nform, and a numeric field adjacent to another numeric field where the\nrun-length would not survive translation (for example `yyyyMd`). Falling\nback keeps results correct rather than risking a silent divergence.\n\nThe session time zone is resolved at plan time and passed into the node.\nThis required completing the config threading in the standalone-Calc\npath, which passed a persisted config that does not carry\n`table.local-time-zone`. That gap had no effect until now:\n`UNIX_TIMESTAMP` is the first time-zone-sensitive expression the\nconverter supports, and the earlier ones (arithmetic, comparison,\nlogical, cast) never read the session zone. The effective node config is\nthreaded through instead, so the configured zone reaches the native\nevaluation.\n\n# Are there any user-facing changes?\n\nYes. `UNIX_TIMESTAMP(string)` and `UNIX_TIMESTAMP(string, format)` now\nexecute on the native engine when the format is a supported literal\npattern. Unsupported patterns and the 0-argument form continue to run on\nFlink\u0027s engine, with the same results as before.\n\n# How was this patch tested?\n\nUnit tests for the scanner (accept/reject, quote escaping, the adjacency\nrule), the converter (node shape, format translation, time-zone\npropagation), and the operator-identity invariant. Fallback tests assert\nthat unsupported inputs actually fall back rather than silently\nproducing a native plan.\n\nAn end-to-end ITCase runs `UNIX_TIMESTAMP(ts)` with a non-UTC session\nzone and confirms the native result matches the expected epoch values.\nThe executed native plan shows the function and the resolved zone,\nconfirming the query runs natively rather than falling back.\n\n160 tests pass in `auron-flink-planner` on the rebased branch, with\nspotless clean and 0 checkstyle violations.\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [x] Yes\n- [ ] No\n\nGenerated-by: Claude Code (Claude Opus 5)"
    },
    {
      "commit": "14d17f7ce5fa8084f8f4af73fccc89180bb0161f",
      "tree": "98f91098f95466f321a11e4a7073ed7d1915fab4",
      "parents": [
        "0e6388dc6f4c9718ded4e1383fa3dff7ef4fb196"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Sun Aug 09 08:42:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 09 08:42:34 2026 +0800"
      },
      "message": "[AURON #2453] Fix filtered aggregation for groups with no matching rows (#2454)\n\n# Which issue does this PR close?\n\nCloses #2453 \n\n# Rationale for this change\n\nA grouped aggregate may have no rows matching its `FILTER` clause. In\nthis case, the group exists but its accumulator may not be initialized,\ncausing an index-out-of-bounds error while producing the result.\n\n# What changes are included in this PR?\n\n- Ensure accumulator slots are initialized for all discovered groups\nbefore applying aggregate filters.\n- Add regression coverage for filtered `SUM` and `COUNT`.\n\n# Are there any user-facing changes?\n\nYes, bug fix only.\n\n# How was this patch tested?\nYes, added regression tests for filtered `SUM` and `COUNT`.\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [x] Yes\n- [ ] No\n\nIf yes, include: `Generated-by: gpt-5`\n\nASF guidance: https://www.apache.org/legal/generative-tooling.html"
    },
    {
      "commit": "0e6388dc6f4c9718ded4e1383fa3dff7ef4fb196",
      "tree": "88e3b0b42f1b516c42f889c2ccb057710d27fbe9",
      "parents": [
        "4c2abaaebf841ed3399401b8a48179392985bdbe"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Sun Aug 09 08:41:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 09 08:41:42 2026 +0800"
      },
      "message": "[AURON #2449] Add fallback coverage for unsupported Paimon scan data type (#2450)\n\n**Which issue does this PR close?**\n\nCloses #2449 \n\n**Rationale for this change**\n\nPaimon native scan currently falls back when the read schema contains\nunsupported\ndata types, but this behavior was not covered by the integration tests.\n\nAdding this regression test ensures unsupported decimal types continue\nto use the\nSpark fallback path and do not enter native Paimon execution\naccidentally.\n\n**What changes are included in this PR?**\n\nAdds a Paimon integration test for an unsupported `decimal(38,10)`\ncolumn.\n\nThe test:\n\n- Writes a row using the unsupported decimal type.\n- Verifies that Spark returns the expected result.\n- Verifies that the executed plan does not contain\n`NativePaimonV2TableScan`.\n\nNo execution logic or user-facing behavior is changed.\n\n**Are there any user-facing changes?**\n\nNo user-facing changes.\n\n**How was this patch tested?**\n\nUT.\n\n---------\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "4c2abaaebf841ed3399401b8a48179392985bdbe",
      "tree": "211f34646ebe7168042c64f6e361726f04b331f2",
      "parents": [
        "83f05f58ac0bc5d9497c5946e9386758b0118b94"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Tue Aug 04 20:25:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 20:25:59 2026 +0800"
      },
      "message": "[AURON #2434] Support full-data-file Iceberg changelog deletes (#2435)\n\n**Which issue does this PR close?**\nCloses #2434 \n\n**Rationale for this change**\nAuron native Iceberg changelog scan currently supports insert-only\nchangelog tasks.\n\nFull-data-file delete changelog tasks can be executed natively without\nrow-level delete-file handling. Auron can scan the deleted data file\ndirectly and materialize changelog metadata from the Iceberg changelog\ntask.\n\nSupporting this case improves native Iceberg changelog scan coverage\nwhile keeping more complex delete and update semantics on Spark\u0027s\nreader.\n\n**What changes are included in this PR?**\nAllows native Iceberg changelog scan to accept `DeletedDataFileScanTask`\nwhen:\n\n- the changelog operation is `DELETE`\n- `existingDeletes()` is empty\n\nKeeps existing native support for `AddedRowsScanTask` when:\n\n- the changelog operation is `INSERT`\n- `deletes()` is empty\n\nKeeps fallback behavior for unsupported changelog tasks, including\nrow-level deletes, position/equality deletes, update changelog tasks,\nmixed file formats, and delete tasks with existing delete files.\n\nAdds coverage for:\n\n- full-data-file delete changelog native scan\n- a changelog range that contains both insert tasks and full-data-file\ndelete tasks\n\n**Are there any user-facing changes?**\nNo user-facing API changes. More Iceberg changelog scans can now be\nexecuted natively by Auron.\n\n**How was this patch tested?**\nUT.\n\n---------\n\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e"
    },
    {
      "commit": "83f05f58ac0bc5d9497c5946e9386758b0118b94",
      "tree": "b00f1345be15cead5c3f730c2752fa214a042ef6",
      "parents": [
        "377e53242a0089971d3167716b9e2972c55532e2"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "yangweiqing001@gmail.com",
        "time": "Tue Aug 04 02:49:40 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 17:49:40 2026 +0800"
      },
      "message": "[AURON #1863] Support native Flink UNIX_TIMESTAMP: native scalar function (#2409)\n\n# Which issue does this PR close?\n\nCloses #1863. The converter that emits this function follows in a\nseparate PR, once this one merges.\n\nTo show where this is going, the converter change is previewable here:\nhttps://github.com/weiqingy/auron/pull/1 (a draft in my fork, diffed\nagainst this PR\u0027s branch so it shows only the converter side). That PR\nwill be opened against this repo after this one lands.\n\n# Rationale for this change\n\nFlink\u0027s `UNIX_TIMESTAMP` converts a formatted date-time string to a Unix\ntimestamp in seconds. AIP-1 lists it as a Phase 1 built-in function.\nSupporting it natively is the first step; this PR adds the native (Rust)\nevaluation, and a follow-up PR wires the Flink converter to emit it.\n\nThe hard part is matching Flink\u0027s parsing exactly. Flink parses with\n`java.text.SimpleDateFormat` in its default lenient mode, so it accepts\nnon-zero-padded fields, field rollover, and trailing input. A strict\nparser diverges from Flink on the default format `yyyy-MM-dd HH:mm:ss`\nas soon as a field is not zero-padded, and would return a wrong\ntimestamp rather than an error. So this implements a lenient parser\nrather than delegating to a strict one.\n\n# What changes are included in this PR?\n\nA new `Flink_UnixTimestamp` ext scalar function in\n`datafusion-ext-functions`, registered through the existing ext-function\npath (no proto change).\n\nIt takes three string arguments `[value, format, zoneId]` and returns an\n`Int64`. The format is a translated strftime-style pattern and the zone\nis resolved by the caller; the converter PR supplies both.\n\nThe parser reproduces `SimpleDateFormat` lenient semantics for the\nsupported fields: variable field widths, rollover normalization,\ntolerant of trailing input, a leading minus on numeric fields. It also\nhandles the Julian/Gregorian hybrid calendar (cutover 1582-10-15), since\n`GregorianCalendar` is a hybrid while chrono is proleptic Gregorian, and\nresolves DST-ambiguous or nonexistent local times using the zone\u0027s\nstandard offset, matching Flink.\n\nFailure semantics match Flink: an unparseable string yields\n`Long.MIN_VALUE`, a NULL input yields NULL, and the\nmilliseconds-to-seconds step truncates toward zero.\n\nThe function is registered but not yet emitted by any planner, so this\nPR is self-contained and dormant until the converter lands.\n\n# Are there any user-facing changes?\n\nNo. The function is not reachable from SQL until the converter PR is\nmerged.\n\n# How was this patch tested?\n\n19 unit tests derived from a differential oracle that was validated\nagainst real `java.text.SimpleDateFormat` across a large randomized set\nof (input, format, timezone) inputs. Coverage includes the happy path,\nfield rollover, non-padded fields, trailing garbage, NULL,\nunparseable-to-`Long.MIN_VALUE`, DST gap and overlap across several\nzones, pre-1970 negative timestamps, pre-1582 hybrid-calendar dates, the\narity guard, an empty format matching nothing, and canonical field\nwidths."
    },
    {
      "commit": "377e53242a0089971d3167716b9e2972c55532e2",
      "tree": "4df056f9410cececc07403dea6d9f8ae6570fadf",
      "parents": [
        "23fc4f53107afb5c50706072319c6fa0a4e6445d"
      ],
      "author": {
        "name": "cxzl25",
        "email": "3898450+cxzl25@users.noreply.github.com",
        "time": "Tue Aug 04 14:02:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 14:02:21 2026 +0800"
      },
      "message": "[AURON #2422] Make RSS spill memory triggers configurable (#2423)\n\n# Which issue does this PR close?\n\nCloses #2422\n\n# Rationale for this change\nConfigurable spill trigger (rss_sort_repartitioner.rs). Replace the\nhardcoded `mem_used_percent() \u003e 0.4` with two tunable thresholds; spill\nfires when either is exceeded (whichever first):\n- `spark.auron.rss.spill.memoryFraction` (relative, default 0.4 \u003d\nprevious behavior)\n- `spark.auron.rss.spill.memorySize` (absolute bytes, default 0 \u003d\ndisabled; acts as a deterministic cap on the per-spill burst regardless\nof executor memory)\n\nBoth are read once per executor via OnceCell (no per-batch JNI conf\nreads).\nAdds `MemConsumer::mem_used()` (absolute bytes accessor) to support the\nabsolute threshold.\n\n# What changes are included in this PR?\nAuron\u0027s rss shuffle buffers records in native memory and spills to\nceleborn in bursts. At a shuffle-stage peak, many tasks spill\nsimultaneously; if each spill is large, the aggregate burst can overrun\na celeborn worker\u0027s inbound capacity and push the worker into a\npush-pause: it stops reading, holds inbound buffers, and only recovers\nafter the idle-connection timeout / connection close (observed as a\nmulti-minute stall — tasks survive via celeborn\u0027s client-side revive but\nthroughput degrades).\nThe previous hardcoded 0.4 fraction made the per-spill burst size depend\non executor memory and not directly tunable against this.\n\n# Are there any user-facing changes?\nNo\n\n# How was this patch tested?\nProduction environment verification\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [x] Yes\n- [ ] No"
    },
    {
      "commit": "23fc4f53107afb5c50706072319c6fa0a4e6445d",
      "tree": "bf090d257ea9ed18853a394fd4ce841b3c08b29c",
      "parents": [
        "44472751550f3cd03b54683f7cf1cb800eff6922"
      ],
      "author": {
        "name": "Junfan Zhang",
        "email": "zuston@apache.org",
        "time": "Fri Jul 31 08:44:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 08:44:58 2026 +0800"
      },
      "message": "[AURON #2446] Flush buffered data based on row count (#2447)\n\n# Which issue does this PR close?\n\nCloses #2446\n\nthis PR is to fix the incorrect flushing logic, that should be based on\nthe row count rather than the bytes\n\n# Rationale for this change\n\nWithout this fix, the flushing will be triggered too frequently. \n\n# What changes are included in this PR?\n\n# Are there any user-facing changes?\n\n# How was this patch tested?\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [x] Yes\n- [ ] No\n\nGenerated-by: OpenAI Codex (GPT-5)"
    },
    {
      "commit": "44472751550f3cd03b54683f7cf1cb800eff6922",
      "tree": "9ded76490401cf2f9537735e9d33f7f28964aab4",
      "parents": [
        "0f1794cab2eb3db080f31be2cb02a9b9fc43c78d"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Fri Jul 31 08:33:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 08:33:41 2026 +0800"
      },
      "message": "[AURON #2429] Add mixed-format fallback coverage for Iceberg changelog native scan (#2430)\n\n**Which issue does this PR close?**\nCloses #2429 \n\n**Rationale for this change**\nAuron native Iceberg changelog scan requires all planned changelog tasks\nto use a single supported file format.\n\nWithout validating the planned tasks, a mixed-format fallback test could\npass because of an unrelated changelog fallback and fail to exercise the\nintended file-format guard.\n\n**What changes are included in this PR?**\nAdds fallback coverage for an Iceberg changelog range containing both\nParquet and ORC data files.\n\nThe test:\n\n- verifies that all planned changelog tasks are `AddedRowsScanTask`\n- verifies that the task file formats are exactly Parquet and ORC\n- compares the result with Spark execution\n- verifies that `NativeIcebergTableScan` is not used\n\nNo execution logic is changed.\n\n**Are there any user-facing changes?**\nNo user-facing changes. This is a test-only change.\n\n**How was this patch tested?**\nUT.\n\n---------\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e"
    },
    {
      "commit": "0f1794cab2eb3db080f31be2cb02a9b9fc43c78d",
      "tree": "ded195c338fd89d3b380286c72910e4f8a0b7cd2",
      "parents": [
        "ce460e1634458e952e7ba330e9d5b8f87fd91f22"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Fri Jul 31 08:29:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 08:29:23 2026 +0800"
      },
      "message": "[AURON #2419] RowNullChecker may mis-detect null join keys for complex Arrow row types (#2424)\n\n# Which issue does this PR close?\n\nCloses #2419 \n\n**Rationale for this change**\nAuron\u0027s sort merge join uses encoded Arrow rows for join key comparison\nand uses RowNullChecker to skip rows with null join keys.\n\nRowNullChecker previously inspected Arrow row bytes manually. This is\nfragile for complex row encodings such as struct, list, and dictionary,\nbecause their layout is controlled by Arrow RowConverter and should not\nbe interpreted with fixed or estimated field lengths.\n\nThis can cause RowNullChecker to mis-detect null join keys for complex\nkey types.\n\n**What changes are included in this PR?**\nAdds an Arrow RowConverter to RowNullChecker.\nUpdates RowNullChecker\u0027s `has_nulls` path to decode Rows through Arrow\nRowConverter before building the null-key mask.\nPreserves conservative join key null semantics:\ntop-level null key values are treated as null join keys\nnested null fields or elements inside non-null struct/list keys do not\nmake the key null\nKeeps the existing RowNullChecker public method signatures unchanged.\nKeeps the existing byte-level helper path unchanged.\nAdds unit coverage for complex struct, list, and dictionary key rows.\n\n**Are there any user-facing changes?**\nNo user-facing API changes.\n\n**How was this patch tested?**\nUT.\n\n**Was this patch authored or co-authored using generative AI tooling?**\n- [x] Yes\n- [ ] No\nGenerated-by: OpenAI Codex (GPT-5)\n\n---------\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e"
    },
    {
      "commit": "ce460e1634458e952e7ba330e9d5b8f87fd91f22",
      "tree": "683fabcc491bbd5d83de4f076c0a82c52c0d27af",
      "parents": [
        "18f9b3f4e3846e761315184f572d4427e802fcc7"
      ],
      "author": {
        "name": "cxzl25",
        "email": "3898450+cxzl25@users.noreply.github.com",
        "time": "Thu Jul 30 14:30:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 14:30:39 2026 +0800"
      },
      "message": "[AURON #2439] Add git to yum install (#2442)\n\n# Which issue does this PR close?\n\nCloses #2439\n\n# Rationale for this change\n\n\nhttps://github.com/apache/auron/actions/runs/30325123247/job/90213501717\n```\nbuild-release-1  | [ERROR] [mvn-builder-auron-core] ./dev/vendors/setup-vendors.sh: line 135: git: command not found\n```\n\n# What changes are included in this PR?\n\n1. `dev/docker-build/centos7/Dockerfile`: install `git` alongside the\nother build tools\n(it was previously missing entirely, causing `setup-vendors.sh` to fail\nwith\n     `git: command not found`).\n2. `dev/vendors/setup-vendors.sh`: replace `git -C \"${target_dir}\" apply\n--3way \"${patch}\"`\nwith `(cd \"${target_dir}\" \u0026\u0026 git apply --3way \"${patch}\")`, so patch\napplication no longer\n     depends on a git version \u003e\u003d 1.8.5.\n3. `.github/workflows/build-amd64-releases.yml`: add\n`dev/docker-build/centos7/Dockerfile` to\nthe `paths` trigger list so changes to the build image are validated by\nthis workflow on PRs.\n\n# Are there any user-facing changes?\nNo\n\n# How was this patch tested?\nGHA\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [ ] Yes\n- [ ] No"
    },
    {
      "commit": "18f9b3f4e3846e761315184f572d4427e802fcc7",
      "tree": "c88866dd3b72b814b75962a781e64bc3a9b99b7f",
      "parents": [
        "0d4d77954240201bbd04e23ac9fd84d78d8ec5bb"
      ],
      "author": {
        "name": "cxzl25",
        "email": "3898450+cxzl25@users.noreply.github.com",
        "time": "Wed Jul 29 14:39:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 14:39:16 2026 +0800"
      },
      "message": "[AURON #2440] Consolidate Maven properties and format code (#2441)\n\n# Which issue does this PR close?\n\nCloses #2440\n\n# Rationale for this change\n\n`./dev/reformat` produced different formatting results depending on the\nJDK used to run it. `pom.xml` selected `scalafmtVersion` based on the\nactive JDK profile: `3.0.0` for `jdk-8`/`jdk-11`, and `3.9.9` for\n`jdk-17`/`jdk-21`. However, `scalafmt.conf` declares `version \u003d 3.9.9`,\nso only the JDK 17/21 profiles actually matched the intended\n  formatting rules.\n  \nAs a result, running the formatter under JDK 8/11 vs JDK 17/21 produced\ndifferent indentation for multi-line string interpolations (e.g.\n`.getOrElse(...)` continuation lines), causing spurious diffs in `git\nstatus` depending on which JDK happened to be active locally.\n\n# What changes are included in this PR?\n\nUnify `scalafmtVersion` to `3.9.9` across all\n`jdk-8`/`jdk-11`/`jdk-17`/`jdk-21` profiles, matching the version\ndeclared in `scalafmt.conf`.\n\n# Are there any user-facing changes?\nNo\n\n# How was this patch tested?\nGHA\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [ ] Yes\n- [ ] No"
    },
    {
      "commit": "0d4d77954240201bbd04e23ac9fd84d78d8ec5bb",
      "tree": "6e5d763bdd148adde6f6207bcca2a4d7c29cd8ed",
      "parents": [
        "bbca8c76b77561bc5238e5e2bc1ddeafcaa3f830"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jul 28 17:23:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 17:23:40 2026 +0800"
      },
      "message": "Bump actions/stale from 10 to 11 (#2436)\n\nBumps [actions/stale](https://github.com/actions/stale) from 10 to 11.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/stale/releases\"\u003eactions/stale\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev11.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eEnhancement\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate to ESM and update dependencies by \u003ca\nhref\u003d\"https://github-grid.enterprise.slack.com/team/U08CVLQ4JKE\"\u003e\u003ccode\u003e@​chiranjib-swain\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1350\"\u003eactions/stale#1350\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency Update\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eOverride brace-expansion to 5.0.8 to address 24 high-severity\ndependency vulnerabilities by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1351\"\u003eactions/stale#1351\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/stale/compare/v10...v11.0.0\"\u003ehttps://github.com/actions/stale/compare/v10...v11.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev10.4.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eBug Fix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed \u003ccode\u003eonly-issue-types\u003c/code\u003e validation by \u003ca\nhref\u003d\"https://github.com/trueberryless\"\u003e\u003ccode\u003e@​trueberryless\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1338\"\u003eactions/stale#1338\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency Updates\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump undici to 6.27.0 via override, clean up stale license files,\nand version to 10.4.0. by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1342\"\u003eactions/stale#1342\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/trueberryless\"\u003e\u003ccode\u003e@​trueberryless\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1338\"\u003eactions/stale#1338\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/stale/compare/v10.3.0...v10.4.0\"\u003ehttps://github.com/actions/stale/compare/v10.3.0...v10.4.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev10.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eBug Fix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eEnhancement: ignore stale labeling events by \u003ca\nhref\u003d\"https://github.com/shamoon\"\u003e\u003ccode\u003e@​shamoon\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1311\"\u003eactions/stale#1311\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency Updates\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade dependencies (\u003ccode\u003e@​actions/core\u003c/code\u003e,\n\u003ccode\u003e@​octokit/plugin-retry\u003c/code\u003e, \u003ca\nhref\u003d\"https://github.com/typescript-eslint\"\u003e\u003ccode\u003e@​typescript-eslint\u003c/code\u003e\u003c/a\u003e)\nby \u003ca href\u003d\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1335\"\u003eactions/stale#1335\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/shamoon\"\u003e\u003ccode\u003e@​shamoon\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1311\"\u003eactions/stale#1311\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/stale/compare/v10...v10.3.0\"\u003ehttps://github.com/actions/stale/compare/v10...v10.3.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev10.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eBug Fix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix checking state cache (fix \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/issues/1136\"\u003e#1136\u003c/a\u003e)\nand switch to Octokit helper methods by \u003ca\nhref\u003d\"https://github.com/itchyny\"\u003e\u003ccode\u003e@​itchyny\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1152\"\u003eactions/stale#1152\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency Updates\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade js-yaml from 4.1.0 to 4.1.1 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1304\"\u003eactions/stale#1304\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade lodash from 4.17.21 to 4.17.23 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1313\"\u003eactions/stale#1313\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade actions/cache from 4.0.3 to 5.0.2 and actions/github from\n5.1.1 to 7.0.0 by \u003ca\nhref\u003d\"https://github.com/chiranjib-swain\"\u003e\u003ccode\u003e@​chiranjib-swain\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1312\"\u003eactions/stale#1312\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/itchyny\"\u003e\u003ccode\u003e@​itchyny\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1152\"\u003eactions/stale#1152\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/stale/compare/v10...v10.2.0\"\u003ehttps://github.com/actions/stale/compare/v10...v10.2.0\u003c/a\u003e\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/stale/blob/main/CHANGELOG.md\"\u003eactions/stale\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch1\u003e[10.1.0]\u003c/h1\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd only-issue-types option to filter issues by type by \u003ca\nhref\u003d\"https://github.com/Bibo-Joshi\"\u003e\u003ccode\u003e@​Bibo-Joshi\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1255\"\u003eactions/stale#1255\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e[10.0.0]\u003c/h1\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade to node 24 by \u003ca\nhref\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1279\"\u003eactions/stale#1279\u003c/a\u003e\nMake sure your runner is on version v2.327.1 or later to ensure\ncompatibility with this release. \u003ca\nhref\u003d\"https://github.com/actions/runner/releases/tag/v2.327.1\"\u003eRelease\nNotes\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eEnhancement\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eIntroducing sort-by option by \u003ca\nhref\u003d\"https://github.com/suyashgaonkar\"\u003e\u003ccode\u003e@​suyashgaonkar\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1254\"\u003eactions/stale#1254\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDependency Upgrades\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade actions/publish-immutable-action from 0.0.3 to 0.0.4 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1186\"\u003eactions/stale#1186\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade undici from 5.28.4 to 5.28.5 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1201\"\u003eactions/stale#1201\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​action/cache\u003c/code\u003e from 4.0.0 to 4.0.2 by \u003ca\nhref\u003d\"https://github.com/aparnajyothi-y\"\u003e\u003ccode\u003e@​aparnajyothi-y\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1226\"\u003eactions/stale#1226\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​action/cache\u003c/code\u003e from 4.0.2 to 4.0.3 by \u003ca\nhref\u003d\"https://github.com/suyashgaonkar\"\u003e\u003ccode\u003e@​suyashgaonkar\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1233\"\u003eactions/stale#1233\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade undici from 5.28.5 to 5.29.0 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1251\"\u003eactions/stale#1251\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade form-data to bring in fix for critical vulnerability by \u003ca\nhref\u003d\"https://github.com/gowridurgad\"\u003e\u003ccode\u003e@​gowridurgad\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1277\"\u003eactions/stale#1277\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDocumentation changes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChangelog update for recent releases by \u003ca\nhref\u003d\"https://github.com/suyashgaonkar\"\u003e\u003ccode\u003e@​suyashgaonkar\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1224\"\u003eactions/stale#1224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePermissions update in Readme by \u003ca\nhref\u003d\"https://github.com/ghadimir\"\u003e\u003ccode\u003e@​ghadimir\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1248\"\u003eactions/stale#1248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e[9.1.0]\u003c/h1\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDocumentation update by \u003ca\nhref\u003d\"https://github.com/Marukome0743\"\u003e\u003ccode\u003e@​Marukome0743\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1116\"\u003eactions/stale#1116\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd workflow file for publishing releases to immutable action\npackage by \u003ca\nhref\u003d\"https://github.com/Jcambass\"\u003e\u003ccode\u003e@​Jcambass\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1179\"\u003eactions/stale#1179\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate undici from 5.28.2 to 5.28.4 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1150\"\u003eactions/stale#1150\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate actions/checkout from 3 to 4 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1091\"\u003eactions/stale#1091\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate actions/publish-action from 0.2.2 to 0.3.0 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1147\"\u003eactions/stale#1147\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate ts-jest from 29.1.1 to 29.2.5 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1175\"\u003eactions/stale#1175\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003e@​actions/core\u003c/code\u003e from 1.10.1 to 1.11.1 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1191\"\u003eactions/stale#1191\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003e@​types/jest\u003c/code\u003e from 29.5.11 to 29.5.14 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1193\"\u003eactions/stale#1193\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003e@​actions/cache\u003c/code\u003e from 3.2.2 to 4.0.0 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/stale/pull/1194\"\u003eactions/stale#1194\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003e[9.0.0]\u003c/h1\u003e\n\u003ch2\u003eBreaking Changes\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003eAction is now stateful: If the action ends because of \u003ca\nhref\u003d\"https://github.com/actions/stale#operations-per-run\"\u003eoperations-per-run\u003c/a\u003e\nthen the next run will start from the first unprocessed issue skipping\nthe issues processed during the previous run(s). The state is reset when\nall the issues are processed. This should be considered for scheduling\nworkflow runs.\u003c/li\u003e\n\u003cli\u003eVersion 9 of this action updated the runtime to Node.js 20. All\nscripts are now run with Node.js 20 instead of Node.js 16 and are\naffected by any breaking changes between Node.js 16 and 20.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/stale/commit/4391f3da665fdf50b6810c1a66712fb9ba21aa93\"\u003e\u003ccode\u003e4391f3d\u003c/code\u003e\u003c/a\u003e\nFix 24 high severity vulnerabilities by overriding brace-expansion to\n5.0.8 (...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/stale/commit/eaf9131fae5eafd0c31a64ebe3a2e183266fec48\"\u003e\u003ccode\u003eeaf9131\u003c/code\u003e\u003c/a\u003e\nrefactor: update imports to use ES module syntax and improve test\nstructure (...\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/actions/stale/compare/v10...v11\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/stale\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d10\u0026new-version\u003d11)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "bbca8c76b77561bc5238e5e2bc1ddeafcaa3f830",
      "tree": "55bceb8acd5bd0f23921ee3f1bf6a2fa51973624",
      "parents": [
        "c1e5943327482fe7190febfbfba78cf9d23bce28"
      ],
      "author": {
        "name": "Lei Wang",
        "email": "wanglei860213@gmail.com",
        "time": "Tue Jul 28 11:08:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 11:08:55 2026 +0800"
      },
      "message": "[AURON #2432] Vendor third-party dependencies via setup-vendors.sh with patch series (#2433)\n\nReplace direct git/rev dependencies for datafusion, arrow-rs, orc-rust,\nand serde_json with a vendor+patch approach:\n\n- Add dev/vendors/setup-vendors.sh to clone upstream repos at pinned\ntags and apply local patch series\n- Add patch files under\ndev/vendors/patches/{datafusion,arrow-rs,orc-rust,serde_json}/\n- Update Cargo.toml: use relative path patches to vendored packages,\nexclude vendor workspaces from the main workspace\n- Update .gitignore to ignore dev/vendors/packages/\n- Update .rat-excludes for dev/vendors/**\n- Call setup-vendors.sh all from build-native.sh before cargo build\n\n# Which issue does this PR close?\n\nCloses #2432 \n\n# Rationale for this change\n\n# What changes are included in this PR?\n\n# Are there any user-facing changes?\nNo.\n\n# How was this patch tested?\nVia github CI.\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [*] Yes\n- [ ] No\n\nIf yes, include: `Generated-by: GLM-5.2`\n\nASF guidance: https://www.apache.org/legal/generative-tooling.html\n\nCo-authored-by: diliulou \u003cwanglei05@kuaishou.com\u003e"
    },
    {
      "commit": "c1e5943327482fe7190febfbfba78cf9d23bce28",
      "tree": "84a43f0b6268def34d3c743871562cb5bcc86036",
      "parents": [
        "858dc6aef2fb72bc0aa19ab092ea0b1eafc7f64f"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "yangweiqing001@gmail.com",
        "time": "Mon Jul 27 05:48:46 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 20:48:46 2026 +0800"
      },
      "message": "[AURON #2329] Test and document multi-consumer source-Calc fan-out safety (#2415)\n\n# Which issue does this PR close?\n\nCloses #2329\n\n# Rationale for this change\n\n#1865 moved Calc-source fusion to a graph-level pass\n(`AuronOperatorFusionProcessor`) that counts each source\u0027s consumers and\nfuses only sole-consumer sources. A source feeding more than one Calc\n(for example `UNION ALL` over one table under Flink\u0027s default source\nreuse) is declined at the sole-consumer gate, and each Calc runs as a\nstandalone native operator over the shared source stream.\n\nThat multi-consumer path is correct but was under-tested and\nunder-documented. The existing shared-source test only covered the\ndefault config, where object reuse is effectively off so Flink\ndeep-copies each row to heap per consumer. The interesting case is\nobject reuse ON: Flink then hands the same `AuronColumnarRowData`\nreference to both Calc consumers with no defensive copy in between,\nwhich is exactly where a fan-out aliasing or use-after-free bug would\nsurface. Nothing pinned that. And the reason a multi-consumer source\ndeclines fusion was only a one-line comment.\n\n# What changes are included in this PR?\n\nA new end-to-end test\n`testSharedSourceUnionAllFanOutSafeWithObjectReuse` in\n`AuronKafkaSourceMergeITCase`: the same shared-source `UNION ALL` as the\nexisting test, but with object reuse enabled. It asserts the row set\nstays correct and both Calcs remain standalone operators (the\nmulti-consumer source is not fused).\n\nAn expanded doc-comment at the sole-consumer gate in\n`AuronOperatorFusionProcessor` explaining why a multi-consumer source is\nnot fused (the native source runtime is single-plan and single-output,\nso N per-consumer plans cannot share one source) and why declining is\nsafe (each consumer runs a standalone native Calc that copies every\ncolumn out of the shared columnar view).\n\nNo production logic changes.\n\n# Are there any user-facing changes?\n\nNo.\n\n# How was this patch tested?\n\n`./build/mvn test -Pspark-3.5 -Pscala-2.12 -Pflink-1.18 -pl\nauron-flink-extension/auron-flink-planner -am\n-Dtest\u003dAuronKafkaSourceMergeITCase` with the native library built. All 4\ntests pass.\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [x] Yes （Claude Code (Opus 4.8)）\n- [ ] No"
    },
    {
      "commit": "858dc6aef2fb72bc0aa19ab092ea0b1eafc7f64f",
      "tree": "3cc8d70e456e30bfeccdd4fd1df4e43a3a3e024d",
      "parents": [
        "fe9a2ff9a15bf951427a9dcdeb8bb55644ce476e"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Sun Jul 26 13:18:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 26 13:18:26 2026 +0800"
      },
      "message": "[AURON #2407] [BUILD] Fix the invalid Spark 4.1 Docker build example. (#2408)\n\n### Which issue does this PR close?\n\nCloses #2407\n\n### Rationale for this change\n\nThe Docker build example generated by `auron-build.sh --help` used Spark\n4.1 together with the `centos7` image.\n\nThe `centos7` image only provides JDK 8, while Spark 4.x requires JDK 17\nor later. The example also enabled Iceberg and Hudi for Spark versions\nwith which those integrations are not compatible.\n\nAs a result, users following the documented example encountered Java\nversion or integration compatibility errors before completing the build.\n\n### What changes are included in this PR?\n\n- Replace the single Docker build example with explicit examples for\n  Spark 3.5, Spark 4.0, and Spark 4.1.\n- Use the `rockylinux8` image for these examples because it supports the\n  JDK selection required by Spark 4.x.\n- Use Scala 2.12 for Spark 3.5 and Scala 2.13 for Spark 4.x.\n- Include only compatible third-party integrations in each example:\n  - Spark 3.5 includes Iceberg 1.10.1 and Hudi 0.15.\n  - Spark 4.0 includes Iceberg 1.10.1 but excludes Hudi.\n  - Spark 4.1 excludes both Iceberg and Hudi.\n- Add a build compatibility matrix to `CONTRIBUTING.md`.\n- Document the Spark, Scala, JDK, Docker image, Flink, Celeborn,\n  Uniffle, Paimon, Iceberg, and Hudi combinations.\n- Update the existing Docker build example in `CONTRIBUTING.md` to use\n  `rockylinux8`.\n- Document that the compatibility matrix and Shell help examples should\n  be updated together.\n\n### Are there any user-facing changes?\n\nYes.\n\nThe help output now provides separate Docker build examples for Spark\n3.5, Spark 4.0, and Spark 4.1. Each example uses an appropriate Scala,\nJDK, Docker image, and third-party integration combination.\n\nContributors can also consult the compatibility matrix in\n`CONTRIBUTING.md` before selecting build arguments.\n\n### How was this patch tested?\n\n\u003e ./auron-build.sh --help\n\n```\nUsage: ./auron-build.sh [OPTIONS] \u003cmaven build options\u003e\nBuild Auron project with specified Maven profiles\n\nOptions:\n  --pre                    Activate pre-release profile\n  --release                Activate release profile\n  --clean \u003ctrue|false\u003e     Clean before build (default: true)\n  --skiptests \u003ctrue|false\u003e Skip unit tests (default: true)\n  --sparktests \u003ctrue|false\u003e Run spark tests (default: false)\n  --docker \u003ctrue|false\u003e    Build in Docker environment (default: false)\n  --threads \u003cN|NC\u003e         Maven build threads (e.g. 1, 4, 1C). Default: local unset, docker 8\n  --image \u003cNAME\u003e           Docker image to use (e.g. centos7,ubuntu24,rockylinux8,debian11,azurelinux3, default: centos7)\n  --sparkver \u003cVERSION\u003e     Specify Spark version (e.g. 3.0,3.1,3.2,3.3,3.4,3.5,4.0,4.1)\n  --flinkver \u003cVERSION\u003e     Specify Flink version (e.g. 1.18)\n  --scalaver \u003cVERSION\u003e     Specify Scala version (e.g. 2.12,2.13)\n  --celeborn \u003cVERSION\u003e     Specify Celeborn version (e.g. 0.5,0.6)\n  --uniffle \u003cVERSION\u003e      Specify Uniffle version (e.g. 0.10)\n  --paimon \u003cVERSION\u003e       Specify Paimon version (e.g. 1.2)\n  --iceberg \u003cVERSION\u003e      Specify Iceberg version (e.g. 1.10.1)\n  --hudi \u003cVERSION\u003e         Specify Hudi version (e.g. 0.15)\n  -h, --help               Show this help message\n\nExamples:\n  ./auron-build.sh --pre --sparkver 4.1 --scalaver 2.13 -DskipBuildNative\n  # Spark 3.5 with all supported third-party integrations\n  ./auron-build.sh --docker true --image rockylinux8 --clean true --skiptests true --release --sparkver 3.5 --scalaver 2.12 --flinkver 1.18 --celeborn 0.6 --uniffle 0.10 --paimon 1.2 --iceberg 1.10.1 --hudi 0.15\n  # Spark 4.0 (Hudi is not supported)\n  ./auron-build.sh --docker true --image rockylinux8 --clean true --skiptests true --release --sparkver 4.0 --scalaver 2.13 --flinkver 1.18 --celeborn 0.6 --uniffle 0.10 --paimon 1.2 --iceberg 1.10.1\n  # Spark 4.1 (Iceberg and Hudi are not supported)\n  ./auron-build.sh --docker true --image rockylinux8 --clean true --skiptests true --release --sparkver 4.1 --scalaver 2.13 --flinkver 1.18 --celeborn 0.6 --uniffle 0.10 --paimon 1.2\n```\n\n### Was this patch authored or co-authored using generative AI tooling?\n- [ ] Yes\n- [x] No\n\nIf yes, include: `Generated-by: \u003ctool name and version\u003e`\n\nASF guidance: https://www.apache.org/legal/generative-tooling.html\n\nSigned-off-by: slfan1989 \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "fe9a2ff9a15bf951427a9dcdeb8bb55644ce476e",
      "tree": "6c60336d31867753ff57a663a6c0e827bac5ca01",
      "parents": [
        "14a9c6d0f04298d436e7836e36efc0b13ee3ce75"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Sun Jul 26 13:06:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 26 13:06:28 2026 +0800"
      },
      "message": "[AURON #2425] Support Iceberg STARTS_WITH pruning in native scan (#2426)\n\n**Which issue does this PR close?**\nCloses #2425 \n\n**Rationale for this change**\nAuron Iceberg native scan already collects Iceberg residual filters and\nconverts supported filters into native scan pruning predicates.\n\nIceberg can produce `STARTS_WITH` filters for prefix string predicates,\nsuch as `LIKE \u0027a%\u0027`, but Auron currently does not convert this Iceberg\noperation. As a result, the query can still use a native post-scan\nfilter, but the starts-with predicate is not used for native scan\npruning.\n\n**What changes are included in this PR?**\nAdds Iceberg `STARTS_WITH` conversion for string columns in\n`IcebergScanSupport`.\nReuses the existing Spark `StartsWith` native pruning conversion.\nKeeps other string and binary pruning behavior unchanged.\nAdds an Iceberg integration test for prefix LIKE pruning.\n\n**Are there any user-facing changes?**\nNo user-facing API changes. More Iceberg prefix string filters can now\nbe passed into native scan pruning.\n\n**How was this patch tested?**\nUT.\n\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e"
    },
    {
      "commit": "14a9c6d0f04298d436e7836e36efc0b13ee3ce75",
      "tree": "fea8350993eebd745fd82e3ffae1d5fda163b25d",
      "parents": [
        "b448d5eb7d96da0434478188ffa5ab18b459ce00"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Sun Jul 26 13:05:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 26 13:05:33 2026 +0800"
      },
      "message": "[AURON #2427] Report fallback reason for unsupported Iceberg scan data types (#2428)\n\n# Which issue does this PR close?\n\nCloses #2427\n\n# Rationale for this change\nAuron Iceberg native scan can fall back when the Iceberg scan schema\ncontains data types that are not supported by native scan conversion.\n\nBefore this change, unsupported metadata columns already had a clear\nfallback reason, but unsupported data columns did not. This made it\nharder to diagnose why an Iceberg scan stayed on Spark execution.\n\n\n# What changes are included in this PR?\nAdds an Iceberg fallback reason for unsupported scan schema data types.\nReports unsupported field names and Spark SQL types in the never-convert\nreason.\nExtends the existing unsupported decimal Iceberg scan test to check the\nfallback reason.\n\n\n# Are there any user-facing changes?\nNo API changes. Users may see a clearer fallback reason when an Iceberg\nnative scan is skipped because of unsupported data types.\n\n\n\n# How was this patch tested?\nUT.\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [ ] Yes\n- [x] No\n\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e"
    },
    {
      "commit": "b448d5eb7d96da0434478188ffa5ab18b459ce00",
      "tree": "16bfd7242171035be38b44f64797f472a219620e",
      "parents": [
        "003f0d955c07cd42168bf2112a7e684b0a1b68e7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 15:46:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 15:46:45 2026 +0800"
      },
      "message": "Bump base64 from 0.22.1 to 0.23.0 (#2420)"
    },
    {
      "commit": "003f0d955c07cd42168bf2112a7e684b0a1b68e7",
      "tree": "d7bc03e5afbb475d30fc864d7ec3f3998d70a4a1",
      "parents": [
        "a1e48f3fa9b86c406d643944f2ca3fb16ae2721b"
      ],
      "author": {
        "name": "Rob Reeves",
        "email": "robertpreeves@gmail.com",
        "time": "Thu Jul 23 14:27:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 14:27:57 2026 -0700"
      },
      "message": "[AURON #1891] Implement randn() function (#1938)\n\n\u003c!--\n- Start the PR title with the related issue ID, e.g. \u0027[AURON #XXXX]\nShort summary...\u0027.\n--\u003e\n# Which issue does this PR close?\n\nCloses #1891\n\n# Rationale for this change\n\nThis improves function coverage in Auron by creating a native randn\nimplementation.\n\n# What changes are included in this PR?\n\nAdds a native randn implementation.\n\n# Are there any user-facing changes?\n\nYes, it adds the randn function.\n\n# How was this patch tested?\nAdded unit tests and manually tested in spark-shell.\n\n```scala\nimport org.apache.spark.sql.functions.randn\n\nval df \u003d spark.range(5)\nval outputPath \u003d \"/tmp/spark_range_output.parquet\"\ndf.write.mode(\"overwrite\").parquet(outputPath)\n\nval readDf \u003d spark.read.parquet(outputPath)\nval resultDf \u003d readDf.withColumn(\"random_normal\", randn(18))\nresultDf.collect\n```\nOutput:\n```\n26/01/30 15:41:22 WARN NativeHelper: memory total: 1408.0 MiB, onheap: 1024.0 MiB, offheap: 384.0 MiB\n26/01/30 15:41:24 WARN AuronCallNativeWrapper: Start executing native plan\n26/01/30 15:41:24 WARN AuronCallNativeWrapper: Start executing native plan\n26/01/30 15:41:24 WARN AuronCallNativeWrapper: Start executing native plan\n26/01/30 15:41:24 WARN AuronCallNativeWrapper: Start executing native plan\n26/01/30 15:41:24 WARN AuronCallNativeWrapper: Start executing native plan\n26/01/30 15:41:24 WARN AuronCallNativeWrapper: Start executing native plan\n------ initializing auron native environment ------\ninitializing logging with level: info\n2026-01-30 15:41:24.368 (+0.000s) [INFO] [auron::exec:73] (stage: 0, partition: 0, tid: 0) - initializing JNI bridge\n2026-01-30 15:41:24.369 (+0.001s) [INFO] [auron_jni_bridge::jni_bridge:473] (stage: 0, partition: 0, tid: 0) - Initializing JavaClasses...\n2026-01-30 15:41:24.375 (+0.007s) [INFO] [auron_jni_bridge::jni_bridge:529] (stage: 0, partition: 0, tid: 0) - Initializing JavaClasses finished\n2026-01-30 15:41:24.375 (+0.007s) [INFO] [auron::exec:77] (stage: 0, partition: 0, tid: 0) - initializing datafusion session\n2026-01-30 15:41:24.375 (+0.007s) [INFO] [auron_memmgr:48] (stage: 0, partition: 0, tid: 0) - mem manager initialized with total memory: 230.4 MiB\n2026-01-30 15:41:24.385 (+0.017s) [INFO] [auron::rt:146] (stage: 2, partition: 1, tid: 12) - start executing plan:\nProjectExec [#3@0 AS #3, Randn(seed\u003d18, partition\u003d1) AS #5], schema\u003d[#3:Int64;N, #5:Float64]\n  RenameColumnsExec: [\"#3\"], schema\u003d[#3:Int64;N]\n    ParquetExec: limit\u003dNone, file_group\u003d[FileGroup { files: [], statistics: None }, FileGroup { files: [PartitionedFile { object_meta: ObjectMeta { location: Path { raw: \"ZmlsZTovLy90bXAvc3BhcmtfcmFuZ2Vfb3V0cHV0LnBhcnF1ZXQvcGFydC0wMDAwMS04ZTkwNmRiYS0zZDg3LTRkZWMtYjM0NC1hYjdiZWUyODEwZWQtYzAwMC5zbmFwcHkucGFycXVldA\" }, last_modified: 1970-01-01T00:00:00Z, size: 472, e_tag: None, version: None }, partition_values: [], range: Some(FileRange { start: 0, end: 472 }), statistics: None, extensions: None, metadata_size_hint: None }], statistics: Some(Statistics { num_rows: Exact(0), total_byte_size: Exact(0), column_statistics: [ColumnStatistics { null_count: Absent, max_value: Absent, min_value: Absent, sum_value: Absent, distinct_count: Absent }] }) }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }], predicate\u003dSome(Literal { value: Boolean(true), field: Field { name: \"lit\", data_type: Boolean, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }), schema\u003d[id:Int64;N]\n\n2026-01-30 15:41:24.385 (+0.017s) [INFO] [auron::rt:146] (stage: 2, partition: 5, tid: 16) - start executing plan:\nProjectExec [#3@0 AS #3, Randn(seed\u003d18, partition\u003d5) AS #5], schema\u003d[#3:Int64;N, #5:Float64]\n  RenameColumnsExec: [\"#3\"], schema\u003d[#3:Int64;N]\n    ParquetExec: limit\u003dNone, file_group\u003d[FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [PartitionedFile { object_meta: ObjectMeta { location: Path { raw: \"ZmlsZTovLy90bXAvc3BhcmtfcmFuZ2Vfb3V0cHV0LnBhcnF1ZXQvcGFydC0wMDAwMC04ZTkwNmRiYS0zZDg3LTRkZWMtYjM0NC1hYjdiZWUyODEwZWQtYzAwMC5zbmFwcHkucGFycXVldA\" }, last_modified: 1970-01-01T00:00:00Z, size: 297, e_tag: None, version: None }, partition_values: [], range: Some(FileRange { start: 0, end: 297 }), statistics: None, extensions: None, metadata_size_hint: None }], statistics: Some(Statistics { num_rows: Exact(0), total_byte_size: Exact(0), column_statistics: [ColumnStatistics { null_count: Absent, max_value: Absent, min_value: Absent, sum_value: Absent, distinct_count: Absent }] }) }], predicate\u003dSome(Literal { value: Boolean(true), field: Field { name: \"lit\", data_type: Boolean, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }), schema\u003d[id:Int64;N]\n\n2026-01-30 15:41:24.385 (+0.017s) [INFO] [auron::rt:146] (stage: 2, partition: 2, tid: 13) - start executing plan:\nProjectExec [#3@0 AS #3, Randn(seed\u003d18, partition\u003d2) AS #5], schema\u003d[#3:Int64;N, #5:Float64]\n  RenameColumnsExec: [\"#3\"], schema\u003d[#3:Int64;N]\n    ParquetExec: limit\u003dNone, file_group\u003d[FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [PartitionedFile { object_meta: ObjectMeta { location: Path { raw: \"ZmlsZTovLy90bXAvc3BhcmtfcmFuZ2Vfb3V0cHV0LnBhcnF1ZXQvcGFydC0wMDAwMy04ZTkwNmRiYS0zZDg3LTRkZWMtYjM0NC1hYjdiZWUyODEwZWQtYzAwMC5zbmFwcHkucGFycXVldA\" }, last_modified: 1970-01-01T00:00:00Z, size: 472, e_tag: None, version: None }, partition_values: [], range: Some(FileRange { start: 0, end: 472 }), statistics: None, extensions: None, metadata_size_hint: None }], statistics: Some(Statistics { num_rows: Exact(0), total_byte_size: Exact(0), column_statistics: [ColumnStatistics { null_count: Absent, max_value: Absent, min_value: Absent, sum_value: Absent, distinct_count: Absent }] }) }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }], predicate\u003dSome(Literal { value: Boolean(true), field: Field { name: \"lit\", data_type: Boolean, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }), schema\u003d[id:Int64;N]\n\n2026-01-30 15:41:24.385 (+0.017s) [INFO] [auron::rt:146] (stage: 2, partition: 4, tid: 15) - start executing plan:\nProjectExec [#3@0 AS #3, Randn(seed\u003d18, partition\u003d4) AS #5], schema\u003d[#3:Int64;N, #5:Float64]\n  RenameColumnsExec: [\"#3\"], schema\u003d[#3:Int64;N]\n    ParquetExec: limit\u003dNone, file_group\u003d[FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [PartitionedFile { object_meta: ObjectMeta { location: Path { raw: \"ZmlsZTovLy90bXAvc3BhcmtfcmFuZ2Vfb3V0cHV0LnBhcnF1ZXQvcGFydC0wMDAwNS04ZTkwNmRiYS0zZDg3LTRkZWMtYjM0NC1hYjdiZWUyODEwZWQtYzAwMC5zbmFwcHkucGFycXVldA\" }, last_modified: 1970-01-01T00:00:00Z, size: 471, e_tag: None, version: None }, partition_values: [], range: Some(FileRange { start: 0, end: 471 }), statistics: None, extensions: None, metadata_size_hint: None }], statistics: Some(Statistics { num_rows: Exact(0), total_byte_size: Exact(0), column_statistics: [ColumnStatistics { null_count: Absent, max_value: Absent, min_value: Absent, sum_value: Absent, distinct_count: Absent }] }) }, FileGroup { files: [], statistics: None }], predicate\u003dSome(Literal { value: Boolean(true), field: Field { name: \"lit\", data_type: Boolean, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }), schema\u003d[id:Int64;N]\n\n2026-01-30 15:41:24.385 (+0.017s) [INFO] [auron::rt:146] (stage: 2, partition: 3, tid: 14) - start executing plan:\nProjectExec [#3@0 AS #3, Randn(seed\u003d18, partition\u003d3) AS #5], schema\u003d[#3:Int64;N, #5:Float64]\n  RenameColumnsExec: [\"#3\"], schema\u003d[#3:Int64;N]\n    ParquetExec: limit\u003dNone, file_group\u003d[FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [PartitionedFile { object_meta: ObjectMeta { location: Path { raw: \"ZmlsZTovLy90bXAvc3BhcmtfcmFuZ2Vfb3V0cHV0LnBhcnF1ZXQvcGFydC0wMDAwOS04ZTkwNmRiYS0zZDg3LTRkZWMtYjM0NC1hYjdiZWUyODEwZWQtYzAwMC5zbmFwcHkucGFycXVldA\" }, last_modified: 1970-01-01T00:00:00Z, size: 472, e_tag: None, version: None }, partition_values: [], range: Some(FileRange { start: 0, end: 472 }), statistics: None, extensions: None, metadata_size_hint: None }], statistics: Some(Statistics { num_rows: Exact(0), total_byte_size: Exact(0), column_statistics: [ColumnStatistics { null_count: Absent, max_value: Absent, min_value: Absent, sum_value: Absent, distinct_count: Absent }] }) }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }], predicate\u003dSome(Literal { value: Boolean(true), field: Field { name: \"lit\", data_type: Boolean, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }), schema\u003d[id:Int64;N]\n\n2026-01-30 15:41:24.385 (+0.017s) [INFO] [auron::rt:146] (stage: 2, partition: 0, tid: 11) - start executing plan:\nProjectExec [#3@0 AS #3, Randn(seed\u003d18, partition\u003d0) AS #5], schema\u003d[#3:Int64;N, #5:Float64]\n  RenameColumnsExec: [\"#3\"], schema\u003d[#3:Int64;N]\n    ParquetExec: limit\u003dNone, file_group\u003d[FileGroup { files: [PartitionedFile { object_meta: ObjectMeta { location: Path { raw: \"ZmlsZTovLy90bXAvc3BhcmtfcmFuZ2Vfb3V0cHV0LnBhcnF1ZXQvcGFydC0wMDAwNy04ZTkwNmRiYS0zZDg3LTRkZWMtYjM0NC1hYjdiZWUyODEwZWQtYzAwMC5zbmFwcHkucGFycXVldA\" }, last_modified: 1970-01-01T00:00:00Z, size: 472, e_tag: None, version: None }, partition_values: [], range: Some(FileRange { start: 0, end: 472 }), statistics: None, extensions: None, metadata_size_hint: None }], statistics: Some(Statistics { num_rows: Exact(0), total_byte_size: Exact(0), column_statistics: [ColumnStatistics { null_count: Absent, max_value: Absent, min_value: Absent, sum_value: Absent, distinct_count: Absent }] }) }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }, FileGroup { files: [], statistics: None }], predicate\u003dSome(Literal { value: Boolean(true), field: Field { name: \"lit\", data_type: Boolean, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} } }), schema\u003d[id:Int64;N]\n\n2026-01-30 15:41:24.394 (+0.026s) [INFO] [datafusion_datasource_parquet::opener:421] (stage: 2, partition: 4, tid: 15) - executing parquet scan with adaptive batch size: 10000\n2026-01-30 15:41:24.394 (+0.026s) [INFO] [datafusion_datasource_parquet::opener:421] (stage: 2, partition: 0, tid: 11) - executing parquet scan with adaptive batch size: 10000\n2026-01-30 15:41:24.394 (+0.026s) [INFO] [datafusion_datasource_parquet::opener:421] (stage: 2, partition: 3, tid: 14) - executing parquet scan with adaptive batch size: 10000\n2026-01-30 15:41:24.394 (+0.026s) [INFO] [datafusion_datasource_parquet::opener:421] (stage: 2, partition: 1, tid: 12) - executing parquet scan with adaptive batch size: 10000\n2026-01-30 15:41:24.394 (+0.026s) [INFO] [datafusion_datasource_parquet::opener:421] (stage: 2, partition: 2, tid: 13) - executing parquet scan with adaptive batch size: 10000\n2026-01-30 15:41:24.394 (+0.026s) [INFO] [datafusion_datasource_parquet::opener:421] (stage: 2, partition: 5, tid: 16) - executing parquet scan with adaptive batch size: 1\n2026-01-30 15:41:24.488 (+0.120s) [INFO] [auron::rt:183] (stage: 2, partition: 5, tid: 16) - task finished\n2026-01-30 15:41:24.488 (+0.120s) [INFO] [auron::rt:183] (stage: 2, partition: 0, tid: 11) - task finished\n2026-01-30 15:41:24.488 (+0.120s) [INFO] [auron::rt:183] (stage: 2, partition: 4, tid: 15) - task finished\n2026-01-30 15:41:24.488 (+0.120s) [INFO] [auron::rt:183] (stage: 2, partition: 3, tid: 14) - task finished\n2026-01-30 15:41:24.488 (+0.120s) [INFO] [auron::rt:266] (stage: 0, partition: 0, tid: 0) - (partition\u003d5) native execution finalizing\n2026-01-30 15:41:24.488 (+0.120s) [INFO] [auron::rt:183] (stage: 2, partition: 2, tid: 13) - task finished\n2026-01-30 15:41:24.488 (+0.120s) [INFO] [auron::rt:183] (stage: 2, partition: 1, tid: 12) - task finished\n2026-01-30 15:41:24.488 (+0.120s) [INFO] [auron::rt:274] (stage: 0, partition: 0, tid: 0) - (partition\u003d5) native execution finalized\n2026-01-30 15:41:24.511 (+0.143s) [INFO] [auron::rt:266] (stage: 0, partition: 0, tid: 0) - (partition\u003d3) native execution finalizing\n2026-01-30 15:41:24.511 (+0.143s) [INFO] [auron::rt:266] (stage: 0, partition: 0, tid: 0) - (partition\u003d4) native execution finalizing\n2026-01-30 15:41:24.511 (+0.143s) [INFO] [auron::rt:266] (stage: 0, partition: 0, tid: 0) - (partition\u003d0) native execution finalizing\n2026-01-30 15:41:24.511 (+0.143s) [INFO] [auron::rt:266] (stage: 0, partition: 0, tid: 0) - (partition\u003d2) native execution finalizing\n2026-01-30 15:41:24.511 (+0.143s) [INFO] [auron::rt:266] (stage: 0, partition: 0, tid: 0) - (partition\u003d1) native execution finalizing\n2026-01-30 15:41:24.512 (+0.144s) [INFO] [auron::rt:274] (stage: 0, partition: 0, tid: 0) - (partition\u003d0) native execution finalized\n2026-01-30 15:41:24.512 (+0.144s) [INFO] [auron::rt:274] (stage: 0, partition: 0, tid: 0) - (partition\u003d4) native execution finalized\n2026-01-30 15:41:24.512 (+0.144s) [INFO] [auron::rt:274] (stage: 0, partition: 0, tid: 0) - (partition\u003d1) native execution finalized\n2026-01-30 15:41:24.512 (+0.144s) [INFO] [auron::rt:274] (stage: 0, partition: 0, tid: 0) - (partition\u003d2) native execution finalized\n2026-01-30 15:41:24.512 (+0.144s) [INFO] [auron::rt:274] (stage: 0, partition: 0, tid: 0) - (partition\u003d3) native execution finalized\nimport org.apache.spark.sql.functions.randn\ndf: org.apache.spark.sql.Dataset[Long] \u003d [id: bigint]\noutputPath: String \u003d /tmp/spark_range_output.parquet\nreadDf: org.apache.spark.sql.DataFrame \u003d [id: bigint]\nresultDf: org.apache.spark.sql.DataFrame \u003d [id: bigint, random_normal: double]\nres0: Array[org.apache.spark.sql.Row] \u003d Array([3,1.4607292672705405], [0,-0.3268302897860617], [1,-0.09087682847007866], [4,-1.2271197538792842], [2,-0.546398027932835])\n```\n\n---------\n\nCo-authored-by: Claude Opus 4.5 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "a1e48f3fa9b86c406d643944f2ca3fb16ae2721b",
      "tree": "78748f363a4388417d47ba7b6c9a5c8ce10a5a9c",
      "parents": [
        "58d3404110d1a113ff2be853a45642385e60650e"
      ],
      "author": {
        "name": "cxzl25",
        "email": "3898450+cxzl25@users.noreply.github.com",
        "time": "Thu Jul 23 10:56:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 10:56:20 2026 +0800"
      },
      "message": "[AURON #2417] log rss write size metrics (#2418)\n\n# Which issue does this PR close?\n\nCloses #2417\n\n# Rationale for this change\n\nNow when shuffle is written, there is a shuffle size after log output\ncompression, but there is no output compression size when using rss.\n\n\nhttps://github.com/apache/auron/blob/2889b563139e6495495b61d0902e3f93f0ebe8bb/native-engine/datafusion-ext-plans/src/shuffle/buffered_data.rs#L156\n\n# What changes are included in this PR?\nOutput the compressed size when writing RSS.\n\n# Are there any user-facing changes?\nNo\n\n# How was this patch tested?\nProduction environment verification\n\n```\n2026-07-22 20:10:07.090 (+80.707s) [INFO] [datafusion_ext_plans::shuffle::buffered_data:196] (stage: 0, partition: 1694, tid: 0) - all buffered data drained to rss, pushed_compressed\u003d74.2 MiB, uncompressed_mem\u003d528.1 MiB\n2026-07-22 20:10:07.110 (+80.727s) [INFO] [datafusion_ext_plans::shuffle::buffered_data:196] (stage: 0, partition: 385, tid: 2) - all buffered data drained to rss, pushed_compressed\u003d81.3 MiB, uncompressed_mem\u003d531.6 MiB\n2026-07-22 20:10:09.505 (+83.122s) [INFO] [datafusion_ext_plans::shuffle::buffered_data:196] (stage: 0, partition: 3824, tid: 1) - all buffered data drained to rss, pushed_compressed\u003d80.0 MiB, uncompressed_mem\u003d528.4 MiB\n```\n\n\n# Was this patch authored or co-authored using generative AI tooling?\n- [ ] Yes\n- [ ] No"
    },
    {
      "commit": "58d3404110d1a113ff2be853a45642385e60650e",
      "tree": "d502be9f1c79398855bb0e43bf541ec519170a5d",
      "parents": [
        "2889b563139e6495495b61d0902e3f93f0ebe8bb"
      ],
      "author": {
        "name": "zhangmang",
        "email": "zhangmang1@163.com",
        "time": "Wed Jul 22 21:50:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 21:50:38 2026 +0800"
      },
      "message": "[AURON #2320] Fix PB deserialization bug \u0026 improve PB parsing performance (#2339)\n\n# Which issue does this PR close?\nCloses #2320 \n# Rationale for this change\n- Boolean type was not given a default value, causing incorrect data\nresults.\n- Complex nested PB structures can encounter parsing errors.\n# What changes are included in this PR?\n- Fix boolean type was not given a default value, causing incorrect data\nresults.\n- FIx complex nested PB structures can encounter parsing errors.\n- improve PB parsing performance\n# Are there any user-facing changes?\n- No\n# How was this patch tested?\n- No"
    },
    {
      "commit": "2889b563139e6495495b61d0902e3f93f0ebe8bb",
      "tree": "7f07a99a2d9c2b82283af34a69e5fae52e6ec80a",
      "parents": [
        "f419ad5cf80993dcf3fc64e6301f64230ca436ff"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "yangweiqing001@gmail.com",
        "time": "Tue Jul 21 20:27:21 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 11:27:21 2026 +0800"
      },
      "message": "[AURON #2413] fix(ci): adapt labeler.yml to actions/labeler v7 (#2414)\n\n# Which issue does this PR close?\n\nCloses #2413.\n\n# Rationale for this change\n\n#2410 bumped `actions/labeler` from v6 to v7, which brought `js-yaml`\n`^5.1.0`. js-yaml 5.x enforces stricter indentation on multi-line flow\nsequences and rejects the current `.github/labeler.yml` with\n`YAMLException: deficient indentation (27:7)`, so the `triage` check now\nfails on PRs that run after that bump.\n\n# What changes are included in this PR?\n\nRewrite the glob lists in `.github/labeler.yml` from multi-line flow\nsequences (`[ ... ]`) to block sequences, for all 17 label entries. The\nlabel names and glob patterns are unchanged; only the YAML list style\nchanges.\n\nVerified with `js-yaml` 5.2.1 (the version labeler v7 resolves): the\ncurrent file throws `deficient indentation (27:7)`, and the updated file\nparses cleanly into the same 17 labels and 36 glob patterns.\n\n# Are there any user-facing changes?\n\nNo. This is a CI configuration fix.\n\n# How was this patch tested?\n\nLoaded both the old and new `.github/labeler.yml` with `js-yaml` 5.2.1.\nThe old file reproduces the CI error; the new file parses without error\nand yields identical label-to-glob mappings.\n\n# Note\n\nThe `triage` check on this PR is expected to fail until this is merged.\nThe labeler workflow runs on `pull_request_target` and reads\n`.github/labeler.yml` from the base branch (master), not from the PR, so\nit still sees the current file until the fix lands on master."
    },
    {
      "commit": "f419ad5cf80993dcf3fc64e6301f64230ca436ff",
      "tree": "41284ca8a290c111b3bfc61d6a33b8fb001c039b",
      "parents": [
        "7b204a54f935712c4d697d7c560a1e5c520e2a92"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jul 21 14:38:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 14:38:19 2026 +0800"
      },
      "message": "Bump tokio from 1.53.0 to 1.53.1 (#2412)"
    },
    {
      "commit": "7b204a54f935712c4d697d7c560a1e5c520e2a92",
      "tree": "4cc08d077039d3acfac175c01e07722c9a316aba",
      "parents": [
        "b30c2307909e2d75f7f011c3727ff4257ef39f72"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jul 21 14:38:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 14:38:10 2026 +0800"
      },
      "message": "Bump futures from 0.3.32 to 0.3.33 (#2411)"
    },
    {
      "commit": "b30c2307909e2d75f7f011c3727ff4257ef39f72",
      "tree": "138fe6da95edc65b6a60d1317fd6697500289768",
      "parents": [
        "01138f7b5116dc57bc50ca8a5d9ea2644483f341"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jul 21 14:37:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 14:37:27 2026 +0800"
      },
      "message": "Bump actions/labeler from 6 to 7 (#2410)"
    },
    {
      "commit": "01138f7b5116dc57bc50ca8a5d9ea2644483f341",
      "tree": "cb140366db99a361670504d83497cad9a9d9a11c",
      "parents": [
        "a4ea0d991ba982092f67f535288f41fb37b59e37"
      ],
      "author": {
        "name": "He Zhao",
        "email": "luoyedeyi@163.com",
        "time": "Tue Jul 21 11:23:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 11:23:53 2026 +0800"
      },
      "message": "[AURON #2372] Fix Docker build on ARM hosts (#2371)\n\n# Which issue does this PR close?\n\nCloses https://github.com/apache/auron/issues/2372\n\n# Rationale for this change\nDocker build mode needs a way to specify the Docker platform from\n`auron-build.sh`, especially on ARM hosts where release builds may need\nto run as `linux/amd64`.\n\n# What changes are included in this PR?\nas title\n# Are there any user-facing changes?\nno\n# How was this patch tested?\nrebuild auron with docker mode"
    },
    {
      "commit": "a4ea0d991ba982092f67f535288f41fb37b59e37",
      "tree": "fb6875dbca812476cb32b4a875e515c0f09df096",
      "parents": [
        "d749ef962be92e0d1e135106742dabe42e477a89"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 23:34:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 23:34:06 2026 +0800"
      },
      "message": "Bump tokio from 1.52.3 to 1.53.0 (#2402)\n\nBumps [tokio](https://github.com/tokio-rs/tokio) from 1.52.3 to 1.53.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/releases\"\u003etokio\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eTokio v1.53.0\u003c/h2\u003e\n\u003ch1\u003e1.53.0 (July 17th, 2026)\u003c/h1\u003e\n\u003ch3\u003eAdded\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efs: implement \u003ccode\u003eFrom\u0026lt;OwnedFd\u0026gt;\u003c/code\u003e and\n\u003ccode\u003eFrom\u0026lt;OwnedHandle\u0026gt;\u003c/code\u003e for \u003ccode\u003eFile\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8266\"\u003e#8266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003emetrics: add task schedule latency metric (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7986\"\u003e#7986\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003enet: add \u003ccode\u003eSocketAddr\u003c/code\u003e methods to Unix sockets (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8144\"\u003e#8144\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eio: add \u003ccode\u003e#[inline]\u003c/code\u003e to IO trait impls for in-memory types\n(\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8242\"\u003e#8242\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003enet: implement UCred::pid on FreeBSD (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8086\"\u003e#8086\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003enet: support Nuttx target os (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8259\"\u003e#8259\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esignal: refactor global variables on Windows (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8231\"\u003e#8231\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esync: \u003ccode\u003empsc::{Receiver,UnboundedReceiver}\u003c/code\u003e now drops\nwaker on drop, even if there are still senders (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8095\"\u003e#8095\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etaskdump: support taskdumps on s390x (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8192\"\u003e#8192\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etime: add \u003ccode\u003e#[track_caller]\u003c/code\u003e to \u003ccode\u003etimeout_at()\u003c/code\u003e\n(\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8077\"\u003e#8077\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etime: consolidate mutex locks on spurious poll (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8124\"\u003e#8124\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etime: defer waker clone on spurious poll (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8107\"\u003e#8107\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etime: move lazy-registration state into \u003ccode\u003eSleep\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8132\"\u003e#8132\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etracing: remove unnecessary span clone (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8126\"\u003e#8126\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eio: do not treat zero-length reads as EOF in \u003ccode\u003eChain\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8251\"\u003e#8251\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003enet: use getpeereid for QNX peer credentials (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8270\"\u003e#8270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eruntime: avoid illegal state in \u003ccode\u003eFastRand\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8078\"\u003e#8078\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esync: wake mpsc receiver when a queued \u003ccode\u003ereserve[_many]\u003c/code\u003e\nreturns permits (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8260\"\u003e#8260\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etaskdump: skip double wake on\n\u003ccode\u003eTrace::capture\u003c/code\u003e/\u003ccode\u003eTrace::trace_with\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8043\"\u003e#8043\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etime: avoid stack overflow in runtime constructor (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8093\"\u003e#8093\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etime (alt timer): ensure timers stay in the same runtime after\n\u003ccode\u003e.reset()\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8169\"\u003e#8169\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eIO uring (unstable)\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efs: use io-uring for \u003ccode\u003efs::try_exists\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8080\"\u003e#8080\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efs: use io-uring for renaming files (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/7800\"\u003e#7800\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003ert: flush io-uring CQE in case of CQE overflow (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8277\"\u003e#8277\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumented\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003edocs: clarify cancel safety wording (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8181\"\u003e#8181\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003efs: clarify \u003ccode\u003ecreate_dir_all\u003c/code\u003e succeeds if path exists (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8149\"\u003e#8149\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eio: add warning about stdout reordering with multiple handles (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8276\"\u003e#8276\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003enet: document pipe \u003ccode\u003etry_read*\u003c/code\u003e/\u003ccode\u003etry_write*\u003c/code\u003e\nreadiness behavior (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8032\"\u003e#8032\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eruntime: document interaction with fork() (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8202\"\u003e#8202\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esync: clarify broadcast lagging semantics (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8239\"\u003e#8239\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003esync: document memory ordering guarantees for Semaphore (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8119\"\u003e#8119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etask: explain why \u003ccode\u003eyield_now\u003c/code\u003e defers its waker (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8254\"\u003e#8254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003etime: add panic docs to \u003ccode\u003etimeout_at()\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8077\"\u003e#8077\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/be689a35f5ade5a39e507f79d3ec85cdab27806f\"\u003e\u003ccode\u003ebe689a3\u003c/code\u003e\u003c/a\u003e\nchore: prepare Tokio v1.53.0 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8294\"\u003e#8294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/50f76c71ec7203013f7f0cda59deaa9016e93939\"\u003e\u003ccode\u003e50f76c7\u003c/code\u003e\u003c/a\u003e\nchore: prepare tokio-macros v2.7.1 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8295\"\u003e#8295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/f61fccad3cd598cce743fc511a983364b77af92a\"\u003e\u003ccode\u003ef61fcca\u003c/code\u003e\u003c/a\u003e\nMerge \u0027tokio-1.52.4\u0027 into \u0027master\u0027 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8290\"\u003e#8290\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/efdba5fcf02c4b93d379114df136b994c3b21445\"\u003e\u003ccode\u003eefdba5f\u003c/code\u003e\u003c/a\u003e\nchore: prepare Tokio v1.52.4 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8289\"\u003e#8289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/b0ba02e75507518baed6718b0c37105e430f3a93\"\u003e\u003ccode\u003eb0ba02e\u003c/code\u003e\u003c/a\u003e\nMerge \u0027tokio-1.51.4\u0027 into \u0027tokio-1.52.x\u0027 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8288\"\u003e#8288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/7bcd2d343d997a658be5bc165520070c997fefbc\"\u003e\u003ccode\u003e7bcd2d3\u003c/code\u003e\u003c/a\u003e\ntaskdump: remove crate disambiguators from output (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8288\"\u003e#8288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/f84b209126a9b0f66dae1025e30e44d217205513\"\u003e\u003ccode\u003ef84b209\u003c/code\u003e\u003c/a\u003e\nchore: prepare Tokio v1.51.4 (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8286\"\u003e#8286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/eacb98e18901fcbe011bfceddbc31853f1bf0c27\"\u003e\u003ccode\u003eeacb98e\u003c/code\u003e\u003c/a\u003e\nruntime: don\u0027t skip the driver when \u003ccode\u003ebefore_park\u003c/code\u003e schedules\nwork (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8222\"\u003e#8222\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/5e16ee00faae5b81a58f70b734577b800e0b203b\"\u003e\u003ccode\u003e5e16ee0\u003c/code\u003e\u003c/a\u003e\ntask: avoid replacing the JoinQueue waker in \u003ccode\u003etry_join_next\u003c/code\u003e\n(\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8279\"\u003e#8279\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/commit/88212ab64afd2b2f87deeb073f9eef6aaaad3701\"\u003e\u003ccode\u003e88212ab\u003c/code\u003e\u003c/a\u003e\nsync: document memory ordering guarantees for Semaphore (\u003ca\nhref\u003d\"https://redirect.github.com/tokio-rs/tokio/issues/8119\"\u003e#8119\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/tokio-rs/tokio/compare/tokio-1.52.3...tokio-1.53.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dtokio\u0026package-manager\u003dcargo\u0026previous-version\u003d1.52.3\u0026new-version\u003d1.53.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "d749ef962be92e0d1e135106742dabe42e477a89",
      "tree": "5b326702a321b369743fe3b9b826f7077d8ab258",
      "parents": [
        "85fc4a308b4b49560373eed688ee18fd20dd0d37"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 20:04:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 20:04:22 2026 +0800"
      },
      "message": "Bump async-trait from 0.1.89 to 0.1.91 (#2400)\n\nBumps [async-trait](https://github.com/dtolnay/async-trait) from 0.1.89\nto 0.1.91.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/releases\"\u003easync-trait\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.1.90\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to syn 3\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/d049ee02a2d50b72e03d07f06311e23bf5b512a8\"\u003e\u003ccode\u003ed049ee0\u003c/code\u003e\u003c/a\u003e\nRelease 0.1.91\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/7a0961f275432c40cc5e7aa011362e4b50d763b1\"\u003e\u003ccode\u003e7a0961f\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/dtolnay/async-trait/issues/301\"\u003e#301\u003c/a\u003e\nfrom dtolnay/mutability\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/740f86f23d176229011f2389c8a206ef5ba547e7\"\u003e\u003ccode\u003e740f86f\u003c/code\u003e\u003c/a\u003e\nIgnore mut_mut pedantic clippy lint in test\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/4699cd320a8aaaf06a2a369cb9e1f2964b14b71c\"\u003e\u003ccode\u003e4699cd3\u003c/code\u003e\u003c/a\u003e\nFix mutability for by-reference receivers\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/6dd3573df95878d34fcfc0ab9c242aeab3140f82\"\u003e\u003ccode\u003e6dd3573\u003c/code\u003e\u003c/a\u003e\nAdd regression test for issue 300\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/2371797a3938808bd7e1f4f9abd0eed51bd99634\"\u003e\u003ccode\u003e2371797\u003c/code\u003e\u003c/a\u003e\nRelease 0.1.90\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/d03f075ecc2b9fcbf6757f3654a7974a518a144e\"\u003e\u003ccode\u003ed03f075\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/dtolnay/async-trait/issues/299\"\u003e#299\u003c/a\u003e\nfrom dtolnay/syn3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/6cf42c104d1c02aa97d4fc62ff117f8d6b05eacb\"\u003e\u003ccode\u003e6cf42c1\u003c/code\u003e\u003c/a\u003e\nUpdate to syn 3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/b9daabad756580d31bd2b9221ea599db51bf6cdd\"\u003e\u003ccode\u003eb9daaba\u003c/code\u003e\u003c/a\u003e\nIgnore match_same_arms pedantic clippy lint\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/aa706d127114e57dc163238af947ba495b0b86d2\"\u003e\u003ccode\u003eaa706d1\u003c/code\u003e\u003c/a\u003e\nUpdate actions/upload-artifact@v6 -\u0026gt; v7\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/compare/0.1.89...0.1.91\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dasync-trait\u0026package-manager\u003dcargo\u0026previous-version\u003d0.1.89\u0026new-version\u003d0.1.91)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "85fc4a308b4b49560373eed688ee18fd20dd0d37",
      "tree": "215897cd3b9968ed5fc915747099b462db15f2f0",
      "parents": [
        "629084cc43ac871e064150739f9cf7959cf9020e"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 20:04:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 20:04:11 2026 +0800"
      },
      "message": "Bump futures-util from 0.3.32 to 0.3.33 (#2401)\n\nBumps [futures-util](https://github.com/rust-lang/futures-rs) from\n0.3.32 to 0.3.33.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/releases\"\u003efutures-util\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e0.3.33\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eReadLine\u003c/code\u003e\u0027s soundness issue regarding to exception\nsafety. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsound \u003ccode\u003eSend\u003c/code\u003e impl for \u003ccode\u003eIterPinRef\u003c/code\u003e and\n\u003ccode\u003eIter\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3003\"\u003e#3003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix stacked borrows violation in \u003ccode\u003ecompat01as03\u003c/code\u003e\nimplementation. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix memory leak in \u003ccode\u003eFuturesUnordered::IntoIter\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eportable-atomic-alloc\u003c/code\u003e feature and use it in\n\u003ccode\u003eFuturesUnordered\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3007\"\u003e#3007\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003ealloc::task::Wake\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003espin\u003c/code\u003e to 0.12. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/blob/main/CHANGELOG.md\"\u003efutures-util\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003e0.3.33 - 2026-07-18\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003eReadLine\u003c/code\u003e\u0027s soundness issue regarding to exception\nsafety. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3020\"\u003e#3020\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix unsound \u003ccode\u003eSend\u003c/code\u003e impl for \u003ccode\u003eIterPinRef\u003c/code\u003e and\n\u003ccode\u003eIter\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3003\"\u003e#3003\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix stacked borrows violation in \u003ccode\u003ecompat01as03\u003c/code\u003e\nimplementation. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFix memory leak in \u003ccode\u003eFuturesUnordered::IntoIter\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3005\"\u003e#3005\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eportable-atomic-alloc\u003c/code\u003e feature and use it in\n\u003ccode\u003eFuturesUnordered\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3007\"\u003e#3007\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRe-export \u003ccode\u003ealloc::task::Wake\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3010\"\u003e#3010\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eUpdate \u003ccode\u003espin\u003c/code\u003e to 0.12. (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3014\"\u003e#3014\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/89cc254cb8bfcc78e6a31e7711d0757f97bcb531\"\u003e\u003ccode\u003e89cc254\u003c/code\u003e\u003c/a\u003e\nRelease 0.3.33\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/cd9f5befe699dab2e94cfd32708879b41be0960a\"\u003e\u003ccode\u003ecd9f5be\u003c/code\u003e\u003c/a\u003e\nci: Update release workflow\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/d79a499c5f7b4427b8dfbee2216b0ff042bb38e4\"\u003e\u003ccode\u003ed79a499\u003c/code\u003e\u003c/a\u003e\nResolve rustdoc::broken_intra_doc_links warning\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/95bbcf83be9e414f1e5b9e0f5e0c91f1d8e433e3\"\u003e\u003ccode\u003e95bbcf8\u003c/code\u003e\u003c/a\u003e\nResolve rustdoc ambiguous link error\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/303c1658dc7bde42cf15d7a09621de8c6c857b37\"\u003e\u003ccode\u003e303c165\u003c/code\u003e\u003c/a\u003e\nResolve rustdoc::redundant_explicit_links warning\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/f34e3f5b9daba3901a464a0694e448a7eacf0e19\"\u003e\u003ccode\u003ef34e3f5\u003c/code\u003e\u003c/a\u003e\nci: Cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/66591a24275a79d9a77330dbb9106b79f623aa0d\"\u003e\u003ccode\u003e66591a2\u003c/code\u003e\u003c/a\u003e\nEnable Miri for more tests\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/ab1072fec105b27e5133f9f7dd01f44fba55629f\"\u003e\u003ccode\u003eab1072f\u003c/code\u003e\u003c/a\u003e\nSimplify target_has_atomic cfg in utility crates\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/cf5d23b68bf7eafb926a2d485b1a1276a4a4e146\"\u003e\u003ccode\u003ecf5d23b\u003c/code\u003e\u003c/a\u003e\nFix unsound compat01as03 implementation (fixes \u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/2514\"\u003e#2514\u003c/a\u003e)\n(\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3012\"\u003e#3012\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/commit/8ae794faefbbae7f0070d11f75ea7e56bc2698c5\"\u003e\u003ccode\u003e8ae794f\u003c/code\u003e\u003c/a\u003e\nAdd portable-atomic-alloc feature and use it in FuturesUnordered (\u003ca\nhref\u003d\"https://redirect.github.com/rust-lang/futures-rs/issues/3007\"\u003e#3007\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/rust-lang/futures-rs/compare/0.3.32...0.3.33\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dfutures-util\u0026package-manager\u003dcargo\u0026previous-version\u003d0.3.32\u0026new-version\u003d0.3.33)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "629084cc43ac871e064150739f9cf7959cf9020e",
      "tree": "7affbb5a25e30c992bf0338c13de803339f58296",
      "parents": [
        "c3b7d6333908b1a3cfbd22aa5dbfca21323ce5d8"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Mon Jul 20 18:16:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 18:16:34 2026 +0800"
      },
      "message": "[AURON #2398] Fix Maven -D argument handling in auron-build.sh (#2399)\n\n### Which issue does this PR close?\n\nCloses #2398\n\n### Rationale for this change\n\nThe `auron-build.sh` script incorrectly handles Maven `-D` arguments.\n\nThe script previously stored these arguments in a single string and\nadded a leading space before the first argument. It then passed the\ncomplete string to Maven as one quoted argument.\n\nFor example, Maven received:\n\n```text\n\" -DskipBuildNative\"\n```\n\ninstead of:\n\n```\n\"-DskipBuildNative\"\n```\n\nThis caused Maven to report:\n\n```\nUnknown lifecycle phase \" -DskipBuildNative\"\n```\n\n### What changes are included in this PR?\n\n- Replace the string-based `MVN_D_ARGS` variable with a Bash array.\n- Store every Maven `-D` option as an independent array element.\n- Pass Maven properties using quoted array expansion.\n- Preserve multiple Maven properties and values containing spaces.\n- Simplify the local Maven command execution path.\n\n### Are there any user-facing changes?\n\nYes.\n\nUsers can now pass Maven `-D` properties through `auron-build.sh` as\ndocumented.\n\nFor example:\n\n```\n./auron-build.sh --pre --sparkver 4.1 --scalaver 2.13 -DskipBuildNative\n```\n\nMultiple Maven properties are also preserved as separate arguments.\n\n### How was this patch tested?\n\n- Reproduced the original behavior and confirmed that the script\nproduced:\n\n```\n\u003c -DskipBuildNative\u003e\n```\n\n- Verified that the fixed script produces:\n\n```\n\u003c-DskipBuildNative\u003e\n```\n\n### Was this patch authored or co-authored using generative AI tooling?\n- [ ] Yes\n- [x] No\n\nIf yes, include: `Generated-by: \u003ctool name and version\u003e`\n\nASF guidance: https://www.apache.org/legal/generative-tooling.html\n\nSigned-off-by: slfan1989 \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "c3b7d6333908b1a3cfbd22aa5dbfca21323ce5d8",
      "tree": "666d08b92837bd7756910cb0ac08f8315d8843b0",
      "parents": [
        "c0b525194fa04f4e51b483965a6c026e079f19dc"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 16:49:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 16:49:14 2026 +0800"
      },
      "message": "Bump serde from 1.0.228 to 1.0.229 (#2403)"
    },
    {
      "commit": "c0b525194fa04f4e51b483965a6c026e079f19dc",
      "tree": "bab57cc3e7396c516f8de5783da46c13d955705a",
      "parents": [
        "92f22ea3a321f09aac52ecb0c7abf6e054f7904d"
      ],
      "author": {
        "name": "Zhen Wang",
        "email": "643348094@qq.com",
        "time": "Mon Jul 20 16:48:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 16:48:14 2026 +0800"
      },
      "message": "[AURON #2352] Lock spills before new spiller (#2350)\n\n# Which issue does this PR close?\n\nCloses #2352\n\n# Rationale for this change\n\n`try_new_spill` always uses `spills.len` as the `spill_id`, so we should\nalways lock `spills` before `trying_new_spill`.\n\n# What changes are included in this PR?\n\n# Are there any user-facing changes?\n\n# How was this patch tested?\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "92f22ea3a321f09aac52ecb0c7abf6e054f7904d",
      "tree": "21c30345f575a4827acc2b0281df153a36670266",
      "parents": [
        "ea58765679ec66cf8a99e4807ba4c1a51aa9c2bf"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "yangweiqing001@gmail.com",
        "time": "Sun Jul 19 20:15:15 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 11:15:15 2026 +0800"
      },
      "message": "[AURON #1865] Merge native operators: fuse Flink source and Calc into one native plan (#2327)\n\n# Which issue does this PR close?\n\nCloses #1865\n\n# Rationale for this change\n\nA `SELECT proj … FROM kafka WHERE pred` plan runs today as two\nindependent native operators: the native Kafka source converts its\ncolumnar output to `RowData`, then the shadowed `StreamExecCalc`\noperator converts it back to Arrow, runs `Project[Filter]` natively, and\nconverts back to `RowData` — paying multiple row/column conversions\nwhere one would do. This PR fuses the source and a convertible Calc into\na single native plan `Project[Filter?[KafkaScan]]` that runs inside the\nsource, so the data stays columnar end-to-end and converts to `RowData`\nonce, at the chain tail. This is the whole-stage native operator merging\ndirection for the Flink integration, mirroring the plan-merge already\nused on the Spark side.\n\n# What changes are included in this PR?\n\nStrict gating in the shadowed `StreamExecCalc`: a Calc converts to\nnative only when it can fuse into a native upstream chain — its input is\nthe native Auron Kafka source, the source has no event-time watermark,\nand every expression converts. When fusible, the Calc hands its logical\n`Project[Filter?]` sub-plan to the source and returns the source\ntransformation re-typed to the projected output, eliminating the Calc\noperator. Every other case (non-native upstream, watermarked source, any\nunconvertible expression) runs as a stock Flink Calc.\n\nThe source splices its `KafkaScan` into the handed-off sub-plan and\nprepends the partition/offset/timestamp metadata columns, so its\nper-record offset-commit and timestamp bookkeeping are unchanged; native\ncolumn resolution is by name, so no column-index rewriting is needed.\n\nThe standalone FFI-reader native-Calc path is no longer emitted from the\nCalc decision. Detection and hand-off go through the source function, so\nno source-operator type is introduced; operator-level native identity is\nleft to the future ExecNode-graph merge that would consume it.\nEvent-time-watermark fusion is out of scope and tracked as a follow-up.\n\nThis PR is stacked on #2325 (no-watermark source emit fix), which it\nrequires; that commit drops out of the diff once #2325 merges and this\nbranch is rebased.\n\n# Are there any user-facing changes?\n\nPerformance: a `source → Calc` chain over the native Kafka source with\nno event-time watermark now runs as a single native pipeline with one\ncolumnar-to-row conversion. A Calc that cannot fuse (non-native source,\nwatermarked source, or unsupported expression) runs as Flink\u0027s codegen\nCalc.\n\n# How was this patch tested?\n\nUnit tests in `StreamExecCalcTest` assert the fusion decision (native\nsource + no watermark + convertible → merged source transformation with\nno separate Calc operator; each negative case → stock Flink Calc). An\nend-to-end `AuronKafkaSourceMergeITCase` runs fused SQL over a\nno-watermark `auron-kafka` table and asserts row-set correctness; a\nnative boolean-to-string cast renders lowercase, proving the fused path\nexecutes natively (Flink codegen renders uppercase). The full\n`auron-flink-planner` (130) and `auron-flink-runtime` (137) module test\nsuites pass."
    },
    {
      "commit": "ea58765679ec66cf8a99e4807ba4c1a51aa9c2bf",
      "tree": "48103047a1225647525fd701cd7a5970708b8ef7",
      "parents": [
        "37daf6c0a4b6ba7d9db7be619e0973f82d660988"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Sun Jul 19 15:39:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 15:39:03 2026 +0800"
      },
      "message": "[AURON #2396] [RELEASE] Bump the development version to 9.0.0-SNAPSHOT (#2397)\n\n### Which issue does this PR close?\n\nCloses #2396\n\n### Rationale for this change\n\nApache Auron 8.0.0-incubating has been released. Continued development\non the `master` branch should use the next snapshot version instead of\nretaining the released version.\n\nThe release build workflows also contain hard-coded Auron version\nvalues. These values must remain consistent with the Maven project\nversion so that generated JAR names match the artifact paths expected by\nGitHub Actions.\n\n### What changes are included in this PR?\n\n- Update `project.version` in the root `pom.xml` from\n  `8.0.0-incubating` to `9.0.0-SNAPSHOT`.\n- Update `auronver` to `9.0.0-SNAPSHOT` in the AMD64 release workflow.\n- Update the explicit Spark 4.0 and Spark 4.1 AMD64 matrix entries.\n- Update `auronver` to `9.0.0-SNAPSHOT` in the ARM64 release workflow.\n- Update `auronver` to `9.0.0-SNAPSHOT` in the macOS release workflow.\n\n### Are there any user-facing changes?\n\nNo.\n\nThis change only updates the development version and CI artifact naming.\nIt does not introduce changes to runtime behavior or public APIs.\n\n### How was this patch tested?\n\n### Was this patch authored or co-authored using generative AI tooling?\n- [ ] Yes\n- [x] No\n\nIf yes, include: `Generated-by: \u003ctool name and version\u003e`\n\nASF guidance: https://www.apache.org/legal/generative-tooling.html\n\nSigned-off-by: slfan1989 \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "37daf6c0a4b6ba7d9db7be619e0973f82d660988",
      "tree": "7743cae0a4e6276fdc46fdebddfa32a14cbbeae2",
      "parents": [
        "ceda7332013604ec3baee645b144c2be7152103c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 17 10:59:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 10:59:52 2026 +0800"
      },
      "message": "Bump lz4_flex from 0.13.1 to 0.14.0 (#2388)"
    },
    {
      "commit": "ceda7332013604ec3baee645b144c2be7152103c",
      "tree": "d9d9214d26333769a73b51a3a427c4d6f1dafc63",
      "parents": [
        "eaba4d49c3c03c0221391efcb3e722863fc55ebb"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 17 10:59:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 10:59:23 2026 +0800"
      },
      "message": "Bump regex from 1.13.0 to 1.13.1 (#2389)"
    },
    {
      "commit": "eaba4d49c3c03c0221391efcb3e722863fc55ebb",
      "tree": "f535692b27efccbe4c5a02953666972cee362564",
      "parents": [
        "b073bfb0e333cbf0e67ac1aa1e3b424aa1bd7100"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Wed Jul 15 09:45:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 09:45:11 2026 +0800"
      },
      "message": "[AURON #2378] Support runtime filters in native Iceberg scan (#2379)"
    },
    {
      "commit": "b073bfb0e333cbf0e67ac1aa1e3b424aa1bd7100",
      "tree": "2d7c79ddb70c65d620e421ee7920cbe0cb3fc7e7",
      "parents": [
        "3bb99b61119fec859679bfbaad8a0fc9beb953ff"
      ],
      "author": {
        "name": "Shreyesh Arangath",
        "email": "shreyesh.arangath@gmail.com",
        "time": "Mon Jul 13 21:35:50 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 21:35:50 2026 -0700"
      },
      "message": "[AURON #2265] Add AI-assisted development guidance (#2387)\n\n# Which issue does this PR close?\n\nCloses #2265\n\n# Rationale for this change\n\nAs AI-assisted development becomes more common, contributors need clear,\nproject-specific guidance and policy guardrails that are easy to\ndiscover.\nThis is intentionally an initial version focused on safe, minimal\nbaseline guidance.\nWe can iterate in follow-up PRs to add stronger shared skills and\nbroader documentation for common contributor use cases once we gain\nusage feedback.\n\n# What changes are included in this PR?\n\n1. Adds a new root `AGENTS.md` as the canonical AI-assistance guidance\nentry point for this repository.\n2. Links to existing contributor documentation rather than duplicating\nprocess details.\n3. Adds a hard rule to avoid unreviewed third-party\nplugins/hooks/scripts and rely on approved repo tooling.\n4. Updates `.github/pull_request_template.md` to require generative-AI\ndisclosure (`Generated-by: ...` or `No`) with ASF guidance link.\n\n# Are there any user-facing changes?\n\nNo runtime behavior changes; contributor/process documentation only.\n\n# How was this patch tested?\n\nDocumentation-only changes.\n\n# Was this patch authored or co-authored using generative AI tooling?\n\nGenerated-by: GitHub Copilot CLI GPT-5.3-Codex"
    },
    {
      "commit": "3bb99b61119fec859679bfbaad8a0fc9beb953ff",
      "tree": "c8c4f7181480a402f6572cf6eaeb2406ee440094",
      "parents": [
        "a86d6a64cab8f58dec7232ac8e51aff9ae97eff9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 17:47:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 17:47:40 2026 +0800"
      },
      "message": "Bump regex from 1.12.3 to 1.13.0 (#2385)"
    },
    {
      "commit": "a86d6a64cab8f58dec7232ac8e51aff9ae97eff9",
      "tree": "bb7ddd2295ead3af8333b8a83ecc8e8b39a33f75",
      "parents": [
        "d2349bcc9b5925e3b583db141186ae4902d2aae7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Jul 11 11:14:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 11:14:14 2026 +0800"
      },
      "message": "Bump prost-reflect from 0.16.4 to 0.16.5 (#2384)\n\nBumps [prost-reflect](https://github.com/andrewhickman/prost-reflect)\nfrom 0.16.4 to 0.16.5.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/andrewhickman/prost-reflect/releases\"\u003eprost-reflect\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eprost-reflect-v0.16.5\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a performance regression in encoding of DynamicMessage (\u003ca\nhref\u003d\"https://redirect.github.com/andrewhickman/prost-reflect/pull/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/andrewhickman/prost-reflect/blob/main/CHANGELOG.md\"\u003eprost-reflect\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e\u003ca\nhref\u003d\"https://github.com/andrewhickman/prost-reflect/compare/prost-reflect-v0.16.4...prost-reflect-v0.16.5\"\u003e0.16.5\u003c/a\u003e\n- 2026-07-09\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a performance regression in encoding of DynamicMessage (\u003ca\nhref\u003d\"https://redirect.github.com/andrewhickman/prost-reflect/pull/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andrewhickman/prost-reflect/commit/2d0e1847a07d2582ae3edf84dbb80f2684961fef\"\u003e\u003ccode\u003e2d0e184\u003c/code\u003e\u003c/a\u003e\nchore: release (\u003ca\nhref\u003d\"https://redirect.github.com/andrewhickman/prost-reflect/issues/199\"\u003e#199\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/andrewhickman/prost-reflect/commit/d6bc81ad0a5111e05e1ac0cc7c7022dfacafa499\"\u003e\u003ccode\u003ed6bc81a\u003c/code\u003e\u003c/a\u003e\nperf: avoid full-descriptor walk when encoding DynamicMessage (\u003ca\nhref\u003d\"https://redirect.github.com/andrewhickman/prost-reflect/issues/200\"\u003e#200\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/andrewhickman/prost-reflect/compare/prost-reflect-v0.16.4...prost-reflect-v0.16.5\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dprost-reflect\u0026package-manager\u003dcargo\u0026previous-version\u003d0.16.4\u0026new-version\u003d0.16.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "d2349bcc9b5925e3b583db141186ae4902d2aae7",
      "tree": "271a971e7d5476a90d3a44e6db084c14d98b22d0",
      "parents": [
        "3d24724feefe542667649eb46f9007a1149eeb3c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 10 10:43:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 10:43:03 2026 +0800"
      },
      "message": "Bump bytes from 1.11.1 to 1.12.1 (#2383)"
    },
    {
      "commit": "3d24724feefe542667649eb46f9007a1149eeb3c",
      "tree": "bf82a20a4b53998de8a8cfff6cd5c931dacde08e",
      "parents": [
        "fe1ddbc5514e4c326a0d9d07737fa66f2d09db8c"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Thu Jul 09 11:03:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 11:03:26 2026 +0800"
      },
      "message": "[AURON #2375] Fix Iceberg changelog scan field-id projection (#2376)\n\n# Which issue does this PR close?\n\nCloses #2375\n\n# Rationale for this change\n\nThe regular native Iceberg scan path already passes Iceberg field IDs to\nthe native reader, which makes top-level schema evolution such as column\nrename and drop-then-add safe for Parquet files.\n\nThe newer insert-only Iceberg changelog scan path also reads the\nunderlying Parquet data files through the native reader, but it does not\npass the same field-id mapping into the native scan plan yet. As a\nresult, native Parquet schema matching falls back to column names on the\nchangelog path.\n\nThis can return wrong results after Iceberg schema evolution. For\nexample, after `RENAME COLUMN`, pre-rename files may read as null; after\n`DROP` + `ADD` of the same name, the newly added column may read data\nfrom the old dropped column.\n\n# What changes are included in this PR?\n\n- Extract field IDs from `SparkChangelogScan`\u0027s expected Iceberg schema.\n- Reuse the existing Iceberg rename/drop detection for changelog scans.\n- Pass changelog field IDs into `IcebergScanPlan` instead of\n`Map.empty`.\n- Keep nested rename/drop unsupported and make ORC changelog scans fall\nback after top-level rename/drop, consistent with the regular Iceberg\nscan path.\n- Add changelog scan integration tests for:\n    - renamed columns resolved by field-id;\n- drop-then-add columns with the same name not reusing the dropped\nfield-id.\n\n# Are there any user-facing changes?\n\nYes. Insert-only Iceberg changelog scans on renamed or drop-then-added\nParquet columns now return correct results under the native scan.\nUnsupported cases continue to fall back to Spark. No API change.\n\n# How was this patch tested?\n\nAdded cases to `AuronIcebergIntegrationSuite`."
    },
    {
      "commit": "fe1ddbc5514e4c326a0d9d07737fa66f2d09db8c",
      "tree": "56d37bbb0c864fce93eb2ae382d937a0444ece11",
      "parents": [
        "ecf2a6f2597b78fe3289156b3ee1e05159d93b7e"
      ],
      "author": {
        "name": "He Zhao",
        "email": "luoyedeyi@163.com",
        "time": "Mon Jul 06 21:03:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 21:03:04 2026 +0800"
      },
      "message": "[AURON #2373] support Docker Compose in build script (#2374)\n\n# Which issue does this PR close?\n\nCloses #2373\n\n# Rationale for this change\n\nDocker build mode currently assumes the legacy `docker-compose` command\nis available. Newer Docker engine may only provide Docker Compose as the\n`docker compose` subcommand, causing `auron-build.sh` to fail with\n`exec: docker-compose: not found`.\n\n# What changes are included in this PR?\n\nUpdate `auron-build.sh` to support Docker Compose v2 via `docker\ncompose`, while keeping compatibility with the legacy `docker-compose`\ncommand.\n\n# Are there any user-facing changes?\nNo\n# How was this patch tested?\nRebuild auron"
    },
    {
      "commit": "ecf2a6f2597b78fe3289156b3ee1e05159d93b7e",
      "tree": "6251e3c6fed9f042aaa16fa5d114267de02e9898",
      "parents": [
        "f2a603aef286a15f609bc302870fc6f92d99d151"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 06 15:25:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 15:25:19 2026 +0800"
      },
      "message": "Bump bytesize from 2.3.1 to 2.4.2 (#2382)"
    },
    {
      "commit": "f2a603aef286a15f609bc302870fc6f92d99d151",
      "tree": "cf58955150e03c40b05d93389e94cfa96a34d9d5",
      "parents": [
        "572ce5a43a39175eeeb64a7e8d6cc6176662a21b"
      ],
      "author": {
        "name": "slfan1989",
        "email": "55643692+slfan1989@users.noreply.github.com",
        "time": "Sat Jul 04 16:25:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 04 16:25:54 2026 +0800"
      },
      "message": "[AURON #2380] [RELEASE] Bump version to 8.0.0-incubating (#2381)\n\n# Rationale for this change\n\nThis PR prepares the Apache Auron 8.0.0-incubating release by bumping\nthe project version from `8.0.0-SNAPSHOT` to `8.0.0-incubating`.\n\nThis is required before creating the release candidate tag and\npublishing the release artifacts.\n\n# What changes are included in this PR?\n\n- Updated the project version in `pom.xml`\n  - From `8.0.0-SNAPSHOT`\n  - To `8.0.0-incubating`\n\n# Are there any user-facing changes?\n\nNo.\n\nThis is a release preparation change only. It does not introduce any\nbehavior changes, API changes, or user-facing functionality changes.\n\n# How was this patch tested?\n\nNo Need Test."
    },
    {
      "commit": "572ce5a43a39175eeeb64a7e8d6cc6176662a21b",
      "tree": "76cbb78a908331bf22a4737cfb6509d5b1d79922",
      "parents": [
        "6dc9b00d1d2fc5746aaf3ec5473bb544a1a9ef43"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Wed Jul 01 14:47:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 14:47:28 2026 +0800"
      },
      "message": "[AURON #2321] Support Iceberg column rename and drop-then-add in the native scan (#2322)\n\n# Which issue does this PR close?\n\nCloses #2321\n\n# Rationale for this change\n\nThe native Iceberg scan matches data-file columns by name, but Iceberg\ntracks them by field-id. After a column rename, old files read as\nall-NULL; after a drop-then-add of the same name, the new column reads\nthe old column\u0027s data.\n\n# What changes are included in this PR?\n\nResolve columns by Iceberg field-id instead of by name:\n\n- proto: add `field_id` to `Field`.\n- JVM (`AuronIcebergSourceUtil`, `IcebergScanSupport`,\n`NativeConverters`): extract top-level `name → field-id` from the scan\u0027s\n`expectedSchema()` and serialize it into the plan.\n- native (`auron-planner`, `scan/mod.rs`): stamp the id into Arrow field\nmetadata (`PARQUET:field_id`); `fields_match` matches by id when\npresent, else falls back to case-insensitive name matching (non-Iceberg\nscans unchanged).\n\nNested-struct evolution and ORC rename/drop fall back to Spark, additive\nevolution stays native.\n\n# Are there any user-facing changes?\n\nYes. Iceberg queries on renamed or drop-then-added columns now return\ncorrect results under the native scan. Unsupported cases fall back to\nSpark. No API change.\n\n# How was this patch tested?\n\nAdded cases to `AuronIcebergIntegrationSuite`"
    },
    {
      "commit": "6dc9b00d1d2fc5746aaf3ec5473bb544a1a9ef43",
      "tree": "2db1db5a9d362cb8acb74799d53862638097cbfc",
      "parents": [
        "8145cc94fc7261f4bfaf1bbf9f95baabc2013f2d"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Wed Jul 01 09:40:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 09:40:47 2026 +0800"
      },
      "message": "[AURON #2193] Implement native support for inner residual join conditions on SMJ/SHJ (#2197)\n\n# Which issue does this PR close?\n\nCloses #2193 \n\n# Rationale for this change\nAuron currently only converts SMJ/SHJ joins when the join condition is\nempty. As a result, inner joins that contain both equi-join keys and a\nresidual predicate fall back to Spark even though the equi-join part is\nalready native-compatible.\n\nThe native join plan only models equi-join keys today, so this change\nkeeps the native join focused on the equi-join portion and evaluates the\nresidual predicate with a native filter above the join output.\n\n# What changes are included in this PR?\n\n- Allow native conversion of SortMergeJoinExec and ShuffledHashJoinExec\nwhen an InnerLike join has a residual condition.\n- Keep native join conversion based on equi-join keys only.\n- Apply the residual predicate as a native filter on top of the native\njoin output.\n- Continue to reject residual join conditions for non-inner join types.\n- Add query tests for:\n    - native SMJ with an inner residual condition\n    - native SHJ with an inner residual condition in force-SHJ mode\n- Add a small test helper for Auron configs that are read from\nSparkEnv/SparkContext.\n\n# Are there any user-facing changes?\nYes. Inner joins with equi-join keys plus a residual predicate can now\nremain on the native SMJ/SHJ path instead of falling back entirely to\nSpark.\n\n\n# How was this patch tested?\nCI.\n\n---------\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "8145cc94fc7261f4bfaf1bbf9f95baabc2013f2d",
      "tree": "d6651403a59fbf79b71a78bb59074c648a0e2083",
      "parents": [
        "236d8e965ca2cbba11e43f983110858c2d1ae555"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Tue Jun 30 19:15:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 19:15:57 2026 +0800"
      },
      "message": "[AURON #2366] fix: Handle Paimon metadata columns in V2 native scan (#2367)\n\n# Which issue does this PR close?\n\nCloses #2366\n\n# Rationale for this change\n\nPaimon metadata columns are produced by the Paimon scan layer rather\nthan stored as physical columns in data files. The Paimon V2 native scan\nwas passing these columns to the native Parquet/ORC reader as file\ncolumns, which can return incorrect values.\n\nFor example:\n\n```sql\ncreate table paimon.db.t_metadata (id int, v string) using paimon;\ninsert into paimon.db.t_metadata values (1, \u0027a\u0027);\nselect id, __paimon_file_path from paimon.db.t_metadata;\n```\n\nThe native path returned null for `__paimon_file_path`, while\nSpark/Paimon\u0027s scan path returns the actual file path.\n\n# What changes are included in this PR?\n\n- Recognize Paimon metadata columns using PaimonMetadataColumn.\n- Materialize supported file-level metadata columns (__paimon_file_path,\n__paimon_bucket) as per-file constants.\n- Keep unsupported Paimon metadata columns on Spark/Paimon\u0027s scan path\ninstead of reading them from Parquet/ORC files.\n- Cover metadata columns both with and without table partition columns.\n\n# Are there any user-facing changes?\n\nNo API changes. This is a correctness fix for Paimon V2 native scan.\n\n# How was this patch tested?\n\nAdds Paimon V2 integration tests"
    },
    {
      "commit": "236d8e965ca2cbba11e43f983110858c2d1ae555",
      "tree": "29e4e874cf965e0e24d3b652667fe5e2696fc8af",
      "parents": [
        "5ef05e448b143916e7f0f6986c56d54e684a44a7"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Tue Jun 30 09:20:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 09:20:38 2026 +0800"
      },
      "message": "[AURON #2253] Support insert-only Iceberg changelog native scan (#2254)\n\n# Which issue does this PR close?\n\nCloses #2253 \n\n# Rationale for this change\n\nIceberg changelog scans currently fall back to Spark even when the\nchangelog is insert-only. Insert-only changelog scans read added data\nfiles and can be executed by the existing native Parquet/ORC scan path.\n\n# What changes are included in this PR?\n\n- Add native scan planning support for Iceberg `SparkChangelogScan`.\n- Convert insert-only `AddedRowsScanTask` into native Iceberg scan\ntasks.\n- Materialize changelog metadata columns as per-task partition values.\n- Keep non-insert changelog operations, delete files, mixed file\nformats, and unsupported metadata columns on Spark fallback.\n- Reuse the existing native Iceberg scan execution path.\n\n# Are there any user-facing changes?\nNo API changes. Some insert-only Iceberg changelog queries can now use\nnative scan instead of falling back to Spark.\n\n# How was this patch tested?\n\nAdded Iceberg integration test coverage for insert-only changelog native\nscan correctness and plan conversion."
    },
    {
      "commit": "5ef05e448b143916e7f0f6986c56d54e684a44a7",
      "tree": "efd7e730fd67ab4ababb734700fdfcdb3239413a",
      "parents": [
        "4a504284847a01e307ffab4f55efe262ca257516"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Tue Jun 30 09:18:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 09:18:04 2026 +0800"
      },
      "message": "[AURON #2331] Detect unexpected fallback in expression tests (#2332)\n\n# Which issue does this PR close?\n\nCloses #2331\n\n# Rationale for this change\n\nExpression tests currently validate result correctness, but they do not\nfail when a supported expression unexpectedly falls back to Spark\nexecution. This can hide native expression conversion regressions\nbecause Spark may still produce the correct result.\n\nAuron should verify that expressions known to be convertible are\nactually offloaded to native execution.\n\n# What changes are included in this PR?\n\nThis PR adds a conservative no-fallback check to\n`SparkExpressionTestsBase`.\n\nThe new check:\n\n- verifies whether the executed plan contains `NativeProjectBase`\n- uses `NativeConverters.convertExpr` to decide whether an expression is\nexpected to be convertible\n- fails only when a convertible expression falls back unexpectedly\n- keeps unsupported expressions on the existing result-only validation\npath\n- adds an override hook for suites to allow known fallback cases\n\n\n# Are there any user-facing changes?\nNo. \n\n# How was this patch tested?\nUT.\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "4a504284847a01e307ffab4f55efe262ca257516",
      "tree": "b9ce2042402a6fd23ba4f912a2b0bd951b82b636",
      "parents": [
        "ebf25a208ee0e8299ed215821c69ad37e905a251"
      ],
      "author": {
        "name": "Rob Reeves",
        "email": "robertpreeves@gmail.com",
        "time": "Mon Jun 29 18:16:44 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 09:16:44 2026 +0800"
      },
      "message": "[AURON #2360] Honor config alt keys when reading from SQLConf (#2361)\n\n# Which issue does this PR close?\n\nCloses #2360\n\n# Rationale for this change\n\nConfig aliases declared via `ConfigOption.addAltKey(...)` were silently\nignored: only the **primary** key was ever read from Spark\u0027s `SQLConf`,\nso every alternative key in `SparkAuronConfiguration` had no effect. For\nexample, setting `spark.auron.enable` (the alt key of\n`spark.auron.enabled`) did not disable Auron.\n\nThe cause is in `SparkAuronConfiguration.getFromSpark(...)`: alt keys\nwere only resolved via `ConfigEntry.findEntry(...)` against Spark\u0027s\nglobal registry. Auron\u0027s options are not registered there, so the lookup\nalways fell back to synthesizing a `ConfigEntryWithDefaultFunction`\nkeyed on the primary key with an **empty** alternatives list, and\n`ConfigEntry#readString` therefore only read the primary key.\n\n# What changes are included in this PR?\n\n- Pass the (spark-prefixed) alt keys as the synthesized\n`ConfigEntryWithDefaultFunction`\u0027s `alternatives` so\n`ConfigEntry#readString` reads `primaryKey +: alternatives`, with the\nprimary key taking precedence.\n- Add a unit test (`AuronQuerySuite.\"config alt keys are honored\"`)\nasserting both primary and alt keys take effect for `AURON_ENABLED`, and\nthat the primary key wins when both are set.\n- Update the `acosh null propagation` test. With alt keys now honored,\nthe test harness\u0027s `spark.auron.enable\u003dfalse` baseline actually falls\nback to vanilla Spark, which exposed that vanilla Spark and the native\nengine can produce the same NaN with different bit patterns\n(`checkSparkAnswerAndOperator`/`QueryTest` compares doubles via\n`Double.doubleToRawLongBits`). The test now keeps the exact numeric/null\ncomparison for in-domain inputs, and compares the out-of-domain\n(NaN-producing) inputs via the natively-supported `isnan` so no raw NaN\nbits are compared. The shared `checkSparkAnswerAndOperator` checker is\nleft unchanged.\n- Disabled ansi mode for a failing test and created\nhttps://github.com/apache/auron/issues/2368\n\n# Are there any user-facing changes?\n\nYes. Configuration alternative keys now work as documented. In\nparticular, `spark.auron.enable` (alias of `spark.auron.enabled`) and\n`spark.auron.ui.enable` (alias of `spark.auron.ui.enabled`) now take\neffect. The primary key takes precedence when both are set.\n\n# How was this patch tested?\n\n- Added `AuronQuerySuite.\"config alt keys are honored\"`.\n- Ran the full `spark-extension-shims-spark` test suite (Spark 3.5,\nScala 2.12): 138 succeeded, 0 failed.\n\n---------\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "ebf25a208ee0e8299ed215821c69ad37e905a251",
      "tree": "d3c26cfde6f9e320062fd19a0fa70893022be4ab",
      "parents": [
        "953381d31106825ae4ec4be85c6c9e6b5e19d951"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Mon Jun 29 15:01:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 15:01:57 2026 +0800"
      },
      "message": "[AURON #2364] fix: Native Paimon V2 scan returns wrong results with native filter (#2365)\n\n# Which issue does this PR close?\n\nCloses #2364\n\n# Rationale for this change\n\nAuron recently added native scan support for Paimon DSv2 tables. When a\nPaimon V2 native scan is followed by a native filter, the query can\nreturn wrong results.\n\nFor example:\n\n```sql\ncreate table paimon.db.t_rename_columns (id int, v string) using paimon;\ninsert into paimon.db.t_rename_columns values (1, \u0027a\u0027), (2, \u0027b\u0027);\nselect id from paimon.db.t_rename_columns where id \u003d 1;\n```\n\nThe buggy plan returns an empty result instead of `[1]`.\n\n# What changes are included in this PR?\n\nupdates `AuronConverters.needRenameColumns` to mark\n`NativePaimonV2TableScan` as requiring rename-columns handling.\n\n# Are there any user-facing changes?\n\nNo API changes. Only a bug fix.\n\n# How was this patch tested?\nAdds a Paimon V2 integration test covering a native filter on top of a\nnative Paimon V2 scan."
    },
    {
      "commit": "953381d31106825ae4ec4be85c6c9e6b5e19d951",
      "tree": "bcae745c5958f2051e42da4c4ebdafb72f3cc19d",
      "parents": [
        "2087a108f47e99b35937abfe362e49eca763e8c4"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Mon Jun 29 09:53:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 09:53:20 2026 +0800"
      },
      "message": "[AURON #2343] Support native flatten for mixed child array nullability (#2344)\n\n# Which issue does this PR close?\n\nCloses #2343 \n\n# Rationale for this change\n\nAuron currently excludes Spark\u0027s `flatten function` tests because native\nexecution can fail when child arrays have different `containsNull`\nmetadata.\n\n`flatten` is a built-in Spark array expression, so supporting it in\nnative execution improves Spark SQL compatibility and reduces fallback\ncoverage gaps.\n\n# What changes are included in this PR?\n\n- Adds a native `Spark_ArrayFlatten` function.\n- Converts Spark `Flatten` expressions to the new native function.\n- Preserves Spark semantics for:\n  - null outer arrays\n  - null child arrays\n  - empty arrays\n  - null elements inside child arrays\n  - primitive and struct element arrays\n- Adds an Auron SQL test for mixed child array nullability.\n- Removes the `flatten function` excludes from Spark 3.1/3.2/3.4/3.5\ntest settings.\n\n# Are there any user-facing changes?\nNo user-facing API changes. More `flatten` expressions can now be\nexecuted natively by Auron.\n\n# How was this patch tested?\nUT.\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "2087a108f47e99b35937abfe362e49eca763e8c4",
      "tree": "cea9d54f4bd4dd19c65eb9a2fc69f4e9dac25089",
      "parents": [
        "2fd44719943182d4504a55538749b08822046123"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Sun Jun 28 13:31:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 28 13:31:19 2026 +0800"
      },
      "message": "[AURON #2335] Support more literal patterns in native split (#2336)\n\n# Which issue does this PR close?\n\nCloses #2335 \n\n# Rationale for this change\n\nSpark `split` conversion currently supports only a fixed set of literal\npatterns. This causes safe literal patterns such as `/`, `\\\\+`, and `::`\nto fall back even though native `Spark_StringSplit` already splits by\nliteral string pattern.\n\nThis PR expands native coverage for common non-regex split patterns\nwithout adding full regex support.\n\n# What changes are included in this PR?\n\nThis PR updates Spark `StringSplit` conversion in `ShimsImpl` to\nrecognize patterns that can be safely treated as literal strings.\n\nThe new logic supports:\n\n- plain literal patterns without regex metacharacters\n- escaped regex metacharacters that represent literal characters\n\nPatterns requiring regex semantics continue to fall back.\n\nThis PR also adds SQL coverage in `AuronFunctionSuite` for:\n\n- `split(c1, \u0027/\u0027)`\n- `split(c2, \u0027\\\\+\u0027)`\n- `split(c3, \u0027::\u0027)`\n\n# Are there any user-facing changes?\n\nYes. More Spark `split` expressions with literal patterns can now be\nexecuted natively instead of falling back to Spark.\nThere is no behavior change for regex patterns that are not safe to\ntreat as literals.\n\n# How was this patch tested?\nUT.\n\n---------\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "2fd44719943182d4504a55538749b08822046123",
      "tree": "c145d146c31185c44d5e86499e6d028e47533b61",
      "parents": [
        "1b25a315d4b516e95b35452ccb878c4219e33b5b"
      ],
      "author": {
        "name": "zhangmang",
        "email": "zhangmang1@163.com",
        "time": "Thu Jun 25 10:52:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 10:52:33 2026 +0800"
      },
      "message": "[AURON #2356] Fix duplicate initialization of the FlinkAuronConfiguration object (#2357)\n\n# Which issue does this PR close?\n\nCloses #2356 \n\n# Rationale for this change\n- Fix duplicate initialization of the FlinkAuronConfiguration object\n\n# What changes are included in this PR?\n- Change the FlinkAuronConfiguration from being initialized on every\ncall to being initialized only once.\n\n# Are there any user-facing changes?\n- No\n# How was this patch tested?\n- No"
    },
    {
      "commit": "1b25a315d4b516e95b35452ccb878c4219e33b5b",
      "tree": "1e499b856a1fc0d600116af47afd6bf486db6f36",
      "parents": [
        "790bb8ec51fe7384d8400b0ec1f7d866621797ea"
      ],
      "author": {
        "name": "cxzl25",
        "email": "3898450+cxzl25@users.noreply.github.com",
        "time": "Thu Jun 25 10:43:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 10:43:32 2026 +0800"
      },
      "message": "[AURON #2354] chore: enable copilot code review on push (#2355)\n\n# Which issue does this PR close?\n\nCloses #2354\n\n# Rationale for this change\nhttps://github.com/apache/infrastructure-asfyaml#copilot_code_review\n\n# What changes are included in this PR?\n\n# Are there any user-facing changes?\nNo\n\n# How was this patch tested?"
    },
    {
      "commit": "790bb8ec51fe7384d8400b0ec1f7d866621797ea",
      "tree": "112a3a4a26c94f340140a8848cbe999cb71d34d9",
      "parents": [
        "161d19c7942be9c8bbba4b4e0fc6ad3d079471fb"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jun 24 20:02:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 20:02:09 2026 +0800"
      },
      "message": "Bump actions/cache from 5 to 6 (#2353)"
    },
    {
      "commit": "161d19c7942be9c8bbba4b4e0fc6ad3d079471fb",
      "tree": "f13a93489b07ff54762ce8306c74080725764a93",
      "parents": [
        "ca3bece3720e642f7c5f5b7412e5416fd1f6e551"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Wed Jun 24 18:30:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 18:30:07 2026 +0800"
      },
      "message": "[AURON #2337] Support array input for native reverse (#2338)\n\n# Which issue does this PR close?\n\nCloses #2337 \n\n# Rationale for this change\n\nSpark\u0027s `reverse` expression supports both string and array inputs.\nAuron previously converted native `Reverse` as a string function only,\nso `reverse(array\u003cT\u003e)` could not execute natively and the Spark reverse\narray tests were excluded.\n\nSupporting array input closes this Spark compatibility gap and improves\nnative expression coverage for a common built-in function.\n\n# What changes are included in this PR?\n\n- Add a native `Spark_ArrayReverse` ext scalar function.\n- Route `Reverse` with `ArrayType` input to `Spark_ArrayReverse`.\n- Keep the existing string reverse conversion unchanged.\n- Preserve null arrays and null elements when reversing array values.\n- Remove the reverse array excludes from Spark 3.1, 3.2, 3.4, and 3.5\ntest settings.\n\n# Are there any user-facing changes?\n\nYes. Queries using `reverse(array\u003cT\u003e)` can now be executed by Auron\nnative execution instead of falling back or being unsupported.\n\n# How was this patch tested?\nUT.\n\n---------\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: Shilun Fan \u003cslfan1989@apache.org\u003e"
    },
    {
      "commit": "ca3bece3720e642f7c5f5b7412e5416fd1f6e551",
      "tree": "9ade624c6f6171186be93027d454484d7ab759f0",
      "parents": [
        "d5af99bc6e56148b1830a8f87452863c4bd0d4d3"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 22 16:36:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 16:36:11 2026 +0800"
      },
      "message": "Bump actions/checkout from 6 to 7 (#2345)"
    },
    {
      "commit": "d5af99bc6e56148b1830a8f87452863c4bd0d4d3",
      "tree": "213f7519fd28e7a045c9f4478683195aa07e684c",
      "parents": [
        "9338d8c683c64aaaf547c30741a49013b6d9b07c"
      ],
      "author": {
        "name": "Xiangyi Zhu",
        "email": "82511136+zhuxiangyi@users.noreply.github.com",
        "time": "Mon Jun 22 13:43:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 13:43:20 2026 +0800"
      },
      "message": "[AURON #2316] Support native scan for Paimon DSv2 (BatchScanExec) COW tables (#2313)"
    },
    {
      "commit": "9338d8c683c64aaaf547c30741a49013b6d9b07c",
      "tree": "3efd580bfa3e6570ca92152b687da458ec1c7265",
      "parents": [
        "f95888faca8167334241a9b32fa097bab6f14e59"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Mon Jun 22 13:35:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 13:35:14 2026 +0800"
      },
      "message": "[AURON #2341] Fix NativeIcebergTableScan to respect SinglePartition outputPartitioning (#2342)"
    },
    {
      "commit": "f95888faca8167334241a9b32fa097bab6f14e59",
      "tree": "567e756f8b761e3ba23c6bdaa3a5df9e41235f52",
      "parents": [
        "838d099241ada0022c914aa3135252835ebcf04f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jun 17 21:26:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 21:26:54 2026 +0800"
      },
      "message": "Bump itertools from 0.14.0 to 0.15.0 (#2340)"
    },
    {
      "commit": "838d099241ada0022c914aa3135252835ebcf04f",
      "tree": "f01d2b9142cf3be253b859a3d2634ead5e4ee5cd",
      "parents": [
        "5bc8049b02945b42889a1172a28e25af043943cb"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "wiyang@linkedin.com",
        "time": "Tue Jun 16 01:22:13 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 16:22:13 2026 +0800"
      },
      "message": "[AURON #2325] Fix Auron Kafka source emitting no records without a watermark (#2326)\n\n# Which issue does this PR close?\n\nCloses #2325\n\n# Rationale for this change\n\n`AuronKafkaSourceFunction` set its `isRunning` flag to `true` only\ninside the `if (watermarkStrategy !\u003d null)` branch of `open()`, but\n`run()` collects records only while `isRunning` is `true` on both the\nwatermark and no-watermark paths. A source configured without an\nevent-time watermark therefore never started emitting and returned an\nempty result set. The gap was never caught because the existing\n`auron-kafka` test tables all declare a watermark.\n\n# What changes are included in this PR?\n\n`isRunning` is now set to `true` unconditionally once `open()`\ncompletes, so a no-watermark source emits records (and snapshots offsets\nand discovers partitions) like a watermarked one, while a\npartial-initialization failure still leaves the source not-running.\n\nA no-watermark mock table and an end-to-end test asserting the source\nemits its records are added.\n\n# Are there any user-facing changes?\n\nYes. An `auron-kafka` table without a `WATERMARK FOR` clause now returns\nits records instead of an empty result.\n\n# How was this patch tested?\n\nA new `AuronKafkaNoWatermarkITCase` runs a plain `SELECT` over a\nno-watermark `auron-kafka` table and asserts the emitted records; it\nfails (empty result) without the fix and passes with it. The full\n`auron-flink-runtime` and `auron-flink-planner` module test suites pass,\nincluding the existing watermarked-source integration tests."
    },
    {
      "commit": "5bc8049b02945b42889a1172a28e25af043943cb",
      "tree": "1475d2cd6c3c56a835e2a9449ec365d81f4a1a67",
      "parents": [
        "93eda71b839a5fb2052d731d358037041430a6d7"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "wiyang@linkedin.com",
        "time": "Mon Jun 15 19:18:18 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 10:18:18 2026 +0800"
      },
      "message": "[AURON #2333] Fix master build: pass keys to getDefaultNativeMetrics in NativeOrcInsertIntoHiveTableBase (#2334)"
    },
    {
      "commit": "93eda71b839a5fb2052d731d358037041430a6d7",
      "tree": "3c14b17c3ee105f2096fffc3aa5e2b6d6530ca85",
      "parents": [
        "8bb169a3e87e5451bd80018c0f29231b1aaecb0b"
      ],
      "author": {
        "name": "LSM",
        "email": "senmiaoliu@trip.com",
        "time": "Mon Jun 15 20:43:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 20:43:23 2026 +0800"
      },
      "message": "[AURON #1985] Optimize native metrics retrieval by passing keys directly (#1982)\n\n# Which issue does this PR close?\nCloses #1985 \n\n# Rationale for this change\nThe previous native metrics retrieval fetched all default metrics for\nevery operator. This changes allows specific operators to request only\nthe relevant metric keys, reducing unnecessary overhead.\n\n# What changes are included in this PR?\nUpdated `getDefaultNativeMetrics` to accept a `Set[String]` of metric\nkeys instead of returning a fixed map.\n\n# Are there any user-facing changes?\nNo\n\n# How was this patch tested?\n\n---------\n\nCo-authored-by: cxzl25 \u003c3898450+cxzl25@users.noreply.github.com\u003e\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "8bb169a3e87e5451bd80018c0f29231b1aaecb0b",
      "tree": "716beed5fb3a716d9ed4cf11cc32579589564bd2",
      "parents": [
        "27a93d5f264f8e6273e3eb567f7916febd0936ac"
      ],
      "author": {
        "name": "guixiaowen",
        "email": "58287738+guixiaowen@users.noreply.github.com",
        "time": "Mon Jun 15 20:31:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 20:31:32 2026 +0800"
      },
      "message": "[AURON #2252] Add support for auron.never.convert.reason in Hudi scan scenarios (#2293)\n\n# Which issue does this PR close?\n\nCloses #2252 \n\n# Rationale for this change\n\nIn issue https://github.com/apache/auron/issues/1419, the reasons for\nfallback (i.e., why a conversion was not applied) are recorded using the\nproperty auron.never.convert.reason.\n\nIn issue https://github.com/apache/auron/pull/1471, these reasons can be\nobserved in the Spark UI, helping users understand why the physical\nexecution plan was not converted.\n\nHowever, in the current Hudi fallback scenarios, the property\nauron.never.convert.reason is not recorded.\n\nThe purpose of this issue is to fill this gap by ensuring that\nauron.never.convert.reason is properly recorded in Hudi-related fallback\ncases as well.\n\n\n# What changes are included in this PR?\n\nIn scenarios where Hudi conversion fails, throw an exception to provide\na prompt indicating why the conversion was not performed.\n\n# Are there any user-facing changes?\n\nNothing.\n\n# How was this patch tested?\nUT\n\n---------\n\nCo-authored-by: guihuawen \u003cguihuawen@didiglobal.com\u003e"
    },
    {
      "commit": "27a93d5f264f8e6273e3eb567f7916febd0936ac",
      "tree": "15102b10e03e845c91513e008ac75da2bad99499",
      "parents": [
        "44c77c2edbcceb4addd5f4965426721b3bd53687"
      ],
      "author": {
        "name": "cxzl25",
        "email": "3898450+cxzl25@users.noreply.github.com",
        "time": "Mon Jun 15 20:30:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 20:30:15 2026 +0800"
      },
      "message": "[AURON #2323] Refactor and rename cast test suites for ANSI mode on and off (#2324)\n\n# Which issue does this PR close?\n\nCloses #2323\n\n# Rationale for this change\n\n# What changes are included in this PR?\n\n# Are there any user-facing changes?\n\n# How was this patch tested?\nGHA"
    },
    {
      "commit": "44c77c2edbcceb4addd5f4965426721b3bd53687",
      "tree": "bf3050a448c89cdce98356b5fc8e1cebc0654215",
      "parents": [
        "aeabe9ea16e5225953be4dc8d1edf0d8200b9013"
      ],
      "author": {
        "name": "Peter Chen J.",
        "email": "34339487+peter941221@users.noreply.github.com",
        "time": "Wed Jun 10 09:12:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 09:12:56 2026 +0800"
      },
      "message": "[AURON #2174] Add expression test wrappers for supported Spark versions (#2284)\n\n# Which issue does this PR close?\n\nCloses #2174\n\n# Rationale for this change\n\nSpark 3.3 already has expression correctness test wrappers from #1818,\nbut the same coverage is still missing for the other supported Spark\nversions listed in #2174.\n\n# What changes are included in this PR?\n\n- add `AuronColumnExpressionSuite` wrappers for Spark 3.1, 3.2, 3.4,\n3.5, 4.0, and 4.1\n- add catalyst expression suite wrappers for each supported Spark\nversion based on the existing Spark 3.3 pattern\n- keep version-specific exclusions aligned with #2174:\n  - Spark 3.1 does not add `TryCastSuite`\n- Spark 3.4 and 3.5 do not add `AnsiCastSuiteWithAnsiModeOff`,\n`AnsiCastSuiteWithAnsiModeOn`, `CastSuite`, or `CastSuiteWithAnsiModeOn`\n\n# Are there any user-facing changes?\n\nNo.\n\n# How was this patch tested?\n\nI verified the added wrapper set against the version matrix described in\n#2174.\n\nI could not run the Maven test suites locally in this environment\nbecause `mvn` is not installed."
    },
    {
      "commit": "aeabe9ea16e5225953be4dc8d1edf0d8200b9013",
      "tree": "203f948927f6eee714fd3694d5edb297bdf12ff9",
      "parents": [
        "94fd0fabd49eb742b4577b9598bf53052290a0b3"
      ],
      "author": {
        "name": "yew1eb",
        "email": "yew1eb@gmail.com",
        "time": "Wed Jun 10 09:11:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 09:11:59 2026 +0800"
      },
      "message": "[AURON #2289] support SQL aggregate FILTER (WHERE ...) clause in native execution (#2290)\n\n## Which issue does this PR close?\nCloses #2289 \n\n## Rationale for this change\nCurrently, queries using the SQL standard FILTER (WHERE ...) clause on\naggregate functions fall back to non-native Spark execution. This is\nbecause the Spark-side native converters explicitly assert\nfilter.isEmpty, the protobuf schema has no field for filter predicates,\nand the Rust execution engine does not apply per-aggregate row\nfiltering.\n\nThis PR enables end-to-end native execution for filtered aggregates,\nimproving performance for a commonly used SQL pattern.\n\n## What changes are included in this PR?\n1. Protobuf schema: Add filter field to PhysicalAggExprNode.\n2. Spark converters (NativeConverters, ShimsImpl): Remove\nassert(filter.isEmpty) and convert the Spark AggregateExpression.filter\nexpression to protobuf.\n3. Rust planner: Parse the filter field from protobuf into\nAggExpr.filter.\n4. Rust execution (AggContext::update_batch_slice_to_acc_table):\nEvaluate each aggregate\u0027s filter expression against the input batch; for\naggregates with a filter, build filtered acc_idx / input_idx vectors and\npass only matching rows to partial_update.\n5. Tests:\n   - Rust: test_agg_with_filter in agg_exec.rs\n   - Scala: aggregate with filter clause in AuronQuerySuite\n\n## Are there any user-facing changes?\nNO.\n\n## How was this patch tested?\n- cargo test --workspace — all Rust tests pass\n- cargo test -p datafusion-ext-plans -- agg_exec — existing test_agg /\nfuzztest plus new test_agg_with_filter all pass\n- Added Scala integration test in AuronQuerySuite covering filtered\naggregates with/without GROUP BY and multiple predicates"
    },
    {
      "commit": "94fd0fabd49eb742b4577b9598bf53052290a0b3",
      "tree": "b9830e77286b307cd7b339c4d04a4f6c5fe907ec",
      "parents": [
        "c460b5e79d117dfecfccd934f275c0c8f1ebff25"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jun 09 12:48:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 12:48:05 2026 +0800"
      },
      "message": "Bump prost from 0.14.3 to 0.14.4 (#2314)"
    },
    {
      "commit": "c460b5e79d117dfecfccd934f275c0c8f1ebff25",
      "tree": "3adfb463328846b27b1397ede13875e1cced6eb3",
      "parents": [
        "539d1752dc5a03a6348fea543f7322946089d8db"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 08 15:47:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 15:47:13 2026 +0800"
      },
      "message": "Bump log from 0.4.31 to 0.4.32 (#2312)"
    },
    {
      "commit": "539d1752dc5a03a6348fea543f7322946089d8db",
      "tree": "46991d88ac5644d191cfcc1cb2c89dcc7b6bf6b7",
      "parents": [
        "ab982cd99f9ac3615820582bff3945fa66e813cf"
      ],
      "author": {
        "name": "cxzl25",
        "email": "3898450+cxzl25@users.noreply.github.com",
        "time": "Mon Jun 08 10:46:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 10:46:32 2026 +0800"
      },
      "message": "[AURON #2301] Upgrade hashbrown to 0.17.1 and adapt API (#2302)\n\n# Which issue does this PR close?\n\nCloses #2301\n\n# Rationale for this change\n\n# What changes are included in this PR?\n\n# Are there any user-facing changes?\n\n# How was this patch tested?\nGHA\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "ab982cd99f9ac3615820582bff3945fa66e813cf",
      "tree": "c59b4faa48d12de7fabb18e808f880f93f310b1f",
      "parents": [
        "7f5d84eb28fc942c2595d12f6221d642e0859ce4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jun 05 20:59:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 20:59:41 2026 +0800"
      },
      "message": "Bump chrono from 0.4.44 to 0.4.45 (#2311)"
    },
    {
      "commit": "7f5d84eb28fc942c2595d12f6221d642e0859ce4",
      "tree": "3dc46a201ac3d9464c410b545292ef990175c795",
      "parents": [
        "fdd96ec0924c373639a1de2130cfff980e3bb35e"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "wiyang@linkedin.com",
        "time": "Thu Jun 04 23:28:25 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 14:28:25 2026 +0800"
      },
      "message": "[AURON #2304] Add end-to-end IT coverage for composed native Calc predicates and expressions (#2306)\n\n# Which issue does this PR close?\n\nCloses #2304\n\n# Rationale for this change\n\nSeveral operator *combinations* convert into a single native Flink Calc\nnow that the expression converters merged (#1859 math, #1860 logical,\n#1861 comparison/LIKE), but they lacked end-to-end `ITCase` coverage —\neach composed case could not be tested while its partner operator still\nfell back, so only the per-operator converter unit tests existed. This\nadds the missing end-to-end coverage so a regression in the composed\nnative path is caught. Test-only; no production change.\n\n# What changes are included in this PR?\n\nFive end-to-end `ITCase` methods over the existing `T1` table, asserting\nthe final row set (native-on):\n\n`AuronFlinkCalcITCase` (compound filters):\n- `testFilterAndComparison` — `where int \u003c\u003e 1 AND ts \u003d \u00272020-10-10\n00:00:02\u0027` → `[2]`\n- `testFilterOrComparison` — `where int \u003d 1 OR ts \u003d \u00272020-10-10\n00:00:03\u0027` → `[1, 2]`\n- `testFilterNotLike` — `where string NOT LIKE \u0027Comment%\u0027` → `[\"Hi\"]`\n\n`AuronCalcRewriteITCase` (CASE projections):\n- `testCaseWhenComparisonGuard` — `CASE WHEN int \u003e 1 THEN int * 2 ELSE 0\nEND` → `[0, 4, 4]`\n- `testCaseWhenMultipleBranches` — `CASE WHEN int \u003d 1 THEN \u0027one\u0027 WHEN\nint \u003e 2 THEN \u0027big\u0027 ELSE \u0027two\u0027 END` → `[\"one\", \"two\", \"two\"]`\n\nThe compound predicates cross two columns deliberately: a same-column\ncompound (e.g. `int \u003e 1 AND int \u003c 5`) is folded by Calcite\u0027s\n`RexSimplify` into a single `SEARCH` before reaching the converter, so\nit would not build a native `And`/`Or` node. String operands use\nequality (varchar inequalities currently fall back), and the comparisons\navoid decimal-literal-vs-`DOUBLE` forms. Both operands of each compound\nare load-bearing, so an `AND`/`OR` swap changes the asserted row set.\n\n# Are there any user-facing changes?\n\nNo.\n\n# How was this patch tested?\n\nThese are the tests. The full `auron-flink-planner` module passes\n(109/109) with 0 Checkstyle violations. Each new test was confirmed to\nexecute natively during development — the runtime plan dump shows the\nexpected native node (`FilterExec [int !\u003d 1 AND ts \u003d ...]`, `FilterExec\n[int \u003d 1 OR ts \u003d ...]`, `FilterExec [NOT string LIKE Comment%]`, and\n`ProjectExec [CASE WHEN ... END]`) over the FFI reader, rather than a\nFlink-codegen fallback."
    },
    {
      "commit": "fdd96ec0924c373639a1de2130cfff980e3bb35e",
      "tree": "4caa3fc409dd52ba4605052e9035518aa99c75bd",
      "parents": [
        "f36b4b47a55c81b19352e7693477acd5dcdd6ff3"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "wiyang@linkedin.com",
        "time": "Thu Jun 04 00:54:26 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 15:54:26 2026 +0800"
      },
      "message": "[AURON #1864] Convert Cast operators to native operators (#2303)\n\n# Which issue does this PR close?\n\nCloses #1864\n\n# Rationale for this change\n\nFlink SQL `CAST(x AS T)` is strict — it must error on a bad conversion\n(overflow, unparseable string) — while `TRY_CAST(x AS T)` returns NULL.\nThe Flink converter previously routed explicit `CAST` to the native\ntry-cast node, so a failing `CAST` silently returned NULL instead of\nerroring, changing query semantics under native acceleration. It also\naccepted every cast unconditionally, with no source→target type\nvalidation, even though the native cast kernels do not faithfully cover\nevery type pair.\n\nThis PR makes cast conversion faithful to Flink semantics and safe\nagainst kernel mismatches: strict `CAST` errors, `TRY_CAST` nulls, and\nconversions outside a conservative supported set fall back to Flink\u0027s\nengine.\n\n# What changes are included in this PR?\n\nCommit 1 — gate cast type support and convert `TRY_CAST`:\n- Add a source→target type gate (`isCastTypeSupported`) so only\nnumeric↔numeric, numeric→string, string→numeric, and boolean↔string\nconversions convert natively; everything else (temporal, complex, etc.)\nfalls back to Flink.\n- Support explicit `TRY_CAST`, matched by operator identity\n(`FlinkSqlOperatorTable.TRY_CAST`) since its `SqlKind` is\n`OTHER_FUNCTION`, routing it to the native try-cast node (NULL on\nfailure).\n\nCommit 2 — route explicit `CAST` to the strict native cast node:\n- Add `wrapInCast` / `buildCast` and route explicit `CAST` to the strict\n`PhysicalCastNode` (errors on failure), where it previously used the\ntry-cast node.\n- Internal widening promotions (arithmetic, comparison, CASE) are\nunchanged and still use try-cast — widening never fails, so try-cast is\ncorrect there.\n\nNo protobuf, native-engine, or dependency changes — both cast nodes\nalready exist.\n\n# Are there any user-facing changes?\n\nYes. Flink SQL `CAST` now executes with strict (error-on-failure)\nsemantics natively, matching Flink, and `TRY_CAST` executes with\nnull-on-failure semantics. Casts to currently-unsupported types\ntransparently fall back to Flink\u0027s engine and produce the same results\nas before.\n\n# How was this patch tested?\n\nUnit tests in `RexCallConverterTest` cover strict `CAST` (strict node),\n`TRY_CAST` (try node), the supported-type pairs, and unsupported pairs\nthat fall back. End-to-end SQL tests in `AuronFlinkCalcITCase` run\n`CAST` and `TRY_CAST` queries (including a non-parseable string under\n`TRY_CAST` yielding NULL) and a cast-to-unsupported-type query that\nfalls back, all asserting the native row-set. Full `auron-flink-planner`\nmodule suite passes (117 tests) with 0 Checkstyle violations."
    },
    {
      "commit": "f36b4b47a55c81b19352e7693477acd5dcdd6ff3",
      "tree": "b41cab0f755ed54f2e9edd1bf41c5ad3524329e0",
      "parents": [
        "a0e2b5f787073c50d24bbce9e7059f2e22e1dbf1"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jun 04 12:07:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 12:07:02 2026 +0800"
      },
      "message": "Bump log from 0.4.30 to 0.4.31 (#2305)"
    },
    {
      "commit": "a0e2b5f787073c50d24bbce9e7059f2e22e1dbf1",
      "tree": "e2ed526590a71153dd24055e737a45033d786d82",
      "parents": [
        "67a7ac4fc66ba17c7fc461794ee0ccb680fa8cd3"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "wiyang@linkedin.com",
        "time": "Wed Jun 03 04:38:22 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 19:38:22 2026 +0800"
      },
      "message": "[AURON #1861] Convert comparison operators and LIKE to native operators (#2298)\n\n# Which issue does this PR close?\n\nCloses #1861\n\n# Rationale for this change\n\nFlink Calc expressions that use comparison operators (`\u003d`, `\u003c\u003e`, `\u003e`,\n`\u003c`, `\u003e\u003d`, `\u003c\u003d`) or `LIKE` could not run on the Auron native engine —\nthe Flink `RexCallConverter` recognized only arithmetic and `CAST`, so\nany Calc containing a comparison fell back to the Flink engine.\nComparisons are the backbone of `WHERE`/`JOIN`/`CASE` predicates, so\nwithout them most real queries cannot be accelerated.\n\n# What changes are included in this PR?\n\nExtends the existing `RexCallConverter` (no proto, Rust, or dependency\nchanges — the native plumbing already exists for all of these\noperators):\n\n- **Comparison operators** → `PhysicalBinaryExprNode` with op strings\n`Eq` / `NotEq` / `Gt` / `Lt` / `GtEq` / `LtEq`. Operands are promoted to\na common type before conversion (the native comparison kernel requires\nmatching operand types and performs no implicit coercion); the boolean\nresult needs no output cast.\n- **`LIKE`** → the dedicated `PhysicalLikeExprNode`. `LIKE ... ESCAPE c`\n(explicit, non-default escape) is reported unsupported so the Calc falls\nback, since the native like node has no escape field. `NOT LIKE` is\nrepresented by Calcite as `NOT(LIKE(...))`; it converts end-to-end once\nthe logical `NOT` converter is in place, and falls back to Flink until\nthen.\n\nTwo commits: one for the six comparison operators, one for `LIKE`.\n\nA few existing tests used `EQUALS` as a known-unsupported operator to\nexercise the fallback path; now that comparisons are supported, they use\n`SIMILAR TO` (still unsupported) to keep testing fallback.\n\n# Are there any user-facing changes?\n\nFlink queries whose Calc predicates use these comparison operators or\n`LIKE` now execute on the native engine instead of falling back to\nFlink. No API or configuration change.\n\n# How was this patch tested?\n\nNew unit tests in `RexCallConverterTest` cover each comparison\noperator\u0027s native op string, operand type promotion, `LIKE`, the\n`NOT(LIKE)` fallback, and the explicit-`ESCAPE` fallback. The full\n`auron-flink-planner` module test suite passes (82 tests), with 0\nCheckstyle violations."
    },
    {
      "commit": "67a7ac4fc66ba17c7fc461794ee0ccb680fa8cd3",
      "tree": "aced4133836881d2b57665527c22448fea08b0ac",
      "parents": [
        "f95e9033aa8f5f3338c8ed6af609867049117294"
      ],
      "author": {
        "name": "cxzl25",
        "email": "3898450+cxzl25@users.noreply.github.com",
        "time": "Wed Jun 03 15:58:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 15:58:11 2026 +0800"
      },
      "message": "[AURON #2299] bump maven from 3.9.12 to 3.9.16 (#2300)\n\n# Which issue does this PR close?\n\nCloses #2299\n\n# Rationale for this change\n\n# What changes are included in this PR?\n\n# Are there any user-facing changes?\n\n# How was this patch tested?"
    },
    {
      "commit": "f95e9033aa8f5f3338c8ed6af609867049117294",
      "tree": "b0a89b2fee34bd9d9798b52db03a9ba5b1508c93",
      "parents": [
        "2f3a748c80d6ef924d4cc9bdaa78842d42cfc054"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "wiyang@linkedin.com",
        "time": "Tue Jun 02 23:06:29 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 14:06:29 2026 +0800"
      },
      "message": "[AURON #1860] Convert logical operators to Native operators (#2297)\n\n# Which issue does this PR close?\n\nCloses #1860\n\n# Rationale for this change\n\nThe Flink Calc pipeline rewrites Flink\u0027s `StreamExecCalc` into a native\nplan by converting each Calcite `RexNode` to an Auron `PhysicalExprNode`\nvia the `FlinkNodeConverterFactory` framework. Until now only math\noperators converted; a `Calc` containing a logical or conditional\nexpression (`AND`, `OR`, `NOT`, `IS NULL`, `IS NOT NULL`, `CASE WHEN`)\nfailed conversion and fell back to Flink\u0027s CodeGen Calc. This PR adds\nthose converters so such Calcs run natively. Flink `IF(c, a, b)` is\nplanned as `CASE`, so it is covered as well.\n\nThis follows the established math-operator converter pattern and is a\nclean Wave-1 converter change: no native-engine change, no protobuf\nchange, no new dependency.\n\n# What changes are included in this PR?\n\nExtends `RexCallConverter` (the framework\u0027s single `RexCall` converter)\nwith the logical `SqlKind`s and one helper per operator:\n\n- `AND` / `OR` → binary `PhysicalBinaryExprNode` with op `\"And\"` /\n`\"Or\"`. Calcite flattens `a AND b AND c` into one n-ary `RexCall`, so\noperands are folded left-deep into nested binaries.\n- `NOT` → `PhysicalNot`; `IS NULL` → `PhysicalIsNull`; `IS NOT NULL` →\n`PhysicalIsNotNull` (single-child wrappers).\n- `CASE WHEN` → `PhysicalCaseNode` with `PhysicalWhenThen` branches.\nEach `then` branch and the `else` are cast to the CASE result type,\nbecause the native `CaseExpr` does not cast its branches and DataFusion\nrequires a consistent branch type.\n\nTwo commits: the boolean operators first, then `CASE WHEN` on its own.\n\n# Are there any user-facing changes?\n\nNo API changes. More Flink SQL `Calc` expressions now execute natively\ninstead of falling back to Flink\u0027s CodeGen path; behavior is unchanged,\nand any unsupported expression still falls back transparently.\n\n# How was this patch tested?\n\nNew unit tests in `RexCallConverterTest` cover each operator: AND\n(2-operand and 3-operand left-deep fold), OR, NOT, IS NULL, IS NOT NULL,\nand CASE WHEN (branches matching the result type with no cast, branches\nneeding a cast, and multiple branches). Full `auron-flink-planner`\nmodule suite passes (81 tests, including the `StreamExecCalc` and\nKafka-source integration tests that exercise the Calc path) with 0\nCheckstyle violations."
    },
    {
      "commit": "2f3a748c80d6ef924d4cc9bdaa78842d42cfc054",
      "tree": "7e051fde253f85cbd398aa8d51ba09b88160787a",
      "parents": [
        "e8fd41061b2393e3e3ae754b9df50cf57a510804"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "wiyang@linkedin.com",
        "time": "Mon Jun 01 19:20:58 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 10:20:58 2026 +0800"
      },
      "message": "[AURON #2291] Make auron-flink-assembly the structural deployment jar (#2292)\n\n# Which issue does this PR close?\n\nCloses #2291\n\n# Rationale for this change\n\n`auron-flink-assembly` is the single Flink deployment jar. It already\nbundles both Auron\u0027s `StreamExecCalc` override and Flink\u0027s stock\n`StreamExecCalc` (transitive from `flink-table-planner_2.12`), but with\nno class-level filter the surviving copy was decided by maven-shade\u0027s\nclass-overlap ordering — not a guarantee. This makes Auron\u0027s override\nwin structurally, so activation no longer depends on incidental\nshade/classpath ordering.\n\n# What changes are included in this PR?\n\n- Exclude Flink\u0027s stock `StreamExecCalc` from the shaded jar so only\nAuron\u0027s override remains.\n- Add ASF NOTICE/LICENSE for the embedded modified Flink content, plus a\nfull audit of bundled non-ALv2 dependencies (icu4j, protobuf, kryo,\nminlog, janino, commons-compiler, zstd-jni, jts-core, checker-qual).\n- Add `AssemblyJarStructureIT`, a build-time test asserting the jar\ncontains exactly one `StreamExecCalc` and it is Auron\u0027s.\n- Run the structural test in the Flink CI workflow.\n\n# Are there any user-facing changes?\n\nThe recommended deployment becomes a single structural jar swap (remove\n`flink-table-planner-loader-*.jar` from `$FLINK_HOME/lib/`, add\n`auron-flink-assembly.jar`). The user-facing deployment documentation is\ntracked separately in #1892.\n\n# How was this patch tested?\n\n`AssemblyJarStructureIT` (build-time, runs in CI). Manually verified the\nloader to non-loader jar swap on a Flink 1.18 home running a Calc SQL\nwith native conversion active."
    },
    {
      "commit": "e8fd41061b2393e3e3ae754b9df50cf57a510804",
      "tree": "8f2c79254f7f97e0ee46d8e4a7b3be0534cf0407",
      "parents": [
        "ed400ccbb7384a6eb67eccc8262c12bd42191c63"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Sat May 30 08:52:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 29 17:52:13 2026 -0700"
      },
      "message": "[AURON #1724] Support binary input for Spark `substring` function (#2262)\n\n# Which issue does this PR close?\n\nCloses https://github.com/apache/auron/issues/1724\n\n# Rationale for this change\n\nSpark `substring` supports both string and binary inputs, while Auron\npreviously mapped it to datafusion\u0027s `Substr`, which only handled\nstring-compatible behavior and caused the Spark string/binary substring\nsuite case to be excluded.\n\n# What changes are included in this PR?\n\n- Add native `Spark_Substring` ext function support for `Utf8` and\n`Binary` inputs.\n- Route Spark `Substring` conversion through `Spark_Substring` and\npreserve the input data type.\n  - Add native unit coverage for string and binary substring.\n  - Re-enable `string / binary substring function` test case.\n\n# Are there any user-facing changes?\n\nYes. Spark SQL `substring` now supports binary input in native\nexecution, matching Spark behavior.\n\n# How was this patch tested?\n\n - Added native unit tests for `spark_substring`.\n - Spark String Function Suite"
    },
    {
      "commit": "ed400ccbb7384a6eb67eccc8262c12bd42191c63",
      "tree": "db118c77cc75c101ed2aa2eeea68a182623c7401",
      "parents": [
        "af447766b4a1851ec5818695f1a50c02ddc19016"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "wiyang@linkedin.com",
        "time": "Thu May 28 19:32:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 29 10:32:56 2026 +0800"
      },
      "message": "[AURON #1853] Convert Flink Calc operators to Native Calc operators (#2283)\n\n# Which issue does this PR close?\n\nCloses #1853\n\n# Rationale for this change\n\n`FlinkAuronCalcOperator` (#1857) can execute Flink Calc plans natively\nbut is unreachable from real Flink SQL jobs — the planner instantiates\nFlink\u0027s stock `StreamExecCalc` which builds a JVM codegen operator via\n`CodeGenOperatorFactory\u003cRowData\u003e`. This PR closes the loop: a shadowed\n`StreamExecCalc` in `auron-flink-planner` (at the same FQCN as Flink\u0027s,\npicked up by classpath ordering) attempts to translate its `projection`\n+ `condition` `RexNode`s into a native `Project[Filter?[FFIReader]]`\nplan using the converter framework (#1856 / #1859). On success, it\nconstructs a `FlinkAuronCalcOperator` inline; on any failure, it falls\nback transparently to Flink\u0027s stock Calc via\n`super.translateToPlanInternal`.\n\nAfter this PR, a `SELECT a + 1 FROM t` query routes through Auron\u0027s\nnative arithmetic instead of Flink\u0027s codegen-Calc bytecode — the first\nend-to-end Flink-on-Auron acceleration path is operational. Subsequent\nsub-issues (#1860 / #1861 / #1862 / #1863 / #1864) layer on more\n`RexNode` converters; #1865 adds source-Calc fusion. This PR provides\nthe substitution mechanism they all plug into.\n\n# What changes are included in this PR?\n\nSix commits, each independently reviewable.\n\n**Commit 1** — `Register built-in RexNode converters; add fallback\nconfig option`\n- `FlinkNodeConverterFactory` ships the three built-in converters\n(`RexInputRefConverter`, `RexLiteralConverter`, `RexCallConverter`) on\nits singleton at class load.\n- `FlinkAuronConfiguration` gains `FAIL_BACK_FLINK_ENGINE_ENABLED`\n(boolean, default `true`, key `auron.failback.flink.engine.enabled`).\n\n**Commit 2** — `Shadow Flink\u0027s StreamExecCalc to attempt native Calc`\n- New\n`org.apache.flink.table.planner.plan.nodes.exec.stream.StreamExecCalc`\nin `auron-flink-planner` at the same FQCN as Flink\u0027s; classpath ordering\nsurfaces this class to the planner.\n- `translateToPlanInternal` builds\n`Project[Filter?[FFIReader-placeholder]]` via `tryBuildAuronPlan(...)`;\nthe FFIReader leaf carries a placeholder resource ID that\n`FlinkAuronCalcOperator.open()` rewrites at runtime per the #1857\ncontract.\n- Observability: WARN per unique unsupported `RexNode` class\n(deduplicated by `ThreadLocal\u003cSet\u003e`) + WARN per plan-composition\nexception (with stack trace).\n- `FlinkAuronCalcOperator.NativeRuntimeFactory` now `extends\njava.io.Serializable` so the operator survives TaskManager dispatch.\nInterface is `@VisibleForTesting` package-private; public API unchanged.\n\n**Commit 3** — `Add AuronCalcRewriteITCase for end-to-end Flink SQL\ncoverage`\n- Four SQL-level tests against `TestValuesTableFactory`: multi-column\nnative projection, filter-with-fallback (`\u003e` not yet\nconverter-supported), unsupported-function silent fallback (`UPPER`),\nmixed Calcs (`UNION ALL` with one convertible + one non-convertible).\n\n**Commit 4** — `Decouple StreamExecCalcTest from javac\u0027s StreamExecCalc\nbinding`\n- Replaced direct `StreamExecCalc.peekWarnEmitCountForTest()` calls with\na new `invokeStaticInt(Class, String)` reflection helper, matching the\nexisting `invokeStatic` pattern.\n- Dropped `@Override` on `CapturingTranslator.translateToFlinkCalc`;\nruntime virtual dispatch routes correctly via the loaded shadow.\n\n**Commit 5** — `Complete native Calc runtime path for Flink`\n\nThree runtime defects fixed at root cause:\n\n- **`INPUT_BATCH_STATISTICS_ENABLE` added to `FlinkAuronConfiguration`**\n(default `false`). The native execution context queries this key by\nreflection on every Auron-native plan; absence on\n`FlinkAuronConfiguration` (only `SparkAuronConfiguration` had it) NPE\u0027d\nbefore the first batch.\n- **`FlinkAuronCalcOperator.open` now builds a metric tree mirroring the\nplan shape** via a new `buildMetricTree(plan, mg)` helper. Native\nfinalization walks the metric tree in lockstep with\n`Project[Filter?[FFIReader]]` and calls `MetricNode.getChild(i)`; the\nprevious `Collections.emptyList()` IOOBE\u0027d.\n- **Native runtime construction deferred from `open()` to first\nnon-empty `drainNative()`.** `JniBridge.callNative` spawns a tokio task\nthat immediately streams output through the FFI Reader; on the first\npull from an empty exporter the reader saw EOF and called\n`exporter.close()`, nulling the writer. `reinitExporterAndRuntime` now\nleaves `nativeRuntime` null between cycles.\n`FlinkAuronCalcOperatorTest`\u0027s multi-cycle drain contract was updated\n(factory invocations \u003d drain cycles, not `1 + N`).\n\n**Commit 6** — `Read Arrow timestamp unit from vector instead of\nassuming microseconds`\n- `ArrowTimestampColumnVector.getTimestamp` previously hard-coded\n`floorDiv(raw, 1000)`. `FlinkArrowUtils.toArrowSchema` already maps\nFlink TIMESTAMP precision to four Arrow units (`SECOND` / `MILLISECOND`\n/ `MICROSECOND` / `NANOSECOND`) and `TimestampWriter.doWrite` writes\nsymmetrically across all four — only the reader was unit-blind, which\nshrank `2026-03-16T12:03` down to `1970-01-21T12:41:02.580` on\n`Timestamp(Millisecond)` vectors.\n- Now reads `TimeUnit` from `vector.getField().getType()` at\nconstruction and dispatches on it (`SECOND × 1000`, `MILLISECOND`\nidentity, `MICROSECOND ÷ 1000`, `NANOSECOND ÷ 1_000_000`).\n- New `FlinkArrowReaderTest` cases (`testTimestampMilliVector`,\n`testTimestampSecVector`, `testTimestampNanoVector`).\n\n# Are there any user-facing changes?\n\n1. **Native acceleration for Calc operators** — any Flink SQL `SELECT …\nWHERE …` whose projection and condition use only converter-supported\n`RexNode`s now runs through Auron\u0027s native engine. Today\u0027s supported set\n(from #1859): `RexInputRef`, `RexLiteral`, `RexCall` with `SqlKind` in\n`{+, -, *, /, %, MINUS_PREFIX, PLUS_PREFIX, CAST}`.\n\n2. **Two new config options on `FlinkAuronConfiguration`:**\n- `flink.auron.failback.flink.engine.enabled` (boolean, default `true`).\nWhen `true`, an unsupported `RexNode` silently falls back to Flink\u0027s\ncodegen Calc. When `false`, conversion failure throws\n`IllegalStateException` at job submission.\n- `flink.auron.input.batch.statistics.enable` (boolean, default\n`false`). Mirrors Spark\u0027s `INPUT_BATCH_STATISTICS_ENABLE`; queried by\nthe native engine on every Auron-native plan.\n\n3. **WARN log lines on fallback** — TaskManager logs surface\nper-unique-RexNode-class lines like `Auron StreamExecCalc fallback (node\n17): unsupported RexNode org.apache.calcite.rex.RexFieldAccess; using\nFlink CodeGen Calc.` and per-exception lines including the stack trace.\n\nNo deprecations. No removed APIs.\n\n# How was this patch tested?\n\nCI: **123 / 123 checks passing**.\n\nUnit tests:\n- `StreamExecCalcTest` — 12 tests: plan-build paths, fallback paths,\nstrict mode, WARN dedup.\n- `FlinkAuronCalcOperatorTest` — 14 tests: open / processElement / drain\n/ close lifecycle, including the deferred-native-runtime contract.\n- `FlinkArrowReaderTest` — 25 tests; new\n`testTimestamp{Milli,Sec,Nano}Vector` lock the Arrow time-unit dispatch.\n- `FlinkAuronConfigurationTest`, `FlinkNodeConverterFactoryTest`.\n\nIntegration tests (real `StreamTableEnvironment` against\n`TestValuesTableFactory` / Kafka source):\n- `AuronCalcRewriteITCase` — 4 tests covering native + fallback + mixed\npaths.\n- `AuronFlinkCalcITCase.testPlus` — `SELECT \\`int\\` + 1 FROM T1`\nend-to-end through native.\n- `AuronKafkaSourceITCase` — 4 windowed-aggregation tests;\npost-aggregate Calc routes through the native operator.\n\nCommand:\n\n```bash\n./build/mvn test -Pspark-3.5,scala-2.12,flink-1.18 \\\n    -pl auron-flink-extension/auron-flink-planner,auron-flink-extension/auron-flink-runtime\n```\n\nBuild the native library first via `./auron-build.sh --pre --sparkver\n3.5 --scalaver 2.12` to exercise the Auron-execution paths.\n\nCheckstyle: 0 violations on both modules."
    },
    {
      "commit": "af447766b4a1851ec5818695f1a50c02ddc19016",
      "tree": "362079e47769bb6f732d607a767449d53a1e6cb5",
      "parents": [
        "f894f53d255b88d610230143e6b559b8fbfbeb28"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed May 27 21:35:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 21:35:48 2026 +0800"
      },
      "message": "Bump log from 0.4.29 to 0.4.30 (#2288)"
    },
    {
      "commit": "f894f53d255b88d610230143e6b559b8fbfbeb28",
      "tree": "276d3ff502a6a94113ed6e26240d0422b38e4db3",
      "parents": [
        "576a9d78d93a25ab8fe345dc22bc4c00acaf75ed"
      ],
      "author": {
        "name": "yaommen",
        "email": "myanstu@163.com",
        "time": "Wed May 27 15:39:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 15:39:39 2026 +0800"
      },
      "message": "[AURON #2172] Add parquet suite wrappers for Spark versions (#2281)\n\n# Which issue does this PR close?\n\nCloses #2172\n\n# Rationale for this change\n\nSpark 3.3 already has Parquet correctness test wrappers. This PR extends\nthe same Parquet correctness coverage to the other supported Spark test\nmodules requested by the issue.\n\n# What changes are included in this PR?\n\n- Add Parquet correctness suite wrappers for:\n  - Spark 3.1\n  - Spark 3.2\n  - Spark 3.4\n  - Spark 3.5\n  - Spark 4.0\n  - Spark 4.1\n- Enable the Parquet suites in each corresponding\n`AuronSparkTestSettings`.\n- Enable Spark correctness tests in CI for the affected Spark versions.\n- Add version-specific exclusions for unsupported or failing Parquet\ncorrectness cases.\n- Skip suites that are not available in the corresponding Spark version.\n\n# Are there any user-facing changes?\n\nNo. This PR only adds test coverage.\n\n# How was this patch tested?\n\n- Ran affected Spark correctness tests locally.\n- Verified GitHub CI is green."
    },
    {
      "commit": "576a9d78d93a25ab8fe345dc22bc4c00acaf75ed",
      "tree": "989540309595ed6394a2fe9220811b6a6af4c9cc",
      "parents": [
        "e303eb384b74f7699630ebbc71cac4e35c270020"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue May 26 20:40:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 20:40:22 2026 +0800"
      },
      "message": "Bump prost-reflect from 0.16.3 to 0.16.4 (#2286)"
    },
    {
      "commit": "e303eb384b74f7699630ebbc71cac4e35c270020",
      "tree": "92a3c717aa61d8acdeef4b26cae198f7a1e79ce5",
      "parents": [
        "1d32dbe20bb68324ac1adfb84a7982c61482432c"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Sat May 23 11:54:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 23 11:54:18 2026 +0800"
      },
      "message": "[AURON #2273] Fallback Hudi incremental queries from native scan conversion (#2274)\n\n# Which issue does this PR close?\n\nCloses #2273 \n\n# Rationale for this change\n\nHudi incremental queries depend on Hudi timeline and instant filtering\nsemantics. Native Hudi scan currently converts supported Hudi file scans\nto native Parquet/ORC scans, but native scan does not implement\nincremental query semantics. These queries should fallback to Spark/Hudi\nuntil incremental scan support is explicitly added.\n\n# What changes are included in this PR?\n\n- Detect incremental Hudi query options in `HudiScanSupport`.\n- Fallback native scan conversion when:\n  - `hoodie.datasource.query.type\u003dincremental`\n  - `hoodie.datasource.read.begin.instanttime`\n  - `hoodie.datasource.read.end.instanttime`\n- Add unit coverage for incremental query options, including\ncase-insensitive option keys.\n\n# Are there any user-facing changes?\nYes. Hudi incremental queries will stay on Spark/Hudi scan instead of\nbeing converted to native scan.\n\n# How was this patch tested?\n- Added unit coverage in `HudiScanSupportSuite`.\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e"
    },
    {
      "commit": "1d32dbe20bb68324ac1adfb84a7982c61482432c",
      "tree": "ea33f56cd44eca95278c90631a62d7a56b9080f0",
      "parents": [
        "f35b97fbae5bb4ed787db40b9ff82d5c2039bae9"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Wed May 20 17:37:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 17:37:16 2026 +0800"
      },
      "message": "[AURON #2183] Implement native support for ORC InsertIntoHiveTable writes (#2191)\n\n# Which issue does this PR close?\n\nCloses #2183 \n\n# Rationale for this change\nAuron already supports native Parquet InsertIntoHiveTable writes, but\nORC Hive writes still fall back to Spark’s regular execution path. This\nleaves native write coverage incomplete for a common Hive storage\nformat.\n\nThis PR adds native support for ORC InsertIntoHiveTable writes so\neligible Hive ORC write workloads can stay on the native path instead of\nfalling back.\n\n# What changes are included in this PR?\nThis PR:\n- adds native ORC sink support in the native engine\n- adds planner / proto support for ORC sink execution\n- adds Spark-side physical plan support for native ORC\nInsertIntoHiveTable\n- extends AuronConverters to convert supported Hive ORC write plans to\nthe native path\n- adds ORC sink utilities for task output path generation and output\ncompletion\n- preserves dynamic partition write handling on the native ORC write\npath\n- adapts input batches to the expected ORC/Hive output schema before\nwriting\n- records output row and byte metrics for native ORC writes\n- adds execution coverage in AuronExecSuite\n\n\n# Are there any user-facing changes?\nYes.\n\nHive table writes using ORC may now remain on the native execution path\nwhen they match the supported InsertIntoHiveTable write pattern, instead\nof falling back to Spark’s regular write execution.\n\n# How was this patch tested?\nCI.\n\n---------\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e"
    },
    {
      "commit": "f35b97fbae5bb4ed787db40b9ff82d5c2039bae9",
      "tree": "457f78a7a17d6da82fdc56011196663dc1115a17",
      "parents": [
        "d04dc8c28df26c853107a4a5054a78ee089553b9"
      ],
      "author": {
        "name": "guixiaowen",
        "email": "58287738+guixiaowen@users.noreply.github.com",
        "time": "Wed May 20 12:03:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 12:03:20 2026 +0800"
      },
      "message": "[AURON #2238] Add support for auron.never.convert.reason in Iceberg scan scenarios  (#2237)\n\n# Which issue does this PR close?\n\nCloses #2238\n\n# Rationale for this change\n\nIn issue https://github.com/apache/auron/issues/1419, the reasons for\nfallback (i.e., why a conversion was not applied) are recorded using the\nproperty auron.never.convert.reason.\n\nIn issue https://github.com/apache/auron/pull/1471, these reasons can be\nobserved in the Spark UI, helping users understand why the physical\nexecution plan was not converted.\n\nHowever, in the current Iceberg fallback scenarios, the property\nauron.never.convert.reason is not recorded.\n\nThe purpose of this issue is to fill this gap by ensuring that\nauron.never.convert.reason is properly recorded in Iceberg-related\nfallback cases as well.\n\n# What changes are included in this PR?\n\nAfter an Iceberg scenario call fails, the error information will be\nrecorded in `auron.never.convert.reason` for easy display.\n\n# Are there any user-facing changes?\n\n# How was this patch tested?\n\nUT\n\n---------\n\nCo-authored-by: guihuawen \u003cguihuawen@didiglobal.com\u003e\nCo-authored-by: cxzl25 \u003c3898450+cxzl25@users.noreply.github.com\u003e\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "d04dc8c28df26c853107a4a5054a78ee089553b9",
      "tree": "3ffa063d44f238e53f5b18ba5a5e228bd825b60c",
      "parents": [
        "98539287f2e7ca83d85fe500bdbaaeea874a7b37"
      ],
      "author": {
        "name": "yaommen",
        "email": "myanstu@163.com",
        "time": "Tue May 19 22:22:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 07:22:08 2026 -0700"
      },
      "message": "[AURON #2171] Add sort suite wrappers for Spark versions (#2275)\n\n# Which issue does this PR close?\n\nCloses #2171\n\n# Rationale for this change\n\nSpark 3.3 already has sort operator correctness test wrappers. This PR\nextends the same sort correctness coverage to the other supported Spark\ntest modules requested by the issue.\n\n# What changes are included in this PR?\n\n- Add sort operator correctness suite wrappers for:\n  - Spark 3.1\n  - Spark 3.2\n  - Spark 3.4\n  - Spark 3.5\n  - Spark 4.0\n  - Spark 4.1\n- Enable `AuronDataFrameSuite` in each corresponding\n`AuronSparkTestSettings`.\n- Keep the same DataFrame suite exclusions as the existing Spark 3.3\nwrapper.\n\n# Are there any user-facing changes?\n\nNo. This PR only adds test coverage.\n\n# How was this patch tested?\n\n- Test compile for affected Spark 3.x and Spark 4.x test modules"
    },
    {
      "commit": "98539287f2e7ca83d85fe500bdbaaeea874a7b37",
      "tree": "c38af7f95ea3656eebb4d00c486cd7dee0405df2",
      "parents": [
        "28929fe30dfdf2a8ae5953f65bc7730e9ed2233d"
      ],
      "author": {
        "name": "cxzl25",
        "email": "3898450+cxzl25@users.noreply.github.com",
        "time": "Tue May 19 12:45:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 12:45:39 2026 +0800"
      },
      "message": "[AURON #2260] Add support for Spark 4.0 and 4.1 in build workflows (#2261)\n\n# Which issue does this PR close?\n\nCloses #2260\n\n# Rationale for this change\n\n# What changes are included in this PR?\n\nAdd Spark 4.0 and Spark 4.1 to the release build matrix across all\nplatforms (amd64, arm, macOS), with proper version constraints and\nDocker image support for JDK 17+.\n\n\n\n# Are there any user-facing changes?\n\n# How was this patch tested?\nGHA\n\n```bash\nAURON_JAVA_VERSION\u003d17 ./auron-build.sh --docker true --image rockylinux8 --release --sparkver 4.0 --scalaver 2.13\n```"
    },
    {
      "commit": "28929fe30dfdf2a8ae5953f65bc7730e9ed2233d",
      "tree": "f859e838aea57ab788730a31453e2aa83bb383e8",
      "parents": [
        "000c63f2b178ac53b4f53836d834513f30b9bc89"
      ],
      "author": {
        "name": "The Apache Software Foundation",
        "email": "root-asf-gitbox-commits@apache.org",
        "time": "Mon May 18 05:39:43 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 18:39:43 2026 +0800"
      },
      "message": "[AURON #2272] - [INFRA] Set up default rulesets for default and release branches (#2271)\n\nThis Pull Request enables the repository to conform with the \"sane\ndefault security settings\" of the Apache Software Foundation by\nconfiguring a default branch ruleset that protects the default branch\nand any release branches.\n\nNote that `~DEFAULT_BRANCH` is a GitHub symbolic link to the current\ndefault branch (HEAD) of the repository and does not need changing.\nIf the managing project does not wish to set up these defaults, please\nclose this Pull Request. Alternatively, the project may merge this Pull\nRequest to apply the changes immediately.\n\nIf no action is taken, this Pull Request will be automatically merged by\nthe Apache Infrastructure team on **2026-06-14** (30 days from now).\n\nFor any further information, please reach us on Slack or at:\nusers@infra.apache.org"
    },
    {
      "commit": "000c63f2b178ac53b4f53836d834513f30b9bc89",
      "tree": "5c6017238ac98e61d3a408c881d3d3085642d46b",
      "parents": [
        "4a5ed5c8f8c5d5d5530ef7a3d5c762fffb7f311a"
      ],
      "author": {
        "name": "yew1eb",
        "email": "yew1eb@gmail.com",
        "time": "Mon May 18 18:15:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 18:15:35 2026 +0800"
      },
      "message": "[AURON #2277] [build] Fix stale auronver in build-macos-releases.yml (#2278)\n\n# Which issue does this PR close?\n\nCloses #2277\n\n# Rationale for this change\n\n# What changes are included in this PR?\nUpdate auronver from 7.0.0-SNAPSHOT to 8.0.0-SNAPSHOT to match\nbuild-amd64-releases.yml and build-arm-releases.yml.\n\n# Are there any user-facing changes?\n\n# How was this patch tested?"
    },
    {
      "commit": "4a5ed5c8f8c5d5d5530ef7a3d5c762fffb7f311a",
      "tree": "a9ec2e7bed3cc83374c6fd7dc621015cd2b73556",
      "parents": [
        "f05c9da62e72395a776ffe4e34450d875119961e"
      ],
      "author": {
        "name": "Weiqing Yang",
        "email": "wiyang@linkedin.com",
        "time": "Mon May 18 03:13:14 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 18:13:14 2026 +0800"
      },
      "message": "[AURON #1857] Introduce FlinkAuronCalcOperator (#2263)\n\n# Which issue does this PR close?\n\nCloses #1857\n\n# Rationale for this change\n\nThis PR adds the Flink-side runtime operator that executes the native\nCalc plan composed by #1856 + #1859. It is the **operator layer** of the\nthree-layer architecture (plan / operator / graph-rewriter) for the\nFlink contribution track ([tracking issue\n#1264](https://github.com/apache/auron/issues/1264)).\n\nThe operator surface is intentionally free of `RexNode`,\n`StreamExecCalc`, and any Flink planner type — the constructor takes\nonly `PhysicalPlanNode`, `RowType`, `RowType`, and a string operator ID.\nThat invariant lets #1853 (rewrite `StreamExecCalc`) plug the operator\nin without dragging planner types into the runtime module.\n\nThis is the standalone-Calc MVP (Scenario B: with an FFI Reader leaf for\ninput). Source/operator fusion (Scenario A) is deferred to #1865, as\nendorsed by the reviewer.\n\n# What changes are included in this PR?\n\nThree sequential commits in `auron-flink-extension/auron-flink-runtime`:\n\n1. **`FlinkMetricNode`** (`org.apache.auron.flink.metric`) — extracts\nthe inline anonymous `MetricNode` currently in\n`AuronKafkaSourceFunction.run()` into a reusable class. Lazily maps each\nmetric name to a Flink `Counter` in a `ConcurrentHashMap` (native\ncallbacks may arrive on tokio threads). Non-positive deltas are ignored,\nmatching `SparkMetricNode` semantics.\n\n2. **`FlinkArrowFFIExporter`** (`org.apache.auron.flink.arrow`) —\nsynchronous `AuronArrowFFIExporter` that wraps `FlinkArrowWriter` so the\nnative engine can pull batches of `RowData` via the Arrow C-Data FFI.\nUnlike Spark\u0027s threaded `ArrowFFIExporter` (which absorbs iterator-side\nIO latency), this exporter runs synchronously on the operator thread.\nFlink Calc is push-based and Flink\u0027s runtime serializes operator calls\nwith the in-flight JNI call to `AuronCallNativeWrapper.loadNextBatch`\n(which runs on tokio\u0027s `spawn_blocking` pool), so there is no latency to\nabsorb and no concurrent producer to coordinate with. `rotateRoot()`\ncloses the previous `VectorSchemaRoot` before allocating a new one and\nrotates only after a successful FFI export, so the error path never\nleaks; `close()` is idempotent and verified to release all allocator\nmemory.\n\n3. **`FlinkAuronCalcOperator`**\n(`org.apache.auron.flink.runtime.operator`) — the operator itself.\nExtends `TableStreamOperator\u003cRowData\u003e` (so chaining is `ALWAYS` for\nfree) and implements `OneInputStreamOperator\u003cRowData, RowData\u003e` +\n`FlinkAuronOperator`. Public constructor is planner-free:\n`(PhysicalPlanNode plan, RowType inputRowType, RowType outputRowType,\nString auronOperatorId)`; a `@VisibleForTesting` overload accepts a\n`NativeRuntimeFactory` for the unit-test mock seam.\n\n`open()` composes the per-subtask operator ID, allocates a child\n`BufferAllocator`, builds the `FlinkMetricNode` and\n`FlinkArrowFFIExporter`, generates the runtime resource ID\n`FlinkAuronCalc-\u003cflinkOpId\u003e-\u003csubtask\u003e:\u003cUUID\u003e` (OQ1 resolution — operator\nID rides in the resource-ID prefix; **no proto change**), registers the\nexporter via `JniBridge.putResource(resourceId, exporter)`, recursively\nrewrites the FFI Reader leaf of the supplied plan to carry the bound\nresource ID, and constructs the native runtime via the factory seam.\n\n`processElement` buffers rows and drains on batch-full.\n`processWatermark` and `prepareSnapshotPreBarrier` drain before\nforwarding. `close()` uses nested try/finally so every resource is\ncleaned even on partial-init failure; the outer guard checks both\n`exporter` and `nativeRuntime` so a partial `open()` does not NPE during\ndrain.\n\n`injectFfiReaderLeaf` accepts `Project[Filter[FFIReader]]`,\n`Project[FFIReader]`, `Filter[FFIReader]`, and bare `FFIReader`.\nUnsupported shapes throw `IllegalArgumentException` with the offending\ntype in the message.\n\n**Explicitly out of scope** (per reviewer guidance):\n- No proto change, no Rust change (OQ1 resolution).\n- No graph rewriting — that\u0027s #1853.\n- No source/operator fusion — that\u0027s #1865.\n- `AuronKafkaSourceFunction` is **not** migrated to use\n`FlinkMetricNode` here — trivial follow-up, kept out to minimize diff.\n- `BATCH_ROW_LIMIT` is hard-coded at 8192; future PR wires it through\n`FlinkAuronConfiguration`.\n\n# Are there any user-facing changes?\n\nNo. This PR introduces internal classes used by the future\n`StreamExecCalc` rewriter (#1853). End-user behavior is unchanged until\n#1853 lands.\n\n# How was this patch tested?\n\n22 new JUnit 5 unit tests across three test classes:\n\n- `FlinkMetricNodeTest` (4) — counter creation, counter caching, `v \u003e 0`\ngate, child propagation.\n- `FlinkArrowFFIExporterTest` (5) — schema FFI round-trip, 100-row\nexport with `FlinkArrowReader`-based field-by-field verification, EOI\nempty-buffer semantics, EOI partial-batch flush, allocator-zero on\nclose.\n- `FlinkAuronCalcOperatorTest` (13) — `putResource` registration,\nresource-ID composition, FFI Reader injection (4 plan shapes + 1 throw\nbranch), `processElement` buffer + batch-full drain, watermark drain\nordering, pre-checkpoint barrier drain, idempotent `close()`,\n`SupportsAuronNative` accessors.\n\nAll tests run with `junit-jupiter-api` + `arrow-c-data` + `arrow-vector`\nonly — no `flink-test-utils`, no `libauron` invocation, no Mockito. The\nnative runtime is mocked via a `@VisibleForTesting`\n`NativeRuntimeFactory` seam.\n\n```bash\n./build/mvn test -Pspark-3.5,scala-2.12,flink-1.18 \\\n    -pl auron-flink-extension/auron-flink-runtime \\\n    -Dtest\u003dFlinkMetricNodeTest,FlinkArrowFFIExporterTest,FlinkAuronCalcOperatorTest\n```\n\n- All 22 new tests pass.\n- Full `auron-flink-runtime` module: **129/129** tests pass (no\nregressions).\n- `./build/mvn checkstyle:check`: **0** violations."
    },
    {
      "commit": "f05c9da62e72395a776ffe4e34450d875119961e",
      "tree": "7a9af828d0d9e6b26b92f686a256c3cd4be348f9",
      "parents": [
        "08e9d57055232dd8db93aaea26a8221ef3e0102b"
      ],
      "author": {
        "name": "Ming Wei",
        "email": "weimingdiit@gmail.com",
        "time": "Sun May 17 14:10:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 14:10:54 2026 +0800"
      },
      "message": "[AURON #2250] Add native Hudi scan coverage for partitioned COW tables (#2251)\n\n# Which issue does this PR close?\n\nCloses #2250 \n\n# Rationale for this change\n\nPartitioned COW Hudi tables are a common use case, but native Hudi scan\ncoverage currently focuses on simple non-partitioned COW tables and\nfallback cases. Adding partitioned table coverage helps catch\nregressions around partition pruning and mixed partition/data filters.\n\n# What changes are included in this PR?\n\nAdd a partitioned COW Parquet Hudi table test.\n- Verify full scan query result correctness.\n- Verify partition pruning with a partition filter.\n- Verify combined partition filter and data filter.\n- Verify the Hudi convert provider can convert the scan to native\nParquet scan.\n\n# Are there any user-facing changes?\n\nNo. This PR only adds test coverage.\n\n# How was this patch tested?\n- Added Hudi scan support suite coverage.\n\nSigned-off-by: weimingdiit \u003cweimingdiit@gmail.com\u003e"
    }
  ],
  "next": "08e9d57055232dd8db93aaea26a8221ef3e0102b"
}
