)]}'
{
  "log": [
    {
      "commit": "73252c34e0024876bf99c843a2593436a6026b54",
      "tree": "bc5e1fd49ef7cce052661f0770ff13d440654ff6",
      "parents": [
        "88f3c41fe0ccd106494afc5e4d2a2ae3be11c724"
      ],
      "author": {
        "name": "liuxiaoyu",
        "email": "45345701+MisterRaindrop@users.noreply.github.com",
        "time": "Fri Jul 24 18:06:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 18:06:39 2026 +0800"
      },
      "message": "feat(hive): add HmsClient connection lifecycle and URI parsing (#796)\n\n- **`ParseHmsUris()`** — tolerant HMS URI parser: `thrift://host:port`,\nbare `host:port`, default port 9083, and comma-separated HA lists.\nRejects empty hosts and invalid ports.\n- **`HmsClient::Connect()`** — sets up the `TSocket → TTransport →\nTBinaryProtocol → ThriftHiveMetastoreClient` chain (transport and\ntimeouts from `HiveCatalogProperties`), translating Thrift exceptions to\n`kIOError`. Thrift types stay out of the public header via a pImpl.\n- **CI** — new `Ubuntu Hive` job builds with `-DICEBERG_BUILD_HIVE\u003dON`\n(bundled Thrift) and runs `hive_catalog_test`."
    },
    {
      "commit": "88f3c41fe0ccd106494afc5e4d2a2ae3be11c724",
      "tree": "559962e3b6b20f8a8a318518cae3ec3f66ca4cc5",
      "parents": [
        "e7c5e9c7e52727a537296cdac61ceeb52b5d3276"
      ],
      "author": {
        "name": "Manu Zhang",
        "email": "OwenZhang1990@gmail.com",
        "time": "Fri Jul 24 14:14:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 14:14:59 2026 +0800"
      },
      "message": "ci: scope pull request checks to relevant paths (#839)\n\n## What\n\n- For pull requests, run ASF allowlist, Actions CodeQL, and zizmor only\nfor YAML changes under `.github`.\n- For pull requests, skip AWS, sanitizer, SQL catalog, general test, and\nC++ lint workflows for Markdown, documentation, devcontainer, and\nrelease-development-only changes.\n- Keep license and pre-commit checks unfiltered.\n\n## Why\n\nThese workflows currently run on pull requests even when every changed\npath is unrelated to what they validate. Directory and extension globs\nkeep the filters applicable to future files without maintaining filename\nlists, and keeping filters off push triggers avoids duplicate\nmaintenance.\n\n## Impact\n\nDocumentation and development-only pull requests avoid unrelated CI\nwork. Mixed changes still run the relevant workflows, GitHub YAML\nchanges still run the Actions validators, and main, tag, and scheduled\nruns remain unfiltered.\n\n---------\n\nCo-authored-by: Codex \u003ccodex@openai.com\u003e"
    },
    {
      "commit": "e7c5e9c7e52727a537296cdac61ceeb52b5d3276",
      "tree": "d42c966c5594cb47af6b0f24ab92c921cee764d2",
      "parents": [
        "7e47e4d98615b6091499fa7a603dc465b9ab66e3"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Fri Jul 24 13:35:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 13:35:27 2026 +0800"
      },
      "message": "fix: compare transform function parameters (#840)\n\n## Summary\n- include bucket counts in BucketTransform equality\n- include truncate widths in TruncateTransform equality\n- cover parameter and source-type differences in transform tests\n\n## Testing\n- build/src/iceberg/test/schema_test\n- pre-commit hooks"
    },
    {
      "commit": "7e47e4d98615b6091499fa7a603dc465b9ab66e3",
      "tree": "a21089527907b310f34bffe75709c8d4e3a476bf",
      "parents": [
        "f9e83ff9324f1fd7bb9880f318222204ca17117e"
      ],
      "author": {
        "name": "Abanoub Doss",
        "email": "abanoubdoss@gmail.com",
        "time": "Fri Jul 24 00:27:54 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 13:27:54 2026 +0800"
      },
      "message": "ci: share sccache setup across workflows (#811)\n\n## What\nAdd two composite actions for sccache:\n\n- `.github/actions/setup-sccache` sets the sccache environment, restores\nthe cache, resolves the MSVC compiler version on Windows, and starts\n`mozilla-actions/sccache-action`.\n- `.github/actions/save-sccache` shows sccache stats for every run and\nsaves the cache only on main branch runs.\n\nThe Test, SQL Catalog, sanitizer, C++ linter, and AWS workflows now pass\nonly their cache key prefix at each call site.\n\nThis is part of the CI work discussed in\nhttps://github.com/apache/iceberg-cpp/issues/799.\n\n## Notes\nThe existing cache key shapes are preserved for the current CMake\nworkflow legs. The Meson Windows leg now also gets the MSVC-version key\nsuffix, matching the other Windows sccache legs and avoids cache misses\nafter runner image compiler updates.\n\nThe MSVC version source also changes for the existing Windows legs (test\nand SQL catalog): the inline `cl.exe` banner parse is replaced by\nreading `VCToolsVersion.default.txt` via vswhere, which is more reliable\nand does not require `cl.exe` on PATH. This produces a different version\nformat (e.g. `14.44.35217` vs `19.44.35217.1`), so all Windows caches\nwill miss once and reseed on the first post-merge main run.\n\nThird-party actions stay pinned inside composite `action.yml` files,\nwhich are covered by the ASF allowlist checker glob.\n\n## Validation\n- Validated builds in fork: Test, AWS, SQL Catalog, ASAN/UBSAN, and\npre-commit.\n- The C++ linter workflow ignores `.github/**`, so this PR does not\nexercise that workflow until a source-touching run or post-merge.\n\nCo-authored-by: Abanoub Doss \u003cabanoub.doss@gmail.com\u003e"
    },
    {
      "commit": "f9e83ff9324f1fd7bb9880f318222204ca17117e",
      "tree": "ed19c5439d2afbb55febccb13c80601dacc2ada9",
      "parents": [
        "78b659073289e40247bd0b286b6e2a91d8a07ce1"
      ],
      "author": {
        "name": "YangJie",
        "email": "yangjie01@baidu.com",
        "time": "Thu Jul 23 23:58:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 23:58:00 2026 +0800"
      },
      "message": "ci: replace cpp-linter-action with cpp-linter CLI (#838)\n\n## What\n\n`cpp-linter/cpp-linter-action` is frozen at v2.15.1. Its v2.16 release\npulled in an untrusted dependency and was blocked by ASF Infra\n(apache/infrastructure-actions#325), and the ASF gateway ignores newer\nversions. The pinned action still runs, but it can no longer be updated.\n\n## How\n\nThe action is a thin wrapper around the `cpp-linter` PyPI package, and\nthe block does not touch that package. This installs it with pip and\ncalls the `cpp-linter` CLI to run clang-tidy. Because it is a `run:`\nstep and not a `uses:` reference, it adds no new third-party action to\nthe ASF allowlist. The `checks-failed` output and the Fail fast step\nstay as they were.\n\nFormatting is left to the pre-commit workflow, which already runs the\npinned clang-format hook on every PR. So cpp-linter runs tidy-only:\n`--style\u003d\u0027\u0027`, and clang-format is not installed here. This keeps the\nclang-format version in one place instead of tracking it in two.\n`--version` points at the setup-python bin directory so clang-tidy\nresolves to the pip-installed version rather than a system clang-tidy on\nPATH.\n\nI also looked at emitting SARIF and uploading it with\n`github/codeql-action/upload-sarif`, which is allowed since it is a\n`github/*` action. That route loses the thread comment and needs an\nextra conversion step, so calling the CLI directly stays closer to what\nwe have now.\n\n## Verified\n\nCI ran the job on a temporary probe file seeded with a `NULL` and a\nmis-named member. clang-tidy resolved to the pip-installed 22.1.8 (not a\nsystem clang-tidy-22), flagged both issues, and set `checks-failed`, so\nthe Fail fast step failed as expected. The probe has since been removed.\n\n---\nThis contribution was authored with assistance from Claude Opus 4.8, in\nline with the Iceberg guidelines for AI-assisted contributions\n(https://iceberg.apache.org/contribute/#guidelines-for-ai-assisted-contributions).\nAll changes were reviewed and tested by the author.\n\nCloses #336"
    },
    {
      "commit": "78b659073289e40247bd0b286b6e2a91d8a07ce1",
      "tree": "317e0cdd40618a1997cd8b8f70654c73eaf7c69f",
      "parents": [
        "6c30d3c2ff8ea7b804ebfd30072aa39d994dfe9e"
      ],
      "author": {
        "name": "Manu Zhang",
        "email": "OwenZhang1990@gmail.com",
        "time": "Thu Jul 23 18:02:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 18:02:06 2026 +0800"
      },
      "message": "ci: check for duplicate pull requests (#837)\n\n## Summary\n\n- instruct Copilot reviewers to search open pull requests for the same\nissue or change\n- ask reviewers to link any duplicate they find\n\nThis helps surface duplicate work earlier in the review process.\n\n## Testing\n\nNot run (documentation-only change, per instruction).\n\nCo-authored-by: Codex \u003ccodex@openai.com\u003e"
    },
    {
      "commit": "6c30d3c2ff8ea7b804ebfd30072aa39d994dfe9e",
      "tree": "43afa92b7395e410d7b4b7691ba989cbe5af9210",
      "parents": [
        "944a544f6bdaa0d5e94e3751884e117830a6a75b"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Thu Jul 23 09:41:05 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:41:05 2026 +0800"
      },
      "message": "fix: validate transform parameters in metadata (#757)\n\n## Summary\n- add `Transform::Validate` to reuse bind-time transform checks during\nmetadata validation\n- reject invalid bucket/truncate parameters when parsing transform\nstrings\n- make partition specs and sort orders reject non-positive\nbucket/truncate parameters during schema-bound validation\n\n## Validation\n- `cmake -S . -B build-transform-params -G Ninja\n-DICEBERG_BUILD_BUNDLE\u003dOFF -DICEBERG_BUILD_REST\u003dOFF\n-DICEBERG_BUILD_SHARED\u003dOFF`\n- `ctest --test-dir build-transform-params -R schema_test\n--output-on-failure`"
    },
    {
      "commit": "944a544f6bdaa0d5e94e3751884e117830a6a75b",
      "tree": "5bfca37558253fdaf10c08efb7a40ee4627874f2",
      "parents": [
        "955562bdf70cf3eb3dd842ba59d67919eb0e2ccf"
      ],
      "author": {
        "name": "kamcheungting-db",
        "email": "91572897+kamcheungting-db@users.noreply.github.com",
        "time": "Wed Jul 22 19:12:16 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 10:12:16 2026 +0800"
      },
      "message": "feat(logging): add logging macros (#725)\n\nPart 4 of the logging stack (builds on #724). Adds the\napplication-facing macros — the part most callers actually use.\n\n**What\u0027s here**\n- `ICEBERG_LOG_{TRACE,DEBUG,INFO,WARN,ERROR,CRITICAL,FATAL}`, the\ngeneric `ICEBERG_LOG(level, …)`, `ICEBERG_LOG_TO(logger, …)`, and\n`ICEBERG_LOG_RUNTIME_FMT` for runtime format strings.\n- `ICEBERG_LOG_ACTIVE_LEVEL` is a compile-time floor: statements below\nit are removed entirely. `ICEBERG_LOG_FATAL` always emits, flushes, then\naborts.\n- Filtering is decided only by `ShouldLog()`; formatting happens only on\nthe taken path and never throws (a bad format falls back safely).\n- Generic/runtime-format macros use the same lock-free fast path as the\nfixed-severity ones (the slot lock is taken only on the fatal/abort\npath).\n- Bare `LOG_*` aliases are opt-in via `ICEBERG_LOG_SHORT_MACROS`.\n\n**Build note** — sets `/Zc:preprocessor` on MSVC, required for the\n`__VA_OPT__` used by the macros.\n\n**Examples** — every macro takes a `std::format` string + args. The\nrendered line depends on the active backend; with the default\n`CerrLogger` it looks like:\n\n```\nICEBERG_LOG_TRACE(\"entering scan for {}\", table);\n  2026-06-16T10:59:41.186Z trace [12345] table_scan.cc:88] entering scan for db.t\nICEBERG_LOG_DEBUG(\"cache miss key\u003d{}\", key);\n  2026-06-16T10:59:41.186Z debug [12345] cache.cc:42] cache miss key\u003dmanifest-7\nICEBERG_LOG_INFO(\"loaded {} manifests in {} ms\", n, ms);\n  2026-06-16T10:59:41.186Z info [12345] table_scan.cc:91] loaded 5 manifests in 12 ms\nICEBERG_LOG_WARN(\"retry {} after {}\", attempt, err);\n  2026-06-16T10:59:41.186Z warn [12345] io.cc:51] retry 2 after timeout\nICEBERG_LOG_ERROR(\"commit failed: {}\", status);\n  2026-06-16T10:59:41.186Z error [12345] txn.cc:77] commit failed: conflict\nICEBERG_LOG_CRITICAL(\"metadata unreadable at {}\", path);\n  2026-06-16T10:59:41.186Z critical [12345] meta.cc:30] metadata unreadable at s3://b/m.json\nICEBERG_LOG_FATAL(\"unrecoverable: {}\", reason);   // emits, flushes, then std::abort()\n  2026-06-16T10:59:41.186Z fatal [12345] boot.cc:19] unrecoverable: bad config\n```\n\nLess common forms: `ICEBERG_LOG(level, …)` (runtime severity),\n`ICEBERG_LOG_TO(logger, level, …)` (explicit logger),\n`ICEBERG_LOG_RUNTIME_FMT(level, fmt_string, args…)` (non-literal\nformat). The same examples are documented inline in `logger.h`.\n\n**Tests** — `macros_test` / `macros_active_level_test`: formatting,\nlevel gating, \"argument not evaluated when disabled\", compile-time\nstripping, never-throws, and FATAL-aborts death tests. clang/libc++.\n\nThis pull request and its description were written by Isaac."
    },
    {
      "commit": "955562bdf70cf3eb3dd842ba59d67919eb0e2ccf",
      "tree": "c1bccc0fe463ed32a95ebeea1fa18af0ffe42350",
      "parents": [
        "9221381ced55bbbb1dbf9b3b9d394d410937b8d5"
      ],
      "author": {
        "name": "Xin Huang",
        "email": "42597328+huan233usc@users.noreply.github.com",
        "time": "Wed Jul 22 19:09:58 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 10:09:58 2026 +0800"
      },
      "message": "fix: reject non-finite floating-point default values (#810)\n\n## What\n\nA `float` / `double` column default of `NaN` or `±Infinity` passes\n`SchemaField::Validate` but cannot survive a metadata round-trip: the\nJSON serializer emits a non-finite number as `null`, which reads back as\nan *absent* default. The declared default is silently lost (and, because\nthe key is present but null, the reader then errors on it).\n\n## How\n\n`ValidateDefault` now rejects a non-finite floating default with a clear\n\"value must be finite\" error, so an unrepresentable default is caught up\nfront rather than silently dropped on serialization.\n\nThe check uses `std::isfinite`, which is false for **both** `NaN` and\n`±Infinity` — so a single condition covers all three cases (there is no\nseparate `IsNaN` branch because `isfinite` already rejects NaN).\n\n## Testing\n\n`SchemaFieldTest.ValidateRejectsNonFiniteFloatingDefault` explicitly\ncovers `NaN`, `+Inf` and `-Inf`, and\n`ValidateAcceptsFiniteFloatingDefault` covers a normal value; verified\nfail-without / pass-with. Full `schema_test` passes (551 tests)."
    },
    {
      "commit": "9221381ced55bbbb1dbf9b3b9d394d410937b8d5",
      "tree": "2dd20af0cfb5a52c84a48985a4e2dc04b2c94469",
      "parents": [
        "bfc0040f7e771808f31ea4b1e51227784d229d63"
      ],
      "author": {
        "name": "YangJie",
        "email": "yangjie01@baidu.com",
        "time": "Mon Jul 20 15:30:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 15:30:28 2026 +0800"
      },
      "message": "build: move GTest and Google Benchmark setup into IcebergThirdpartyToolchain (#836)\n\n## What\n\nFixes #829. The GoogleTest and Google Benchmark FetchContent setup lived\nin `src/iceberg/test/CMakeLists.txt` and\n`src/iceberg/benchmark/CMakeLists.txt`, apart from the other third-party\ndependencies. This follows the review discussion on #825, which\nsuggested keeping dependency resolution in one place.\n\n## How\n\n- Add `resolve_gtest_dependency()` and `resolve_benchmark_dependency()`\nto `cmake_modules/IcebergThirdpartyToolchain.cmake`, next to the\nexisting `resolve_*` functions.\n- Gate them on `ICEBERG_BUILD_TESTS` and `ICEBERG_BUILD_BENCHMARKS`, the\nsame conditions that already guard the test and benchmark\nsubdirectories.\n- Both functions call `prepare_fetchcontent()` like the other resolvers,\nso a command-line `-DCMAKE_COMPILE_WARNING_AS_ERROR\u003dON` does not build\nthe vendored GTest/Benchmark sources with `-Werror`.\n- Version pins are unchanged. Only CMake is affected; Meson resolves\nthese through `subprojects/*.wrap`, so it needs no change.\n\n## Verified\n\n- `-DICEBERG_BUILD_BENCHMARKS\u003dON`: both dependencies fetch;\n`benchmark_smoke` and `schema_test` build; `ctest -R schema_test`\npasses.\n- Tests and benchmarks both off: neither dependency is fetched.\n- `-DCMAKE_COMPILE_WARNING_AS_ERROR\u003dON` with benchmarks on: configure\nand build succeed.\n- `pre-commit run -a` clean.\n\n---\nThis contribution was authored with assistance from Claude Opus 4.8, in\nline with the Iceberg guidelines for AI-assisted contributions\n(https://iceberg.apache.org/contribute/#guidelines-for-ai-assisted-contributions).\nAll changes were reviewed and tested by the author."
    },
    {
      "commit": "bfc0040f7e771808f31ea4b1e51227784d229d63",
      "tree": "89729f511146786daf8d817a3571e28fd4340fe3",
      "parents": [
        "c904c247b3ad3f984da316cd810ad40295eeb7cf"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 10:55:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:55:59 2026 +0800"
      },
      "message": "chore(deps): bump the codeql-action group with 2 updates (#835)\n\nBumps the codeql-action 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.36.3 to 4.37.0\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.0\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\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.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\u003ch2\u003e4.36.1 - 02 Jun 2026\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.36.0 - 22 May 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eBreaking change\u003c/em\u003e: Bump the minimum required CodeQL bundle\nversion to 2.19.4. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3894\"\u003e#3894\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for SHA-256 Git object IDs. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3893\"\u003e#3893\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.5\"\u003e2.25.5\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3926\"\u003e#3926\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.5 - 15 May 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWe have improved how the JavaScript bundles for the CodeQL Action\nare generated to avoid duplication across bundles and reduce the size of\nthe repository by around 70%. This should have no effect on the runtime\nbehaviour of the CodeQL Action. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3899\"\u003e#3899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFor performance and accuracy reasons, \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e will now only be enabled on a pull request when\ndiff-informed analysis is also enabled for that run. If diff-informed\nanalysis is unavailable (for example, because the PR diff ranges could\nnot be computed), the action will fall back to a full analysis. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3791\"\u003e#3791\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIf multiple inputs are provided for the GitHub-internal\n\u003ccode\u003eanalysis-kinds\u003c/code\u003e input, only \u003ccode\u003ecode-scanning\u003c/code\u003e will\nbe enabled. The \u003ccode\u003eanalysis-kinds\u003c/code\u003e input is experimental, for\nGitHub-internal use only, and may change without notice at any time. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3892\"\u003e#3892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded an experimental change which, when running a Code Scanning\nanalysis for a PR with \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e enabled, prefers CodeQL CLI versions that have\na cached overlay-base database for the configured languages. This speeds\nup analysis for a repository when there is not yet a cached overlay-base\ndatabase for the latest CLI version. We expect to roll this change out\nto everyone in May. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3880\"\u003e#3880\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.4 - 07 May 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.25.4\"\u003e2.25.4\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3881\"\u003e#3881\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.3 - 01 May 2026\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/github/codeql-action/commit/99df26d4f13ea111d4ec1a7dddef6063f76b97e9\"\u003e\u003ccode\u003e99df26d\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3996\"\u003e#3996\u003c/a\u003e\nfrom github/update-v4.37.0-c7c896d71\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/31c27074fda95256cda077009907f8a6022dd7c0\"\u003e\u003ccode\u003e31c2707\u003c/code\u003e\u003c/a\u003e\nAdd changenote for \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3973\"\u003e#3973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/72df2181aac054d1f4b44264399d2aac12cf11c6\"\u003e\u003ccode\u003e72df218\u003c/code\u003e\u003c/a\u003e\nUpdate changelog for v4.37.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/c7c896d71b3055d36f2aff93b16bcc6c69923b91\"\u003e\u003ccode\u003ec7c896d\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3995\"\u003e#3995\u003c/a\u003e\nfrom github/update-bundle/codeql-bundle-v2.26.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/3f34ff0ea3f5153c96071437b7cbf71ea3757146\"\u003e\u003ccode\u003e3f34ff0\u003c/code\u003e\u003c/a\u003e\nAdd changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/43bec09f1dc368b430cab4b5d69799bc904079d1\"\u003e\u003ccode\u003e43bec09\u003c/code\u003e\u003c/a\u003e\nUpdate default bundle to codeql-bundle-v2.26.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/f58f0d11ebf5dedd870fab2f999275f7602cfa46\"\u003e\u003ccode\u003ef58f0d1\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3973\"\u003e#3973\u003c/a\u003e\nfrom github/mbg/repo-props/config-file-shorthands\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/7dc37cbb5b3e37f0e1cd1f18b61e0ea849898fb8\"\u003e\u003ccode\u003e7dc37cb\u003c/code\u003e\u003c/a\u003e\nMerge remote-tracking branch \u0027origin/main\u0027 into\nmbg/repo-props/config-file-sh...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/8e22350a7e28c34c82a5a499fc241923301c2c4f\"\u003e\u003ccode\u003e8e22350\u003c/code\u003e\u003c/a\u003e\nThread \u003ccode\u003eActionState\u003c/code\u003e to \u003ccode\u003einitConfig\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/69c9e8c7d918cf2fee13b8b72fdde15883ff155b\"\u003e\u003ccode\u003e69c9e8c\u003c/code\u003e\u003c/a\u003e\nMark some \u003ccode\u003estatus-report\u003c/code\u003e imports as \u003ccode\u003etype\u003c/code\u003e-only\nto avoid circular dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/github/codeql-action/compare/54f647b7e1bb85c95cddabcd46b0c578ec92bc1a...99df26d4f13ea111d4ec1a7dddef6063f76b97e9\"\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.36.3 to 4.37.0\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.0\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\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.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\u003ch2\u003e4.36.1 - 02 Jun 2026\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.36.0 - 22 May 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eBreaking change\u003c/em\u003e: Bump the minimum required CodeQL bundle\nversion to 2.19.4. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3894\"\u003e#3894\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for SHA-256 Git object IDs. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3893\"\u003e#3893\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.5\"\u003e2.25.5\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3926\"\u003e#3926\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.5 - 15 May 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWe have improved how the JavaScript bundles for the CodeQL Action\nare generated to avoid duplication across bundles and reduce the size of\nthe repository by around 70%. This should have no effect on the runtime\nbehaviour of the CodeQL Action. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3899\"\u003e#3899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFor performance and accuracy reasons, \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e will now only be enabled on a pull request when\ndiff-informed analysis is also enabled for that run. If diff-informed\nanalysis is unavailable (for example, because the PR diff ranges could\nnot be computed), the action will fall back to a full analysis. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3791\"\u003e#3791\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIf multiple inputs are provided for the GitHub-internal\n\u003ccode\u003eanalysis-kinds\u003c/code\u003e input, only \u003ccode\u003ecode-scanning\u003c/code\u003e will\nbe enabled. The \u003ccode\u003eanalysis-kinds\u003c/code\u003e input is experimental, for\nGitHub-internal use only, and may change without notice at any time. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3892\"\u003e#3892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded an experimental change which, when running a Code Scanning\nanalysis for a PR with \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e enabled, prefers CodeQL CLI versions that have\na cached overlay-base database for the configured languages. This speeds\nup analysis for a repository when there is not yet a cached overlay-base\ndatabase for the latest CLI version. We expect to roll this change out\nto everyone in May. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3880\"\u003e#3880\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.4 - 07 May 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.25.4\"\u003e2.25.4\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3881\"\u003e#3881\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.3 - 01 May 2026\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/github/codeql-action/commit/99df26d4f13ea111d4ec1a7dddef6063f76b97e9\"\u003e\u003ccode\u003e99df26d\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3996\"\u003e#3996\u003c/a\u003e\nfrom github/update-v4.37.0-c7c896d71\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/31c27074fda95256cda077009907f8a6022dd7c0\"\u003e\u003ccode\u003e31c2707\u003c/code\u003e\u003c/a\u003e\nAdd changenote for \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3973\"\u003e#3973\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/72df2181aac054d1f4b44264399d2aac12cf11c6\"\u003e\u003ccode\u003e72df218\u003c/code\u003e\u003c/a\u003e\nUpdate changelog for v4.37.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/c7c896d71b3055d36f2aff93b16bcc6c69923b91\"\u003e\u003ccode\u003ec7c896d\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3995\"\u003e#3995\u003c/a\u003e\nfrom github/update-bundle/codeql-bundle-v2.26.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/3f34ff0ea3f5153c96071437b7cbf71ea3757146\"\u003e\u003ccode\u003e3f34ff0\u003c/code\u003e\u003c/a\u003e\nAdd changelog note\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/43bec09f1dc368b430cab4b5d69799bc904079d1\"\u003e\u003ccode\u003e43bec09\u003c/code\u003e\u003c/a\u003e\nUpdate default bundle to codeql-bundle-v2.26.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/f58f0d11ebf5dedd870fab2f999275f7602cfa46\"\u003e\u003ccode\u003ef58f0d1\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3973\"\u003e#3973\u003c/a\u003e\nfrom github/mbg/repo-props/config-file-shorthands\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/7dc37cbb5b3e37f0e1cd1f18b61e0ea849898fb8\"\u003e\u003ccode\u003e7dc37cb\u003c/code\u003e\u003c/a\u003e\nMerge remote-tracking branch \u0027origin/main\u0027 into\nmbg/repo-props/config-file-sh...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/8e22350a7e28c34c82a5a499fc241923301c2c4f\"\u003e\u003ccode\u003e8e22350\u003c/code\u003e\u003c/a\u003e\nThread \u003ccode\u003eActionState\u003c/code\u003e to \u003ccode\u003einitConfig\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/69c9e8c7d918cf2fee13b8b72fdde15883ff155b\"\u003e\u003ccode\u003e69c9e8c\u003c/code\u003e\u003c/a\u003e\nMark some \u003ccode\u003estatus-report\u003c/code\u003e imports as \u003ccode\u003etype\u003c/code\u003e-only\nto avoid circular dependencies\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/github/codeql-action/compare/54f647b7e1bb85c95cddabcd46b0c578ec92bc1a...99df26d4f13ea111d4ec1a7dddef6063f76b97e9\"\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": "c904c247b3ad3f984da316cd810ad40295eeb7cf",
      "tree": "fb780bbc9653dd0d7acbb173a8b151b284f85e3e",
      "parents": [
        "fb7cc835f0e97c233d721a487fdedaf1b7002b06"
      ],
      "author": {
        "name": "Gang Wu",
        "email": "ustcwg@gmail.com",
        "time": "Mon Jul 20 10:44:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:44:54 2026 +0800"
      },
      "message": "ci: enable ASF Copilot code review (#833)\n\n### Rationale for this change\n\nGitHub Copilot code review may help provide preliminary feedback on pull\nrequests and reduce reviewer load while keeping human maintainers\nresponsible for final review decisions.\n\n### What changes are included in this PR?\n\n- Enable ASF-managed GitHub Copilot code review in `.asf.yaml`\n- Disable automatic reviews for draft PRs\n- Enable automatic reviews on new pushes\n- Add Copilot review instructions to reduce noisy comments\n\n### Are these changes tested?\n\nYes. `.asf.yaml` was parsed successfully as YAML, and `git diff --check`\npassed.\n\n### Are there any user-facing changes?\n\nNo."
    },
    {
      "commit": "fb7cc835f0e97c233d721a487fdedaf1b7002b06",
      "tree": "81eb512a1381fbbb510967d3bb7a530a607358c9",
      "parents": [
        "f9193ad7307b112017bef7de62b1e9b78fb33890"
      ],
      "author": {
        "name": "Gang Wu",
        "email": "ustcwg@gmail.com",
        "time": "Fri Jul 17 16:11:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 16:11:22 2026 +0800"
      },
      "message": "feat: read v3 row lineage metadata columns (#822)\n\nSynthesize _row_id and _last_updated_sequence_number when reading data\nfiles that omit row lineage columns, and preserve physical non-null\nlineage values when present.\n\nCarry inherited data sequence numbers on DataFile metadata so scan\nplanning and readers follow the same model as Java."
    },
    {
      "commit": "f9193ad7307b112017bef7de62b1e9b78fb33890",
      "tree": "23db3444d495bf5a9903d518092de2e3302302b7",
      "parents": [
        "c5a5b5c547607ff8c6854e32dad877e228364944"
      ],
      "author": {
        "name": "Gang Wu",
        "email": "ustcwg@gmail.com",
        "time": "Thu Jul 16 13:50:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 13:50:06 2026 +0800"
      },
      "message": "chore: update ASF GitHub collaborators (#830)"
    },
    {
      "commit": "c5a5b5c547607ff8c6854e32dad877e228364944",
      "tree": "e8158caaed41faafbd9a6df92ca41a85bc19179f",
      "parents": [
        "697891b03eb1d5b37ae395c3b34a80f7899cad7f"
      ],
      "author": {
        "name": "Zehua Zou",
        "email": "zehuazou2000@gmail.com",
        "time": "Thu Jul 16 11:27:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 11:27:58 2026 +0800"
      },
      "message": "feat: merge multiple deletion vectors per data file (#708)\n\nAdd support for merging multiple deletion vectors that reference the same data\nfile during snapshot updates. Track DV delete files separately from regular\nposition deletes, validate that merge candidates are compatible, merge their\nbitmap payloads into a new Puffin file, and replace the original DVs with the\nmerged delete file in the committed manifests.\n\nUse the table NewLocationProvider to write merged DV Puffin files, preserve data\nsequence numbers, and clean up newly written merged DV files if the commit path\nfails.\n\nAlso add Puffin DV read/write helpers and tests covering multi-DV merge behavior,\npartition compatibility checks, and mixed regular position-delete/DV handling.\n\nRemove redundant CI checks that were blocking the PR without adding meaningful\ncoverage for this change.\n\nCo-authored-by: Gang Wu \u003custcwg@gmail.com\u003e"
    },
    {
      "commit": "697891b03eb1d5b37ae395c3b34a80f7899cad7f",
      "tree": "b23f01fd1192c377fb220b1fa83335667486f46a",
      "parents": [
        "330de84b1bfba2d79a96f0506b330cc0d8294c7f"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Wed Jul 15 20:28:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 20:28:25 2026 +0800"
      },
      "message": "fix: use kLegacyPartitionDataIdStart as partition field ID baseline (#832)\n\nFreshPartitionSpec and TableMetadataBuilder::Impl both initialized the\npartition field ID counter to `kInvalidPartitionFieldId` (-1), causing\nthe first partition field to get ID **0** instead of **1000**. Partition\nfield\nID 0 collides with ManifestEntry internal fields:\n\n| Field | ID |\n|---|---|\n| `ManifestEntry.status` | 0 |\n| `ManifestEntry.snapshot_id` | 1 |\n| `ManifestEntry.data_file` | 2 |\n\nThis corrupts manifest file schemas during serialization and breaks\npartition pruning.\n\n## Fix\n\nChange both initializers to `kLegacyPartitionDataIdStart - 1` (999),\nconsistent with Java Iceberg\u0027s `PARTITION_DATA_ID_START` convention and\nthe rest of the C++ codebase (`PartitionSpec` constructor,\n`Unpartitioned()`, `UpdatePartitionSpec`). The first partition field\nnow correctly gets ID **1000**.\n\n| Location | Before | After |\n|---|---|---|\n| `FreshPartitionSpec` counter | -1 | 999 |\n| `TableMetadataBuilder::Impl::last_partition_id` | -1 | 999 |\n| First partition field ID | 0 | **1000** |"
    },
    {
      "commit": "330de84b1bfba2d79a96f0506b330cc0d8294c7f",
      "tree": "30137c737d014f1cfbfd10956d7ce425155705bd",
      "parents": [
        "fee18845357aefa570f3aa067061eb204ea33873"
      ],
      "author": {
        "name": "ZhaoXuan",
        "email": "425932451@qq.com",
        "time": "Tue Jul 14 22:38:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 22:38:26 2026 +0800"
      },
      "message": "feat(puffin): support deletion-vector-v1 blob read/write (#777)\n\nfeat(puffin): support deletion-vector-v1 blob read/write\n\nAdd end-to-end support for the `deletion-vector-v1` Puffin blob type on\ntop of the existing PuffinReader/PuffinWriter and RoaringPositionBitmap.\n\nEncoding (puffin/deletion_vector.{h,cc}):\n- SerializeDeletionVectorBlob / DeserializeDeletionVectorBlob implement\nthe DV blob framing: 4-byte big-endian length, 0xD1D33964 magic, the\nportable Roaring vector, and a trailing big-endian CRC-32. Reads validate\nthe magic and checksum.\n- MakeDeletionVectorBlob builds a spec-compliant Blob: fields set to the\n  row-position metadata column id, snapshot-id/sequence-number \u003d -1, no\ncompression, and the required referenced-data-file/cardinality properties.\n\nWriting (data/deletion_vector_writer.{h,cc}):\n- DeletionVectorWriter accumulates deleted positions per data file,\nrun-length\nencodes each bitmap before serializing, writes one blob per data file,\nand produces a DataFile per blob carrying content_offset /\ncontent_size_in_bytes,  referenced_data_file and record_count for manifest\nregistration.\n\nReading (data/delete_loader.cc):\n- Implement DeleteLoader::LoadDV: read the blob bytes referenced by\ncontent_offset/content_size_in_bytes, validate referenced_data_file, the\n2GB limit and cardinality \u003d\u003d record_count, then apply positions to the\nindex. This wires DV deletes into DeleteFilter::ComputeAliveRows.\n\nPuffin writer convenience:\n- PuffinWriter::Make now fills a default `created-by` property when the\ncaller does not provide one, matching the Java writer.\n\nBehavior matches the Java implementation (BaseDVFileWriter /\nBaseDeleteLoader /\nBitmapPositionDeleteIndex): magic, byte order, CRC coverage, blob\nfields, RLE and the read-side validations are all aligned.\n\nTests:\n- DV blob framing round-trip and error cases (bad magic, corrupted CRC,\n  truncated blob, size mismatch).\n- DeletionVectorWriter -\u003e DeleteLoader write/read round trip and guard\ncases.\n- delete_loader: load DV, referenced-file filtering, cardinality\nmismatch,\n  mixed DV + position-delete loading.\n- delete_filter: end-to-end ComputeAliveRows filtering with a real\nPuffin DV  file over Arrow FileIO.\n- PuffinWriter created-by default and caller-precedence.\n\nNot included (deletion-vector upper layer, follow-up): merging with\npreviously written DVs (compaction), the bulk delete(PositionDeleteIndex)\nAPI, and per-data-file partition/spec in a single DV file.\n\n---------\n\nCo-authored-by: xuan.zhao \u003cxuan.zhao@clickzetta.com\u003e\nCo-authored-by: Gang Wu \u003custcwg@gmail.com\u003e"
    },
    {
      "commit": "fee18845357aefa570f3aa067061eb204ea33873",
      "tree": "0f68ceee5417ac4ac6e5369106255ee2d4a88733",
      "parents": [
        "0825f56c4f9dd535487aba292e99c053570f8d8b"
      ],
      "author": {
        "name": "Abanoub Doss",
        "email": "abanoubdoss@gmail.com",
        "time": "Tue Jul 14 00:36:12 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 13:36:12 2026 +0800"
      },
      "message": "ci: build Windows test leg in Debug (#806)\n\n## What\nLet the CMake CI scripts use `ICEBERG_BUILD_TYPE` and default to\n`Debug`, including on Windows. MSVC builds with debug info now use\nembedded `/Z7` debug info through `CMP0141` and\n`CMAKE_MSVC_DEBUG_INFORMATION_FORMAT` so Debug objects remain cacheable\nby sccache.\n\nThe build scripts also use the same single-config Ninja build path on\nevery platform. Since these jobs pass `-G Ninja`, `CMAKE_BUILD_TYPE`\ncontrols the build and `--config Release` / `ctest -C Release` were not\nneeded.\n\n## Why\nWindows was the only main `Test` workflow leg still forcing the helper\nscripts through `Release`. After this change, the helper-script CMake\ntest jobs default to `Debug` on pull requests and `main`;\n`ICEBERG_BUILD_TYPE` remains available if the project wants an override.\nRelease verification and the SQL Catalog workflow\u0027s explicit Windows\n`Release` matrix entry are unchanged.\n\nThe original Windows Debug blocker in #39 was an `IMPORTED_LOCATION`\nfailure from a multi-config CMake path. That specific failure no longer\napplies because the helper scripts now use Ninja single-config builds.\nThe remaining Debug-only blocker was MSVC rejecting a `constexpr static\nPartitionValues` test helper: `PartitionValues` owns a `std::vector`,\nand MSVC Debug\u0027s checked-iterator mode (`_ITERATOR_DEBUG_LEVEL !\u003d 0`)\nmakes that construction fail constant evaluation. This PR constructs the\nempty `PartitionValues` at the call site instead.\n\nThis follows the CI direction discussed in #799.\n\n## Validation\nFork validation passed:\n\n- `Test / AMD64 Windows 2025` passed in 23m48s on the pull-request run:\nhttps://github.com/abnobdoss/iceberg-cpp/actions/runs/28638474339/job/84929642907\n- `SQL Catalog / AMD64 Windows 2025` passed in 4m13s:\nhttps://github.com/abnobdoss/iceberg-cpp/actions/runs/28638474303/job/84929643407\n- `Meson / AMD64 Windows 2025` passed in 3m21s:\nhttps://github.com/abnobdoss/iceberg-cpp/actions/runs/28638474339/job/84929642897\n\nThe Windows Debug test job reported 45% sccache hits, 385 hits, 477\nmisses, and 0 errors. The first post-merge Apache `main` run will reseed\nWindows cache entries because the previous entries were built from\nRelease objects.\n\nCloses #39.\n\n---------\n\nCo-authored-by: Abanoub Doss \u003cabanoub.doss@gmail.com\u003e"
    },
    {
      "commit": "0825f56c4f9dd535487aba292e99c053570f8d8b",
      "tree": "9eb37f85d76d7484ce357c8e4f26857a67c510a5",
      "parents": [
        "2191844e14f4efd3d6ee9bf5d0db835e218c1ffd"
      ],
      "author": {
        "name": "Abanoub Doss",
        "email": "abanoubdoss@gmail.com",
        "time": "Sat Jul 11 21:16:48 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 12 10:16:48 2026 +0800"
      },
      "message": "ci: retry build dir cleanup on Windows (#807)\n\n## What\nRetry `rm -rf` cleanup in the CMake CI helper scripts. Windows can\nbriefly keep a just-built executable or DLL open, which can make cleanup\nfail even after the build and tests have passed.\n\n`build_example.sh` retries before configuring and still lets `mkdir`\nfail if the directory remains, so it will not build in a half-deleted\ntree. `build_iceberg.sh` retries after the build and does not fail an\notherwise successful job if final cleanup is still blocked.\n\n---------\n\nCo-authored-by: Abanoub Doss \u003cabanoub.doss@gmail.com\u003e"
    },
    {
      "commit": "2191844e14f4efd3d6ee9bf5d0db835e218c1ffd",
      "tree": "0f0c58f04f321beab82755c5186f2f9587cbc82b",
      "parents": [
        "263795e9288fe4421c9248888ddd16aba677b8a4"
      ],
      "author": {
        "name": "Anupam Yadav",
        "email": "anupamy030@gmail.com",
        "time": "Sat Jul 11 18:50:58 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 12 09:50:58 2026 +0800"
      },
      "message": "build: enable clang-tidy misc-include-cleaner for include hygiene (#820)"
    },
    {
      "commit": "263795e9288fe4421c9248888ddd16aba677b8a4",
      "tree": "7a8c1929f0e99b52cb606c7f7c3a59ed40d3b076",
      "parents": [
        "755799d1ba4ae3d63ffa01cb7152cc796ed3ef52"
      ],
      "author": {
        "name": "Timothy Wang",
        "email": "timothy.art@gmail.com",
        "time": "Sat Jul 11 18:39:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 12 09:39:30 2026 +0800"
      },
      "message": "build: add benchmark build scaffolding (#825)\n\n## Summary\n\nAdds an opt-in benchmark build path so future C++ microbenchmarks can\nlive in-tree without affecting normal builds. Benchmarks stay disabled\nby default, and this PR keeps the executable intentionally small so\nreviewers can focus on CMake/Meson wiring and Google Benchmark\nintegration.\n\n- Adds `ICEBERG_BUILD_BENCHMARKS` for CMake and a disabled-by-default\n`benchmarks` Meson feature.\n- Wires `src/iceberg/benchmark` into both build systems.\n- Adds Google Benchmark dependency setup for CMake and Meson.\n- Adds a tiny smoke benchmark so the new target is buildable in\nisolation.\n\nPart of #690.\n\n## Stack\n\nThis is PR 1 of 2.\n\nPR 2 adds the actual metrics evaluator benchmark cases on top of this\nscaffolding: timothyw553/iceberg-cpp#1.\n\n## Test Plan\n\n- [x] Configured benchmark-enabled CMake build with\n`-DICEBERG_BUILD_BENCHMARKS\u003dON`.\n- [x] Built `metrics_evaluator_benchmark` on this branch.\n- [x] Ran the smoke benchmark with `--benchmark_min_time\u003d0.01s`.\n- [x] Re-ran the default build and test suite on the top of the stack:\n18/18 tests passed.\n- [ ] Meson wiring is syntax-reviewed but not locally executed because\n`meson` is not installed in this shell.\n\n## Verification Commands\n\n```bash\ncmake -S . -B build-bench-stack -G Ninja \\\n  -DFETCHCONTENT_TRY_FIND_PACKAGE_MODE\u003dNEVER \\\n  -DCMAKE_IGNORE_PREFIX_PATH\u003d/opt/homebrew/anaconda3 \\\n  -DCMAKE_PREFIX_PATH\u003d\u0027/opt/homebrew/opt/snappy;/opt/homebrew/opt/zstd\u0027 \\\n  -DICEBERG_BUILD_BENCHMARKS\u003dON\ncmake --build build-bench-stack --target metrics_evaluator_benchmark\nbuild-bench-stack/src/iceberg/benchmark/metrics_evaluator_benchmark --benchmark_min_time\u003d0.01s\ncmake --build build\nctest --test-dir build --output-on-failure\n```"
    },
    {
      "commit": "755799d1ba4ae3d63ffa01cb7152cc796ed3ef52",
      "tree": "1932116ffeb95e28d9974b79b78a1a725eab9e51",
      "parents": [
        "aa36d3584917deb267a47014b9556f07b8eae47e"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Sun Jul 12 00:04:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 12 00:04:02 2026 +0800"
      },
      "message": "refactor: use decimal high and low for Arrow scalar (#803)"
    },
    {
      "commit": "aa36d3584917deb267a47014b9556f07b8eae47e",
      "tree": "d7286c2539e2141d34b916cc17d607983c816b67",
      "parents": [
        "62e1bd8ed5e1ba58b86f8630d10be7cf2ecbb908"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Sat Jul 11 17:42:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 17:42:26 2026 +0800"
      },
      "message": "ci: add RelWithDebInfo build and fix free-nonheap-object error (#812)\n\nAdding a RelWithDebInfo build revealed a build error. This PR fixes the\nissue.\n\n```\nerror: ‘void operator delete(void*, std::size_t)’ called on a pointer to an unallocated object ‘1’ [-Werror\u003dfree-nonheap-object]\n```"
    },
    {
      "commit": "62e1bd8ed5e1ba58b86f8630d10be7cf2ecbb908",
      "tree": "b725d981de7f8e98472d31636b1638c21b6d89e8",
      "parents": [
        "3d5af4751f6b74e3cb588b95c464e69a520b8180"
      ],
      "author": {
        "name": "Xin Huang",
        "email": "42597328+huan233usc@users.noreply.github.com",
        "time": "Sat Jul 11 00:32:58 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 15:32:58 2026 +0800"
      },
      "message": "feat: support v3 column default values in UpdateSchema (#793)\n\n## What\n\nPart 3 of 4 of Iceberg v3 column default-value support (POC #731), built\non the\nschema-layer support merged in #746. Independent of the read-path PRs\n(#792 and\nthe Avro follow-up).\n\nAdds default-value handling to `UpdateSchema` (schema evolution).\n\n## Changes\n\n- **`AddColumn` / `AddRequiredColumn`** take an optional\n`default_value`. When\nprovided it is set as both the column\u0027s `initial-default` and\n`write-default`.\n  A non-null default also lets a required column be added without\n`AllowIncompatibleChanges()` — rows written before the change read the\ndefault\n  instead of null.\n- **`UpdateColumnDefault(name, default)`** (new) sets, or clears with\n`std::nullopt`, a column\u0027s `write-default`; the `initial-default` is\nfixed when\n  the column is added.\n- Defaults are **cast to the column type** (rejecting uncastable or\nout-of-range\nvalues) and **preserved** across rename / doc / type-promotion updates\nand\n  nested field-id reassignment.\n- `RequireColumn` may now mark a column that was added with a default\nrequired.\n\nThe `SchemaField` constructor stores defaults verbatim (it does not\ncoerce\nthem), so the cast/promotion is performed explicitly at each evolution\nsite —\nthe same effect as Java, where `NestedField`\u0027s constructor runs\n`castDefault`.\nSame-scale decimal precision widening is handled directly (the unscaled\nvalue is\nunchanged), since `Literal::CastTo` does not cast between decimal types.\n\n## Tests\n\n13 cases in `update_schema_test.cc`: add optional/required/nested column\nwith a\ndefault, mismatched/narrowing rejection, `UpdateColumnDefault`\n(set / clear / cast-to-type / pre-existing column),\nrequire-after-default, and\npreservation across doc updates and type promotion — including\nsame-scale\ndecimal precision promotion.\n\n## Stack\n\n1. #746 — schema: represent / serialize / validate (merged)\n2. #792 — read path: Parquet\n3. read path: Avro (follows)\n4. **this PR** — schema evolution: `addColumn` / `updateColumnDefault`"
    },
    {
      "commit": "3d5af4751f6b74e3cb588b95c464e69a520b8180",
      "tree": "8d3aeba6392c28e20d4ba7589e209cf5bd0775e5",
      "parents": [
        "a45bce6326101bc13f80c89912d86b2e8e0b6621"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Sat Jul 11 15:31:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 15:31:28 2026 +0800"
      },
      "message": "fix: return error for reserved property keys in UpdateProperties::Set() (#817)\n\nPreviously, reserved table properties (except `format-version`) were\nsilently ignored when set via `UpdateProperties::Set()`. This caused\nundetected configuration drift compared to Java, which throws exceptions\nfor such attempts.\n\nNow attempts to set reserved properties accumulate a validation error\nvia `ICEBERGER_BUILDER_CHECK`, surfaced at `Apply()` time. This matches\nJava\u0027s loud-failure behavior."
    },
    {
      "commit": "a45bce6326101bc13f80c89912d86b2e8e0b6621",
      "tree": "87cdb53513b7d0c29f8f28142ac38a4990a92014",
      "parents": [
        "b4737dfd9da028fd82f3a5f2ff6aa66ded0660f7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Jul 11 14:46:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 14:46:30 2026 +0800"
      },
      "message": "chore(deps): bump the codeql-action group with 2 updates (#827)\n\nBumps the codeql-action 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.36.2 to 4.36.3\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.36.3\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\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/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\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\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\u003ch2\u003e4.36.1 - 02 Jun 2026\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.36.0 - 22 May 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eBreaking change\u003c/em\u003e: Bump the minimum required CodeQL bundle\nversion to 2.19.4. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3894\"\u003e#3894\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for SHA-256 Git object IDs. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3893\"\u003e#3893\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.5\"\u003e2.25.5\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3926\"\u003e#3926\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.5 - 15 May 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWe have improved how the JavaScript bundles for the CodeQL Action\nare generated to avoid duplication across bundles and reduce the size of\nthe repository by around 70%. This should have no effect on the runtime\nbehaviour of the CodeQL Action. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3899\"\u003e#3899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFor performance and accuracy reasons, \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e will now only be enabled on a pull request when\ndiff-informed analysis is also enabled for that run. If diff-informed\nanalysis is unavailable (for example, because the PR diff ranges could\nnot be computed), the action will fall back to a full analysis. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3791\"\u003e#3791\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIf multiple inputs are provided for the GitHub-internal\n\u003ccode\u003eanalysis-kinds\u003c/code\u003e input, only \u003ccode\u003ecode-scanning\u003c/code\u003e will\nbe enabled. The \u003ccode\u003eanalysis-kinds\u003c/code\u003e input is experimental, for\nGitHub-internal use only, and may change without notice at any time. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3892\"\u003e#3892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded an experimental change which, when running a Code Scanning\nanalysis for a PR with \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e enabled, prefers CodeQL CLI versions that have\na cached overlay-base database for the configured languages. This speeds\nup analysis for a repository when there is not yet a cached overlay-base\ndatabase for the latest CLI version. We expect to roll this change out\nto everyone in May. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3880\"\u003e#3880\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.4 - 07 May 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.25.4\"\u003e2.25.4\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3881\"\u003e#3881\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.3 - 01 May 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.19.3 and earlier. These versions of\nCodeQL were discontinued on 9 April 2026 alongside GitHub Enterprise\nServer 3.15, and will be unsupported by the next minor release of the\nCodeQL Action. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3837\"\u003e#3837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConfigurations for private registries that use Cloudsmith or GCP\nOIDC are now accepted. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3850\"\u003e#3850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBest-effort connection tests for private registries now use\n\u003ccode\u003eGET\u003c/code\u003e requests instead of \u003ccode\u003eHEAD\u003c/code\u003e for better\ncompatibility with various registry implementations. For NuGet feeds,\nthe test is now always performed against the service index. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3853\"\u003e#3853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed a bug where two diagnostics produced within the same\nmillisecond could overwrite each other on disk, causing one of them to\nbe lost. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3852\"\u003e#3852\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/54f647b7e1bb85c95cddabcd46b0c578ec92bc1a\"\u003e\u003ccode\u003e54f647b\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3984\"\u003e#3984\u003c/a\u003e\nfrom github/update-v4.36.3-1f34ec164\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/e78819e05527766c3c5919e3177647e280c6cb83\"\u003e\u003ccode\u003ee78819e\u003c/code\u003e\u003c/a\u003e\nTrigger checks\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/2c9d3d63eb4941734e2d29468953529a56f5ff1c\"\u003e\u003ccode\u003e2c9d3d6\u003c/code\u003e\u003c/a\u003e\nUpdate changelog for v4.36.3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/1f34ec16430d82636d18716acc7aaa6d843b35a9\"\u003e\u003ccode\u003e1f34ec1\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3983\"\u003e#3983\u003c/a\u003e\nfrom github/mbg/repo-props/ff-for-config-file-prop\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/d5f0145480025b49d8b08c3f6b36e6ad41a68c90\"\u003e\u003ccode\u003ed5f0145\u003c/code\u003e\u003c/a\u003e\nLog when repository property has a value but is ignored\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/f27f56386a3c745af8d7bbfb806098c714a5e32a\"\u003e\u003ccode\u003ef27f563\u003c/code\u003e\u003c/a\u003e\nAdd test for when the FF is off\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/0025d0f2b5676fde748a0be9725dcce18dd9f986\"\u003e\u003ccode\u003e0025d0f\u003c/code\u003e\u003c/a\u003e\nUse FF\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/f7fa18f05d107ff6735857c3510fbff190c9a1eb\"\u003e\u003ccode\u003ef7fa18f\u003c/code\u003e\u003c/a\u003e\nAdd FF for config file repo property\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/628fc3f124e68b0151f0d2a5d81e864ee1e42335\"\u003e\u003ccode\u003e628fc3f\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3979\"\u003e#3979\u003c/a\u003e\nfrom github/henrymercer/overlay-db-cleanup-size-tele...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/9cfb67bab9b32441237f92d4ba29a7f3ccff259f\"\u003e\u003ccode\u003e9cfb67b\u003c/code\u003e\u003c/a\u003e\nAdd clarifying comments\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/github/codeql-action/compare/8aad20d150bbac5944a9f9d289da16a4b0d87c1e...54f647b7e1bb85c95cddabcd46b0c578ec92bc1a\"\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.36.2 to 4.36.3\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.36.3\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\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/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\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\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\u003ch2\u003e4.36.1 - 02 Jun 2026\u003c/h2\u003e\n\u003cp\u003eNo user facing changes.\u003c/p\u003e\n\u003ch2\u003e4.36.0 - 22 May 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cem\u003eBreaking change\u003c/em\u003e: Bump the minimum required CodeQL bundle\nversion to 2.19.4. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3894\"\u003e#3894\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for SHA-256 Git object IDs. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3893\"\u003e#3893\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.5\"\u003e2.25.5\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3926\"\u003e#3926\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.5 - 15 May 2026\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWe have improved how the JavaScript bundles for the CodeQL Action\nare generated to avoid duplication across bundles and reduce the size of\nthe repository by around 70%. This should have no effect on the runtime\nbehaviour of the CodeQL Action. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3899\"\u003e#3899\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFor performance and accuracy reasons, \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e will now only be enabled on a pull request when\ndiff-informed analysis is also enabled for that run. If diff-informed\nanalysis is unavailable (for example, because the PR diff ranges could\nnot be computed), the action will fall back to a full analysis. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3791\"\u003e#3791\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eIf multiple inputs are provided for the GitHub-internal\n\u003ccode\u003eanalysis-kinds\u003c/code\u003e input, only \u003ccode\u003ecode-scanning\u003c/code\u003e will\nbe enabled. The \u003ccode\u003eanalysis-kinds\u003c/code\u003e input is experimental, for\nGitHub-internal use only, and may change without notice at any time. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3892\"\u003e#3892\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded an experimental change which, when running a Code Scanning\nanalysis for a PR with \u003ca\nhref\u003d\"https://redirect.github.com/github/roadmap/issues/1158\"\u003eimproved\nincremental analysis\u003c/a\u003e enabled, prefers CodeQL CLI versions that have\na cached overlay-base database for the configured languages. This speeds\nup analysis for a repository when there is not yet a cached overlay-base\ndatabase for the latest CLI version. We expect to roll this change out\nto everyone in May. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3880\"\u003e#3880\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.4 - 07 May 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.25.4\"\u003e2.25.4\u003c/a\u003e.\n\u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3881\"\u003e#3881\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e4.35.3 - 01 May 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.19.3 and earlier. These versions of\nCodeQL were discontinued on 9 April 2026 alongside GitHub Enterprise\nServer 3.15, and will be unsupported by the next minor release of the\nCodeQL Action. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3837\"\u003e#3837\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eConfigurations for private registries that use Cloudsmith or GCP\nOIDC are now accepted. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3850\"\u003e#3850\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBest-effort connection tests for private registries now use\n\u003ccode\u003eGET\u003c/code\u003e requests instead of \u003ccode\u003eHEAD\u003c/code\u003e for better\ncompatibility with various registry implementations. For NuGet feeds,\nthe test is now always performed against the service index. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3853\"\u003e#3853\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed a bug where two diagnostics produced within the same\nmillisecond could overwrite each other on disk, causing one of them to\nbe lost. \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/pull/3852\"\u003e#3852\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/54f647b7e1bb85c95cddabcd46b0c578ec92bc1a\"\u003e\u003ccode\u003e54f647b\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3984\"\u003e#3984\u003c/a\u003e\nfrom github/update-v4.36.3-1f34ec164\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/e78819e05527766c3c5919e3177647e280c6cb83\"\u003e\u003ccode\u003ee78819e\u003c/code\u003e\u003c/a\u003e\nTrigger checks\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/2c9d3d63eb4941734e2d29468953529a56f5ff1c\"\u003e\u003ccode\u003e2c9d3d6\u003c/code\u003e\u003c/a\u003e\nUpdate changelog for v4.36.3\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/1f34ec16430d82636d18716acc7aaa6d843b35a9\"\u003e\u003ccode\u003e1f34ec1\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3983\"\u003e#3983\u003c/a\u003e\nfrom github/mbg/repo-props/ff-for-config-file-prop\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/d5f0145480025b49d8b08c3f6b36e6ad41a68c90\"\u003e\u003ccode\u003ed5f0145\u003c/code\u003e\u003c/a\u003e\nLog when repository property has a value but is ignored\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/f27f56386a3c745af8d7bbfb806098c714a5e32a\"\u003e\u003ccode\u003ef27f563\u003c/code\u003e\u003c/a\u003e\nAdd test for when the FF is off\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/0025d0f2b5676fde748a0be9725dcce18dd9f986\"\u003e\u003ccode\u003e0025d0f\u003c/code\u003e\u003c/a\u003e\nUse FF\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/f7fa18f05d107ff6735857c3510fbff190c9a1eb\"\u003e\u003ccode\u003ef7fa18f\u003c/code\u003e\u003c/a\u003e\nAdd FF for config file repo property\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/628fc3f124e68b0151f0d2a5d81e864ee1e42335\"\u003e\u003ccode\u003e628fc3f\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/github/codeql-action/issues/3979\"\u003e#3979\u003c/a\u003e\nfrom github/henrymercer/overlay-db-cleanup-size-tele...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/github/codeql-action/commit/9cfb67bab9b32441237f92d4ba29a7f3ccff259f\"\u003e\u003ccode\u003e9cfb67b\u003c/code\u003e\u003c/a\u003e\nAdd clarifying comments\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/github/codeql-action/compare/8aad20d150bbac5944a9f9d289da16a4b0d87c1e...54f647b7e1bb85c95cddabcd46b0c578ec92bc1a\"\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": "b4737dfd9da028fd82f3a5f2ff6aa66ded0660f7",
      "tree": "3ab273ed0df29aa517ba2116cbd3891f5940c91b",
      "parents": [
        "4c906d1d631fbc9907b3b0d0c7dbf0bebb90e41b"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Sat Jul 11 10:33:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 10:33:13 2026 +0800"
      },
      "message": "fix: generate public API docs correctly (#804)"
    },
    {
      "commit": "4c906d1d631fbc9907b3b0d0c7dbf0bebb90e41b",
      "tree": "36c2070ceec78b3384c6489cf2ac76eb1548fd3c",
      "parents": [
        "ebc0e07c98b1771cbe46879507163c0d3cd40256"
      ],
      "author": {
        "name": "Rahul Goel",
        "email": "goel.rahul4200@gmail.com",
        "time": "Fri Jul 10 22:30:38 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 10:30:38 2026 +0800"
      },
      "message": "feat: make ToLower Unicode-aware via utf8proc (#760)\n\nReplaces the ASCII-only `StringUtils::ToLower` with a Unicode-aware\nimplementation backed by\n[utf8proc](https://github.com/JuliaStrings/utf8proc), aligning\ncase-insensitive name handling with Iceberg Java\u0027s\n`toLowerCase(Locale.ROOT)` for simple (1:1) case mappings. The few code\npoints where simple and full case mapping differ (e.g. `İ` U+0130) are\ntracked in #808.\n\n- `ToLower` lower-cases UTF-8 using utf8proc simple (1:1) case mapping\n(e.g. `CAFÉ` → `café`, `GROẞE` → `große`). Pure-ASCII input takes a\nbyte-wise fast path and never touches utf8proc.\n- Invalid UTF-8 is handled as a correctness guarantee (raised in\nreview): `ToLower` is total — a byte that does not begin a valid UTF-8\nsequence is passed through unchanged and decoding resumes at the next\nbyte, so the valid code points around it are still lower-cased. The\ncomparisons below therefore compare invalid bytes verbatim.\n- `EqualsIgnoreCase` and `StartsWithIgnoreCase` fold through `ToLower`,\nso they are case-insensitive for non-ASCII letters too. Both take an\nallocation-free ASCII fast path and fall back to `ToLower` only when a\nnon-ASCII byte is present.\n- `StartsWithIgnoreCase` no longer assumes case mapping preserves byte\nlength — the old byte-slice guard mishandled length-changing maps (e.g.\n`İ` U+0130 → `i`). Now `\"İx\"` starts with `\"i\"`, and `\"i\"` starts with\n`\"İ\"`.\n- `ToUpper` is intentionally left ASCII-only — it only normalizes ASCII\nenum/codec strings, and simple case mapping would be wrong for some\nletters (e.g. `ß` would stay unchanged instead of becoming `SS`).\n- utf8proc is pinned to 2.10.0 and wired into both the CMake (vendored\nvia FetchContent / system package) and Meson\n(`subprojects/utf8proc.wrap`) builds, with matching source hashes and\ncorrect static-vs-shared linkage on Windows.\n\n## Testing\n\n- `string_util_test.cc`: `ToLowerUnicode` (incl. invalid / truncated /\nstray-continuation bytes), `ToUpperAsciiOnly`, and Unicode +\ninvalid-UTF-8 cases for `EqualsIgnoreCase` / `StartsWithIgnoreCase`.\n- `IgnoreCaseAgreesWithToLowerOracle` exhaustively checks both ASCII\nfast paths against the `ToLower` oracle over all short strings drawn\nfrom an alphabet with length-changing maps (`İ`→`i`, `K`→`k`) and\ninvalid UTF-8.\n\n## Remaining work (tracked in #808)\n\n- Full case-mapping parity with Java for the code points where simple ≠\nfull mapping (e.g. `İ` → `i̇`).\n- A streaming (allocation-free) non-ASCII path for `EqualsIgnoreCase` /\n`StartsWithIgnoreCase`.\n\nPart of #613 — does not fully fix it; #808 holds the design and\nremaining plan.\nFollow-up to #748."
    },
    {
      "commit": "ebc0e07c98b1771cbe46879507163c0d3cd40256",
      "tree": "4988e3fec76b710dbe7dceabe96d8de207751b88",
      "parents": [
        "f4f6359fa9a95bde4bb2627bd8a5d45273644294"
      ],
      "author": {
        "name": "Yuya Ebihara",
        "email": "ebyhry@gmail.com",
        "time": "Sat Jul 11 11:24:26 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 10:24:26 2026 +0800"
      },
      "message": "Infra: Group github/codeql-action bumps into a single dependabot PR (#826)\n\nThus, dependabot can update these two jobs in a single PR:\n\n\nhttps://github.com/apache/iceberg-cpp/blob/f4f6359fa9a95bde4bb2627bd8a5d45273644294/.github/workflows/codeql.yml#L56-L62\n\n- https://github.com/apache/infrastructure-actions/pull/1028"
    },
    {
      "commit": "f4f6359fa9a95bde4bb2627bd8a5d45273644294",
      "tree": "32911c3a9daa1e92b205c3669ad0d7cb3c353d77",
      "parents": [
        "5d31dee04533b8f46709a157e100d084605a5354"
      ],
      "author": {
        "name": "Anupam Yadav",
        "email": "anupamy030@gmail.com",
        "time": "Mon Jul 06 23:13:50 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 14:13:50 2026 +0800"
      },
      "message": "build: scope warnings-as-error to project targets, not FetchContent subprojects (#819)\n\n## What\n\nFixes #246. `-Werror` (via a global `CMAKE_COMPILE_WARNING_AS_ERROR`)\nleaked into FetchContent-built dependencies, so a warning in a\nthird-party subproject (e.g. Arrow) could fail the whole build. As noted\non the issue, the global flag does not reliably isolate subprojects.\n\n## How\n- Removed the global `CMAKE_COMPILE_WARNING_AS_ERROR ON`.\n- Set `COMPILE_WARNING_AS_ERROR ON` as a per-target property on\nIceberg\u0027s own shared/static libraries, so the project stays strict.\n- Set `BUILD_WARNING_LEVEL PRODUCTION` for Arrow to suppress its\nindependent `-Werror` injection.\n- Kept a defensive guard in `prepare_fetchcontent()` for the case where\n`-DCMAKE_COMPILE_WARNING_AS_ERROR\u003dON` is passed on the command line.\n\n## Verified\nIceberg targets still compile with `-Werror`; FetchContent subprojects\ndo not. Build + tests green (18/18).\n\n---\nThis contribution was authored with assistance from Claude Opus 4.8, in\nline with the Iceberg guidelines for AI-assisted contributions\n(https://iceberg.apache.org/contribute/#guidelines-for-ai-assisted-contributions).\nAll changes were reviewed and tested by the author."
    },
    {
      "commit": "5d31dee04533b8f46709a157e100d084605a5354",
      "tree": "db02891603ca7e94ff2415666c06b8f649205df6",
      "parents": [
        "fce18ea53d16cea2ecfb26255320050b0ce6f6d8"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Tue Jul 07 13:44:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 13:44:19 2026 +0800"
      },
      "message": "refactor: move typed arrow Append helpers to ArrowRowBuilder (#821)\n\nMove AppendUInt, AppendDouble, AppendBytes, AppendIntList (2 overloads),\nAppendIntMap, and AppendBinaryMap from the anonymous namespace in\nmanifest_adapter.cc to ArrowRowBuilder, the central home for typed\nnanoarrow append helpers. Remove the duplicate implementations and\nupdate all call sites in ManifestEntryAdapter, ManifestFileAdapter, and\ntheir nested methods to use the ArrowRowBuilder helpers."
    },
    {
      "commit": "fce18ea53d16cea2ecfb26255320050b0ce6f6d8",
      "tree": "3ef5c42928a0af355ab7de529357ef1c6175ae54",
      "parents": [
        "c3bc6461a7cbc139b72d33230046b089d2f243da"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 06 11:10:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 11:10:00 2026 +0800"
      },
      "message": "chore(deps): bump actions/cache/save from 5.0.5 to 6.1.0 (#816)\n\nBumps [actions/cache/save](https://github.com/actions/cache) from 5.0.5\nto 6.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/cache/releases\"\u003eactions/cache/save\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v6.1.0 - handle read-only cache\naccess by \u003ca\nhref\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1768\"\u003eactions/cache#1768\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v6...v6.1.0\"\u003ehttps://github.com/actions/cache/compare/v6...v6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate packages, migrate to ESM by \u003ca\nhref\u003d\"https://github.com/Samirat\"\u003e\u003ccode\u003e@​Samirat\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1760\"\u003eactions/cache#1760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v6.0.0\"\u003ehttps://github.com/actions/cache/compare/v5...v6.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v5.1.0 - handle read-only cache\naccess by \u003ca\nhref\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1775\"\u003eactions/cache#1775\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v5.1.0\"\u003ehttps://github.com/actions/cache/compare/v5...v5.1.0\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/actions/cache/blob/main/RELEASES.md\"\u003eactions/cache/save\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eReleases\u003c/h1\u003e\n\u003ch2\u003eHow to prepare a release\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nRelevant for maintainers with write access only.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003col\u003e\n\u003cli\u003eSwitch to a new branch from \u003ccode\u003emain\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003enpm test\u003c/code\u003e to ensure all tests are passing.\u003c/li\u003e\n\u003cli\u003eUpdate the version in \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/package.json\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/package.json\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003enpm run build\u003c/code\u003e to update the compiled files.\u003c/li\u003e\n\u003cli\u003eUpdate this \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/RELEASES.md\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/RELEASES.md\u003c/code\u003e\u003c/a\u003e\nwith the new version and changes in the \u003ccode\u003e## Changelog\u003c/code\u003e\nsection.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003elicensed cache\u003c/code\u003e to update the license report.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003elicensed status\u003c/code\u003e and resolve any warnings by\nupdating the \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/.licensed.yml\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/.licensed.yml\u003c/code\u003e\u003c/a\u003e\nfile with the exceptions.\u003c/li\u003e\n\u003cli\u003eCommit your changes and push your branch upstream.\u003c/li\u003e\n\u003cli\u003eOpen a pull request against \u003ccode\u003emain\u003c/code\u003e and get it reviewed\nand merged.\u003c/li\u003e\n\u003cli\u003eDraft a new release \u003ca\nhref\u003d\"https://github.com/actions/cache/releases\"\u003ehttps://github.com/actions/cache/releases\u003c/a\u003e\nuse the same version number used in \u003ccode\u003epackage.json\u003c/code\u003e\n\u003col\u003e\n\u003cli\u003eCreate a new tag with the version number.\u003c/li\u003e\n\u003cli\u003eAuto generate release notes and update them to match the changes you\nmade in \u003ccode\u003eRELEASES.md\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eToggle the set as the latest release option.\u003c/li\u003e\n\u003cli\u003ePublish the release.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003eNavigate to \u003ca\nhref\u003d\"https://github.com/actions/cache/actions/workflows/release-new-action-version.yml\"\u003ehttps://github.com/actions/cache/actions/workflows/release-new-action-version.yml\u003c/a\u003e\n\u003col\u003e\n\u003cli\u003eThere should be a workflow run queued with the same version\nnumber.\u003c/li\u003e\n\u003cli\u003eApprove the run to publish the new version and update the major tags\nfor this action.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003ch3\u003e6.1.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v6.1.0 to pick up \u003ca\nhref\u003d\"https://redirect.github.com/actions/toolkit/pull/2435\"\u003eactions/toolkit#2435\nHandle cache write error due to read-only token\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSwitch redundant \u0026quot;Cache save failed\u0026quot; warning to debug log\nin save-only\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e6.0.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated \u003ccode\u003e@actions/cache\u003c/code\u003e to ^6.0.1,\n\u003ccode\u003e@actions/core\u003c/code\u003e to ^3.0.1, \u003ccode\u003e@actions/exec\u003c/code\u003e to\n^3.0.0, \u003ccode\u003e@actions/io\u003c/code\u003e to ^3.0.2\u003c/li\u003e\n\u003cli\u003eMigrated to ESM module system\u003c/li\u003e\n\u003cli\u003eUpgraded Jest to v30 and test infrastructure to be ESM\ncompatible\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.4\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003eminimatch\u003c/code\u003e to v3.1.5 (fixes ReDoS via globstar\npatterns)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003eundici\u003c/code\u003e to v6.24.1 (WebSocket decompression bomb\nprotection, header validation fixes)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003efast-xml-parser\u003c/code\u003e to v5.5.6\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.3\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v5.0.5 (Resolves: \u003ca\nhref\u003d\"https://github.com/actions/cache/security/dependabot/33\"\u003ehttps://github.com/actions/cache/security/dependabot/33\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/core\u003c/code\u003e to v2.0.3\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.2\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/55cc8345863c7cc4c66a329aec7e433d2d1c52a9\"\u003e\u003ccode\u003e55cc834\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/issues/1768\"\u003e#1768\u003c/a\u003e\nfrom jasongin/readonly-cache\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/d8cd72f230726cdf4457ebb61ec1b593a8d12337\"\u003e\u003ccode\u003ed8cd72f\u003c/code\u003e\u003c/a\u003e\nBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v6.1.0 - handle cache write error\ndue to RO token\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/2c8a9bd7457de244a408f35966fab2fb45fda9c8\"\u003e\u003ccode\u003e2c8a9bd\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/issues/1760\"\u003e#1760\u003c/a\u003e\nfrom actions/samirat/esm_migration_and_package_update\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e9b91fdc3fea7d79165fceb79042ef45c2d51023\"\u003e\u003ccode\u003ee9b91fd\u003c/code\u003e\u003c/a\u003e\nPrettier fixes\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e4884b8ff7f92ef6b52c79eda480bbc86e685adb\"\u003e\u003ccode\u003ee4884b8\u003c/code\u003e\u003c/a\u003e\nRebuild dist\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/10baf0191a3c426ea0fa4a3253a5c04233b6e18f\"\u003e\u003ccode\u003e10baf01\u003c/code\u003e\u003c/a\u003e\nFixed licenses\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e39b386c9004d72a15d864ade8c0b3a702d47a37\"\u003e\u003ccode\u003ee39b386\u003c/code\u003e\u003c/a\u003e\nFix test mock return order\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/b6928203372a8571ff984c0c883ef3a1adfb0c06\"\u003e\u003ccode\u003eb692820\u003c/code\u003e\u003c/a\u003e\nPR feedback\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/60749128a44d25d3c520a489e576380cf00ff3f1\"\u003e\u003ccode\u003e6074912\u003c/code\u003e\u003c/a\u003e\nRebuild dist bundles as ESM to match type:module\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/5a912e8b4af820fa082a0e75cfd2c782f8fbfe0e\"\u003e\u003ccode\u003e5a912e8\u003c/code\u003e\u003c/a\u003e\nFix lint and jest issues\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/27d5ce7f107fe9357f9df03efb73ab90386fccae...55cc8345863c7cc4c66a329aec7e433d2d1c52a9\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/cache/save\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d5.0.5\u0026new-version\u003d6.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": "c3bc6461a7cbc139b72d33230046b089d2f243da",
      "tree": "92894d37f81e6093274502ac4fc12c090c1cd865",
      "parents": [
        "d068a813fcd01eb596a1366a628bc8276dba01da"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 06 11:09:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 11:09:50 2026 +0800"
      },
      "message": "chore(deps): bump actions/cache/restore from 5.0.5 to 6.1.0 (#815)\n\nBumps [actions/cache/restore](https://github.com/actions/cache) from\n5.0.5 to 6.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/cache/releases\"\u003eactions/cache/restore\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v6.1.0 - handle read-only cache\naccess by \u003ca\nhref\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1768\"\u003eactions/cache#1768\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v6...v6.1.0\"\u003ehttps://github.com/actions/cache/compare/v6...v6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate packages, migrate to ESM by \u003ca\nhref\u003d\"https://github.com/Samirat\"\u003e\u003ccode\u003e@​Samirat\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1760\"\u003eactions/cache#1760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v6.0.0\"\u003ehttps://github.com/actions/cache/compare/v5...v6.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v5.1.0 - handle read-only cache\naccess by \u003ca\nhref\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1775\"\u003eactions/cache#1775\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v5.1.0\"\u003ehttps://github.com/actions/cache/compare/v5...v5.1.0\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/actions/cache/blob/main/RELEASES.md\"\u003eactions/cache/restore\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eReleases\u003c/h1\u003e\n\u003ch2\u003eHow to prepare a release\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nRelevant for maintainers with write access only.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003col\u003e\n\u003cli\u003eSwitch to a new branch from \u003ccode\u003emain\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003enpm test\u003c/code\u003e to ensure all tests are passing.\u003c/li\u003e\n\u003cli\u003eUpdate the version in \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/package.json\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/package.json\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003enpm run build\u003c/code\u003e to update the compiled files.\u003c/li\u003e\n\u003cli\u003eUpdate this \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/RELEASES.md\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/RELEASES.md\u003c/code\u003e\u003c/a\u003e\nwith the new version and changes in the \u003ccode\u003e## Changelog\u003c/code\u003e\nsection.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003elicensed cache\u003c/code\u003e to update the license report.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003elicensed status\u003c/code\u003e and resolve any warnings by\nupdating the \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/.licensed.yml\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/.licensed.yml\u003c/code\u003e\u003c/a\u003e\nfile with the exceptions.\u003c/li\u003e\n\u003cli\u003eCommit your changes and push your branch upstream.\u003c/li\u003e\n\u003cli\u003eOpen a pull request against \u003ccode\u003emain\u003c/code\u003e and get it reviewed\nand merged.\u003c/li\u003e\n\u003cli\u003eDraft a new release \u003ca\nhref\u003d\"https://github.com/actions/cache/releases\"\u003ehttps://github.com/actions/cache/releases\u003c/a\u003e\nuse the same version number used in \u003ccode\u003epackage.json\u003c/code\u003e\n\u003col\u003e\n\u003cli\u003eCreate a new tag with the version number.\u003c/li\u003e\n\u003cli\u003eAuto generate release notes and update them to match the changes you\nmade in \u003ccode\u003eRELEASES.md\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eToggle the set as the latest release option.\u003c/li\u003e\n\u003cli\u003ePublish the release.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003eNavigate to \u003ca\nhref\u003d\"https://github.com/actions/cache/actions/workflows/release-new-action-version.yml\"\u003ehttps://github.com/actions/cache/actions/workflows/release-new-action-version.yml\u003c/a\u003e\n\u003col\u003e\n\u003cli\u003eThere should be a workflow run queued with the same version\nnumber.\u003c/li\u003e\n\u003cli\u003eApprove the run to publish the new version and update the major tags\nfor this action.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003ch3\u003e6.1.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v6.1.0 to pick up \u003ca\nhref\u003d\"https://redirect.github.com/actions/toolkit/pull/2435\"\u003eactions/toolkit#2435\nHandle cache write error due to read-only token\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSwitch redundant \u0026quot;Cache save failed\u0026quot; warning to debug log\nin save-only\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e6.0.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated \u003ccode\u003e@actions/cache\u003c/code\u003e to ^6.0.1,\n\u003ccode\u003e@actions/core\u003c/code\u003e to ^3.0.1, \u003ccode\u003e@actions/exec\u003c/code\u003e to\n^3.0.0, \u003ccode\u003e@actions/io\u003c/code\u003e to ^3.0.2\u003c/li\u003e\n\u003cli\u003eMigrated to ESM module system\u003c/li\u003e\n\u003cli\u003eUpgraded Jest to v30 and test infrastructure to be ESM\ncompatible\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.4\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003eminimatch\u003c/code\u003e to v3.1.5 (fixes ReDoS via globstar\npatterns)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003eundici\u003c/code\u003e to v6.24.1 (WebSocket decompression bomb\nprotection, header validation fixes)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003efast-xml-parser\u003c/code\u003e to v5.5.6\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.3\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v5.0.5 (Resolves: \u003ca\nhref\u003d\"https://github.com/actions/cache/security/dependabot/33\"\u003ehttps://github.com/actions/cache/security/dependabot/33\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/core\u003c/code\u003e to v2.0.3\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.2\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/55cc8345863c7cc4c66a329aec7e433d2d1c52a9\"\u003e\u003ccode\u003e55cc834\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/issues/1768\"\u003e#1768\u003c/a\u003e\nfrom jasongin/readonly-cache\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/d8cd72f230726cdf4457ebb61ec1b593a8d12337\"\u003e\u003ccode\u003ed8cd72f\u003c/code\u003e\u003c/a\u003e\nBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v6.1.0 - handle cache write error\ndue to RO token\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/2c8a9bd7457de244a408f35966fab2fb45fda9c8\"\u003e\u003ccode\u003e2c8a9bd\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/issues/1760\"\u003e#1760\u003c/a\u003e\nfrom actions/samirat/esm_migration_and_package_update\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e9b91fdc3fea7d79165fceb79042ef45c2d51023\"\u003e\u003ccode\u003ee9b91fd\u003c/code\u003e\u003c/a\u003e\nPrettier fixes\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e4884b8ff7f92ef6b52c79eda480bbc86e685adb\"\u003e\u003ccode\u003ee4884b8\u003c/code\u003e\u003c/a\u003e\nRebuild dist\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/10baf0191a3c426ea0fa4a3253a5c04233b6e18f\"\u003e\u003ccode\u003e10baf01\u003c/code\u003e\u003c/a\u003e\nFixed licenses\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e39b386c9004d72a15d864ade8c0b3a702d47a37\"\u003e\u003ccode\u003ee39b386\u003c/code\u003e\u003c/a\u003e\nFix test mock return order\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/b6928203372a8571ff984c0c883ef3a1adfb0c06\"\u003e\u003ccode\u003eb692820\u003c/code\u003e\u003c/a\u003e\nPR feedback\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/60749128a44d25d3c520a489e576380cf00ff3f1\"\u003e\u003ccode\u003e6074912\u003c/code\u003e\u003c/a\u003e\nRebuild dist bundles as ESM to match type:module\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/5a912e8b4af820fa082a0e75cfd2c782f8fbfe0e\"\u003e\u003ccode\u003e5a912e8\u003c/code\u003e\u003c/a\u003e\nFix lint and jest issues\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/27d5ce7f107fe9357f9df03efb73ab90386fccae...55cc8345863c7cc4c66a329aec7e433d2d1c52a9\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/cache/restore\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d5.0.5\u0026new-version\u003d6.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": "d068a813fcd01eb596a1366a628bc8276dba01da",
      "tree": "fa4e29ec23d0da2115a43a94b85ed953f90bcbb1",
      "parents": [
        "b7b047082004e4c12402b51df59ae5382a7ac79b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 06 11:09:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 11:09:25 2026 +0800"
      },
      "message": "chore(deps): bump actions/cache from 5.0.5 to 6.1.0 (#814)\n\nBumps [actions/cache](https://github.com/actions/cache) from 5.0.5 to\n6.1.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/cache/releases\"\u003eactions/cache\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v6.1.0 - handle read-only cache\naccess by \u003ca\nhref\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1768\"\u003eactions/cache#1768\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v6...v6.1.0\"\u003ehttps://github.com/actions/cache/compare/v6...v6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate packages, migrate to ESM by \u003ca\nhref\u003d\"https://github.com/Samirat\"\u003e\u003ccode\u003e@​Samirat\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1760\"\u003eactions/cache#1760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v6.0.0\"\u003ehttps://github.com/actions/cache/compare/v5...v6.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v5.1.0 - handle read-only cache\naccess by \u003ca\nhref\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1775\"\u003eactions/cache#1775\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v5.1.0\"\u003ehttps://github.com/actions/cache/compare/v5...v5.1.0\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/actions/cache/blob/main/RELEASES.md\"\u003eactions/cache\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eReleases\u003c/h1\u003e\n\u003ch2\u003eHow to prepare a release\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nRelevant for maintainers with write access only.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003col\u003e\n\u003cli\u003eSwitch to a new branch from \u003ccode\u003emain\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003enpm test\u003c/code\u003e to ensure all tests are passing.\u003c/li\u003e\n\u003cli\u003eUpdate the version in \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/package.json\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/package.json\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003enpm run build\u003c/code\u003e to update the compiled files.\u003c/li\u003e\n\u003cli\u003eUpdate this \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/RELEASES.md\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/RELEASES.md\u003c/code\u003e\u003c/a\u003e\nwith the new version and changes in the \u003ccode\u003e## Changelog\u003c/code\u003e\nsection.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003elicensed cache\u003c/code\u003e to update the license report.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003elicensed status\u003c/code\u003e and resolve any warnings by\nupdating the \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/.licensed.yml\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/.licensed.yml\u003c/code\u003e\u003c/a\u003e\nfile with the exceptions.\u003c/li\u003e\n\u003cli\u003eCommit your changes and push your branch upstream.\u003c/li\u003e\n\u003cli\u003eOpen a pull request against \u003ccode\u003emain\u003c/code\u003e and get it reviewed\nand merged.\u003c/li\u003e\n\u003cli\u003eDraft a new release \u003ca\nhref\u003d\"https://github.com/actions/cache/releases\"\u003ehttps://github.com/actions/cache/releases\u003c/a\u003e\nuse the same version number used in \u003ccode\u003epackage.json\u003c/code\u003e\n\u003col\u003e\n\u003cli\u003eCreate a new tag with the version number.\u003c/li\u003e\n\u003cli\u003eAuto generate release notes and update them to match the changes you\nmade in \u003ccode\u003eRELEASES.md\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eToggle the set as the latest release option.\u003c/li\u003e\n\u003cli\u003ePublish the release.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003eNavigate to \u003ca\nhref\u003d\"https://github.com/actions/cache/actions/workflows/release-new-action-version.yml\"\u003ehttps://github.com/actions/cache/actions/workflows/release-new-action-version.yml\u003c/a\u003e\n\u003col\u003e\n\u003cli\u003eThere should be a workflow run queued with the same version\nnumber.\u003c/li\u003e\n\u003cli\u003eApprove the run to publish the new version and update the major tags\nfor this action.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003ch3\u003e6.1.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v6.1.0 to pick up \u003ca\nhref\u003d\"https://redirect.github.com/actions/toolkit/pull/2435\"\u003eactions/toolkit#2435\nHandle cache write error due to read-only token\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSwitch redundant \u0026quot;Cache save failed\u0026quot; warning to debug log\nin save-only\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e6.0.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated \u003ccode\u003e@actions/cache\u003c/code\u003e to ^6.0.1,\n\u003ccode\u003e@actions/core\u003c/code\u003e to ^3.0.1, \u003ccode\u003e@actions/exec\u003c/code\u003e to\n^3.0.0, \u003ccode\u003e@actions/io\u003c/code\u003e to ^3.0.2\u003c/li\u003e\n\u003cli\u003eMigrated to ESM module system\u003c/li\u003e\n\u003cli\u003eUpgraded Jest to v30 and test infrastructure to be ESM\ncompatible\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.4\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003eminimatch\u003c/code\u003e to v3.1.5 (fixes ReDoS via globstar\npatterns)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003eundici\u003c/code\u003e to v6.24.1 (WebSocket decompression bomb\nprotection, header validation fixes)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003efast-xml-parser\u003c/code\u003e to v5.5.6\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.3\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v5.0.5 (Resolves: \u003ca\nhref\u003d\"https://github.com/actions/cache/security/dependabot/33\"\u003ehttps://github.com/actions/cache/security/dependabot/33\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/core\u003c/code\u003e to v2.0.3\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.2\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/55cc8345863c7cc4c66a329aec7e433d2d1c52a9\"\u003e\u003ccode\u003e55cc834\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/issues/1768\"\u003e#1768\u003c/a\u003e\nfrom jasongin/readonly-cache\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/d8cd72f230726cdf4457ebb61ec1b593a8d12337\"\u003e\u003ccode\u003ed8cd72f\u003c/code\u003e\u003c/a\u003e\nBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v6.1.0 - handle cache write error\ndue to RO token\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/2c8a9bd7457de244a408f35966fab2fb45fda9c8\"\u003e\u003ccode\u003e2c8a9bd\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/issues/1760\"\u003e#1760\u003c/a\u003e\nfrom actions/samirat/esm_migration_and_package_update\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e9b91fdc3fea7d79165fceb79042ef45c2d51023\"\u003e\u003ccode\u003ee9b91fd\u003c/code\u003e\u003c/a\u003e\nPrettier fixes\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e4884b8ff7f92ef6b52c79eda480bbc86e685adb\"\u003e\u003ccode\u003ee4884b8\u003c/code\u003e\u003c/a\u003e\nRebuild dist\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/10baf0191a3c426ea0fa4a3253a5c04233b6e18f\"\u003e\u003ccode\u003e10baf01\u003c/code\u003e\u003c/a\u003e\nFixed licenses\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e39b386c9004d72a15d864ade8c0b3a702d47a37\"\u003e\u003ccode\u003ee39b386\u003c/code\u003e\u003c/a\u003e\nFix test mock return order\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/b6928203372a8571ff984c0c883ef3a1adfb0c06\"\u003e\u003ccode\u003eb692820\u003c/code\u003e\u003c/a\u003e\nPR feedback\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/60749128a44d25d3c520a489e576380cf00ff3f1\"\u003e\u003ccode\u003e6074912\u003c/code\u003e\u003c/a\u003e\nRebuild dist bundles as ESM to match type:module\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/5a912e8b4af820fa082a0e75cfd2c782f8fbfe0e\"\u003e\u003ccode\u003e5a912e8\u003c/code\u003e\u003c/a\u003e\nFix lint and jest issues\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/27d5ce7f107fe9357f9df03efb73ab90386fccae...55cc8345863c7cc4c66a329aec7e433d2d1c52a9\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/cache\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d5.0.5\u0026new-version\u003d6.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": "b7b047082004e4c12402b51df59ae5382a7ac79b",
      "tree": "48422ddfb08e68d2f6506e8788d399f440a2c6e5",
      "parents": [
        "131f9763ecca8b5985e48bb06a957b4bebc6779f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 06 11:09:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 11:09:06 2026 +0800"
      },
      "message": "chore(deps): bump actions/setup-python from 6.2.0 to 6.3.0 (#813)\n\nBumps [actions/setup-python](https://github.com/actions/setup-python)\nfrom 6.2.0 to 6.3.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/setup-python/releases\"\u003eactions/setup-python\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eEnhancement\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd RHEL support and include Linux distro in cache keys by \u003ca\nhref\u003d\"https://github.com/priyagupta108\"\u003e\u003ccode\u003e@​priyagupta108\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1323\"\u003eactions/setup-python#1323\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pip cache error handling on Windows by \u003ca\nhref\u003d\"https://github.com/priyagupta108\"\u003e\u003ccode\u003e@​priyagupta108\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1040\"\u003eactions/setup-python#1040\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency update\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade minimatch from 3.1.2 to 3.1.5 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1281\"\u003eactions/setup-python#1281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade actions dependencies by \u003ca\nhref\u003d\"https://github.com/gowridurgad\"\u003e\u003ccode\u003e@​gowridurgad\u003c/code\u003e\u003c/a\u003e\nwith \u003ca href\u003d\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1303\"\u003eactions/setup-python#1303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​actions/cache\u003c/code\u003e to 5.1.0, log cache write\ndenied by \u003ca\nhref\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1324\"\u003eactions/setup-python#1324\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade dependency versions and test workflow configuration by \u003ca\nhref\u003d\"https://github.com/HarithaVattikuti\"\u003e\u003ccode\u003e@​HarithaVattikuti\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1322\"\u003eactions/setup-python#1322\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate advanced-usage.md by \u003ca\nhref\u003d\"https://github.com/Dunky-Z\"\u003e\u003ccode\u003e@​Dunky-Z\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/811\"\u003eactions/setup-python#811\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/gowridurgad\"\u003e\u003ccode\u003e@​gowridurgad\u003c/code\u003e\u003c/a\u003e\nwith \u003ca href\u003d\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1303\"\u003eactions/setup-python#1303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1324\"\u003eactions/setup-python#1324\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/Dunky-Z\"\u003e\u003ccode\u003e@​Dunky-Z\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/811\"\u003eactions/setup-python#811\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/setup-python/compare/v6...v6.3.0\"\u003ehttps://github.com/actions/setup-python/compare/v6...v6.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/actions/setup-python/commit/ece7cb06caefa5fff74198d8649806c4678c61a1\"\u003e\u003ccode\u003eece7cb0\u003c/code\u003e\u003c/a\u003e\nFix pip cache error handling on Windows. (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1040\"\u003e#1040\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/1d18d7af5f767c1259ede05a0a5bcc30f3dcf1cf\"\u003e\u003ccode\u003e1d18d7a\u003c/code\u003e\u003c/a\u003e\nUpdate advanced-usage.md (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/811\"\u003e#811\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/d2b357a6a3a3687dd6781a416c0d24fcfd68660e\"\u003e\u003ccode\u003ed2b357a\u003c/code\u003e\u003c/a\u003e\nUpdate dependency versions and test workflow configuration (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1322\"\u003e#1322\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/8f639b1e75c1048640734b2bb46e22cecf136982\"\u003e\u003ccode\u003e8f639b1\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1324\"\u003e#1324\u003c/a\u003e\nfrom jasongin/update-actions-cache-5.1.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/6731c2ba87f530c26324d128c8fdd53499a4d4b0\"\u003e\u003ccode\u003e6731c2b\u003c/code\u003e\u003c/a\u003e\nResolve high-severity audit issues\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/0cb1a84326b90186fcd211036c65b42819794c87\"\u003e\u003ccode\u003e0cb1a84\u003c/code\u003e\u003c/a\u003e\nAdd RHEL support and include Linux distro in cache keys (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1323\"\u003e#1323\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/dc6eab6194394e0119523369788b507096f923e2\"\u003e\u003ccode\u003edc6eab6\u003c/code\u003e\u003c/a\u003e\nUpdate dist\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/6f4b74bfa2f520a380a620de3615c0dac427f4d3\"\u003e\u003ccode\u003e6f4b74b\u003c/code\u003e\u003c/a\u003e\nStrict equality\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/fa8bde1a9cc6347d06948d66bcd68c598b79eaea\"\u003e\u003ccode\u003efa8bde1\u003c/code\u003e\u003c/a\u003e\nBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to 5.1.0, log cache write denied\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/c8813ba1bc76ebf779b911ad8ffccbf2e449cb48\"\u003e\u003ccode\u003ec8813ba\u003c/code\u003e\u003c/a\u003e\nUpgrade \u003ca href\u003d\"https://github.com/actions\"\u003e\u003ccode\u003e@​actions\u003c/code\u003e\u003c/a\u003e\ndependencies and update licenses (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1303\"\u003e#1303\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/actions/setup-python/compare/a309ff8b426b58ec0e2a45f0f869d46889d02405...ece7cb06caefa5fff74198d8649806c4678c61a1\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/setup-python\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d6.2.0\u0026new-version\u003d6.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": "131f9763ecca8b5985e48bb06a957b4bebc6779f",
      "tree": "928d01175ecb540f2a364d33397c8d581be30571",
      "parents": [
        "cd4ca42fecca95d3b62b1dab7d3716a488e83279"
      ],
      "author": {
        "name": "Abanoub Doss",
        "email": "abanoubdoss@gmail.com",
        "time": "Fri Jul 03 22:17:12 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 04 11:17:12 2026 +0800"
      },
      "message": "ci: scope push trigger to main to drop redundant PR runs (#802)\n\n## Change\nMake push triggers more consistent by having the test workflows run\nbranch pushes only on `main`. Pull requests still run the same checks,\nand tag builds are unchanged.\n\nThe duplicate-run case is narrow: it only happens for branches pushed\ndirectly to the Apache repo, so it mostly affects committers and bots\nrather than normal fork-based contributors. Pull request checks cover\nthose branch updates; direct `main` runs still give us post-merge CI and\nwarm caches.\n\nAlso cleans up nearby `on:` sections so the triggers are easier to\ncompare, including removing `zizmor`\u0027s redundant all-branches pull\nrequest filter.\n\n## Validation\nChecked that all workflow YAML files still parse.\n\n## Remaining Trigger Inconsistencies\nThese are intentional or out of scope, so this PR leaves them alone:\n\n- Test workflows still run on all tag pushes to preserve release\nbehavior.\n- `rc` only runs on release-candidate tags.\n- `pre-commit` still runs on regular branch pushes because it is cheap.\n- `docs`, `cpp-linter`, `license_check`, and `codeql` keep their\nnarrower rules.\n\nRelated discussion: apache/iceberg-cpp#799.\n\nCo-authored-by: Abanoub Doss \u003cabanoub.doss@gmail.com\u003e"
    },
    {
      "commit": "cd4ca42fecca95d3b62b1dab7d3716a488e83279",
      "tree": "72350fa362e0a064165d25d9d8a60945b4907b62",
      "parents": [
        "a080eb038e983ee2fd054ed5e513181fc857b1e6"
      ],
      "author": {
        "name": "Xin Huang",
        "email": "42597328+huan233usc@users.noreply.github.com",
        "time": "Wed Jul 01 20:18:39 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 11:18:39 2026 +0800"
      },
      "message": "feat(parquet): apply column default values when reading missing fields (#792)"
    },
    {
      "commit": "a080eb038e983ee2fd054ed5e513181fc857b1e6",
      "tree": "37163a90ad8da9465f1f61ba1d8afae495a38b48",
      "parents": [
        "9f84804259bd81c78f321a660a0006e799be724d"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Wed Jul 01 20:59:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 20:59:40 2026 +0800"
      },
      "message": "test: refactor minimal metadata selection in update tests (#798)"
    },
    {
      "commit": "9f84804259bd81c78f321a660a0006e799be724d",
      "tree": "3ca568b79cd83e83ac6db69477c9ed536ababccf",
      "parents": [
        "9bf1ba1b2fb18012f1b7ad2323a54dec40718329"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Wed Jul 01 19:21:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 19:21:09 2026 +0800"
      },
      "message": "fix: use correct API in merge append test (#797)"
    },
    {
      "commit": "9bf1ba1b2fb18012f1b7ad2323a54dec40718329",
      "tree": "86cbf5c19cf81c01f06823699ce0b7d5e4df0fe3",
      "parents": [
        "9fb4a2b2ed08e1ad1483355c950b54ac33766c40"
      ],
      "author": {
        "name": "Gang Wu",
        "email": "ustcwg@gmail.com",
        "time": "Wed Jul 01 18:02:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 18:02:47 2026 +0800"
      },
      "message": "feat: retry stale v3 snapshot row-lineage validation (#794)\n\nAdd a retryable validation error kind and use it for add-snapshot stale\nsequence-number and stale first-row-id checks, matching Java Iceberg\u0027s\nRetryableValidationException behavior.\n\nInclude the new retryable validation kind in commit retry policy, while\npreserving normal validation failures for mixed/non-retryable builder\nerrors. Add focused v3 row-lineage tests for multi-file assignment,\nbranch commits, retry reassignment, stale snapshot validation, and\ndelete-manifest null first_row_id handling."
    },
    {
      "commit": "9fb4a2b2ed08e1ad1483355c950b54ac33766c40",
      "tree": "426c7f10425d143ae530b781b3bcb25f8dba9c4d",
      "parents": [
        "7c4f15cc9a858c023e963224ebd05685cb6a6f49"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Wed Jul 01 15:42:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 15:42:24 2026 +0800"
      },
      "message": "feat: add ArrowRowBuilder for materializing Arrow batches (#780)\n\n## Summary\n\nAdds `ArrowRowBuilder` (`arrow_row_builder_internal.h` /\n`arrow_row_builder.cc`), a schema-driven RAII helper that materializes\nin-memory rows into an Arrow `ArrowArray` (a struct batch) for an\narbitrary Iceberg schema. It wraps the nanoarrow boilerplate and exposes\nper-column access plus typed append free functions, so metadata tables\n(snapshots, history, manifests, …) can emit rows without re-implementing\nit.\n\nThis is the first of a series splitting metadata-table support into\nfocused PRs; the `InMemoryBatchReader` and the `SnapshotsTable::Scan`\nintegration are intended to follow in separate PRs that build on this.\n\n## What\u0027s included\n- **`ArrowRowBuilder`** — a single RAII class (move-only) with\n`Make(const Schema\u0026)` and `Make(const ArrowSchema*)` overloads. Handles\nthe full nanoarrow lifecycle: `InitFromSchema` → `StartAppending` → …\nappend values … → `FinishBuilding` → `Release`. The `ArrowArray` is\nguarded immediately after `InitFromSchema` so a failure in\n`StartAppending` releases it automatically.\n- **`ArrowArrayGuard::Release()`** — added to the existing guard so\nother call sites (`position_delete_writer`, `manifest_adapter`) can\nreuse the RAII-release pattern instead of manually managing nanoarrow\nresources.\n- **Free functions** in the `iceberg` namespace: `AppendNull`,\n`AppendBoolean`, `AppendInt` (covers int32/int64/timestamp via\nnanoarrow\u0027s int64), `AppendString`, `AppendStringMap`.\n- The implementation lives at the **core** `iceberg` library level — it\nonly needs nanoarrow + `ToArrowSchema` (no Apache Arrow), matching peers\nlike `manifest_adapter` and `arrow_c_data_util`.\n- Unit tests in `arrow_row_builder_test.cc` covering typed appends\n(int32/string/int64/boolean/map), null handling for optional columns,\nmulti-entry/empty string maps, zero-row batches, and column-index\nbounds. Compiled into the `iceberg-data-test` test target.\n\n## Testing\n- CMake (Ninja): `cmake --build build --target iceberg-data-test` then\nran the test binary — 5/5 `ArrowRowBuilderTest` tests pass. `ctest`\ngreen.\n- The test verifies output by importing the produced C-data into Apache\nArrow (`arrow::ImportRecordBatch`), so its target is under `USE_BUNDLE`.\n\n## Notes\n- The test is registered under CMake\u0027s bundle build only. The meson\nbuild (which has no Apache Arrow/bundle layer) is left unchanged; the\ncore-only test target continues to build there.\n- Developed with AI-assisted tooling, reviewed by the author."
    },
    {
      "commit": "7c4f15cc9a858c023e963224ebd05685cb6a6f49",
      "tree": "ecfa2585669629764b0ffe643b090cfd90121fad",
      "parents": [
        "61400e894fb4f88bd71cd95b27d549fd84feced7"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Wed Jul 01 15:36:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 15:36:24 2026 +0800"
      },
      "message": "feat: Support UUID values across row and file IO (#790)\n\ncloses #314"
    },
    {
      "commit": "61400e894fb4f88bd71cd95b27d549fd84feced7",
      "tree": "fd0da02632b143e6d990e1a5d06ce6b01f379134",
      "parents": [
        "c65a806c64f3f87e161321593a96acf81faaf7f0"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Tue Jun 30 22:07:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 22:07:46 2026 +0800"
      },
      "message": "feat: implement RewriteFiles operation (#751)\n\nThis PR implements the RewriteFiles operation for the Iceberg C++\nlibrary.\n\n## Changes\n\n- Added RewriteFiles update class in src/iceberg/update/rewrite_files.h\nand .cc\n- Added RewriteFiles to the type forward declarations in\nsrc/iceberg/type_fwd.h\n- Registered RewiteFiles as a merging snapshot update in\nsrc/iceberg/table.h and .cc\n- Added RewriteFiles support in transaction (src/iceberg/transaction.h\nand .cc)\n- Added comprehensive tests in src/iceberg/test/rewrite_files_test.cc\n- Added merge test for RewriteFiles in\nsrc/iceberg/test/merging_snapshot_update_test.cc"
    },
    {
      "commit": "c65a806c64f3f87e161321593a96acf81faaf7f0",
      "tree": "56bae85ce1f36312f5919bd4437a6a98b9949fcb",
      "parents": [
        "68ee0f47ab6df0a41244a32076873bc8977bc7e2"
      ],
      "author": {
        "name": "Gang Wu",
        "email": "ustcwg@gmail.com",
        "time": "Tue Jun 30 12:32:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 12:32:25 2026 +0800"
      },
      "message": "feat: write snapshot v3 row lineage fields at top level (#791)"
    },
    {
      "commit": "68ee0f47ab6df0a41244a32076873bc8977bc7e2",
      "tree": "53a0a33bd43a17edc72fff212947706d554adda8",
      "parents": [
        "93577b3fe713912b3017e5e3374e89d64c4d0c7a"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Jun 30 04:21:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 10:21:45 2026 +0800"
      },
      "message": "fix(scan): reject missing column stats fields (#759)"
    },
    {
      "commit": "93577b3fe713912b3017e5e3374e89d64c4d0c7a",
      "tree": "a4914aae79fc5ead45d1e9ad9fdb6c9bcb2405c9",
      "parents": [
        "881b3b517c5aa985ec202a61e94db7a79dbe1a90"
      ],
      "author": {
        "name": "Zehua Zou",
        "email": "zehuazou2000@gmail.com",
        "time": "Mon Jun 29 16:19:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 16:19:58 2026 +0800"
      },
      "message": "feat: parallelize writing manifests (#778)"
    },
    {
      "commit": "881b3b517c5aa985ec202a61e94db7a79dbe1a90",
      "tree": "a24ab815abfe38a9e3ca0d484a95569d5813fca8",
      "parents": [
        "3664d998d07b938fe4144a795a9a5024615adfb1"
      ],
      "author": {
        "name": "Xin Huang",
        "email": "42597328+huan233usc@users.noreply.github.com",
        "time": "Mon Jun 29 00:07:45 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 15:07:45 2026 +0800"
      },
      "message": "feat: represent, serialize and validate v3 column default values (#746)\n\nPart 1 of a multi-part split of #730 (column default values, item 2 of\n#637). The full\nend-to-end implementation is in #731, kept open as the proof-of-concept;\nthis series\nlands it in reviewable pieces.\n\nThis PR is the **schema foundation** — representing, serializing and\nvalidating v3\ncolumn default values. It is purely additive and changes no read or\nwrite behavior on\nits own.\n\n## What\u0027s in this PR\n\n- **`SchemaField`** carries `initial-default` / `write-default`, stored\nas\n`std::shared_ptr\u003cconst Literal\u003e` (immutable payload shared across\ncopies, like the\nadjacent `type_`; the C++ analog of Java\u0027s `final Literal\u003c?\u003e`). They are\nset via the\nconstructor. Getters return `std::optional\u003cstd::reference_wrapper\u003cconst\nLiteral\u003e\u003e` for\nreading (the `Schema::FindFieldByName` idiom); `initial_default_ptr()` /\n`write_default_ptr()` expose the shared pointer so a rebuilt field (e.g.\nID\n  reassignment) shares the value instead of copying it.\n- **JSON serde**: parse/write `initial-default` / `write-default` using\nthe existing\n  single-value serialization (all primitive types).\n- **`Schema::Validate`**: version-gates the `initial-default` to format\nv3\n(`kMinFormatVersionDefaultValues`) — it reinterprets how existing data\nfiles are read,\nso it requires the v3 reader contract. The `write-default` only affects\nvalues written\ngoing forward and is **not** version-gated (matching Java\u0027s\n`Schema.checkCompatibility`,\nwhich gates only the initial default). Both defaults are otherwise\nvalidated to be\n  non-null primitive literals matching the field type.\n- **Generic projection**: a column missing from a data file with an\n`initial-default`\nmaps to `FieldProjection::Kind::kDefault` carrying the literal (the\nper-format readers\n  consume this in the follow-up PRs).\n\n## Follow-ups (stacked on this PR)\n\n- read path — Parquet (`literal_util` + parquet\nprojection/materialization)\n- read path — Avro\n- schema evolution (`UpdateSchema` add/update column defaults)\n\n## Testing\n\nAdded tests"
    },
    {
      "commit": "3664d998d07b938fe4144a795a9a5024615adfb1",
      "tree": "bf86e3dd40ecda1f473e93b210809eeceb6c0ee3",
      "parents": [
        "10c08b27bd58ce9f6956a9c8f87e07a7a8360fa6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 29 13:45:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 13:45:24 2026 +0800"
      },
      "message": "chore(deps): bump zizmorcore/zizmor-action from 0.5.6 to 0.5.7 (#788)\n\nBumps\n[zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action)\nfrom 0.5.6 to 0.5.7.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/zizmorcore/zizmor-action/releases\"\u003ezizmorcore/zizmor-action\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev0.5.7\u003c/h2\u003e\n\u003cp\u003e1.26.1 is now available via the action\n1.26.1 is now the default version of zizmor used by the action\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/zizmorcore/zizmor-action/commit/192e21d79ab29983730a13d1382995c2307fbcaa\"\u003e\u003ccode\u003e192e21d\u003c/code\u003e\u003c/a\u003e\nSync zizmor versions (\u003ca\nhref\u003d\"https://redirect.github.com/zizmorcore/zizmor-action/issues/127\"\u003e#127\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/zizmorcore/zizmor-action/commit/2720f2673c0b64a8656d08b009ac239b9383c0ae\"\u003e\u003ccode\u003e2720f26\u003c/code\u003e\u003c/a\u003e\nUpdate README.md with new actions/checkout version (\u003ca\nhref\u003d\"https://redirect.github.com/zizmorcore/zizmor-action/issues/126\"\u003e#126\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/zizmorcore/zizmor-action/commit/40b41b824eab0ad9c19ddf9856be25550729e6d8\"\u003e\u003ccode\u003e40b41b8\u003c/code\u003e\u003c/a\u003e\nchore(deps): bump the github-actions group with 2 updates (\u003ca\nhref\u003d\"https://redirect.github.com/zizmorcore/zizmor-action/issues/123\"\u003e#123\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/zizmorcore/zizmor-action/commit/a687b25bf3aa149153e80ed5f45292e47589888c\"\u003e\u003ccode\u003ea687b25\u003c/code\u003e\u003c/a\u003e\nchore(deps): bump github/codeql-action from 4.35.5 to 4.36.0 in the\ngithub-ac...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/zizmorcore/zizmor-action/commit/64a6900ea7f40fab0caa7dcfc77b392d28fe0cb1\"\u003e\u003ccode\u003e64a6900\u003c/code\u003e\u003c/a\u003e\nadd note to explain that the default value for\n\u003ccode\u003eonline-checks\u003c/code\u003e is different t...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/zizmorcore/zizmor-action/commit/14050abd109fcba34e6e2f31a723280997808e82\"\u003e\u003ccode\u003e14050ab\u003c/code\u003e\u003c/a\u003e\nchore(deps): bump the github-actions group with 2 updates (\u003ca\nhref\u003d\"https://redirect.github.com/zizmorcore/zizmor-action/issues/118\"\u003e#118\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/zizmorcore/zizmor-action/commit/ee9b4194a74f093e38908dbcfcb078f63eeef002\"\u003e\u003ccode\u003eee9b419\u003c/code\u003e\u003c/a\u003e\nchore(deps): bump github/codeql-action in the github-actions group (\u003ca\nhref\u003d\"https://redirect.github.com/zizmorcore/zizmor-action/issues/116\"\u003e#116\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/zizmorcore/zizmor-action/commit/fddf2b4aa9bf29290c6bf9866e6d113b0cdf6f67\"\u003e\u003ccode\u003efddf2b4\u003c/code\u003e\u003c/a\u003e\nBump pins in README (\u003ca\nhref\u003d\"https://redirect.github.com/zizmorcore/zizmor-action/issues/115\"\u003e#115\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/zizmorcore/zizmor-action/compare/5f14fd08f7cf1cb1609c1e344975f152c7ee938d...192e21d79ab29983730a13d1382995c2307fbcaa\"\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\u003dzizmorcore/zizmor-action\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d0.5.6\u0026new-version\u003d0.5.7)](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\n---------\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e\nCo-authored-by: Gang Wu \u003custcwg@gmail.com\u003e"
    },
    {
      "commit": "10c08b27bd58ce9f6956a9c8f87e07a7a8360fa6",
      "tree": "5c540f4421fee5c246fc28ac47373e6fa5207526",
      "parents": [
        "b65352a095dcfe35d82d4d849fcbababc7afcc14"
      ],
      "author": {
        "name": "Abanoub Doss",
        "email": "abanoubdoss@gmail.com",
        "time": "Sun Jun 28 22:42:47 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 11:42:47 2026 +0800"
      },
      "message": "ci: key Windows sccache cache on MSVC version (#787)\n\n## What\nAdd the `cl.exe` version to the Windows sccache cache key (and its\nrestore-keys prefix) in `test` and `sql_catalog_test`, so each MSVC\nbuild keeps its own cache. On the `sql_catalog_test` matrix the suffix\nstays empty for the non-Windows legs, so their keys don\u0027t change.\n\n## Why\nsccache decides whether a cached object is still valid from the compiler\nbinary. GitHub patches the Windows runner image regularly, roughly once\na week, and rolls each update out across the hosted fleet over a few\ndays rather than all at once. During that window back-to-back runs can\nland on different `cl.exe` builds. When that happens the two builds\nshare one cache key and keep evicting each other, and a run on a newer\ncompiler restores the old cache, misses everything, and rebuilds the\nwhole stack (around 35 to 50 minutes). Putting the `cl.exe` version in\nthe key gives each compiler its own cache, so a run stays warm instead\nof recompiling.\n\n## Validation\nOn the `windows-2025` runner the resolve step read `cl.exe` as\n19.51.36248, and the Windows `test` and `sql_catalog_test` builds passed\nwith the version in the key. The cache is only saved on `main`, so the\nwarm reuse shows up there rather than on a branch run.\n\nCo-authored-by: Abanoub Doss \u003cabanoub.doss@gmail.com\u003e"
    },
    {
      "commit": "b65352a095dcfe35d82d4d849fcbababc7afcc14",
      "tree": "4d233f452f9ac6e80ff237a399a8b7df5b721d7c",
      "parents": [
        "dd0db173449d5fbe5018ab6c8a3d5c777ffe29fb"
      ],
      "author": {
        "name": "Abanoub Doss",
        "email": "abanoubdoss@gmail.com",
        "time": "Sun Jun 28 22:29:41 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 11:29:41 2026 +0800"
      },
      "message": "build: silence benign MSVC C4251/C4275 dll-interface warnings (#768)\n\n## What\nAdd `/wd4251` and `/wd4275` in `meson.build`, applied only where the\ncompiler accepts them.\n\n## Why\nThe MSVC build prints tens of thousands of lines of C4251/C4275 warnings\nabout exported classes (like `TableProperties` and `ConfigBase`/`Entry`)\nthat hold standard-library members. These are harmless when everything\nis built as one DLL with one compiler, but they bury the warnings that\nactually matter in the Windows logs. The flags are ignored on GCC and\nClang, which don\u0027t have these warnings.\n\nFor reference, the average Meson Windows build logs ~22k of these\nwarning lines (971 unique messages), drowning the handful of real\nwarnings in the same run:\n\nhttps://github.com/apache/iceberg-cpp/actions/runs/27870777076/job/82482181520\n\nCo-authored-by: Abanoub Doss \u003cabanoub.doss@gmail.com\u003e"
    },
    {
      "commit": "dd0db173449d5fbe5018ab6c8a3d5c777ffe29fb",
      "tree": "47c3a1ad0d392f55478800bb1d05c333a1360ebc",
      "parents": [
        "e516a756b7f0d34079fca0dc14f8f1bea96f76c2"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 29 10:27:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 10:27:12 2026 +0800"
      },
      "message": "chore(deps): bump actions/checkout from 6.0.3 to 7.0.0 (#789)\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 6.0.3\nto 7.0.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/checkout/releases\"\u003eactions/checkout\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eblock checking out fork pr for pull_request_target and workflow_run\nby \u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2454\"\u003eactions/checkout#2454\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the\nminor-actions-dependencies group across 1 directory by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2458\"\u003eactions/checkout#2458\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump flatted from 3.3.1 to 3.4.2 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2460\"\u003eactions/checkout#2460\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump js-yaml from 4.1.0 to 4.2.0 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2461\"\u003eactions/checkout#2461\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/core\u003c/code\u003e and\n\u003ccode\u003e@​actions/tool-cache\u003c/code\u003e and Remove uuid by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2459\"\u003eactions/checkout#2459\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupgrade module to esm and update dependencies by \u003ca\nhref\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2463\"\u003eactions/checkout#2463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the minor-npm-dependencies group across 1 directory with 3\nupdates by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2462\"\u003eactions/checkout#2462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003egetting ready for checkout v7 release by \u003ca\nhref\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2464\"\u003eactions/checkout#2464\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate error wording by \u003ca\nhref\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2467\"\u003eactions/checkout#2467\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/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2454\"\u003eactions/checkout#2454\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/checkout/compare/v6.0.3...v7.0.0\"\u003ehttps://github.com/actions/checkout/compare/v6.0.3...v7.0.0\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/actions/checkout/blob/main/CHANGELOG.md\"\u003eactions/checkout\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003ev7.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBlock checking out fork PR for pull_request_target and workflow_run\nby \u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2454\"\u003eactions/checkout#2454\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the\nminor-actions-dependencies group across 1 directory by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2458\"\u003eactions/checkout#2458\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump flatted from 3.3.1 to 3.4.2 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2460\"\u003eactions/checkout#2460\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump js-yaml from 4.1.0 to 4.2.0 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2461\"\u003eactions/checkout#2461\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/core\u003c/code\u003e and\n\u003ccode\u003e@​actions/tool-cache\u003c/code\u003e and Remove uuid by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2459\"\u003eactions/checkout#2459\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupgrade module to esm and update dependencies by \u003ca\nhref\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2463\"\u003eactions/checkout#2463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the minor-npm-dependencies group across 1 directory with 3\nupdates by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2462\"\u003eactions/checkout#2462\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix checkout init for SHA-256 repositories by \u003ca\nhref\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2439\"\u003eactions/checkout#2439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: expand merge commit SHA regex and add SHA-256 test cases by \u003ca\nhref\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2414\"\u003eactions/checkout#2414\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eFix tag handling: preserve annotations and explicit fetch-tags by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2356\"\u003eactions/checkout#2356\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd worktree support for persist-credentials includeIf by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2327\"\u003eactions/checkout#2327\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev6.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePersist creds to a separate file by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2286\"\u003eactions/checkout#2286\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README to include Node.js 24 support details and requirements\nby \u003ca href\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2248\"\u003eactions/checkout#2248\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev5.0.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePort v6 cleanup to v5 by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2301\"\u003eactions/checkout#2301\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev5.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate actions checkout to use node 24 by \u003ca\nhref\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2226\"\u003eactions/checkout#2226\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.3.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003ePort v6 cleanup to v4 by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2305\"\u003eactions/checkout#2305\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.3.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003edocs: update README.md by \u003ca\nhref\u003d\"https://github.com/motss\"\u003e\u003ccode\u003e@​motss\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/1971\"\u003eactions/checkout#1971\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd internal repos for checking out multiple repositories by \u003ca\nhref\u003d\"https://github.com/mouismail\"\u003e\u003ccode\u003e@​mouismail\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/1977\"\u003eactions/checkout#1977\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocumentation update - add recommended permissions to Readme by \u003ca\nhref\u003d\"https://github.com/benwells\"\u003e\u003ccode\u003e@​benwells\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2043\"\u003eactions/checkout#2043\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdjust positioning of user email note and permissions heading by \u003ca\nhref\u003d\"https://github.com/joshmgross\"\u003e\u003ccode\u003e@​joshmgross\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2044\"\u003eactions/checkout#2044\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate README.md by \u003ca\nhref\u003d\"https://github.com/nebuk89\"\u003e\u003ccode\u003e@​nebuk89\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2194\"\u003eactions/checkout#2194\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate CODEOWNERS for actions by \u003ca\nhref\u003d\"https://github.com/TingluoHuang\"\u003e\u003ccode\u003e@​TingluoHuang\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2224\"\u003eactions/checkout#2224\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate package dependencies by \u003ca\nhref\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2236\"\u003eactions/checkout#2236\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eurl-helper.ts\u003c/code\u003e now leverages well-known environment\nvariables by \u003ca href\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/1941\"\u003eactions/checkout#1941\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eExpand unit test coverage for \u003ccode\u003eisGhes\u003c/code\u003e by \u003ca\nhref\u003d\"https://github.com/jww3\"\u003e\u003ccode\u003e@​jww3\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/1946\"\u003eactions/checkout#1946\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.2.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eCheck out other refs/* by commit if provided, fall back to ref by \u003ca\nhref\u003d\"https://github.com/orhantoy\"\u003e\u003ccode\u003e@​orhantoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/1924\"\u003eactions/checkout#1924\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/actions/checkout/commit/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0\"\u003e\u003ccode\u003e9c091bb\u003c/code\u003e\u003c/a\u003e\nupdate error wording (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2467\"\u003e#2467\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/1044a6dea927916f2c38ba5aeffbc0a847b1221a\"\u003e\u003ccode\u003e1044a6d\u003c/code\u003e\u003c/a\u003e\ngetting ready for checkout v7 release (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2464\"\u003e#2464\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/f0282184c7ce73ab54c7e4ab5a617122602e575f\"\u003e\u003ccode\u003ef028218\u003c/code\u003e\u003c/a\u003e\nBump the minor-npm-dependencies group across 1 directory with 3 updates\n(\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2462\"\u003e#2462\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/d914b262ffc244530a203ab40decab34c3abf34d\"\u003e\u003ccode\u003ed914b26\u003c/code\u003e\u003c/a\u003e\nupgrade module to esm and update dependencies (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2463\"\u003e#2463\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/537c7ef99cef6e5ddb5e7ff5d16d14510503801d\"\u003e\u003ccode\u003e537c7ef\u003c/code\u003e\u003c/a\u003e\nBump \u003ccode\u003e@​actions/core\u003c/code\u003e and \u003ccode\u003e@​actions/tool-cache\u003c/code\u003e\nand Remove uuid (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2459\"\u003e#2459\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/130a169078a413d3a5246a393625e8e742f387f6\"\u003e\u003ccode\u003e130a169\u003c/code\u003e\u003c/a\u003e\nBump js-yaml from 4.1.0 to 4.2.0 (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2461\"\u003e#2461\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/7d09575332117a40b46e5e020664df234cd416f3\"\u003e\u003ccode\u003e7d09575\u003c/code\u003e\u003c/a\u003e\nBump flatted from 3.3.1 to 3.4.2 (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2460\"\u003e#2460\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/0f9f3aa320cb53abeb534aeb54048075d9697a0e\"\u003e\u003ccode\u003e0f9f3aa\u003c/code\u003e\u003c/a\u003e\nBump actions/publish-immutable-action (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2458\"\u003e#2458\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/f9e715a95fcd1f9253f77dd28f11e88d2d6460c7\"\u003e\u003ccode\u003ef9e715a\u003c/code\u003e\u003c/a\u003e\nblock checking out fork pr for pull_request_target and workflow_run (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2454\"\u003e#2454\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/actions/checkout/compare/df4cb1c069e1874edd31b4311f1884172cec0e10...9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dactions/checkout\u0026package-manager\u003dgithub_actions\u0026previous-version\u003d6.0.3\u0026new-version\u003d7.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": "e516a756b7f0d34079fca0dc14f8f1bea96f76c2",
      "tree": "371075b8ee0a8baf4e77cbb4e4996a29df4013d8",
      "parents": [
        "75bef3f75853d5e1673516927745480357f775fa"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Sun Jun 28 03:41:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 28 09:41:36 2026 +0800"
      },
      "message": "fix: invalidate table scan schema cache (#758)\n\n## Summary\n- invalidate the cached scan snapshot schema whenever\nsnapshot/ref/time-travel state changes\n- preserve requested column-stat names and re-resolve them during Build\nso stats IDs match the final snapshot schema\n- add regression coverage for IncludeColumnStats before UseSnapshot and\nnon-main UseRef with an evolved schema\n\n## Tests\n- cmake --build build --target scan_test\n- ctest --test-dir build -R scan_test --output-on-failure"
    },
    {
      "commit": "75bef3f75853d5e1673516927745480357f775fa",
      "tree": "1755a3a0cf7ce807ee8ddd2c669dccf863c5a41d",
      "parents": [
        "90a2be7053bb92fd0194b8d9a1ec0913696437c0"
      ],
      "author": {
        "name": "Jiajia Li",
        "email": "plusplusjiajia@alibaba-inc.com",
        "time": "Sun Jun 28 00:35:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 28 00:35:58 2026 +0800"
      },
      "message": "feat(rest): support vended storage credentials (#719)\n\nSupport REST vended storage credentials\n\nParse storage credentials from REST load table responses and pass them to\nFileIO implementations that support credential routing.\n\nAlso align table FileIO creation with table-level config overrides, route S3\nrequests by the longest matching credential prefix, and clean up related tests.\n\n---------\n\nCo-authored-by: Gang Wu \u003custcwg@gmail.com\u003e"
    },
    {
      "commit": "90a2be7053bb92fd0194b8d9a1ec0913696437c0",
      "tree": "7fa70e18a85dd2e1bc1e2588c218bf927c19a9a3",
      "parents": [
        "9a7439c7dcef070fafa470ea0e159bf176eeb4f8"
      ],
      "author": {
        "name": "Xin Huang",
        "email": "42597328+huan233usc@users.noreply.github.com",
        "time": "Fri Jun 26 18:39:28 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 27 09:39:28 2026 +0800"
      },
      "message": "refactor(serde): return Result from ToJson schema/type/metadata serializers (#785)\n\n## What\n\nChange the schema/type/metadata `ToJson` serializers from returning bare\n`nlohmann::json` to `Result\u003cnlohmann::json\u003e`:\n\n- `json_serde`: `ToJson(SchemaField | Type | Schema | TableMetadata |\nTableUpdate)`\n- REST: `ToJson(CreateTableRequest | CommitTableRequest |\nLoadTableResult | CommitTableResponse)`\n\nErrors propagate via `ICEBERG_ASSIGN_OR_RAISE`; callers bottom out at\nthe existing `Result`-returning boundaries (`ToJsonString`,\n`rest_catalog`, `TableMetadataUtil::Write`).\n\n## Why\n\nPreparation for v3 column default values (#730 / #746). Single-value\n(`Literal`) serialization is fallible, and column defaults invoke it\nfrom schema serialization, so these serializers need to propagate the\nerror instead of throwing. Splitting it out keeps the feature PR focused\non the feature.\n\n## Notes\n\n- **No behavior change** — every conversion still succeeds today; only\nthe return type changes.\n- The shared `ToJsonList` template stays bare (it also serializes\ninfallible types such as partition specs and snapshots); `TableMetadata`\nserializes its schema list with an explicit loop.\n- The REST `ICEBERG_DECLARE_JSON_SERDE` macro is unchanged; the four\nschema/metadata-bearing models are declared explicitly so only their\n`ToJson` return type differs.\n\n## Testing\n\nNo behavior change; existing tests are adapted to the new return type.\nFull build and `ctest` pass locally."
    },
    {
      "commit": "9a7439c7dcef070fafa470ea0e159bf176eeb4f8",
      "tree": "b20537911be4895d3eb8fb258d78957004520fd9",
      "parents": [
        "8d72abb2c025fe23c97d347481c82877f54f61b9"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Sat Jun 27 00:03:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 27 00:03:45 2026 +0800"
      },
      "message": "chore: align table metadata JSON fixtures with Java (#781)"
    },
    {
      "commit": "8d72abb2c025fe23c97d347481c82877f54f61b9",
      "tree": "c1e5217f8367ebdb0090b61a30a893d526dd1528",
      "parents": [
        "bb5cab58a71d28a03d460f860bec017de26ac25f"
      ],
      "author": {
        "name": "Manu Zhang",
        "email": "OwenZhang1990@gmail.com",
        "time": "Sat Jun 27 00:02:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 27 00:02:59 2026 +0800"
      },
      "message": "build: add Makefile clean target (#784)\n\nCo-authored-by: Codex \u003ccodex@openai.com\u003e"
    },
    {
      "commit": "bb5cab58a71d28a03d460f860bec017de26ac25f",
      "tree": "529c8f43b91b2a53aa992f6a6ea6db92edfaa5ee",
      "parents": [
        "a1f3514d506951db356d398c72c3a71797fd10ff"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Fri Jun 26 11:57:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 11:57:39 2026 +0800"
      },
      "message": "ci: cache cpp-linter build (#782)"
    },
    {
      "commit": "a1f3514d506951db356d398c72c3a71797fd10ff",
      "tree": "5c4e38028f57ed1719f6648771b30bb21eec8d0f",
      "parents": [
        "411c0f8ddc2abe95140552cb9d1cf363d541b0af"
      ],
      "author": {
        "name": "liuxiaoyu",
        "email": "45345701+MisterRaindrop@users.noreply.github.com",
        "time": "Thu Jun 25 17:44:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 17:44:05 2026 +0800"
      },
      "message": "feat(hive): add iceberg_hive library with bundled/system thrift dependency (#753)"
    },
    {
      "commit": "411c0f8ddc2abe95140552cb9d1cf363d541b0af",
      "tree": "613ecb9d3c9a56dd03bdf4b60bf217662a4743c8",
      "parents": [
        "3e8203e8ee66bd835a59b06127bb5f9d935769bb"
      ],
      "author": {
        "name": "kamcheungting-db",
        "email": "91572897+kamcheungting-db@users.noreply.github.com",
        "time": "Wed Jun 24 08:43:48 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 23:43:48 2026 +0800"
      },
      "message": "feat(logging): add CerrLogger std::cerr backend (#724)\n\nPart 3 of the logging stack — now based on `main` (#723 merged). Adds\nthe first concrete sink: a dependency-free `std::cerr` logger, also the\ndefault backend when spdlog is off.\n\n**What\u0027s here**\n- `CerrLogger` writes one line per record: `YYYY-MM-DDThh:mm:ss.mmmZ\nLEVEL [tid] [file:line] message`.\n- UTC millisecond timestamps, OS-native cached thread id (extracted to\n`util/thread_util.h`), lock-free level check, and a whole-line mutex so\nconcurrent records never interleave.\n- Pure standard library, always available. `Log`/`Flush` never throw.\nInherits the base `Initialize(\"level\")`; `pattern` is ignored (fixed\nlayout; only the spdlog backend honors `pattern`).\n\n**Tests** (`cerr_logger_test`): level filtering, the fixed line layout\nincl. the `.mmm` field and `[file:line]`, inherited `Initialize`,\n`Flush`, never-throw when the sink itself throws, and concurrent-write\nnon-interleaving. Built/run under clang-libc++; ASan + TSan clean.\n\nThis pull request and its description were written by Isaac."
    },
    {
      "commit": "3e8203e8ee66bd835a59b06127bb5f9d935769bb",
      "tree": "ab00526d0a2f4f66cfbafe680f70a77c63afb5e4",
      "parents": [
        "988f363e7e867c79a147317b3ff1f6c2bb11fea1"
      ],
      "author": {
        "name": "Gang Wu",
        "email": "ustcwg@gmail.com",
        "time": "Wed Jun 24 22:11:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 22:11:35 2026 +0800"
      },
      "message": "fix(update): clean up delete files from expired manifests (#779)\n\nReachable cleanup now reads live paths from data and delete manifests,\nmatching Java\u0027s ManifestFiles.readPaths behavior."
    },
    {
      "commit": "988f363e7e867c79a147317b3ff1f6c2bb11fea1",
      "tree": "df3cdb5a09f981fa3e2373169d7a1cb3ceb91594",
      "parents": [
        "3c9d13d4072362b68e00dc246cb3cedf93217a76"
      ],
      "author": {
        "name": "Zehua Zou",
        "email": "zehuazou2000@gmail.com",
        "time": "Wed Jun 24 17:18:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 17:18:30 2026 +0800"
      },
      "message": "feat: parallelize update and scan processing (#770)"
    },
    {
      "commit": "3c9d13d4072362b68e00dc246cb3cedf93217a76",
      "tree": "0355b0dce2f649bfa8ef546a94a4ae2f54932cb4",
      "parents": [
        "ed051a702c940f7a08b3e38e01b7774efe0cc899"
      ],
      "author": {
        "name": "lishuxu",
        "email": "lishuxu@gmail.com",
        "time": "Wed Jun 24 11:09:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 11:09:20 2026 +0800"
      },
      "message": "feat(update): add OverwriteFiles for overwrite snapshot commits (#741)\n\nSummary:\nAdd a production OverwriteFiles builder that brings iceberg-cpp to\nsemantic parity with Java\u0027s BaseOverwriteFiles. It supports explicit\nfile replacement (DeleteFile + AddFile) and range-based replacement\n(OverwriteByRowFilter + AddFile) with the same family of pre-commit\nconcurrency validations. The builder is a thin subclass of\nMergingSnapshotUpdate and reuses the existing commit kernel\n(Apply/summary/retry/cleanup) unchanged.\n\nChanges:\n- New OverwriteFiles class (src/iceberg/update/overwrite_files.{h,cc})\nand Table::NewOverwrite() / Transaction::NewOverwrite() entry points.\n- Builder surface: AddFile, DeleteFile, bulk DeleteFiles,\nOverwriteByRowFilter, ValidateFromSnapshot, ConflictDetectionFilter,\nValidateNoConflictingData, ValidateNoConflictingDeletes,\nValidateAddedFilesMatchOverwriteFilter, WithCaseSensitivity.\n- Validate(): conflict-filter resolution, concurrent add/delete conflict\nchecks, and strict added-file range validation (projection +\nStrictMetricsEvaluator).\n- Tests (overwrite_files_test.cc, 45 cases) and CMake/meson wiring.\n\nBehavior alignment with Java:\n- operation() returns append/delete/overwrite from builder content.\n- Conflict-filter resolution mirrors BaseOverwriteFiles (explicit -\u003e row\nfilter -\u003e AlwaysTrue); replaced-file delete checks honor\nConflictDetectionFilter.\n- Strict added-file validation uses a single DataSpec(), rejecting\nmulti-spec and empty added-file sets.\n- Deviations: public WithCaseSensitivity (vs caseSensitive) to avoid a\nprotected-name clash; ValidateFromSnapshot rejects negative ids early.\n\n---------\n\nCo-authored-by: shuxu.li \u003cshuxu.li@clickzetta.com\u003e"
    },
    {
      "commit": "ed051a702c940f7a08b3e38e01b7774efe0cc899",
      "tree": "957f588fbd70ce1e5eaade0f44fdd16b15a84d46",
      "parents": [
        "f6f99513980251336ca70a8c6a0059b19332e3a4"
      ],
      "author": {
        "name": "Manu Zhang",
        "email": "OwenZhang1990@gmail.com",
        "time": "Tue Jun 23 23:08:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 23:08:53 2026 +0800"
      },
      "message": "feat: add row delta update (#721)\n\nImplements the RowDelta update builder, table and transaction factory\nmethods, and focused tests for row-level add/delete flows.\n\n---------\n\nCo-authored-by: Codex \u003ccodex@openai.com\u003e"
    },
    {
      "commit": "f6f99513980251336ca70a8c6a0059b19332e3a4",
      "tree": "2ba151f63e02af90b150425cacc2f22c7cf3b5b7",
      "parents": [
        "af4b76f2f806f026d921e9a8dea2b8ffbee30dc1"
      ],
      "author": {
        "name": "Zehua Zou",
        "email": "zehuazou2000@gmail.com",
        "time": "Tue Jun 23 21:54:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 21:54:02 2026 +0800"
      },
      "message": "ci: upgrade to ubuntu-26.04 image (#771)"
    },
    {
      "commit": "af4b76f2f806f026d921e9a8dea2b8ffbee30dc1",
      "tree": "502779b500c41f46e479772e6072d42fa2e978fb",
      "parents": [
        "5ac524624552c37faca652f9412ae89be3aa20ed"
      ],
      "author": {
        "name": "Zehua Zou",
        "email": "zehuazou2000@gmail.com",
        "time": "Tue Jun 23 17:00:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 17:00:41 2026 +0800"
      },
      "message": "feat: add StoredLength method to PositionOutputStream (#773)"
    },
    {
      "commit": "5ac524624552c37faca652f9412ae89be3aa20ed",
      "tree": "c7d5d9456b9041c8688ef435fec41f0e49157e48",
      "parents": [
        "959fda6703bb74a0268c7038d48e189427a2f67e"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Tue Jun 23 13:32:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 13:32:46 2026 +0800"
      },
      "message": "fix: allow historical sort orders with dropped fields (#762)\n\nThis fix is aligned with https://github.com/apache/iceberg/pull/16521"
    },
    {
      "commit": "959fda6703bb74a0268c7038d48e189427a2f67e",
      "tree": "590124904fbd3255e164705302813fe84469480d",
      "parents": [
        "f38090e0c7b192cdb95bf9c153f135e870c19fa1"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Tue Jun 23 12:47:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 12:47:54 2026 +0800"
      },
      "message": "feat: add Iceberg v3 type definitions (#752)\n\nIntroduce the Iceberg v3 types (variant, geometry, geography), including\ntheir schema/JSON serialization and type-system integration (visitors,\nschema projection, etc.).\n\nReading and writing data of these types is not implemented yet:\nconversion to/from Arrow, Avro, and Parquet returns an error, as do\nidentity transform binding and scalar validation for them."
    },
    {
      "commit": "f38090e0c7b192cdb95bf9c153f135e870c19fa1",
      "tree": "6e1163ce854d8df2c8c12d8540de60b41266005e",
      "parents": [
        "5c8c4e5d024ab72c1486a8d5ad32d67431dff894"
      ],
      "author": {
        "name": "Abanoub Doss",
        "email": "abanoubdoss@gmail.com",
        "time": "Mon Jun 22 23:06:08 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 12:06:08 2026 +0800"
      },
      "message": "ci: cache the sccache directory across C++ test builds (#765)\n\n## What\nTurn on compiler caching (sccache) for the Linux and macOS builds in\n`test`, `aws_test`, `sanitizer_test`, and `sql_catalog_test`, and switch\nthe Windows `test` build to the same setup. `main` builds once and saves\nthe cache; pull requests reuse it without writing back.\n\n## Why\nRight now only the Windows builds reuse compiled output — every Linux\nand macOS build recompiles the whole bundled Arrow/Parquet/Avro/Boost\nstack from scratch, even though it never changes between PRs. Building\nit once and reusing it removes most of that repeated work. Saving the\ncache as a single file (instead of one upload per compiled file) also\navoids the upload rate limit that causes \"cache write error\" spam.\n\n## Validation\nOn a warm pull-request run, every build reused the cache: 99.6–99.9% of\nfiles came from cache, zero write errors. The heavy builds drop from\n~10–27 min to ~1.5–5 min.\n\n---------\n\nCo-authored-by: Abanoub Doss \u003cabanoub.doss@gmail.com\u003e"
    },
    {
      "commit": "5c8c4e5d024ab72c1486a8d5ad32d67431dff894",
      "tree": "93eff6fae55dc90b25108560a67ca1d00448b63c",
      "parents": [
        "7fe2e93ed1d34a583098ce29e03b4a7851f213cc"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Tue Jun 23 11:59:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 11:59:08 2026 +0800"
      },
      "message": "fix(rest): align error handlers with Java implementation (#763)\n\nWhile reviewing #614, I noticed that `PlanErrorHandler::Accept` does not\nmatch the behavior of the Java implementation.\n\nA detailed comparison with Java\u0027s `ErrorHandlers` revealed several gaps\nbetween iceberg-cpp and Iceberg Java. Some of these are oversights in\nthe original implementation, while others correspond to improvements\nthat were made later in Iceberg Java, including:\n\n* https://github.com/apache/iceberg/pull/13143\n* https://github.com/apache/iceberg/pull/14927\n* https://github.com/apache/iceberg/pull/15051\n* https://github.com/apache/iceberg/pull/16059\n\nThis PR closes those gaps and brings the error handling behavior in\niceberg-cpp closer to the Java implementation."
    },
    {
      "commit": "7fe2e93ed1d34a583098ce29e03b4a7851f213cc",
      "tree": "3a1a1546aef6f8afaa0362c813dfc47d98bf6569",
      "parents": [
        "42b498f60c02314fbca02d3c97ae4f5c787b3fc5"
      ],
      "author": {
        "name": "Yuya Ebihara",
        "email": "ebyhry@gmail.com",
        "time": "Tue Jun 23 07:08:16 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 15:08:16 2026 -0700"
      },
      "message": "CI: Check ASF action allowlist on every PR (#772)\n\nRelates to: \n* https://github.com/apache/iceberg/issues/16934\n* https://github.com/apache/iceberg/pull/16926"
    },
    {
      "commit": "42b498f60c02314fbca02d3c97ae4f5c787b3fc5",
      "tree": "5f8a4b06236a989f038136e1e9735b10b575dbc5",
      "parents": [
        "0aff5e99c7f696d476e92face67d1dba34369e84"
      ],
      "author": {
        "name": "Abanoub Doss",
        "email": "abanoubdoss@gmail.com",
        "time": "Mon Jun 22 04:38:21 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 17:38:21 2026 +0800"
      },
      "message": "ci: cancel superseded runs in remaining workflows (#767)\n\n## What\nAdd a concurrency block to the five workflows that don\u0027t have one —\n`cpp-linter`, `pre-commit`, `license_check`, `zizmor`, and `codeql`:\n\n```yaml\nconcurrency:\n  group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }}\n  cancel-in-progress: true\n```\n\n## Why\nThe heavier workflows already cancel outdated runs, but these five don\u0027t\n- so pushing again to a PR leaves the old runs going and tying up\nrunners. Grouping on `head_ref || sha` cancels superseded PR runs while\nleaving `main` and scheduled runs untouched.\n\nCo-authored-by: Abanoub Doss \u003cabanoub.doss@gmail.com\u003e"
    },
    {
      "commit": "0aff5e99c7f696d476e92face67d1dba34369e84",
      "tree": "e173fbeff4bfb2c2d89c1634f7e2a39d0886c3b5",
      "parents": [
        "a38e0cdef88a2cd3673a78e659cbadb575fa6c2e"
      ],
      "author": {
        "name": "Abanoub Doss",
        "email": "abanoubdoss@gmail.com",
        "time": "Mon Jun 22 04:28:29 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 17:28:29 2026 +0800"
      },
      "message": "ci: cache vcpkg packages on Windows builds (#766)\n\n## What\nCache the installed vcpkg packages on the Windows builds in `test` and\n`sql_catalog_test`, and skip the install step when the cache is present.\n\n## Why\nEvery Windows run reinstalls the same packages (zlib, nlohmann-json,\nnanoarrow, roaring, plus cpr / sqlite3) from scratch, costing a couple\nof minutes each time. Caching them removes that on every run after the\nfirst. This matches what `aws_test` already does.\n\n## Validation\nA warm run reused the cached packages and skipped the install. The cache\nonly rebuilds when the package list changes.\n\nCo-authored-by: Abanoub Doss \u003cabanoub.doss@gmail.com\u003e"
    },
    {
      "commit": "a38e0cdef88a2cd3673a78e659cbadb575fa6c2e",
      "tree": "d189d0262a4e1486fe033715fda50e991c482d20",
      "parents": [
        "28163ce3ff26963b0310dff6dbcf2f6c14f94748"
      ],
      "author": {
        "name": "kamcheungting-db",
        "email": "91572897+kamcheungting-db@users.noreply.github.com",
        "time": "Mon Jun 22 02:14:36 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 17:14:36 2026 +0800"
      },
      "message": "feat(logging): add Logger interface and default logger (#723)\n\nPart 2 of the logging stack (builds on #722). Adds the logging API and a\nswappable default logger — the foundation the backends and macros plug\ninto.\n\n**What\u0027s here**\n- `Logger`: the pluggable sink interface (`ShouldLog` / `Log` /\n`SetLevel` / `Flush` / `Initialize`). `ShouldLog()` is the single source\nof truth for runtime filtering.\n- `LogMessage` owns its formatted text so a sink can safely keep a\nrecord; reserves an attributes field for future structured logging.\n- Process-global default logger: `GetDefaultLogger` / `SetDefaultLogger`\n/ `SetDefaultLevel`, with a lock-free thread-local fast path so logging\nstays cheap.\n- `Initialize` applies the `level` property, so config-driven levels\nactually work. `CurrentLogger()` is safe to call even from a\n`thread_local` destructor during thread shutdown.\n- `logger.h` stays backend-agnostic (never includes the build config\nheader), so consumers see one stable API regardless of backend.\n\n**Examples** — using the API directly (the `LOG_*` macros that wrap it\narrive in #725):\n\n```cpp\n// A custom sink, installed as the process default.\nclass MySink : public Logger {\n public:\n  bool ShouldLog(LogLevel level) const override { return level \u003e\u003d level_; }\n  void Log(LogMessage\u0026\u0026 m) noexcept override { write_line(m.message); }\n  void SetLevel(LogLevel level) override { level_ \u003d level; }\n  LogLevel level() const override { return level_; }\n private:\n  std::atomic\u003cLogLevel\u003e level_{LogLevel::kInfo};\n};\n\nSetDefaultLogger(std::make_shared\u003cMySink\u003e());   // install process-wide\nSetDefaultLevel(LogLevel::kDebug);              // adjust the threshold\n\nauto logger \u003d GetDefaultLogger();               // borrow the current default\nif (logger-\u003eShouldLog(LogLevel::kInfo)) {\n  logger-\u003eLog(LogMessage{.level \u003d LogLevel::kInfo, .message \u003d \"scan ready\"});\n}\n\n// Or configure from catalog-style properties (applies the \"level\" key):\nauto sink \u003d std::make_shared\u003cMySink\u003e();\nauto status \u003d sink-\u003eInitialize({{std::string(kLevelProperty), \"warn\"}});  // -\u003e kWarn\n```\n\nThe same example is documented inline in `logger.h`.\n\n**Tests** — `logger_test`: default-logger API, level-from-property,\ninvalid level rejected, concurrent swap/read, and logging during thread\nteardown. Built and run with clang/libc++ (spdlog ON and OFF).\n\nThis pull request and its description were written by Isaac."
    },
    {
      "commit": "28163ce3ff26963b0310dff6dbcf2f6c14f94748",
      "tree": "108ceb8ff0294006eb702c8daffb0f3291f55f2c",
      "parents": [
        "82b0adb1ab8989f8e5df47cb58419a28727ca2a7"
      ],
      "author": {
        "name": "Zehua Zou",
        "email": "zehuazou2000@gmail.com",
        "time": "Mon Jun 22 16:42:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 16:42:41 2026 +0800"
      },
      "message": "feat: parallelize reading manifests (#697)"
    },
    {
      "commit": "82b0adb1ab8989f8e5df47cb58419a28727ca2a7",
      "tree": "05d38d629af6d38422f0c521e25b3dcb3907bc4e",
      "parents": [
        "6f503f9af75978a34b13dfab121a9cbdc9268b6a"
      ],
      "author": {
        "name": "Zehua Zou",
        "email": "zehuazou2000@gmail.com",
        "time": "Mon Jun 22 16:08:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 16:08:12 2026 +0800"
      },
      "message": "chore: make pre-commit and ci clang-format version consistent (#769)"
    },
    {
      "commit": "6f503f9af75978a34b13dfab121a9cbdc9268b6a",
      "tree": "e8004032153573607e5518c1c14106867547d829",
      "parents": [
        "e9a68b7e6b1407785b37fbf90a78044be9bc4166"
      ],
      "author": {
        "name": "Manu Zhang",
        "email": "OwenZhang1990@gmail.com",
        "time": "Sun Jun 21 23:49:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 21 23:49:29 2026 +0800"
      },
      "message": "feat: add DeleteFiles update API (#709)\n\n## Summary\n- Add a DeleteFiles snapshot update API and wire it through table and\ntransaction update flows.\n- Add DeleteFiles implementation/build integration.\n- Add coverage for path matching, case-insensitive row filters, empty\ndelete commits, and strict-projection partial-match rejection.\n\n## Validation\n- `cmake --build build --target table_update_test`\n- `./build/src/iceberg/test/table_update_test\n\u0027--gtest_filter\u003dDeleteFilesTest.*\u0027`\n\nCo-authored-by: Codex \u003ccodex@openai.com\u003e"
    },
    {
      "commit": "e9a68b7e6b1407785b37fbf90a78044be9bc4166",
      "tree": "024f6ec5a7014ba295d5c1f00432e8da0f13d39c",
      "parents": [
        "255657beae7d142e574acefc17a9e50c56ffca99"
      ],
      "author": {
        "name": "lishuxu",
        "email": "lishuxu@gmail.com",
        "time": "Sat Jun 20 20:10:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 20 20:10:47 2026 +0800"
      },
      "message": "fix(rest): avoid default catalog reference cycle (#764)\n\nStore the cached default catalog view as a weak_ptr so AsCatalog() can\nreuse a live view without keeping it alive from the RestCatalog root."
    },
    {
      "commit": "255657beae7d142e574acefc17a9e50c56ffca99",
      "tree": "8ce8fd88afa958a89c3b413d63762b26b1507c90",
      "parents": [
        "950fbfffc5130102a3e3ee10818ff124a218ae1b"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Sat Jun 20 19:27:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 20 19:27:26 2026 +0800"
      },
      "message": "feat: add merge append (#699)"
    },
    {
      "commit": "950fbfffc5130102a3e3ee10818ff124a218ae1b",
      "tree": "d7e9ca09bea5829c7830a743edcc4ef866015f94",
      "parents": [
        "6452715fde84837cdb42707376f025c638f60397"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Fri Jun 19 20:25:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 20:25:09 2026 +0800"
      },
      "message": "chore(ci): enable sccache for Meson Windows builds (#761)"
    },
    {
      "commit": "6452715fde84837cdb42707376f025c638f60397",
      "tree": "db8611acb4f5f34fedca6a7c5271e3c36be48ec4",
      "parents": [
        "6f50a39d2680160b19d21e25844b98bf32e0ddd5"
      ],
      "author": {
        "name": "Zehua Zou",
        "email": "zehuazou2000@gmail.com",
        "time": "Fri Jun 19 05:31:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 05:31:43 2026 +0800"
      },
      "message": "fix: MergingSnapshotUpdate should not contain deleted file during retry (#707)"
    },
    {
      "commit": "6f50a39d2680160b19d21e25844b98bf32e0ddd5",
      "tree": "8fb84dd4ec7339d52c383c16f926d256f3de7cf2",
      "parents": [
        "9a2e21da10be52410bfcdb71e836341cb785c98c"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Fri Jun 19 05:31:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 05:31:30 2026 +0800"
      },
      "message": "feat: add uniqueValue optimization for notEq/notIn in InclusiveMetricsEvaluator (#754)\n\nWhen a column has a single unique value (no nulls, no NaNs, and lower\nbound \u003d\u003d upper bound), notEq(X) and notIn({...X...}) can prune files\nwhere that unique value matches the predicate, returning\nROWS_CANNOT_MATCH. Previously these always returned ROWS_MIGHT_MATCH,\nnever pruning.\n\nThis mirrors the upstream Java InclusiveMetricsEvaluator.uniqueValue()\nlogic. The StrictMetricsEvaluator is unchanged: its existing\nbounds-based notEq/notIn logic already covers the single-value case,\nmatching upstream Java which has no uniqueValue helper there.\n\nPorts the corresponding\ntestNotEqWithSingleValue/testNotInWithSingleValue cases from the Java\ntest suite.\n\n---------\n\nCo-authored-by: Junwang Zhao \u003czhjwpku@gmail.com\u003e"
    },
    {
      "commit": "9a2e21da10be52410bfcdb71e836341cb785c98c",
      "tree": "eae330f07db7643656198b2015b0a8feb48ca857",
      "parents": [
        "92feae1e06604fcd7a170b973784a245332464dc"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Fri Jun 19 05:31:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 05:31:09 2026 +0800"
      },
      "message": "fix: skip only null partition value rows in ParseDataFile (#756)\n\n## Summary\n\n`ParseDataFile()` in `manifest_reader.cc` iterated over rows for each\npartition child field and used `break` to skip null partition values.\n`break` exits the entire inner row loop, so once a null value was\nencountered, **all subsequent rows for that partition column were\nskipped** and never had their partition values parsed.\n\nThe fix changes `break` to `continue`, so only the current null row is\nskipped while the remaining rows are still processed.\n\n## Changes\n\n- `src/iceberg/manifest/manifest_reader.cc`: `break` → `continue` in the\npartition-value row loop.\n- `src/iceberg/test/manifest_reader_test.cc`: add regression test\n`NullPartitionValueDoesNotSkipSubsequentRows` that writes a manifest\nwith a null partition value before non-null ones and verifies the later\nrows are parsed correctly.\n\n## Testing\n\n- New test passes for manifest versions V1/V2/V3.\n- Confirmed the test fails with the original `break`\n(`partition.num_fields()` is 0 instead of 1 for rows after the null\none).\n- Full `manifest_test` suite passes (171 tests)."
    },
    {
      "commit": "92feae1e06604fcd7a170b973784a245332464dc",
      "tree": "c6ffc370657d98cee9a8c9f4c72f6f7e09a14fb6",
      "parents": [
        "8bbda0ccf54e372f5efcbdb9c0c86e26af413ef6"
      ],
      "author": {
        "name": "Zehua Zou",
        "email": "zehuazou2000@gmail.com",
        "time": "Thu Jun 18 23:45:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 23:45:52 2026 +0800"
      },
      "message": "fix: fast append should not contain deleted file during retry process (#706)"
    },
    {
      "commit": "8bbda0ccf54e372f5efcbdb9c0c86e26af413ef6",
      "tree": "c940f3fe7827542856c3c0ce09bf0e53f991591d",
      "parents": [
        "cf0af5b1b8aaf0df971f1c0ee07e83e68b0f6567"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Wed Jun 17 13:28:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 13:28:43 2026 +0800"
      },
      "message": "feat: implement purge support in DropTable for InMemoryCatalog and SqlCatalog (#744)\n\nWhen purge\u003dtrue, delete all metadata files (current + metadata log\nentries) before unregistering the table. Old log files are deleted first\nso the current metadata file remains as an anchor for retries."
    },
    {
      "commit": "cf0af5b1b8aaf0df971f1c0ee07e83e68b0f6567",
      "tree": "5a762e5587b2b382b3074d8dcaa272c3cb74cbde",
      "parents": [
        "a2bbf180cd0a8ef51ff7510e182a9efe10d25e39"
      ],
      "author": {
        "name": "Rahul Goel",
        "email": "goel.rahul4200@gmail.com",
        "time": "Wed Jun 17 01:27:46 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 13:27:46 2026 +0800"
      },
      "message": "fix: cast to unsigned char in ASCII case conversion (#748)\n\nfix: cast to unsigned char in ASCII case conversion \n\n`std::tolower`/`toupper` are UB when passed a negative `char`, which is\nwhat you get for any non-ASCII byte in a signed `char`.\n`StringUtils::ToLower`, `ToUpper`, and `EqualsIgnoreCase`\n  all did this. Cast through `unsigned char`.\n\nBehavior for ASCII is unchanged; this doesn\u0027t add Unicode case folding,\njust fixes the UB.\n\n  Related: #613\n\n---------\n\nCo-authored-by: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "a2bbf180cd0a8ef51ff7510e182a9efe10d25e39",
      "tree": "11ea1d441d250ca5a8d2f6932b5f6a4ba46b5058",
      "parents": [
        "fc9781f4b3ed168e4eed701d4f6074bfc909d789"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Wed Jun 17 07:26:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 13:26:21 2026 +0800"
      },
      "message": "fix: validate truncate widths in utility entrypoints (#739)\n\n## Summary\n\n- Reject non-positive widths in the `TruncateLiteral` and\n`TruncateLiteralMax` utility entrypoints.\n- Reject zero width in `TruncateUTF8Max`, which returns a `Result` and\ncan report invalid input directly.\n- Add regression coverage for zero and negative widths across numeric,\ndecimal, string, and binary literal truncation.\n\n## Why\n\nThe truncate transform validates its width before creating a transform\nfunction, but the utility functions can also be called directly. Without\na guard there, invalid widths can reach modulo operations or iterator\narithmetic in the type-specific implementations.\n\n## Testing\n\n- `cmake --build build --target util_test`\n- `ctest --test-dir build -R util_test --output-on-failure`"
    },
    {
      "commit": "fc9781f4b3ed168e4eed701d4f6074bfc909d789",
      "tree": "e06aca292638545a9a7f141ebc0e5d3afe0477dd",
      "parents": [
        "2169e31616617f38d3d160f7bf09825f711a05d5"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Tue Jun 16 10:40:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 16:40:12 2026 +0800"
      },
      "message": "fix(rest): reject empty namespace separators (#740)\n\n## Summary\n\n- Reject empty REST namespace separators in namespace encode/decode\nhelpers.\n- Reject empty namespace separators when constructing `ResourcePaths`.\n- Add regression coverage for direct helper calls and the resource path\nconfig boundary.\n\n## Why\n\n`DecodeNamespace` advances by `separator.size()` after each match. An\nempty separator never advances the cursor, so a misconfigured separator\ncan hang namespace parsing.\n\n## Testing\n\n- `cmake -S . -B build-rest -G Ninja -DICEBERG_BUILD_BUNDLE\u003dOFF\n-DICEBERG_BUILD_REST\u003dON -DICEBERG_BUILD_HIVE\u003dOFF\n-DICEBERG_BUILD_SQL_CATALOG\u003dOFF`\n- `cmake --build build-rest --target rest_catalog_test`\n- `ctest --test-dir build-rest -R rest_catalog_test --output-on-failure`"
    },
    {
      "commit": "2169e31616617f38d3d160f7bf09825f711a05d5",
      "tree": "ca6fc3c625240b5842e04765eecb2eb246287e64",
      "parents": [
        "40cc9922bb17d70df1de5044b6f2b5a17d808080"
      ],
      "author": {
        "name": "Gang Wu",
        "email": "ustcwg@gmail.com",
        "time": "Tue Jun 16 16:30:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 16:30:17 2026 +0800"
      },
      "message": "feat(rest): add session-aware REST catalog (#750)\n\nAdd SessionContext and SessionCatalog APIs, make RestCatalog a\nsession-aware root, and bind REST catalog operations through default,\ncontextual, and table-scoped catalog views.\n\nRoute contextual and table auth through AuthManager, preserve table\nresponse config for scoped catalogs, and fail closed on unsupported\ntable FileIO config."
    },
    {
      "commit": "40cc9922bb17d70df1de5044b6f2b5a17d808080",
      "tree": "f294c42edc18bc48a469abc02ef152a1148097f9",
      "parents": [
        "1777794fc01dfcaf45c932b6aa2d1c5c8e0e9175"
      ],
      "author": {
        "name": "liuxiaoyu",
        "email": "45345701+MisterRaindrop@users.noreply.github.com",
        "time": "Tue Jun 16 14:50:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 14:50:11 2026 +0800"
      },
      "message": "feat(hive): vendor Hive Metastore IDL and generated bindings (#749)\n\n- Update vendored Hive Metastore IDL to Hive 4.0.1.\n- Check in generated HMS/fb303 C++ bindings.\n- Add a regeneration script plus lint/license exclusions for generated sources."
    },
    {
      "commit": "1777794fc01dfcaf45c932b6aa2d1c5c8e0e9175",
      "tree": "62ef1ca8e89f2b3409a954d20569c6a214d3fb42",
      "parents": [
        "64691e4bf408fc1161b09a4d551ed29cfb5e06f4"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Tue Jun 16 14:45:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 14:45:27 2026 +0800"
      },
      "message": "feat: implement RenameTable in InMemoryCatalog (#742)\n\nReplace the NotImplemented stub with a full implementation that:\n- Returns early as a no-op when renaming a table to itself\n- Returns NoSuchTable when the source table does not exist\n- Returns AlreadyExists when the destination table already exists\n- Moves the metadata location from source to destination identifier\n\nAdd unit test covering rename to self, nonexistent source, destination\nconflict, and full rename + load verification."
    },
    {
      "commit": "64691e4bf408fc1161b09a4d551ed29cfb5e06f4",
      "tree": "517468436cbf492a2ea427f3a85c9caf633b1b3d",
      "parents": [
        "f71f485394caf75b7f3db2f705882c3e8341d825"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Tue Jun 16 14:41:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 14:41:19 2026 +0800"
      },
      "message": "fix: reject tag refs for main snapshot ref (#745)\n\nValidate that the reserved main snapshot ref is always a branch, and\npreserve snapshot log timestamps for newly added snapshots without\noverwriting table metadata update time.\n\nThis behavior is aligned with Java\u0027s TableMetadata.Builder.setRef"
    },
    {
      "commit": "f71f485394caf75b7f3db2f705882c3e8341d825",
      "tree": "11fd4712f3ac914d2696a54cf90fe788f42d50b8",
      "parents": [
        "796efb35dbb5036689d6bae91d18aaa5a8c4daf0"
      ],
      "author": {
        "name": "Rahul Goel",
        "email": "goel.rahul4200@gmail.com",
        "time": "Tue Jun 16 02:13:14 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 14:13:14 2026 +0800"
      },
      "message": "fix: Handle unknown record_count better (#747)\n\nFixes #732  Only special-case ```record_count \u003d\u003d 0;``` \nLet negative/unknown counts fall through\nto normal strict metrics evaluation."
    },
    {
      "commit": "796efb35dbb5036689d6bae91d18aaa5a8c4daf0",
      "tree": "89e548688a1242424c6e66e8c19269d8781108a5",
      "parents": [
        "bb83edec9cb766be750e2191ec5cc8152cb44314"
      ],
      "author": {
        "name": "Gang Wu",
        "email": "ustcwg@gmail.com",
        "time": "Tue Jun 16 13:13:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 13:13:48 2026 +0800"
      },
      "message": "fix: align rest table update serde with java/spec (#716)"
    },
    {
      "commit": "bb83edec9cb766be750e2191ec5cc8152cb44314",
      "tree": "a0d38d00bb49990d7191ccb04c0b84c08d0496d2",
      "parents": [
        "cb79f2983575c1ea7f4526b1926a81ac0d7b5826"
      ],
      "author": {
        "name": "wzhuo",
        "email": "wngzhuo@gmail.com",
        "time": "Tue Jun 16 13:13:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 13:13:18 2026 +0800"
      },
      "message": "feat: Collect Parquet NaN metrics during writes (#727)\n\nCollects NaN value counts for float and double columns during Parquet\nwrites, since the Parquet footer statistics do not track NaN counts.\n\n## Changes\n\n- **Write-side NaN metric collection** (`FieldMetricsCollector`): A\nvisitor that walks each record batch before writing, accumulating value\ncounts, null counts, NaN counts, and NaN-excluding lower/upper bounds\nfor float/double fields.\n- **MetricsConfig-aware skipping**: Fields whose `MetricsMode` is\n`kNone` are skipped entirely, avoiding wasted work.\n- **Integration with existing footer metrics**: Write-side\n`FieldMetrics` take precedence over footer statistics in\n`ParquetMetrics::GetMetrics`, so NaN counts are populated while\ncounts/bounds still fall back to footer stats when write-side data isn\u0027t\navailable.\n- **Tests**: `ParquetMetricsTest` now overrides `ReportsNanCounts()` to\n`true`, and existing NaN test cases verify NaN counts alongside existing\nvalue/null count assertions.\n\n## Behavior alignment with Java\n\n- Fields nested inside lists/maps do not get NaN metrics (both Java and\nC++ agree — Java collects then discards; C++ skips collection entirely).\n- NaN values are excluded from lower/upper bounds in both\nimplementations.\n- Float/double fields with all-NaN values correctly set\n`nan_value_count` without setting bounds."
    },
    {
      "commit": "cb79f2983575c1ea7f4526b1926a81ac0d7b5826",
      "tree": "bdb890822ee5f171ac62a8b0f3a7fc1b098f4f2d",
      "parents": [
        "8d576ed93afccf5a7334d01f814ce56c5acc4273"
      ],
      "author": {
        "name": "kamcheungting-db",
        "email": "91572897+kamcheungting-db@users.noreply.github.com",
        "time": "Mon Jun 15 19:02:04 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 10:02:04 2026 +0800"
      },
      "message": "feat(logging): add LogLevel severity enum (#722)\n\n## What\n\nFirst of PR that adds a logging system to iceberg-cpp.\n\nThis PR adds LogLevel — the severity scale every later piece builds on —\nand nothing else.\n\n- enum class LogLevel { kTrace, kDebug, kInfo, kWarn, kError, kCritical,\nkFatal, kOff }, ordered most-to-least verbose so \"should this log?\" is a\nplain level \u003e\u003d threshold check. kOff is the max sentinel for disabling\nlogging.\n- constexpr ToString(LogLevel) and a case-insensitive LogLevelFromString\nreturning Result\u003cLogLevel\u003e — same idiom as CounterUnit in\nmetrics/counter.h.\n\nHeader-only: this PR adds src/iceberg/logging/log_level.h, wires the new\nsrc/iceberg/logging/ directory into CMake, and adds log_level_test.cc\n(ToString/FromString round-trip, case-insensitivity, unknown-input\nerror, ordering).\n\n## Why\n\niceberg-cpp has no logging today — only error-as-value Result. This\nstack introduces a pluggable logger; levels are the foundational\nvocabulary, landed on their own so the\nrest reviews cleanly.\n\n\n## Testing\n\ncompiled and run with clang++ -std\u003dc++23 -stdlib\u003dlibc++ (clang 18).\n\nThe logging module builds clean and a behavior driver passes (levels\nround-trip, macro formatting + source location, gate filtering,\ndisabled-arg elision, never-throws fallback, FATAL emit-then-abort,\ncompile-time stripping).\n\nFull ctest -R logging_test + the spdlog-ON build still want a C++23\ntoolchain with network (gtest/spdlog via FetchContent) in CI."
    },
    {
      "commit": "8d576ed93afccf5a7334d01f814ce56c5acc4273",
      "tree": "82e3489cb48deb3080e3fd35071f6c827e9a577e",
      "parents": [
        "7324142d373d836ab068d94eb52fae7ff948dda1"
      ],
      "author": {
        "name": "Xinli Shang",
        "email": "shangx@uber.com",
        "time": "Mon Jun 15 02:36:23 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 17:36:23 2026 +0800"
      },
      "message": "refactor: harden FileCleanupStrategy with retry and parallel deletes (#649)\n\n### What\n\n* `FileCleanupStrategy` now takes an `OptionalExecutor` in its\nconstructor. When `DeleteWith()` is configured, per-path deletes fan out\nthrough `TaskGroup\u003c\u003e` -- uses the supplied executor when set, otherwise\nruns the callbacks serially on the calling thread via\n`RunTasksSingleThreaded`. Preserves prior single-threaded behavior by\ndefault.\n* The `FileIO::DeleteFiles` bulk path is wrapped in\n`RetryRunner\u003cretry::StopRetryOn\u003cErrorKind::kNotFound\u003e\u003e` with a tight\nbudget (2 retries, 100ms-1s backoff, 5s total). Mirrors Java\u0027s\n`Tasks.foreach(...).stopRetryOn(NotFoundException.class).retry(N)`. The\nretry primarily helps atomic-bulk FileIO impls (e.g. an S3\n`DeleteObjects`-backed FileIO) ride out transient throttles --\nbest-effort, see code comment for the fail-fast-iterative caveat.\n* New public builder\n`ExpireSnapshots::ExecuteDeleteWith(OptionalExecutor)` (named after\nJava\u0027s `executeDeleteWith(ExecutorService)`) so callers opt in to\nparallel deletion; threaded through both `IncrementalFileCleanup` and\n`ReachableFileCleanup`.\n* `DeleteWith()` doc note clarifies that the user-supplied callback may\nbe invoked concurrently from worker threads and must be thread-safe.\n* Drops the `std::async` / `std::thread` / `std::span` machinery and the\nad-hoc retry loop -- replaced by `util/task_group.h` and\n`util/retry_util.h` from #687.\n\n### Test coverage\n\nExisting 25 `ExpireSnapshots*` tests continue to pass unchanged (they\nhit the default no-executor path).\n\nAdds `ExpireSnapshotsCleanupTest.ExecutorDispatchesDeletesConcurrently`\n-- wires a `test::ThreadExecutor` through `ExecuteDeleteWith()`, runs an\n`ExpireSnapshotId` cleanup with a custom `DeleteWith` callback, and\nasserts the executor received one submission per file (data + manifest +\nmanifest-list \u003d 3) and that all paths show up in the mutex-guarded sink."
    },
    {
      "commit": "7324142d373d836ab068d94eb52fae7ff948dda1",
      "tree": "a7c380ce52cb0d11678f093f88d7e9364b3adc41",
      "parents": [
        "cc4d35f25d7f3f6d7eab9a432a337cb6886ee9f2"
      ],
      "author": {
        "name": "Huangshi Tian",
        "email": "All-less@users.noreply.github.com",
        "time": "Mon Jun 15 00:55:29 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 12:55:29 2026 +0800"
      },
      "message": "feat(inspect): add base metadata table interface (#607)\n\nThis PR kicks off the implementation of table inspection support.\n\n- Add `MetadataTable` class (without scan support for now).\n- Add `SnapshotsTable` and `HistoryTable` as example impl."
    },
    {
      "commit": "cc4d35f25d7f3f6d7eab9a432a337cb6886ee9f2",
      "tree": "afc607e60575c3a3c8cdae2e9a3b53d208b3a23e",
      "parents": [
        "8d88bef10676c052afe0b171df697deaf420ac16"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Mon Jun 15 12:50:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 12:50:23 2026 +0800"
      },
      "message": "doc: add release history for release v0.3.0 (#743)\n\nCo-authored-by: Gang Wu \u003custcwg@gmail.com\u003e"
    },
    {
      "commit": "8d88bef10676c052afe0b171df697deaf420ac16",
      "tree": "c3a676c03eed7f4a2d096903a6009f9ddd0ac336",
      "parents": [
        "5eb32df030fdd0fe735fcf824046c66e0ddb1f0e"
      ],
      "author": {
        "name": "Junwang Zhao",
        "email": "zhjwpku@gmail.com",
        "time": "Mon Jun 15 11:26:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 11:26:03 2026 +0800"
      },
      "message": "fix: allow avro date reads from plain int (#728)\n\nper https://github.com/apache/iceberg/pull/16446/changes"
    },
    {
      "commit": "5eb32df030fdd0fe735fcf824046c66e0ddb1f0e",
      "tree": "99cdca224d53c530704e1d76689cb0866458a3cd",
      "parents": [
        "a68602cfe49e45ae252450d4bc09fe83cbf3dd34"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Mon Jun 15 05:23:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 11:23:45 2026 +0800"
      },
      "message": "Fix URL encoding for non-ASCII bytes (#738)\n\n## Summary\n\n- Treat URL encoder input bytes as unsigned before splitting them into\nhex nibbles.\n- Add UTF-8 regression coverage for `café` encoding to `caf%C3%A9`.\n\n## Why\n\nOn platforms where `char` is signed, bytes \u003e\u003d 0x80 can become negative\nbefore the hex lookup. That can lead to undefined behavior or incorrect\npercent encoding for non-ASCII strings.\n\n## Testing\n\n- `cmake -S . -B build -G Ninja -DICEBERG_BUILD_BUNDLE\u003dOFF\n-DICEBERG_BUILD_REST\u003dOFF -DICEBERG_BUILD_HIVE\u003dOFF\n-DICEBERG_BUILD_SQL_CATALOG\u003dOFF`\n- `cmake --build build --target util_test`\n- `ctest --test-dir build -R util_test --output-on-failure`"
    }
  ],
  "next": "a68602cfe49e45ae252450d4bc09fe83cbf3dd34"
}
