)]}'
{
  "log": [
    {
      "commit": "bbf739a3cfe1d5cc7646e37250c947c6a56b5b0e",
      "tree": "ba4154a1e19e77d2ddae2b61e61731393331c4f2",
      "parents": [
        "110a90aeebe6cad3e2963f46463fb1e7c4e2cca7"
      ],
      "author": {
        "name": "Narendra",
        "email": "naskastark11@gmail.com",
        "time": "Sun Aug 16 14:20:33 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 14:20:33 2026 +0000"
      },
      "message": "feat: Add robots.txt to site (#24333)\n\n## Which issue does this PR close?\n\n- Closes #23258 \n\n## What changes are included in this PR?\nThere are 2 PR\u0027s for this issue. This one contains the changes for\n_robots.txt_\n\n- added the robots.txt , added license header and allow rules.\n\n## Are these changes tested?\nYes. Tested by building the docs and verifying the files getting\ngenerated in the build/\n\n## Are there any user-facing changes?\nNo.\n\n---------\n\nCo-authored-by: Jeffrey Vo \u003cjeffrey.vo.australia@gmail.com\u003e"
    },
    {
      "commit": "110a90aeebe6cad3e2963f46463fb1e7c4e2cca7",
      "tree": "1a9040f67b5ca93c6c0c3b6d3e758daa31c29962",
      "parents": [
        "aff5850c0aa604bb03158a137d5343e4efe73ae3"
      ],
      "author": {
        "name": "Narendra",
        "email": "naskastark11@gmail.com",
        "time": "Sun Aug 16 13:43:32 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 13:43:32 2026 +0000"
      },
      "message": "feat: add sphinx-sitemap dependency and configuration for sitemap generation (#24332)\n\n## Which issue does this PR close?\n\n- Part of #23258 \n\n## What changes are included in this PR?\nThere are 2 PR\u0027s for this issue. This one contains the changes for\nsitemap.xml\n- added the sphinx-sitemap build dependency.\n- enabled the sphinx_sitemap extension, set html_baseurl, and set\nsitemap_url_scheme \u003d \"{link}\"\n\n## Are these changes tested?\nYes. Tested by building the docs and verifying the files getting\ngenerated in the build/\n\n## Are there any user-facing changes?\nNo.\n\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nSigned-off-by: Reid Kaufmann \u003creid.kaufmann@gmail.com\u003e\nCo-authored-by: Daniël Heres \u003cdanielheres@gmail.com\u003e\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Liang-Chi Hsieh \u003cviirya@gmail.com\u003e\nCo-authored-by: Qi Zhu \u003czhuqilucas@gmail.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: linfeng \u003c33561138+lyne7-sc@users.noreply.github.com\u003e\nCo-authored-by: anchor \u003ccodeanqiang@gmail.com\u003e\nCo-authored-by: codeAnqiang-ma \u003c273298913+codeAnqiang-ma@users.noreply.github.com\u003e\nCo-authored-by: Adrian Garcia Badaracco \u003c1755071+adriangb@users.noreply.github.com\u003e\nCo-authored-by: dentiny \u003cdentinyhao@gmail.com\u003e\nCo-authored-by: kosiew \u003ckosiew@gmail.com\u003e\nCo-authored-by: Tim Saucer \u003ctimsaucer@gmail.com\u003e\nCo-authored-by: Subham Singhal \u003cSubhamSinghal@users.noreply.github.com\u003e\nCo-authored-by: Goutam Adwant \u003c8672451+goutamadwant@users.noreply.github.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e\nCo-authored-by: Burak Şen \u003cburaksenb@gmail.com\u003e\nCo-authored-by: RIchard Baah \u003c137434454+Rich-T-kid@users.noreply.github.com\u003e\nCo-authored-by: rich-T-kid \u003crichardbaah@MacBook-Air-de-Richard.local\u003e\nCo-authored-by: sakshichitnis27 \u003c156598682+sakshichitnis27@users.noreply.github.com\u003e\nCo-authored-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e\nCo-authored-by: Alvaro Balbin \u003c153404840+AlvaroBalbin@users.noreply.github.com\u003e\nCo-authored-by: Reid Kaufmann \u003c73494261+reidkaufmann@users.noreply.github.com\u003e\nCo-authored-by: Andy Grove \u003cagrove@apache.org\u003e\nCo-authored-by: kid \u003c19265318+u70b3@users.noreply.github.com\u003e\nCo-authored-by: Nagato Yuzuru \u003cnagato@yuzuru.me\u003e\nCo-authored-by: Jamison-J \u003cjiangzhen0929@163.com\u003e\nCo-authored-by: jiangzhen \u003cjiangzhen@nuanwa.net\u003e"
    },
    {
      "commit": "aff5850c0aa604bb03158a137d5343e4efe73ae3",
      "tree": "49f58d696b2ea6b2ecd1162fbef738dba084bc20",
      "parents": [
        "9fdf1447ef9e797181f9b93e81cde937181093e3"
      ],
      "author": {
        "name": "kosiew",
        "email": "kosiew@gmail.com",
        "time": "Sun Aug 16 12:21:31 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 12:21:31 2026 +0000"
      },
      "message": "Add per-aggregate argument evaluation metrics for grouped hash aggregation (#24024)\n\n#### Which issue does this PR close?\n\n* Part of #23570\n\n---\n\n## Rationale for this change\n\nGrouped hash aggregation currently exposes a single\n`aggregate_arguments_time` metric for all aggregate argument evaluation.\nThis makes it difficult to determine which aggregate expression is\nresponsible for argument evaluation cost when multiple aggregates are\npresent (for example, `SUM(a)` versus `SUM(b)`).\n\nThis change adds per-aggregate argument evaluation metrics while\npreserving the existing operator-level metric for compatibility.\n\n---\n\n## What changes are included in this PR?\n\n* Add an `AggregateArgumentMetrics` helper that registers one timer per\naggregate expression during operator construction.\n* Label per-aggregate metrics using the aggregate expression display\ntext (or alias), allowing otherwise identical aggregate functions on\ndifferent inputs (for example, `SUM(a)` and `SUM(b)`) to be\ndistinguished.\n* Wrap aggregate argument evaluation with the corresponding\nper-aggregate timer in:\n\n  * grouped hash aggregation stream\n  * migrated hash table aggregation paths\n  * ordered aggregation table paths\n* Introduce `OrderedAggregateTableMetrics` to carry both group-by and\naggregate argument metrics through ordered aggregation replay/spill\npaths.\n* Factor out a reusable `aggregate_metric_label` helper for consistent\nmetric labels.\n* Preserve the existing `aggregate_arguments_time` metric so whole-phase\ntiming continues to be reported.\n\n---\n\n## Are these changes tested?\n\nYes.\n\nThis PR adds and updates tests including:\n\n* `test_groupby_aggregate_argument_metrics_distinguish_inputs`, which\nverifies that separate metrics are created for `SUM(a)` and `SUM(b)`\nwith distinct metric names and aggregate labels.\n* Existing group-by metrics tests updated to use shared aggregate\nconstruction helpers.\n* Grouped hash aggregation stream tests updated to verify both:\n\n* the existing `aggregate_arguments_time` metric remains present and\nnon-zero, and\n* the new per-aggregate metric (`agg_expr_0_arguments_time`) is emitted\nand records time.\n\n---\n\n## Are there any user-facing changes?\n\nYes.\n\n`EXPLAIN ANALYZE` and execution plan metrics for the covered grouped\nhash aggregation paths now include per-aggregate argument evaluation\ntimers (for example, `agg_expr_0_arguments_time`) with aggregate labels\nidentifying the corresponding aggregate expression, while retaining the\nexisting `aggregate_arguments_time` metric for compatibility.\n\n---\n\n## LLM-generated code disclosure\n\nThis PR includes LLM-generated code and comments. All LLM-generated\ncontent has been manually reviewed."
    },
    {
      "commit": "9fdf1447ef9e797181f9b93e81cde937181093e3",
      "tree": "02ad295473720939140eff1b8d52e4762170c403",
      "parents": [
        "3359eab09e634bf8298d3edbd2906c042c61791c"
      ],
      "author": {
        "name": "Nuno Faria",
        "email": "nunofpfaria@gmail.com",
        "time": "Sun Aug 16 10:51:45 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 10:51:45 2026 +0000"
      },
      "message": "feat: Add support for Map type in SQL (#24397)\n\n## Which issue does this PR close?\n\n- Closes #24396.\n\n## Rationale for this change\n\nSupport the `Map` type directly in SQL, e.g., when creating tables.\n\n## What changes are included in this PR?\n\nThe sql-parser `DataType::Map` is now converted to the arrow type\n`DataType::Map`.\n\n## Are these changes tested?\n\nYes\n\n## Are there any user-facing changes?\n\nNew SQL type."
    },
    {
      "commit": "3359eab09e634bf8298d3edbd2906c042c61791c",
      "tree": "4a701bc7946c907e06d141f1af1501c56acb7374",
      "parents": [
        "b551ba03753d719ff83a14b7f8f36bf667cdee67"
      ],
      "author": {
        "name": "Jamison-J",
        "email": "jiangzhen0929@163.com",
        "time": "Sun Aug 16 07:07:40 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 07:07:40 2026 +0000"
      },
      "message": "feat: add implicit native coercion constructor (#24282)\n\n## Which issue does this PR close?\n\n- Closes #24135.\n\n## Rationale for this change\n\nWhen a coercion\u0027s desired type is a native logical type, callers\ncurrently have to repeat that type as both\n`TypeSignatureClass::Native(...)` and `default_casted_type`. This\nduplication is confusing and can allow the two values to disagree.\n\n## What changes are included in this PR?\n\n- Add `Coercion::new_implicit_native`, which derives\n`default_casted_type` from the desired logical type and delegates to the\nexisting `new_implicit` constructor.\n- Keep `Coercion::new_implicit` unchanged for backward compatibility and\nnon-native desired type classes.\n- Migrate the representative `reverse` and `approx_percentile_cont` call\nsites linked from the issue.\n- Update the `Coercion` rustdoc example and add a\nconstructor-equivalence unit test.\n\n## Are these changes tested?\n\nYes:\n\n- `cargo test -p datafusion-expr-common test_new_implicit_native --lib`\n- `cargo test -p datafusion-functions reverse --lib`\n- `cargo test -p datafusion-functions-aggregate approx_percentile_cont\n--lib`\n- `cargo test -p datafusion-expr-common --doc`\n- `cargo clippy -p datafusion-expr-common -p datafusion-functions -p\ndatafusion-functions-aggregate --all-targets --all-features -- -D\nwarnings`\n- `cargo fmt --all`\n\nThe required full-workspace `cargo clippy --all-targets --all-features\n-- -D warnings` was also attempted on Windows. It reached an unrelated\nMSVC native-link failure while building `protobuf-src`\n(`LNK2005`/`LNK4098` in `protoc-gen-upb`); affected-crate clippy passed\nwith warnings denied, and CI will run the full Linux workspace checks.\n\nNo benchmark was run because this is an API convenience constructor that\ndelegates to the existing constructor and does not change runtime\nexecution.\n\n## Are there any user-facing changes?\n\nYes. This adds the public `Coercion::new_implicit_native` convenience\nAPI. It is additive and backward compatible; existing `new_implicit`\ncallers continue to work unchanged.\n\n---------\n\nCo-authored-by: jiangzhen \u003cjiangzhen@nuanwa.net\u003e"
    },
    {
      "commit": "b551ba03753d719ff83a14b7f8f36bf667cdee67",
      "tree": "8bcad7d39c3c1b348ce3c9a2e6b41579a9a1e3a0",
      "parents": [
        "c1b39bd503cefcc170748216495191b3cdf567ae"
      ],
      "author": {
        "name": "Liang-Chi Hsieh",
        "email": "viirya@gmail.com",
        "time": "Sun Aug 16 07:04:16 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 07:04:16 2026 +0000"
      },
      "message": "fix: skip WindowTopN rewrite when fetch is 0 to avoid PartitionedTopK panic (#24405)\n\n## Which issue does this PR close?\n\n- Closes #24404.\n\n## Rationale for this change\n\nWith `datafusion.optimizer.enable_window_topn \u003d true`, a query filtering\na partitioned `ROW_NUMBER()`/`RANK()` with `rn \u003c 1` (or the flipped `1 \u003e\nrn`) panics with `PartitionedTopK requires k \u003e 0`.\n\n`ROW_NUMBER`/`RANK` are always `\u003e\u003d 1`, so such a predicate matches no\nrows and the correct result is empty — it must not panic. The\n`WindowTopN` rule\u0027s `extract_window_limit` maps `rn \u003c K` to a fetch of\n`K - 1`; for `K \u003d 1` that fetch is `0`, which is passed to\n`PartitionedTopKExec::try_new`, whose `assert!(k \u003e 0)` panics. With the\noptimization disabled the same query correctly returns no rows.\n\n## What changes are included in this PR?\n\n- In `WindowTopN::try_transform`, bail out of the rewrite when the\ncomputed limit is `0`, letting the regular `FilterExec` produce the\n(empty) result.\n- Add regression cases to `window_topn.slt` for `rn \u003c 1`, `1 \u003e rn`, and\n`rn \u003c\u003d 0` (all must return empty without panicking).\n\n## Are these changes tested?\n\nYes — the new sqllogictest cases fail (panic) without the fix and pass\nwith it. Existing `window_topn` tests continue to pass.\n\n## Are there any user-facing changes?\n\nNo API changes. `rn \u003c 1` / `1 \u003e rn` now returns an empty result instead\nof panicking when `enable_window_topn` is on, matching the behavior when\nit is off."
    },
    {
      "commit": "c1b39bd503cefcc170748216495191b3cdf567ae",
      "tree": "f8afb8120bb9550e9cf5d07b11f606cdd335471c",
      "parents": [
        "4042812a86f4a753c4b717ecbe12dbc928957254"
      ],
      "author": {
        "name": "RIchard Baah",
        "email": "137434454+Rich-T-kid@users.noreply.github.com",
        "time": "Sun Aug 16 02:55:39 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 02:55:39 2026 +0000"
      },
      "message": "Feat: add dictionaries as a supported group column type (#23187)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- works towards closing #22682.\n- replacement for https://github.com/apache/datafusion/pull/21765\n- -\nhttps://github.com/apache/datafusion/pull/21765#pullrequestreview-4546759419\n\n## Rationale for this change\n\nThis PR introduces a specialized `GroupColumn` implementation for\ndictionary-typed columns inside `GroupValuesColumn`, allowing dictionary\ncolumns to participate in the columnar, vectorized aggregation path\ninstead of the row-based fallback.\n\n**The Implementation is only about 175+ lines of code**. the remaining\nLOC is adding extensive test at the `GroupColumn` trait level as well as\ntesting the `GroupValuesColumn` GroupValues trait and how it inter-opts\nwith multi-dictionary group by\u0027s.\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\n\n- Adds a `DictionaryGroupValueBuilder` struct implementing the\n`GroupColumn` trait for `Dictionary`-typed group-by columns, supporting\na configurable subset of value types\n- Extends the type-check gate in `GroupValuesColumn::try_new` (the\n`matches!` block) to accept `Dictionary(_, value_type)` where\n`value_type` is already supported.\n- Adds schema-level support so emitted dictionary group key columns\nround-trip through the output schema correctly\n- [removes casting\n](https://github.com/apache/datafusion/blob/9e8dd76d6deb6736c51962d9c97e04be4e3f1fc9/datafusion/physical-plan/src/aggregates/group_values/multi_group_by/mod.rs#L1200)thats\ndone for each dictionary array in `emit`\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\nyes. a majority of this PR is test\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\nno. this is a pure perf boost for users.\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "4042812a86f4a753c4b717ecbe12dbc928957254",
      "tree": "12d8b2965c74a360ddd066de78ff7f18a19b1c43",
      "parents": [
        "2da78d67ce6dc3e2975906b3ca60e35cd1d9afed"
      ],
      "author": {
        "name": "Nagato Yuzuru",
        "email": "nagato@yuzuru.me",
        "time": "Sun Aug 16 02:31:43 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 02:31:43 2026 +0000"
      },
      "message": "fix: consider nulls_first when propagating ordered SortProperties (#24206)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #11596.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n\nPlease explain the problem you are trying to solve in terms of the\nuser-visible\nbehavior, rather than the implementation.\n\nFor example, \"The code in `foo.rs` doesn\u0027t handle nulls\" is a symptom of\nthe\nimplementation. \"COUNT(DISTINCT) returns wrong results when the column\ncontains\nnulls\" is the user-visible problem.\n--\u003e\n\nIn the original implementation, cases where `null_first` is not same\nwere not correctly handled and were still treated as `ordered`.\n\n\nExample: `a` sorted `ASC NULLS FIRST`, `b` sorted `ASC NULLS LAST`:\n\n| a    | b    | a + b |\n| ---- | ---- | ----- |\n| NULL | 1    | NULL  |\n| 1    | 2    | 3     |\n| 2    | 4    | 6     |\n| 3    | NULL | NULL  |\n\nSince `a + b` is `NULL` wherever either input is, the result has nulls\nat both ends. The previous code returned `Ordered(ASC, nulls_first:\ntrue)` for this case; it now returns `Unordered`.\n\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here, but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\nUnit Tests were added and issues were fixed. Additional processing was\nperformed on `and_or` (see\nhttps://github.com/apache/datafusion/issues/11596#issuecomment-5232788766\n)\n\nSortProperties::{add, sub, gt_or_gteq, and_or} now propagate an Ordered\nresult only when both operands agree on nulls_first; otherwise they\nreturn Unordered.\n\nThis is conservative. If one input were known to be non-null the old\nresult could be valid. But SortProperties carries no nullability\ninformation, so Unordered is the only sound answer at this layer.\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\nYes.\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\nNo."
    },
    {
      "commit": "2da78d67ce6dc3e2975906b3ca60e35cd1d9afed",
      "tree": "755c6647b0d809e312390932c8e0e107278a5bec",
      "parents": [
        "bf1c17ae6b41a0aa8fe95a7b20273aefb47d3b10"
      ],
      "author": {
        "name": "kid",
        "email": "19265318+u70b3@users.noreply.github.com",
        "time": "Sun Aug 16 01:23:51 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 01:23:51 2026 +0000"
      },
      "message": "fix(spark): correct mod ANSI zero divisor and negative zero handling (#23987)\n\n## Which issue does this PR close?\n\n- Closes #23894\n\n## Rationale for this change\n\n`datafusion-spark`\u0027s `mod` routes through the shared `try_rem` helper in\n`datafusion/spark/src/function/math/modulus.rs`, which has two gaps in\nits\nzero-divisor handling (both verified against Spark 3.5.8 – 4.2.0 in the\nissue):\n\n1. **ANSI mode, floating-point divisor.** `try_rem` delegates to Arrow\u0027s\n`rem`\nkernel in ANSI mode, but Arrow only reports division by zero for integer\nand\ndecimal types. Floating-point divisors follow IEEE 754 and quietly\nproduce\n`NaN`, while Spark raises `REMAINDER_BY_ZERO` for a zero divisor of any\n   numeric type:\n\n   ```sql\n   set datafusion.execution.enable_ansi_mode \u003d true;\n   SELECT mod(10.5::float8, 0.0::float8);  -- NaN, Spark raises\n   ```\n\n2. **`-0.0` divisor, both modes.** The legacy path nulls out zero\ndivisors via\n`eq(right, 0)`, but Arrow\u0027s floating-point comparisons use a total order\nin\nwhich `-0.0` is distinct from `0.0`, so a `-0.0` divisor goes\nunrecognised.\n   Spark\u0027s `isZero` is a numeric comparison and treats `-0.0` as zero:\n\n   ```sql\nSELECT mod(10.5::float8, -0.0::float8); -- NaN, Spark returns NULL\n(legacy)\n   ```\n\n## What changes are included in this PR?\n\n`try_rem` now detects zero divisors itself, mirroring the shape #23898\nestablished for `pmod`:\n\n- A new `is_zero` helper counts `-0.0` as zero for the floating-point\ntypes\n  (via a `negative_zero` companion, same as #23898).\n- In ANSI mode, any row with a zero divisor raises\n`ArrowError::DivideByZero`\n— the same error Arrow\u0027s `rem` already produces for integers today, so\nthe\nmessage stays uniform across types. The check is masked by the validity\nof\nthe dividend because Spark\u0027s remainder expressions are null intolerant:\na\nNULL dividend short-circuits to NULL before the divisor is validated, so\n  `mod(NULL, 0)` must return NULL rather than raise.\n- Both modes substitute NULL for zero divisors before calling Arrow\u0027s\n`rem`,\nso the kernel never sees a zero divisor: legacy mode gets NULLs, and\nANSI\n  mode has already raised on the rows that required it.\n\nNote on overlap with #23898: that PR rewrites `pmod` to no longer use\n`try_rem` and adds identical `is_zero`/`negative_zero` helpers. This PR\nis\nindependent of it — `mod` is fixed either way — but whichever lands\nsecond\nshould dedupe the helpers in a rebase. Until #23898 lands, `pmod` also\npicks\nup the `-0.0` and ANSI floating-point zero-divisor fixes through the\nshared\nhelper.\n\nOut of scope: #23897 (reproducing Spark\u0027s exact ANSI error text) is a\nrepository-wide error-message policy question, as noted in that issue.\n\n## Are these changes tested?\n\nYes:\n\n- New unit tests in `modulus.rs`: ANSI floating-point zero divisor\nraises;\n`-0.0` divisor returns NULL in legacy mode and raises in ANSI mode; a\nNULL\ndividend with a zero divisor returns NULL in ANSI mode (integer and\nfloat).\n- New sqllogictest cases in `spark/math/mod.slt` covering the same\nbehavior at\n  SQL level.\n- Verified `cargo test -p datafusion-spark`, the `spark/math/mod.slt`\nand\n`spark/math/pmod.slt` sqllogictests, `./dev/rust_lint.sh`, and the\nextended\n  workspace suite (ci profile with\n\n`avro,json,backtrace,extended_tests,recursive_protection,parquet_encryption`)\n  — all green.\n\n## Are there any user-facing changes?\n\nOnly the bug fixes, and only for the Spark `mod`/`pmod` functions: in\nANSI\nmode a floating-point zero divisor now raises instead of returning NaN,\nand a\n`-0.0` divisor is treated as zero in both modes (NULL in legacy mode, an\nerror\nin ANSI mode), matching Spark. No API changes."
    },
    {
      "commit": "bf1c17ae6b41a0aa8fe95a7b20273aefb47d3b10",
      "tree": "7d5721b766eae4c478d636471a32c53af1f73b04",
      "parents": [
        "e7e037dbeb6e578f13a6ba16d528366e888c253a"
      ],
      "author": {
        "name": "Goutam Adwant",
        "email": "8672451+goutamadwant@users.noreply.github.com",
        "time": "Sun Aug 16 01:13:03 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 01:13:03 2026 +0000"
      },
      "message": "feat: union nested Parquet leaves across projection accesses (#24130)\n\n## Which issue does this PR close?\n\n- Closes #24121.\n\n## Rationale for this change\n\nWhen one projected nested column is consumed through multiple narrowing\ncasts, or through both a narrowing cast and `get_field`, the Parquet\nread plan currently falls back to reading the entire root column. The\nleaves required by those consumers can be combined, so reading the full\nroot performs unnecessary I/O.\n\n## What changes are included in this PR?\n\n- Accumulate and deduplicate the leaf offsets required by every\nnarrowing cast on a root column.\n- Add leaves required by `get_field` accesses to the same union.\n- Derive the Arrow type emitted by the reader from the merged leaf set\nwhile retaining a full-read fallback for unsupported partial wrapper\nshapes.\n- Add coverage for disjoint, overlapping, and repeated casts, cast plus\n`get_field`, and casts that diverge below `List\u003cStruct\u003e`.\n\n## Are these changes tested?\n\nYes. The following checks pass:\n\n- `cargo fmt --all -- --check`\n- `cargo test -p datafusion-datasource-parquet --lib`\n- `cargo test --profile\u003dci --test sqllogictests --\nparquet_nested_schema_pruning.slt`\n- `cargo clippy -p datafusion-datasource-parquet --all-targets\n--all-features -- -D warnings`\n\nThe SQL logic test also verifies that the merged projections return the\nexpected values and scan fewer bytes than a full-root read.\n\n## Are there any user-facing changes?\n\nNo API or SQL behavior changes. Queries with multiple nested accesses to\nthe same Parquet root can read fewer leaf columns."
    },
    {
      "commit": "e7e037dbeb6e578f13a6ba16d528366e888c253a",
      "tree": "e9886a68bf89e14fb484d02d417f7a5ae5e23ef4",
      "parents": [
        "16b08db00ddf25f478f62292f149f378dba47c1f"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Sat Aug 15 18:02:38 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 18:02:38 2026 +0000"
      },
      "message": "docs: add an agent skill for auditing datafusion-spark expressions (#23893)\n\n## Which issue does this PR close?\n\n- Closes #.\n\nNo issue tracks this. It is tooling, proposed for discussion. Related:\nhttps://github.com/apache/datafusion/issues/15914 (the\n`datafusion-spark`\nepic) and https://github.com/apache/datafusion/issues/23887\n(version-specific\nSLT expectations, which this skill\u0027s cross-version findings link to).\n\n## Rationale for this change\n\nThe `datafusion-spark` crate reimplements Spark\u0027s built-in expressions.\nCorrectness against Spark is the entire point of the crate, but there is\nno\nroutine process for checking an implementation against the Spark source,\nand no\nrecord of which functions have been checked.\n\nThe testing situation makes this harder than it looks. Comet, the\nsibling\nproject, tests by differential execution: it runs each query in both\nengines\nand compares, so expected values never need to be written down.\nDataFusion\u0027s\n`.slt` files hard-code every expected result, with no Spark in the loop.\nTwo\nconsequences follow:\n\n1. Someone has to determine what Spark actually returns before writing\nthe\nexpectation. Reading `nullSafeEval` and predicting the output is how\nwrong\n   golden values get written, and once written they look like verified\n   behavior.\n2. A hard-coded expectation encodes exactly one Spark version, so every\nfile\n   has to be written with one version in mind.\n\nMany files under `test_files/spark/` were machine-generated from Sail\u0027s\ngold\ndata and their values were never checked against a running Spark. An\nexisting\npassing expectation is a claim, not evidence.\n\n## What changes are included in this PR?\n\nOne file: `.ai/skills/audit-datafusion-spark-expression/SKILL.md`,\nfollowing\nthe `.ai/skills/` convention already described in the repository\n`CLAUDE.md`.\nNo production code changes.\n\nThe skill audits one function per invocation, in eight steps: read the\nSpark\nsource across 3.5.8, 4.0.4, 4.1.3 and 4.2.0 to detect cross-version\ndivergence;\nharvest Spark\u0027s own unit tests and `sql-tests/results/*.sql.out` golden\nfiles;\nreview the Rust implementation\u0027s signature and coercion, return\nnullability,\nnull propagation, overflow, type dispatch and ANSI handling; cross-check\nComet\nand Sail; review existing SLT coverage; build a gap matrix; establish\nground\ntruth; then apply findings.\n\nThree decisions are worth calling out for review:\n\n**Spark 4.2.0 is the declared baseline.** Older versions are read only\nto\ndetect that behavior changed, never to set an expectation.\n\n**Expected values come from a real Spark.** The skill sets up a\n`pyspark\u003d\u003d4.2.0`\nvenv and runs every candidate query through it under both ANSI modes,\nincluding\nexpectations that already exist in the file. If PySpark cannot be\ninstalled the\naudit continues from source-derived values, but every such expectation\nis\nmarked unverified rather than presented as observed.\n\n**`--complete` is forbidden for files under `test_files/spark/`.** That\nmode\nfills expectations with whatever DataFusion currently returns, which on\nan\naudit would silently cement the bug being audited as the golden answer.\n\nThe skill also establishes a convention for divergences it cannot fix: a\ncommented-out SLT query carrying the correct Spark result and a link to\nthe\ntracking issue, where uncommenting it is the contract for verifying a\nfix.\nThat convention is new to this tree and is the piece most worth arguing\nabout.\n\n## Are these changes tested?\n\nThe skill was run end to end against `next_day`, which is how it was\ndebugged.\nThat run produced https://github.com/apache/datafusion/pull/23892 and\nissues\n#23889, #23890 and #23891.\n\nRunning it surfaced eleven defects in the skill itself, which are fixed\nhere.\nTwo are worth citing as evidence that the exercise was not circular:\n\n- The instruction to `unset SPARK_HOME` sat in a different code block\nfrom the\ncommand that needed it, so it never took effect and the run reproduced\nthe\nexact `TypeError: \u0027JavaPackage\u0027 object is not callable` failure the text\nwas\n  written to prevent.\n- The ground-truth harness reported a Python `ValueError` as though it\nwere a\nSpark error, which would have written a fabricated divergence into the\n`.slt`\n  as observed fact.\n\nReview of the resulting `next_day` work then found a genuine\nSQL-reachable\npanic in the audited function that the audit had missed, and the gap\nthat hid\nit, which is now a rule in the skill: cross the argument shapes with the\nNULL\ncases and with both ANSI modes rather than checking each axis alone.\n\nThe skill carries no automated test. Its verification is that following\nit\nproduces a correct audit, which is what #23892 demonstrates.\n\nIt has since been run a second time, against `pmod`, which found three\nreal\nbugs now fixed in https://github.com/apache/datafusion/pull/23898 and\nfour more\ndivergences filed as #23894, #23895, #23896 and #23897. That run\nsurfaced four\nfurther skill gaps, folded in here. The most valuable is a section on\nArrow\nkernel semantics not matching Java\u0027s: total-ordered float comparison\nhiding\n`-0.0`, checked rather than wrapping arithmetic, and Java\u0027s\n`byte`/`short`\npromotion to `int` each caused one of the `pmod` bugs, and the skill had\nsaid\nnothing about any of them.\n\nThe `datafusion-spark` README already points contributors to Comet and\nSail\nwhen implementing a function. This is the same idea applied to checking\none."
    },
    {
      "commit": "16b08db00ddf25f478f62292f149f378dba47c1f",
      "tree": "93f2963b9e9b3c9b10ac82359650a8b273bac862",
      "parents": [
        "d3c47b4a80baa3ca941ca0fc2cc80f96687c5a27"
      ],
      "author": {
        "name": "Liang-Chi Hsieh",
        "email": "viirya@gmail.com",
        "time": "Sat Aug 15 16:10:37 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 16:10:37 2026 +0000"
      },
      "message": "fix: preserve NULL semantics when simplifying col ~ \u0027.*\u0027 (#24380)\n\n## Which issue does this PR close?\n\n- Closes #24379.\n\n## Rationale for this change\n\n`simplify_regex_expr` rewrites `col ~ \u0027.*\u0027` to `col IS NOT NULL`. For a\nNULL input that returns `false`, but `NULL ~ \u0027.*\u0027` is `NULL` under\nthree-valued logic — so the rewrite produces wrong results in a\nprojection context:\n\n```sql\nSELECT s, s ~ \u0027.*\u0027 FROM (VALUES (CAST(NULL AS VARCHAR)), (\u0027x\u0027)) t(s);\n-- NULL row currently returns `false`; it should be NULL\n```\n\nThe `!~` (`RegexNotMatch`) branch of the same rule is already NULL-aware\n(`col IS NULL AND NULL`); only the `~` branch dropped the NULL.\n\n## What changes are included in this PR?\n\n- Rewrite `col ~ \u0027.*\u0027` to `col IS NOT NULL OR NULL` — `true` for a\nnon-NULL string, `NULL` for a NULL input.\n- In a WHERE filter both FALSE and NULL reject the row, so filter\n*results* are unchanged; only the plan text and projection-context\nvalues differ. Existing filter-plan expectations in `simplify_expr.slt`\nand the `test_simplify_regex_special_cases` unit test are updated\naccordingly, and a projection regression test is added.\n\n## Are these changes tested?\n\nYes.\n\n- New projection regression test in `simplify_expr.slt` asserting `col ~\n\u0027.*\u0027` returns `true`/`true`/`NULL` for `\u0027foo\u0027`/`\u0027\u0027`/`NULL`.\n- Updated the two filter-context plan expectations (logical + physical)\nthat previously encoded the `IS NOT NULL` rewrite.\n- `simplify_expr.slt`, the `regexp/*` SLTs, and the optimizer simplify\nunit tests all pass.\n\n## Are there any user-facing changes?\n\n`col ~ \u0027.*\u0027` in a projection now returns `NULL` for a NULL input instead\nof `false`, matching SQL semantics. No API changes."
    },
    {
      "commit": "d3c47b4a80baa3ca941ca0fc2cc80f96687c5a27",
      "tree": "a8e3bc91bd353498ce5c7278867d261ddc69faf4",
      "parents": [
        "4403c5d84d25adee68cd2f8a581d2003dad52bb4"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Sat Aug 15 14:18:41 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 14:18:41 2026 +0000"
      },
      "message": "fix: drain PiecewiseMergeJoin output before state transitions (#24298)\n\n## Which issue does this PR close?\n\n- Closes #24297\n\n## Rationale for this change\n\n`ClassicPWMJStream` transitions phases while its output `BatchCoalescer`\nstill holds completed batches. The Left/Full unmatched pass falls back\ninto its producer when the drained queue is an exact multiple of\n`batch_size` — emitting duplicate rows forever — and queued unmatched\nRight/Full batches are dropped at terminal transitions. A zero-row\nplaceholder batch also escapes as stream output on empty results.\n\n## What changes are included in this PR?\n\n- Add `BatchProcessState::next_drained_batch()` (`finish_buffered_batch`\n+ `next_completed_batch`); `None` guarantees the coalescer is empty\n- `process_stream_batch` and `process_unmatched_buffered_batch` drain\none batch per poll and transition only after a confirmed-empty pop, so a\nfinished producer can never re-run and no queued batch is lost\n- Scan completion returns `StatefulStreamResult::Continue` instead of\nthe empty placeholder batch; empty joins now yield no batches\n\n## Are these changes tested?\n\nYes. The existing unmatched Left/Right tests now run with `batch_size \u003d\n1` (the Left one bounded with `take(6)` so the old duplicate loop fails\nas a snapshot mismatch instead of hanging) — both fail on main and pass\nhere. The empty-join tests assert no batches are emitted.\n\n## Are there any user-facing changes?\n\nNo (PWMJ is experimental and off by default)."
    },
    {
      "commit": "4403c5d84d25adee68cd2f8a581d2003dad52bb4",
      "tree": "2a34fbecc64a5efd377a505314f6bcc7e127b8cd",
      "parents": [
        "47794ff2462e66ee28567ceee49a246056077bb0"
      ],
      "author": {
        "name": "Subham Singhal",
        "email": "SubhamSinghal@users.noreply.github.com",
        "time": "Sat Aug 15 14:15:03 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 14:15:03 2026 +0000"
      },
      "message": "bench: pwmj left semi/anti join (#24160)\n\n## Which issue does this close?\n\nBenchmark companion to #23870 (LeftSemi / LeftAnti support for\n`PiecewiseMergeJoinExec`), part of EPIC #17427. Closes no issue on its\nown.\n\n  ## Rationale for this change\n\n#23870 routes existence subqueries with an inequality correlation\n(`WHERE EXISTS (SELECT 1 FROM rhs WHERE lhs.key \u003c rhs.key)`) to\n`PiecewiseMergeJoinExec` instead of `NestedLoopJoinExec`. That claim\nneeds a benchmark that can be run on either side of the change, so this\nPR adds the benchmark separately from the operator work — it is bench\ncode only, no functional change.\n\n  ## What changes are included in this PR?\n\n`datafusion/core/benches/pwmj_semi_anti_sql.rs` (+ its `Cargo.toml`\nentry), a Criterion benchmark with two arms over 20k × 20k `Int32` rows,\n`target_partitions\u003d1`:\n\n  - **`pwmj_enabled`** — flag on\n  - **`nlj`** — flag off, which can only plan `NestedLoopJoinExec`\n\nAxes: join type (`EXISTS` → Semi, `NOT EXISTS` → Anti) × match regime\n(`all_match` 100%, `no_match` 0%, `half_match` ~50%, so the buffered\nside is only partially marked and scan depth varies per streamed row).\n\n## Are these changes tested?\n\n## Are there any user-facing changes?\n\nNo. Benchmark code only."
    },
    {
      "commit": "47794ff2462e66ee28567ceee49a246056077bb0",
      "tree": "7dbbfd3fdf8948854c0a00e1a63a6a856df51f01",
      "parents": [
        "bb45fb8275bf6370923ac40bfb3dd5712b640e97"
      ],
      "author": {
        "name": "Reid Kaufmann",
        "email": "73494261+reidkaufmann@users.noreply.github.com",
        "time": "Sat Aug 15 13:11:31 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 13:11:31 2026 +0000"
      },
      "message": "Improve planning speed: Fast path for `union_schema` when all children share a schema (#24389)\n\n## Which issue does this close?\n\nComplements #19792. Fits with the wide-`UnionExec` planning-cost work,\nbut originates from an InfluxDB issue.\n\n## Rationale for this change\n\n`union_schema` builds the output schema for `UnionExec` and\n`InterleaveExec` by coercing field metadata and nullability across\n**every** child. That merge is quadratic in the number of children: for\neach output field it walks all inputs, and for each input it walks\n*every other* input to union field-level metadata. For a union of `n`\nchildren with `f` fields the construction cost is `O(n^2 * f)` (worse\nwhen fields carry metadata).\n\nFor narrow unions this is insignificant. It matters when a plan fans a\nsingle source out into many identical-schema children and unions them\nback together -- e.g. a union assembled from repartitioned copies of the\nsame input. An instance like this occurred with InfluxDB: every child\nschema was the same, so the merge, guaranteed to reproduce the first\nchild\u0027s schema, unnecessarily incurred the planning latency penalty from\n`O(n^2 * f)` complexity.\n\n### Relationship to #19792\n\n`UnionExec` construction has two quadratic halves:\n\n- **`with_new_children` / `PlanProperties`** -- addressed by #19792\n(`with_new_children_and_same_properties`, `Arc\u003cPlanProperties\u003e`, the\nproperties fast path). Already on `main`.\n- **`union_schema`** -- *not* covered by #19792 and still quadratic on\n`main`.\n\nThis PR complements it by making `union_schema` skip the merge when it\ncan\u0027t change the result. It deliberately doesn\u0027t touch\n`with_new_children`; that path is already handled.\n\n## What changes are included?\n\nA fast path at the top of `union_schema`: after taking\n`inputs[0].schema()`, if every remaining child\u0027s schema is either the\n**same allocation** (`Arc::ptr_eq`) or **structurally equal** (`\u003d\u003d`) to\nthe first, return the first schema immediately. Otherwise we fall\nthrough to the existing full merge, so behavior for genuinely\nheterogeneous unions is byte-for-byte unchanged.\n\n```rust\nlet first_schema \u003d inputs[0].schema();\n\nif inputs[1..].iter().all(|input| {\n    let schema \u003d input.schema();\n    Arc::ptr_eq(\u0026schema, \u0026first_schema) || schema \u003d\u003d first_schema\n}) {\n    return Ok(first_schema);\n}\n```\n\n`InterleaveExec` shares `union_schema`, so it gets the same speedup for\nfree.\n\n## On the cost of the deep compare...\n\nThe natural objection (which came up before this PR): **doesn\u0027t the deep\n`\u003d\u003d` make the *unequal* case slower?** I\u0027ll paraphrase the prior\nconclusions, risking verbosity to avoid rehashing the discussion.\nSpoiler: it\u0027s not an issue.\n\n- The equal case avoids the merge, and its check is cheap. The\nshared-`Arc` case is settled by pointer comparison. The\ndistinct-but-equal case runs `Schema::eq`, which is allocation-free and\nshort-circuits on the first difference. Benchmarks show a small loss\nversus a pointer-equality-only control (the theoretical floor) but it\nstill beats the full merge by a wide margin, and that advantage grows\nwith schema complexity.\n\n- The adversarial worst case is bounded. The one shape where the scan is\npure overhead is `last_differs`: children `0..n-1` are equal and the\nlast diverges, so we scan `n` schemas, fail on the last, then merge\nanyway. That\u0027s a single linear `\u003d\u003d` pass bounded by the merge that\nfollows -- a constant fraction, not another factor of `n` -- and it\ntakes *thousands* of near-identical children differing only in the last\nto hit.\n\n- Ordinary unequal unions fail fast. `SELECT a ... UNION ALL SELECT b\n...` differs at field 0, so `\u003d\u003d` rejects on the first field (see\n`names_differ`). And `UnionExec::try_new` already rejects misaligned\nchildren, so the only divergence `union_schema` ever sees is top-level\n(caught in the first pass).\n\n## Benchmark results\n\nNew bench `datafusion/physical-plan/benches/union_schema.rs` measures\n`UnionExec::try_new` construction over a flat schema and a nested/struct\nschema, for the four child shapes above. Run interleaved (baseline /\npatched alternated per cell) on a fixed-clock T2D VM.\n\n### `union_schema` construction (lower is better)\n\n| scenario | n | baseline (ms) | patched (ms) | change |\n|---|---|---|---|---|\n| union_exec_try_new/shared_arc | 100 | 0.263 | 0.042 | 6.2× |\n| union_exec_try_new/shared_arc | 1000 | 2.60 | 0.429 | 6.1× |\n| union_exec_try_new/shared_arc | 4000 | 10.5 | 1.74 | 6.0× |\n| union_exec_try_new/content_equal | 100 | 0.262 | 0.042 | 6.2× |\n| union_exec_try_new/content_equal | 1000 | 2.61 | 0.433 | 6.0× |\n| union_exec_try_new/content_equal | 4000 | 10.5 | 1.74 | 6.0× |\n| union_exec_try_new/last_differs | 4000 | ~98 | ~97 | flat (±1.5%) |\n| union_exec_try_new/names_differ | 4000 | ~87 | ~87 | flat (±1%) |\n| union_exec_try_new_nested/content_equal | 1000 | 2.68 | 0.431 | 6.2× |\n| union_exec_try_new_nested/content_equal | 4000 | 10.8 | 1.73 | 6.2× |\n\nThe `last_differs` (adversarial: N-1 children equal, deep compare then\nfull merge) and `names_differ` (typical unequal: fails on the first\nfield) cells were re-measured with tight per-cell interleaving\n(baseline/patched adjacent, 4 rounds) to control for variance: both are\nwithin ±1.5%, straddling zero. Interpretation: the **deep compare cost\nisn\u0027t observable end to end**.\n\n### End-to-end planning: no regression (`sql_planner`)\n\n`cargo bench --bench sql_planner` (TPC-H + ClickBench) run baseline vs\npatched on the fixed-clock T2D VM. Every case lands within ±1% --\nrun-to-run noise -- with no case regressing beyond that noise. Notable\nrows, including the union-heavy `sorted_union` cases the fast path is\nmeant to help:\n\n| case | baseline (ms) | patched (ms) |\n|---|---|---|\n| physical_plan_tpcds_all | 995.9 ± 1.4 | 991.9 ± 1.9 |\n| physical_plan_tpch_all | 60.4 ± 0.2 | 60.3 ± 0.1 |\n| physical_sorted_union_order_by_50 | 349.9 ± 2.4 | 346.3 ± 2.7 |\n| physical_sorted_union_order_by_10 | 12.3 ± 0.03 | 12.2 ± 0.07 |\n| physical_select_all_from_1000 | 30.8 ± 0.25 | 30.7 ± 0.08 |\n\nThe full TPC-H q1-q22 and ClickBench sets are all flat (ratio is\n1.00-1.01 in both directions). Separately, interleaving tests per-cell\n(baseline and patched back-to-back, so run-to-run variance -- e.g.\nthermal -- cancels rather than favoring one) for\n`physical_join_distinct` + eight ClickBench queries (4 rounds) confirmed\nthe same thing: patched and baseline straddle zero; no systematic\nregression from the deep compare.\n\n## Testing\n\n- `cargo test -p datafusion-physical-plan --lib union` -- all pass,\nincluding a new `test_union_schema_fast_path_content_equal` that\nexercises the `\u003d\u003d` branch with pointer-distinct-but-equal schemas and\nasserts the result matches the shared schema (i.e. identical to the\nslow-path merge).\n- `cargo clippy -p datafusion-physical-plan --lib -- -D warnings` --\nclean.\n- `cargo bench --bench union_schema` -- compiles and runs.\n\n## Are there any user-facing changes?\n\nNo: planning-time performance change only, results and schema are\nidentical.\n\n---------\n\nSigned-off-by: Reid Kaufmann \u003creid.kaufmann@gmail.com\u003e"
    },
    {
      "commit": "bb45fb8275bf6370923ac40bfb3dd5712b640e97",
      "tree": "4787a2f87d17e286fc1708819fd02421757ae944",
      "parents": [
        "67502a364c283144c085988b93f014232eca5768"
      ],
      "author": {
        "name": "Alvaro Balbin",
        "email": "153404840+AlvaroBalbin@users.noreply.github.com",
        "time": "Sat Aug 15 11:16:18 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 11:16:18 2026 +0000"
      },
      "message": "docs(upgrading): document RecursiveQuery schema field in upgrade guide (#23991)\n\nAdding the `schema` field to `RecursiveQuery` broke downstream code that\nbuilt the node with a struct literal, and the change was never written\nup for people upgrading. I added an upgrade guide entry for 55.0.0 that\ndescribes what changed, notes it also shipped in 54.1.0 so users on the\n54 series find it, and shows how to move to `RecursiveQuery::try_new`.\nIt is documentation only, so whether to revert the change on `branch-54`\nfor 54.2.0 is still an open question.\n\nI pushed this to my fork first and the project\u0027s own CI workflows pass\non the commit.\n\nFixes #23886.\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "67502a364c283144c085988b93f014232eca5768",
      "tree": "90e7b750506552d85c15fd4c97d15b200569b690",
      "parents": [
        "a10d19374ffcb0f24253f819a9e254336561e0bb"
      ],
      "author": {
        "name": "sakshichitnis27",
        "email": "156598682+sakshichitnis27@users.noreply.github.com",
        "time": "Sat Aug 15 11:08:30 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 11:08:30 2026 +0000"
      },
      "message": "Document decimal AVG wrapping arithmetic (#23685)\n\n## Which issue does this PR close?\n  - Closes #23665\n\n  ## Rationale for this change\nDecimal AVG intentionally uses wrapping arithmetic with a widened\nintermediate sum type. The existing direct `add_wrapping` and\n`sub_wrapping` calls made that invariant difficult to audit.\n\n  ## What changes are included in this PR?\n- Added small private helpers documenting the widened/headroom contract.\n- Updated scalar, grouped, merge, retract, and `AVG(DISTINCT)` decimal\npaths to use the helpers.\n- Kept the existing state types, return types, and arithmetic behavior\nunchanged.\n\n  ## Are these changes tested?\n  - `cargo fmt --all -- --check`\n  - `cargo test -p datafusion-functions-aggregate avg\n  --lib`\n  - `cargo test -p datafusion-functions-aggregate-common\n  avg_distinct --lib`\n  - `cargo clippy -p datafusion-functions-aggregate-common\n  --all-targets -- -D warnings`\n\n  ## Are there any user-facing changes?\n  No.\n\nCo-authored-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e"
    },
    {
      "commit": "a10d19374ffcb0f24253f819a9e254336561e0bb",
      "tree": "f4612b5c3126466cea7d7249f9c6614fc522339e",
      "parents": [
        "f3ef45a53c9b59fe3e4802e08d9f878dbead9655"
      ],
      "author": {
        "name": "RIchard Baah",
        "email": "137434454+Rich-T-kid@users.noreply.github.com",
        "time": "Sat Aug 15 11:06:08 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 11:06:08 2026 +0000"
      },
      "message": "Perf: remove extra allocations for hex operations (#24057)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #23810.\n\n## Rationale for this change\nThe digest functions hex-encode their output by allocating one String\nper row and then copying each of those into the output array (#23810)\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\n## What changes are included in this PR?\n\n- This PR reduces per-row allocation and string-conversion overhead in\nthe Spark crypto/hash paths by switching to the buffer-based hex encoder\nAPIs.\n- Updates call sites to re-use vector buffers.\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\nexisting test cover behavior.\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\nyes, `encode_bytes()` is being deprecated. This was apart of the public\nAPI\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\n---------\n\nCo-authored-by: rich-T-kid \u003crichardbaah@MacBook-Air-de-Richard.local\u003e"
    },
    {
      "commit": "f3ef45a53c9b59fe3e4802e08d9f878dbead9655",
      "tree": "9cea4ff0787a51ee803942d7cb756382f6999e32",
      "parents": [
        "f956fd1128d1ba419747dbd3ff10aac695ecf158"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Sat Aug 15 11:04:48 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 11:04:48 2026 +0000"
      },
      "message": "docs: Document  `WindowFn` and add comments (#24118)\n\n## Which issue does this PR close?\n\n- N/A (documentation only)\n\n## Rationale for this change\n\nThe `WindowFn` enum in `datafusion-physical-expr` has no documentation,\nand its `Builtin` variant name is misleading:\n## What changes are included in this PR?\n\nDoc comments on `WindowFn` and its two variants, including links to the\n`WindowExpr` implementations that create each variant.\n\n## Are these changes tested?\nBy CI\n\n## Are there any user-facing changes?\n\nImproved API documentation only; no code changes.\n\n---------\n\nCo-authored-by: Claude Fable 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "f956fd1128d1ba419747dbd3ff10aac695ecf158",
      "tree": "6cae1a6fc35b2ed84a3725777853af462fbdcd21",
      "parents": [
        "b9399dc228697db8ef27b24b67b5a1ddf46ff073"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Sat Aug 15 11:04:19 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 11:04:19 2026 +0000"
      },
      "message": "fix(proto): preserve Arrow IPC stream format (#24224)\n\n## Which issue does this PR close?\n\n- Closes #24196.\n\n## Rationale for this change\n\n`ArrowSource` distinguishes between Arrow IPC file and stream formats,\nbut this format was not serialized. As a result, a stream scan\nround-tripped through protobuf as a file scan, selecting the wrong\nopener and potentially allowing unsupported range-based repartitioning.\n\n## What changes are included in this PR?\n\n- Add an `ArrowIpcFormat` discriminator to `ArrowScanExecNode`.\n- Serialize and restore the `ArrowSource` IPC format.\n- Decode payloads without the new field as file format, preserving the\nprevious behavior.\n- Regenerate the prost and pbjson models.\n- Add regression coverage for file, stream, and older payloads without\nthe format field.\n\n## Are these changes tested?\n\nYes:\n\n- `cargo test -p datafusion-proto --test proto_integration\nroundtrip_arrow`\n- `cargo test -p datafusion-proto --test proto_integration\narrow_scan_without_format_field_decodes_as_file_format`\n- `cargo fmt --all`\n- Targeted all-feature clippy for `datafusion-datasource-arrow` and\n`datafusion-proto`\n\n## Are there any user-facing changes?\n\nArrow IPC stream scans now preserve their format across protobuf round\ntrips.\n\nThe binary protobuf change is additive. Older payloads continue to\ndecode as file format. Stream preservation requires both producer and\nconsumer to include this change because older versions do not carry or\nread the discriminator. The generated Rust `ArrowScanExecNode` struct\ngains a `format` field."
    },
    {
      "commit": "b9399dc228697db8ef27b24b67b5a1ddf46ff073",
      "tree": "06b953ccce5c55040870282a95dc925e6ae4abf9",
      "parents": [
        "cc7565be1ee97ba8fa2f5d6da373c5e38d81bb13"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Fri Aug 14 21:19:44 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 21:19:44 2026 +0000"
      },
      "message": "perf: Update `TableProvider` to take scan projection as `Option\u003c\u0026[usize]\u003e` (#24376)\n\n## Which issue does this PR close?\n\n- Addresses https://github.com/apache/datafusion/issues/13814\n- Follow-on to #24325, #24326, #24329, #24330\n\n## Rationale for this change\n\n`TableProvider::scan` took its projection as `Option\u003c\u0026Vec\u003cusize\u003e\u003e`.\nBesides being\nthe signature `clippy::ptr_arg` exists to discourage, it forced\n`TableProvider::scan_with_args`\u0027s default body to allocate:\n\n```rust\nlet projection \u003d args.projection().map(|p| p.to_vec());\nlet plan \u003d self.scan(state, projection.as_ref(), filters, limit).await?;\n```\n\n`ScanArgs::projection()` already yields `Option\u003c\u0026[usize]\u003e`, so that\n`Vec` existed\nonly to be borrowed. Worse, it cannot outlive a hoisted future, so the\nbody had to\nstay an `async fn` — and that made it **the single most expensive thing\nto compile\nin `datafusion-session`**. Proving its coroutine `Send` walks the whole\n`Expr`/`LogicalPlan` type graph, and `#[async_trait]`\u0027s `\u0027life0:\n\u0027async_trait`\nbounds stop rustc serving that proof from its global cache.\n\nI measured this directly before writing the change: stubbing the body\nout dropped\n`datafusion-session`\u0027s `evaluate_obligation` from **617ms to 16.5ms**\nand the\nwhole crate from 0.86s to 0.235s, while the rest of the crate\u0027s trait\nsolving\nattributed to just 4ms. So this one default body was ~97% of what\nremained after\n#24326.\n\n## What changes are included in this PR?\n\nThe projection becomes `Option\u003c\u0026[usize]\u003e`, and the default body hands it\nstraight\nthrough, capturing only the already-boxed future it awaits:\n\n```rust\nlet plan \u003d self.scan(\n    state,\n    args.projection(),\n    args.filters().unwrap_or(\u0026[]),\n    args.limit(),\n);\nBox::pin(async move { Ok(plan.await?.into()) })\n```\n\nAlso updated, because their projections feed the same call paths:\n`StreamingTableExec::try_new`, `FilterExec::with_projection`,\n`batch_filter`.\n\n`datafusion_common::project_schema` now takes\n`Option\u003c\u0026T\u003e where T: AsRef\u003c[usize]\u003e + ?Sized` instead of\n`Option\u003c\u0026impl AsRef\u003c[usize]\u003e\u003e`, so it accepts a `Vec` *or* a slice — no\ncaller of\nit needs to change.\n\nCall sites get simpler rather than noisier: `Some(\u0026vec![2, 1])` becomes\n`Some(\u0026[2, 1])`, and three `vec!` allocations in tests disappear (clippy\npointed\nthose out on its own).\n\n## Are these changes tested?\n\nYes\n## Are there any user-facing changes?\n\nYes — this is a **breaking change** for `TableProvider` implementors, so\nit has an\nupgrade-guide entry. Implementations only need the signature updated;\ntwo patterns\ninside a body need adjusting:\n\n```rust\n// Before                    // After\nprojection.cloned()          projection.map(|p| p.to_vec())\n```\n\nand callers holding an `Option\u003cVec\u003cusize\u003e\u003e` pass `.as_deref()` rather\nthan\n`.as_ref()`. In tree that was 47 signatures across 36 files, all\nmechanical.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "cc7565be1ee97ba8fa2f5d6da373c5e38d81bb13",
      "tree": "a073f2511155e24273d8b59f5794fad1e871f1b8",
      "parents": [
        "7c079f744f32841f2166a60adfcde2ab297df725"
      ],
      "author": {
        "name": "Liang-Chi Hsieh",
        "email": "viirya@gmail.com",
        "time": "Fri Aug 14 20:14:31 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 20:14:31 2026 +0000"
      },
      "message": "fix: don\u0027t report equi-key equivalence for PiecewiseMergeJoin range joins (#24361)\n\n## Which issue does this PR close?\n\n- Closes #24360.\n\n## Rationale for this change\n\n`PiecewiseMergeJoinExec::compute_properties` passed the join\u0027s `on` pair\nto `join_equivalence_properties` as if it were an equijoin key. For an\n`INNER` join that registers `left_on \u003d\u003d right_on` as an output\nequivalence — but PWMJ\u0027s `on` is a **range** predicate (`l.v \u003c r.v`),\nnot equality, so the equivalence is false. It let the optimizer treat a\nsort on the left key as also sorting the right key and drop a required\n`ORDER BY`, returning wrongly ordered rows.\n\n```sql\nset datafusion.optimizer.enable_piecewise_merge_join \u003d true;\ncreate table l(v int) as values (1),(2),(3),(5),(8);\ncreate table r(v int) as values (4),(6),(9),(2);\nselect l.v, r.v from l join r on l.v \u003c r.v where l.v \u003d 2 order by r.v;\n-- PWMJ: 2,9 / 2,6 / 2,4   (wrong order)\n-- NLJ:  2,4 / 2,6 / 2,9   (correct)\n```\nThe plans differ: PWMJ sorts only on `l.v` (`SortExec: expr\u003d[v@0 ASC]`);\nNLJ sorts on both (`[v@0 ASC, v@1 ASC]`).\n\n## What changes are included in this PR?\n\n- `compute_properties` no longer passes the range `on` pair to\n`join_equivalence_properties` (a range join adds no column\nequivalences). The now-unused `join_on` parameter is dropped.\n- Existing `pwmj.slt` plans/results updated to the corrected (fully\nsorted) output — they previously encoded the wrong ordering — and a\nregression test is added.\n\n## Are these changes tested?\n\nYes.\n\n- New regression test in `pwmj.slt` (INNER `l.v \u003c r.v`, `WHERE l.v \u003d 2`,\n`ORDER BY r.v`) asserting the correctly ordered result.\n- The existing `pwmj.slt` cases that asserted the wrong ordering / a\nsingle-column sort plan are updated to the correct values (verified\nagainst `NestedLoopJoin`).\n- `piecewise` unit tests and `joins.slt` still pass. Only `INNER` is\naffected.\n\n## Are there any user-facing changes?\n\n`INNER` range joins via `PiecewiseMergeJoin` (behind\n`enable_piecewise_merge_join`, default off) no longer drop a required\nsort, matching `NestedLoopJoin`. No API changes."
    },
    {
      "commit": "7c079f744f32841f2166a60adfcde2ab297df725",
      "tree": "aa750ac3a4d4afb65fd5afb0d284090cb3973768",
      "parents": [
        "ec110cea1875972f2593cdade2f901bfd47c4157"
      ],
      "author": {
        "name": "Tim Saucer",
        "email": "timsaucer@gmail.com",
        "time": "Fri Aug 14 17:07:04 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 17:07:04 2026 +0000"
      },
      "message": "fix: preserve the input list\u0027s inner field in array_append/prepend/replace (#24365)\n\n## Which issue does this PR close?\n\n- Closes #24347.\n\n## Rationale for this change\n\n`array_append`, `array_prepend`, `array_replace`, `array_replace_n` and\n`array_replace_all` promise the input list type verbatim — inner field\nname, nullability and metadata included — but their kernels rebuilt the\noutput\u0027s inner field from scratch with `Field::new_list_field(...,\ntrue)`. On debug builds this trips the return-type assertion from\n#17515; on release builds it silently yields a batch whose inner field\ndisagrees with the schema the planner recorded.\n\nThis is the other half of #24341, whose `array_slice` part was fixed in\n#24345. The field-name symptom is a 55.0.0 regression from the same\ncommit (5b228570, #20945); the non-nullable symptom is not a regression.\n\nUnlike `array_slice`, threading the input\u0027s field through is not\nsufficient here: the appended, prepended or replacement element can\nitself be null, so a promise cloned from a `List(non-null T)` input is\nwrong at the source and arrow rejects the array with `Non-nullable field\nof ListArray cannot contain nulls`.\n\n## What changes are included in this PR?\n\nEach of the five functions now implements `return_field_from_args`,\ncarrying the input field\u0027s name and metadata through while widening\n`nullable` when the new element\u0027s argument is nullable. The kernels\nbuild their output from `args.return_field` instead of deriving a field\nof their own, so promise and payload come from a single source.\nNullability is therefore only widened when the result can genuinely\ncontain a null:\n\n```sql\narray_append(List(non-null Int64), 3)     -\u003e List(non-null Int64)\narray_append(List(non-null Int64), NULL)  -\u003e List(Int64)\n```\n\nTwo paths beyond those listed in the issue turned out to have the same\ndefect and are fixed too: `array_append` / `array_prepend` with a\n**nested** value type (which delegates to `concat_internal`), and the\n`LargeList` variants of all five.\n\nSince these five now implement `return_field_from_args`, their\n`return_type` becomes unreachable and returns\n`internal_err!(\"return_field_from_args should be used instead\")`,\nmatching the guidance on `ScalarUDFImpl::return_type` and the existing\nconvention in `remove.rs` and `map_values.rs`.\n\nTwo small cleanups while in here:\n\n- The `List`/`LargeList` inner-field extraction added to\n`general_array_slice` by #24345 is now shared as\n`utils::list_inner_field`, used by all three files. Its error text is\nunchanged. The `ListView` variant in `general_list_view_array_slice` is\ndeliberately left alone — folding all four variants into one helper\nwould let `general_array_slice` silently accept a `ListView` that its\nmatch currently rejects.\n- `array_concat` is **not** affected and its behaviour is unchanged: it\nderives a fresh return type via `type_union_resolution` rather than\ncloning an input\u0027s, so it keeps passing `None` to `concat_internal` and\nderiving the field from the aligned inputs.\n\nBehaviour for `Null`-typed array arguments is unchanged in all five\nfunctions (`array_replace*` return `Null`, `array_append` /\n`array_prepend` return `List(element)`).\n\n## Are these changes tested?\n\nYes — 14 new SLT tests across `array_append.slt`, `array_prepend.slt`,\n`array_replace.slt`, plus two guard cases in `array_concat.slt` pinning\ndown that it is unaffected.\n\n`arrow_cast` can express a named inner field (`\u0027List(Int64, field:\n\u0027\u0027element\u0027\u0027)\u0027`), so these reproduce the field-name half of the bug\nwithout needing the Spark dialect. Coverage: inner field name preserved,\nnon-nullable inner field preserved, nullability widened only when the\nnew element is nullable (both literal `NULL` and a nullable column),\n`LargeList`, nested value types, the `max \u003c\u003d 0` short circuit, and a\n`NULL` `max`.\n\nEvery one of these queries fails on `main` with the return-type\nassertion.\n\nAlso run: `cargo clippy --all-targets --all-features -- -D warnings`,\nthe full sqllogictest suite, and the extended workspace test suite (68\ntest binaries, 0 failures). The `array_replace` and `array_concat`\nbenchmarks show no regression against `main`.\n\n## Are there any user-facing changes?\n\nThe five functions now return the inner field they promise instead of a\nrebuilt one, which is the bug fix. As a consequence, appending or\nreplacing with a nullable element widens the declared inner nullability\nof the result (`List(non-null Int64)` -\u003e `List(Int64)`), which is\nrequired for the result to be representable at all.\n\nNo breaking changes to public APIs."
    },
    {
      "commit": "ec110cea1875972f2593cdade2f901bfd47c4157",
      "tree": "20e208226cd97ac2a5475be51e37664dc3643f58",
      "parents": [
        "1b67f2e9d6ad0069eb28567cfdc3350b0b4ff012"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "zhuqilucas@gmail.com",
        "time": "Fri Aug 14 15:00:29 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 15:00:29 2026 +0000"
      },
      "message": "fix(parquet): don\u0027t runtime-prune row groups while a page-index RowSelection is live (#24355) (#24359)\n\n## Which issue does this PR close?\n\n- Closes #24355.\n\n## Rationale for this change\n\nWith `pushdown_filters \u003d true` + dynamic filter pushdown (on by\ndefault), a query `SELECT b FROM t WHERE \u003cpredicate on a\u003e ORDER BY b\nLIMIT k` can silently return **wrong results** — rows satisfying the\npredicate are dropped and replaced by later ones, no error.\n\nRoot cause (thanks to @adriangb\u0027s report + fixture in #24355): the push\ndecoder carries one flat `RowSelection` over the concatenation of the\n*remaining* row groups. At a row-group boundary the runtime pruner drops\nrow groups the dynamic predicate proves unwinnable and rebuilds the\ndecoder:\n\n```rust\ndecoder.into_builder()?.with_row_groups(new_indices).build()\n```\n\n`with_row_groups(new_indices)` removes row groups **without slicing the\ncarried `RowSelection` to match**, so the selectors intended for a\ndropped RG are applied to the next surviving one. In the fixture,\npage-index pruning leaves RG 1 with `skip 50, select 50`; after the TopK\nthreshold prunes RG 1 and RG 2, the survivor RG 3 is decoded under RG\n1\u0027s selection and its first 50 rows (`b \u003d 0..49`, the correct answer)\nare wrongly skipped.\n\nThis is a second, independent instance of the drift family in\n#24352/#24354; it is **not** fixed by #24354.\n\n## What changes are included in this PR?\n\n- `opener/mod.rs`: **decline to build the runtime `RowGroupPruner` when\na page-index `RowSelection` is present.** With no pruner there is no\nboundary rebuild, so the carried selection is never applied to the wrong\nrow groups. This mirrors `PreparedAccessPlan::reorder_by_statistics`,\nwhich already bails when a row selection is present (`\"Skipping RG\nreorder: row_selection present\"`) because remapping the selection is too\ncomplex.\n\nThis is the minimal, DataFusion-side stop-the-bleeding fix. The proper\nfix is upstream in arrow-rs: apache/arrow-rs#10624 proposes letting the\npush decoder carry **row-group-local** `RowSelection`s\n(`with_row_group_selections`) that are preserved across rebuilds, so\ndropping a row group keeps every survivor\u0027s selection aligned by\nconstruction — no global-selection slicing to get wrong, and no parallel\n`rg_plan` to drift (the #24352 path). DataFusion tracks that migration\nin #24358; this guard is removed once it lands.\n\n## Are these changes tested?\n\n- Adds an slt regression test in `dynamic_row_group_pruning.slt` (the\nreporter\u0027s fixture via `generate_series` + `COPY`). It **fails on\n`main`** (returns `50..54` instead of `0..4`) and passes with this\nchange.\n- Updates the existing rust integration test that previously asserted\nthe runtime pruner **coexists** with a page-index selection\n(`dynamic_rg_pruning_coexists_with_page_index_row_selection`,\n`row_groups_pruned_dynamic_filter \u003e\u003d 1`). Since this PR intentionally\ndisables the pruner in that case, it is renamed to\n`dynamic_rg_pruning_disabled_when_page_index_row_selection_present` and\nnow asserts `row_groups_pruned_dynamic_filter \u003d\u003d 0` while results stay\ncorrect and page-index pruning still runs. (That old test passed only\nbecause its scenario happened not to expose the bug — the misapplied\nselection fell outside the top-k.)\n- The other dynamic-prune tests are unaffected — they have no row\nselection, so the pruner is created as before.\n\n## Are there any user-facing changes?\n\nFixes silently-wrong results. Runtime row-group pruning is skipped for\nscans that also have a page-index row selection (correctness over a\npruning optimization); this is undone once #24358 lands.\n\ncc @alamb @adriangb @hhhizzz"
    },
    {
      "commit": "1b67f2e9d6ad0069eb28567cfdc3350b0b4ff012",
      "tree": "9fde98edbee831aa453ffcd4374749d5e630b645",
      "parents": [
        "571477c4a7a532fcba67d3e272a3791755dedd79"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Aug 14 13:59:26 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 13:59:26 2026 +0000"
      },
      "message": "Docs: document manual catalog impls and how compilation got faster (#24362)\n\n## Which issue does this PR close?\n\n- Follow on to https://github.com/apache/datafusion/pull/24325\n- Follow on to https://github.com/apache/datafusion/pull/24326\n- Follow on to https://github.com/apache/datafusion/pull/24329\n- Follow on to https://github.com/apache/datafusion/pull/24330\n\n\n## Rationale for this change\n\n@Dandandan came up with a very clever way to improve compile time, see\nhttps://github.com/apache/datafusion/issues/13814#issuecomment-5281799225\n\nHowever, the workaround (to make a special future and implement the\nasync trait manually) is not obvious (at least to me) and I worry it\nmight get removed in the future by accident, as we don\u0027t have any checks\nto prevent the regression\n\nThus I think some comments explaining the pattern and how it would work\nwill help avoid such a problem\n\n## What changes are included in this PR?\n\nAdd comments explaining why the code is done this way\n\n## Are these changes tested?\n\nComments only\n\n## Are there any user-facing changes?\n\nNo"
    },
    {
      "commit": "571477c4a7a532fcba67d3e272a3791755dedd79",
      "tree": "46da57fcf8972e52c9581a4ff2c29ed0023d1887",
      "parents": [
        "00eba790b17f7f0a62e5b81627981197f9bfadb0"
      ],
      "author": {
        "name": "Goutam Adwant",
        "email": "8672451+goutamadwant@users.noreply.github.com",
        "time": "Fri Aug 14 13:36:59 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 13:36:59 2026 +0000"
      },
      "message": "feat(cli): add opt-in Spark function registration (#24179)\n\n## Which issue does this PR close?\n\n- Closes #24146.\n\n## Rationale for this change\n\n`datafusion-cli` does not currently enable the Spark SQL dialect or\nregister the `datafusion-spark` function library, so Spark-compatible\nsyntax and functions cannot be explored interactively. Enabling them by\ndefault could override core DataFusion functions with the same names and\nchange existing CLI behavior.\n\n## What changes are included in this PR?\n\n- Add a `--spark` CLI flag.\n- Select the Spark SQL dialect while constructing the session\nconfiguration.\n- Register Spark-compatible scalar, aggregate, and window functions only\nwhen the flag is enabled.\n- Add CLI integration coverage for both default and opt-in behavior.\n- Document the flag and its function-override behavior in the CLI and\nSpark documentation.\n\n## Are these changes tested?\n\nYes. The following checks pass:\n\n- `cargo test -p datafusion-cli --test cli_integration\nspark_features_require_opt_in`\n- `cargo test -p datafusion-cli --all-targets`\n- `cargo fmt --all -- --check`\n- `cargo clippy --all-targets --all-features -- -D warnings`\n- `./ci/scripts/doc_prettier_check.sh`\n\n## Are there any user-facing changes?\n\nYes. Passing `--spark` enables the Spark SQL dialect, Spark expression\nplanner, and Spark-compatible functions for the CLI session. The option\nis disabled by default, so existing CLI behavior remains unchanged."
    },
    {
      "commit": "00eba790b17f7f0a62e5b81627981197f9bfadb0",
      "tree": "bdbed0516b158ee4f9330c1f91ae0081f2533911",
      "parents": [
        "9f377c44862747873946e1f28ac27c976b60464d"
      ],
      "author": {
        "name": "Subham Singhal",
        "email": "SubhamSinghal@users.noreply.github.com",
        "time": "Fri Aug 14 12:32:09 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 12:32:09 2026 +0000"
      },
      "message": "feat(pwmj): support LeftSemi/LeftAnti existence joins via classic scan (#23870)\n\n## Which issue does this close?\n\nPart of #17427 (Make `PiecewiseMergeJoin` work in DataFusion). Adds\n`LeftSemi` / `LeftAnti` support, one of the epic\u0027s checklist items.\nSupersedes the stale #18392, taking the alternative approach that\n@2010YOUY01 suggested there (reuse the classic join path for generality)\nrather than a dedicated existence stream.\n\n  ## Rationale for this change\n\nAn inequality-correlated `EXISTS` / `NOT EXISTS` (e.g. `WHERE EXISTS\n(SELECT 1 FROM r WHERE l.x \u003c r.y)`) has no equi-key, so it decorrelates\nto a `LeftSemi` / `LeftAnti` join with a single range predicate. Today\n`PiecewiseMergeJoinExec` rejects existence joins (`not_impl_err!`) and\nthese queries fall back to `NestedLoopJoinExec`, which is O(n*m).\n\nMicrobenchmark (20K × 20K rows, single inequality,\n`enable_piecewise_merge_join`\n  on vs off), added in this PR as `piecewise_merge_join_semi_anti`:\n\n  | Case                         | PWMJ     | NestedLoopJoin | Speedup |\n  |------------------------------|----------|----------------|---------|\n  | LeftSemi, high selectivity   | ~0.50 ms | ~75 ms         | ~150×   |\n  | LeftAnti, high selectivity   | ~0.44 ms | ~75 ms         | ~170×   |\n  | LeftSemi, low selectivity    | ~0.48 ms | ~76 ms         | ~158×   |\n  | LeftAnti, low selectivity    | ~0.48 ms | ~75 ms         | ~155×   |\n\n  ## What changes are included in this PR?\n\n**Existence joins (`LeftSemi` / `LeftAnti`) for `PiecewiseMergeJoin`:**\n- Route `LeftSemi` / `LeftAnti` with a single range predicate to\n`PiecewiseMergeJoinExec` in the physical planner (still gated behind\n`enable_piecewise_merge_join`, default `false`).\n- Reuse the classic scan: on the first match, mark the matching\nbuffered-row suffix in the visited bitmap and emit from it in the final\npass (`LeftSemi` \u003d marked rows, `LeftAnti` \u003d unmarked; NULL join keys\nare never marked, so they are correctly excluded from Semi and included\nin Anti). Only left-side columns are produced.\n- `RightSemi` / `RightAnti` / `Mark` remain unsupported (they require\nswapping the inputs); they are still rejected in `try_new` and excluded\nin the planner. Left as a follow-up.\n- Two small optimizations so existence marking stays O(buffered), not\nO(n*m): stop scanning a batch after the first match (the marked suffix\nis maximal), and a cross-batch low-water mark so later batches only mark\nnot-yet-marked rows.\n- Updated the operator docstring to describe the implemented\nclassic-reuse path and keep the min/max fast-path as a documented\nfollow-up.\n\n  ## Are these changes tested?\n\n  Yes.\n- 33 unit tests in `classic_join.rs` covering `LeftSemi` / `LeftAnti`\nacross `\u003c`, `\u003c\u003d`, `\u003e`, `\u003e\u003d`; NULL join keys; all-null streamed side;\nempty inputs; `Date32` keys; multi-batch and multi-partition streamed\ninputs; and the low-water-mark skip branch.\n- End-to-end SLT coverage in `pwmj.slt` for `EXISTS` / `NOT EXISTS`\n(including NULLs) with `EXPLAIN` assertions confirming the plan uses\n`PiecewiseMergeJoin`.\n  - The multi-partition test also guards the final-pass counter fix.\n\n  ## Are there any user-facing changes?\n\nNo behaviour change by default: `enable_piecewise_merge_join` remains\n`false`. When enabled, single-range-predicate `LeftSemi` / `LeftAnti`\njoins are planned as `PiecewiseMergeJoin` instead of `NestedLoopJoin`.\nNo API changes."
    },
    {
      "commit": "9f377c44862747873946e1f28ac27c976b60464d",
      "tree": "acabd11a3e1ab4748a2121354584909f7cb7be9e",
      "parents": [
        "574fe67f9add81155dd440acee64547cd9f49082"
      ],
      "author": {
        "name": "Tim Saucer",
        "email": "timsaucer@gmail.com",
        "time": "Fri Aug 14 11:31:36 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 11:31:36 2026 +0000"
      },
      "message": "fix: correct list field inner type in array functions (#24345)\n\n## Which issue does this PR close?\n\n- Closes #24341\n\n## Rationale for this change\n\nThere is a regression from 54.1.0 to 55.0.0rc2 where the spark function\n`slice` can fail as demonstrated in the updated unit test, and as\ndescribed in the connected issue.\n\n## What changes are included in this PR?\n\nIn the nested functions, get the inner field directly from the input for\narray slicing operations. Also, since it is possible the inner list\ncould be non-nullable emit an empty slice instead of a null child\nelement for the outer lists\u0027s nulls.\n\n## Are these changes tested?\n\nAdded 6 new tests in the SLT suite.\n\n## Are there any user-facing changes?\n\nNone"
    },
    {
      "commit": "574fe67f9add81155dd440acee64547cd9f49082",
      "tree": "864a7d51194408b6ed7984697a9e8d4e6716404e",
      "parents": [
        "1f0615a12b6c2d4208ac33ce5fa8523ded1c280b"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "zhuqilucas@gmail.com",
        "time": "Fri Aug 14 10:43:32 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 10:43:32 2026 +0000"
      },
      "message": "fix(parquet): sync rg_plan to decoder frontier — fix wrong TopK results from re-reading already-delivered row groups (#24352) (#24354)\n\n## Which issue does this PR close?\n\n- Closes #24352.\n\n## Rationale for this change\n\nWith `datafusion.execution.parquet.pushdown_filters \u003d true` and TopK\ndynamic filter pushdown (both on by default), a query of the shape\n`SELECT b FROM t WHERE \u003cpredicate on a\u003e ORDER BY b LIMIT k` can silently\nreturn **wrong results** — one source row emitted several times and the\ntrue tail of the top-k missing — with no error or warning.\n\nRoot cause (thanks to @hhhizzz\u0027s very detailed report + fixture in\n#24352): a row group whose post-predicate selection is empty is silently\nfinished by arrow-rs **without handing back a reader**.\n`PushDecoderStreamState` pops its `rg_plan` **only** when a reader is\nreturned, so after a silently-finished RG the plan trails the decoder by\none. When the runtime row-group pruner then rebuilds the decoder\n(`into_builder().with_row_groups(...)`) from the stale `rg_plan`, it\nre-includes an already-delivered row group, whose rows are emitted a\nsecond time and displace the genuine top-k in the heap.\n\n## What changes are included in this PR?\n\n- `push_decoder.rs`: before each boundary prune/rebuild, `rg_plan` is\nsynced to the row group the decoder will actually emit next via\n`peek_next_row_group()` (`sync_rg_plan_to_decoder_frontier` /\n`advance_rg_plan_to`), dropping entries for silently-finished row groups\nso a rebuild can never re-include a delivered group. A rebuild frontier\nnaming an RG not in the plan is now an internal error instead of a\nsilent plan drain.\n\n## Are these changes tested?\n\n- Adds @hhhizzz\u0027s fixture as an slt regression test in\n`dynamic_row_group_pruning.slt` (filter column `search_phrase` differs\nfrom the sort column `event_time`, one row group has an empty\npost-predicate selection invisible to statistics). It now returns the\ncorrect `p0 p4096 p4097 … p4104` (was the buggy `p0 p4096 p4096 …`).\n- clippy clean; `datasource-parquet` unit tests and the sqllogictest\nsuite pass locally.\n\n## Are there any user-facing changes?\n\nFixes silently-wrong query results; no API change.\n\n## Note\n\nThis is the standalone bug fix extracted from #23696 (per review\ndiscussion in #24352): the same `rg_plan` ↔ decoder-frontier sync, on\nits own so it merges fast and is easy to backport. #23696 will rebase on\ntop so it carries only the fully-matched `RowFilter` skip performance\noptimization.\n\ncc @alamb @adriangb @hhhizzz"
    },
    {
      "commit": "1f0615a12b6c2d4208ac33ce5fa8523ded1c280b",
      "tree": "f6ed3e6a7dab325ea6e031f0076cfa529396cf39",
      "parents": [
        "84a8e6db91d19c203536faa0bbf1466bd5ea692f"
      ],
      "author": {
        "name": "kosiew",
        "email": "kosiew@gmail.com",
        "time": "Fri Aug 14 08:39:52 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 08:39:52 2026 +0000"
      },
      "message": "Fix ArrowBytesViewMap retained capacity accounting (#24257)\n\n## Which issue does this PR close?\n\n* Part of #23393\n\n## Rationale for this change\n\n`ArrowBytesViewMap::size()` can underreport memory retained by the map.\nIt previously omitted the initial allocation of the hash table, counted\n`views` by length rather than capacity, counted completed buffers by\nused length rather than retained capacity, and did not include the\nbacking allocation of the `completed` vector.\n\nBecause this value is used for memory accounting, it should reflect heap\nallocations owned by the map while continuing to exclude `self` and\nexternal input-array buffers.\n\n## What changes are included in this PR?\n\n* Initialize `map_size` from the hash table\u0027s initial allocated\ncapacity.\n* Account for `views` and the in-progress buffer using their allocated\nsizes.\n* Include the allocation backing the `completed` vector.\n* Account for each completed Arrow `Buffer` by retained capacity rather\nthan used length.\n* Clarify that `size()` excludes both `self` and input-array buffers.\n\n## Are these changes tested?\n\nYes. This PR adds:\n\n* `test_size_counts_initial_hash_table_capacity`, which verifies that a\nnewly created map reports the initial hash table allocation.\n* `test_size_counts_retained_buffer_capacities`, which verifies unused\n`views` capacity, `completed` vector storage, retained completed-buffer\ncapacity, and that re-inserting duplicate values does not increase the\nreported size.\n\n## Are there any user-facing changes?\n\nNo public API or query-result behavior changes. This fixes internal\nmemory accounting so `ArrowBytesViewMap::size()` more accurately reports\nallocations retained by the map.\n\n## LLM-generated code disclosure\n\nThis PR includes LLM-generated code and comments. All LLM-generated\ncontent has been manually reviewed."
    },
    {
      "commit": "84a8e6db91d19c203536faa0bbf1466bd5ea692f",
      "tree": "11acb3d34e9a3b810416be8e76a0e7aa9d4c0fd0",
      "parents": [
        "773ef226c681d05825b6677529d753ae1ebf2fe7"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Fri Aug 14 06:42:16 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 06:42:16 2026 +0000"
      },
      "message": "Reduce datafusion-spark dependency footprint (#24351)\n\n## Which issue does this PR close?\n\nN/A\n\n## Rationale for this change\n\n`datafusion-spark` pulls unnecessary crates into its production\ndependency graph, increasing compilation time and artifact size for\ndownstream users.\n\n## What changes are included in this PR?\n\n- Replace compatibility re-exports with the narrower crates that define\n`TableFunction` and `FunctionRegistry`.\n- Remove the unused `crypto_expressions` activation; Spark provides its\nown SHA-1, SHA-2, and CRC32 implementations.\n- Fix the `quote` import so builds without the optional `core` feature\ncontinue to compile.\n\nThese changes reduce the production dependency graph from 279 to 257\npackages. Cargo Machete does not report these dependencies because they\nare referenced in source through re-exports or activated through Cargo\nfeatures.\n\n## Are these changes tested?\n\nYes\n\n## Are there any user-facing changes?\n\nNo. Public APIs and default behavior remain unchanged."
    },
    {
      "commit": "773ef226c681d05825b6677529d753ae1ebf2fe7",
      "tree": "1da1b5c5495bf7f4aa3dc15096918061f06acb69",
      "parents": [
        "a635b18d3bc8c27584382e1a942ee03e5b365bad"
      ],
      "author": {
        "name": "Adrian Garcia Badaracco",
        "email": "1755071+adriangb@users.noreply.github.com",
        "time": "Fri Aug 14 06:38:30 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 06:38:30 2026 +0000"
      },
      "message": "docs: update proto-models README for the datafusion-common dependency (#24279)\n\n`datafusion-proto-models` now depends on `datafusion-common` and hosts\nthe `From` / `TryFrom` conversions between the generated proto types and\ntheir `datafusion-common` counterparts, but the crate README still\nclaimed it had no DataFusion dependencies beyond\n`datafusion-proto-common` and exposed only the generated structs.\n\nDescribe the conversions and why they live in this crate, and spell out\nthe narrowness that still holds: `datafusion-common` and\n`datafusion-proto-common` are the only DataFusion dependencies.\n\n---------\n\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "a635b18d3bc8c27584382e1a942ee03e5b365bad",
      "tree": "fbee1af3b3919202cf01556c1cee80c2be66f84b",
      "parents": [
        "6b7da9a9f321344cf9638203ea5e6b267fe80953"
      ],
      "author": {
        "name": "anchor",
        "email": "codeanqiang@gmail.com",
        "time": "Fri Aug 14 06:27:33 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 06:27:33 2026 +0000"
      },
      "message": "docs: fix signum documentation to say zero returns 0 (#24324)\n\n## Which issue does this PR close?\n\nN/A — documentation-only correction; no open issue tracks it.\n\n## Rationale for this change\n\nThe user guide for `signum` says \"Zero and positive numbers return `1`\",\nbut\n`signum(0)` returns `0` — the documented return value for zero is the\nopposite\nof what the function does. The repository\u0027s own tests already pin the\nreal\nbehavior:\n\n- `datafusion/sqllogictest/test_files/scalar.slt`:\n  `select signum(-2), signum(0), signum(2);` → `-1 0 1`\n- The unit tests in `signum.rs` assert `signum(±0.0) \u003d\u003d 0.0`\n\nThat behavior is intentional: it matches PostgreSQL `sign()` and Spark\n`signum()`, and was changed on purpose in #11580 (issue #11557). Only\nthe docs\nwere left describing the pre-#11580 behavior, so this PR updates the\ndocs, not\nthe code.\n\n## What changes are included in this PR?\n\nDocumentation only:\n\n- Update the `#[user_doc]` description in\n`datafusion/functions/src/math/signum.rs`\n  to state that zero returns `0`.\n- Regenerate `docs/source/user-guide/sql/scalar_functions.md` via\n  `dev/update_function_docs.sh`.\n\n## Are these changes tested?\n\nNo new tests: the corrected wording describes behavior the existing\ntests above\nalready assert, and those are what it was checked against.\n\n- `cargo test -p datafusion-functions --lib math::signum` → 2 passed\n- `cargo fmt --all -- --check` and `./ci/scripts/doc_prettier_check.sh`\n→ clean\n\n## Are there any user-facing changes?\n\nYes, documentation only. No API or runtime behavior change.\n\n---\n\nPrepared with AI assistance; every claim above was verified locally\nagainst the\nrepository\u0027s existing tests before opening this PR.\n\nCo-authored-by: codeAnqiang-ma \u003c273298913+codeAnqiang-ma@users.noreply.github.com\u003e"
    },
    {
      "commit": "6b7da9a9f321344cf9638203ea5e6b267fe80953",
      "tree": "4ac1b8231bb18a52bd55b856eca07d32b19d8476",
      "parents": [
        "5a5da23bdcaeed01a9bff36c46559622e0cae37c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 14 06:22:54 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 06:22:54 2026 +0000"
      },
      "message": "chore(deps): bump requests from 2.33.0 to 2.34.2 (#24303)\n\nBumps [requests](https://github.com/psf/requests) from 2.33.0 to 2.34.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/psf/requests/releases\"\u003erequests\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.34.2\u003c/h2\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e\nto avoid invariance issues with \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred\ndict types. Users calling \u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need\nto narrow typing in their code. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\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/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2342-2026-05-14\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.1\u003c/h2\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and\n\u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and\nremoved \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to\n\u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e\nimplementations\nweren\u0027t being properly detected as Iterables. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\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/k223kim\"\u003e\u003ccode\u003e@​k223kim\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/pull/7433\"\u003epsf/requests#7433\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/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\"\u003ehttps://github.com/psf/requests/blob/main/HISTORY.md#2341-2026-05-13\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.34.0\u003c/h2\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy,\npyright,\nand ty. \u003cstrong\u003eWe believe types are comprehensive but if you find\nissues, please\nreport them to the \u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7271\"\u003epinned\ntracking issue\u003c/a\u003e.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca\nhref\u003d\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca\nhref\u003d\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca\nhref\u003d\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e,\nand \u003ca href\u003d\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added\n\u003ccode\u003eusedforsecurity\u003dFalse\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream\nprojects\nshould be able to start testing prior to its release in October. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to\nitself, preventing\naccidental looping when traversing the history list. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains.\nThe\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/psf/requests/blob/main/HISTORY.md\"\u003erequests\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.34.2 (2026-05-14)\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMoved \u003ccode\u003eheaders\u003c/code\u003e input type back to \u003ccode\u003eMapping\u003c/code\u003e\nto avoid invariance issues\nwith \u003ccode\u003eMutableMapping\u003c/code\u003e and inferred dict types. Users calling\n\u003ccode\u003eRequest.headers.update()\u003c/code\u003e may need to narrow typing in their\ncode. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.1 (2026-05-13)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWidened \u003ccode\u003ejson\u003c/code\u003e input type from \u003ccode\u003edict\u003c/code\u003e and\n\u003ccode\u003elist\u003c/code\u003e to \u003ccode\u003eMapping\u003c/code\u003e\nand \u003ccode\u003eSequence\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eChanged \u003ccode\u003eheaders\u003c/code\u003e input type to MutableMapping and\nremoved \u003ccode\u003eNone\u003c/code\u003e from\n\u003ccode\u003eRequest.headers\u003c/code\u003e typing to improve handling for users. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResponse.reason\u003c/code\u003e moved from \u003ccode\u003estr | None\u003c/code\u003e to\n\u003ccode\u003estr\u003c/code\u003e to improve handling\nfor users. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eFixed a bug where some bodies with custom \u003ccode\u003e__getattr__\u003c/code\u003e\nimplementations\nweren\u0027t being properly detected as Iterables. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7433\"\u003e#7433\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.34.0 (2026-05-11)\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eAnnouncements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eRequests 2.34.0 introduces inline types, replacing those provided by\ntypeshed. Public API types should be fully compatible with mypy,\npyright,\nand ty. We believe types are comprehensive but if you find issues,\nplease\nreport them to the pinned tracking issue.\u003c/p\u003e\n\u003cp\u003eSpecial thanks to \u003ca\nhref\u003d\"https://github.com/bastimeyer\"\u003e\u003ccode\u003e@​bastimeyer\u003c/code\u003e\u003c/a\u003e, \u003ca\nhref\u003d\"https://github.com/cthoyt\"\u003e\u003ccode\u003e@​cthoyt\u003c/code\u003e\u003c/a\u003e, \u003ca\nhref\u003d\"https://github.com/edgarrmondragon\"\u003e\u003ccode\u003e@​edgarrmondragon\u003c/code\u003e\u003c/a\u003e,\nand \u003ca href\u003d\"https://github.com/srittau\"\u003e\u003ccode\u003e@​srittau\u003c/code\u003e\u003c/a\u003e for\nhelping review and test the types ahead of the release. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7272\"\u003e#7272\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eImprovements\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDigest Auth hashing algorithms have added\n\u003ccode\u003eusedforsecurity\u003dFalse\u003c/code\u003e to clarify\nsecurity considerations. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7310\"\u003e#7310\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.15 based on beta1. Downstream\nprojects\nshould be able to start testing prior to its release in October. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7422\"\u003e#7422\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests added support for Python 3.14t. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7419\"\u003e#7419\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBugfixes\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eResponse.history\u003c/code\u003e no longer contains a reference to\nitself, preventing\naccidental looping when traversing the history list. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7328\"\u003e#7328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer performs greedy matching on no_proxy domains. The\nproxy_bypass implementation has been updated with CPython\u0027s fix from\nbpo-39057. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eRequests no longer incorrectly strips duplicate leading slashes in\nURI paths. This should address user issues with specific presigned\nURLs. Note the full fix requires urllib3 2.7.0+. (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7315\"\u003e#7315\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/psf/requests/commit/6e83187b8feb273ed4c6cdab5efd8d54901dfab3\"\u003e\u003ccode\u003e6e83187\u003c/code\u003e\u003c/a\u003e\nv2.34.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/84d10f0be83e8f6aeca8a05230c52216431c4d0b\"\u003e\u003ccode\u003e84d10f0\u003c/code\u003e\u003c/a\u003e\nMove Request.headers back to Mapping (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7441\"\u003e#7441\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/b7b549b54571d03950b16afd2d01bc6ff0348224\"\u003e\u003ccode\u003eb7b549b\u003c/code\u003e\u003c/a\u003e\nv2.34.1\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/e511bc72777a94c45d004e010c597925092e1efe\"\u003e\u003ccode\u003ee511bc7\u003c/code\u003e\u003c/a\u003e\nFix mutability issues with headers input types (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7431\"\u003e#7431\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/5691f596134c2feb121e595c77a0178921fcce61\"\u003e\u003ccode\u003e5691f59\u003c/code\u003e\u003c/a\u003e\nUpdate JsonType containers to read-based collections (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7436\"\u003e#7436\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/2144213c307691710c9d665700860fc4993c3035\"\u003e\u003ccode\u003e2144213\u003c/code\u003e\u003c/a\u003e\nConstrain Response.reason to str (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7437\"\u003e#7437\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/6404f345e562d962abe6700a1c357ec1e7e18232\"\u003e\u003ccode\u003e6404f34\u003c/code\u003e\u003c/a\u003e\nFix \u003ccode\u003eprepare_body\u003c/code\u003e stream detection for\n\u003ccode\u003e__getattr__\u003c/code\u003e-based file wrappers (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7\"\u003e#7\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/0b401c76b6e80a4eecf3c690085b2553f6e261ca\"\u003e\u003ccode\u003e0b401c7\u003c/code\u003e\u003c/a\u003e\nv2.34.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/86b378d3f60f828daa13ca50aa82e287ff7b66b4\"\u003e\u003ccode\u003e86b378d\u003c/code\u003e\u003c/a\u003e\nAlign Session.get parameters with requests.get (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7429\"\u003e#7429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/psf/requests/commit/a4f9a5999bdb9bf2d6e7c8aa973b28cacb17134f\"\u003e\u003ccode\u003ea4f9a59\u003c/code\u003e\u003c/a\u003e\nPort bpo-39057 to Requests (\u003ca\nhref\u003d\"https://redirect.github.com/psf/requests/issues/7427\"\u003e#7427\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/psf/requests/compare/v2.33.0...v2.34.2\"\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\u003drequests\u0026package-manager\u003duv\u0026previous-version\u003d2.33.0\u0026new-version\u003d2.34.2)](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": "5a5da23bdcaeed01a9bff36c46559622e0cae37c",
      "tree": "df14bda682e0879bf9e5a881f5b13fbef6bd52bb",
      "parents": [
        "c085cdfa9b57d7b7700b91c2636b775ac9e5c638"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 14 06:22:33 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 06:22:33 2026 +0000"
      },
      "message": "chore(deps): bump typing-extensions from 4.15.0 to 4.16.0 (#24304)\n\nBumps [typing-extensions](https://github.com/python/typing_extensions)\nfrom 4.15.0 to 4.16.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/python/typing_extensions/releases\"\u003etyping-extensions\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e4.16.0\u003c/h2\u003e\n\u003cp\u003eNo changes since 4.16.0rc2.\u003c/p\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e\u0027s\n\u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca\nhref\u003d\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and\n\u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same\nname.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e,\n\u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases\nfor other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant\nthat calling \u003ccode\u003eisinstance\u003c/code\u003e with\n\u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could\nhave a different result in some situations depending on whether or not a\nprofiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This\naffected both CPython and PyPy implementations. Patch by Brian\nSchubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of\nmultiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated\nbase class. Backport of CPython PR \u003ca\nhref\u003d\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e\nby Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass\n\u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The\n\u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on\nPython 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian\nSchubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e,\n\u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e,\n\u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to\n\u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at\nruntime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to\n\u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has\nbeen adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated\nalias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or\ndeep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or\n\u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e\nconstructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX \u003d\nsentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than\n\u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e\nis applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc2\u003c/h2\u003e\n\u003cp\u003eChanges since 4.16.0rc1:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e\nis applied to a coroutine function on Python 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eChanges since 4.15.0:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e\u0027s\n\u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca\nhref\u003d\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and\n\u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same\nname.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e,\n\u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols as bases\nfor other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant\nthat calling \u003ccode\u003eisinstance\u003c/code\u003e with\n\u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could\nhave a different result in some situations depending on whether or not a\nprofiling function had been set using \u003ccode\u003esys.setprofile\u003c/code\u003e. This\naffected both CPython and PyPy implementations. Patch by Brian\nSchubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of\nmultiple inheritance involving an \u003ccode\u003e@deprecated\u003c/code\u003e-decorated\nbase class. Backport of CPython PR \u003ca\nhref\u003d\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e\nby Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass\n\u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on Python 3.9. The\n\u003ccode\u003etyping\u003c/code\u003e implementation has always raised an error, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on\nPython 3.10+ since \u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian\nSchubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e,\n\u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e,\n\u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e parameters to\n\u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these parameters at\nruntime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to\n\u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the name that has\nbeen adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python 3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated\nalias for backwards compatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or\ndeep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or\n\u003ccode\u003erepr\u003c/code\u003e as a positional argument to the \u003ccode\u003esentinel\u003c/code\u003e\nconstructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX \u003d\nsentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than\n\u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.16.0rc1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e\u0027s\n\u003ccode\u003e__module__\u003c/code\u003e attribute writable. Backport of CPython PR \u003ca\nhref\u003d\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and\n\u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting keys with the same\nname.\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/python/typing_extensions/blob/main/CHANGELOG.md\"\u003etyping-extensions\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eRelease 4.16.0 (July 2, 2025)\u003c/h1\u003e\n\u003cp\u003eNo user-facing changes since 4.16.0rc2.\u003c/p\u003e\n\u003ch1\u003eRelease 4.16.0rc2 (June 25, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid a \u003ccode\u003eDeprecationWarning\u003c/code\u003e when \u003ccode\u003edeprecated\u003c/code\u003e\nis applied to a coroutine function on\nPython 3.14.0.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003eRelease 4.16.0rc1 (June 24, 2026)\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003eMake \u003ccode\u003etyping_extensions.TypeAliasType\u003c/code\u003e\u0027s\n\u003ccode\u003e__module__\u003c/code\u003e attribute writable.\nBackport of CPython PR\n\u003ca\nhref\u003d\"https://redirect.github.com/python/cpython/pull/149172\"\u003e#149172\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFix setting of \u003ccode\u003e__required_keys__\u003c/code\u003e and\n\u003ccode\u003e__optional_keys__\u003c/code\u003e when inheriting\nkeys with the same name.\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eAsyncIterator\u003c/code\u003e, \u003ccode\u003eio.Reader\u003c/code\u003e,\n\u003ccode\u003eio.Writer\u003c/code\u003e and \u003ccode\u003eos.PathLike\u003c/code\u003e protocols\nas bases for other protocols.\u003c/li\u003e\n\u003cli\u003eFix incorrect behaviour on Python 3.9 and Python 3.10 that meant\nthat\ncalling \u003ccode\u003eisinstance\u003c/code\u003e with\n\u003ccode\u003etyping_extensions.Concatenate[...]\u003c/code\u003e or\n\u003ccode\u003etyping_extensions.Unpack[...]\u003c/code\u003e as the first argument could\nhave a different\nresult in some situations depending on whether or not a profiling\nfunction had been\nset using \u003ccode\u003esys.setprofile\u003c/code\u003e. This affected both CPython and\nPyPy implementations.\nPatch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003e__init_subclass__()\u003c/code\u003e behavior in the presence of\nmultiple inheritance involving\nan \u003ccode\u003e@deprecated\u003c/code\u003e-decorated base class. Backport of CPython PR\n\u003ca\nhref\u003d\"https://redirect.github.com/python/cpython/pull/138210\"\u003e#138210\u003c/a\u003e\nby Brian Schubert.\u003c/li\u003e\n\u003cli\u003eRaise \u003ccode\u003eTypeError\u003c/code\u003e when attempting to subclass\n\u003ccode\u003etyping_extensions.ParamSpec\u003c/code\u003e on\nPython 3.9. The \u003ccode\u003etyping\u003c/code\u003e implementation has always raised an\nerror, and the\n\u003ccode\u003etyping_extensions\u003c/code\u003e implementation has raised an error on\nPython 3.10+ since\n\u003ccode\u003etyping_extensions\u003c/code\u003e v4.6.0. Patch by Brian Schubert.\u003c/li\u003e\n\u003cli\u003eAdd the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e,\n\u003ccode\u003econtravariant\u003c/code\u003e, and \u003ccode\u003einfer_variance\u003c/code\u003e parameters\nto \u003ccode\u003eTypeVarTuple\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eOfficially support the \u003ccode\u003ebound\u003c/code\u003e, \u003ccode\u003ecovariant\u003c/code\u003e,\n\u003ccode\u003econtravariant\u003c/code\u003e and \u003ccode\u003einfer_variance\u003c/code\u003e\nparameters to \u003ccode\u003eParamSpec\u003c/code\u003e. Improve the validation of these\nparameters at runtime.\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e to\n\u003ccode\u003etyping_extensions.sentinel\u003c/code\u003e, following the\nname that has been adopted for \u003ccode\u003ebuiltins.sentinel\u003c/code\u003e on Python\n3.15.\n\u003ccode\u003etyping_extensions.Sentinel\u003c/code\u003e is retained as a soft-deprecated\nalias for backwards\ncompatibility.\u003c/li\u003e\n\u003cli\u003eAdd support for pickling sentinels.\u003c/li\u003e\n\u003cli\u003eSentinels now preserve their identity when copied or\ndeep-copied.\u003c/li\u003e\n\u003cli\u003eDeprecate passing \u003ccode\u003ename\u003c/code\u003e as a keyword argument or\n\u003ccode\u003erepr\u003c/code\u003e as a positional argument\nto the \u003ccode\u003esentinel\u003c/code\u003e constructor.\u003c/li\u003e\n\u003cli\u003eThe default repr of a sentinel \u003ccode\u003eX \u003d\nsentinel(\u0026quot;X\u0026quot;)\u003c/code\u003e is now \u003ccode\u003eX\u003c/code\u003e rather than\n\u003ccode\u003e\u0026lt;X\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eDeprecate arbitrary attribute assignments to sentinels.\u003c/li\u003e\n\u003cli\u003eDeprecate subclassing sentinels.\u003c/li\u003e\n\u003cli\u003eAdd support for Python 3.15.\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/python/typing_extensions/commit/f29cd28d8ed7642cafb1d18daf5aa41be6a5c0aa\"\u003e\u003ccode\u003ef29cd28\u003c/code\u003e\u003c/a\u003e\nPrepare relase 4.16.0 (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/774\"\u003e#774\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/typing_extensions/commit/43174610ec0c407ce05ad750077c4e62b9192b2b\"\u003e\u003ccode\u003e4317461\u003c/code\u003e\u003c/a\u003e\nBump version to 4.16.0rc2.dev (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/772\"\u003e#772\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/typing_extensions/commit/4f71098e5be84798d36416bbca0e776223ee40f9\"\u003e\u003ccode\u003e4f71098\u003c/code\u003e\u003c/a\u003e\nPrepare release 4.16.0rc2 (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/771\"\u003e#771\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/typing_extensions/commit/37ed08a11f3b7c05234f8963ab97e3ebdbdc16a2\"\u003e\u003ccode\u003e37ed08a\u003c/code\u003e\u003c/a\u003e\nRemove use of \u003ccode\u003easyncio.coroutines.iscoroutinefunction()\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/769\"\u003e#769\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/typing_extensions/commit/8dcc5594cbe5a4e348245fea6ce160ce93ed6601\"\u003e\u003ccode\u003e8dcc559\u003c/code\u003e\u003c/a\u003e\nImprove \u003ccode\u003eTypedDict\u003c/code\u003e documentation (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/770\"\u003e#770\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/typing_extensions/commit/224f8d50551d26f0d603093596c3a47a7302a46f\"\u003e\u003ccode\u003e224f8d5\u003c/code\u003e\u003c/a\u003e\nPost-release followups for 3.16.0rc1 (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/767\"\u003e#767\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/typing_extensions/commit/777de3eb5f4562e2054d1d7ce707f098b1f4fd2f\"\u003e\u003ccode\u003e777de3e\u003c/code\u003e\u003c/a\u003e\nPrepare release 4.16.0rc1 (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/766\"\u003e#766\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/typing_extensions/commit/890be90f1545e7d5fa904dfa3154d5f03c96782c\"\u003e\u003ccode\u003e890be90\u003c/code\u003e\u003c/a\u003e\nType variable tuple variance (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/741\"\u003e#741\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/typing_extensions/commit/0e0545866d78458b668dc52d2edc411f6e39540d\"\u003e\u003ccode\u003e0e05458\u003c/code\u003e\u003c/a\u003e\nPin SQLAlchemy third-party tests to pytest\u003d\u003d9.0.3 (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/765\"\u003e#765\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/typing_extensions/commit/d2777468c274202ec290103b34313e50cf040229\"\u003e\u003ccode\u003ed277746\u003c/code\u003e\u003c/a\u003e\ndocs: add version compatibility table (\u003ca\nhref\u003d\"https://redirect.github.com/python/typing_extensions/issues/733\"\u003e#733\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/python/typing_extensions/compare/4.15.0...4.16.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\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": "c085cdfa9b57d7b7700b91c2636b775ac9e5c638",
      "tree": "e72c85381a8de7b29983ad60f4e01ca13af4ebd6",
      "parents": [
        "13552dd6e87cbe6e509afc42c427b5063b99c995"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 14 06:14:38 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 06:14:38 2026 +0000"
      },
      "message": "chore(deps-dev): bump webpack from 5.105.0 to 5.109.2 in /datafusion/wasmtest/datafusion-wasm-app in the all-npm-deps group across 1 directory (#24300)\n\nBumps the all-npm-deps group with 1 update in the\n/datafusion/wasmtest/datafusion-wasm-app directory:\n[webpack](https://github.com/webpack/webpack).\n\nUpdates `webpack` from 5.105.0 to 5.109.2\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/webpack/webpack/releases\"\u003ewebpack\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev5.109.2\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eResolve aliases pointing at a package directory whose name ends with\n\u003ccode\u003e.js\u003c/code\u003e again. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21542\"\u003e#21542\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eName CSS sources in source maps by their resource path, without the\n\u003ccode\u003ecss \u003c/code\u003e prefix. (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21536\"\u003e#21536\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDelete no longer referenced files from the filesystem cache directory\nafter storing the cache, age them by recorded time so restored caches\nare cleaned too, and collect every fully expired pack in one store\ninstead of one per build. (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21528\"\u003e#21528\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReport \u003ccode\u003e\u0026quot;universal\u0026quot;\u003c/code\u003e as the loader context\ntarget for the universal target. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21540\"\u003e#21540\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSkip \u003ccode\u003erequire().prop\u003c/code\u003e in dead branches gated by inlined\nimported constants. (by \u003ca\nhref\u003d\"https://github.com/hai-x\"\u003e\u003ccode\u003e@​hai-x\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21517\"\u003e#21517\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAnnotate configuration options and public hooks in the generated\ntypes with the \u003ccode\u003e@since\u003c/code\u003e JSDoc tag. (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21473\"\u003e#21473\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev5.109.1\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix stray semicolon emitted before an imported call following a\nparenthesized sequence element. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21533\"\u003e#21533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMake \u003ccode\u003erequire(esm)\u003c/code\u003e \u003ccode\u003emodule.exports\u003c/code\u003e re-export\nanalysis independent of module processing order. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21521\"\u003e#21521\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIgnore ERR_SERVER_NOT_RUNNING on lazy-compilation backend dispose so\n\u003ccode\u003ecompiler.close()\u003c/code\u003e succeeds on Bun. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21521\"\u003e#21521\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eName the failing key when DefinePlugin fails to evaluate a\n\u003ccode\u003etypeof\u003c/code\u003e value. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21503\"\u003e#21503\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImprove Deno compatibility: guard \u003ccode\u003esetNoDelay\u003c/code\u003e and\nforce-close connections on lazy-compilation backend dispose, and return\na real \u003ccode\u003eArrayBuffer\u003c/code\u003e from the Node async/sync wasm loader so\n\u003ccode\u003eWebAssembly.instantiate\u003c/code\u003e accepts it. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21524\"\u003e#21524\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up the HTML parser and cut its peak memory: module-scope\nhelpers/state and tokenizer callbacks, plus exact AST column pre-sizing.\n(by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21492\"\u003e#21492\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eTrack CommonJS build dependencies by parsing sources when\n\u003ccode\u003erequire.cache\u003c/code\u003e children are unavailable (e.g. Bun). (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21531\"\u003e#21531\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCook common string-literal escapes on the JS parser fast path and own\nthe tokenizer\u0027s cold-path readers. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21500\"\u003e#21500\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBuild the CSS \u003ccode\u003eparseA*\u003c/code\u003e AST on the SoA store instead of\nnode classes, cutting parse memory and time. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21498\"\u003e#21498\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up and cut memory of the experimental CSS and HTML parsers:\ndrop two derivable AST node columns, and scan long string, url, comment,\nand plaintext token bodies natively. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21504\"\u003e#21504\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up non-modules CSS parsing: skip redundant token re-reads, drop\nselector-prelude tokens without materializing nodes, allocate rule\npreludes lazily, and fast-path empty list seals. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21511\"\u003e#21511\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up stats generation and cut its peak memory: reuse cached sort\ncomparators instead of thrashing the comparator caches on every sort,\nand drop redundant module-graph lookups and allocations in the\nextractors. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21506\"\u003e#21506\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up CSS parsing: byte-range function-name checks, indexed\nsibling lookahead. (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21520\"\u003e#21520\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReduce allocations and redundant work across the code-generation,\nmodule-concatenation, exports/usage-analysis, hashing, and\nchunk-splitting hot paths. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21516\"\u003e#21516\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eEnable the Node.js compile cache in the webpack CLI entry point. (by\n\u003ca href\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21523\"\u003e#21523\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eEncode the persistent cache with V8\u0027s value serializer. (by \u003ca\nhref\u003d\"https://github.com/avivkeller\"\u003e\u003ccode\u003e@​avivkeller\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21514\"\u003e#21514\u003c/a\u003e)\u003c/p\u003e\n\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/webpack/webpack/blob/main/CHANGELOG.md\"\u003ewebpack\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e5.109.2\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eResolve aliases pointing at a package directory whose name ends with\n\u003ccode\u003e.js\u003c/code\u003e again. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21542\"\u003e#21542\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eName CSS sources in source maps by their resource path, without the\n\u003ccode\u003ecss \u003c/code\u003e prefix. (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21536\"\u003e#21536\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eDelete no longer referenced files from the filesystem cache directory\nafter storing the cache, age them by recorded time so restored caches\nare cleaned too, and collect every fully expired pack in one store\ninstead of one per build. (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21528\"\u003e#21528\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReport \u003ccode\u003e\u0026quot;universal\u0026quot;\u003c/code\u003e as the loader context\ntarget for the universal target. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21540\"\u003e#21540\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSkip \u003ccode\u003erequire().prop\u003c/code\u003e in dead branches gated by inlined\nimported constants. (by \u003ca\nhref\u003d\"https://github.com/hai-x\"\u003e\u003ccode\u003e@​hai-x\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21517\"\u003e#21517\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAnnotate configuration options and public hooks in the generated\ntypes with the \u003ccode\u003e@since\u003c/code\u003e JSDoc tag. (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21473\"\u003e#21473\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e5.109.1\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eFix stray semicolon emitted before an imported call following a\nparenthesized sequence element. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21533\"\u003e#21533\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMake \u003ccode\u003erequire(esm)\u003c/code\u003e \u003ccode\u003emodule.exports\u003c/code\u003e re-export\nanalysis independent of module processing order. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21521\"\u003e#21521\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIgnore ERR_SERVER_NOT_RUNNING on lazy-compilation backend dispose so\n\u003ccode\u003ecompiler.close()\u003c/code\u003e succeeds on Bun. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21521\"\u003e#21521\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eName the failing key when DefinePlugin fails to evaluate a\n\u003ccode\u003etypeof\u003c/code\u003e value. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21503\"\u003e#21503\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eImprove Deno compatibility: guard \u003ccode\u003esetNoDelay\u003c/code\u003e and\nforce-close connections on lazy-compilation backend dispose, and return\na real \u003ccode\u003eArrayBuffer\u003c/code\u003e from the Node async/sync wasm loader so\n\u003ccode\u003eWebAssembly.instantiate\u003c/code\u003e accepts it. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21524\"\u003e#21524\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up the HTML parser and cut its peak memory: module-scope\nhelpers/state and tokenizer callbacks, plus exact AST column pre-sizing.\n(by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21492\"\u003e#21492\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eTrack CommonJS build dependencies by parsing sources when\n\u003ccode\u003erequire.cache\u003c/code\u003e children are unavailable (e.g. Bun). (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21531\"\u003e#21531\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCook common string-literal escapes on the JS parser fast path and own\nthe tokenizer\u0027s cold-path readers. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21500\"\u003e#21500\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eBuild the CSS \u003ccode\u003eparseA*\u003c/code\u003e AST on the SoA store instead of\nnode classes, cutting parse memory and time. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21498\"\u003e#21498\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up and cut memory of the experimental CSS and HTML parsers:\ndrop two derivable AST node columns, and scan long string, url, comment,\nand plaintext token bodies natively. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21504\"\u003e#21504\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up non-modules CSS parsing: skip redundant token re-reads, drop\nselector-prelude tokens without materializing nodes, allocate rule\npreludes lazily, and fast-path empty list seals. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21511\"\u003e#21511\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up stats generation and cut its peak memory: reuse cached sort\ncomparators instead of thrashing the comparator caches on every sort,\nand drop redundant module-graph lookups and allocations in the\nextractors. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21506\"\u003e#21506\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSpeed up CSS parsing: byte-range function-name checks, indexed\nsibling lookahead. (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21520\"\u003e#21520\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReduce allocations and redundant work across the code-generation,\nmodule-concatenation, exports/usage-analysis, hashing, and\nchunk-splitting hot paths. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21516\"\u003e#21516\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eEnable the Node.js compile cache in the webpack CLI entry point. (by\n\u003ca href\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/pull/21523\"\u003e#21523\u003c/a\u003e)\u003c/p\u003e\n\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/webpack/webpack/commit/6a24bd65b72c43207c36ce61b54e1f5833486906\"\u003e\u003ccode\u003e6a24bd6\u003c/code\u003e\u003c/a\u003e\nchore(release): new release (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/issues/21534\"\u003e#21534\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack/commit/d1b5b6d1d75b6dc04248ed98420a838a00fda221\"\u003e\u003ccode\u003ed1b5b6d\u003c/code\u003e\u003c/a\u003e\nfix: resolve aliases pointing at a package directory ending in .js (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/issues/21542\"\u003e#21542\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack/commit/9cdcc577c7a1971fa07a2b38828d1c61145597a3\"\u003e\u003ccode\u003e9cdcc57\u003c/code\u003e\u003c/a\u003e\nfix(target): report \u0026quot;universal\u0026quot; as the loader target (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/issues/21540\"\u003e#21540\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack/commit/774e7e4b3d525e00bc7698c518b89e44eba7230d\"\u003e\u003ccode\u003e774e7e4\u003c/code\u003e\u003c/a\u003e\nfeat: annotate schema options with added keywords (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/issues/21473\"\u003e#21473\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack/commit/ff07bdc72f875868dd33cd00dfeae61392c01ded\"\u003e\u003ccode\u003eff07bdc\u003c/code\u003e\u003c/a\u003e\nfix(css): name CSS sources in source maps by their resource path (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/issues/21536\"\u003e#21536\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack/commit/d56d82dd2f98f7ed6dcb3b14260ea7c53ddf2145\"\u003e\u003ccode\u003ed56d82d\u003c/code\u003e\u003c/a\u003e\nfix(cache): reclaim stale filesystem cache files reliably (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/issues/21539\"\u003e#21539\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack/commit/ae67e2a9225115e998607e180e2ef226b255ca34\"\u003e\u003ccode\u003eae67e2a\u003c/code\u003e\u003c/a\u003e\nchore(readme): add codspeed (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/issues/21497\"\u003e#21497\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack/commit/964bbfad0ea01916ae78ab7d81cb1b544bea90f0\"\u003e\u003ccode\u003e964bbfa\u003c/code\u003e\u003c/a\u003e\nfix: delete no longer referenced files from the filesystem cache\ndirectory (#...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack/commit/075d0cd8fa989752014f20988d95116b5235b997\"\u003e\u003ccode\u003e075d0cd\u003c/code\u003e\u003c/a\u003e\nfeat: skip \u003ccode\u003erequire().prop\u003c/code\u003e in dead branches (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/issues/21517\"\u003e#21517\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack/commit/ec3908838175b79c004f61f9bf53d57a6d0e52f8\"\u003e\u003ccode\u003eec39088\u003c/code\u003e\u003c/a\u003e\nchore(release): new release (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack/issues/21493\"\u003e#21493\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/webpack/webpack/compare/v5.105.0...v5.109.2\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\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": "13552dd6e87cbe6e509afc42c427b5063b99c995",
      "tree": "94c9254b60cd8b66d48b02126b874cfa523958ca",
      "parents": [
        "91ead9f87bac2f4bab4c41a8897367c160f39c17"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 14 06:14:17 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 06:14:17 2026 +0000"
      },
      "message": "chore(deps): bump rich from 14.3.2 to 15.0.0 (#24305)\n\nBumps [rich](https://github.com/Textualize/rich) from 14.3.2 to 15.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/Textualize/rich/releases\"\u003erich\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eThe So Long 3.8 Release\u003c/h2\u003e\n\u003cp\u003eA few fixes. The major version bump is to honor the passing of 3.8\nsupport which reached its EOL in October 7, 2024\u003c/p\u003e\n\u003ch2\u003e[15.0.0] - 2026-04-12\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBreaking change: Dropped support for Python3.8\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed empty print ignoring the \u003ccode\u003eend\u003c/code\u003e parameter \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4075\"\u003eTextualize/rich#4075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eText.from_ansi\u003c/code\u003e removing newlines \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4076\"\u003eTextualize/rich#4076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eFileProxy.isatty\u003c/code\u003e not proxying \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4077\"\u003eTextualize/rich#4077\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed inline code in Markdown tables cells \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4079\"\u003eTextualize/rich#4079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eThe Faster Startup Release\u003c/h2\u003e\n\u003cp\u003eNo new features in this release, but there should be improved startup\ntime for Rich apps, and potentially improved runtime if you have a lot\nof links.\u003c/p\u003e\n\u003ch2\u003e[14.3.4] - 2026-04-11\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved import time with lazy loading \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4070\"\u003eTextualize/rich#4070\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChanged link id generation to avoid random number generation at\nruntime \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/3845\"\u003eTextualize/rich#3845\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eThe infinite Release\u003c/h2\u003e\n\u003cp\u003eFixed a infinite loop in split_graphemes\u003c/p\u003e\n\u003ch2\u003e[14.3.3] - 2026-02-19\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed infinite loop with \u003ccode\u003ecells.split_graphemes\u003c/code\u003e \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4006\"\u003eTextualize/rich#4006\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/Textualize/rich/blob/main/CHANGELOG.md\"\u003erich\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[15.0.0] - 2026-04-12\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBreaking change: Dropped support for Python3.8\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed empty print ignoring the \u003ccode\u003eend\u003c/code\u003e parameter \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4075\"\u003eTextualize/rich#4075\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eText.from_ansi\u003c/code\u003e removing newlines \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4076\"\u003eTextualize/rich#4076\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eFileProxy.isatty\u003c/code\u003e not proxying \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4077\"\u003eTextualize/rich#4077\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed inline code in Markdown tables cells \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4079\"\u003eTextualize/rich#4079\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[14.3.4] - 2026-04-11\u003c/h2\u003e\n\u003ch3\u003eChanged\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eImproved import time with lazy loading \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4070\"\u003eTextualize/rich#4070\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eChanged link id generation to avoid random number generation at\nruntime \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/3845\"\u003eTextualize/rich#3845\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[14.3.3] - 2026-02-19\u003c/h2\u003e\n\u003ch3\u003eFixed\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFixed infinite loop with \u003ccode\u003ecells.split_graphemes\u003c/code\u003e \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/pull/4006\"\u003eTextualize/rich#4006\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/Textualize/rich/commit/6ac483cbea39cab124dfd3483bba70ffafb71050\"\u003e\u003ccode\u003e6ac483c\u003c/code\u003e\u003c/a\u003e\ncorrection\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Textualize/rich/commit/458a9109c8b7da81c17b2270ea8a88f3e8c0465a\"\u003e\u003ccode\u003e458a910\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/issues/4080\"\u003e#4080\u003c/a\u003e\nfrom Textualize/bump1500\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Textualize/rich/commit/82e06e0d9985fd8cce456dc3977e0d2d9e84b4d8\"\u003e\u003ccode\u003e82e06e0\u003c/code\u003e\u003c/a\u003e\nchangelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Textualize/rich/commit/d6556bc44881b9904f29f5d9d69a0812b30675d1\"\u003e\u003ccode\u003ed6556bc\u003c/code\u003e\u003c/a\u003e\nbump to 15.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Textualize/rich/commit/ffe2edc5968eac19d5493c2d7b27965031a692e9\"\u003e\u003ccode\u003effe2edc\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/issues/4079\"\u003e#4079\u003c/a\u003e\nfrom Textualize/inline-table-code\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Textualize/rich/commit/cf3b5a16f7a76b2e8c4921d3314021bb72a6c5c1\"\u003e\u003ccode\u003ecf3b5a1\u003c/code\u003e\u003c/a\u003e\nchangelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Textualize/rich/commit/77f0edbdef71f2a895cd0ab1481e9a1fc79d42e6\"\u003e\u003ccode\u003e77f0edb\u003c/code\u003e\u003c/a\u003e\nremove comments\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Textualize/rich/commit/7ef2d05ca8aa3cb405dab2fdf3282e69cf8089e3\"\u003e\u003ccode\u003e7ef2d05\u003c/code\u003e\u003c/a\u003e\nfix inline code in table cells\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Textualize/rich/commit/19c67b9a3479841e9133bea94607c89ee931d3fc\"\u003e\u003ccode\u003e19c67b9\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/Textualize/rich/issues/4077\"\u003e#4077\u003c/a\u003e\nfrom Textualize/isattry\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Textualize/rich/commit/494b795031782c694297d2db78bd04fb8c82f590\"\u003e\u003ccode\u003e494b795\u003c/code\u003e\u003c/a\u003e\nchangelog\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/Textualize/rich/compare/v14.3.2...v15.0.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\u003drich\u0026package-manager\u003duv\u0026previous-version\u003d14.3.2\u0026new-version\u003d15.0.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": "91ead9f87bac2f4bab4c41a8897367c160f39c17",
      "tree": "962aa038c262d06f9cef39a61d4b3f00a7b17917",
      "parents": [
        "ede32c170d22dcb42f3a46e738c030ef8eed3d73"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 14 06:08:46 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 06:08:46 2026 +0000"
      },
      "message": "chore(deps): bump setuptools from 83.0.0 to 84.0.0 (#24301)\n\nBumps [setuptools](https://github.com/pypa/setuptools) from 83.0.0 to\n84.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/pypa/setuptools/blob/main/NEWS.rst\"\u003esetuptools\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev84.0.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eNewline-separated \u003ccode\u003ekeywords\u003c/code\u003e and\n\u003ccode\u003eplatforms\u003c/code\u003e\u003ccode\u003epypa/setuptools#4887\u003c/code\u003e\u003ccode\u003eold\nspecification \u0026lt;https://peps.python.org/pep-0345/\u0026gt;\u003c/code\u003e_\nseparated items with spaces and the current one uses commas. (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/4887\"\u003e#4887\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eExtension\u003c/code\u003e\u003ccode\u003epypa/distutils#373\u003c/code\u003e\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5022\"\u003e#5022\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eThe C compiler modules now emit log messages through their own\n\u003ccode\u003ecompilers.C.*\u003c/code\u003e loggers instead of the distutils root logger,\npart of decoupling the compilers package from distutils. The logger\nnames are normalized to a stable \u003ccode\u003ecompilers.C.*\u003c/code\u003e prefix so\nthey remain constant as the package migrates toward a standalone\n\u003ccode\u003ecompilers.C\u003c/code\u003e distribution. (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5266\"\u003e#5266\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eThe C compilers gained a \u003ccode\u003eCompiler.call\u003c/code\u003e method -- a thin\nwrapper over \u003ccode\u003esubprocess.check_call\u003c/code\u003e (with macOS\ndeployment-target env injection) that is the modern replacement for\n\u003ccode\u003eCompiler.spawn\u003c/code\u003e. The compilers no longer depend on\n\u003ccode\u003edistutils.spawn\u003c/code\u003e, \u003ccode\u003edistutils.dir_util\u003c/code\u003e,\n\u003ccode\u003edistutils.file_util\u003c/code\u003e, \u003ccode\u003edistutils._modified\u003c/code\u003e, or\n\u003ccode\u003edistutils.util.execute\u003c/code\u003e/\u003ccode\u003esplit_quoted\u003c/code\u003e: the\ngeneric \u003ccode\u003enewer\u003c/code\u003e/\u003ccode\u003enewer_group\u003c/code\u003e and\n\u003ccode\u003esplit_quoted\u003c/code\u003e helpers are vendored into the\n\u003ccode\u003ecompilers\u003c/code\u003e package, and\n\u003ccode\u003eCompiler.mkpath\u003c/code\u003e/\u003ccode\u003emove_file\u003c/code\u003e/\u003ccode\u003eexecute\u003c/code\u003e\nare implemented directly on the standard library\n(\u003ccode\u003eos.makedirs\u003c/code\u003e/\u003ccode\u003eshutil.move\u003c/code\u003e). The methods are\nretained for backward compatibility. (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5267\"\u003e#5267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eThe compilers no longer depend on \u003ccode\u003edistutils.util\u003c/code\u003e,\n\u003ccode\u003edistutils.version\u003c/code\u003e, \u003ccode\u003edistutils.compat\u003c/code\u003e, or\n\u003ccode\u003edistutils._macos_compat\u003c/code\u003e. The platform-identification\nhelpers\n(\u003ccode\u003eget_platform\u003c/code\u003e/\u003ccode\u003eget_host_platform\u003c/code\u003e/\u003ccode\u003eis_mingw\u003c/code\u003e)\nnow live in \u003ccode\u003edistutils.compilers.platform.detect\u003c/code\u003e and the\nmacOS deployment-target logic and \u003ccode\u003ecompiler_fixup\u003c/code\u003e in\n\u003ccode\u003edistutils.compilers.platform.macos\u003c/code\u003e;\n\u003ccode\u003eCygwinCCompiler.gcc_version\u003c/code\u003e returns a\n\u003ccode\u003epackaging.version.Version\u003c/code\u003e. \u003ccode\u003edistutils.util\u003c/code\u003e\nre-exports the platform/macOS helpers from their new homes for backward\ncompatibility rather than keeping duplicate copies. (sysconfig lookups\nstill route through distutils pending its own decoupling.) (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5268\"\u003e#5268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eThe compilers now read their build configuration from the standard\nlibrary\u0027s \u003ccode\u003esysconfig\u003c/code\u003e instead of\n\u003ccode\u003edistutils.sysconfig\u003c/code\u003e. Per-compiler customization --\npreviously \u003ccode\u003edistutils.sysconfig.customize_compiler\u003c/code\u003e -- has\nmoved into \u003ccode\u003eCompiler.configure_system()\u003c/code\u003e: a no-op on the base\nclass, with \u003ccode\u003eUnixCCompiler\u003c/code\u003e applying the\ncompiler/flag/archiver settings CPython recorded in\n\u003ccode\u003esysconfig\u003c/code\u003e (and the usual\n\u003ccode\u003eCC\u003c/code\u003e/\u003ccode\u003eCFLAGS\u003c/code\u003e/\u003ccode\u003eLDSHARED\u003c/code\u003e/… environment\noverrides). \u003ccode\u003edistutils.sysconfig.customize_compiler\u003c/code\u003e is\nretained as a thin wrapper that calls\n\u003ccode\u003ecompiler.configure_system()\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5269\"\u003e#5269\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe MSVC linker now passes its arguments through a response file\nwhen the command line would exceed the Windows maximum length, fixing\nfailures when linking a large number of objects. (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/4177\"\u003e#4177\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eThe Cygwin and MinGW compilers now pass \u003ccode\u003e-O1\u003c/code\u003e instead of\na bare \u003ccode\u003e-O\u003c/code\u003e. The two are equivalent to GCC, but\n\u003ccode\u003ecc1\u003c/code\u003e rejected the bare form when building 32-bit extensions\nwith \u003ccode\u003e-m32\u003c/code\u003e. -- by :user:\u003ccode\u003edchaudhari7177\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/4873\"\u003e#4873\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecopy_file\u003c/code\u003e\u003ccode\u003epypa/distutils#379\u003c/code\u003e\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5079\"\u003e#5079\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSetuptools wheels no longer bundled the project\u0027s own test modules.\n-- by :user:\u003ccode\u003eitscloud0\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5212\"\u003e#5212\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ebuild_ext\u003c/code\u003e no longer fails when cross-compiling with a\ncompiler other than MSVC (such as MinGW). \u003ccode\u003eCompiler\u003c/code\u003e now\nprovides a no-op\n\u003ccode\u003einitialize()\u003c/code\u003e\u003ccode\u003epypa/distutils#399\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eImproved Documentation\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eClarified what \u0026quot;correspond exactly to the directory\nstructure\u0026quot; means in\nthe \u003ccode\u003epackages\u003c/code\u003e section of the Package Discovery user guide.\n(\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/4109\"\u003e#4109\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eDocumented how \u003ccode\u003ebdist_wheel\u003c/code\u003e\u0027s\n\u003ccode\u003epy_limited_api\u003c/code\u003e option controls\n\u003ccode\u003eabi3\u003c/code\u003e wheel tagging for extension modules -- by\n:user:\u003ccode\u003eHimanshuagrawal4\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/4741\"\u003e#4741\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eCompiler.spawn\u003c/code\u003e is deprecated in favor of the new\n\u003ccode\u003eCompiler.call\u003c/code\u003e. \u003ccode\u003ecall\u003c/code\u003e raises native\n\u003ccode\u003esubprocess\u003c/code\u003e exceptions; \u003ccode\u003espawn\u003c/code\u003e remains as a shim\nthat emits a \u003ccode\u003eDeprecationWarning\u003c/code\u003e and translates them to\n\u003ccode\u003eDistutilsExecError\u003c/code\u003e. The MSVC \u003ccode\u003espawn\u003c/code\u003e\ncompatibility shim for third-party monkeypatches predating the\n\u003ccode\u003eenv\u003c/code\u003e argument (numpy.distutils before 1.19, per \u003ca\nhref\u003d\"https://redirect.github.com/pypa/distutils/issues/15\"\u003epypa/distutils#15\u003c/a\u003e)\nhas been removed. \u003ccode\u003edistutils.spawn.spawn\u003c/code\u003e is likewise reduced\nto a thin wrapper around \u003ccode\u003esubprocess.check_call\u003c/code\u003e: it no\nlonger resolves \u003ccode\u003ecmd[0]\u003c/code\u003e via \u003ccode\u003eshutil.which\u003c/code\u003e\n(\u003ccode\u003esubprocess\u003c/code\u003e searches \u003ccode\u003ePATH\u003c/code\u003e itself) nor injects\n\u003ccode\u003eMACOSX_DEPLOYMENT_TARGET\u003c/code\u003e (that now lives with the\ncompilers, the only callers to which it applied). (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5267\"\u003e#5267\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBuilding an extension with a \u003ccode\u003eMACOSX_DEPLOYMENT_TARGET\u003c/code\u003e\nlower than the interpreter\u0027s configured value now raises\n\u003ccode\u003ecompilers.errors.PlatformError\u003c/code\u003e instead of\n\u003ccode\u003edistutils.errors.DistutilsPlatformError\u003c/code\u003e (the macOS\ndeployment-target check moved into the compilers package).\n\u003ccode\u003eCygwinCCompiler.gcc_version\u003c/code\u003e returns a\n\u003ccode\u003epackaging.version.Version\u003c/code\u003e rather than the removed\n\u003ccode\u003edistutils.version.LooseVersion\u003c/code\u003e. Completing the transition\nbegun in \u003ca\nhref\u003d\"https://redirect.github.com/pypa/distutils/issues/246\"\u003epypa/distutils#246\u003c/a\u003e,\n\u003ccode\u003eUnixCCompiler.runtime_library_dir_option\u003c/code\u003e now returns the\n\u003ccode\u003e[\u0026quot;-Wl,--enable-new-dtags\u0026quot;,\n\u0026quot;-Wl,-rpath,\u0026lt;dir\u0026gt;\u0026quot;]\u003c/code\u003e list directly for GNU ld\nrather than collapsing it into a single string, and the temporary\n\u003ccode\u003edistutils.compat.consolidate_linker_args\u003c/code\u003e shim has been\nremoved. (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5268\"\u003e#5268\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eThe compilers now define their own exception vocabulary instead of\nborrowing distutils\u0027 framework errors. Language-agnostic exceptions\n(\u003ccode\u003eError\u003c/code\u003e, \u003ccode\u003eUnknownFileType\u003c/code\u003e, and a new\n\u003ccode\u003ePlatformError\u003c/code\u003e) live at\n\u003ccode\u003edistutils.compilers.errors\u003c/code\u003e, leaving room for future\n\u003ccode\u003ecompilers.\u0026lt;language\u0026gt;\u003c/code\u003e siblings; the C/C++-specific\n\u003ccode\u003eCompileError\u003c/code\u003e/\u003ccode\u003eLinkError\u003c/code\u003e/\u003ccode\u003eLibError\u003c/code\u003e/\u003ccode\u003ePreprocessError\u003c/code\u003e\nremain in \u003ccode\u003edistutils.compilers.C.errors\u003c/code\u003e. The compilers now\nraise \u003ccode\u003ecompilers.errors.PlatformError\u003c/code\u003e where they previously\nraised\n\u003ccode\u003edistutils.errors.DistutilsPlatformError\u003c/code\u003e/\u003ccode\u003eDistutilsModuleError\u003c/code\u003e,\nand \u003ccode\u003ecompilers._modified.newer\u003c/code\u003e raises the stdlib\n\u003ccode\u003eFileNotFoundError\u003c/code\u003e. \u003ccode\u003edistutils.errors\u003c/code\u003e keeps its\nown framework exceptions and re-exports the compiler ones\n(\u003ccode\u003eCCompilerError\u003c/code\u003e, \u003ccode\u003eCompileError\u003c/code\u003e, etc.) for\nbackward compatibility; because \u003ccode\u003eCCompilerError\u003c/code\u003e is\n\u003ccode\u003ecompilers.errors.Error\u003c/code\u003e, code catching it (as distutils\u0027\ntop-level handlers do) still catches the new \u003ccode\u003ePlatformError\u003c/code\u003e.\n(\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5270\"\u003e#5270\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecustomize_compiler\u003c/code\u003e now asserts that the\ncompiler-related config variables (\u003ccode\u003eCC\u003c/code\u003e, \u003ccode\u003eCXX\u003c/code\u003e,\n\u003ccode\u003eCFLAGS\u003c/code\u003e, etc.) resolve to strings, raising\n\u003ccode\u003eAssertionError\u003c/code\u003e if any are unexpectedly\n\u003ccode\u003eNone\u003c/code\u003e\u003ccode\u003epypa/distutils#363\u003c/code\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/pypa/setuptools/commit/72e919a8b10aaafc041205d4e3ae0e6a2e1e5f87\"\u003e\u003ccode\u003e72e919a\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5293\"\u003e#5293\u003c/a\u003e\nfrom pypa/bugfix/integration-pip-flit-backend\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pypa/setuptools/commit/1b2970113fd6cda8d4bcac5a1ef6ff865bff62ee\"\u003e\u003ccode\u003e1b29701\u003c/code\u003e\u003c/a\u003e\nSelect the top-level pyproject.toml when reading build requirements\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pypa/setuptools/commit/bb1b38189eed960bdb4f4789926472d05e43d335\"\u003e\u003ccode\u003ebb1b381\u003c/code\u003e\u003c/a\u003e\nBump version: 83.0.0 → 84.0.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pypa/setuptools/commit/ee6fdd710e9f466ea06777b4eca32083fdfc9376\"\u003e\u003ccode\u003eee6fdd7\u003c/code\u003e\u003c/a\u003e\nSync with distutils @ e8eb87855 (\u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5292\"\u003e#5292\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pypa/setuptools/commit/2a4a9e4e377ea11a418aa53b9a3cf567fd69df16\"\u003e\u003ccode\u003e2a4a9e4\u003c/code\u003e\u003c/a\u003e\nMerge remote-tracking branch \u0027origin/main\u0027 into distutils-e8eb87855\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pypa/setuptools/commit/cbd1195692917f432ddc2b56babbf2e536f4fd68\"\u003e\u003ccode\u003ecbd1195\u003c/code\u003e\u003c/a\u003e\nMerge \u003ca\nhref\u003d\"https://github.com/jaraco/skeleton\"\u003ehttps://github.com/jaraco/skeleton\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pypa/setuptools/commit/bd3594ebfe6c18e161bbc90ef2a91d19881464b1\"\u003e\u003ccode\u003ebd3594e\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/pypa/setuptools/issues/5287\"\u003e#5287\u003c/a\u003e\nfrom Avasam/Configuring-lint.flake8-comprehensions.a...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pypa/setuptools/commit/f02e90a821fee92ff5ee2bf0d681b70cf24ebbb0\"\u003e\u003ccode\u003ef02e90a\u003c/code\u003e\u003c/a\u003e\nConfigure C408 to allow dict(a\u003d1) rather than disabling it\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pypa/setuptools/commit/c55f52bdb7f952f9ccbd824100c7830dbed5546f\"\u003e\u003ccode\u003ec55f52b\u003c/code\u003e\u003c/a\u003e\nConfiguring\nlint.flake8-comprehensions.allow-dict-calls-with-keyword-argument...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/pypa/setuptools/commit/e9904b0c7e5e249b535832b88efa847ee097de3a\"\u003e\u003ccode\u003ee9904b0\u003c/code\u003e\u003c/a\u003e\nMatch the distutils sdist base type for the user_options override\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/pypa/setuptools/compare/v83.0.0...v84.0.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\u003dsetuptools\u0026package-manager\u003duv\u0026previous-version\u003d83.0.0\u0026new-version\u003d84.0.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": "ede32c170d22dcb42f3a46e738c030ef8eed3d73",
      "tree": "423e52013db9cf30055317734a796add9c44a853",
      "parents": [
        "50cdbde1ed4b7cd9a0eb69443e22f09771cd16fa"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 14 05:54:52 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 05:54:52 2026 +0000"
      },
      "message": "chore(deps): bump pygithub from 2.8.1 to 2.9.1 (#24299)\n\nBumps [pygithub](https://github.com/pygithub/pygithub) from 2.8.1 to\n2.9.1.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/pygithub/pygithub/releases\"\u003epygithub\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.9.1\u003c/h2\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix getting release by tag in lazy mode by \u003ca\nhref\u003d\"https://github.com/EnricoMi\"\u003e\u003ccode\u003e@​EnricoMi\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/PyGithub/PyGithub/pull/3469\"\u003ePyGithub/PyGithub#3469\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/PyGithub/PyGithub/compare/v2.9.0...v2.9.1\"\u003ehttps://github.com/PyGithub/PyGithub/compare/v2.9.0...v2.9.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.9.0\u003c/h2\u003e\n\u003ch3\u003eNotable changes\u003c/h3\u003e\n\u003ch4\u003eLazy PyGithub objects\u003c/h4\u003e\n\u003cp\u003eThe notion of lazy objects has been added to some PyGithub classes in\nversion 2.6.0. This release now makes all\n\u003ccode\u003eCompletableGithubObject\u003c/code\u003es optionally lazy (if useful). See\n\u003ca\nhref\u003d\"https://redirect.github.com/PyGithub/PyGithub/pull/3403\"\u003ePyGithub/PyGithub#3403\u003c/a\u003e\nfor a complete list.\u003c/p\u003e\n\u003cp\u003eIn lazy mode, getting a PyGithub object does not send a request to\nthe GitHub API. Only accessing methods and properties sends the\nnecessary requests to the GitHub API:\u003c/p\u003e\n\u003cpre lang\u003d\"python\"\u003e\u003ccode\u003e# Use lazy mode\ng \u003d Github(auth\u003dauth, lazy\u003dTrue)\n\u003ch1\u003ethese method calls do not send requests to the GitHub API\u003c/h1\u003e\n\u003cp\u003euser \u003d g.get_user(\u0026quot;PyGithub\u0026quot;)    # get the user\nrepo \u003d user.get_repo(\u0026quot;PyGithub\u0026quot;) # get the user\u0027s repo\npull \u003d repo.get_pull(3403)       # get a known pull request\nissue \u003d pull.as_issue() # turn the pull request into an issue\u003c/p\u003e\n\u003ch1\u003ethese method and property calls send requests to Github API\u003c/h1\u003e\n\u003cp\u003eissue.create_reaction(\u0026quot;rocket\u0026quot;)  # create a reaction\ncreated \u003d repo.created_at        # get property of lazy object repo\u003c/p\u003e\n\u003ch1\u003eonce a lazy object has been fetched, all properties are available\n(no more requests)\u003c/h1\u003e\n\u003cp\u003elicence \u003d repo.license\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eAll PyGithub classes that implement\n\u003ccode\u003eCompletableGithubObject\u003c/code\u003e support lazy mode (if useful). This\nis only useful for classes that have methods creating, changing, or\ngetting objects.\u003c/p\u003e\n\u003cp\u003eBy default, PyGithub objects are not lazy.\u003c/p\u003e\n\u003ch4\u003ePyGithub objects with a paginated property\u003c/h4\u003e\n\u003cp\u003eThe GitHub API has the \u0026quot;feature\u0026quot; of paginated properties.\nSome objects returned by the API have a property that allows for\npagination. Fetching subsequent pages of that property means fetching\nthe entire object (with all other properties) and the specified page of\nthe paginated property. Iterating over the paginated property means\nfetching all other properties multiple times. Fortunately, the allowed\nsize of each page (\u003ccode\u003eper_page\u003c/code\u003e is usually 300, in contrast to\nthe \u0026quot;usual\u0026quot; \u003ccode\u003eper_page\u003c/code\u003e maximum of 100).\u003c/p\u003e\n\u003cp\u003eObjects with paginated properties:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCommit.files\u003c/li\u003e\n\u003cli\u003eComparison.commits\u003c/li\u003e\n\u003cli\u003eEnterpriseConsumedLicenses.users\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThis PR makes iterating those paginated properties use the configured\n\u003ccode\u003eper_page\u003c/code\u003e setting.\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/PyGithub/PyGithub/blob/main/doc/changes.rst\"\u003epygithub\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eVersion 2.9.1 (April 14, 2026)\u003c/h2\u003e\n\u003cp\u003eBug Fixes\n^^^^^^^^^\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFix getting release by tag in lazy mode\n(\u003ccode\u003e[#3469](https://github.com/pygithub/pygithub/issues/3469)\n\u0026lt;https://github.com/PyGithub/PyGithub/pull/3469\u0026gt;\u003c/code\u003e\u003cem\u003e)\n(\u003ccode\u003e7d1ba281e\n\u0026lt;https://github.com/PyGithub/PyGithub/commit/7d1ba281e\u0026gt;\u003c/code\u003e\u003c/em\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eVersion 2.9.0 (March 22, 2026)\u003c/h2\u003e\n\u003cp\u003eNotable changes\n^^^^^^^^^^^^^^^\u003c/p\u003e\n\u003cp\u003eLazy PyGithub objects\n\n\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u003c/p\u003e\n\u003cp\u003eThe notion of lazy objects has been added to some PyGithub classes in\nversion 2.6.0.\nThis release now makes all \u003ccode\u003eCompletableGithubObject\u003c/code\u003e\\s\noptionally lazy (if useful).\nSee \u003ccode\u003e[#3403](https://github.com/pygithub/pygithub/issues/3403)\n\u0026lt;https://github.com/PyGithub/PyGithub/pull/3403\u0026gt;\u003c/code\u003e_ for a\ncomplete list.\u003c/p\u003e\n\u003cp\u003eIn lazy mode, getting a PyGithub object does not send a request to\nthe GitHub API.\nOnly accessing methods and properties sends the necessary requests to\nthe GitHub API:\u003c/p\u003e\n\u003cp\u003e.. code-block:: python\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e# Use lazy mode\ng \u003d Github(auth\u003dauth, lazy\u003dTrue)\n\u003ch1\u003ethese method calls do not send requests to the GitHub API\u003c/h1\u003e\n\u003cp\u003euser \u003d g.get_user(\u0026quot;PyGithub\u0026quot;)    # get the user\nrepo \u003d user.get_repo(\u0026quot;PyGithub\u0026quot;) # get the user\u0027s repo\npull \u003d repo.get_pull(3403)       # get a known pull request\nissue \u003d pull.as_issue() # turn the pull request into an issue\u003c/p\u003e\n\u003ch1\u003ethese method and property calls send requests to Github API\u003c/h1\u003e\n\u003cp\u003eissue.create_reaction(\u0026quot;rocket\u0026quot;)  # create a reaction\ncreated \u003d repo.created_at        # get property of lazy object repo\u003c/p\u003e\n\u003ch1\u003eonce a lazy object has been fetched, all properties are available\n(no more requests)\u003c/h1\u003e\n\u003cp\u003elicence \u003d repo.license\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\n\u003cp\u003eAll PyGithub classes that implement\n\u003ccode\u003eCompletableGithubObject\u003c/code\u003e support lazy mode (if useful).\nThis is only useful for classes that have methods creating, changing, or\ngetting objects.\u003c/p\u003e\n\u003cp\u003eBy default, PyGithub objects are not lazy.\u003c/p\u003e\n\u003cp\u003ePyGithub objects with a paginated property\n\n\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u0026quot;\u003c/p\u003e\n\u003cp\u003eThe GitHub API has the \u0026quot;feature\u0026quot; of paginated\nproperties.\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\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/73742d410da73e44a477b0e3f05dfba1749022af\"\u003e\u003ccode\u003e73742d4\u003c/code\u003e\u003c/a\u003e\nRelease 2.9.1 (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/3478\"\u003e#3478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/7d1ba281e4bf02cb6d3772f11b17c7d6088052d8\"\u003e\u003ccode\u003e7d1ba28\u003c/code\u003e\u003c/a\u003e\nFix getting release by tag in lazy mode (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/3469\"\u003e#3469\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/3a17ecf4a5a4dc873f2632470a712497b38eea88\"\u003e\u003ccode\u003e3a17ecf\u003c/code\u003e\u003c/a\u003e\nRelease 2.9.0 (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/3465\"\u003e#3465\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/b1a9b7e2a37b515b141e01091b7c964ff883fe1e\"\u003e\u003ccode\u003eb1a9b7e\u003c/code\u003e\u003c/a\u003e\nConsider per-page settings when iterating paginated properties (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/3377\"\u003e#3377\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/24305f6d60869a849dadd0d271b4753ceac3658d\"\u003e\u003ccode\u003e24305f6\u003c/code\u003e\u003c/a\u003e\nUpdate test key pair (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/3453\"\u003e#3453\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/f2540db50423aa124beaeb8c7bfba7098a549c82\"\u003e\u003ccode\u003ef2540db\u003c/code\u003e\u003c/a\u003e\nDeprecate \u003ccode\u003eReaction.delete\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/3435\"\u003e#3435\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/19e1c5032397a95c58fe25760723ffc24cbe0ec8\"\u003e\u003ccode\u003e19e1c50\u003c/code\u003e\u003c/a\u003e\nAdd \u003ccode\u003ethrow\u003c/code\u003e option to \u003ccode\u003eWorkflow.create_dispatch\u003c/code\u003e\nto raise exceptions (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/2966\"\u003e#2966\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/646190988f3dd18e790969868b9ffe3c71acf254\"\u003e\u003ccode\u003e6461909\u003c/code\u003e\u003c/a\u003e\nAdd Secret Scanning Alerts and Improve Code Scan Alerts (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/3307\"\u003e#3307\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/95648db4780e977b5bad8c19f669ec3f8c2b1a49\"\u003e\u003ccode\u003e95648db\u003c/code\u003e\u003c/a\u003e\nAdd Python 3.14 to CI and tox (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/3429\"\u003e#3429\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/PyGithub/PyGithub/commit/3716bab10b7a99445ef50d698d6b2d681620ac88\"\u003e\u003ccode\u003e3716bab\u003c/code\u003e\u003c/a\u003e\nUse \u003ccode\u003eGET\u003c/code\u003e url or \u003ccode\u003e_links.self\u003c/code\u003e as object url (\u003ca\nhref\u003d\"https://redirect.github.com/pygithub/pygithub/issues/3421\"\u003e#3421\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/pygithub/pygithub/compare/v2.8.1...v2.9.1\"\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\u003dpygithub\u0026package-manager\u003duv\u0026previous-version\u003d2.8.1\u0026new-version\u003d2.9.1)](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": "50cdbde1ed4b7cd9a0eb69443e22f09771cd16fa",
      "tree": "130cacd8d0c47c31a58d232ab67d19dc7c585c7e",
      "parents": [
        "90164e1ae5480fc6c6f77d79b5bbfbaf9db9bbeb"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Fri Aug 14 05:52:05 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 05:52:05 2026 +0000"
      },
      "message": "fix: preserve NULL semantics in bitwise xor simplification (#24248)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Part of #24246 .\n\n## Rationale for this change\n\nBitwise XOR simplifications cancelled repeated nullable operands, which\ncould incorrectly produce a non-NULL result when the operand was NULL.\n\nFor example:\n\n```sql\nSELECT\n  i XOR i,\n  (i XOR 7) XOR i,\n  i XOR (7 XOR i)\nFROM (VALUES (NULL::INT)) AS t(i);\n```\n\nThese expressions should all return NULL, but simplification could\nreplace them with 0, 7, and 7.\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n\nPlease explain the problem you are trying to solve in terms of the\nuser-visible\nbehavior, rather than the implementation.\n\nFor example, \"The code in `foo.rs` doesn\u0027t handle nulls\" is a symptom of\nthe\nimplementation. \"COUNT(DISTINCT) returns wrong results when the column\ncontains\nnulls\" is the user-visible problem.\n--\u003e\n\n## What changes are included in this PR?\n\nOnly cancel repeated XOR operands when the removed operand is\nnon-nullable.\n\n\u003c!--\nThere is no need to duplicate the description in the issue here, but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\nYes. Added sqllogictests covering results.\n\n## Are there any user-facing changes?\n\nYes. Bitwise XOR expressions with repeated nullable operands now\ncorrectly preserve NULLs.\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "90164e1ae5480fc6c6f77d79b5bbfbaf9db9bbeb",
      "tree": "716e6af0db74bfc3555dd1126894e7740316011a",
      "parents": [
        "473ba171c0f0a09e5b3be6bd3cd1c6d257d4d07a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 14 05:51:47 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 05:51:47 2026 +0000"
      },
      "message": "chore(deps-dev): bump webpack-cli from 5.1.4 to 7.2.2 in /datafusion/wasmtest/datafusion-wasm-app (#24302)\n\nBumps [webpack-cli](https://github.com/webpack/webpack-cli) from 5.1.4\nto 7.2.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/releases\"\u003ewebpack-cli\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ewebpack-cli@7.2.2\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eperf: enable the Node.js compile cache\n(\u003ccode\u003emodule.enableCompileCache\u003c/code\u003e, available on Node.js \u0026gt;\u003d\n22.8.0) to speed up CLI startup (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4818\"\u003e#4818\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ewebpack-cli@7.2.1\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: \u003ccode\u003eCLIPlugin\u003c/code\u003e dynamic import interop under Bun (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4799\"\u003e#4799\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ewebpack-cli@7.2.0\u003c/h2\u003e\n\u003ch3\u003eMinor Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003efeat: allow \u003ccode\u003ewebpack-dev-server\u003c/code\u003e v6 as an optional peer\ndependency (\u003ccode\u003e^5.0.0 || ^6.0.0\u003c/code\u003e) (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4793\"\u003e#4793\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport \u003ccode\u003etsx\u003c/code\u003e as a fallback loader for TypeScript and JSX\nconfiguration files (\u003ccode\u003e.ts\u003c/code\u003e, \u003ccode\u003e.tsx\u003c/code\u003e,\n\u003ccode\u003e.cts\u003c/code\u003e, \u003ccode\u003e.mts\u003c/code\u003e and \u003ccode\u003e.jsx\u003c/code\u003e), used when\nnone of the loaders known to \u003ccode\u003einterpret\u003c/code\u003e (such as\n\u003ccode\u003ets-node\u003c/code\u003e) are installed. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4796\"\u003e#4796\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ewebpack-cli@7.1.0\u003c/h2\u003e\n\u003ch3\u003eMinor Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003efeat(cli): refresh the \u003ccode\u003e--help\u003c/code\u003e output using commander\u0027s\n\u003ccode\u003econfigureHelp\u003c/code\u003e API — branded headers, section dividers,\ncolorized terms and a clearer footer. Colors and chrome collapse to\nplain text when output is piped or \u003ccode\u003e--no-color\u003c/code\u003e is used, so\nscripts keep working. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4779\"\u003e#4779\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003efeat: support \u003ccode\u003e.json5\u003c/code\u003e,\n\u003ccode\u003e.yaml\u003c/code\u003e/\u003ccode\u003e.yml\u003c/code\u003e and \u003ccode\u003e.toml\u003c/code\u003e\nconfiguration files by parsing them directly, with the parser package\n(\u003ccode\u003ejson5\u003c/code\u003e, \u003ccode\u003ejs-yaml\u003c/code\u003e, \u003ccode\u003etoml\u003c/code\u003e) installed\non demand by the user and declared as optional\n\u003ccode\u003epeerDependencies\u003c/code\u003e so the parsers resolve correctly under\nYarn PnP (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4777\"\u003e#4777\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ewebpack-cli@7.0.3\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eImproved CLI startup performance and reduced memory usage. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4765\"\u003e#4765\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReduced CLI startup CPU and memory usage by caching schema-derived\nargument metadata, registering only the options present in the\narguments, and reading config directories once during default-config\ndiscovery. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4760\"\u003e#4760\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReplace the \u003ccode\u003efastest-levenshtein\u003c/code\u003e dependency with a small\nin-tree implementation used for command/option \u0026quot;did you mean\u0026quot;\nsuggestions. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4762\"\u003e#4762\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ewebpack-cli@7.0.2\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eResolve configuration path for cache build dependencies. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4707\"\u003e#4707\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ewebpack-cli@7.0.1\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003efile\u003c/code\u003e protocol for configuration options\n(\u003ccode\u003e--config\u003c/code\u003e/\u003ccode\u003e--extends\u003c/code\u003e) is supported. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4702\"\u003e#4702\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ewebpack-cli@7.0.0\u003c/h2\u003e\n\u003ch3\u003eMajor Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eThe minimum supported version of Node.js is \u003ccode\u003e20.9.0\u003c/code\u003e. (by\n\u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4677\"\u003e#4677\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUse dynamic import to load \u003ccode\u003ewebpack.config.js\u003c/code\u003e, fallback\nto interpret only when configuration can\u0027t be load by dynamic import.\nUsing dynamic imports allows you to take advantage of Node.js\u0027s built-in\nTypeScript support. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4677\"\u003e#4677\u003c/a\u003e)\u003c/p\u003e\n\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/blob/main/CHANGELOG.md\"\u003ewebpack-cli\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e7.2.2\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eperf: enable the Node.js compile cache\n(\u003ccode\u003emodule.enableCompileCache\u003c/code\u003e, available on Node.js \u0026gt;\u003d\n22.8.0) to speed up CLI startup (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4818\"\u003e#4818\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.2.1\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003efix: \u003ccode\u003eCLIPlugin\u003c/code\u003e dynamic import interop under Bun (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4799\"\u003e#4799\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.2.0\u003c/h2\u003e\n\u003ch3\u003eMinor Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003efeat: allow \u003ccode\u003ewebpack-dev-server\u003c/code\u003e v6 as an optional peer\ndependency (\u003ccode\u003e^5.0.0 || ^6.0.0\u003c/code\u003e) (by \u003ca\nhref\u003d\"https://github.com/bjohansebas\"\u003e\u003ccode\u003e@​bjohansebas\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4793\"\u003e#4793\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eSupport \u003ccode\u003etsx\u003c/code\u003e as a fallback loader for TypeScript and JSX\nconfiguration files (\u003ccode\u003e.ts\u003c/code\u003e, \u003ccode\u003e.tsx\u003c/code\u003e,\n\u003ccode\u003e.cts\u003c/code\u003e, \u003ccode\u003e.mts\u003c/code\u003e and \u003ccode\u003e.jsx\u003c/code\u003e), used when\nnone of the loaders known to \u003ccode\u003einterpret\u003c/code\u003e (such as\n\u003ccode\u003ets-node\u003c/code\u003e) are installed. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4796\"\u003e#4796\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.1.0\u003c/h2\u003e\n\u003ch3\u003eMinor Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003efeat(cli): refresh the \u003ccode\u003e--help\u003c/code\u003e output using commander\u0027s\n\u003ccode\u003econfigureHelp\u003c/code\u003e API — branded headers, section dividers,\ncolorized terms and a clearer footer. Colors and chrome collapse to\nplain text when output is piped or \u003ccode\u003e--no-color\u003c/code\u003e is used, so\nscripts keep working. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4779\"\u003e#4779\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003efeat: support \u003ccode\u003e.json5\u003c/code\u003e,\n\u003ccode\u003e.yaml\u003c/code\u003e/\u003ccode\u003e.yml\u003c/code\u003e and \u003ccode\u003e.toml\u003c/code\u003e\nconfiguration files by parsing them directly, with the parser package\n(\u003ccode\u003ejson5\u003c/code\u003e, \u003ccode\u003ejs-yaml\u003c/code\u003e, \u003ccode\u003etoml\u003c/code\u003e) installed\non demand by the user and declared as optional\n\u003ccode\u003epeerDependencies\u003c/code\u003e so the parsers resolve correctly under\nYarn PnP (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4777\"\u003e#4777\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.0.3\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eImproved CLI startup performance and reduced memory usage. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4765\"\u003e#4765\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReduced CLI startup CPU and memory usage by caching schema-derived\nargument metadata, registering only the options present in the\narguments, and reading config directories once during default-config\ndiscovery. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4760\"\u003e#4760\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReplace the \u003ccode\u003efastest-levenshtein\u003c/code\u003e dependency with a small\nin-tree implementation used for command/option \u0026quot;did you mean\u0026quot;\nsuggestions. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4762\"\u003e#4762\u003c/a\u003e)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.0.2\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eResolve configuration path for cache build dependencies. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4707\"\u003e#4707\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e7.0.1\u003c/h2\u003e\n\u003ch3\u003ePatch Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eThe \u003ccode\u003efile\u003c/code\u003e protocol for configuration options\n(\u003ccode\u003e--config\u003c/code\u003e/\u003ccode\u003e--extends\u003c/code\u003e) is supported. (by \u003ca\nhref\u003d\"https://github.com/alexander-akait\"\u003e\u003ccode\u003e@​alexander-akait\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/pull/4702\"\u003e#4702\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/webpack/webpack-cli/commit/191fa9ffdc82268e430c10824ac7ba3b8138e287\"\u003e\u003ccode\u003e191fa9f\u003c/code\u003e\u003c/a\u003e\nchore(release): new release (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4820\"\u003e#4820\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/commit/1082235f97fecd77a716ac0cc3564669798729a8\"\u003e\u003ccode\u003e1082235\u003c/code\u003e\u003c/a\u003e\nchore(deps-dev): bump js-yaml from 5.2.1 to 5.2.2 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4821\"\u003e#4821\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/commit/e36ae82bf116c50fe6da341291c93d596fcb8bf2\"\u003e\u003ccode\u003ee36ae82\u003c/code\u003e\u003c/a\u003e\nchore: add publish workflow and script for pkg.pr.new integration (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4819\"\u003e#4819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/commit/b0a2024a5790446ea07610ad27fd5abc65f5b875\"\u003e\u003ccode\u003eb0a2024\u003c/code\u003e\u003c/a\u003e\nperf: enable the Node.js compile cache (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4818\"\u003e#4818\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/commit/53f6d722c4093a387e23413d79e6cf67b5a867ba\"\u003e\u003ccode\u003e53f6d72\u003c/code\u003e\u003c/a\u003e\nchore(deps): bump actions/checkout in the dependencies group (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4816\"\u003e#4816\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/commit/8856346f50b472ba448c4e3a8f7f8f5781c69fb2\"\u003e\u003ccode\u003e8856346\u003c/code\u003e\u003c/a\u003e\nchore: add allowscripts to work with npm 12 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4811\"\u003e#4811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/commit/0b0f1ee3d4a648e8d1679a73f511277d25bf47aa\"\u003e\u003ccode\u003e0b0f1ee\u003c/code\u003e\u003c/a\u003e\nchore(deps): bump fast-uri from 3.1.2 to 3.1.4 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4815\"\u003e#4815\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/commit/d60a777303fdd34eb1e5e6901ab39c7370ce5fef\"\u003e\u003ccode\u003ed60a777\u003c/code\u003e\u003c/a\u003e\nchore(deps-dev): bump postcss from 8.5.10 to 8.5.22 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4814\"\u003e#4814\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/commit/8c1719aeab0efe0a5f13649d407c425b14ba4216\"\u003e\u003ccode\u003e8c1719a\u003c/code\u003e\u003c/a\u003e\nchore(deps): bump shell-quote from 1.8.4 to 1.10.0 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4813\"\u003e#4813\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/commit/8c2473c23ff926772f8d7719777236ab113be591\"\u003e\u003ccode\u003e8c2473c\u003c/code\u003e\u003c/a\u003e\nchore(deps): bump immutable from 5.1.5 to 5.1.9 (\u003ca\nhref\u003d\"https://redirect.github.com/webpack/webpack-cli/issues/4812\"\u003e#4812\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/webpack/webpack-cli/compare/webpack-cli@5.1.4...webpack-cli@7.2.2\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eMaintainer changes\u003c/summary\u003e\n\u003cp\u003eThis version was pushed to npm by \u003ca\nhref\u003d\"https://www.npmjs.com/~GitHub%20Actions\"\u003eGitHub Actions\u003c/a\u003e, a new\nreleaser for webpack-cli since your current version.\u003c/p\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dwebpack-cli\u0026package-manager\u003dnpm_and_yarn\u0026previous-version\u003d5.1.4\u0026new-version\u003d7.2.2)](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": "473ba171c0f0a09e5b3be6bd3cd1c6d257d4d07a",
      "tree": "cbb487299de410d48a707aeb353d812a80209cb1",
      "parents": [
        "34060673281d6d728dc5e2cd66439144792f96a9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 14 05:51:25 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 05:51:25 2026 +0000"
      },
      "message": "chore(deps): bump taiki-e/install-action from 2.85.10 to 2.85.11 (#24306)\n\nBumps\n[taiki-e/install-action](https://github.com/taiki-e/install-action) from\n2.85.10 to 2.85.11.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/releases\"\u003etaiki-e/install-action\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.85.11\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ezola@latest\u003c/code\u003e to 0.23.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-bindgen@latest\u003c/code\u003e to 0.2.127.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.12.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eosv-scanner@latest\u003c/code\u003e to 2.5.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.8.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ekingfisher@latest\u003c/code\u003e to 1.112.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eeditorconfig-checker@latest\u003c/code\u003e to 3.10.0.\u003c/p\u003e\n\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/taiki-e/install-action/blob/main/CHANGELOG.md\"\u003etaiki-e/install-action\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this\nfile.\u003c/p\u003e\n\u003cp\u003eThis project adheres to \u003ca href\u003d\"https://semver.org\"\u003eSemantic\nVersioning\u003c/a\u003e.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003e[Unreleased]\u003c/h2\u003e\n\u003ch2\u003e[2.85.12] - 2026-08-12\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ezola@latest\u003c/code\u003e to 0.23.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-tools@latest\u003c/code\u003e to 1.256.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 1.2.10.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003esyft@latest\u003c/code\u003e to 1.51.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eprek@latest\u003c/code\u003e to 0.4.13.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.8.4.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eeditorconfig-checker@latest\u003c/code\u003e to 3.11.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-tarpaulin@latest\u003c/code\u003e to 0.37.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-rdme@latest\u003c/code\u003e to 2.2.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ebiome@latest\u003c/code\u003e to 2.5.8.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.85.11] - 2026-08-09\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ezola@latest\u003c/code\u003e to 0.23.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-bindgen@latest\u003c/code\u003e to 0.2.127.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.12.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eosv-scanner@latest\u003c/code\u003e to 2.5.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.8.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ekingfisher@latest\u003c/code\u003e to 1.112.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eeditorconfig-checker@latest\u003c/code\u003e to 3.10.0.\u003c/p\u003e\n\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/taiki-e/install-action/commit/7f4eb899022d8fe70b20c4f3de697aa85c309026\"\u003e\u003ccode\u003e7f4eb89\u003c/code\u003e\u003c/a\u003e\nRelease 2.85.11\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/c17da6245a7fe549cefa05b31e3614ce0b16c2af\"\u003e\u003ccode\u003ec17da62\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ezola@latest\u003c/code\u003e to 0.23.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/97e8291c2ba440a7119c03ebe3ed1e584a1f9b7f\"\u003e\u003ccode\u003e97e8291\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ewasm-bindgen@latest\u003c/code\u003e to 0.2.127\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/91f9e5c61a2dc7936a8f404d01b7c1551b9c581a\"\u003e\u003ccode\u003e91f9e5c\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.12.3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/bd0cb00440414f36db2f79bca8e27971bb63b2a3\"\u003e\u003ccode\u003ebd0cb00\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003eosv-scanner@latest\u003c/code\u003e to 2.5.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/4def957aa80c252e2d4c61387c6a429d377907d1\"\u003e\u003ccode\u003e4def957\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.8.3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/3d149dc3890afe4774d158d353b5a3e55fe90f60\"\u003e\u003ccode\u003e3d149dc\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ekingfisher@latest\u003c/code\u003e to 1.112.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/20d4381a5cf6917520fde30f9ff52387410bfb6e\"\u003e\u003ccode\u003e20d4381\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003eeditorconfig-checker@latest\u003c/code\u003e to 3.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/583939ec0c8ee9c523cc60342d3d979ce6730f38\"\u003e\u003ccode\u003e583939e\u003c/code\u003e\u003c/a\u003e\ncodegen: Ignore clippy::assert_is_empty lint\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/compare/6c6fd71fe4fb72c3697d269963d0e15df8adedad...7f4eb899022d8fe70b20c4f3de697aa85c309026\"\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\u003dtaiki-e/install-action\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d2.85.10\u0026new-version\u003d2.85.11)](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": "34060673281d6d728dc5e2cd66439144792f96a9",
      "tree": "d544afaef52aa55f66fa06d9dba725857de0c13a",
      "parents": [
        "6adb5043638433864b0ce02b93cc416c89521b80"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 14 05:51:07 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 05:51:07 2026 +0000"
      },
      "message": "chore(deps): bump Swatinem/rust-cache from 2.8.1 to 2.9.2 in /.github/actions/setup-macos-aarch64-builder (#24307)\n\nBumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from\n2.8.1 to 2.9.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/swatinem/rust-cache/releases\"\u003eSwatinem/rust-cache\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.9.2\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTypofix by \u003ca\nhref\u003d\"https://github.com/23Skidoo\"\u003e\u003ccode\u003e@​23Skidoo\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/316\"\u003eSwatinem/rust-cache#316\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: include target names in build/ and .fingerprint/ cleanup by \u003ca\nhref\u003d\"https://github.com/eitsupi\"\u003e\u003ccode\u003e@​eitsupi\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/317\"\u003eSwatinem/rust-cache#317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: include cdylib/rlib/dylib/staticlib targets in build and\nfingerprint cleanup by \u003ca\nhref\u003d\"https://github.com/eitsupi\"\u003e\u003ccode\u003e@​eitsupi\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/320\"\u003eSwatinem/rust-cache#320\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eScan content of \u003ccode\u003e$CARGO_HOME/bin\u003c/code\u003e on restore instead of\nrelying on \u003ccode\u003ecargo install\u003c/code\u003e metadata by \u003ca\nhref\u003d\"https://github.com/clechasseur\"\u003e\u003ccode\u003e@​clechasseur\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/325\"\u003eSwatinem/rust-cache#325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Update checkout action version to latest by \u003ca\nhref\u003d\"https://github.com/sondrelg\"\u003e\u003ccode\u003e@​sondrelg\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/345\"\u003eSwatinem/rust-cache#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Windows cache path validation after Rollup migration by \u003ca\nhref\u003d\"https://github.com/eitsupi\"\u003e\u003ccode\u003e@​eitsupi\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/355\"\u003eSwatinem/rust-cache#355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: support Cargo V2 build dir layout by \u003ca\nhref\u003d\"https://github.com/claytonwramsey\"\u003e\u003ccode\u003e@​claytonwramsey\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/371\"\u003eSwatinem/rust-cache#371\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/23Skidoo\"\u003e\u003ccode\u003e@​23Skidoo\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/316\"\u003eSwatinem/rust-cache#316\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eitsupi\"\u003e\u003ccode\u003e@​eitsupi\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/317\"\u003eSwatinem/rust-cache#317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clechasseur\"\u003e\u003ccode\u003e@​clechasseur\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/325\"\u003eSwatinem/rust-cache#325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/sondrelg\"\u003e\u003ccode\u003e@​sondrelg\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/345\"\u003eSwatinem/rust-cache#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/claytonwramsey\"\u003e\u003ccode\u003e@​claytonwramsey\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/371\"\u003eSwatinem/rust-cache#371\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/Swatinem/rust-cache/compare/v2.9.1...v2.9.2\"\u003ehttps://github.com/Swatinem/rust-cache/compare/v2.9.1...v2.9.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.9.1\u003c/h2\u003e\n\u003cp\u003eFix regression in hash calculation\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/compare/v2.9.0...v2.9.1\"\u003ehttps://github.com/Swatinem/rust-cache/compare/v2.9.0...v2.9.1\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.9.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for running rust-cache commands from within a Nix shell\nby \u003ca href\u003d\"https://github.com/marc0246\"\u003e\u003ccode\u003e@​marc0246\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/290\"\u003eSwatinem/rust-cache#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump taiki-e/install-action from 2.62.57 to 2.62.60 in the actions\ngroup 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/Swatinem/rust-cache/pull/291\"\u003eSwatinem/rust-cache#291\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the actions group across 1 directory with 5 updates 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/Swatinem/rust-cache/pull/296\"\u003eSwatinem/rust-cache#296\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the prd-major group with 3 updates 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/Swatinem/rust-cache/pull/294\"\u003eSwatinem/rust-cache#294\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@​types/node\u003c/code\u003e from 24.10.1 to 25.0.2 in the\ndev-major group 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/Swatinem/rust-cache/pull/295\"\u003eSwatinem/rust-cache#295\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConsider all installed toolchains in cache key by \u003ca\nhref\u003d\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/293\"\u003eSwatinem/rust-cache#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCompare case-insenitively for full cache key match by \u003ca\nhref\u003d\"https://github.com/kbriggs\"\u003e\u003ccode\u003e@​kbriggs\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/303\"\u003eSwatinem/rust-cache#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eMigrate to \u003ccode\u003enode24\u003c/code\u003e runner by \u003ca\nhref\u003d\"https://github.com/rhysd\"\u003e\u003ccode\u003e@​rhysd\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/314\"\u003eSwatinem/rust-cache#314\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the actions group across 1 directory with 7 updates 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/Swatinem/rust-cache/pull/312\"\u003eSwatinem/rust-cache#312\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the prd-minor group across 1 directory with 2 updates 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/Swatinem/rust-cache/pull/307\"\u003eSwatinem/rust-cache#307\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@​types/node\u003c/code\u003e from 25.0.2 to 25.2.2 in the\ndev-minor group 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/Swatinem/rust-cache/pull/309\"\u003eSwatinem/rust-cache#309\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/marc0246\"\u003e\u003ccode\u003e@​marc0246\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/290\"\u003eSwatinem/rust-cache#290\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/tamird\"\u003e\u003ccode\u003e@​tamird\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/293\"\u003eSwatinem/rust-cache#293\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/kbriggs\"\u003e\u003ccode\u003e@​kbriggs\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/303\"\u003eSwatinem/rust-cache#303\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/Swatinem/rust-cache/compare/v2.8.2...v2.9.0\"\u003ehttps://github.com/Swatinem/rust-cache/compare/v2.8.2...v2.9.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev2.8.2\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eci: address lint findings, add zizmor workflow by \u003ca\nhref\u003d\"https://github.com/woodruffw\"\u003e\u003ccode\u003e@​woodruffw\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/262\"\u003eSwatinem/rust-cache#262\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: Implement ability to disable adding job ID + rust environment\nhashes to cache names by \u003ca\nhref\u003d\"https://github.com/Ryan-Brice\"\u003e\u003ccode\u003e@​Ryan-Brice\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/279\"\u003eSwatinem/rust-cache#279\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDon\u0027t overwrite env for cargo-metadata call by \u003ca\nhref\u003d\"https://github.com/MaeIsBad\"\u003e\u003ccode\u003e@​MaeIsBad\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/285\"\u003eSwatinem/rust-cache#285\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\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md\"\u003eSwatinem/rust-cache\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003e2.9.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003ecredentials.toml\u003c/code\u003e cleanup\u003c/li\u003e\n\u003cli\u003eImprovements to cleanup, preserving more valid targets\u003c/li\u003e\n\u003cli\u003eImprovements to \u003ccode\u003ecargo install\u003c/code\u003e handling\u003c/li\u003e\n\u003cli\u003eCorrectly sort/dedupe Rust versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.9.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in hash calculation\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.9.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to \u003ccode\u003enode24\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupport running from within a \u003ccode\u003enix\u003c/code\u003e shell\u003c/li\u003e\n\u003cli\u003eConsider all installed toolchains for cache key\u003c/li\u003e\n\u003cli\u003eUse case-insensitive comparison to determine exact cache hit\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.8.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDon\u0027t overwrite env for cargo-metadata call\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.8.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSet empty \u003ccode\u003eCARGO_ENCODED_RUSTFLAGS\u003c/code\u003e when retrieving\nmetadata\u003c/li\u003e\n\u003cli\u003eVarious dependency updates\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.8.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ewarpbuild\u003c/code\u003e cache provider\u003c/li\u003e\n\u003cli\u003eAdd new \u003ccode\u003ecache-workspace-crates\u003c/code\u003e feature\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.7.8\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude CPU arch in the cache key\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.7.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAlso cache \u003ccode\u003ecargo install\u003c/code\u003e metadata\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.7.6\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAllow opting out of caching $CARGO_HOME/bin\u003c/li\u003e\n\u003cli\u003eAdd runner OS in cache key\u003c/li\u003e\n\u003cli\u003eAdds an option to do lookup-only of the cache\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.7.5\u003c/h2\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/Swatinem/rust-cache/commit/6323deb102c322ba6fcbdcafc7e3dddab59af2b6\"\u003e\u003ccode\u003e6323deb\u003c/code\u003e\u003c/a\u003e\n2.9.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/b16e8d71b289c3b8fc03fc09764563df03712036\"\u003e\u003ccode\u003eb16e8d7\u003c/code\u003e\u003c/a\u003e\nbump rollup and rebuild\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/3bf42ac996de475743278f3187c4fd89f23b8630\"\u003e\u003ccode\u003e3bf42ac\u003c/code\u003e\u003c/a\u003e\ninvert target/profile check in cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/6e5b278ead409e28cd5a784014d7ce55007a81d2\"\u003e\u003ccode\u003e6e5b278\u003c/code\u003e\u003c/a\u003e\ncorrectly sort and dedupe Rust versions\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/5adc05f6aaa7c92756cb2e2c9b7b3c1d0df9312b\"\u003e\u003ccode\u003e5adc05f\u003c/code\u003e\u003c/a\u003e\nBump the actions group across 1 directory with 3 updates (\u003ca\nhref\u003d\"https://redirect.github.com/swatinem/rust-cache/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/66b1e9526150e74ddd7e4190356facd783fb3b44\"\u003e\u003ccode\u003e66b1e95\u003c/code\u003e\u003c/a\u003e\nfix: support Cargo V2 build dir layout (\u003ca\nhref\u003d\"https://redirect.github.com/swatinem/rust-cache/issues/371\"\u003e#371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/72d126e709cad40056a62344eee609d696d62d33\"\u003e\u003ccode\u003e72d126e\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/swatinem/rust-cache/issues/367\"\u003e#367\u003c/a\u003e\nfrom Swatinem/dependabot/npm_and_yarn/dev-patch-2b495...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/48968d2131215f1c516b89399d23900d554f71fa\"\u003e\u003ccode\u003e48968d2\u003c/code\u003e\u003c/a\u003e\nBump the dev-patch group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/9f151aca7c3990bab7afe2d82ac58088d3b01074\"\u003e\u003ccode\u003e9f151ac\u003c/code\u003e\u003c/a\u003e\nupdate dependencies, rebuild\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/0e24e5dcecfbbdcea69e0f528cab00df34fbd231\"\u003e\u003ccode\u003e0e24e5d\u003c/code\u003e\u003c/a\u003e\nBump the actions group across 1 directory with 6 updates (\u003ca\nhref\u003d\"https://redirect.github.com/swatinem/rust-cache/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/swatinem/rust-cache/compare/f13886b937689c021905a6b90929199931d60db1...6323deb102c322ba6fcbdcafc7e3dddab59af2b6\"\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\u003dSwatinem/rust-cache\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d2.8.1\u0026new-version\u003d2.9.2)](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": "6adb5043638433864b0ce02b93cc416c89521b80",
      "tree": "d56608ffc9fde2238f909574f68443de12c58d0a",
      "parents": [
        "0a429a37dbdf735c4d91efbce68a0fdcb271ea46"
      ],
      "author": {
        "name": "Qi Zhu",
        "email": "zhuqilucas@gmail.com",
        "time": "Fri Aug 14 05:45:16 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 05:45:16 2026 +0000"
      },
      "message": "bench: add parquet_row_filter_skip suite for the fully-matched RowFilter skip (#24328)\n\n## Which issue does this PR close?\n\n- Part of #23696 — a benchmark that mechanistically exercises the per-RG\nfully-matched `RowFilter` skip.\n\n## Rationale for this change\n\n#23696 adds a per-row-group fully-matched `RowFilter` skip, but **none\nof the existing benchmarks exercise it**:\n\n- `sort_tpch` / `tpch` don\u0027t enable `pushdown_filters` by default, so\nthere is no `RowFilter` to skip;\n- ClickBench\u0027s `URL LIKE …` / equality predicates rarely make a row\ngroup\u0027s min/max fall entirely inside the satisfying range, so\nfully-matched RGs are rare.\n\nAs raised in review (we should verify the optimization improves\nsomething mechanistically, otherwise add a benchmark first), this adds a\nsuite that **necessarily** triggers the skip.\n\n## What changes are included in this PR?\n\nA new `sql_benchmarks/parquet_row_filter_skip/` suite:\n\n- The **load SQL** enables `pushdown_filters` and `COPY`s a clustered\nParquet file — a fixed-width, zero-padded, monotonically increasing\nstring key (`skey`) so each row group holds a disjoint, sorted range —\nplus 14 payload columns.\n- The **query** applies a low-selectivity range filter (`skey \u003e\u003d\n\u00270000100000\u0027`, `skey` not projected). The first row group straddles the\nthreshold; every later RG is fully matched by statistics, so the per-row\n`RowFilter` is skipped on the fully-matched run (and `skey` isn\u0027t\ndecoded there).\n- `bench.sh` integration: `./bench.sh run parquet_row_filter_skip`, data\ngenerated inline by the load SQL. Knobs: `PRED_ROWS` (row count),\n`RG_SIZE` (parquet row-group size).\n\n## Are these changes tested?\n\nSmoke-tested locally via `cargo bench --bench sql -- --test`.\n\nLocal A/B (main vs #23696, 10M rows / 10 RGs / `skey \u003e\u003d \u00270000100000\u0027`):\n\n- **9 of 10 row groups fully matched** →\n`row_filter_skipped_fully_matched\u003d9`;\n- **~18% faster** with the optimization (main ~0.143s → branch ~0.117s);\nan int64-key variant is ~12%.\n\nOnce this lands, `run benchmark parquet_row_filter_skip` will compare\nany PR (e.g. #23696) against `main` in CI.\n\n## Are there any user-facing changes?\n\nNo — benchmark only.\n\n---------\n\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "0a429a37dbdf735c4d91efbce68a0fdcb271ea46",
      "tree": "bb488978d8700094a160c99a2a9cac44f4ece6d5",
      "parents": [
        "e76f1af0932a81d82d6645d43d027eed417d2f03"
      ],
      "author": {
        "name": "Liang-Chi Hsieh",
        "email": "viirya@gmail.com",
        "time": "Thu Aug 13 21:59:48 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 21:59:48 2026 +0000"
      },
      "message": "fix: emit unmatched NULL-key right rows in RIGHT/FULL PiecewiseMergeJoin (#24336)\n\n## Which issue does this PR close?\n\n- Closes #24335.\n\n## Rationale for this change\n\nA `RIGHT`/`FULL` `PiecewiseMergeJoin` with a range predicate drops an\nunmatched right-side row whose join key is `NULL`. A `NULL` key never\nmatches (`NULL \u003c x` is UNKNOWN), so in a `RIGHT`/`FULL` join the row is\nunmatched and must still be emitted with NULLs on the left — but\n`PiecewiseMergeJoinExec` omits it, diverging from `NestedLoopJoin`.\n\n```sql\ncreate table l(v int) as values (5);\ncreate table r(v int) as values (10), (NULL);\nselect l.v, r.v from l right join r on l.v \u003c r.v;   -- drops (NULL, NULL)\n```\n\nRoot cause: `resolve_classic_join` starts the match scan past the\nstreamed side\u0027s `NULL`-keyed rows (they sort to the front under\n`nulls_first`). Those rows are never revisited, so for `Right`/`Full`\nthey were never added to `unmatched_indices` and got dropped.\n\n## What changes are included in this PR?\n\n- In `resolve_classic_join`, when skipping the streamed side\u0027s leading\n`NULL`-key rows, record them as unmatched for `Right`/`Full` joins so\nthey are emitted (with NULLs on the buffered side).\n\n## Are these changes tested?\n\nYes.\n\n- Regression test in `pwmj.slt`: a `RIGHT JOIN` over the existing\n`null_join_*` tables now emits the `(NULL, NULL)` row. The test fails on\n`main` (the row is dropped) and passes with this change.\n- Verified more broadly with a differential fuzz against\n`NestedLoopJoin` (same SQL, `enable_piecewise_merge_join` on vs off):\n1200 checks over random `RIGHT JOIN` inputs with `\u003c`/`\u003c\u003d`/`\u003e`/`\u003e\u003d` and\nhigh right-side NULL density, 0 mismatches.\n\n## Are there any user-facing changes?\n\n`RIGHT`/`FULL` range joins via `PiecewiseMergeJoin` (behind\n`enable_piecewise_merge_join`, default off) now return unmatched right\nrows with `NULL` keys, matching `NestedLoopJoin`. No API changes."
    },
    {
      "commit": "e76f1af0932a81d82d6645d43d027eed417d2f03",
      "tree": "04e0d5c65166e3f79aeb8f7c4d3ac16b03247221",
      "parents": [
        "f17158738b74afbe71b009f197e0c84272062615"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Thu Aug 13 19:10:30 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 19:10:30 2026 +0000"
      },
      "message": "perf(build): use line-tables-only debug info in the `dev` profile (#24339)\n\n## Which issue does this PR close?\n\nAdresses: https://github.com/apache/datafusion/issues/13814\n\nFound while profiling compile times for #24325 / #24326 / #24329 /\n#24330,\nwhich removed the trait-solving cost from the four crates on the\ncritical path\nand left LLVM as the dominant remaining cost.\n\n## Rationale for this change\n\n`dev` is the profile behind every `cargo build` and `cargo test`, so its\ndebug\ninfo is generated over and over. `debug \u003d \"line-tables-only\"` keeps file\nand line\nnumbers — panics and `RUST_BACKTRACE` output stay just as useful — and\ndrops the\nvariable-level DWARF that only an interactive debugger consumes.\n\nMeasured per crate, **interleaved** with the baseline so machine drift\ncancels\nout. The flag is passed to the crate under test only, so cached\ndependency\nartifacts stay valid and nothing else moves between the two\nmeasurements:\n\n| crate | `debug \u003d 2` | `line-tables-only` | |\n|---|---|---|---|\n| `datafusion-physical-plan` | 8.89s | 7.43s | −16% |\n| `datafusion-functions-aggregate` | 5.86s | 4.63s | −21% |\n| `datafusion-physical-expr` | 4.57s | 3.59s | −21% |\n| `datafusion-functions` | 4.64s | 4.04s | −13% |\n| `datafusion-expr` | 4.54s | 3.57s | −21% |\n| `datafusion-functions-nested` | 4.37s | 3.06s | −30% |\n| `datafusion-optimizer` | 3.91s | 3.12s | −20% |\n| `datafusion-common` | 3.73s | 3.10s | −17% |\n| `datafusion-sql` | 3.57s | 2.43s | −32% |\n| `datafusion-datasource-parquet` | 3.27s | 2.44s | −25% |\n| `datafusion-datasource` | 1.90s | 1.42s | −25% |\n| `datafusion-physical-optimizer` | 1.22s | 0.99s | −19% |\n| **sum** | **50.5s** | **39.8s** | **−21%** |\n\nThe saving is codegen-side, as you would expect: `datafusion-catalog`,\nwhich\nspends its time in the trait solver rather than in LLVM, moves only 7.4s\n→ 7.0s.\n\nArtifacts shrink as well — `libdatafusion_physical_plan.rlib` goes from\n**141MB\nto 100MB**.\n\n## What changes are included in this PR?\n\nOne setting on `[profile.dev]`, plus an update to the profile\ndocumentation block\nabove it, which currently advertises \"full debug info\" for `dev`.\n\n## Are these changes tested?\n\n\n## Are there any user-facing changes?\n\nFor anyone stepping through DataFusion in a debugger, local variable\ninspection\nneeds `CARGO_PROFILE_DEV_DEBUG\u003d2 cargo build` (or a local override in\n`.cargo/config.toml`); the comment in `Cargo.toml` says so. Everything\nelse —\npanic locations, backtraces, `#[test]` failures — is unchanged.\n\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "f17158738b74afbe71b009f197e0c84272062615",
      "tree": "c332106360f9ee148c357de30dc028404a1fc7e8",
      "parents": [
        "8c099dc15058cb95665e4a2312fd852d3c7042e4"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Thu Aug 13 18:08:15 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 18:08:15 2026 +0000"
      },
      "message": "perf(build): don\u0027t build the doc-generator binaries by default (#24338)\n\n## Which issue does this PR close?\n\nAdresses: https://github.com/apache/datafusion/issues/13814\n\nFound while profiling compile times for #24325 / #24326 / #24329 /\n#24330.\n\n## Rationale for this change\n\n`datafusion/core/src/bin/` holds three binaries that regenerate the docs\nunder\n`docs/source/user-guide`: `print_config_docs`,\n`print_runtime_config_docs` and\n`print_functions_docs`. Cargo auto-discovers them and they have no\n`required-features`, so **every `cargo build` links all three** — each\none\n~174MB, since each links the whole `datafusion` rlib.\n\nNothing in normal development uses them. They are run by\n`dev/update_config_docs.sh` and `dev/update_function_docs.sh`, and by\nthe CI job\nthat checks the committed docs are up to date.\n\nTwo places where this shows up:\n\n**Cold builds.** The three binaries link *after* every other unit has\nfinished,\nso they sit on the critical path with nothing to overlap with.\n`cargo build --timings` shows them occupying the last **3.5s** of a\n`cargo build -p datafusion` (~8.8s of CPU), after the last library unit\ncompletes.\n\n**The tightest inner loop** — touch a file in core, rebuild. All three\nare\nrelinked every time:\n\n```\nbefore: 3.0s  2.4s\nafter:  1.3s  1.1s\n```\n\n## What changes are included in this PR?\n\nThe three binaries move behind a new non-default `docs_generation`\nfeature, and\nthe two `dev/` scripts pass `--features docs_generation`.\n\nUsing `required-features` means declaring the `[[bin]]` targets\nexplicitly, since\nauto-discovered targets cannot carry it.\n\n## Are these changes tested?\n\n- `cargo build -p datafusion` no longer produces the three binaries\n- `cargo build -p datafusion --features docs_generation` does\n- `./dev/update_config_docs.sh` still regenerates\n  `docs/source/user-guide/configs.md` byte-identically (empty `git diff`\n  afterwards), which is what the CI doc check compares\n\n`dev/update_function_docs.sh` uses the same invocation pattern and all\nthree of\nits call sites were updated; CI exercises both scripts.\n\n## Are there any user-facing changes?\n\nThe three binaries are no longer built by a default `cargo build`.\nAnyone who\nran them directly needs `--features docs_generation` — same as the\n`dev/` scripts\nnow do. No library API changes.\n\nIf you would rather these lived outside the published crate altogether,\nmoving\nthem to a small non-published `dev/` crate would have the same effect on\nbuild\ntimes; I went with the smaller change.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "8c099dc15058cb95665e4a2312fd852d3c7042e4",
      "tree": "1dbaef61738bde9d7a48da273f821f886a8af01c",
      "parents": [
        "519687ca22ffae61f90719a3be040a90f57da469"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Thu Aug 13 17:28:00 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 17:28:00 2026 +0000"
      },
      "message": "perf(session): cut `datafusion-session` compile time ~1.7x (#24326)\n\n## Which issue does this PR close?\n\nAdresses: https://github.com/apache/datafusion/issues/13814\n\n## Rationale for this change\n\n`datafusion-session` is 1,619 lines of source and spends **18.8s** in\nthe\nfrontend during a cold `cargo build -p datafusion` (`cargo build\n--timings`) —\n11.6ms per line, the worst ratio in the workspace, against\n0.09–0.55ms/line for\ncrates like `datafusion-datasource` or `datafusion-physical-plan`.\n\n`-Zself-profile` puts ~72% of the crate\u0027s compile time in\n`evaluate_obligation`,\nand 98% of that in `Send`/`Sync`.\n\n\n\n## What changes are included in this PR?\n\n`TableProvider::{delete_from, update, merge_into}` are one-line\n`not_impl_err!`\nstubs that nevertheless build a coroutine capturing `Vec\u003cExpr\u003e` / `Expr`\n—\nproving that coroutine `Send` walks the whole `Expr`/`LogicalPlan` type\ngraph.\n\nThey are now written as the desugaring of `async fn` returning\n`ready(..)`, so\nno coroutine is created and there is nothing expensive to prove. The\nsignatures\nare exactly what `#[async_trait]` generates — verified against\n`-Zunpretty\u003dexpanded` output of this crate — so implementors are\nunaffected.\n\nI originally converted seven bodies, but measuring each one\u0027s marginal\ncontribution (reverting one at a time; `evaluate_obligation` self time,\nall-converted baseline 659ms) showed only the ones taking `Expr` matter:\n\n| method left as `async fn` | trait solving | marginal cost |\n|---|---|---|\n| `delete_from` | 1.29s | +631ms |\n| `update` | 1.30s | +641ms |\n| `merge_into` | 1.29s | +631ms |\n| `truncate` | 697ms | +38ms |\n| `insert_into` | 665ms | ~0 |\n\n\n## Are these changes tested?\n\n\nInterleaved A/B of `cargo rustc -p datafusion-session --lib`\n```\nbase: 1.582s  1.576s  1.590s\nfix:  0.933s  0.938s  0.932s\n```\n\n`evaluate_obligation` drops from 1.28s to 0.646s.\n\nThose are standalone-build numbers. In the feature-unified build this\ncrate\u0027s\nfrontend is 18.8s rather than ~1.6s (each obligation is several times\ndearer\nthere), so the absolute saving on a real build should be larger — I have\nnot\nmeasured that directly, since isolating one crate\u0027s unit in a full build\nis hard\nto do without confounding it with machine drift.\n\n## Are there any user-facing changes?\n\nNo public signature changes\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "519687ca22ffae61f90719a3be040a90f57da469",
      "tree": "a63626ca5a91afa5853f8c9e70ce0c246349f40c",
      "parents": [
        "ca1e25e235572df03d98d0bc0251fce176d846d5"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Thu Aug 13 17:27:43 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 17:27:43 2026 +0000"
      },
      "message": "perf(catalog-listing): cut `datafusion-catalog-listing` compile time ~4.4x (#24330)\n\n## Which issue does this PR close?\n\nAdresses: https://github.com/apache/datafusion/issues/13814\n\nFourth and last crate in the family from #24325 (`datafusion-catalog`),\n#24326\n(`datafusion-session`) and #24329 (`datafusion` core). Independent of\nall three —\ndifferent crates, so they can merge in any order.\n\n## Rationale for this change\n\n`datafusion-catalog-listing` is 3,013 lines of source but spends\n**20.5s** in the\nfrontend during a cold `cargo build -p datafusion` (`cargo build\n--timings`), and\nit sits on the critical path between `datafusion-catalog` and\n`datafusion` core.\n\n`-Zself-profile` puts 58% of the crate\u0027s compile time in\n`evaluate_obligation`,\nand grouping those goals by the `Self` type in their `ParamEnv` shows\nall of it\nin one impl:\n\n| `Self` in `ParamEnv` | time | goals |\n|---|---|---|\n| `ListingTable` | 3.16s | 6,967 |\n| *(empty `ParamEnv`)* | 0.04s | 8,443 |\n\nNote the second row — the same kind of goals cost ~5µs each with an\nempty\n`ParamEnv` against ~450µs here.\n\nThe cause is the one from the earlier PRs: `#[async_trait]` gives each\n`async fn`\na `where \u0027life0: \u0027async_trait, ..` clause, which makes the method\u0027s\n`ParamEnv`\nnon-empty, and rustc only serves auto-trait obligations from its\n**global**\nevaluation cache when the `ParamEnv` is empty. So the `Send`/`Sync`\nproof for\neverything the future captures is redone per method.\n\nAll three async methods in this impl reach `Expr`:\n\n- `scan` takes `\u0026[Expr]`\n- `scan_with_args` takes `ScanArgs\u003c\u0027a\u003e`, which holds `\u0026[Expr]`\n- `insert_into` keeps `self.options` (`Vec\u003cVec\u003cSortExpr\u003e\u003e`) live across\nan await\n\nso each one pays for a walk of the whole `Expr`/`LogicalPlan` graph.\n\n## What changes are included in this PR?\n\nEach method is now the hand-written desugaring of `async fn` and only\nforwards;\nthe coroutine is built in a shim with no where-clauses, so its proofs\nland in the\nglobal cache. Bodies are moved verbatim into inherent fns and all three\nstay\n`async`, so nothing is evaluated any earlier than before —\n`Box::pin(self.m_inner(..))` polls nothing.\n\nFollowing the review on #24326, I measured each method\u0027s marginal\ncontribution\nfirst, by reverting one at a time (together with its helpers) from the\nall-converted state:\n\n| state | crate build | `evaluate_obligation` |\n|---|---|---|\n| all three converted | 0.931s | 34.9ms |\n| revert `insert_into` | 1.866s | 1.01s |\n| revert `scan` | 1.943s | 1.05s |\n| revert `scan_with_args` | 2.118s | 1.17s |\n| none converted (base) | 4.201s | 3.25s |\n\nUnlike #24326 — where two of the seven bodies I first converted turned\nout to\ngain nothing — all three pull their weight here. Converting all of them\nleaves no\ncoroutine in the impl at all, so the graph is never walked in a\nnon-empty\n`ParamEnv`, which is why the total drops by two orders of magnitude\nrather than\nby a third.\n\n## Are these changes tested?\n\n- `cargo test -p datafusion-catalog-listing` — 18 + 7 passed\n- `cargo test -p datafusion --lib` — 442 passed\n- `cargo check -p datafusion --all-targets` — clean (`ListingTable` is\nused\n  heavily by core\u0027s integration tests and benches)\n- `cargo clippy -p datafusion-catalog-listing --all-targets` — clean\n- `cargo fmt --check` — clean\n\nThe compiler checks each rewritten signature against the trait\ndeclaration, and\nevery body is moved verbatim.\n\nInterleaved A/B of `cargo rustc -p datafusion-catalog-listing --lib`,\nalternating\n3 times so machine drift cancels out:\n\n```\nbase: 4.257s  4.189s  4.134s\nfix:  0.984s  0.935s  0.980s\n```\n\n`evaluate_obligation` drops from 3.25s to 34.7ms.\n\n## Are there any user-facing changes?\n\nNo. No public signature changes — after macro expansion these methods\nhave the\nsame signatures as before.\n\n### Follow-up\n\nWith this, the four crates that made up the serial tail of a cold build\nare done.\nThe general fix remains available and would cover downstream\nimplementors too:\ndrop `#[async_trait]` from these traits in favour of an explicit\n`BoxFuture`\nreturn with a single lifetime and no where-clauses, so that *every* impl\nis cheap\nwithout hand-desugaring. That is a breaking change to public traits, so\nit is out\nof scope here.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "ca1e25e235572df03d98d0bc0251fce176d846d5",
      "tree": "601e0d27b11709a81a7da8a991afd111416b1fa4",
      "parents": [
        "1a770de07e71f36d161fef95c6246d4c54859224"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Thu Aug 13 17:27:28 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 17:27:28 2026 +0000"
      },
      "message": "perf(core): cut `datafusion` core compile time ~10x (#24329)\n\n## Which issue does this PR close?\n\nAdresses: https://github.com/apache/datafusion/issues/13814\n\nThird and largest instance of the problem from #24325\n(`datafusion-catalog`),\n#24326 (`datafusion-session`) and #24330 (`datafusion-catalog-listing`).\nIndependent of all of them — different crates, so they can merge in any\norder.\n\n## Rationale for this change\n\n`datafusion` core is the last unit of a cold `cargo build -p datafusion`\nand\ncompiles alone, so its cost lands directly on the build\u0027s wall clock.\n**76% of\nits compile time was the trait solver**: `-Zself-profile` reported 75.0s\nof\n`evaluate_obligation` out of 98.6s total, essentially all of it proving\n`Send`/`Sync`.\n\n`#[async_trait]` gives each `async fn` a `where \u0027life0: \u0027async_trait,\n..`\nclause. rustc only serves auto-trait obligations from its **global**\nevaluation\ncache when the `ParamEnv` is empty, so the `Send`/`Sync` proof for\neverything\nthe returned future captures is redone per method. In this crate the\ncaptured\nsets include `SessionState`, `\u0026LogicalPlan` and `ListingTableConfig`,\neach of\nwhich reaches a large fraction of the logical-plan type graph.\n\nGrouping the goals by the `Self` type in their `ParamEnv` shows how\nconcentrated\nthis was — 14 impls, top 10 \u003d 78% of the total:\n\n| impl | trait solving | | impl | trait solving |\n|---|---|---|---|---|\n| `ParquetReadOptions` | 7.73s | | `DynamicListTableFactory` | 5.18s |\n| `JsonReadOptions` | 7.54s | | `ListingTableFactory` | 4.56s |\n| `DefaultPhysicalPlanner` | 7.07s | | `TestTableFactory` | 4.47s |\n| `CsvReadOptions` | 6.59s | | `ListingTableConfig` | 4.30s |\n| `DataFrameTableProvider` | 5.68s | | `DefaultQueryPlanner` | 4.28s |\n| *(trait default bodies)* | 5.37s | | `DefaultTableFactory` | 4.15s |\n| | | | `SessionState` | 4.11s |\n| | | | `ArrowReadOptions` | 3.72s |\n\nFor contrast, in the same compile 31,818 goals with an **empty**\n`ParamEnv` cost\n0.19s in total — 6µs each, against ~1.3ms for the same kind of goal\nunder\n`async_trait`\u0027s bounds.\n\n## What changes are included in this PR?\n\n**First commit.** Each of those methods becomes the hand-written\ndesugaring of\n`async fn`, which only forwards; the coroutine is built in a shim with\nno\nwhere-clauses, so its auto-trait obligations are proved in an empty\n`ParamEnv`\nand land in the global cache. Method bodies are moved verbatim into\ninherent fns.\n\nThe `ReadOptions` family (25.6s across four impls, plus the 5.37s\ndefault body)\ncollapses to a **single** proof: all five impls already delegated to the\n`_get_resolved_schema` default body, which now hands the coroutine to a\nfree\n`infer_schema_boxed`. Because that helper is a plain function with no\ngenerics\nand no where-clauses, its proof is cached once and shared by every impl.\n\n**Second commit**, from re-profiling after the first. 11.15s of trait\nsolving\nremained, in exactly two places:\n\n1. `ListingTableConfigExt::infer` was still an `async fn` capturing\n   `self: ListingTableConfig` (4.37s). It now uses the same shim as\n   `infer_options` beside it.\n2. `ReadOptions::_get_resolved_schema` still carried `Self: Sync`, which\n`#[async_trait]` needed while its body was a coroutine capturing\n`\u0026self`.\nAfter the first commit it is neither, so the bound is dead weight — and\nit\nforced every caller to prove its own type `Sync` structurally, through\narrow\u0027s `DataType`/`Schema`, in a non-empty `ParamEnv` (2.1–2.4s each\nfor\nCsv/Json/Parquet; `ArrowReadOptions` was already cheap, having fewer\nfields).\n\nTwo things worth noting for review:\n\n- `DefaultPhysicalPlanner::create_initial_plan` already used exactly\nthis shape\n(`-\u003e BoxFuture\u003c\u0027a, _\u003e` plus `Box::pin(async move ..)`) — there for\nrecursion\n  rather than for compile time. The idiom is not new to this codebase.\n- The second commit **relaxes a bound on a public trait method**.\nNothing in tree\n  overrides `_get_resolved_schema` (all five impls only implement\n`get_resolved_schema`) and the underscore prefix marks it as internal,\nbut an\nexternal override written with `#[async_trait]` would generate `Self:\nSync` and\nno longer match. Happy to drop that commit if you would rather not touch\nit.\n\nOne body became eager: `TestTableFactory::create_inner` has no `.await`,\nso it is\na plain fn wrapped in `ready(..)`. It builds a `TestTableProvider` and\nhas no side\neffects. Everything that awaits stays lazy —\n`Box::pin(self.m_inner(..))` polls\nnothing.\n\n## Are these changes tested?\n\n- `cargo test -p datafusion --lib` — 442 passed\n- `cargo check -p datafusion --all-targets` — clean (covers core\u0027s\nintegration\n  tests and benches, heavy users of these APIs)\n- `cargo clippy -p datafusion --lib` — clean\n- `cargo doc` with `-D warnings` — clean\n- `cargo fmt --check` — clean\n\nThe compiler checks each rewritten signature against its trait\ndeclaration, and\nevery body is moved verbatim.\n\n`cargo rustc -p datafusion --lib` with `-Ztime-passes`, alternated with\nthe base\nso machine drift cancels out:\n\n| | total | `evaluate_obligation` |\n|---|---|---|\n| base | 88.9s | 75.0s |\n| after first commit | 18.6s | 11.15s |\n| after second commit | **8.2s** | **234ms** |\n\n234ms over 34,724 goals is 6.7µs each — the same rate as goals that\ncarry an\nempty `ParamEnv`, i.e. the repeated proving is gone rather than merely\nreduced.\nWhat remains in this crate is LLVM: 7.6s emitting objects and 4.2s in\nLLVM\npasses.\n\nAn earlier interleaved wall-clock A/B of the first commit alone measured\n74.4s/69.9s base against 16.6s/15.5s fixed.\n\n## Are there any user-facing changes?\n\nNo, other than the relaxed `Self: Sync` bound described above. No public\nsignature changes — after macro expansion these methods have the same\nsignatures\nas before.\n\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "1a770de07e71f36d161fef95c6246d4c54859224",
      "tree": "898e4998e696224a99216baf6c0545ed65268516",
      "parents": [
        "6b051b0bfd8cd76d3e0fd4c705eeee32e5c4656b"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Thu Aug 13 17:27:18 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 17:27:18 2026 +0000"
      },
      "message": "perf(catalog): cut `datafusion-catalog` compile time ~6x (#24325)\n\n## Which issue does this PR close?\n\nAdresses: https://github.com/apache/datafusion/issues/13814\n\nFirst of four; see also #24326 (`datafusion-session`), #24329\n(`datafusion` core)\nand #24330 (`datafusion-catalog-listing`). All independent — different\ncrates, so\nthey can merge in any order.\n\n## Rationale for this change\n\n`datafusion-catalog` is only 4.9k lines of source, but it takes **42s**\nof a cold\n`cargo build -p datafusion` (measured with `cargo build --timings`).\n\n`-Zself-profile` says ~90% of the crate\u0027s compile time is\n`evaluate_obligation`,\nand ~99% of that is proving `Send`/`Sync`:\n\n| trait | time | goals |\n|---|---|---|\n| `Send` | 4.04s | 8245 |\n| `Sync` | 3.97s | 8195 |\n| everything else | 0.03s | 7355 |\n51.8s of trait\nsolving:\n\n| impl | trait solving |\n|---|---|\n| `MemTable` | 13.7s |\n| `StreamTable` | 9.0s |\n| `CteWorkTable` | 8.9s |\n| `StreamWrite` | 6.9s |\n| `StreamTableFactory` | 4.5s |\n| `ViewTable` | 4.4s |\n| `StreamingTable` | 4.4s |\n\n## What changes are included in this PR?\n\nFor those impls, the future is now constructed in a small shim function\nthat has\n**no** where-clauses, so its auto-trait obligations are proved in an\nempty\n`ParamEnv` and get cached globally. The trait method is left as a\nhand-written\ndesugaring of what `#[async_trait]` would have generated, and only\nforwards — it\nnever creates a coroutine of its own, so it does no auto-trait work.\n\n\n\nIsolated probe confirming the shape is what matters (5 trivial impls of\na local\n`#[async_trait]` trait taking `\u0026[Expr]`, added to this crate):\n\n| variant | crate build | cost of the 5 impls |\n|---|---|---|\n| no impls (baseline) | 8.31s | — |\n| `#[async_trait]` + `async fn` | 11.64s | +3.33s |\n| `async fn` delegating body to a boxed helper | 14.28s | +5.97s |\n| desugared signature + boxed shim | 8.01s | ~0 |\n\nNote the middle row: moving only the *body* out makes things worse. The\n`async fn`\nitself has to go, because its arguments are what the future captures.\n\n## Are these changes tested?\n\n\nThe change is mechanical and the compiler checks each rewritten\nsignature against\nthe trait declaration.\n\nInterleaved A/B of `cargo rustc -p datafusion-catalog --lib`,\nalternating 3 times\nso machine drift cancels out:\n\n```\nbefore: 8.08s  7.90s  7.63s\nafter:  1.77s  1.70s  1.69s\n```\n\n`evaluate_obligation` drops from **7.31s to 70ms**, and its goal count\nfrom\n25,811 to 14,934. In a full `cargo build -p datafusion` the crate\u0027s unit\ngoes from\n42.3s to ~8s; since it sits alone on the critical path, that time comes\nstraight\noff the build\u0027s wall clock.\n\n## Are there any user-facing changes?\n\nNo. No public signature changes — after macro expansion the trait\nmethods have the\nsame signatures as before.\n\n\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\n---------\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "6b051b0bfd8cd76d3e0fd4c705eeee32e5c4656b",
      "tree": "01ce7d0c4016bb2f2c90ff85da057c4e425801fa",
      "parents": [
        "1164d6022144f4289bdc450eeff3efdec70452c2"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Aug 13 16:36:17 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 16:36:17 2026 +0000"
      },
      "message": "chore(deps): bump the all-other-cargo-deps group across 1 directory with 3 updates (#24320)\n\nBumps the all-other-cargo-deps group with 3 updates in the / directory:\n[ctor](https://github.com/mmastrac/linktime),\n[liblzma](https://github.com/portable-network-archive/liblzma-rs) and\n[toml](https://github.com/toml-rs/toml).\n\nUpdates `ctor` from 1.0.12 to 1.0.13\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/releases\"\u003ector\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ector-1.0.13\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBumped internal proc macro minimum version to pick up consistent\n64-bit hash chunks (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/508\"\u003e#508\u003c/a\u003e)\nand the cross-crate section-name fix (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/509\"\u003e#509\u003c/a\u003e)\n(should not result in any downstream visible changes)\u003c/li\u003e\n\u003cli\u003eDocument \u003ccode\u003ecrate_path\u003c/code\u003e and re-exports by \u003ca\nhref\u003d\"https://github.com/mmastrac\"\u003e\u003ccode\u003e@​mmastrac\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/rust-ctor/pull/514\"\u003emmastrac/rust-ctor#514\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/mmastrac/rust-ctor/compare/ctor-1.0.12...ctor-1.0.13\"\u003ehttps://github.com/mmastrac/rust-ctor/compare/ctor-1.0.12...ctor-1.0.13\u003c/a\u003e\u003c/p\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/mmastrac/linktime/commit/00ca36a7ed6d959d01866feeeec078a79b6dfa3f\"\u003e\u003ccode\u003e00ca36a\u003c/code\u003e\u003c/a\u003e\nPrepare for release (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/515\"\u003e#515\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/commit/c65b7d0649606a9a9e687f211dd9588db9da53e5\"\u003e\u003ccode\u003ec65b7d0\u003c/code\u003e\u003c/a\u003e\nDocument crate_path and re-exports (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/514\"\u003e#514\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/commit/4be33acb5b423d3d0b5b145b96a368170fc5f7a2\"\u003e\u003ccode\u003e4be33ac\u003c/code\u003e\u003c/a\u003e\nWork around DragonflyBSD crash at startup (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/513\"\u003e#513\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/commit/e944fce67830715194730df6934320b84c90d1b1\"\u003e\u003ccode\u003ee944fce\u003c/code\u003e\u003c/a\u003e\nTest BSD and minimal targets with crok (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/512\"\u003e#512\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/commit/e0b8059eac26085a15b265d8159518e2d11c585d\"\u003e\u003ccode\u003ee0b8059\u003c/code\u003e\u003c/a\u003e\nFix WASM reference-section const cell layout (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/511\"\u003e#511\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/commit/0977936f677cbc5e3b5bceeb9b859f26d72dea73\"\u003e\u003ccode\u003e0977936\u003c/code\u003e\u003c/a\u003e\nFix cross-crate section error on Rust versions 1.88-1.94 (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/509\"\u003e#509\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/commit/ab85144b8802362e947947be8838b638b95f4bc1\"\u003e\u003ccode\u003eab85144\u003c/code\u003e\u003c/a\u003e\nImprove BSD reliability (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/510\"\u003e#510\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/commit/8d20542db053116d56d1cb930c1f59c4aea5226b\"\u003e\u003ccode\u003e8d20542\u003c/code\u003e\u003c/a\u003e\nEnsure hashes always compute 64-bit chunks (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/508\"\u003e#508\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/commit/7c3993d7043e81cb60e4544baa8eb31fdc295e10\"\u003e\u003ccode\u003e7c3993d\u003c/code\u003e\u003c/a\u003e\nIgnore full crate path test as well (\u003ca\nhref\u003d\"https://redirect.github.com/mmastrac/linktime/issues/506\"\u003e#506\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/mmastrac/linktime/compare/ctor-1.0.12...ctor-1.0.13\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `liblzma` from 0.4.7 to 0.4.8\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/portable-network-archive/liblzma-rs/releases\"\u003eliblzma\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003eliblzma-0.4.8\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e:bookmark: Bump liblzma version to 0.4.8 by \u003ca\nhref\u003d\"https://github.com/ChanTsune\"\u003e\u003ccode\u003e@​ChanTsune\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Portable-Network-Archive/liblzma-rs/pull/233\"\u003ePortable-Network-Archive/liblzma-rs#233\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/Portable-Network-Archive/liblzma-rs/compare/liblzma-sys-0.4.8...liblzma-0.4.8\"\u003ehttps://github.com/Portable-Network-Archive/liblzma-rs/compare/liblzma-sys-0.4.8...liblzma-0.4.8\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAvoid uninitialized read buffer in self_terminating test by \u003ca\nhref\u003d\"https://github.com/ChanTsune\"\u003e\u003ccode\u003e@​ChanTsune\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Portable-Network-Archive/liblzma-rs/pull/227\"\u003ePortable-Network-Archive/liblzma-rs#227\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:bug: Free decoded filter options by \u003ca\nhref\u003d\"https://github.com/ChanTsune\"\u003e\u003ccode\u003e@​ChanTsune\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Portable-Network-Archive/liblzma-rs/pull/229\"\u003ePortable-Network-Archive/liblzma-rs#229\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:bookmark: Bump liblzma version to 0.4.8 by \u003ca\nhref\u003d\"https://github.com/ChanTsune\"\u003e\u003ccode\u003e@​ChanTsune\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Portable-Network-Archive/liblzma-rs/pull/233\"\u003ePortable-Network-Archive/liblzma-rs#233\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/Portable-Network-Archive/liblzma-rs/compare/liblzma-sys-0.4.7...liblzma-0.4.8\"\u003ehttps://github.com/Portable-Network-Archive/liblzma-rs/compare/liblzma-sys-0.4.7...liblzma-0.4.8\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003eliblzma-sys-0.4.8\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eMark rust_lzma_wasm_shim_memcmp as unsafe by \u003ca\nhref\u003d\"https://github.com/ChanTsune\"\u003e\u003ccode\u003e@​ChanTsune\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Portable-Network-Archive/liblzma-rs/pull/224\"\u003ePortable-Network-Archive/liblzma-rs#224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAccept null pointers in zero-length memcmp/memchr shims by \u003ca\nhref\u003d\"https://github.com/ChanTsune\"\u003e\u003ccode\u003e@​ChanTsune\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Portable-Network-Archive/liblzma-rs/pull/228\"\u003ePortable-Network-Archive/liblzma-rs#228\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e:bookmark: Bump liblzma-sys version to 0.4.8 by \u003ca\nhref\u003d\"https://github.com/ChanTsune\"\u003e\u003ccode\u003e@​ChanTsune\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Portable-Network-Archive/liblzma-rs/pull/232\"\u003ePortable-Network-Archive/liblzma-rs#232\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/Portable-Network-Archive/liblzma-rs/compare/liblzma-0.4.7...liblzma-sys-0.4.8\"\u003ehttps://github.com/Portable-Network-Archive/liblzma-rs/compare/liblzma-0.4.7...liblzma-sys-0.4.8\u003c/a\u003e\u003c/p\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/Portable-Network-Archive/liblzma-rs/commit/67e5e8ec99ab3ba93561f76b411fc7037fb154dc\"\u003e\u003ccode\u003e67e5e8e\u003c/code\u003e\u003c/a\u003e\n:bookmark: Bump liblzma version to 0.4.8\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Portable-Network-Archive/liblzma-rs/commit/81cbef0b762d24777100c05e1ec035cad3f083f6\"\u003e\u003ccode\u003e81cbef0\u003c/code\u003e\u003c/a\u003e\n:bookmark: Bump liblzma-sys version to 0.4.8\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Portable-Network-Archive/liblzma-rs/commit/bc17768cb1ca0ccdfb836a76f213e8929a77d75d\"\u003e\u003ccode\u003ebc17768\u003c/code\u003e\u003c/a\u003e\n:construction_worker: Run test suite under Valgrind\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Portable-Network-Archive/liblzma-rs/commit/2fa6a3376794a639c93f34731b08fca3d19f6fc8\"\u003e\u003ccode\u003e2fa6a33\u003c/code\u003e\u003c/a\u003e\n:construction_worker: Check filter option cleanup with Valgrind\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Portable-Network-Archive/liblzma-rs/commit/f764a7bc1dd99cd6df6cede179c0b8da570b2c74\"\u003e\u003ccode\u003ef764a7b\u003c/code\u003e\u003c/a\u003e\n:bug: Free decoded filter options\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Portable-Network-Archive/liblzma-rs/commit/0bddfdae6e3a27df741d12746ce1c86264ea4629\"\u003e\u003ccode\u003e0bddfda\u003c/code\u003e\u003c/a\u003e\n:bug: Accept null pointers in zero-length memcmp/memchr shims\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Portable-Network-Archive/liblzma-rs/commit/f5c893f7bfdad79a0161f824ccee67f817992e46\"\u003e\u003ccode\u003ef5c893f\u003c/code\u003e\u003c/a\u003e\n:bug: Avoid uninitialized read buffer in self_terminating test\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Portable-Network-Archive/liblzma-rs/commit/a28136c01ab0de13a817d151269a1db2d60165a3\"\u003e\u003ccode\u003ea28136c\u003c/code\u003e\u003c/a\u003e\n:bug: Mark rust_lzma_wasm_shim_memcmp as unsafe\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Portable-Network-Archive/liblzma-rs/commit/1e0f56d7de12f3c2c233627979cae989f208eddf\"\u003e\u003ccode\u003e1e0f56d\u003c/code\u003e\u003c/a\u003e\n:green_heart: Link libc++abi on emscripten 6.0.6+\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Portable-Network-Archive/liblzma-rs/commit/3a89116a9dd5a4f3b7f4d0b44cccf7c77151feef\"\u003e\u003ccode\u003e3a89116\u003c/code\u003e\u003c/a\u003e\n:arrow_up: Bump actions/checkout from 6 to 7\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/portable-network-archive/liblzma-rs/compare/liblzma-0.4.7...liblzma-0.4.8\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `toml` from 1.1.3+spec-1.1.0 to 1.1.4+spec-1.1.0\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/beee9fe5a93347722335e1b99a693f3216986132\"\u003e\u003ccode\u003ebeee9fe\u003c/code\u003e\u003c/a\u003e\nchore: Release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/16e2ac15983e8bf9389fc0cdb9ae0f8452973794\"\u003e\u003ccode\u003e16e2ac1\u003c/code\u003e\u003c/a\u003e\ndocs: Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/89f55411d47ee9fb349ab0704f287aa82aa12258\"\u003e\u003ccode\u003e89f5541\u003c/code\u003e\u003c/a\u003e\nfix(toml): preserve datetimes when deserializing Value (\u003ca\nhref\u003d\"https://redirect.github.com/toml-rs/toml/issues/1194\"\u003e#1194\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/534039ccff11412422b3d365d092ef2ed43df2ac\"\u003e\u003ccode\u003e534039c\u003c/code\u003e\u003c/a\u003e\nfix(serde): Deserialize Value datetimes into typed targets\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/6e45cef5d5061fee00fe43cb6b52c3126e05d57a\"\u003e\u003ccode\u003e6e45cef\u003c/code\u003e\u003c/a\u003e\ntest(serde): Reproduce Value datetime deserialization error\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/4ec099fed591a172f82007cb2f9d605985bbecee\"\u003e\u003ccode\u003e4ec099f\u003c/code\u003e\u003c/a\u003e\nchore: Release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/5a47a5180e8acd71ca17e14be75081041e457051\"\u003e\u003ccode\u003e5a47a51\u003c/code\u003e\u003c/a\u003e\ndocs: Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/da0911f7e79a928e2f0f3efe8e30b5bbeb3430d5\"\u003e\u003ccode\u003eda0911f\u003c/code\u003e\u003c/a\u003e\nperf(parser): Reduce over allocation by better tokens/byte ratio (\u003ca\nhref\u003d\"https://redirect.github.com/toml-rs/toml/issues/1193\"\u003e#1193\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/26eb1571f266a72813df4e02367213bd76f68624\"\u003e\u003ccode\u003e26eb157\u003c/code\u003e\u003c/a\u003e\nperf(parser): Reduce over allocation by better tokens/byte ratio\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/ca4c7bf420ad3aa5d318156de483e86ec5c632fe\"\u003e\u003ccode\u003eca4c7bf\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update Prek to v0.4.11 (\u003ca\nhref\u003d\"https://redirect.github.com/toml-rs/toml/issues/1191\"\u003e#1191\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/toml-rs/toml/compare/toml-v1.1.3...toml-v1.1.4\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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 \u003cdependency name\u003e major version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s major version (unless you unignore this specific\ndependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s minor version (unless you unignore this specific\ndependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR\nand stop Dependabot creating any more for the specific dependency\n(unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore\nconditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will\nremove the ignore condition of the specified dependency and ignore\nconditions\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": "1164d6022144f4289bdc450eeff3efdec70452c2",
      "tree": "4fdf964b38809f1eeed04b11cfebad06df5840b2",
      "parents": [
        "ab12f5e4be594e7287602dd0d60381d971a9389a"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Thu Aug 13 12:31:44 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 12:31:44 2026 +0000"
      },
      "message": "Minor: avoid a few clones in sum accumulator setup (#24309)\n\n## Which issue does this PR close?\n\n- follow on to https://github.com/apache/datafusion/pull/24035\n\n## Rationale for this change\n\nThis is a minor thing I found while doing some performance profiling for\nhttps://github.com/apache/datafusion/pull/24035\n\n\n## What changes are included in this PR?\n\nAvoid a few clone calls\n\n## Are these changes tested?\n\nBy CI\n## Are there any user-facing changes?\n\nrealistically nothing that someone will measure"
    },
    {
      "commit": "ab12f5e4be594e7287602dd0d60381d971a9389a",
      "tree": "d2650082ad36e22e0a106da43157b21372e7927c",
      "parents": [
        "186f96fba6b023c8e7310314bb891124e915abc7"
      ],
      "author": {
        "name": "Amogh Ramesh",
        "email": "ramogh2404@gmail.com",
        "time": "Thu Aug 13 10:04:58 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 10:04:58 2026 +0000"
      },
      "message": "fix(ffi): preserve TableProvider DML overrides (#23906)\n\n## Which issue does this PR close?\n\nPart of #22328.\n\n## Rationale for this change\n\n`ForeignTableProvider` inherits the default DML methods, so producer\noverrides are lost across the FFI boundary and writable tables appear\nread-only.\n\n## What changes are included in this PR?\n\n- Forward `delete_from`, `update`, and `truncate` through\n`FFI_TableProvider`.\n- Preserve ordered filters and assignments across the boundary.\n- Move expression-list byte encoding and decoding into reusable\n`datafusion-proto` helpers.\n- Cover forced-foreign and dynamic-library paths, including empty\nfilters and malformed update payloads.\n\n## Are these changes tested?\n\n- `cargo test -p datafusion-ffi --features integration-tests`\n- `cargo clippy --all-targets --all-features -- -D warnings`\n\n## Are there any user-facing changes?\n\nThe FFI ABI changes. Foreign libraries must rebuild against the new\nDataFusion version."
    },
    {
      "commit": "186f96fba6b023c8e7310314bb891124e915abc7",
      "tree": "73ed3d52ccc549e303b82bca6ba206cefa2b83a8",
      "parents": [
        "3985bd5b4ab399a38382417ce1e0d432f3589767"
      ],
      "author": {
        "name": "Yongting You",
        "email": "2010youy01@gmail.com",
        "time": "Thu Aug 13 03:44:55 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 03:44:55 2026 +0000"
      },
      "message": "refactor(hash-aggr): migrate ordered single aggregation (#24259)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\npart of https://github.com/apache/datafusion/issues/22710\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n\nPlease explain the problem you are trying to solve in terms of the\nuser-visible\nbehavior, rather than the implementation.\n\nFor example, \"The code in `foo.rs` doesn\u0027t handle nulls\" is a symptom of\nthe\nimplementation. \"COUNT(DISTINCT) returns wrong results when the column\ncontains\nnulls\" is the user-visible problem.\n--\u003e\nMigrate ordered single aggregation path.\n\nFor the background of the refactor, see EPIC issue for details\n\nFor the overview of the refactored path, see comments at the top of\n`datafusion/physical-plan/src/aggregates/ordered_single_stream.rs`\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here, but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n- `datafusion/physical-plan/src/aggregates/mod.rs`: physical planning\nchanges that route the applicable execution to the\n\u0027ordered-single-aggregate` path\n- `datafusion/physical-plan/src/aggregates/ordered_single_stream.rs`:\nmain implementation. Overview is at the comments for\n`OrderedSingleAggregateStream`, and the entry point for execution state\nmachine is at `poll_next()`\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\nExisting tests. I have verified the test line coverage from `llvm-cov`\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\nNo"
    },
    {
      "commit": "3985bd5b4ab399a38382417ce1e0d432f3589767",
      "tree": "8e5cbacdf28d7dc5aa7cb020f561f76211eb770c",
      "parents": [
        "591ae10c98064a49a90d30af398b92aece72487f"
      ],
      "author": {
        "name": "Emil Ernerfeldt",
        "email": "emil.ernerfeldt@gmail.com",
        "time": "Thu Aug 13 02:59:50 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 02:59:50 2026 +0000"
      },
      "message": "Enable more lints (#24066)\n\n## Which issue does this PR close?\n\n- Part of #18467\n- Follow-up to https://github.com/apache/datafusion/pull/24076\n\n## Rationale for this change\n\nThere are a lot of lints we can enable to, which different abilities to:\n* Simplify the code\n* Write more efficient code\n* Catch bugs\n* etc\n\n## What changes are included in this PR?\nOne commit per new lint (maybe easiest to review commit by commit!).\n\nI hope to add even more lints in  later PRsq\n\n## Are these changes tested?\n\nCovered by existing tests plus the clippy CI job.\n\n## Are there any user-facing changes?\n\nNo.\n\n---------\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "591ae10c98064a49a90d30af398b92aece72487f",
      "tree": "2066ccde07c0d1f02b33184fe40f566fa0e328ff",
      "parents": [
        "bbb552f71c93cdfadf91b374a3c4ff5f1a931ae7"
      ],
      "author": {
        "name": "Ariel Miculas-Trif",
        "email": "ariel.miculas@gmail.com",
        "time": "Thu Aug 13 02:55:37 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 02:55:37 2026 +0000"
      },
      "message": "feat: Store only the last row in the previous cursor for round robin tie-breaking purposes (#23619)\n\n## Which issue does this PR close?\n- Closes #23606.\n\n## Rationale for this change\nSee the linked issue.\nNote that this PR also contains the changes in\nhttps://github.com/apache/datafusion/pull/23606, so this will have to be\nrebased\n\n## What changes are included in this PR?\nStore only the last row in prev_cursors instead of keeping the entire\ncursor\n\n## Are these changes tested?\nAdded a test to show the improvement\n\n## Are there any user-facing changes?\nNo"
    },
    {
      "commit": "bbb552f71c93cdfadf91b374a3c4ff5f1a931ae7",
      "tree": "51233680f09e5b82a7fe2b2698ca09f49fc75a33",
      "parents": [
        "766ca58888a6865b89becea76a4727de0b7438cc"
      ],
      "author": {
        "name": "Renan GEHAN",
        "email": "renan.gehan@gopigment.com",
        "time": "Wed Aug 12 19:57:59 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 19:57:59 2026 +0000"
      },
      "message": "[Parquet] Skip bloom filter predicate evaluation when no bloom filters are loaded (#24101)\n\n## Which issue does this PR close?\n\n- Closes https://github.com/apache/datafusion/issues/24107\n\n## Rationale for this change\n\nBloom filter pruning codepath evaluates pruning predicates even when no\nbloom filters are defined for the row group.\n\nFor wide / expensive predicates, this can add visible latency.\n\nThis PR suggests shunting the evaluation of the predicate altogether\nwhen a row group provably doesn\u0027t contain bloom filters.\n\n## What changes are included in this PR?\n\nShort-circuits the pruning predicate evaluation in bloom filter pruning\ncodepath when there are no bloom filters.\n\n## Are these changes tested?\n\nYes, but the assertions are weak and cannot differentiate between a\nskipped pruning predicate (no bloom filter case) vs a pruning predicate\nthat was evaluated and matches the row group.\n\nI suppose we could build a test with an expensive predicate, and rely on\nthe timer, but I find time-based tests to be generally weak/flaky. Let\nme know if you prefer this solution / if you see a better approach.\n\n## Are there any user-facing changes?\n\nNone\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "766ca58888a6865b89becea76a4727de0b7438cc",
      "tree": "3e9e80a696a687e4f166b038cd25ef33bf48658f",
      "parents": [
        "caa3cb4af1bbf49403261e27714414bf7d41d71e"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Wed Aug 12 19:57:42 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 19:57:42 2026 +0000"
      },
      "message": "chore: Expand dependabot coverage (#24290)\n\n## Which issue does this PR close?\n\n- N/A\n\n## Rationale for this change\n\nThis PR tweaks the dependabot config to send dependency updates for a\nfew parts of the repo that were previously missed:\n\n- `dev/depcheck` is excluded from the Cargo workspace and has its own\n`Cargo.lock` (#24289 updates the dependencies manually as an interim\nfix)\n- `datafusion/wasmtest/datafusion-wasm-app` has its own npm\n`package-lock.json`\n- Composite actions under `.github/actions/`\n- The Python dependencies are a uv workspace rooted at the top-level\n`pyproject.toml` with a shared `uv.lock`, but only `docs/` was covered —\n`dev/` and `benchmarks/` got no version updates.\n\n## What changes are included in this PR?\n\n- Add a `cargo` entry for `/dev/depcheck`\n- Add an `npm` entry for `/datafusion/wasmtest/datafusion-wasm-app`\n- Change the `github-actions` entry from `directory: \"/\"` to\n`directories: [\"/\", \"/.github/actions/*\"]` so composite actions are\ncovered\n- Replace the `pip` `/docs` entry with a `uv` entry at the repository\nroot, covering the whole uv workspace and `uv.lock`\n\n## Are these changes tested?\n\nSome manual testing, hard to really test exhaustively without letting\ndependabot run.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "caa3cb4af1bbf49403261e27714414bf7d41d71e",
      "tree": "055f4cea9379d699972a869403a5301e0a2206e9",
      "parents": [
        "6459afe67976d27703ffe704ede4ae48d69d2d66"
      ],
      "author": {
        "name": "Justin O\u0027Dwyer",
        "email": "justin.odwyer@datadoghq.com",
        "time": "Wed Aug 12 19:09:24 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 19:09:24 2026 +0000"
      },
      "message": "refactor(physical-plan): Simplify `ExecutionPlan` API with `replace_children` (#23903)\n\n## Which issue does this PR close?\n\n- Closes https://github.com/apache/datafusion/issues/23441\n\n## User-facing changes: Deprecating `with_new_children` and\n`with_new_children_and_same_properties` in favor of `replace_children`\n\nAs noted\n[here](https://github.com/apache/datafusion/pull/23332#discussion_r3554897693),\nwhile the addition of `with_new_children_and_same_properties` has the\nbenefit of skipping potentially expensive computation in the case that\nreplacement children have the same properties as the original children,\nit widens the API surface area of `ExecutionPlan` in a way that could be\nconfusing for users.\n\nThus, to rectify this, we unify these methods by introducing\n`replace_children`, and we shift towards\n`with_new_children_if_necessary` as the universal entry point for\nreplacing the children of an `ExecutionPlan`. `replace_children`\nsimplifies the interface for users by taking an enum called\n`ChildrenPropertiesHint` as an argument. The enum has two variants,\n`SameProperties` and `Recompute`, which function as a hint to\n`replace_children` from the caller as to whether or not the properties\nneed to be recomputed.\n\n## Trait implementation migration\n\nTo migrate from `with_new_children` and\n`with_new_children_and_same_properties` to `replace_children`, I went\nthrough all 93 implementations of `with_new_children` and implemented\n`replace_children` with a `match` statement matching on the\n`ChildrenPropertiesHint`. In the case that the properties match,\n`ChildrenPropertiesHint::SameProperties`, and we have an implementation\nof `with_new_children_and_same_properties`, then we follow the body of\n`with_new_children_and_same_properties`. In the case that the properties\ndo not match, `ChildrenPropertiesHint::Recompute`, we follow the body of\n`with_new_children`. In the cases in which there was no implementation\nof `with_new_children_and_same_properties`, I simply move the body of\n`with_new_children` into `replace_children` and ignore the hint.\n\nI mark `with_new_children` and `with_new_children_and_same_properties`\nas deprecated with a migration note pointing to `replace_children`.\nAfter a couple releases, we\u0027ll drop the deprecated methods.\n\n## Example\n\nFor example, here is what the implementation looks like for `FilterExec`\nafter this change:\n\n```\n    fn replace_children(\n        self: Arc\u003cSelf\u003e,\n        mut children: Vec\u003cArc\u003cdyn ExecutionPlan\u003e\u003e,\n        hint: ChildrenPropertiesHint,\n    ) -\u003e Result\u003cArc\u003cdyn ExecutionPlan\u003e\u003e {\n        validate_child_count!(self, children);\n        match hint {\n            ChildrenPropertiesHint::SameProperties \u003d\u003e Ok(Arc::new(Self {\n                input: children.swap_remove(0),\n                metrics: ExecutionPlanMetricsSet::new(),\n                ..Self::clone(\u0026*self)\n            })),\n            ChildrenPropertiesHint::Recompute \u003d\u003e {\n                let new_input \u003d children.swap_remove(0);\n                FilterExecBuilder::from(\u0026*self)\n                    .with_input(new_input)\n                    .build()\n                    .map(|e| Arc::new(e) as _)\n            }\n        }\n    }\n```\n\nWe see here that in the case that the hint suggests the properties are\nthe same, we can simply swap the children without having to recompute\nthe properties. In the case that the properties are not the same, we\ncreate a new node from scratch. We achieve this functionality by moving\nthe hint calculations definitively into `with_new_children_if_necessary`\nrather than having them scattered around many methods. However, for this\nto all work we must ensure that users actually do use\n`with_new_children_if_necessary` by making it obvious to them somehow. I\nfeel `replace_children` is a step in the right direction, but it could\nstill be easy for a user to miss `with_new_children_if_necessary` and\njust jump to using `replace_children` instead.\n\n## Usage Migration\n\n`replace_children` is called from `with_new_children_if_necessary`,\nwhich is the standard entry point that should be used for replacing the\nchildren of a node.\n\nTo model the intended behavior for our users, I took the time here to\nmigrate usages of `with_new_children` and\n`with_children_and_same_properties` to `with_new_children_if_necessary`\nwhere it made sense to do so, and I migrated\n`with_new_children_if_necessary` to use `replace_children` with the\ncorrect hint filled in at each branch.\n\n## Testing\n\n- `cargo fmt --all`\n- `cargo check -p datafusion-physical-plan`\n- `cargo check -p datafusion-physical-optimizer`\n- `cargo check -p datafusion --lib`\n- `cargo check -p datafusion-ffi`\n- CI passing\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "6459afe67976d27703ffe704ede4ae48d69d2d66",
      "tree": "bac56d03dbdece5096f274b0db48e79d5b29798a",
      "parents": [
        "ad977b01d0665b81ff0b90c5976563e2cf63c435"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Wed Aug 12 18:31:55 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 18:31:55 2026 +0000"
      },
      "message": "chore: Update depcheck toolchain and dependencies (#24289)\n\n## Which issue does this PR close?\n\n- N/A\n\n## Rationale for this change\n\ndev/depcheck is scanned by Dependabot but is not eligible to receive\ndependabot PRs, so it has several dependencies with known security\nissues. This PR updates those dependencies; it also updates the Rust\ntoolchain versions while we\u0027re at it.\n\n## What changes are included in this PR?\n\nSee above.\n\n## Are these changes tested?\n\nYes. Manually tested by adding a cycle and verifying that depcheck still\ncatches it.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "ad977b01d0665b81ff0b90c5976563e2cf63c435",
      "tree": "8af6b90e62ce4896a8e06d9b94e82666fe975c92",
      "parents": [
        "78b828c16247158d34ee8282a4d502e6d1bf5d93"
      ],
      "author": {
        "name": "Tim Saucer",
        "email": "timsaucer@gmail.com",
        "time": "Wed Aug 12 17:04:30 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 17:04:30 2026 +0000"
      },
      "message": "Add branch-55 protection (#24293)\n\nTo prepare for the 55 release, add protection to the `branch-55` branch."
    },
    {
      "commit": "78b828c16247158d34ee8282a4d502e6d1bf5d93",
      "tree": "4f9171966aa3d9abf013d348d420ecc2debb37ab",
      "parents": [
        "c81e7070b7066a5d88f783219f95329a4ab566a1"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Wed Aug 12 16:58:44 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 16:58:44 2026 +0000"
      },
      "message": "bench: add standard window function cases to bounded_window (#24151)\n\n## Which issue does this PR close?\n\n- Related to #23982 \n\n## Rationale for this change\n\nThe `bounded_window` benchmark only covered aggregate window expressions\n(`count` and `sum`). Window functions such as `row_number`, `rank`,\n`lag`, `lead`, and `nth_value` go through a different code path, for\nwhich we had no benchmark coverage.\n\nAdd four new benchmark cases:\n\n- `linear dense row_number 10000 partitions`: per-visit fixed costs on\npartitions that receive rows in every batch.\n- `linear sparse row_number 32768 partitions`: per-batch work on quiet\npartitions dominates.\n- `linear sparse lead 32768 partitions`: a non-causal function, whose\nresult for the last buffered row of a partition stays pending until that\npartition receives another row.\n- `linear dense rank 10000 partitions`: an evaluator that compares ORDER\nBY values row by row.\n\nAlso rename the existing case names to be consistent.\n\n## What changes are included in this PR?\n\n* Add 4 new benchmark cases covering standard (non-agg) window functions\n* Refactor window benchmark code to enable this\n* Rename benchmark case names to be mutually consistent\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "c81e7070b7066a5d88f783219f95329a4ab566a1",
      "tree": "b89f62444d9b6471e1ce94e98b9572bd8a237a38",
      "parents": [
        "9b3b518950c0c6a564b5525d6b274000f27dccd9"
      ],
      "author": {
        "name": "Michal Piatkowski",
        "email": "291740709+MassivePizza@users.noreply.github.com",
        "time": "Wed Aug 12 16:04:50 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 16:04:50 2026 +0000"
      },
      "message": "perf: Concretely typed TopK ArrowHashTable storage (#23609)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\nN/A\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\nEliminate the overhead of casting with `dyn Any` for every item in\n`ArrowHashTable`.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\nCast once per batch and store the typed array. \nPrimitiveHashTables was already generic, so this was a big and simple\nwin.\nStringHashTable was made ~~to use an enum for consistency/readability~~\ngeneric for a miniscule perf improvement over enum.\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\nShould be covered by existing tests.\nFor benching try `cargo bench -p datafusion --bench topk_aggregate --\n\"top k\u003d10 aggregate\"`.\n```\ntop k\u003d10 aggregate 10000000 time-series rows\n                        time:   [10.787 ms 10.940 ms 11.093 ms]\n                        change: [−38.879% −36.987% −35.111%] (p \u003d 0.00 \u003c 0.05)\n                        Performance has improved.\nFound 1 outliers among 100 measurements (1.00%)\n  1 (1.00%) high mild\n\ntop k\u003d10 aggregate 10000000 worst-case rows\n                        time:   [17.414 ms 17.797 ms 18.203 ms]\n                        change: [−46.131% −44.095% −41.958%] (p \u003d 0.00 \u003c 0.05)\n                        Performance has improved.\nFound 4 outliers among 100 measurements (4.00%)\n  2 (2.00%) high mild\n  2 (2.00%) high severe\n\nBenchmarking top k\u003d10 aggregate 10000000 time-series rows [Utf8View]: Collecting 100 samples in estimated 5.9278 s (500 itera\ntop k\u003d10 aggregate 10000000 time-series rows [Utf8View]\n                        time:   [11.777 ms 11.954 ms 12.147 ms]\n                        change: [−37.279% −35.443% −33.760%] (p \u003d 0.00 \u003c 0.05)\n                        Performance has improved.\nFound 3 outliers among 100 measurements (3.00%)\n  1 (1.00%) high mild\n  2 (2.00%) high severe\n\nBenchmarking top k\u003d10 aggregate 10000000 worst-case rows [Utf8View]: Collecting 100 samples in estimated 6.3472 s (300 iterat\ntop k\u003d10 aggregate 10000000 worst-case rows [Utf8View]\n                        time:   [20.337 ms 20.786 ms 21.301 ms]\n                        change: [−37.920% −35.713% −33.401%] (p \u003d 0.00 \u003c 0.05)\n                        Performance has improved.\nFound 3 outliers among 100 measurements (3.00%)\n  2 (2.00%) high mild\n  1 (1.00%) high severe\n```\n\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\nNone."
    },
    {
      "commit": "9b3b518950c0c6a564b5525d6b274000f27dccd9",
      "tree": "0226974d22bfb9245e3d778b00ca6c6b35ca5c32",
      "parents": [
        "c08832d481cea2dcea98e43393e3dd640d421064"
      ],
      "author": {
        "name": "Ruchir Tripathi",
        "email": "166607795+Ruchirtripathi@users.noreply.github.com",
        "time": "Wed Aug 12 10:19:11 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 10:19:11 2026 +0000"
      },
      "message": "fix: ensure new_list respects data_type argument (#24029)\n\n## Which issue does this PR close?\n\n- Closes #24022\n\n## Rationale for this change\n\nFixes a bug where `ScalarValue::new_list`, `new_list_nullable`, and\n`new_large_list` silently ignored the\n`data_type` argument when the `values` array was non-empty. This caused\nissues where accumulators like\n`collect_list` could produce outputs with a slightly different type than\ndeclared (e.g., in the nullability of\nnested fields), leading to invalid argument errors in\n`GroupedHashAggregateStream::emit`.\n\n## What changes are included in this PR?\n\n- Added a `cast_with_options` call for non-empty lists in\n`ScalarValue::new_list`, `new_list_from_iter`, and\n  `new_large_list`.\n- Used `DEFAULT_CAST_OPTIONS` to ensure the concatenated array is\nproperly reconciled with the requested\n  `data_type`.\n\n## Are these changes tested?\n\nYes, this is covered by existing tests. It resolves the\n`GroupedHashAggregateStream` output batch validation\nfailures for accumulators.\n\n## Are there any user-facing changes?\n\nNo, this is an internal bug fix."
    },
    {
      "commit": "c08832d481cea2dcea98e43393e3dd640d421064",
      "tree": "3415bdc012ef30d4e64000bb5bd80d0ebe6fd1d2",
      "parents": [
        "7e015b74af0928187a77cdf9df23b587e349ebf9"
      ],
      "author": {
        "name": "linfeng",
        "email": "33561138+lyne7-sc@users.noreply.github.com",
        "time": "Wed Aug 12 07:13:25 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 07:13:25 2026 +0000"
      },
      "message": "fix: preserve NULL semantics in `log` and `power` simplification (#24247)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Part of #24246.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n\nPlease explain the problem you are trying to solve in terms of the\nuser-visible\nbehavior, rather than the implementation.\n\nFor example, \"The code in `foo.rs` doesn\u0027t handle nulls\" is a symptom of\nthe\nimplementation. \"COUNT(DISTINCT) returns wrong results when the column\ncontains\nnulls\" is the user-visible problem.\n--\u003e\n\n`log` and `power` simplifications removed a nullable base expression,\nwhich could incorrectly produce a non-NULL result when the base was\nNULL.\n\nFor example:\n\n```sql\nSELECT log(a, 1.0), power(a, 0.0)\nFROM (VALUES (NULL::DOUBLE)) AS t(a);\n```\n\nThese expressions should both return NULL, but simplification could\nreplace them with 0.0 and 1.0.\n\n## What changes are included in this PR?\n\nonly apply these simplifications when the removed base expression is\nnon-nullable.\n\n\u003c!--\nThere is no need to duplicate the description in the issue here, but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\nYes. Added sqllogictests covering results and plans.\n\n## Are there any user-facing changes?\n\nYes. log and power expressions with nullable bases now correctly\npreserve NULLs.\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "7e015b74af0928187a77cdf9df23b587e349ebf9",
      "tree": "347812e66c15c6420f5755edc94f0725e67bfe66",
      "parents": [
        "30ca39bef9ea2e746e143727f9de48b1608edc2a"
      ],
      "author": {
        "name": "Kent Wu",
        "email": "kentkwu@gmail.com",
        "time": "Tue Aug 11 17:29:17 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 21:29:17 2026 +0000"
      },
      "message": "fix(physical-plan): CTAS panic on wasm32-unknown-unknown (#24275)\n\n## Which issue does this PR close?\n\n- Closes #24274 \n\n## Rationale for this change\n\n`CREATE TABLE ... AS SELECT` and `MemTable::load` panic on\n`wasm32-unknown-unknown` in browser hosts using `wasm-bindgen-futures`.\nBoth route through `collect_partitioned`, which unconditionally calls\n`JoinSet::spawn` which needs an active tokio reactor.\n`wasm32-unknown-unknown` builds typically don\u0027t have one.\n\n## What changes are included in this PR?\n\n- Adds a single-partition fast path to `collect_partitioned` that drains\nthe stream directly instead of using `JoinSet::spawn`\n- Adds a `test_create_table_as_select` regression test to\n`datafusion/wasmtest`, exercising the CTAS path both natively (via\n`tokio::test`) and in the browser (via `wasm-pack test`).\n\nBehavior for `partition_count !\u003d 1` is unchanged.\n\n## Are these changes tested?\n\nYes\n\n- Adds a CTAS query-level regression test to the `linux-wasm-pack` CI\njob.\n- Ran wasm-pack test suite on chrome:\n- `RUSTFLAGS\u003d\u0027--cfg getrandom_backend\u003d\"wasm_js\"\u0027 wasm-pack test\n--headless --chrome datafusion/wasmtest`\n- `cargo fmt --all`\n- `cargo clippy --all-targets --all-features -- -D warnings`\n- Full workspace extended-tests suite\n\n## Are there any user-facing changes?\n\nNo API changes. On `wasm32-unknown-unknown`, `CREATE TABLE ... AS\nSELECT` and `MemTable::load` no longer panic."
    },
    {
      "commit": "30ca39bef9ea2e746e143727f9de48b1608edc2a",
      "tree": "c49bcaece3b67f836f2086bad6cddd4f0cfbcfb6",
      "parents": [
        "fc4e43e7499f28e846b842bc5adba1fe9d11580c"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Tue Aug 11 17:02:06 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 21:02:06 2026 +0000"
      },
      "message": "fix: Propagate NULLs in `regexp_count`, `regexp_instr` (#24239)\n\n## Which issue does this PR close?\n\n- Closes #24152\n\n## Rationale for this change\n\n`regexp_count` and `regexp_instr` should follow the behavior of these\nfunctions in PostgreSQL and return NULL when any of their arguments is\nNULL. The previous behavior was inconsistent: `regexp_instr` returned\nNULL for a NULL string or pattern, but otherwise NULLs were treated as a\ndefault value, returned a match count of 0, or raised an error,\ndepending on the context.\n\n## What changes are included in this PR?\n\n* Make NULL handling of `regexp_count` and `regexp_instr` consistent and\nmatch PostgreSQL\n* Update SLTs or add new SLTs / unit tests as necessary\n\n## Are these changes tested?\n\nYes, new tests added and/or existing tests updated when necessary.\n\n## Are there any user-facing changes?\n\nYes: the behavior of these UDFs has changed when called with NULL\narguments."
    },
    {
      "commit": "fc4e43e7499f28e846b842bc5adba1fe9d11580c",
      "tree": "b37cbda103faed6c9d2a6a43903523ffe3640c20",
      "parents": [
        "8e5c78964af3e7f90d67effe67bc6c3cb1f2d502"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 11 20:52:51 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 20:52:51 2026 +0000"
      },
      "message": "chore(deps): bump the codeql-actions group with 2 updates (#24250)\n\nBumps the codeql-actions group with 2 updates:\n[github/codeql-action/init](https://github.com/github/codeql-action) and\n[github/codeql-action/analyze](https://github.com/github/codeql-action).\n\nUpdates `github/codeql-action/init` from 4.37.4 to 4.37.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases\"\u003egithub/codeql-action/init\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.37.6\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged the default filepath for the new remote file address format\nthat was introduced in CodeQL Action 4.37.0 / 3.37.0 to\n\u003ccode\u003e.github/codeql-config.yml\u003c/code\u003e to align it with the suggested\npath that is used elsewhere. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4070\"\u003e#4070\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.37.5\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where a network error while streaming the download of\nthe CodeQL bundle could terminate the \u003ccode\u003einit\u003c/code\u003e Action instead\nof falling back to downloading the bundle before extracting it. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4061\"\u003e#4061\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/github/codeql-action/blob/main/CHANGELOG.md\"\u003egithub/codeql-action/init\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eCodeQL Action Changelog\u003c/h1\u003e\n\u003cp\u003eSee the \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases\"\u003ereleases\npage\u003c/a\u003e for the relevant changes to the CodeQL CLI and language\npacks.\u003c/p\u003e\n\u003ch2\u003e[UNRELEASED]\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.37.6 - 04 Aug 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged the default filepath for the new remote file address format\nthat was introduced in CodeQL Action 4.37.0 / 3.37.0 to\n\u003ccode\u003e.github/codeql-config.yml\u003c/code\u003e to align it with the suggested\npath that is used elsewhere. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4070\"\u003e#4070\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.5 - 03 Aug 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where a network error while streaming the download of\nthe CodeQL bundle could terminate the \u003ccode\u003einit\u003c/code\u003e Action instead\nof falling back to downloading the bundle before extracting it. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4061\"\u003e#4061\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.4 - 29 Jul 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis version of the CodeQL Action adds support for the\n\u003ccode\u003etools\u003c/code\u003e input for the \u003ccode\u003ecodeql-action/init\u003c/code\u003e step to\nbe specified using a \u003ccode\u003egithub-codeql-tools\u003c/code\u003e \u003ca\nhref\u003d\"https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization\"\u003erepository\nproperty\u003c/a\u003e. This feature will gradually be rolled out following the\nrelease of this version. Once rolled out, this allows for the CodeQL CLI\nversion that is used in GitHub-managed workflows, such as Default Setup,\nto be set to a custom value. For example, customers who run into issues\nwith rate limits when a new CodeQL CLI version is released can set the\nvalue to \u003ccode\u003etoolcache\u003c/code\u003e to always use the CodeQL CLI version\nthat is available in the runner toolcache. For Advanced Setup workflows,\nthe value provided for \u003ccode\u003etools\u003c/code\u003e in the workflow definition\nalways takes precedence unless the value of the repository property\nstarts with \u003ccode\u003e!\u003c/code\u003e. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4037\"\u003e#4037\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2\"\u003e2.26.2\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4051\"\u003e#4051\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.3 - 22 Jul 2026\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.37.2 - 21 Jul 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe new address format for the \u003ccode\u003econfig-file\u003c/code\u003e input that\nwas introduced in CodeQL Action 4.37.0 is now enabled by default. In\naddition to the format described there, the \u003ccode\u003eremote\u003d\u003c/code\u003e prefix\ncan now be used to explicitly indicate that the input refers to a remote\nfile. All previous input formats continue to be accepted as well. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4023\"\u003e#4023\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe CodeQL Action can now make use of \u003ca\nhref\u003d\"https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries\"\u003econfigured\nprivate registries\u003c/a\u003e in Default Setup to retrieve CodeQL configuration\nfiles from remote repositories that require authentication. This will\nallow customers to store their CodeQL configuration in a single\nrepository that can then be referenced by Default Setup workflows in\nother repositories. We expect to roll this and other, related changes\nout to everyone in July. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4007\"\u003e#4007\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.1 - 16 Jul 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eUpcoming breaking change\u003c/em\u003e: Add a deprecation warning for\ncustomers using CodeQL version 2.20.6 and earlier. These versions of\nCodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise\nServer 3.16, and will be unsupported by the next minor release of the\nCodeQL Action. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3956\"\u003e#3956\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1\"\u003e2.26.1\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4019\"\u003e#4019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.0 - 08 Jul 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0\"\u003e2.26.0\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3995\"\u003e#3995\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIn addition to the existing input format, the\n\u003ccode\u003econfig-file\u003c/code\u003e input for the \u003ccode\u003ecodeql-action/init\u003c/code\u003e\nstep will soon support a new \u003ccode\u003e[owner/]repo[@ref][:path]\u003c/code\u003e\nformat. All components except the repository name are optional. If\nomitted, \u003ccode\u003eowner\u003c/code\u003e defaults to the same owner as the repository\nthe analysis is running for, \u003ccode\u003eref\u003c/code\u003e to \u003ccode\u003emain\u003c/code\u003e, and\n\u003ccode\u003epath\u003c/code\u003e to \u003ccode\u003e.github/codeql-action.yaml\u003c/code\u003e. Support\nfor this format ships in this version of the CodeQL Action, but will\nonly be enabled over the coming weeks. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3973\"\u003e#3973\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.36.3 - 01 Jul 2026\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.36.2 - 04 Jun 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCache CodeQL CLI version information across Actions steps. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3943\"\u003e#3943\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReduce requests while waiting for analysis processing by using\nexponential backoff when polling SARIF processing status. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3937\"\u003e#3937\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6\"\u003e2.25.6\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3948\"\u003e#3948\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/github/codeql-action/commit/5595ccaf912efad79be6eef63a5619ff05969be3\"\u003e\u003ccode\u003e5595cca\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4071\"\u003e#4071\u003c/a\u003e\nfrom github/update-v4.37.6-6a9359a1b\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/ec9c75796a7f2cee5af0c5ffa0b81dc3bb58754b\"\u003e\u003ccode\u003eec9c757\u003c/code\u003e\u003c/a\u003e\nAdd change note for PR 4070\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/45c8742e17cbd668814137f95e605d925b8722a2\"\u003e\u003ccode\u003e45c8742\u003c/code\u003e\u003c/a\u003e\nUpdate changelog for v4.37.6\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/6a9359a1bd054c53cae7bb737bd8d796cfbf3014\"\u003e\u003ccode\u003e6a9359a\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4070\"\u003e#4070\u003c/a\u003e\nfrom github/mbg/remote-address/change-file-default\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/065cdc0394d424981db720df63ebc570e41b775f\"\u003e\u003ccode\u003e065cdc0\u003c/code\u003e\u003c/a\u003e\nChange \u003ccode\u003eDEFAULT_CONFIG_FILE_NAME\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/f99dd5aeee9cf92e92d0c700cb0aa7afd7bbf431\"\u003e\u003ccode\u003ef99dd5a\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4066\"\u003e#4066\u003c/a\u003e\nfrom github/dependabot/npm_and_yarn/js-yaml-5.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/1804b211a343d69a6584d26fb3a68a8fe6ca39d4\"\u003e\u003ccode\u003e1804b21\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4068\"\u003e#4068\u003c/a\u003e\nfrom github/mergeback/v4.37.5-to-main-d1ba80a1\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/3020a2f46286abb1704269b22ada83bd0e81c64f\"\u003e\u003ccode\u003e3020a2f\u003c/code\u003e\u003c/a\u003e\nRebuild\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/93c3a5a40b7affbf8ea6a480767ed0db8e8d3c5c\"\u003e\u003ccode\u003e93c3a5a\u003c/code\u003e\u003c/a\u003e\nUpdate changelog and version after v4.37.5\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/d1ba80a13dd99fba24a470575428917156a28b43\"\u003e\u003ccode\u003ed1ba80a\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4067\"\u003e#4067\u003c/a\u003e\nfrom github/update-v4.37.5-1cd4d01d5\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/github/codeql-action/compare/f205ea1c3313d32999d8d6a48b4f6530d4437b38...5595ccaf912efad79be6eef63a5619ff05969be3\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `github/codeql-action/analyze` from 4.37.4 to 4.37.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases\"\u003egithub/codeql-action/analyze\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.37.6\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged the default filepath for the new remote file address format\nthat was introduced in CodeQL Action 4.37.0 / 3.37.0 to\n\u003ccode\u003e.github/codeql-config.yml\u003c/code\u003e to align it with the suggested\npath that is used elsewhere. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4070\"\u003e#4070\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.37.5\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where a network error while streaming the download of\nthe CodeQL bundle could terminate the \u003ccode\u003einit\u003c/code\u003e Action instead\nof falling back to downloading the bundle before extracting it. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4061\"\u003e#4061\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/github/codeql-action/blob/main/CHANGELOG.md\"\u003egithub/codeql-action/analyze\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eCodeQL Action Changelog\u003c/h1\u003e\n\u003cp\u003eSee the \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases\"\u003ereleases\npage\u003c/a\u003e for the relevant changes to the CodeQL CLI and language\npacks.\u003c/p\u003e\n\u003ch2\u003e[UNRELEASED]\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.37.6 - 04 Aug 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eChanged the default filepath for the new remote file address format\nthat was introduced in CodeQL Action 4.37.0 / 3.37.0 to\n\u003ccode\u003e.github/codeql-config.yml\u003c/code\u003e to align it with the suggested\npath that is used elsewhere. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4070\"\u003e#4070\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.5 - 03 Aug 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFixed a bug where a network error while streaming the download of\nthe CodeQL bundle could terminate the \u003ccode\u003einit\u003c/code\u003e Action instead\nof falling back to downloading the bundle before extracting it. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4061\"\u003e#4061\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.4 - 29 Jul 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThis version of the CodeQL Action adds support for the\n\u003ccode\u003etools\u003c/code\u003e input for the \u003ccode\u003ecodeql-action/init\u003c/code\u003e step to\nbe specified using a \u003ccode\u003egithub-codeql-tools\u003c/code\u003e \u003ca\nhref\u003d\"https://docs.github.com/en/organizations/managing-organization-settings/managing-custom-properties-for-repositories-in-your-organization\"\u003erepository\nproperty\u003c/a\u003e. This feature will gradually be rolled out following the\nrelease of this version. Once rolled out, this allows for the CodeQL CLI\nversion that is used in GitHub-managed workflows, such as Default Setup,\nto be set to a custom value. For example, customers who run into issues\nwith rate limits when a new CodeQL CLI version is released can set the\nvalue to \u003ccode\u003etoolcache\u003c/code\u003e to always use the CodeQL CLI version\nthat is available in the runner toolcache. For Advanced Setup workflows,\nthe value provided for \u003ccode\u003etools\u003c/code\u003e in the workflow definition\nalways takes precedence unless the value of the repository property\nstarts with \u003ccode\u003e!\u003c/code\u003e. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4037\"\u003e#4037\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.2\"\u003e2.26.2\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4051\"\u003e#4051\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.3 - 22 Jul 2026\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.37.2 - 21 Jul 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eThe new address format for the \u003ccode\u003econfig-file\u003c/code\u003e input that\nwas introduced in CodeQL Action 4.37.0 is now enabled by default. In\naddition to the format described there, the \u003ccode\u003eremote\u003d\u003c/code\u003e prefix\ncan now be used to explicitly indicate that the input refers to a remote\nfile. All previous input formats continue to be accepted as well. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4023\"\u003e#4023\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eThe CodeQL Action can now make use of \u003ca\nhref\u003d\"https://docs.github.com/en/code-security/how-tos/secure-at-scale/configure-organization-security/manage-usage-and-access/giving-org-access-private-registries\"\u003econfigured\nprivate registries\u003c/a\u003e in Default Setup to retrieve CodeQL configuration\nfiles from remote repositories that require authentication. This will\nallow customers to store their CodeQL configuration in a single\nrepository that can then be referenced by Default Setup workflows in\nother repositories. We expect to roll this and other, related changes\nout to everyone in July. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4007\"\u003e#4007\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.1 - 16 Jul 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eUpcoming breaking change\u003c/em\u003e: Add a deprecation warning for\ncustomers using CodeQL version 2.20.6 and earlier. These versions of\nCodeQL were discontinued on 1 July 2026 alongside GitHub Enterprise\nServer 3.16, and will be unsupported by the next minor release of the\nCodeQL Action. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3956\"\u003e#3956\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.1\"\u003e2.26.1\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/4019\"\u003e#4019\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.37.0 - 08 Jul 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.0\"\u003e2.26.0\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3995\"\u003e#3995\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIn addition to the existing input format, the\n\u003ccode\u003econfig-file\u003c/code\u003e input for the \u003ccode\u003ecodeql-action/init\u003c/code\u003e\nstep will soon support a new \u003ccode\u003e[owner/]repo[@ref][:path]\u003c/code\u003e\nformat. All components except the repository name are optional. If\nomitted, \u003ccode\u003eowner\u003c/code\u003e defaults to the same owner as the repository\nthe analysis is running for, \u003ccode\u003eref\u003c/code\u003e to \u003ccode\u003emain\u003c/code\u003e, and\n\u003ccode\u003epath\u003c/code\u003e to \u003ccode\u003e.github/codeql-action.yaml\u003c/code\u003e. Support\nfor this format ships in this version of the CodeQL Action, but will\nonly be enabled over the coming weeks. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3973\"\u003e#3973\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.36.3 - 01 Jul 2026\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.36.2 - 04 Jun 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCache CodeQL CLI version information across Actions steps. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3943\"\u003e#3943\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eReduce requests while waiting for analysis processing by using\nexponential backoff when polling SARIF processing status. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3937\"\u003e#3937\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate default CodeQL bundle version to \u003ca\nhref\u003d\"https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.6\"\u003e2.25.6\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3948\"\u003e#3948\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/github/codeql-action/commit/5595ccaf912efad79be6eef63a5619ff05969be3\"\u003e\u003ccode\u003e5595cca\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4071\"\u003e#4071\u003c/a\u003e\nfrom github/update-v4.37.6-6a9359a1b\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/ec9c75796a7f2cee5af0c5ffa0b81dc3bb58754b\"\u003e\u003ccode\u003eec9c757\u003c/code\u003e\u003c/a\u003e\nAdd change note for PR 4070\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/45c8742e17cbd668814137f95e605d925b8722a2\"\u003e\u003ccode\u003e45c8742\u003c/code\u003e\u003c/a\u003e\nUpdate changelog for v4.37.6\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/6a9359a1bd054c53cae7bb737bd8d796cfbf3014\"\u003e\u003ccode\u003e6a9359a\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4070\"\u003e#4070\u003c/a\u003e\nfrom github/mbg/remote-address/change-file-default\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/065cdc0394d424981db720df63ebc570e41b775f\"\u003e\u003ccode\u003e065cdc0\u003c/code\u003e\u003c/a\u003e\nChange \u003ccode\u003eDEFAULT_CONFIG_FILE_NAME\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/f99dd5aeee9cf92e92d0c700cb0aa7afd7bbf431\"\u003e\u003ccode\u003ef99dd5a\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4066\"\u003e#4066\u003c/a\u003e\nfrom github/dependabot/npm_and_yarn/js-yaml-5.2.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/1804b211a343d69a6584d26fb3a68a8fe6ca39d4\"\u003e\u003ccode\u003e1804b21\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4068\"\u003e#4068\u003c/a\u003e\nfrom github/mergeback/v4.37.5-to-main-d1ba80a1\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/3020a2f46286abb1704269b22ada83bd0e81c64f\"\u003e\u003ccode\u003e3020a2f\u003c/code\u003e\u003c/a\u003e\nRebuild\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/93c3a5a40b7affbf8ea6a480767ed0db8e8d3c5c\"\u003e\u003ccode\u003e93c3a5a\u003c/code\u003e\u003c/a\u003e\nUpdate changelog and version after v4.37.5\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/d1ba80a13dd99fba24a470575428917156a28b43\"\u003e\u003ccode\u003ed1ba80a\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/4067\"\u003e#4067\u003c/a\u003e\nfrom github/update-v4.37.5-1cd4d01d5\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/github/codeql-action/compare/f205ea1c3313d32999d8d6a48b4f6530d4437b38...5595ccaf912efad79be6eef63a5619ff05969be3\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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 \u003cdependency name\u003e major version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s major version (unless you unignore this specific\ndependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s minor version (unless you unignore this specific\ndependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR\nand stop Dependabot creating any more for the specific dependency\n(unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore\nconditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will\nremove the ignore condition of the specified dependency and ignore\nconditions\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": "8e5c78964af3e7f90d67effe67bc6c3cb1f2d502",
      "tree": "a34ded43335879f76f2b6abd9a320b62746f51f9",
      "parents": [
        "570d2e1de66d847c5c768ca1618f0945c1953c5b"
      ],
      "author": {
        "name": "Amogh Ramesh",
        "email": "ramogh2404@gmail.com",
        "time": "Wed Aug 12 02:16:36 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 20:46:36 2026 +0000"
      },
      "message": "FFI: plumb with_updated_config for FFI_ScalarUDF (#22797)\n\n## Which issue does this PR close?\n\nPart of #22330.\n\n## Rationale for this change\n\n`ForeignScalarUDF` inherits the default `with_updated_config`, so\nproducer overrides are lost across the FFI boundary.\n\n## What changes are included in this PR?\n\n- Forward `with_updated_config` through `FFI_ScalarUDF`.\n- Reuse the existing placement and timezone UDFs for unit and\ndynamic-library coverage.\n- Log transport failures before the infallible trait method returns\n`None`.\n- Update the FFI skill to cover error handling, owned returns, and\nfixture reuse.\n\n## Are these changes tested?\n\n- `cargo test -p datafusion-ffi --features integration-tests`\n- `cargo clippy --all-targets --all-features -- -D warnings`\n- `./ci/scripts/doc_prettier_check.sh --write --allow-dirty`\n\n## Are there any user-facing changes?\n\nThe FFI ABI changes. Foreign libraries must rebuild against the new\nDataFusion version.\n\n---------\n\nSigned-off-by: Amogh Ramesh \u003cramogh2404@gmail.com\u003e\nCo-authored-by: Tim Saucer \u003ctimsaucer@gmail.com\u003e"
    },
    {
      "commit": "570d2e1de66d847c5c768ca1618f0945c1953c5b",
      "tree": "21d1f134b42574ad0bc4ef71d2337e15958557a2",
      "parents": [
        "149bdb51b96f39300ef12044213c0ea9fbc26335"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Tue Aug 11 16:45:22 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 20:45:22 2026 +0000"
      },
      "message": "perf: prune window state only for partitions that made progress (#24148)\n\n## Which issue does this PR close?\n\n- Related to #23982\n\n## Rationale for this change\n\nAfter ingesting a batch of data, updating accumulator state, and\nemitting new output rows, `BoundedWindowAggStream` prunes each partition\nto reclaim state that is no longer needed: `prune_out_columns` trims\nemitted results that are no longer needed, and `prune_partition_batches`\ndrops buffered input rows that aren\u0027t needed by any window expression.\n\nBoth functions did work proportional to the # of live partitions,\ndespite pruning being a no-op for partitions that didn\u0027t receive rows in\nthe most recent batch:\n\n- `prune_out_columns` looked up every partition\u0027s buffer by hashing its\npartition key and re-sliced every result column, including zero-length\nprunes that rebuilt an identical column.\n- `prune_partition_batches` put an entry in its prune-count map for\nevery live partition, cloning each partition\u0027s key (a Vec\u003cScalarValue\u003e);\nfor sparse workloads (# of partitions \u003e batch-size), most prune counts\nwill be zero and this did a lot of redundant work.\n\nRestructure both passes to pass over quiet partitions:\n\n- `prune_out_columns` iterates the partition buffers and only processes\npartitions with a nonzero emitted-row count. Hash lookups now happen\nonly for partitions that emitted rows since the previous pass.\n- `prune_partition_batches` only keeps partitions with positive prune\ncounts in its map\n\nBenchmarks (after applying #24127):\n\n- linear / range / single / 100 dense:      43.2 ms -\u003e  43.0 ms (~noise)\n- linear / range / single / 10000 dense:   156.4 ms -\u003e 157.0 ms (~noise)\n- linear / range / single / 32768 sparse:  111.2 ms -\u003e  86.3 ms (-22.4%)\n- linear / rows  / single / 10000 dense:   133.2 ms -\u003e 133.3 ms (~noise)\n- linear / range / multi  / 10000 dense:   246.3 ms -\u003e 245.9 ms (~noise)\n- sorted / range / single / 10000:          34.5 ms -\u003e  34.3 ms (~noise)\n\n## What changes are included in this PR?\n\n* Optimize window state pruning as described above\n* Update and clarify comments in several places\n\n## Are these changes tested?\n\nYes, covered by existing tests.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "149bdb51b96f39300ef12044213c0ea9fbc26335",
      "tree": "d87f92873eba6c71568d745c6f8a4c8bdca2a688",
      "parents": [
        "0ef1aaabdf4670be079dd8de597a45ad8193b03c"
      ],
      "author": {
        "name": "Braedon Wooding",
        "email": "braedon.wooding@displayr.com",
        "time": "Wed Aug 12 06:44:49 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 20:44:49 2026 +0000"
      },
      "message": "fix: infer placeholder types in GROUP BY, HAVING, QUALIFY and ORDER BY (fix for #24042) (#24043)\n\nThe SELECT list is planned by sql_to_expr, which infers placeholder\ntypes. These four clauses are planned by sql_expr_to_logical_expr, which\ndoes not, so the same expression written in both places does not compare\nequal.\n\nThe result is that a grouping key containing a placeholder is never\nmatched against the identical SELECT expression, and the columns inside\nit are reported as ungrouped. The same query with literals in place of\nthe placeholder plans fine. QUALIFY fails differently, on a duplicate\nfield name, because the typed and untyped spellings print alike but are\nnot equal.\n\nAdds a planner test per clause.\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes #24042.\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n--\u003e\n\nI think it\u0027s clearly explained above / in issue.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\nNew tests for each clause case + inferring types in the clauses.\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\nYes tests are there.\n\n## Are there any user-facing changes?\n\nNo.\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n--\u003e\n\n\u003c!--\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "0ef1aaabdf4670be079dd8de597a45ad8193b03c",
      "tree": "891ef54e198ec48f26681fb8dab70b7ceaf1cf72",
      "parents": [
        "b5c4bf22a613809d357d36e7d64601553dfad3db"
      ],
      "author": {
        "name": "Saad Tajwar",
        "email": "59696464+saadtajwar@users.noreply.github.com",
        "time": "Tue Aug 11 16:40:57 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 20:40:57 2026 +0000"
      },
      "message": "refactor: moving WindowTopN before EnsureRequirements (#24191)\n\n## Which issue does this PR close?\n\n- Closes #21594\n\n## Rationale for this change\n\nThe WindowTopN physical optimizer rule currently runs after\nEnsureRequirements, which means it must pattern-match through SortExec\nnodes that EnsureRequirements inserts:\n\n```\nFilterExec(rn \u003c\u003d K)                                                                                                                                                               \n  [optional ProjectionExec]                                                                                                                                                       \n    BoundedWindowAggExec(ROW_NUMBER PARTITION BY ... ORDER BY ...)\n      SortExec(partition_keys, order_keys)   ← inserted by EnforceSorting\n```\n\nBy moving WindowTopN to run before EnsureRequirements, we can simplify\nthe logic to avoid pattern-matching through `SortExec` node and instead\nuse the `ORDER BY` and `PARTITION BY` on the `BoundedWindowAggExec`\n\n## What changes are included in this PR?\n\nMoved `WindowTopN` to run before `EnsureRequirements`, and updated its\nlogic to not expect a `SortExec` and instead use the `ORDER BY` and\n`PARTITION BY` on the `BoundedWindowAggExec`\n\n## Are these changes tested?\n\nYes\n\n## Are there any user-facing changes?\n\nThese are just optimizer changes (order of optimizations and internal\nlogic of `WindowTopN`), no API changes"
    },
    {
      "commit": "b5c4bf22a613809d357d36e7d64601553dfad3db",
      "tree": "9454b85a655872ba8a8a8be8b6a0d8515decead9",
      "parents": [
        "bc99f409eb21e1144169a0b6057dc4f2ac7a62b7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 11 16:32:39 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 20:32:39 2026 +0000"
      },
      "message": "chore(deps): bump toml from 0.9.12+spec-1.1.0 to 1.1.3+spec-1.1.0 (#24256)\n\nBumps [toml](https://github.com/toml-rs/toml) from 0.9.12+spec-1.1.0 to\n1.1.3+spec-1.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/eb251609a333580bf005cae27df853bb63dffdbe\"\u003e\u003ccode\u003eeb25160\u003c/code\u003e\u003c/a\u003e\nchore: Release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/f36fb52c37593b9fece9f4382a56ab51c9e65890\"\u003e\u003ccode\u003ef36fb52\u003c/code\u003e\u003c/a\u003e\ndocs: Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/3adbbb7860810b146dbdedba1f315c90813083f2\"\u003e\u003ccode\u003e3adbbb7\u003c/code\u003e\u003c/a\u003e\nfix(writer): Don\u0027t overflow (\u003ca\nhref\u003d\"https://redirect.github.com/toml-rs/toml/issues/1189\"\u003e#1189\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/fb0c1b376d291ee4ffdf5297a67579f2ad7ce70d\"\u003e\u003ccode\u003efb0c1b3\u003c/code\u003e\u003c/a\u003e\nfix(writer): Don\u0027t overflow\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/5e70a7031d7cd667bdc081419373df4b74bf78d8\"\u003e\u003ccode\u003e5e70a70\u003c/code\u003e\u003c/a\u003e\ntest(writer): Add overflow test\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/771a975840ff876825c2973a79634ffe79a3bf5a\"\u003e\u003ccode\u003e771a975\u003c/code\u003e\u003c/a\u003e\nchore: Upgrade toml-test (\u003ca\nhref\u003d\"https://redirect.github.com/toml-rs/toml/issues/1186\"\u003e#1186\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/28f6c9cbc8ca691b9a32918f631408ffddc4f54d\"\u003e\u003ccode\u003e28f6c9c\u003c/code\u003e\u003c/a\u003e\nchore: Upgrade toml-test\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/30d75ca443a1b27b13232e7cc807eb6e124f4ca2\"\u003e\u003ccode\u003e30d75ca\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update Prek to v0.4.9 (\u003ca\nhref\u003d\"https://redirect.github.com/toml-rs/toml/issues/1185\"\u003e#1185\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/17efe57deb402805ebc699da6dc6e29f9d80ea30\"\u003e\u003ccode\u003e17efe57\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update Rust Stable to v1.97 (\u003ca\nhref\u003d\"https://redirect.github.com/toml-rs/toml/issues/1184\"\u003e#1184\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/toml-rs/toml/commit/c9d0d54b21761d10ec967868cfb5549a30ef064d\"\u003e\u003ccode\u003ec9d0d54\u003c/code\u003e\u003c/a\u003e\nstyle: Make clippy happy\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/toml-rs/toml/compare/toml-v0.9.12...toml-v1.1.3\"\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\u003dtoml\u0026package-manager\u003dcargo\u0026previous-version\u003d0.9.12+spec-1.1.0\u0026new-version\u003d1.1.3+spec-1.1.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": "bc99f409eb21e1144169a0b6057dc4f2ac7a62b7",
      "tree": "315f9d81b178beb56ef2c8a15ad10da316326857",
      "parents": [
        "041a71671c7a505a2e3ed58689a20137c8f3d172"
      ],
      "author": {
        "name": "Jayant Shrivastava",
        "email": "jayant.shrivastava@datadoghq.com",
        "time": "Tue Aug 11 16:22:59 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 20:22:59 2026 +0000"
      },
      "message": "refactor: make apply_expression_roots more ergonomic (#24226)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Follow up to\nhttps://github.com/apache/datafusion/pull/24018#pullrequestreview-4886401724\n\n## Rationale for this change\n\nAllows us to rewrite \n```rust\ndatafusion_physical_plan::apply_expression_roots(\n    self.projection\n        .source\n        .iter()\n        .map(|proj_expr| \u0026proj_expr.expr),\n    f,\n)\n```\nas simply\n```\ndatafusion_physical_plan::apply_expression_roots(self.projection.source.iter(), f)\n```\n\n## What changes are included in this PR?\n\nAdds a new trait and implements it for `ProjectionExpr` which\nfacilitates the syntax above ^\n\n```\npub trait PhysicalExprRoot {\n    /// Returns the physical expression at this root.\n    fn as_physical_expr_root(\u0026self) -\u003e \u0026Arc\u003cdyn PhysicalExpr\u003e;\n}\n```\n\n## Are these changes tested?\n\nShould be covered by existing coverage."
    },
    {
      "commit": "041a71671c7a505a2e3ed58689a20137c8f3d172",
      "tree": "82a8ed8750584376352276d3d92061537616c200",
      "parents": [
        "7544051f2fb6db9bf0c9e00a963f147495760a2f"
      ],
      "author": {
        "name": "Adrian Garcia Badaracco",
        "email": "1755071+adriangb@users.noreply.github.com",
        "time": "Tue Aug 11 15:47:09 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 19:47:09 2026 +0000"
      },
      "message": "Restore the From / TryFrom proto conversions dropped since 54.1.0 (#24205)\n\n## Which issue does this PR close?\n\n- Closes #24019.\n- closes https://github.com/apache/datafusion/issues/23494\n\n## Rationale for this change\n\n`datafusion-proto` 54.1.0 publishes 39 `From` / `TryFrom` impls\nconverting between DataFusion types and their protobuf messages. On\n`main` all of them were replaced by the crate-local `FromProto` /\n`TryFromProto` traits introduced in #21929, so code written against the\nreleased version stops compiling:\n\n```rust\nlet proto \u003d protobuf::PartitionedFile::try_from(\u0026file)?;   // no longer resolves on main\nlet frame \u003d WindowFrame::try_from(proto_frame)?;           // no longer resolves on main\n```\n\nThat was collateral damage from the orphan-rule workaround, which was\nneeded during the migration but can now be unwound to result in no\nbreaking change across releases.\n\n## What changes are included in this PR?\n\nEach conversion moves to a crate that owns one side of it, and goes back\nto being a plain `From` / `TryFrom` — the shape 54.1.0 published. Error\ntypes are unchanged (`FromProtoError` decoding, `ToProtoError` encoding,\n`DataFusionError` for the datasource types).\n\n| Types | New home |\n|---|---|\n| `PartitionedFile`, `FileRange`, `FileGroup`, `JsonSink`, `CsvSink`,\n`ParquetSink`, `FileSinkConfig` | already moved by #24006 / #23781 —\nthis PR just deletes the `TryFromProto` shims that delegated to them |\n| `WindowFrame`, `WindowFrameBound`, `WindowFrameUnits`,\n`MergeIntoClauseKind`, `NullTreatment` | `datafusion-expr`, behind a new\n`proto` feature (optional `datafusion-proto-common` /\n`datafusion-proto-models` deps, mirroring `datafusion-datasource`) |\n| `UnnestOptions`, `TableReference`, `StringifiedPlan`, `JoinType`,\n`JoinConstraint`, `NullEquality`, `CsvOptions`, `JsonOptions`, and the\nparquet options types | `datafusion-proto-models`, on the local proto\ntype — their DataFusion side sits *below* that crate in the graph, the\nsame arrangement `datafusion-proto-common` already uses for\n`ScalarValue` / `Statistics` |\n| `CsvFormatFactory`, `JsonFormatFactory`, `ParquetFormatFactory` |\n`datafusion-datasource-{csv,json,parquet}`, behind each crate\u0027s existing\n`proto` feature |\n| `Column` \u003c-\u003e `protobuf::PhysicalColumn` | `datafusion-physical-expr`;\n`Column::try_to_proto` / `try_from_proto` now go through it instead of\nbuilding the message inline |\n\n`TryFrom\u003c\u0026[PartitionedFile]\u003e for protobuf::FileGroup` needed one extra\nstep. `datafusion-datasource` cannot host it — `\u0026T` is `#[fundamental]`\nbut `[T]` is not, so `\u0026[PartitionedFile]` counts as foreign there\n(`error[E0117]: slices are always foreign`). But in\n`datafusion-proto-models` the *self* type is local, which is all the\norphan rule needs, and staying generic over the element avoids naming\n`PartitionedFile`, which sits above that crate in the graph:\n\n```rust\nimpl\u003cT\u003e TryFrom\u003c\u0026[T]\u003e for protobuf::FileGroup\nwhere\n    for\u003c\u0027a\u003e \u0026\u0027a T: TryInto\u003cprotobuf::PartitionedFile, Error \u003d DataFusionError\u003e,\n{ ... }\n```\n\nThe bound is satisfied by `TryFrom\u003c\u0026PartitionedFile\u003e for\nprotobuf::PartitionedFile` in `datafusion-datasource`, so\n`protobuf::FileGroup::try_from(\u0026files[..])` resolves for callers exactly\nas it did in 54.1.0.\n\nTwo items beyond the issue\u0027s checklist, both needed to reach zero\nimplementors:\n\n- the parquet options conversions (`ParquetOptions`,\n`TableParquetOptions`, `ParquetColumnOptions`, `ParquetCdcOptions`) —\nthe issue\u0027s table undercounts `file_formats.rs` because they live in a\nprivate module, but trait impls are global, so they were public API too.\nThey return as `TryFrom`; `main` had already made them fallible, so an\nexact restore of 54.1.0\u0027s infallible `From` isn\u0027t available.\n- `From\u003c\u0026protobuf::PhysicalColumn\u003e for Column`, which the issue\u0027s\nevidence table counts but no work item names.\n\nNot restored, and worth calling out: `From\u003cprotobuf::dml_node::Type\u003e for\nWriteOp` and its reverse. `main` replaced them with `parse_write_op` /\n`serialize_write_op` because `MergeInto` carries a payload a `From` impl\ncannot express. That is a separate, deliberate change.\n\nFinally, `convert.rs` and `convert_required_proto!` are deleted. #21929\nintroduced `FromProto` / `TryFromProto` so the `datafusion-proto-models`\nextraction could land without relocating ~39 conversions at the same\ntime, and flagged them there as \"a known workaround, not the end state\",\nwith dropping them listed under Future work. With every conversion moved\nthey have no implementors and no callers. Neither trait has ever shipped\nin a release, so they are removed outright rather than deprecated —\nthere is nothing for downstream users to migrate off, and doing it now\nkeeps the workaround out of the released API entirely.\n\n## Are these changes tested?\n\nYes.\n\n- New `datafusion/proto/tests/cases/public_conversions.rs` coerces all\n45 proto conversions in the touched crates to `fn` pointers (the 39 from\n54.1.0 plus the ones added on `main`). This is the regression guard the\nissue asks for: it fails to compile when an impl is removed, and stays\nquiet when one merely moves between crates, which is exactly the case\n`cargo-semver-checks` cannot see.\n- New round-trip tests next to the moved impls in `datafusion-expr` and\n`datafusion-proto-models` (window frames, table references, join enums,\nunnest options, stringified plans).\n- The `PartitionedFile` tests move from `datafusion-proto` to\n`datafusion-datasource`, alongside the logic they cover; two that\nduplicated existing coverage there are dropped.\n- Existing round-trip suites (`roundtrip_logical_plan`,\n`roundtrip_physical_plan`) pass unchanged, which is the real wire-format\ncheck.\n- Every moved impl body was diffed against `main`: 22 are byte-identical\nmodulo the trait rename, and the other 9 differ only by `Self::`\nshorthand, error-type aliasing, and rustfmt reflow. No serialization\nlogic changed.\n- `./dev/rust_lint.sh`, `cargo machete`, and the extended test suite all\npass at HEAD. Also checked: `datafusion-proto` without `parquet`,\n`datafusion-expr` with `proto` off and `--no-default-features`, the\nformat crates without `proto`, and `json` on both proto crates.\n\n## Are there any user-facing changes?\n\nYes, and they restore rather than break the released API.\n\n- The 39 conversions removed since 54.1.0 compile again. Trait impls are\nglobal, so `X::try_from(\u0026proto)` / `proto.try_into()` resolve regardless\nof which crate now hosts the impl — no import changes needed, and no\nupgrade-guide entry for the moves.\n- One genuine delta remains: the parquet options conversions are\n`TryFrom` rather than 54.1.0\u0027s infallible `From`. That predates this PR\n— `main` had already made them fallible — but it is a real 54.1.0 -\u003e\n55.0.0 break and was undocumented, so it is now in the 55.0.0 upgrade\nguide with a migration snippet.\n- `FromProto` / `TryFromProto` and `convert_required_proto!` are gone.\nNot a breaking change: they exist only on `main` and appear nowhere in\n54.0.0 or 54.1.0.\n- `datafusion-expr` gains an off-by-default `proto` feature. Additive.\n- `datafusion-proto-models` gains a direct `datafusion-common`\ndependency (already present transitively) and two new public modules.\n\nKeeping the `api change` label for the parquet options fallibility.\n\n---------\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "7544051f2fb6db9bf0c9e00a963f147495760a2f",
      "tree": "478c8be0edffa5cfb50b5591e1cf7a6d58dca35d",
      "parents": [
        "9ecb75fb72c4b12c15e9c159cc61b3017357728d"
      ],
      "author": {
        "name": "Adrian Garcia Badaracco",
        "email": "1755071+adriangb@users.noreply.github.com",
        "time": "Tue Aug 11 15:04:32 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 19:04:32 2026 +0000"
      },
      "message": "chore(proto): remove never-released deprecated PhysicalPlanNodeExt scaffolding (#24269)\n\n## Which issue does this PR close?\n\n- Part of #23494. This closes out that EPIC\u0027s \"Remove the\n`#[deprecated(since \u003d \"55.0.0\")]` `PhysicalPlanNodeExt` scaffolding\"\ncleanup item.\n\n## Rationale for this change\n\n`PhysicalPlanNodeExt` currently carries 59 `#[deprecated(since \u003d\n\"55.0.0\")]` methods — per-operator `try_into_*_physical_plan` /\n`try_from_*_exec` shims left behind by the `ExecutionPlan::try_to_proto`\n/ `try_from_proto` migration. Each is a thin forwarder to the operator\u0027s\nown hook; none is called by DataFusion.\n\n**These methods have never shipped in any DataFusion release**, so no\ndeprecation window is owed:\n\n- At the `54.1.0` tag they were **private inherent** methods on `impl\nprotobuf::PhysicalPlanNode` — not `pub`, not on a public trait:\n\n  ```console\n$ git show 54.1.0:datafusion/proto/src/physical_plan/mod.rs | sed -n\n\u0027700,701p\u0027\n  impl protobuf::PhysicalPlanNode {\n      fn try_into_explain_physical_plan(\n  ```\n\n- #21929 (merge commit `077f08a9a6632324c95275dd15b5dd5b1f14006f`,\nmerged 2026-05-22) is what promoted them into the public\n`PhysicalPlanNodeExt` trait, and it is **not** an ancestor of `54.1.0`\n(54.1.0 was cut off the 54.0.x line):\n\n  ```console\n$ git merge-base --is-ancestor 077f08a9a6632324c95275dd15b5dd5b1f14006f\n54.1.0; echo $?\n  1\n  ```\n\n- Every one of them is marked `#[deprecated(since \u003d \"55.0.0\")]`, so\n55.0.0 would be the very first release to expose them — already\ndeprecated.\n\nThe [API health\npolicy](https://github.com/apache/datafusion/blob/main/docs/source/contributor-guide/api-health.md)\nexists to protect API that users could have depended on *from a\nrelease*. Nothing released ever exposed these. Deleting them before the\n55.0.0 branch is cut avoids shipping 59 dead-on-arrival public methods\nthat we would then be obliged to carry for a full deprecation cycle.\n\nRemoving them also deletes ~1350 lines from\n`datafusion/proto/src/physical_plan/mod.rs`, which makes the remaining,\nload-bearing surface of the trait much easier to read.\n\n## What changes are included in this PR?\n\n- Delete the 59 `#[deprecated(since \u003d \"55.0.0\")]` methods from\n`PhysicalPlanNodeExt` (29 `try_from_*_exec` encoders, 30 `try_into_*`\ndecoders).\n- Drop three `use` statements that became unused as a result:\n`DataSinkExec`, `BoundedWindowAggExec`, `SortMergeJoinExecNode`.\n- Delete `deprecated_projection_shim_decodes_argument_not_self`, the one\ntest that existed solely to pin the behaviour of the\n`try_into_projection_physical_plan` shim.\n\nDeliberately **not** changed:\n\n- The trait itself and its 16 non-deprecated methods stay: `node()`,\n`try_into_physical_plan_with_converter`,\n`try_into_physical_plan_with_context`,\n`try_from_physical_plan_with_converter`, the\nscan/extension/generate-series decoders and `try_from_data_source_exec`\n/ `try_from_lazy_memory_exec` that the central dispatch still calls.\n- `AsExecutionPlan`, `PhysicalExtensionCodec`,\n`PhysicalProtoConverterExtension` are untouched.\n- **No `.proto` files and no encode/decode dispatch behaviour are\ntouched — the wire format is unchanged.**\n- The `TryFromProto\u003c\u0026protobuf::{Json,Csv,Parquet}Sink\u003e` impls in\n`from_proto.rs` mentioned in #23494 are **not** removed here: they are\nnot marked `#[deprecated]` (there are no `deprecated` attributes\nanywhere in `from_proto.rs` / `to_proto.rs`), so they don\u0027t fall under\nthe \"never-released deprecated scaffolding\" argument above and deserve\ntheir own decision.\n\n## Are these changes tested?\n\nCovered by the existing test suite; the change is a pure deletion of\nunreferenced code.\n\nThe one deleted test only exercised the deprecated shim. The underlying\n`ProjectionExec::try_to_proto` / `ProjectionExec::try_from_proto` hook\nkeeps full roundtrip coverage through the existing `roundtrip_test`\ncases in `datafusion/proto/tests/cases/roundtrip_physical_plan.rs` (e.g.\n`roundtrip_like`, `roundtrip_projection_source`,\n`roundtrip_empty_projection`).\n\nVerified locally:\n\n- `cargo fmt --all`\n- `./ci/scripts/rust_clippy.sh` (CI\u0027s exact workspace + `--all-targets`\nclippy, clean)\n- `RUST_BACKTRACE\u003d1 cargo test --profile ci -p datafusion-proto\n--features avro,json` — 238 tests pass, 0 failures\n- `cargo check -p datafusion-examples --examples` (two examples import\n`PhysicalPlanNodeExt`; both only use methods that stay)\n- `cargo doc -p datafusion-proto --no-deps` (no dangling intra-doc\nlinks)\n\n## Are there any user-facing changes?\n\nRemoval of 59 public trait methods, all of which were already\n`#[deprecated]` and none of which ever appeared in a published release.\nNo Upgrade Guide entry is needed, because there is no released version\nanyone could be upgrading *from* that had this API.\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "9ecb75fb72c4b12c15e9c159cc61b3017357728d",
      "tree": "fd85eba465b9bb02963addb8ae25fb138721cca8",
      "parents": [
        "618aaff8215849a2e29524ebc74ef29a9428f958"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Tue Aug 11 14:49:55 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 18:49:55 2026 +0000"
      },
      "message": "Docs: Add PR review guide (#24051)\n\n## Which issue does this PR close?\n\n- https://github.com/apache/datafusion/issues/23839\n- related to the disucssions tarted by @jayzhan211 in\nhttps://github.com/apache/datafusion/issues/21038\n\n## Rationale for this change\n\nAs our project grows both in terms of number of users as well as the\nnumber of PRs submitted (due to agents and increasing usage) I would\nlike to trying to document / automate as much as possible\n\nAs one of the largest bottlenecks at the moment is PR review, so making\nthat more efficient I think will help us improve the flow of code in the\nproject and make best use of our committers\u0027 time. My rationale is that\nby documenting this process more clearly\n1. PR submitters (and/or their agents) can pre-review their own PRs to\nreduce back and forth with committers\n2. Committers (and/or their agents) have a checklist they can apply when\nreviewing\n\nI also strongly believe effective documentation should be written for\n**both** humans and agents so I purposely didn\u0027t make a specific skill\nfor this (instead I made a skill that points at the relevant parts of\nthe docs)\n\n## What changes are included in this PR?\n\n1. Add a new PR review page to the contributor guide\n4. Try and distill project best practice\n5. Leave links to help people/agents find it\n\n## Are these changes tested?\n\nBy CI\n\n## Are there any user-facing changes?\n\nNew doc page\n\n---------\n\nCo-authored-by: Yongting You \u003c2010youy01@gmail.com\u003e"
    },
    {
      "commit": "618aaff8215849a2e29524ebc74ef29a9428f958",
      "tree": "0023af0d6739d6f0359dc3a611d13b9748e763a7",
      "parents": [
        "4e6acfe8ee7e5da38f1f1d55427989b86f70a775"
      ],
      "author": {
        "name": "Peter Lee",
        "email": "peterxcli@gmail.com",
        "time": "Wed Aug 12 02:46:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 18:46:00 2026 +0000"
      },
      "message": "Enable dynamic filters for range-partitioned joins (#23854)\n\n## Which issue does this PR close?\n\n- Closes https://github.com/apache/datafusion/issues/23376.\n\n## Rationale for this change\n\nPartitioned hash joins build one dynamic filter per build partition.\nExisting routing uses `hash(key) % N`, which cannot reproduce a Range\npartitioning layout.\nCompatible Range co-partitioned joins instead need to route probe rows\nusing their existing ordering and split points.\n\n## What changes are included in this PR?\n\n- Enable dynamic filter pushdown for hash joins with compatible\nRange-partitioned inputs.\n- Build a searched `CASE` expression that routes probe rows to the\ncorresponding partition filter using the Range ordering and split\npoints.\n- Move the TopK lexicographic filter builder into the shared ordering\nmodule for reuse.\n\n## Are these changes tested?\n\nunit test.\n\n## Are there any user-facing changes?\n\nYes. This PR adds `RangeExpr` to the physical-expression protobuf model,\nwhich adds the public `ExprType::RangeExpr` enum variant. Downstream\nRust consumers that exhaustively match `ExprType` must handle the new\nvariant.\n\nIt also enables dynamic-filter pushdown for compatible Range-partitioned\njoins."
    },
    {
      "commit": "4e6acfe8ee7e5da38f1f1d55427989b86f70a775",
      "tree": "6309cb6fc195ad2040ac8c5fb7851c81b02f3428",
      "parents": [
        "e6be9cd9764be14ee73399174bdfcf8e53259de6"
      ],
      "author": {
        "name": "Lía Adriana",
        "email": "lia.castaneda@datadoghq.com",
        "time": "Tue Aug 11 20:23:55 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 18:23:55 2026 +0000"
      },
      "message": "fix(lambda): only push referenced params into the merged batch (#24162)\n\n## Which issue does this PR close?\n\nbasically this PR https://github.com/apache/datafusion/pull/22853 + a\nfew more tests\n\n## Rationale for this change\n\nThe current lambdas in DF only take a single parameter `(v -\u003e ...)`, so\nnobody had noticed that `LambdaExpr` mishandles lambdas with more than\none parameter. The bug surfaced while working on `transform_values`\n(#22689), which needs `(k, v) -\u003e expr ` two parameters, one of which is\nvery often unused (e.g. `(k, v) -\u003e v * 2`, k never referenced).\n\nThe bug is that when a higher order function with more than 1 param\nevaluates a lambda, it fills each parameter into a slot based on its\ndeclared position — for example for `(k, v) -\u003e v` `k` always goes into\nslot 0, `v` always into slot 1. `LambdaExpr` separately scans the body\nand renumbers whatever it finds referenced into a dense `0..n` range, to\navoid carrying around columns nothing uses (like `v` in this case). That\nrenumbering is fine for outer captures, but applying it to the lambda\u0027s\nown parameters is wrong, because it changes where the body looks for a\nvalue without changing where the evaluator put it.\n\n### Example:\n\nin `(k, v) -\u003e v` `v` is declared second (slot 1), but since it\u0027s the\nonly parameter the body references, the renumbering logic reassigns it\nto slot 0. The evaluator, unaware of this, writes `k`\u0027s values into slot\n0 and `v`\u0027s into slot 1. So the body ends up reading slot 0 expecting\n`v` — and gets `k` instead. So the results end up being incorrect.\n\n## What changes are included in this PR?\n\n- `LambdaExpr` now computes `used_params`: which is the subset of its\nown declared parameters that are actually referenced in the body.\n- `LambdaArgument::new` takes `used_params` and only pushes the\nreferenced parameters in the body into the merged batch, in original\ndeclaration order — so the body\u0027s indices always line up with what\u0027s\nactually built.\n- `HigherOrderFunctionExpr::evaluate` forwards `lambda.used_params()` to\n`LambdaArgument::new`\n\n## Are these changes tested?\n\nyes, added two new tests one for the unused-parameter case and\nnested-lambda for the shadowing case.\n\n## Are there any user-facing changes?\n\nThe only public api change is on `LambdaArgument::new ` which now\nrequires a new argument: `used_params: \u0026HashSet\u003cString\u003e`, however\nLambdaArgument::new is very unlikely to be called outside datafusion,\nsee\n[this](https://github.com/apache/datafusion/pull/22853#discussion_r3527236493)\ncomment"
    },
    {
      "commit": "e6be9cd9764be14ee73399174bdfcf8e53259de6",
      "tree": "f946f40c3ac31b0be8902a93d73a20116de97dd7",
      "parents": [
        "a253a6a426a65018bfb6461aae079af738e54f43"
      ],
      "author": {
        "name": "Neil Conway",
        "email": "neil.conway@gmail.com",
        "time": "Tue Aug 11 12:40:44 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 16:40:44 2026 +0000"
      },
      "message": "perf: skip evaluating fully calculated window partitions (#24127)\n\n## Which issue does this PR close?\n\n- Related to #23982 \n\n## Rationale for this change\n\nIn Linear mode, BoundedWindowAggStream\u0027s evaluation sweep visits every\nlive partition for every window expression on every input batch. A\npartition can be safely skipped if it received no new rows and already\nrow currently in the partition has its output fully computed. This\navoids a bunch of redundant work: re-evaluating the window function\narguments and ORDER BY columns against the retained batch, building an\nempty result array, and other bookkeeping. This is particularly\nexpensive for workloads with many partitions where only a few of those\npartitions receive rows in a given batch, as in the \"32k sparse\"\nbenchmark below.\n\nBenchmarks:\n\n- linear / range / single / 100 dense:      42.3 ms -\u003e  42.0 ms (~noise)\n- linear / range / single / 10000 dense:   158.7 ms -\u003e 152.5 ms (-3.9%)\n- linear / range / single / 32768 sparse:  161.1 ms -\u003e 108.0 ms (-33.0%)\n- linear / rows  / single / 10000 dense:   132.0 ms -\u003e 127.5 ms (-3.4%)\n- linear / range / multi  / 10000 dense:   255.9 ms -\u003e 236.4 ms (-7.6%)\n- sorted / range / single / 10000:          33.1 ms -\u003e  33.7 ms (~noise)\n\n## What changes are included in this PR?\n\n* Skip evaluating window expressions for fully calculated partitions\n* Add test case\n* Add assert checking that per-window-agg and per-partition state is\nconsistent\n\n## Are these changes tested?\n\nYes. Existing tests pass. Added a new test to verify that \"evaluate\npartition -\u003e skip partition -\u003e evaluate partition\" sequence results in\nresuming accumulator states appropriately. I also checked that if the\n`is_end` conjunct is removed from the skip condition, the new assert\nadded above fires and catches the bug.\n\n## Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "a253a6a426a65018bfb6461aae079af738e54f43",
      "tree": "f88709796761ac0d8ef24e2c482c7d5a1420f47a",
      "parents": [
        "66677feeab86fd9f3f2322c39e5364646ce94e51"
      ],
      "author": {
        "name": "Brent Gardner",
        "email": "bgardner@squarelabs.net",
        "time": "Tue Aug 11 09:10:44 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 15:10:44 2026 +0000"
      },
      "message": "Expose accumulator state to allow prefix scanning (#24035)\n\n## Summary\n\nExpose state of aggregate streams within BWAG so downstream prefix\nscanning can take place.\n\n## API\n\n```rust\n// physical-plan/src/windows/bounded_window_agg_exec.rs\npub type FinalizedWindowStateObserver \u003d Arc\u003c\n    dyn Fn(usize, \u0026PartitionKey, \u0026[Option\u003cVec\u003cScalarValue\u003e\u003e]) -\u003e Result\u003c()\u003e\n        + Send + Sync,\n\u003e;\n\nimpl BoundedWindowAggExec {\n    pub fn with_finalized_state_observer(mut self, obs: FinalizedWindowStateObserver) -\u003e Self { … }\n}\n\n// physical-expr/src/window/window_expr.rs\nimpl WindowState {\n    /// `Accumulator::state()` if this is an aggregate window function, `None` otherwise.\n    pub fn aggregate_state(\u0026mut self) -\u003e Result\u003cOption\u003cVec\u003cScalarValue\u003e\u003e\u003e { … }\n}\n```"
    },
    {
      "commit": "66677feeab86fd9f3f2322c39e5364646ce94e51",
      "tree": "b231ded26fa2f210809267db52d571202113b3af",
      "parents": [
        "66ef2764481e17115da2f5e3ed29125380efac91"
      ],
      "author": {
        "name": "Evgeniy Mineev",
        "email": "e.v.mineev@gmail.com",
        "time": "Tue Aug 11 17:34:06 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 13:34:06 2026 +0000"
      },
      "message": "docs: add IceGate to the list of featured data platforms (#24240)\n\n## Which issue does this PR close?\n\nN/A.\n\n## Rationale for this change\n\nAdds [IceGate](https://icegate.tech/) to the list of known users in the\ndocumentation.\n\n## What changes are included in this PR?\n\nN/A\n\n## Are these changes tested?\n\nN/A\n\n## Are there any user-facing changes?\n\nN/A"
    },
    {
      "commit": "66ef2764481e17115da2f5e3ed29125380efac91",
      "tree": "45099c87dcdc748c29dc2889a5a9570f0d960081",
      "parents": [
        "3f0a95336a3f005a182971aff887ce8a7a6661fa"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue Aug 11 06:26:34 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 13:26:34 2026 +0000"
      },
      "message": "perf: remove per-row String allocations from the Spark url functions (#23884)\n\n## Which issue does this PR close?\n\nN/A\n\n## Rationale for this change\n\nThree allocation problems in the `url` module, all on the per-row path.\n\n**`url_encode`** built a `String` for every row:\n\n```rust\nfn encode(value: \u0026str) -\u003e Result\u003cString\u003e {\n    Ok(byte_serialize(value.as_bytes()).collect::\u003cString\u003e())\n}\n```\n\n**`url_decode`** ended with `.map(|parsed| parsed.into_owned())`. Both\n`replace_plus` and `decode_utf8` return a `Cow` that *borrows* when\nthere is\nnothing to rewrite, so `into_owned` allocated a `String` for every row\neven when\nthe value contained no percent-escapes and no `+` at all.\n\n**`parse_url`** built the all-null `key` array for the two-argument form\nby\ncalling `append_null()` once per row against a builder with no capacity.\n\n## What changes are included in this PR?\n\n`url_encode.rs`:\n\n- The three type branches build a pre-sized builder and share an\n`encode_all!`\n  loop that clears and refills one scratch `String` per batch.\n- `UrlEncode::encode` is removed; it returned a `Result` whose error arm\nwas\n  never constructed and now has no callers.\n\n`url_decode.rs`:\n\n- `decode` returns `Cow\u003c\u0027_, str\u003e` instead of `String`. When\n`replace_plus`\nborrows, the decode borrows straight from the input; when it has already\nallocated (the input contained `+`), owning the decoded form costs\nnothing\n  beyond what was already spent.\n- The array paths append the `Cow` to a pre-sized builder rather than\n  collecting `Result\u003cStringArray\u003e` from a per-row `String`.\n- **API change:** `spark_handled_url_decode`\u0027s second parameter changes\nfrom\n  `impl Fn(Result\u003cOption\u003cString\u003e\u003e) -\u003e Result\u003cOption\u003cString\u003e\u003e` to a new\n`OnDecodeError` enum. The `String` in that signature is what forced the\n  allocation. Its only caller is `try_url_decode`, whose closure was\n  `Err(_) \u003d\u003e Ok(None)` — exactly `OnDecodeError::Null`.\n\n`parse_url.rs`:\n\n- The `append_null()`-per-row loop becomes\n`new_null_array(\u0026DataType::Utf8, len)`.\n\nNo behaviour change in any of the three.\n\n## Are these changes tested?\n\nExisting coverage pins the behaviour: `spark/url/url_encode.slt`,\n`url_decode.slt`, `try_url_decode.slt`, and `parse_url.slt` assert\nconcrete\nresults including reserved characters, `+` handling, malformed\npercent-encoding\n(which must error for `url_decode` and yield NULL for `try_url_decode`),\nand the\ntwo- versus three-argument `parse_url` forms. All 5 `spark/url`\nsqllogictest\nfiles pass, along with the 258 `datafusion-spark` unit tests.\n\nThe `try_url_decode` unit test is what pins the `OnDecodeError::Null`\npath,\nsince it drives a malformed input through the refactored signature.\n\nBenchmarks are added separately in #23882 so the baselines can be\nmeasured on\n`main` before this lands.\n\n### Benchmarks\n\nCriterion, `apache/main` @ `f1ab86dad` as baseline. Median of the\nreported\nchange interval.\n\n`url_encode`:\n\n| Benchmark | 1024 | 8192 |\n| --- | --- | --- |\n| `url_encode/utf8` | −57.1% | −48.2% |\n| `url_encode/largeutf8` | −56.1% | −49.7% |\n| `url_encode/utf8view` | −56.0% | −46.5% |\n\n`url_decode`, split by whether the input actually needs unescaping:\n\n| Benchmark | 1024 | 8192 |\n| --- | --- | --- |\n| `url_decode/plain_utf8` | −26.4% | −28.8% |\n| `url_decode/plain_utf8view` | −29.0% | −27.2% |\n| `url_decode/escaped_utf8` | −5.4% | −3.6% |\n| `url_decode/escaped_largeutf8` | −4.7% | −3.2% |\n\nThe `plain` rows are the ones that benefit: with nothing to unescape the\ndecoded\nvalue borrows its input. The `escaped` rows still have to allocate, so\nthey gain\nonly the pre-sized builder and the removed intermediate — a few percent,\nas\nexpected.\n\n`parse_url` has no benchmark; its change removes an `append_null()` loop\nthat\nruns once per batch rather than affecting a measured per-row path.\n\n## Are there any user-facing changes?\n\nNo change to SQL behaviour — all three functions return identical\nresults.\n\n`spark_handled_url_decode` is public Rust API and its signature changes\nas\ndescribed above; `OnDecodeError` is new public API on\n`datafusion-spark`.\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e\nCo-authored-by: Claude Fable 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "3f0a95336a3f005a182971aff887ce8a7a6661fa",
      "tree": "ffab00cfbdf086a0aa4aa30ef0b3d30f571b4c91",
      "parents": [
        "1d000c221b4585d13bc8345f7033288879369209"
      ],
      "author": {
        "name": "Max Burke",
        "email": "max@urbanlogiq.com",
        "time": "Tue Aug 11 06:07:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 13:07:56 2026 +0000"
      },
      "message": "Add FixedSizeBinary support for MultiGroupBy (#23646)\n\n- Closes #23645 \n- part of https://github.com/apache/datafusion/issues/22715\n\n## Rationale for this change\n\nMulti-Group-By has cases for regular Binary/LargeBinary types, but not\nFixedSizeBinary\n\n## Are these changes tested?\n\nYes.\n\n## Are there any user-facing changes?\n\nNo\n\nCo-authored-by: Claude Fable 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "1d000c221b4585d13bc8345f7033288879369209",
      "tree": "c082dba9185cee858953a0bba58462ea5a91d6a1",
      "parents": [
        "72fbbe7a1252bce0aa9f79d163eae00c591cfa77"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 11 12:32:04 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 12:32:04 2026 +0000"
      },
      "message": "chore(deps): bump Swatinem/rust-cache from 2.9.1 to 2.9.2 (#24251)\n\nBumps [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) from\n2.9.1 to 2.9.2.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/swatinem/rust-cache/releases\"\u003eSwatinem/rust-cache\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.9.2\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eTypofix by \u003ca\nhref\u003d\"https://github.com/23Skidoo\"\u003e\u003ccode\u003e@​23Skidoo\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/316\"\u003eSwatinem/rust-cache#316\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: include target names in build/ and .fingerprint/ cleanup by \u003ca\nhref\u003d\"https://github.com/eitsupi\"\u003e\u003ccode\u003e@​eitsupi\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/317\"\u003eSwatinem/rust-cache#317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: include cdylib/rlib/dylib/staticlib targets in build and\nfingerprint cleanup by \u003ca\nhref\u003d\"https://github.com/eitsupi\"\u003e\u003ccode\u003e@​eitsupi\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/320\"\u003eSwatinem/rust-cache#320\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eScan content of \u003ccode\u003e$CARGO_HOME/bin\u003c/code\u003e on restore instead of\nrelying on \u003ccode\u003ecargo install\u003c/code\u003e metadata by \u003ca\nhref\u003d\"https://github.com/clechasseur\"\u003e\u003ccode\u003e@​clechasseur\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/325\"\u003eSwatinem/rust-cache#325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Update checkout action version to latest by \u003ca\nhref\u003d\"https://github.com/sondrelg\"\u003e\u003ccode\u003e@​sondrelg\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/345\"\u003eSwatinem/rust-cache#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix Windows cache path validation after Rollup migration by \u003ca\nhref\u003d\"https://github.com/eitsupi\"\u003e\u003ccode\u003e@​eitsupi\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/355\"\u003eSwatinem/rust-cache#355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: support Cargo V2 build dir layout by \u003ca\nhref\u003d\"https://github.com/claytonwramsey\"\u003e\u003ccode\u003e@​claytonwramsey\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/371\"\u003eSwatinem/rust-cache#371\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/23Skidoo\"\u003e\u003ccode\u003e@​23Skidoo\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/316\"\u003eSwatinem/rust-cache#316\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/eitsupi\"\u003e\u003ccode\u003e@​eitsupi\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/317\"\u003eSwatinem/rust-cache#317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clechasseur\"\u003e\u003ccode\u003e@​clechasseur\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/325\"\u003eSwatinem/rust-cache#325\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/sondrelg\"\u003e\u003ccode\u003e@​sondrelg\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/345\"\u003eSwatinem/rust-cache#345\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/claytonwramsey\"\u003e\u003ccode\u003e@​claytonwramsey\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/Swatinem/rust-cache/pull/371\"\u003eSwatinem/rust-cache#371\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/Swatinem/rust-cache/compare/v2.9.1...v2.9.2\"\u003ehttps://github.com/Swatinem/rust-cache/compare/v2.9.1...v2.9.2\u003c/a\u003e\u003c/p\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/Swatinem/rust-cache/blob/master/CHANGELOG.md\"\u003eSwatinem/rust-cache\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003e2.9.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix \u003ccode\u003ecredentials.toml\u003c/code\u003e cleanup\u003c/li\u003e\n\u003cli\u003eImprovements to cleanup, preserving more valid targets\u003c/li\u003e\n\u003cli\u003eImprovements to \u003ccode\u003ecargo install\u003c/code\u003e handling\u003c/li\u003e\n\u003cli\u003eCorrectly sort/dedupe Rust versions\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.9.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix regression in hash calculation\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.9.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate to \u003ccode\u003enode24\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSupport running from within a \u003ccode\u003enix\u003c/code\u003e shell\u003c/li\u003e\n\u003cli\u003eConsider all installed toolchains for cache key\u003c/li\u003e\n\u003cli\u003eUse case-insensitive comparison to determine exact cache hit\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.8.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDon\u0027t overwrite env for cargo-metadata call\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.8.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSet empty \u003ccode\u003eCARGO_ENCODED_RUSTFLAGS\u003c/code\u003e when retrieving\nmetadata\u003c/li\u003e\n\u003cli\u003eVarious dependency updates\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.8.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd support for \u003ccode\u003ewarpbuild\u003c/code\u003e cache provider\u003c/li\u003e\n\u003cli\u003eAdd new \u003ccode\u003ecache-workspace-crates\u003c/code\u003e feature\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.7.8\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eInclude CPU arch in the cache key\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.7.7\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAlso cache \u003ccode\u003ecargo install\u003c/code\u003e metadata\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.7.6\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAllow opting out of caching $CARGO_HOME/bin\u003c/li\u003e\n\u003cli\u003eAdd runner OS in cache key\u003c/li\u003e\n\u003cli\u003eAdds an option to do lookup-only of the cache\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.7.5\u003c/h2\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/Swatinem/rust-cache/commit/6323deb102c322ba6fcbdcafc7e3dddab59af2b6\"\u003e\u003ccode\u003e6323deb\u003c/code\u003e\u003c/a\u003e\n2.9.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/b16e8d71b289c3b8fc03fc09764563df03712036\"\u003e\u003ccode\u003eb16e8d7\u003c/code\u003e\u003c/a\u003e\nbump rollup and rebuild\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/3bf42ac996de475743278f3187c4fd89f23b8630\"\u003e\u003ccode\u003e3bf42ac\u003c/code\u003e\u003c/a\u003e\ninvert target/profile check in cleanup\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/6e5b278ead409e28cd5a784014d7ce55007a81d2\"\u003e\u003ccode\u003e6e5b278\u003c/code\u003e\u003c/a\u003e\ncorrectly sort and dedupe Rust versions\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/5adc05f6aaa7c92756cb2e2c9b7b3c1d0df9312b\"\u003e\u003ccode\u003e5adc05f\u003c/code\u003e\u003c/a\u003e\nBump the actions group across 1 directory with 3 updates (\u003ca\nhref\u003d\"https://redirect.github.com/swatinem/rust-cache/issues/368\"\u003e#368\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/66b1e9526150e74ddd7e4190356facd783fb3b44\"\u003e\u003ccode\u003e66b1e95\u003c/code\u003e\u003c/a\u003e\nfix: support Cargo V2 build dir layout (\u003ca\nhref\u003d\"https://redirect.github.com/swatinem/rust-cache/issues/371\"\u003e#371\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/72d126e709cad40056a62344eee609d696d62d33\"\u003e\u003ccode\u003e72d126e\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/swatinem/rust-cache/issues/367\"\u003e#367\u003c/a\u003e\nfrom Swatinem/dependabot/npm_and_yarn/dev-patch-2b495...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/48968d2131215f1c516b89399d23900d554f71fa\"\u003e\u003ccode\u003e48968d2\u003c/code\u003e\u003c/a\u003e\nBump the dev-patch group with 2 updates\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/9f151aca7c3990bab7afe2d82ac58088d3b01074\"\u003e\u003ccode\u003e9f151ac\u003c/code\u003e\u003c/a\u003e\nupdate dependencies, rebuild\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/Swatinem/rust-cache/commit/0e24e5dcecfbbdcea69e0f528cab00df34fbd231\"\u003e\u003ccode\u003e0e24e5d\u003c/code\u003e\u003c/a\u003e\nBump the actions group across 1 directory with 6 updates (\u003ca\nhref\u003d\"https://redirect.github.com/swatinem/rust-cache/issues/364\"\u003e#364\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/swatinem/rust-cache/compare/c19371144df3bb44fab255c43d04cbc2ab54d1c4...6323deb102c322ba6fcbdcafc7e3dddab59af2b6\"\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\u003dSwatinem/rust-cache\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d2.9.1\u0026new-version\u003d2.9.2)](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": "72fbbe7a1252bce0aa9f79d163eae00c591cfa77",
      "tree": "565e5566929d0610ed2862d2b26a3ad8a8457688",
      "parents": [
        "264a9172c3e576d0b257c39e41ceabffcd692609"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 11 12:31:33 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 12:31:33 2026 +0000"
      },
      "message": "chore(deps): bump runs-on/action from 2.2.0 to 2.3.0 (#24252)\n\nBumps [runs-on/action](https://github.com/runs-on/action) from 2.2.0 to\n2.3.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/runs-on/action/releases\"\u003eruns-on/action\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev2.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eRemove global sudo from action wrapper by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/42\"\u003eruns-on/action#42\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd sticky disk cache modes by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/43\"\u003eruns-on/action#43\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClean interrupted Git repacks before sticky snapshots by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/48\"\u003eruns-on/action#48\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eScope cold Git mirrors to workflow history by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/50\"\u003eruns-on/action#50\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix warm cache symlink merges by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/52\"\u003eruns-on/action#52\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAuthenticate read-only Git LFS lock requests by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/51\"\u003eruns-on/action#51\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRefactor sticky cache runtime state by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/46\"\u003eruns-on/action#46\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAllow verified Windows sticky mount roots by \u003ca\nhref\u003d\"https://github.com/crohr\"\u003e\u003ccode\u003e@​crohr\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/pull/53\"\u003eruns-on/action#53\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/runs-on/action/compare/v2.2.0...v2.3.0\"\u003ehttps://github.com/runs-on/action/compare/v2.2.0...v2.3.0\u003c/a\u003e\u003c/p\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/runs-on/action/commit/46910bf61b41721b0579f237e186afb35477007a\"\u003e\u003ccode\u003e46910bf\u003c/code\u003e\u003c/a\u003e\ndist: rebuild binaries for v2.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/f729357150bd875bad09c9c2f2c27f892de8f130\"\u003e\u003ccode\u003ef729357\u003c/code\u003e\u003c/a\u003e\nMerge branch \u0027main\u0027 into v2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/02347f176ca5fbec131f56ef19be599486f35358\"\u003e\u003ccode\u003e02347f1\u003c/code\u003e\u003c/a\u003e\nBump README to v2.3.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/3321413f266ee2cf8dfd529a39ac1071d4c0d9bf\"\u003e\u003ccode\u003e3321413\u003c/code\u003e\u003c/a\u003e\nRebuild action binaries\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/10fb12ce4c4e4e209c71a37325575f648c7482c5\"\u003e\u003ccode\u003e10fb12c\u003c/code\u003e\u003c/a\u003e\nAllow verified Windows sticky mount roots\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/6377b283ae61d5fe71e7f337f8711ec19316f6a3\"\u003e\u003ccode\u003e6377b28\u003c/code\u003e\u003c/a\u003e\nRefactor sticky cache runtime state (\u003ca\nhref\u003d\"https://redirect.github.com/runs-on/action/issues/46\"\u003e#46\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/76f7eaf869ae583f4ca3c9547c81eddd54c9c431\"\u003e\u003ccode\u003e76f7eaf\u003c/code\u003e\u003c/a\u003e\ndist: rebuild binaries\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/baa006cd191d30ceca23b1a1c8b582fdafc00a0c\"\u003e\u003ccode\u003ebaa006c\u003c/code\u003e\u003c/a\u003e\nAuthenticate read-only Git LFS lock requests\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/d5c5d9f6984dbf3f10a8a5f5d619100ec492f2a0\"\u003e\u003ccode\u003ed5c5d9f\u003c/code\u003e\u003c/a\u003e\nRebuild action binaries\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/runs-on/action/commit/fd25aafbf0867b23ab6eacb601f34258a3f90fa6\"\u003e\u003ccode\u003efd25aaf\u003c/code\u003e\u003c/a\u003e\nFix warm cache symlink merges\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/runs-on/action/compare/4e5f72399b6b17f2e79c511c1b38a315a64d22dc...46910bf61b41721b0579f237e186afb35477007a\"\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\u003druns-on/action\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d2.2.0\u0026new-version\u003d2.3.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": "264a9172c3e576d0b257c39e41ceabffcd692609",
      "tree": "164d226e0a99717ab91cbf08df0a3e9dae0c210d",
      "parents": [
        "87f94435fc0bcd426beb77a0df50587b056e48ca"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 11 12:30:42 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 12:30:42 2026 +0000"
      },
      "message": "chore(deps): bump taiki-e/install-action from 2.85.6 to 2.85.10 (#24253)\n\nBumps\n[taiki-e/install-action](https://github.com/taiki-e/install-action) from\n2.85.6 to 2.85.10.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/releases\"\u003etaiki-e/install-action\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.85.10\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.12.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 1.2.7.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecosign@latest\u003c/code\u003e to 3.1.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecoreutils@latest\u003c/code\u003e to 0.10.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-rdme@latest\u003c/code\u003e to 2.2.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-crap@latest\u003c/code\u003e to 0.4.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.85.9\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ezola@latest\u003c/code\u003e to 0.23.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewild@latest\u003c/code\u003e to 0.10.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.8.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ejust@latest\u003c/code\u003e to 1.58.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ejaq@latest\u003c/code\u003e to 3.1.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-nextest@latest\u003c/code\u003e to 0.9.143.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-crap@latest\u003c/code\u003e to 0.4.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ebiome@latest\u003c/code\u003e to 2.5.7.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.85.8\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ezizmor@latest\u003c/code\u003e to 1.29.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etypos@latest\u003c/code\u003e to 1.49.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etrivy@latest\u003c/code\u003e to 0.73.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 1.2.6.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eprek@latest\u003c/code\u003e to 0.4.12.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.8.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003econvco@latest\u003c/code\u003e to 0.7.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-semver-checks@latest\u003c/code\u003e to 0.50.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-crap@latest\u003c/code\u003e to 0.4.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e2.85.7\u003c/h2\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/taiki-e/install-action/blob/main/CHANGELOG.md\"\u003etaiki-e/install-action\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003cp\u003eAll notable changes to this project will be documented in this\nfile.\u003c/p\u003e\n\u003cp\u003eThis project adheres to \u003ca href\u003d\"https://semver.org\"\u003eSemantic\nVersioning\u003c/a\u003e.\u003c/p\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003ch2\u003e[Unreleased]\u003c/h2\u003e\n\u003ch2\u003e[2.85.11] - 2026-08-09\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ezola@latest\u003c/code\u003e to 0.23.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewasm-bindgen@latest\u003c/code\u003e to 0.2.127.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.12.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eosv-scanner@latest\u003c/code\u003e to 2.5.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.8.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ekingfisher@latest\u003c/code\u003e to 1.112.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003eeditorconfig-checker@latest\u003c/code\u003e to 3.10.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.85.10] - 2026-08-07\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.12.2.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 1.2.7.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecosign@latest\u003c/code\u003e to 3.1.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecoreutils@latest\u003c/code\u003e to 0.10.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-rdme@latest\u003c/code\u003e to 2.2.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ecargo-crap@latest\u003c/code\u003e to 0.4.3.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[2.85.9] - 2026-08-06\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ezola@latest\u003c/code\u003e to 0.23.1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003ewild@latest\u003c/code\u003e to 0.10.0.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUpdate \u003ccode\u003emise@latest\u003c/code\u003e to 2026.8.2.\u003c/p\u003e\n\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/taiki-e/install-action/commit/6c6fd71fe4fb72c3697d269963d0e15df8adedad\"\u003e\u003ccode\u003e6c6fd71\u003c/code\u003e\u003c/a\u003e\nRelease 2.85.10\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/37cec23487191ef9aef8b1315865bd6dc584bef4\"\u003e\u003ccode\u003e37cec23\u003c/code\u003e\u003c/a\u003e\nUpdate zola manifest\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/4914ea4fea5759852f8cda51753420130b883d65\"\u003e\u003ccode\u003e4914ea4\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003euv@latest\u003c/code\u003e to 0.12.2\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/0ce64163d455e35fedc5f5925221d4a71f05c990\"\u003e\u003ccode\u003e0ce6416\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003etombi@latest\u003c/code\u003e to 1.2.7\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/1f89e2fb52c482b53fcf083bf64b5abd5d6563ab\"\u003e\u003ccode\u003e1f89e2f\u003c/code\u003e\u003c/a\u003e\nUpdate osv-scanner manifest\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/65ef13f21e6dd200e402682be3b1bc896f6aa862\"\u003e\u003ccode\u003e65ef13f\u003c/code\u003e\u003c/a\u003e\nUpdate kingfisher manifest\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/9f6a5a8ec701c59d62ac1013b92714e7410b2cae\"\u003e\u003ccode\u003e9f6a5a8\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ecosign@latest\u003c/code\u003e to 3.1.3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/df08c38f9c0580a749efefc712ba563ff2107db5\"\u003e\u003ccode\u003edf08c38\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ecoreutils@latest\u003c/code\u003e to 0.10.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/dc7bb1f807a876bf372de55372b320860efe4019\"\u003e\u003ccode\u003edc7bb1f\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ecargo-rdme@latest\u003c/code\u003e to 2.2.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/commit/9970698e35256036b84ecfb8a70b90fe068a934b\"\u003e\u003ccode\u003e9970698\u003c/code\u003e\u003c/a\u003e\nUpdate \u003ccode\u003ecargo-crap@latest\u003c/code\u003e to 0.4.3\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/taiki-e/install-action/compare/1beb33eee6d086258184383af9a538940be190ed...6c6fd71fe4fb72c3697d269963d0e15df8adedad\"\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\u003dtaiki-e/install-action\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d2.85.6\u0026new-version\u003d2.85.10)](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": "87f94435fc0bcd426beb77a0df50587b056e48ca",
      "tree": "07e89fbb6372f3ad836deb5bd92e6d127c1ee4fa",
      "parents": [
        "047f531488f6617e88c76769baf2e2d6ac8e1c0e"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 11 12:30:01 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 12:30:01 2026 +0000"
      },
      "message": "chore(deps): bump the all-other-cargo-deps group with 4 updates (#24254)\n\nBumps the all-other-cargo-deps group with 4 updates:\n[async-trait](https://github.com/dtolnay/async-trait),\n[blake3](https://github.com/BLAKE3-team/BLAKE3),\n[clap](https://github.com/clap-rs/clap) and\n[thiserror](https://github.com/dtolnay/thiserror).\n\nUpdates `async-trait` from 0.1.91 to 0.1.92\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.92\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eResolve double_must_use clippy lint in generated code (\u003ca\nhref\u003d\"https://redirect.github.com/dtolnay/async-trait/issues/303\"\u003e#303\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/dtolnay/async-trait/commit/82e7e9edd60f622294373a23c0ce9c0077ad0263\"\u003e\u003ccode\u003e82e7e9e\u003c/code\u003e\u003c/a\u003e\nRelease 0.1.92\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/9a35cb87f9366cd992bbc00d430e1b5fe1aa0cdd\"\u003e\u003ccode\u003e9a35cb8\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/dtolnay/async-trait/issues/303\"\u003e#303\u003c/a\u003e\nfrom dtolnay/mustuse\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/875ceecb100bab2cf369178633b4791336d92b75\"\u003e\u003ccode\u003e875ceec\u003c/code\u003e\u003c/a\u003e\nResolve double_must_use clippy lint\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/commit/62993a57bc6a8d5bd3de23fbae48cede333cb925\"\u003e\u003ccode\u003e62993a5\u003c/code\u003e\u003c/a\u003e\nRaise minimum tested compiler to rust 1.88\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/dtolnay/async-trait/compare/0.1.91...0.1.92\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `blake3` from 1.8.5 to 1.8.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/releases\"\u003eblake3\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e1.8.6\u003c/h2\u003e\n\u003cp\u003eversion 1.8.6\u003c/p\u003e\n\u003cp\u003eChanges since 1.8.5:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eupdate_mmap\u003c/code\u003e and \u003ccode\u003eupdate_mmap_rayon\u003c/code\u003e (and by\nextension \u003ccode\u003eb3sum\u003c/code\u003e) now\nuse \u003ccode\u003eseek\u003c/code\u003e rather than \u003ccode\u003emetadata\u003c/code\u003e to get the\nlength of a file/mapping,\nand they tolerate \u003ccode\u003emmap\u003c/code\u003e failures. That means\n\u003ccode\u003eb3sum\u003c/code\u003e will now memory\nmap e.g. Linux block devices, which support mapping despite reporting\nlength 0 in \u003ccode\u003emetadata\u003c/code\u003e. Hashing \u003ccode\u003eNUL\u003c/code\u003e files on\nWindows also works now,\nwhere previously it was an error unless you used \u003ccode\u003e--no-mmap\u003c/code\u003e\nor \u003ccode\u003e\u0026lt;\u003c/code\u003e.\nThis change was originally proposed by \u003ca\nhref\u003d\"https://github.com/nabijaczleweli\"\u003e\u003ccode\u003e@​nabijaczleweli\u003c/code\u003e\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/BLAKE3-team/BLAKE3/commit/77b257eee7da5cd608eaf6be8343d3a4c9776af2\"\u003e\u003ccode\u003e77b257e\u003c/code\u003e\u003c/a\u003e\nversion 1.8.6\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/83b1746e7c42e5b3d228c81ba1ccb9b767dc5e2c\"\u003e\u003ccode\u003e83b1746\u003c/code\u003e\u003c/a\u003e\nuse \u003ccode\u003eseek\u003c/code\u003e instead of \u003ccode\u003emetadata\u003c/code\u003e to establish mmap\nlength (\u003ca\nhref\u003d\"https://redirect.github.com/BLAKE3-team/BLAKE3/issues/570\"\u003e#570\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/9eac279fd71b79ad9e897a4cffb23ee64acfb6df\"\u003e\u003ccode\u003e9eac279\u003c/code\u003e\u003c/a\u003e\nuse vswhere to find Visual Studio in CI\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/fc3d0e98e840631c001837363bba77a4f64c48b9\"\u003e\u003ccode\u003efc3d0e9\u003c/code\u003e\u003c/a\u003e\nFix path to Visual Studio toolchain in CI\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/8aa5145039b972ba30e98e788752d37d14568824\"\u003e\u003ccode\u003e8aa5145\u003c/code\u003e\u003c/a\u003e\na few more colons\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/6bb977357b87755c14594ffce6f7133f9f6a8d78\"\u003e\u003ccode\u003e6bb9773\u003c/code\u003e\u003c/a\u003e\nuse cargo:: build script syntax\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/91f7308e12900d37aab7e9a03d7a2cf960609abf\"\u003e\u003ccode\u003e91f7308\u003c/code\u003e\u003c/a\u003e\nfix Mode docs\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/f3913d953128661319b6b57b1c001a3b9c2d526e\"\u003e\u003ccode\u003ef3913d9\u003c/code\u003e\u003c/a\u003e\ntypo fixes\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/commit/f51e8226a2ce4af1e8b40d13456e551901aa8b33\"\u003e\u003ccode\u003ef51e822\u003c/code\u003e\u003c/a\u003e\ntweak release instructions\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/BLAKE3-team/BLAKE3/compare/1.8.5...1.8.6\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `clap` from 4.6.5 to 4.6.6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/clap-rs/clap/releases\"\u003eclap\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.6.6\u003c/h2\u003e\n\u003ch2\u003e[4.6.6] - 2026-08-06\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eCommand::get_overridden_usage\u003c/code\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/clap-rs/clap/blob/master/CHANGELOG.md\"\u003eclap\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[4.6.6] - 2026-08-06\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd \u003ccode\u003eCommand::get_overridden_usage\u003c/code\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/clap-rs/clap/commit/348cff3fc4d42d09a2ed1ad07b9b2cb79efc233a\"\u003e\u003ccode\u003e348cff3\u003c/code\u003e\u003c/a\u003e\nchore: Release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clap-rs/clap/commit/d4783779f80f486310a642bfe1d24f24e512fae8\"\u003e\u003ccode\u003ed478377\u003c/code\u003e\u003c/a\u003e\ndocs: Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clap-rs/clap/commit/04b9fbb83a88a3dac4c33b5589c8aa79f7c965f7\"\u003e\u003ccode\u003e04b9fbb\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/clap-rs/clap/issues/6414\"\u003e#6414\u003c/a\u003e\nfrom koopatroopa787/fix-bash-completion-bracket-glob\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clap-rs/clap/commit/70752392a8ca7ea877c651622a2247b2ccc0fb5e\"\u003e\u003ccode\u003e7075239\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/clap-rs/clap/issues/6422\"\u003e#6422\u003c/a\u003e\nfrom BaumiCoder/fix-fish-indentations\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clap-rs/clap/commit/f90a96636ad3b62c17790a97c1192a525b7db286\"\u003e\u003ccode\u003ef90a966\u003c/code\u003e\u003c/a\u003e\nfix(complete): Use spaces for indentation in fish\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clap-rs/clap/commit/dd4997ba2d5eecf789936f46f2ccb52126e128bf\"\u003e\u003ccode\u003edd4997b\u003c/code\u003e\u003c/a\u003e\nfix(complete): Don\u0027t glob-expand bash positionals\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clap-rs/clap/commit/8387c812c4b9726474b8407f81ec97f0acf570ed\"\u003e\u003ccode\u003e8387c81\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/clap-rs/clap/issues/6399\"\u003e#6399\u003c/a\u003e\nfrom clap-rs/renovate/crate-ci-typos-1.x\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clap-rs/clap/commit/8141e110ecee321277e90b4baa22a5baa02813ea\"\u003e\u003ccode\u003e8141e11\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update compatible (dev) (\u003ca\nhref\u003d\"https://redirect.github.com/clap-rs/clap/issues/6398\"\u003e#6398\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clap-rs/clap/commit/8a6bd4e43e85da71accfc407641bfff9ff71ca8f\"\u003e\u003ccode\u003e8a6bd4e\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update pre-commit hook crate-ci/typos to v1.47.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/clap-rs/clap/commit/71a7213d6e45758bb8c9c5f7c36ed768edef872e\"\u003e\u003ccode\u003e71a7213\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update Rust Stable to v1.96 (\u003ca\nhref\u003d\"https://redirect.github.com/clap-rs/clap/issues/6396\"\u003e#6396\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/clap-rs/clap/compare/clap_complete-v4.6.5...clap_complete-v4.6.6\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `thiserror` from 2.0.19 to 2.0.20\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/dtolnay/thiserror/releases\"\u003ethiserror\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e2.0.20\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSuppress redundant_field_names clippy lint in generated code (\u003ca\nhref\u003d\"https://redirect.github.com/dtolnay/thiserror/issues/454\"\u003e#454\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/dtolnay/thiserror/commit/b1d5db5e039275d95bf7536a2b2192aeb4dc28bf\"\u003e\u003ccode\u003eb1d5db5\u003c/code\u003e\u003c/a\u003e\nRelease 2.0.20\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/thiserror/commit/c4c3ebd337911af7bad544a9bce03a04bf465384\"\u003e\u003ccode\u003ec4c3ebd\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/dtolnay/thiserror/issues/454\"\u003e#454\u003c/a\u003e\nfrom dtolnay/clippy\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/thiserror/commit/2266152b163168df75a3b091208b86dd05485e66\"\u003e\u003ccode\u003e2266152\u003c/code\u003e\u003c/a\u003e\nSuppress redundant_field_names clippy lint\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/thiserror/commit/2901cfdc9411e883c9709c5a3adcf1ab2e3651ff\"\u003e\u003ccode\u003e2901cfd\u003c/code\u003e\u003c/a\u003e\nRaise minimum tested compiler to rust 1.88\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dtolnay/thiserror/commit/aa9d91f75302025e0c1d4c535d84a5bfdad62508\"\u003e\u003ccode\u003eaa9d91f\u003c/code\u003e\u003c/a\u003e\nUpdate ui tests for version 2.0.19\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/dtolnay/thiserror/compare/2.0.19...2.0.20\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\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 \u003cdependency name\u003e major version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s major version (unless you unignore this specific\ndependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s minor version (unless you unignore this specific\ndependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR\nand stop Dependabot creating any more for the specific dependency\n(unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore\nconditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will\nremove the ignore condition of the specified dependency and ignore\nconditions\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": "047f531488f6617e88c76769baf2e2d6ac8e1c0e",
      "tree": "96398539203b77c55d777083f1f94ba3bbd6948c",
      "parents": [
        "d5868e683435042aa5fa72465a8a2d667d8cc468"
      ],
      "author": {
        "name": "Goutam Adwant",
        "email": "8672451+goutamadwant@users.noreply.github.com",
        "time": "Tue Aug 11 05:16:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 12:16:56 2026 +0000"
      },
      "message": "fix: avoid buffering unbounded repartition output indefinitely (#24193)\n\n## Which issue does this PR close?\n\n- Closes #24044.\n\n## Rationale for this change\n\n`RepartitionExec` coalesces small batches on the producer side until the\nconfigured batch size is reached or all input senders finish. An\nunbounded input may never finish, so an available partial batch can be\nwithheld indefinitely. This prevents an incremental query from emitting\nrows that are ready for downstream processing.\n\n## What changes are included in this PR?\n\n- Skip producer-side batch coalescing when the input is unbounded.\n- Preserve the existing coalescing behavior for bounded inputs and\npreserve-order execution.\n- Add a regression test with an unbounded source that emits one partial\nbatch and then remains open.\n\n## Are these changes tested?\n\nYes.\n\n- `cargo fmt --all -- --check`\n- `cargo test -p datafusion-physical-plan`\n- `cargo clippy --all-targets --all-features -- -D warnings`\n- The extended workspace test command required by `AGENTS.md`, including\nall 503 sqllogictest files\n\nThe regression test fails on the previous implementation because the\npartial batch is never emitted, and passes with this change. The\nexisting bounded-input coalescing test also continues to pass.\n\n## Are there any user-facing changes?\n\nYes. Repartitioning an unbounded input can now emit partial batches\npromptly instead of waiting indefinitely to fill the configured batch\nsize. This may expose smaller batches to downstream operators. There are\nno public API changes.\n\nSigned-off-by: goutamadwant \u003cworkwithgoutam@gmail.com\u003e"
    },
    {
      "commit": "d5868e683435042aa5fa72465a8a2d667d8cc468",
      "tree": "4073efde4da03a6db796ed4bbad6e01d5746cb06",
      "parents": [
        "4978706c64d9785ad9908dba26edff98d327bf14"
      ],
      "author": {
        "name": "Goutam Adwant",
        "email": "8672451+goutamadwant@users.noreply.github.com",
        "time": "Tue Aug 11 04:33:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 11:33:30 2026 +0000"
      },
      "message": "docs: explain Parquet content-defined chunking (#24155)\n\n## Which issue does this PR close?\n\n- Closes #21404.\n\n## Rationale for this change\n\nParquet content-defined chunking is available as an experimental writer\nfeature, but the user documentation does not explain when it is useful\nor how to configure it.\n\nUsers need to understand that CDC benefits storage or transfer systems\nthat reuse duplicate byte ranges, does not perform deduplication itself,\nand requires the sequential writer path for each output file.\n\n## What changes are included in this PR?\n\n- Add a user guide explaining Parquet content-defined chunking from a\nuser perspective.\n- Describe appropriate use cases, storage requirements, limitations, and\nthe sequential-writer tradeoff.\n- Explain how directory output distributes batches across files and why\nstable input ordering and file layout improve deduplication.\n- Provide single-file SQL and Rust examples, session-level\nconfiguration, defaults, and tuning guidance.\n- Add the CDC writer options to the Parquet format-options reference.\n- Add the guide to the documentation index near the advanced user\nguides.\n\n## Are these changes tested?\n\nNo test code is changed because this is a documentation-only update.\n\nThe documented behavior and examples were verified with:\n\n- `cargo test --profile\u003dci --test sqllogictests -- parquet_cdc.slt`\n- `cargo fmt --all -- --check`\n- `cargo clippy --all-targets --all-features -- -D warnings`\n- `./ci/scripts/doc_prettier_check.sh`\n- `git diff --check`\n\n## Are there any user-facing changes?\n\nYes. This adds user-facing documentation for the existing experimental\nParquet CDC feature. It does not change runtime behavior or public APIs."
    },
    {
      "commit": "4978706c64d9785ad9908dba26edff98d327bf14",
      "tree": "7bad8e50decc445497c159e3d8102bc1d17c38df",
      "parents": [
        "d3100e2028adfe8560024c40ec3719a2e0fca2ee"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Tue Aug 11 06:16:52 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 10:16:52 2026 +0000"
      },
      "message": "Docs: Add community showcase to the docs page (#24217)\n\n## Which issue does this PR close?\n\n- part of #7013 \n- related to #22963 \n\n## Rationale for this change\n\n@wyattwenzel is running a great set of community show cases about what\npeople are doing with DataFusion (see #22963). I think these talks are a\ngreat way for people to understand what can be done with DataFusion.\n\nAlso, in general the more we tell people about DataFusion the better.\nAlso, making it easier to find DataFusion related content makes it more\nlikely people (and maybe agents) will be able to find it when needed\n\n## What changes are included in this PR?\n\nAdd the first three events to the\nhttps://datafusion.apache.org/user-guide/concepts-readings-events.html\npage\n\n\u003cimg width\u003d\"838\" height\u003d\"315\" alt\u003d\"Screenshot 2026-08-10 at 7 21 21 AM\"\nsrc\u003d\"https://github.com/user-attachments/assets/86b8a480-2144-4db1-b759-5c0a37d247a3\"\n/\u003e\n\n## Are these changes tested?\nby CI\n\n## Are there any user-facing changes?\nDocs only"
    },
    {
      "commit": "d3100e2028adfe8560024c40ec3719a2e0fca2ee",
      "tree": "172ef2cbcb318deb0d1c6c86b7a0137ee2a6171e",
      "parents": [
        "8cb7c84d6c3e4b0157985ef8d0b076cde7bf7e59"
      ],
      "author": {
        "name": "Justin O\u0027Dwyer",
        "email": "justin.odwyer@datadoghq.com",
        "time": "Tue Aug 11 11:57:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 09:57:29 2026 +0000"
      },
      "message": "refactor: Refactor numeric sign and padding in Spark format_string (#24115)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes https://github.com/apache/datafusion/issues/24058\n\n## Rationale for this change\n\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n\n--\u003e\n\n`format_decimal` and `format_float` had duplicated logic, and it\u0027d be\neasy to modify one function and forget to change the other, causing\nbugs. This PR forces one source of truth for that logic.\n\n## What changes are included in this PR?\n\n\u003c!--\nThere is no need to duplicate the description in the issue here, but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\nCreated a new helper.\n\n## Are these changes tested?\n\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\nYes,\n\n```\ncargo t -p datafusion-spark format_string --lib\n```\n\npasses.\n\n## Are there any user-facing changes?\n\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e\n\nNo user facing-changes."
    },
    {
      "commit": "8cb7c84d6c3e4b0157985ef8d0b076cde7bf7e59",
      "tree": "683ad34151cbe17db676a02d704c5767ef219b3b",
      "parents": [
        "a1f64e94b4d4d2eec6d4a8af448cedb86a075f75"
      ],
      "author": {
        "name": "kosiew",
        "email": "kosiew@gmail.com",
        "time": "Tue Aug 11 16:24:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 08:24:37 2026 +0000"
      },
      "message": "Fix aggregate accumulator capacity accounting (#24099)\n\n## Which issue does this PR close?\n\n* Part of #23393\n\n## Rationale for this change\n\nTwo aggregate accumulators underreport owned memory in their `size()`\nimplementations:\n\n* `CountGroupsAccumulator` calculates vector backing storage using the\nwrong element type.\n* `SlidingDistinctSumAccumulator` reports only the accumulator struct\nsize and omits its owned hash map allocation.\n\nThis change corrects those capacity-based estimates while preserving the\ndifferent `Accumulator::size()` and `GroupsAccumulator::size()`\nself-inclusion contracts.\n\n## What changes are included in this PR?\n\n* Add `vec_capacity_bytes` to calculate a vector’s backing allocation\nusing its actual element type.\n* Update `CountGroupsAccumulator::size()` to report the capacity-based\nallocation of its counts vector while remaining self-excluded.\n* Update `SlidingDistinctSumAccumulator::size()` to include\n`size_of_val(self)` and an estimate of its hash map’s allocated entry\ncapacity.\n* Document that the hash map estimate excludes implementation-specific\ncontrol bytes.\n\n## Are these changes tested?\n\nYes. This PR adds the following unit tests:\n\n* `count_groups_size_includes_vec_capacity`\n* `vec_capacity_bytes_uses_element_type`\n* `sliding_distinct_sum_size_includes_hash_map_capacity`\n\nThe tests verify that:\n\n* grouped count size grows when vector backing storage is allocated;\n* vector capacity accounting uses the vector’s element type;\n* sliding distinct-sum size includes hash map capacity, grows after the\nmap expands, and continues to reflect retained capacity after entries\nare retracted.\n\n## Are there any user-facing changes?\n\nNo user-facing API or aggregate result changes are intended. This PR\nonly corrects internal memory-size estimates used for aggregate\naccounting.\n\n## LLM-generated code disclosure\n\nThis PR includes LLM-generated code and comments. All LLM-generated\ncontent has been manually reviewed."
    },
    {
      "commit": "a1f64e94b4d4d2eec6d4a8af448cedb86a075f75",
      "tree": "037184efa3366ee7945b65da8940dff699e485f9",
      "parents": [
        "a05388e82374ed2943595980b0539b6c1fa629a0"
      ],
      "author": {
        "name": "DevShiba",
        "email": "115382911+DevShiba@users.noreply.github.com",
        "time": "Tue Aug 11 04:40:22 2026 -0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 07:40:22 2026 +0000"
      },
      "message": "fix: reject max_buffered_batches_per_output_file values below 2 (#24204)\n\n## Which issue does this PR close?\n\n- Part of https://github.com/apache/datafusion/issues/17498\n\n## Rationale for this change\n\n```\nDataFusion CLI v54.1.0\n\u003e set datafusion.execution.max_buffered_batches_per_output_file \u003d 1;\n\u003e COPY (SELECT 1 as a) TO \u0027/tmp/x.parquet\u0027;\n\nthread \u0027tokio-rt-worker\u0027 panicked at datafusion/datasource/src/write/demux.rs:287:30:\nmpsc bounded channel requires buffer \u003e 0\n```\n\nTwo call sites (`demux.rs::create_new_file_stream`,\n`orchestration.rs::spawn_writer_tasks_and_join`) divide\n`max_buffered_batches_per_output_file` in half to size a bounded `mpsc`\nchannel\u0027s capacity. Integer division rounds both 0 *and* 1 down to 0,\nand Tokio\u0027s `mpsc::channel` panics on a zero capacity. A plain non-zero\ncheck (like the existing `ConfigNonZeroUsize`) would not have been\nsufficient here, since 1 also triggers the panic.\n\nA third call site (`demux.rs::hive_style_partitions_demuxer`) uses the\nraw value directly without dividing, so it would panic on 0 alone.\n\n## What changes are included in this PR?\n\nAdds `ConfigMinTwoUsize`, mirroring the existing `ConfigNonZeroUsize`\npattern already used for sibling fields (`batch_size`,\n`meta_fetch_concurrency`, `minimum_parallel_output_files`, etc.), and\napplies it to `max_buffered_batches_per_output_file`. Invalid values are\nnow rejected with a clear configuration error at set-time instead of\npanicking later at write time. Updated the three read sites to call\n`.get()`, updated the field doc comment to explain the constraint, and\nregenerated `docs/source/user-guide/configs.md` via\n`dev/update_config_docs.sh`.\n\n## Are these changes tested?\n\nYes. Added two `statement error` cases to\n`datafusion/sqllogictest/test_files/set_variable.slt` (values 0 and 1),\nfollowing the exact pattern already used for the sibling\n`ConfigNonZeroUsize` fields in that file. Verified manually with\n`datafusion-cli` that 0 and 1 now return a clean error instead of\npanicking, and that 2 (the default) and 3 still work correctly. Ran\n`cargo test -p datafusion-datasource --lib` (178 passed), the\n`set_variable.slt` sqllogictest suite, and `cargo check --workspace\n--all-targets` — all clean.\n\n## Are there any user-facing changes?\n\nYes: setting `datafusion.execution.max_buffered_batches_per_output_file`\nto `0` or `1` now returns a configuration error instead of panicking. No\nchange for any value `\u003e\u003d 2` (including the default of 2)."
    },
    {
      "commit": "a05388e82374ed2943595980b0539b6c1fa629a0",
      "tree": "0c6abbc4020076bb192af12e4e72f10c468e2d56",
      "parents": [
        "9f2a23f03807c2bd67592b221ecbbdf03ca00900"
      ],
      "author": {
        "name": "Subham Singhal",
        "email": "SubhamSinghal@users.noreply.github.com",
        "time": "Tue Aug 11 11:12:25 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 05:42:25 2026 +0000"
      },
      "message": "Parquet row filter struct access tree (#23217)\n\n## Which issue does this PR close?\n\n  - Closes #23156.\n\n  ## Rationale for this change\n  \n## Are these changes tested?\n\n  Yes\n\n  ## Are there any user-facing changes?\n\n  No. This is an internal refactor"
    },
    {
      "commit": "9f2a23f03807c2bd67592b221ecbbdf03ca00900",
      "tree": "b423c26da5d08e1d7f68376cf3d55a2031bac751",
      "parents": [
        "a9b61abf04b59ff08e7254b598b07f4fa058c5d1"
      ],
      "author": {
        "name": "Sergey Zhukov",
        "email": "62326549+cj-zhukov@users.noreply.github.com",
        "time": "Tue Aug 11 05:43:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 03:43:17 2026 +0000"
      },
      "message": "feat(dataframe): add f16 support to dataframe! macro (#24234)\n\n## Which issue does this PR close?\n\n\u003c!--\nWe generally require a GitHub issue to be filed for all bug fixes and\nenhancements and this helps us generate change logs for our releases.\nYou can link an issue to this PR using the GitHub syntax. For example\n`Closes #123` indicates that this PR will close issue #123.\n--\u003e\n\n- Closes https://github.com/apache/datafusion/issues/24232.\n\n## Rationale for this change\nThe `dataframe!` macro supports most primitive numeric types but was\nmissing `f16` support. This change addresses the existing `TODO` and\nadds support for `f16` values.\n\u003c!--\nWhy are you proposing this change? If this is already explained clearly\nin the issue then this section is not needed.\nExplaining clearly why changes are proposed helps reviewers understand\nyour changes and offer better suggestions for fixes.\n\nPlease explain the problem you are trying to solve in terms of the\nuser-visible\nbehavior, rather than the implementation.\n\nFor example, \"The code in `foo.rs` doesn\u0027t handle nulls\" is a symptom of\nthe\nimplementation. \"COUNT(DISTINCT) returns wrong results when the column\ncontains\nnulls\" is the user-visible problem.\n--\u003e\n\n## What changes are included in this PR?\n- Add `IntoArrayRef` implementations for `half::f16`:\n  - `Vec\u003chalf::f16\u003e`\n  - `Vec\u003cOption\u003chalf::f16\u003e\u003e`\n  - `\u0026[half::f16]`\n  - `\u0026[Option\u003chalf::f16\u003e]`\n\n- Improve `test_dataframe_macro` to cover all supported primitive types\nand the different input forms supported by the macro.\n- Improve `test_dataframe_from_columns` to cover the supported Arrow\ndata types, including `Float16`.\n- No breaking changes.\n\u003c!--\nThere is no need to duplicate the description in the issue here, but it\nis sometimes worth providing a summary of the individual changes in this\nPR.\n--\u003e\n\n## Are these changes tested?\nYes. The existing `test_dataframe_macro` and\n`test_dataframe_from_columns` tests have been extended to verify the\nexpected data types and resulting dataframe contents.\n\u003c!--\nWe typically require tests for all PRs in order to:\n1. Prevent the code from being accidentally broken by subsequent changes\n2. Serve as another way to document the expected behavior of the code\n\nIf tests are not included in your PR, please explain why (for example,\nare they covered by existing tests)?\n--\u003e\n\n## Are there any user-facing changes?\nYes. The `dataframe!` macro now supports `f16` values.\n\u003c!--\nIf there are user-facing changes then we may require documentation to be\nupdated before approving the PR.\n\nIf there are any breaking changes to public APIs, please add the `api\nchange` label.\n--\u003e"
    },
    {
      "commit": "a9b61abf04b59ff08e7254b598b07f4fa058c5d1",
      "tree": "642eeaa330cdc82b6e3ee7eaed3ccdb2a8b7c044",
      "parents": [
        "d5bd10d8042772539630e7a00275c7b66cac95da"
      ],
      "author": {
        "name": "xudong.w",
        "email": "wxd963996380@gmail.com",
        "time": "Tue Aug 11 09:57:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 01:57:49 2026 +0000"
      },
      "message": "fix(parquet): remap sorting columns for partitioned writes (#24211)\n\n## Which issue does this PR close?\n\n- Closes #24210.\n\n## Rationale for this change\n\nWhen Hive partition columns are not kept in Parquet files,\n`FileSinkConfig::output_schema()` still describes the sink input while\n`get_writer_schema(\u0026conf)` removes those partition columns.\n`ParquetFormat::create_writer_physical_plan` currently converts the\ninput ordering directly to Parquet `sorting_columns`, so its column\nindices can reference removed columns or the wrong positions in the\nwritten schema. Reading that metadata can then panic in\n`SchemaDescriptor::column` with an out-of-bounds index.\n\nThe execution ordering and the Parquet footer ordering have different\nschema domains: `DataSinkExec` must retain the original input ordering,\nwhile `ParquetSink` metadata must use indices from the actual writer\nschema.\n\n## What changes are included in this PR?\n\n- Derive Parquet `sorting_columns` from both the input schema and\n`get_writer_schema(\u0026conf)`.\n- Omit ordering keys that are removed from the written file, such as\nHive partition columns.\n- Remap retained ordering keys to their writer-schema indices while\npreserving sort direction and null ordering.\n- Keep the original `order_requirements` unchanged for `DataSinkExec`.\n- Avoid writing an empty `sorting_columns` list when every ordering key\nis removed.\n- Add unit and end-to-end regression coverage for partitioned Parquet\nwrites.\n\n## Are these changes tested?\n\nYes. The new tests cover the writer-schema remapping directly and verify\nthe resulting Parquet footer after a partitioned write.\n\n## Are there any user-facing changes?\n\nThere are no public API changes. Newly written partitioned Parquet files\nnow contain valid `sorting_columns` metadata based on their physical\nfile schema. Existing files with invalid metadata are unchanged and must\nbe rewritten separately."
    },
    {
      "commit": "d5bd10d8042772539630e7a00275c7b66cac95da",
      "tree": "9d4d947a7079e6d392cc33b1f8ee441456e1af76",
      "parents": [
        "a251b940882fd205a5bcfa3efd0d47367ac26bf7"
      ],
      "author": {
        "name": "dario curreri",
        "email": "48800335+dariocurr@users.noreply.github.com",
        "time": "Mon Aug 10 23:33:27 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 10 21:33:27 2026 +0000"
      },
      "message": "physical-plan: coerce UNION/INTERLEAVE schema mismatches at plan time (#24094)\n\n## Which issue does this PR close?\n\nFollow-up to #23861 (issue #15394). Not closing a new issue.\n\n## Rationale for this change\n\n#23861 fixed `UNION ALL` batches carrying the wrong nullability when one\nleg\nis `NOT NULL` and another isn\u0027t, by re-stamping each batch\u0027s schema\ninside\n`UnionExec`/`InterleaveExec`\u0027s own `execute()`. In review, @alamb noted:\n\n\u003e ideally we could coerce the schema at plan time but I don\u0027t know how\nto\n\u003e coerce nullability\n\nThis PR does that: the coercion becomes an explicit node in the plan\ntree,\ninserted when the plan is built, instead of invisible logic inside\n`execute()`.\n\n## What changes are included in this PR?\n\n- Adds `CoerceSchemaExec`, a single-child passthrough `ExecutionPlan`\nnode.\n`UnionExec::try_new`/`InterleaveExec::try_new` insert it above any child\n  whose own output schema disagrees with the computed union schema (in\npractice, only nullability differs -- `UnionExec::try_new` already\nrejects\n  real data-type mismatches via `calculate_union`).\n- The actual batch re-stamping logic (`SchemaConformingStream`) is\nunchanged;\n  it just lives under `CoerceSchemaExec::execute()` now instead of being\n  called directly from `UnionExec`/`InterleaveExec::execute()`.\n- Because it\u0027s a real plan node, `CoerceSchemaExec` implements the full\n`ExecutionPlan` surface a pure 1:1 passthrough needs to stay transparent\n  to the optimizer: statistics passthrough, filter/limit pushdown,\n  `benefits_from_input_partitioning() -\u003e false` (so it doesn\u0027t trigger a\n  spurious repartition), and proto (de)serialization -- the node erases\n  itself on encode and is reconstructed by `try_new` on decode, so no\n  protobuf schema change was needed.\n- A genuine data-type mismatch (as opposed to nullability-only) is now\n  rejected eagerly at plan-build time (via `EquivalenceProperties::\n  with_new_schema`) rather than lazily at `execute()`.\n\n## Are these changes tested?\n\n- New unit test\n`test_union_partition_statistics_with_mismatched_nullability`\nin `union.rs`, proving statistics aren\u0027t poisoned to `Absent` through\nthe\n  new node.\n- Existing `union_nullable`/`union_nullable_spill` regression tests from\n  #23861 continue to pass unchanged.\n- Updated the `sqllogictest` golden file (`union.slt`) where `EXPLAIN`\n  output now shows the new node for pre-existing nullability-mismatched\n  `UNION ALL` cases.\n- Benchmarked against the previous (inline) approach: no measurable\n  performance difference in either the coerced or matched-schema case\n  (differences were within run-to-run noise).\n\n## Are there any user-facing changes?\n\n`EXPLAIN` output for a `UNION ALL`/interleaved plan with a nullability\nmismatch across legs will now show a `CoerceSchemaExec` node that wasn\u0027t\nthere before. No behavioral or correctness change.\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "a251b940882fd205a5bcfa3efd0d47367ac26bf7",
      "tree": "4a20e44dd05e55aaf3e002c5917056c4a65bf7bd",
      "parents": [
        "33ad1cc146110ff72485ff533da7277e0895e094"
      ],
      "author": {
        "name": "Burak Şen",
        "email": "buraksenb@gmail.com",
        "time": "Mon Aug 10 23:47:39 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 10 20:47:39 2026 +0000"
      },
      "message": "fix(proto): preserve AggregateExec schema and reversed state (#24207)\n\n## Which issue does this PR close?\n\n- Closes #24202.\n\n## Rationale for this change\n\nPhysical-plan deserialization rebuilt `AggregateExec` output schemas\nfrom decoded aggregate expression names. `OptimizeAggregateOrder` can\nreverse aggregate expressions while preserving the original schema,\ncausing protobuf round trips to change output field names and lose the\nexpression\u0027s reversed state.\n\n## What changes are included in this PR?\n\n- Serialize and restore the preserved `AggregateExec` output schema.\n- Serialize and restore `AggregateFunctionExpr::is_reversed`.\n- Fall back to schema reconstruction for older payloads without an\noutput schema.\n- Regenerate the prost and pbjson models.\n- Add a byte-level regression test covering optimizer reversal and\nbackward compatibility.\n\n## Are these changes tested?\n\nYes:\n\n- `cargo test -p datafusion-proto --test proto_integration\nroundtrip_aggregate_preserves_optimizer_schema_and_reversed_state`\n- `cargo fmt --all`\n- `cargo clippy --all-targets --all-features -- -D warnings`\n- `./dev/rust_lint.sh`\n\n## Are there any user-facing changes?\n\nPhysical-plan protobuf round trips now preserve aggregate output field\nnames and reversed state. The protobuf wire format remains backward\ncompatible; generated Rust model structs gain new fields."
    }
  ],
  "next": "33ad1cc146110ff72485ff533da7277e0895e094"
}
