)]}'
{
  "log": [
    {
      "commit": "84d24eb8efcec9448566de09e94d2d4b74b21ebe",
      "tree": "8495d6f860dac423b72cef5bae19cfe68230587c",
      "parents": [
        "7015e5ed09fb1aa7e076f1c5b799f7ba6d5ed33c"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Mon Jul 20 11:16:15 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 11:16:15 2026 -0400"
      },
      "message": "Add doc example for multipart upload to `GoogleCloudStorage::create_multipart` (#803)\n\n* Add doc example for multipart upload to GoogleCloudStorage::create_multipart\n\nAdd a runnable (`no_run`) example on the `MultipartStore` impl for\n`GoogleCloudStorage` showing the full low-level flow: `create_multipart`,\n`put_part` for each part, and `complete_multipart` to finalize.\n\nAlso link to the example from `MultipartStore::create_multipart` so it\nis discoverable from the trait definition.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Update src/gcp/mod.rs\n\nCo-authored-by: Kevin Liu \u003ckevinjqliu@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Kevin Liu \u003ckevinjqliu@users.noreply.github.com\u003e"
    },
    {
      "commit": "7015e5ed09fb1aa7e076f1c5b799f7ba6d5ed33c",
      "tree": "c5df06d98f1897d5c10b0d64fbe7258ced442a20",
      "parents": [
        "226307ea52b471edfffbbfff49f98cb024ea5ede"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Mon Jul 20 10:30:36 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:30:36 2026 -0400"
      },
      "message": "Add doc example for multipart upload to AmazonS3::create_multipart (#801)\n\n* Add doc example for multipart upload to AmazonS3::create_multipart\n\nAdd a runnable (`no_run`) example on the `MultipartStore` impl for\n`AmazonS3` showing the full low-level flow: `create_multipart`,\n`put_part` for each part, and `complete_multipart` to finalize.\n\nAlso link to the example from `MultipartStore::create_multipart` so it\nis discoverable from the trait definition.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Fix double space in create_multipart doc link references\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "226307ea52b471edfffbbfff49f98cb024ea5ede",
      "tree": "6ac67a3cee6b3a9d8efbf185833b56a65dbc9223",
      "parents": [
        "c7316d29face118e7409eead0cda098f38589428"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Mon Jul 20 10:28:46 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:28:46 2026 -0400"
      },
      "message": "Add doc example for multipart upload to MicrosoftAzure::create_multipart (#802)\n\nAdd a runnable (`no_run`) example on the `MultipartStore` impl for\n`MicrosoftAzure` showing the full low-level flow: `create_multipart`,\n`put_part` for each part, and `complete_multipart` to finalize.\n\nAlso link to the example from `MultipartStore::create_multipart` so it\nis discoverable from the trait definition.\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "c7316d29face118e7409eead0cda098f38589428",
      "tree": "153bbbd1c48c6373c5257df1aa90b114dedc736f",
      "parents": [
        "c66dd123a7ff7704e45ce75237653bb82f027609"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Jul 10 10:03:16 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 10:03:16 2026 -0400"
      },
      "message": "Update version to 0.14.1 and add CHANGELOG (#794)\n\n* Update version to 0.14.1 and add CHANGELOG\n\n* update\n\n* Updates\n\n* Restore 0.14.0 changelog"
    },
    {
      "commit": "c66dd123a7ff7704e45ce75237653bb82f027609",
      "tree": "956037ec40100fcfec65e6db5f3036c942ee6055",
      "parents": [
        "7a7deeaee23ea35d6c3bcf3138c001836a6f44de"
      ],
      "author": {
        "name": "Emil Ernerfeldt",
        "email": "emil.ernerfeldt@gmail.com",
        "time": "Fri Jul 10 06:51:52 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 09:51:52 2026 -0400"
      },
      "message": "Cache Azure user delegation key for SAS signing (#781)\n\n* fixup: typo unparseable -\u003e unparsable\n\n* Redact secret parts of `UserDelegationKey` from `Debug`\n\n* test(azure): cover delegation key cache behavior\n\n* Add evidence for 7 day claim, rename functions\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "7a7deeaee23ea35d6c3bcf3138c001836a6f44de",
      "tree": "60f96cf840b4493998caf76a7f05a32583215070",
      "parents": [
        "19be0b11ff83831fcf968aee448f6f216425b0ad"
      ],
      "author": {
        "name": "Nick",
        "email": "24689722+ntjohnson1@users.noreply.github.com",
        "time": "Fri Jul 10 09:03:58 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 09:03:58 2026 -0400"
      },
      "message": "Do not explicitly add `Host` header when making requests with  S3Builder (#790)\n\n* fix: don\u0027t pin Host header when signing S3 requests\n\nThe SigV4 signer inserted an explicit `Host` header on the outgoing\nrequest. reqwest carries that header across redirects, so when an\nS3-compatible gateway answers GET with a cross-host 302 — e.g. the\nHugging Face gateway at `s3.hf.co` redirecting to a Xet CDN on\n`cas-bridge.xethub.hf.co` — the stale `Host: s3.hf.co` header poisoned\nthe redirected request and the download failed with a connection error.\n`list`/`head` (no redirect) worked, but every `get` failed.\n\nHost must still be part of the SigV4 signature, so it is now added to a\nthrowaway copy of the headers used only to compute the signature; the\nactual Host header is left to the transport (hyper), which derives it\nfrom the request URL and regenerates it on redirect. The produced\nsignature is unchanged (existing signing tests still pass), so AWS S3 and\nother providers are unaffected.\n\nAddresses #706 (Hugging Face Storage Buckets).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* test: add throwaway HF S3 gateway verification harness\n\nAdds `verification/hf-smoke`, the standalone harness used to verify the Host-header\nfix end-to-end against a real Hugging Face Storage Bucket (issue #706):\n- exercises get / ranged get / head / list / list_with_delimiter / copy / multipart /\n  conditional create / bulk delete, plus presigned-URL download (Signer trait);\n- has a read-only mode (get/head/list only) for Read-scoped tokens;\n- `gather.py` (a uv PEP-723 script) collects + boto3-validates credentials;\n- `repro.rs` isolates the reqwest cross-host-redirect behaviour;\n- `live-results.sample.md` is an actual passing run against `s3.hf.co`.\n\nThis is committed only for reviewer inspection and is reverted by the next commit;\nit is not part of the object_store crate.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Revert \"test: add throwaway HF S3 gateway verification harness\"\n\nThis reverts commit d5fa4550a4877c329b3ef94bab791f59a6c69e81.\n\n* Update comment on why headers are handled in this specific way\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e\n\n* Clarify HOST mutation\n\n* Cargo fmt\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "19be0b11ff83831fcf968aee448f6f216425b0ad",
      "tree": "d6a78d1cefae8dea6d4c23d7c6ced31dd1e276ef",
      "parents": [
        "e3b8561f1d0991850830755bb8f9a68b0e68c516"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Jul 10 08:55:06 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 08:55:06 2026 -0400"
      },
      "message": "Update release process to use RC tags (#796)"
    },
    {
      "commit": "e3b8561f1d0991850830755bb8f9a68b0e68c516",
      "tree": "3875f2a37471d6de8de701830643e97305ddb5a4",
      "parents": [
        "e64e8e349e111b1a39e60a27ac83bb59f4f1b45b"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Jul 10 08:54:20 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 08:54:20 2026 -0400"
      },
      "message": "Add automatic GitHub release workflow (#797)"
    },
    {
      "commit": "e64e8e349e111b1a39e60a27ac83bb59f4f1b45b",
      "tree": "5e44e5bb4807e59dae6bc869f40ac302d5d2e560",
      "parents": [
        "18102f35d2c81dfbc9aefbb5797c33b39f2641d5"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Jul 10 08:53:08 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 08:53:08 2026 -0400"
      },
      "message": "Pin Rust toolchain to 1.97.0 and fix clippy useless_borrows_in_formatting (#799)\n\nAdds a rust-toolchain.toml (mirroring apache/arrow-rs) pinning the\ntoolchain to 1.97.0 so CI uses a stable, reproducible Rust version and\nis not surprised by new lints in future releases.\n\nRust 1.97.0\u0027s clippy added the useless_borrows_in_formatting lint, which\nflags redundant references in format! arguments. Fixes the resulting\nfailures in the azure module.\n\nCloses #798\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "18102f35d2c81dfbc9aefbb5797c33b39f2641d5",
      "tree": "2132adb26dd417c432130e8ef5b16bc892df3fdc",
      "parents": [
        "7e854ef3c728fd7dca4a705bf26141c9a40e3a55"
      ],
      "author": {
        "name": "Douman",
        "email": "douman@gmx.se",
        "time": "Thu Jul 09 09:08:24 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 20:08:24 2026 -0400"
      },
      "message": "impl HttpError::new_boxed to provide user with ability to ctor from already boxed error (#789)"
    },
    {
      "commit": "7e854ef3c728fd7dca4a705bf26141c9a40e3a55",
      "tree": "8c5e792968e5090d89ad8bc1905af7968a62a95a",
      "parents": [
        "09adc41b05faada6b233746d866e0ab63a56f208"
      ],
      "author": {
        "name": "Andrew Duffy",
        "email": "a10y@users.noreply.github.com",
        "time": "Wed Jul 08 21:55:24 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 16:55:24 2026 -0400"
      },
      "message": "fix(aws): recognize S3 dual-stack endpoints in URL parsing (#780)\n\n`AmazonS3Builder::parse_url` matched S3 hostnames against a fixed set of\npatterns via `splitn(4, \u0027.\u0027)`. Dual-stack endpoints insert a `dualstack`\nlabel after `s3` (e.g. `s3.dualstack.\u003cregion\u003e.amazonaws.com` for path-style\nand `\u003cbucket\u003e.s3.dualstack.\u003cregion\u003e.amazonaws.com` for virtual-hosted),\nwhich matched none of the patterns and fell through to `UrlNotRecognised`.\n\nBecause `ObjectStoreScheme::parse` already classifies these URLs as S3,\n`DefaultObjectStoreRegistry::resolve` would call into the S3 builder and\nthen fail with `ObjectStore not found`.\n\nAdd handling for both dual-stack forms, setting the endpoint explicitly so\nthe `dualstack` label is preserved (IPv6 addressing) rather than being lost\nwhen the endpoint is reconstructed from the region. Includes a registry\nregression test plus builder and scheme-parse coverage.\n\n\nClaude-Session: https://claude.ai/code/session_014n2xnhDiTk4T8RESdRDgDS\n\nSigned-off-by: Andrew Duffy \u003candrew@a10y.dev\u003e\nCo-authored-by: Claude \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "09adc41b05faada6b233746d866e0ab63a56f208",
      "tree": "81187e7ffde492952eec8eb9a7db42d321f13af0",
      "parents": [
        "c2048e03380ca4656203ab0f0421873382ecf161"
      ],
      "author": {
        "name": "Krisztián Szűcs",
        "email": "szucs.krisztian@gmail.com",
        "time": "Wed Jul 08 21:49:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 15:49:16 2026 -0400"
      },
      "message": "Reduce lock hold time in DefaultObjectStoreRegistry::deregister (#792)\n\nCompute the URL key and path segments before acquiring the write\nlock, so the lock is only held for the actual map mutation."
    },
    {
      "commit": "c2048e03380ca4656203ab0f0421873382ecf161",
      "tree": "10282e289a53ab3ee042c6fbde6998280cc2acc7",
      "parents": [
        "fd44ebb9c1158660795ec22d7b11acf31c3fe113"
      ],
      "author": {
        "name": "Krisztián Szűcs",
        "email": "szucs.krisztian@gmail.com",
        "time": "Wed Jul 08 20:23:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 14:23:53 2026 -0400"
      },
      "message": "feat: add deregister to ObjectStoreRegistry (#784)\n\nAdd `ObjectStoreRegistry::deregister`, the inverse of `register`: it removes\nthe store registered at the exact scheme/authority/path of a URL and returns\nit, pruning emptied tree branches. A default implementation returns `None`, so\nthe addition is non-breaking for existing implementors."
    },
    {
      "commit": "fd44ebb9c1158660795ec22d7b11acf31c3fe113",
      "tree": "754e47160d8a3b33e8f4c8241bfe599ba705661b",
      "parents": [
        "f04df7ac094cebd9d5217cae828f413f6af0686f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jul 02 21:59:15 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 21:59:15 2026 +1000"
      },
      "message": "build(deps): update quick-xml requirement from 0.40.1 to 0.41.0 (#785)\n\nUpdates the requirements on [quick-xml](https://github.com/tafia/quick-xml) to permit the latest version.\n- [Release notes](https://github.com/tafia/quick-xml/releases)\n- [Changelog](https://github.com/tafia/quick-xml/blob/master/Changelog.md)\n- [Commits](https://github.com/tafia/quick-xml/compare/v0.40.1...v0.41.0)\n\n---\nupdated-dependencies:\n- dependency-name: quick-xml\n  dependency-version: 0.41.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "f04df7ac094cebd9d5217cae828f413f6af0686f",
      "tree": "a4fb27bbbf694ed1807278889cbf586a96e22789",
      "parents": [
        "93f6f88f4d2d58e89c93f917db05ebf3b24825b7"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Tue Jun 30 10:25:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 10:25:26 2026 +0200"
      },
      "message": "Coalesce contiguous ranges in LocalFileSystem::get_ranges (#777)\n\nMerge only contiguous/overlapping ranges (gap 0) into a single read, so we\nnever read unrequested bytes but still collapse many adjacent ranges into\nfar fewer syscalls. A fast path skips the coalescing bookkeeping entirely\nwhen nothing merges, avoiding overhead for disjoint ranges.\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "93f6f88f4d2d58e89c93f917db05ebf3b24825b7",
      "tree": "593905ebe057c8471c6e38108c5d3cc530d543a6",
      "parents": [
        "74f7a96dc351670c7b8694c2b474c8b6cd4d6d0c"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Mon Jun 22 11:15:56 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 11:15:56 2026 -0400"
      },
      "message": "CI: stop swallowing emulator setup failures (#776)"
    },
    {
      "commit": "74f7a96dc351670c7b8694c2b474c8b6cd4d6d0c",
      "tree": "0b8602b2d8ef151625f1987a7a8caf1eaa1ac4d6",
      "parents": [
        "d9eaded6c8440d4f87a680fdc47c6bcc7cbf23c6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 22 09:39:58 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 09:39:58 2026 -0400"
      },
      "message": "build(deps): bump actions/checkout from 6 to 7 (#768)\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "d9eaded6c8440d4f87a680fdc47c6bcc7cbf23c6",
      "tree": "c7a485e4c4e206cfd00786e66a81699e10261168",
      "parents": [
        "de0029aa91f7727015fab37e623fdbe11672914b"
      ],
      "author": {
        "name": "Sylvain Monné",
        "email": "sylvain@monne.contact",
        "time": "Mon Jun 22 15:39:23 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 09:39:23 2026 -0400"
      },
      "message": "fix: quote ETags per RFC 9110 in InMemory and LocalFileSystem (#770)\n\nCloud-backed stores (AWS, Azure, GCP) return ETags as quoted-strings\n(e.g. `\"abc123\"`) and expect `If-Match`/`If-None-Match` values in that\nsame form, as required by RFC 9110 §8.8.3.\n\n`InMemory` and `LocalFileSystem`, by contrast, were producing bare\ntokens, making them inconsistent with the cloud backends and harder to\nuse as drop-in replacements."
    },
    {
      "commit": "de0029aa91f7727015fab37e623fdbe11672914b",
      "tree": "f427c7aa0acc9b4ba7f6ffeb1e1538b90aa7ffac",
      "parents": [
        "6c5b299d4274219ecd406cc4828b94efe4a14f8d"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Sat Jun 20 06:47:27 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 20 06:47:27 2026 -0400"
      },
      "message": "Update copyright year in NOTICE.txt (#772)"
    },
    {
      "commit": "6c5b299d4274219ecd406cc4828b94efe4a14f8d",
      "tree": "10963e36aea23a92763589ecd18f2a424778dba0",
      "parents": [
        "c9db3e22d2eed690b7a9c14a988ec85d6b9304ad"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Thu Jun 18 13:48:52 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 13:48:52 2026 -0400"
      },
      "message": "Update version to 0.14.0 and add CHANGELOG (#765)\n\n* Update version to 0.14.0\n\n* Update changelog generator\n\n* Update changelog\n\n* update notes\n\n* upate\n\n* fix"
    },
    {
      "commit": "c9db3e22d2eed690b7a9c14a988ec85d6b9304ad",
      "tree": "bff2e27928451c1c16008429e34f02d64c0d630a",
      "parents": [
        "596e1f695bd7d351a0a5d89fff14d1d2b87b853a"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Thu Jun 18 07:17:23 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 07:17:23 2026 -0400"
      },
      "message": "Clarify aws-lc-rs feature docs and fix CI comment URL (#764)\n\n* Clarify aws-lc-rs feature docs and fix CI comment URL\n\nFollow-on documentation polish from the review of #707.\n\n- Document that the `aws-lc-rs` feature requires the user to also select an\n  aws-lc-rs backend when the built-in `reqwest` transport is not enabled.\n- Fix the malformed github.com URL in the CI testing-matrix comment.\n\nComment/documentation-only; no code or behavior changes.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Update src/lib.rs\n\nCo-authored-by: Kevin Liu \u003ckevinjqliu@users.noreply.github.com\u003e\n\n* fmt\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Kevin Liu \u003ckevinjqliu@users.noreply.github.com\u003e"
    },
    {
      "commit": "596e1f695bd7d351a0a5d89fff14d1d2b87b853a",
      "tree": "7afb6ed977ccf28cf83a23821f20355de3c9c531",
      "parents": [
        "c219109b5e9cb368c5da35adcc45e93d804a3cae"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Thu Jun 18 06:36:14 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 06:36:14 2026 -0400"
      },
      "message": "fix(local): fsync create-mode rename source delete (#758)\n\n* fix(local): fsync create-mode rename delete\n\n* better"
    },
    {
      "commit": "c219109b5e9cb368c5da35adcc45e93d804a3cae",
      "tree": "cec295cea3c6acfb54cdf86358fd6b3277e722a2",
      "parents": [
        "590cbc9a1a862b87310495a26b2669c575e8bf68"
      ],
      "author": {
        "name": "Jack Ye",
        "email": "yezhaoqin@gmail.com",
        "time": "Wed Jun 17 14:27:31 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 17:27:31 2026 -0400"
      },
      "message": "feat: add AzureConfigKey::CredentialType to select Azure credential method (#710)\n\nWhen multiple Azure credential configurations are present in\nenvironment variables (e.g. both workload identity and client secret),\nthe builder\u0027s fixed resolution order may pick an undesired credential.\nThis adds a `credential_type` config key that lets users explicitly\nselect which credential method to use, bypassing the priority chain.\n\nSupported values: auto, bearer_token, access_key, client_secret,\nworkload_identity, sas_token, azure_cli, managed_identity.\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "590cbc9a1a862b87310495a26b2669c575e8bf68",
      "tree": "c8164aa2ae2fb11ff15e5ba37650d4b0aa1af38e",
      "parents": [
        "1a612825dc6f8ccfe1d8bd871df6acae2c68527e"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Wed Jun 17 16:27:58 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 16:27:58 2026 -0400"
      },
      "message": "Update release schedule on README.md (#763)\n\n* Update release schedule on README.md\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Update 0.14.1 target date to August 2026 to match ticket\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "1a612825dc6f8ccfe1d8bd871df6acae2c68527e",
      "tree": "24b9b7152c498422cb5227fb21faa6d3fb5ad73f",
      "parents": [
        "996e084600a4adc7e14cf34d332d3cb0972547b4"
      ],
      "author": {
        "name": "Kevin Zhou",
        "email": "1274230+BearMinimum98@users.noreply.github.com",
        "time": "Wed Jun 17 12:54:52 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 15:54:52 2026 -0400"
      },
      "message": "Support PutMultipartOptions for MultipartStore::create_multipart for AWS/GCP. (#754)\n\n* Add create_multipart_opts\n\n* Add is_empty for TagSet\n\n* fix test\n\n---------\n\nCo-authored-by: Kevin Zhou \u003ckevinzhou@roblox.com\u003e"
    },
    {
      "commit": "996e084600a4adc7e14cf34d332d3cb0972547b4",
      "tree": "12709bfad844a84c145cdfbeb36d7339af838e92",
      "parents": [
        "d1c0e43e8ba817e4d139a2713b5b888df38943e6"
      ],
      "author": {
        "name": "Geoffry Song",
        "email": "goffrie@gmail.com",
        "time": "Wed Jun 17 12:42:15 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 15:42:15 2026 -0400"
      },
      "message": "Pluggable Crypto / Update reqwest 0.13 (#707)\n\n* Pluggable Crypto\n\n* Add CI\n\n* Upgrade reqwest to 0.13\n\n* Certificates\n\n* Switch to aws-lc-rs\n\n* Fix CI\n\n* Fix doc\n\n* Remove reqwest/rustls-no-provider feature dependency\n\n* Compile with reqwest/rustls feature in CI when not selecting a crypto backend\n\n* Hack around WASIp1 CI by downgrading reqwest\n\n* Update docs\n\n* Improve\n\n* Document how to use flags\n\n* fixes\n\n* Updates\n\n* typo\n\n* docs\n\n* Clarify base feature crypto and HTTP requirements\n\n* revert non fips\n\n* Improve comments, and fix clippy\n\n* Use pluggable crypto API for Azure CPK key digest instead of ring\n\nThe merged CPK support (#742) computed the encryption key SHA-256 via\nring::digest directly, which fails to compile on this branch since\nazure-base no longer depends on ring. Route it through the CryptoProvider\nabstraction (DigestAlgorithm::Sha256) instead.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Raphael Taylor-Davies \u003cr.taylordavies@googlemail.com\u003e\nCo-authored-by: Adam Gutglick \u003cadam@spiraldb.com\u003e\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e\nCo-authored-by: Kevin Liu \u003ckevin.jq.liu@gmail.com\u003e\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "d1c0e43e8ba817e4d139a2713b5b888df38943e6",
      "tree": "2ac32ca5e765dfa79c5179272d6ba542af018ba7",
      "parents": [
        "bdc9f632a645273d6412512a2213e9cbe6b926e4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jun 17 15:39:43 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 15:39:43 2026 -0400"
      },
      "message": "build(deps): update itertools requirement from 0.14.0 to 0.15.0 (#755)\n\nUpdates the requirements on [itertools](https://github.com/rust-itertools/itertools) to permit the latest version.\n- [Changelog](https://github.com/rust-itertools/itertools/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/rust-itertools/itertools/compare/v0.14.0...v0.15.0)\n\n---\nupdated-dependencies:\n- dependency-name: itertools\n  dependency-version: 0.15.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "bdc9f632a645273d6412512a2213e9cbe6b926e4",
      "tree": "51114bb2c950eefe48d81cdd20ae805e93175eb2",
      "parents": [
        "5dc1c5a1c327553bcaca58f17cbe0db6cd908410"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Wed Jun 17 15:29:39 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 15:29:39 2026 -0400"
      },
      "message": "Fix flaky local close file test (#757)"
    },
    {
      "commit": "5dc1c5a1c327553bcaca58f17cbe0db6cd908410",
      "tree": "ee1f21a8906fd951b619bf183f9d0e6852d6ce4c",
      "parents": [
        "dd0afcbc75d22a76f871101125bcc8782f6ef85f"
      ],
      "author": {
        "name": "Braedon Wooding",
        "email": "braedon.wooding@displayr.com",
        "time": "Thu Jun 18 03:13:33 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 13:13:33 2026 -0400"
      },
      "message": "Supporting CPK (Customer Provided Keys) in Azure Blob Storage requests (#742)\n\n* Supporting CPK (Customer Provided Keys) in Azure Blob Storage requests\n\n* Fix Azure CPK copy source authorization\n\n* Apply #[cfg(feature \u003d reqwest)] to tests\n\n---------\n\nCo-authored-by: Kevin Liu \u003ckevin.jq.liu@gmail.com\u003e"
    },
    {
      "commit": "dd0afcbc75d22a76f871101125bcc8782f6ef85f",
      "tree": "c775384e989aff6334c8a7cddf7acf97086a588e",
      "parents": [
        "49a71257721b103b50ca02efa838ce0fc7d65f75"
      ],
      "author": {
        "name": "Pierre Barre",
        "email": "pierre@barre.sh",
        "time": "Wed Jun 17 13:48:52 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 07:48:52 2026 -0400"
      },
      "message": "feat(local): add fsync to LocalFileSystem for durability (#643)\n\n* feat(local): add opt-in fsync to LocalFileSystem for durability\n\n* Fix docs\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "49a71257721b103b50ca02efa838ce0fc7d65f75",
      "tree": "28e243dc9fbd8c3db7018c5044e9dc5d8183d5e3",
      "parents": [
        "1d5ad198527725f10093b311f8884e04e64c8cd6"
      ],
      "author": {
        "name": "brankogrb-db",
        "email": "branko.grbic@databricks.com",
        "time": "Mon Jun 15 20:15:08 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 14:15:08 2026 -0400"
      },
      "message": "Use path-style URL in resolve_bucket_region for dotted bucket names (#752)\n\nS3\u0027s wildcard TLS cert (*.s3.amazonaws.com) only covers one DNS\nlabel. Use path-style for bucket names containing dots.\n\nCloses #747"
    },
    {
      "commit": "1d5ad198527725f10093b311f8884e04e64c8cd6",
      "tree": "ce6f08f59012e7e1ede31f22e31efea90bce55e4",
      "parents": [
        "2e859ee8d482d3732c09bb14052b59b75dd11194"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Mon Jun 15 13:59:23 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 13:59:23 2026 -0400"
      },
      "message": "refactor!: remove `cloud` feature alias (#751)"
    },
    {
      "commit": "2e859ee8d482d3732c09bb14052b59b75dd11194",
      "tree": "9ad9a2766bff6af5ae3aaf2f7976f82868c7efa3",
      "parents": [
        "d339aee4b7a8d63eff9df3599ceeced2d4ce03c3"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Fri Jun 12 14:56:54 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 14:56:54 2026 -0400"
      },
      "message": "docs: explain `*-base` features and document the full feature flag set (#750)\n\n* docs\n\n* more docs\n\n* more docs\n\n* minor changes"
    },
    {
      "commit": "d339aee4b7a8d63eff9df3599ceeced2d4ce03c3",
      "tree": "aa1d631205bbfb90f5f53e55c017f9197d8a5b75",
      "parents": [
        "f554e600e83a43275367db3f6b0eb15343865873"
      ],
      "author": {
        "name": "Bram Westerbaan",
        "email": "github@bram.westerbaan.name",
        "time": "Fri Jun 12 19:07:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 13:07:42 2026 -0400"
      },
      "message": "Make `reqwest` optional (#724)\n\n* makes reqwest optional\n\n* refactor!: make aws/azure/gcp/http depend on reqwest, not cloud\n\nThe role of cloud has been taken over by reqwest + cloud-base.\n\nImplements https://github.com/apache/arrow-rs-object-store/pull/724#discussion_r3342155266\n\nBREAKING CHANGE: according to cargo semver-checks: aws/azure/gcp/http no longer enable the cloud feature.\n\n* document feature flags exactly as kevinjqliu proposed\n\n* switch from `feature\u003d\"cloud\"` to `feature\u003d\"reqwest\"`\n\n* Apply suggestion from @kevinjqliu\n\nCo-authored-by: Kevin Liu \u003ckevinjqliu@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e\nCo-authored-by: Kyle Barron \u003ckyle@developmentseed.org\u003e\nCo-authored-by: Kyle Barron \u003ckylebarron2@gmail.com\u003e\nCo-authored-by: Kevin Liu \u003ckevinjqliu@users.noreply.github.com\u003e"
    },
    {
      "commit": "f554e600e83a43275367db3f6b0eb15343865873",
      "tree": "b88903d508d8b1ccccc33c72ed23fa457b769ce2",
      "parents": [
        "52f511967122dfce81bcd0009be4957c0de7ce7a"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Fri Jun 12 07:04:10 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 07:04:10 2026 -0400"
      },
      "message": "ci: use --locked when installing cargo-msrv and cargo-audit (#746)"
    },
    {
      "commit": "52f511967122dfce81bcd0009be4957c0de7ce7a",
      "tree": "aa0188fda121ae6b27c1f653b02f4d68690e424c",
      "parents": [
        "18ed86caf5d06aa318f38158501eeb736f28a73b"
      ],
      "author": {
        "name": "Chris",
        "email": "criccomini@users.noreply.github.com",
        "time": "Fri Jun 12 04:03:39 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 07:03:39 2026 -0400"
      },
      "message": "Add `Extensions` in `*Result` objects (#743)\n\n* add extensions support to results\n\n* add extensions to MultiStatus\n\n* fmt\n\n* rustdocs\n\n* get rid of extensions in paginated list result\n\n* add extension result integration tests"
    },
    {
      "commit": "18ed86caf5d06aa318f38158501eeb736f28a73b",
      "tree": "60c8396ed26232d91be32775b7fcb0b9becb12e6",
      "parents": [
        "af634d01d1e87119183fcce8f8a45df989f71d3d"
      ],
      "author": {
        "name": "Smriti Agrawal",
        "email": "54806047+SmritiAgrawal04@users.noreply.github.com",
        "time": "Fri Jun 12 01:44:14 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 16:14:14 2026 -0400"
      },
      "message": "Whitelisting Onelake API \u0026 Workspace PL FQDNs (#1) (#711)\n\n* Whitelisting Onelake API \u0026 Workspace PL FQDNs\n\n* Addressing comments to whitelist api-onelake fqdns and add UTs\n\n* Reverting the mistakenly modified UT\n\n* Adding validation for xy in WS-PL URL \u0026 case insensitive regex\n\n* Making regex an optional dependency\n\n* Eliminating the use of regex for ws-pl fqdn matching\n\n* Adding a separte method \u0027azure_test_workspace_private_link\u0027 for ws-pl tests\n\n* Organising private link UTs\n\n* Adding integration test for WSPL \u0026 rebasing with unpstream\n\n* Whitelisting Onelake API \u0026 Workspace PL FQDNs\n\n* Addressing comments to whitelist api-onelake fqdns and add UTs\n\n* Reverting the mistakenly modified UT\n\n* Adding validation for xy in WS-PL URL \u0026 case insensitive regex\n\n* Making regex an optional dependency\n\n* Eliminating the use of regex for ws-pl fqdn matching\n\n* Adding a separte method \u0027azure_test_workspace_private_link\u0027 for ws-pl tests\n\n* Organising private link UTs\n\n* Fixing cargo fmt\n\n* Fixing Clippy\n\n* Fixing Clippy\n\n* Fixing Clippy\n\n* Modified Integration test to pass workspace \u0026 artifact id within URL only\n\n* Fixing Clippy\n\n* Adding WSPL support for ABFSS scheme as well\n\n* Adding comments for readability\n\n* Adding comments for readability\n\n---------\n\nCo-authored-by: Smriti Agrawal \u003csmagrawal@microsoft.com\u003e"
    },
    {
      "commit": "af634d01d1e87119183fcce8f8a45df989f71d3d",
      "tree": "01c7c4c5afbc54d4ce4c7d789a655c6adafcafce",
      "parents": [
        "233b23aeb6cdf16c4e89f4018d49f10b907825a1"
      ],
      "author": {
        "name": "Frank Elsinga",
        "email": "frank@elsinga.de",
        "time": "Wed Jun 10 20:47:10 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 14:47:10 2026 -0400"
      },
      "message": "refactor: unify internal naming of `allow_invalid_certificates` (#718)\n\n* fix naming diff\n\n* fix fmt"
    },
    {
      "commit": "233b23aeb6cdf16c4e89f4018d49f10b907825a1",
      "tree": "713f41c2d4a1b20044516f70bccbaa945865b3ed",
      "parents": [
        "a9a83f18071d9e4c5636d379aaa0513c1e06d0d4"
      ],
      "author": {
        "name": "Thomas Tanon",
        "email": "thomas@pellissier-tanon.fr",
        "time": "Tue Jun 09 22:52:15 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 16:52:15 2026 -0400"
      },
      "message": "Add `impl\u003cT: Signed\u003e Signed for PrefixStore\u003cT\u003e` (#739)\n\nSmall convenience feature"
    },
    {
      "commit": "a9a83f18071d9e4c5636d379aaa0513c1e06d0d4",
      "tree": "40684d63573621b069eb5c2280363378c2b6d722",
      "parents": [
        "255b5f59e59440dabc910880afd5c71331b57ad1"
      ],
      "author": {
        "name": "Hengfei Yang",
        "email": "hengfei.yang@gmail.com",
        "time": "Wed Jun 03 04:12:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 16:12:46 2026 -0400"
      },
      "message": "feat: add option to disable bulk delete for aws (#734)\n\n* feat: add option to disable bulk delete for aws\n\n* fix(aws): correct documentation references for delete methods\n\n* test: add more unit tests"
    },
    {
      "commit": "255b5f59e59440dabc910880afd5c71331b57ad1",
      "tree": "0fa634273b605e4009aa1b5d22de1a51dce6fd74",
      "parents": [
        "8c7fb0a1e2fc794e375b205eab26b73d31032e2d"
      ],
      "author": {
        "name": "siddharthmittal13",
        "email": "59646960+siddharthmittal13@users.noreply.github.com",
        "time": "Tue Jun 02 15:48:03 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 11:18:03 2026 +0100"
      },
      "message": "feat(gcp): support explicit bearer token config in parse flow (#717)\n\n* feat(gcp): support explicit bearer token config in parse flow\n\n* feat(gcp): resolved lint issue and addressed review comments.\n\n---------\n\nCo-authored-by: Siddharth Mittal \u003csiddharth.mittal@teradata.com\u003e"
    },
    {
      "commit": "8c7fb0a1e2fc794e375b205eab26b73d31032e2d",
      "tree": "5274a0348a20209698a070c7d6afe0fc5847ff83",
      "parents": [
        "8bb878a07b1a0e07521c1374e8302e9a21bb0f62"
      ],
      "author": {
        "name": "bboissin",
        "email": "bboissin@users.noreply.github.com",
        "time": "Tue Jun 02 11:53:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 10:53:17 2026 +0100"
      },
      "message": "fix: fix incorrect splitting with line delimited streaming (#700)\n\n* fix: fix incorrect splitting with line delimited streaming\n\nIn some cases, valid CSV in datafusion would return:\n`Generic { store: \"LineDelimiter\", source: UnterminatedString }` due to incorrect logic.\n\nrecords_ends is a double ended iterator, so when calling next_back() the\nquoting/escaping logic would run in reverse, corrupting the internal state.\n\n* Use last instead of collecting into vec\n\n* Clippy\n\n---------\n\nCo-authored-by: Raphael Taylor-Davies \u003cr.taylordavies@googlemail.com\u003e"
    },
    {
      "commit": "8bb878a07b1a0e07521c1374e8302e9a21bb0f62",
      "tree": "9006fbed16aa9b7fd8786984d0238dd464ad8156",
      "parents": [
        "196c4719cf9b30d24f1ef25987c8199b021d2f22"
      ],
      "author": {
        "name": "Aleksandar Tomic",
        "email": "150942779+dbatomic@users.noreply.github.com",
        "time": "Tue Jun 02 11:30:59 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 10:30:59 2026 +0100"
      },
      "message": "feat(azure): expose `split_sas` for custom SAS credential providers (#721)\n\n`split_sas` parses an Azure Shared Access Signature string into the\n`Vec\u003c(String, String)\u003e` query pairs expected by\n`AzureCredential::SASToken`. It is what `MicrosoftAzureBuilder` runs\ninternally when a raw SAS string is supplied via `AzureConfigKey::SasKey`.\n\nUsers implementing their own `CredentialProvider\u003cCredential \u003d\nAzureCredential\u003e` that fetches SAS tokens at request time (e.g. tokens\nrefreshed from a secret manager or coordination service) currently have\nto reimplement this parser to feed pairs into\n`AzureCredential::SASToken`. Reimplementations are easy to get subtly\nwrong: in particular, using `form_urlencoded` decodes `+` as space,\nwhich corrupts base64-encoded SAS signatures.\n\nMake `split_sas` public, change its return type to the public\n`crate::Result\u003cVec\u003c(String, String)\u003e\u003e` (the inner `Error` variants\nalready convert into `crate::Error` via the existing `From` impl, so\nthe two existing internal call sites are unchanged), document it, and\nre-export it from `object_store::azure`. Add tests for the empty/`?`\nedge cases and the missing-`\u003d` error path."
    },
    {
      "commit": "196c4719cf9b30d24f1ef25987c8199b021d2f22",
      "tree": "da456c44aa5653500495e88e147cd434280cf0d2",
      "parents": [
        "b05890317a2e8b3c4ac5a401483ed8e7eb672ec0"
      ],
      "author": {
        "name": "Ilya Zlobintsev",
        "email": "ilya.zl@protonmail.com",
        "time": "Tue Jun 02 12:28:57 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 10:28:57 2026 +0100"
      },
      "message": "Add `with_signing_credentials` to GCP builder (#699)"
    },
    {
      "commit": "b05890317a2e8b3c4ac5a401483ed8e7eb672ec0",
      "tree": "ee997007887d11d07eccdac92342b6de29536f61",
      "parents": [
        "46abab96e8acab55e22434fba84154ce34ddcaf5"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed May 27 14:11:23 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 14:11:23 2026 +0100"
      },
      "message": "build(deps): update quick-xml requirement from 0.39.0 to 0.40.1 (#727)\n\nUpdates the requirements on [quick-xml](https://github.com/tafia/quick-xml) to permit the latest version.\n- [Release notes](https://github.com/tafia/quick-xml/releases)\n- [Changelog](https://github.com/tafia/quick-xml/blob/master/Changelog.md)\n- [Commits](https://github.com/tafia/quick-xml/compare/v0.39.0...v0.40.1)\n\n---\nupdated-dependencies:\n- dependency-name: quick-xml\n  dependency-version: 0.40.1\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "46abab96e8acab55e22434fba84154ce34ddcaf5",
      "tree": "a4b2a32629de0d1a8e8d3302843015a0b90a1787",
      "parents": [
        "994d60732c3379bc98982f5c4638996be0ee0d2f"
      ],
      "author": {
        "name": "rustyprimus",
        "email": "alex.github@rustyprimus.com",
        "time": "Wed May 27 16:11:05 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 14:11:05 2026 +0100"
      },
      "message": "fix(aws): set retry_error_body on bulk_delete_request (#733)\n\nAWS S3 can return HTTP 200 with a SlowDown or InternalError XML body\nfor DeleteObjects requests. The retry logic already handles this via\nbody_contains_error() when retry_error_body is set, and other requests\n(copy_part, complete_multipart) already use this flag. bulk_delete_request\nwas missing it, causing throttling errors to surface instead of being retried.\n\nCloses #277"
    },
    {
      "commit": "994d60732c3379bc98982f5c4638996be0ee0d2f",
      "tree": "21f6e9eca881d588ed6c158716619f9703d0dc04",
      "parents": [
        "6f1c9acc94636e059a2b3aef5c75e815e065cc89"
      ],
      "author": {
        "name": "james-rms",
        "email": "james@foxglove.dev",
        "time": "Thu May 21 02:21:36 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 17:21:36 2026 +0100"
      },
      "message": "GCP: fix copy (no) overwrite semantics (#713)"
    },
    {
      "commit": "6f1c9acc94636e059a2b3aef5c75e815e065cc89",
      "tree": "cac36f7ef74897dfce4eadb85ce8727bff9597ed",
      "parents": [
        "706b7d8b536fd02a8a323bb8dbeae344fc8d65eb"
      ],
      "author": {
        "name": "Koen Denecker",
        "email": "koen@polars.tech",
        "time": "Mon May 11 17:56:39 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 11:56:39 2026 -0400"
      },
      "message": "Add CRC64NVME checksum support (#633)\n\n* Add CRC64NVME checksum support\n\n* make enum non-exhaustive and more\n\n* fixup test bucket syntax\n\n* simplify with_payload SHA256 logic\n\n* avoid test interference\n\n* do not strip checksum responses"
    },
    {
      "commit": "706b7d8b536fd02a8a323bb8dbeae344fc8d65eb",
      "tree": "22753efc06f18a92d764e1951b9b5b83e21d782c",
      "parents": [
        "1a0d21edbfd54153c11500c3c81b27c86db5ce5f"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Thu May 07 02:32:59 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 11:32:59 2026 +0200"
      },
      "message": "fix(core): add missing version assignment (#691)"
    },
    {
      "commit": "1a0d21edbfd54153c11500c3c81b27c86db5ce5f",
      "tree": "c726bd62297d79cc7d83027e724a89668949d41f",
      "parents": [
        "e0fbe4966d6f0ee5e1ff6d4c9a4f71fdc98c22f8"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Wed May 06 07:05:40 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 16:05:40 2026 +0200"
      },
      "message": "fix(aws): populate default header for complete mutipart request (#688)"
    },
    {
      "commit": "e0fbe4966d6f0ee5e1ff6d4c9a4f71fdc98c22f8",
      "tree": "dee50096856cf752821a39120fe5ef933117283b",
      "parents": [
        "4d042dc6136e8eccdc559979663f6773419e83d3"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Wed May 06 05:44:45 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 20:44:45 2026 +0800"
      },
      "message": "fix(core): add missing extension assignment (#689)\n\n* fix(core): add missing extension assignment\n\n* clippy"
    },
    {
      "commit": "4d042dc6136e8eccdc559979663f6773419e83d3",
      "tree": "da4d836696e1ae2e21b18de396b47db69dd9424d",
      "parents": [
        "0c380a13612a1c3d91aa9b2c263422b3049858c0"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Wed May 06 05:44:25 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 20:44:25 2026 +0800"
      },
      "message": "fix(retry): respect range header on retry (#690)\n\n* fix(retry): respect range header on retry\n\n* clippy"
    },
    {
      "commit": "0c380a13612a1c3d91aa9b2c263422b3049858c0",
      "tree": "7bff544cf1b152bc3517f6a8e1c6b48464c222cc",
      "parents": [
        "9b8cf5246d6fade1e425b974ac58259af96748f6"
      ],
      "author": {
        "name": "Marco Neumann",
        "email": "marco@crepererum.net",
        "time": "Thu Apr 23 22:24:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 21:24:21 2026 +0100"
      },
      "message": "fix: clippy (#694)"
    },
    {
      "commit": "9b8cf5246d6fade1e425b974ac58259af96748f6",
      "tree": "a1465a4ca54f03e257f13e2dfec5daa5816bc723",
      "parents": [
        "00e03f312ffde5f98139a3623014745eedd7b894"
      ],
      "author": {
        "name": "Jonathan Giannuzzi",
        "email": "jgiannuzzi@users.noreply.github.com",
        "time": "Fri Apr 17 10:49:44 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 11:49:44 2026 +0200"
      },
      "message": "feat(local): explicit close with error checking for LocalFileSystem (#676)"
    },
    {
      "commit": "00e03f312ffde5f98139a3623014745eedd7b894",
      "tree": "90ae861f4f49fbf1efd7725a6601fcd8daf1c710",
      "parents": [
        "e89f62b6508f6f65873ce6a5017cd0d5d7395184"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Apr 15 17:57:38 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 17:57:38 2026 +0200"
      },
      "message": "build(deps): bump actions/github-script from 8 to 9 (#692)\n\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "e89f62b6508f6f65873ce6a5017cd0d5d7395184",
      "tree": "62968a4d6f51dc0de05094419d3f151daafcffc1",
      "parents": [
        "0646c6d9eb8e302caafbb564cd3e1fe1cca886ad"
      ],
      "author": {
        "name": "Alfonso Subiotto Marqués",
        "email": "alfonso.subiotto@polarsignals.com",
        "time": "Wed Apr 08 14:52:59 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 14:52:59 2026 +0200"
      },
      "message": "fix[prefix]: strip_meta from get_opts result in PrefixStore (#686)"
    },
    {
      "commit": "0646c6d9eb8e302caafbb564cd3e1fe1cca886ad",
      "tree": "a406bc75ff390874a993b142fcb50d920aabbbe3",
      "parents": [
        "5f36e0e6744dbdd199b66b69827ff1a6d43bfd76"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Tue Apr 07 04:18:25 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 13:18:25 2026 +0200"
      },
      "message": "fix(memory): fix out-of-order multipart upload for in-memory store (#683)"
    },
    {
      "commit": "5f36e0e6744dbdd199b66b69827ff1a6d43bfd76",
      "tree": "17bf6b68d27862d2511ac8bff85e03b53977a5e4",
      "parents": [
        "0fda34c5e0c00a7665649bd676c2d3d885ad3e20"
      ],
      "author": {
        "name": "Mak Nazečić-Andrlon",
        "email": "mak.andrlon@gmail.com",
        "time": "Tue Apr 07 19:54:22 2026 +1000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 11:54:22 2026 +0200"
      },
      "message": "Expose `read_timeout` from `reqwest` (#681)"
    },
    {
      "commit": "0fda34c5e0c00a7665649bd676c2d3d885ad3e20",
      "tree": "6c6296f888ad3b457c6cf84236689b8ce1ece9a8",
      "parents": [
        "719a29d0f6eca84268c61b0969d8dbe952e75e92"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 31 09:21:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 09:21:53 2026 +0200"
      },
      "message": "build(deps): update md-5 requirement from 0.10.6 to 0.11.0 (#679)\n\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "719a29d0f6eca84268c61b0969d8dbe952e75e92",
      "tree": "65a513a8745925c2e658549dc990b7a35af918bb",
      "parents": [
        "e9df6f7340af60243ec9890cc53a01ef12a7b402"
      ],
      "author": {
        "name": "Len Strnad",
        "email": "ljstrnadiii@gmail.com",
        "time": "Tue Mar 31 00:54:36 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 08:54:36 2026 +0200"
      },
      "message": "fix: support `AWS_REQUEST_PAYER\u003drequester` (#669)"
    },
    {
      "commit": "e9df6f7340af60243ec9890cc53a01ef12a7b402",
      "tree": "c9627e24616afa2fd0405d024a770aefa39dd3fd",
      "parents": [
        "7a65b75b0d26fd8a282999462cb7030fb85fdcc3"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Thu Mar 19 14:25:44 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 19:25:44 2026 +0100"
      },
      "message": "Update release schedule on README.md (#674)"
    },
    {
      "commit": "7a65b75b0d26fd8a282999462cb7030fb85fdcc3",
      "tree": "4e773b8bf65228e952241a91c5ee82c937dcbe28",
      "parents": [
        "d22f7f91d576ab7b2a12750751a76d30018cb12d"
      ],
      "author": {
        "name": "Marco Neumann",
        "email": "marco@crepererum.net",
        "time": "Thu Mar 19 15:23:13 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 15:23:13 2026 +0100"
      },
      "message": "chore: prepare `0.13.2` release (#671)"
    },
    {
      "commit": "d22f7f91d576ab7b2a12750751a76d30018cb12d",
      "tree": "1169e9a0a57f5b5a3a8e998174196cf4baa29a43",
      "parents": [
        "ebaee78c8bd05235b4ceb2a5125a125faae5da86"
      ],
      "author": {
        "name": "Jack Ye",
        "email": "jackye@apache.org",
        "time": "Thu Mar 19 04:06:03 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 12:06:03 2026 +0100"
      },
      "message": "fix: missing 5xx error body when retry exhausted (#618)\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "ebaee78c8bd05235b4ceb2a5125a125faae5da86",
      "tree": "8379ffbcb57fc38b68e92e0bd8243be575c4100b",
      "parents": [
        "7ded938312299ccc1ca517e34fe34326d8426ebb"
      ],
      "author": {
        "name": "Prashant Deva",
        "email": "prashant.deva@gmail.com",
        "time": "Thu Mar 19 04:04:53 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 12:04:53 2026 +0100"
      },
      "message": "Support --xa-s3 suffix for S3 Express One Zone bucket access points (#663)\n\nAWS recently introduced a new `--xa-s3` suffix for S3 Express One Zone\ndirectory buckets (in addition to the existing `--x-s3` suffix).\n`parse_bucket_az` only recognized `--x-s3`, causing a `ZoneSuffix` error\nfor buckets using the new suffix.\n\nCo-authored-by: Claude Opus 4.6 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "7ded938312299ccc1ca517e34fe34326d8426ebb",
      "tree": "f049957b2bab7acbc8a5e189ac86ba9eee1f4289",
      "parents": [
        "bdcac43fc637ac89cc80f18f4e16b3fb66fd0ec8"
      ],
      "author": {
        "name": "Ruslan Fadeev",
        "email": "github@kinrany.dev",
        "time": "Thu Mar 19 15:04:10 2026 +0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 19 12:04:10 2026 +0100"
      },
      "message": "Replace `Path::child` with `Path::join` (#666)\n\n* Path::join\n\n* update old uses"
    },
    {
      "commit": "bdcac43fc637ac89cc80f18f4e16b3fb66fd0ec8",
      "tree": "5289d6e0f5fd555a10192b58b354afd55622299f",
      "parents": [
        "ca15c63f652e1c5c2e776231ae77d08bb46375ea"
      ],
      "author": {
        "name": "Rajat Goel",
        "email": "405844+rajatgoel@users.noreply.github.com",
        "time": "Thu Mar 12 04:11:16 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 12 12:11:16 2026 +0100"
      },
      "message": "feat: Add support for AWS_ENDPOINT_URL_S3 environment variable (#590)\n\n* feat: Add support for AWS_ENDPOINT_URL_S3 env var\n\n* cargo fmt\n\n* comments"
    },
    {
      "commit": "ca15c63f652e1c5c2e776231ae77d08bb46375ea",
      "tree": "c627de97143ff1785f92fb1f65b845838fa00a02",
      "parents": [
        "41d32428cd625e4b86d3411b4f06a0dff7ecab47"
      ],
      "author": {
        "name": "Douman",
        "email": "douman@gmx.se",
        "time": "Thu Mar 12 01:25:55 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 11 17:25:55 2026 +0100"
      },
      "message": "Implement Clone for local and memory stores (#653)\n\nThese stores already use Arc internally and there is little reason not to provide benefit of Clone similar to cloud stores and enable parity with these"
    },
    {
      "commit": "41d32428cd625e4b86d3411b4f06a0dff7ecab47",
      "tree": "549fcf59530ab9d64d657498e9bd55ccb8a78ca8",
      "parents": [
        "62592027cb7d33ed843bc14fb77d7fc32f13ace5"
      ],
      "author": {
        "name": "Marco Neumann",
        "email": "marco@crepererum.net",
        "time": "Wed Mar 11 17:25:35 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 11 17:25:35 2026 +0100"
      },
      "message": "docs: clarify `Clone` behavior (#656)"
    },
    {
      "commit": "62592027cb7d33ed843bc14fb77d7fc32f13ace5",
      "tree": "a56cfd807d5ea94a0a71039d32232361e64eb626",
      "parents": [
        "66e640d1ba7b79d878e9423924ed5bff4f321b75"
      ],
      "author": {
        "name": "Miraculous Owonubi",
        "email": "omiraculous@gmail.com",
        "time": "Tue Mar 03 12:04:51 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 12:04:51 2026 +0100"
      },
      "message": "Unify `from_env` behaviours (#652)\n\n* parse_url_opts should match {S3,Azure,GCP}Builder::from_env\n\n* fix AmazonS3Builder::from_env documentation\n\n* fix parse_url_opts documentation\n\n* update test_url_http to ingest case insensitive data\n\n* fix sentence cut off"
    },
    {
      "commit": "66e640d1ba7b79d878e9423924ed5bff4f321b75",
      "tree": "6f34aa2c8a30cedd5fe43d1f12916e52a6a88db8",
      "parents": [
        "907653e46232edb3a635969bf288324b68d62cdc"
      ],
      "author": {
        "name": "Raphael Taylor-Davies",
        "email": "1781103+tustvold@users.noreply.github.com",
        "time": "Mon Mar 02 10:05:48 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 11:05:48 2026 +0100"
      },
      "message": "Switch TokenCache to RWLock (#648)\n\n* Switch TokenCache to RWLock\n\n* Clippy"
    },
    {
      "commit": "907653e46232edb3a635969bf288324b68d62cdc",
      "tree": "164933e7081bdf14f7e7eeac021852123163dab8",
      "parents": [
        "72cd13608ba9c2c566c609c377bd627281f83501"
      ],
      "author": {
        "name": "Frank Elsinga",
        "email": "frank@elsinga.de",
        "time": "Thu Feb 26 17:50:52 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 17:50:52 2026 +0100"
      },
      "message": "docs: add examples to the aws docs where appropriate (#651)\n\n* add examples to the aws docs where appropriate\n\n* fix ci"
    },
    {
      "commit": "72cd13608ba9c2c566c609c377bd627281f83501",
      "tree": "c737d783493b4f9f8da1ce42de41d4ff57ba328d",
      "parents": [
        "0ec788f8803d388a8c53990ba7d96c24c6d48906"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adamgsal@gmail.com",
        "time": "Thu Feb 19 16:30:28 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 19 17:30:28 2026 +0100"
      },
      "message": "Minimize futures dependency into relevant sub-crates (#646)\n\n* Minimize futures dependency into relevant sub-crates\n\n* Fix docs"
    },
    {
      "commit": "0ec788f8803d388a8c53990ba7d96c24c6d48906",
      "tree": "792d0f7535ec142c46d84a4d688f1f91ae0832c4",
      "parents": [
        "0af53d9424b2a29af0f49942420a19ada45dc5ec"
      ],
      "author": {
        "name": "Desmond Cheong",
        "email": "desmondcheongzx@gmail.com",
        "time": "Wed Feb 18 02:35:12 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 18 11:35:12 2026 +0100"
      },
      "message": "fix(azure): fix integer overflow in Fabric token expiry check (#641)\n\n* Fix Fabric token expiry check\n\n* Update test to check for the new token\n\n* Bikeshedding test"
    },
    {
      "commit": "0af53d9424b2a29af0f49942420a19ada45dc5ec",
      "tree": "b5a1d1a147cab8e14558371150414e793a934c65",
      "parents": [
        "8140480ba3f23a114b3da389566e5a4a3a47c179"
      ],
      "author": {
        "name": "Joseph Koshakow",
        "email": "koshy44@gmail.com",
        "time": "Wed Feb 18 05:33:56 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 18 11:33:56 2026 +0100"
      },
      "message": "Clarify ShuffleResolver doc-comments (#645)\n\nThis commit clarifies the ShuffleResolver doc-comments in two places by\nadding some additional details."
    },
    {
      "commit": "8140480ba3f23a114b3da389566e5a4a3a47c179",
      "tree": "38372a2c244807337d4b80b7414d90ed39f27fff",
      "parents": [
        "030f29d59ec055741e5f4de55e8a004d8fa44d5b"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adamgsal@gmail.com",
        "time": "Wed Feb 18 10:32:55 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 18 11:32:55 2026 +0100"
      },
      "message": "Introduce a \"tokio\" to allow pulling a trait-only build (#644)\n\nSigned-off-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e"
    },
    {
      "commit": "030f29d59ec055741e5f4de55e8a004d8fa44d5b",
      "tree": "9a40efd729d37fe5cd2d34606bb578957595dcc2",
      "parents": [
        "771372ee2fe5d75d85b5761810d902e4c45e763b"
      ],
      "author": {
        "name": "Marco Neumann",
        "email": "marco@crepererum.net",
        "time": "Thu Feb 12 17:59:12 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 12 17:59:12 2026 +0100"
      },
      "message": "chore: upgrade to `rand` 0.10 (#637)\n\n"
    },
    {
      "commit": "771372ee2fe5d75d85b5761810d902e4c45e763b",
      "tree": "a6bf31fbff1956a095c9116096f3096f49be54d7",
      "parents": [
        "50e1229a97225fa1d330cd925187e2b302d25676"
      ],
      "author": {
        "name": "singhsaabir",
        "email": "singh.saabir@gmail.com",
        "time": "Tue Feb 10 04:15:13 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 10 13:15:13 2026 +0100"
      },
      "message": "fix(aws): Include default headers in signature calculation (#484) (#636)\n\n* fix(aws): Include default headers in signature calculation (#484)\n\nWhen using `ClientOptions::with_default_headers()` to set S3 metadata\nheaders (like `x-amz-meta-*` or `x-amz-tagging`), these headers were not\nincluded in the AWS SigV4 signature calculation, causing S3 to reject\nrequests with \"headers present in the request which were not signed\".\n\nThis fix adds default headers to the request before signing in all three\nS3 request paths: `S3Client::request()`, `bulk_delete_request()`, and\n`get_request()`.\n\n* test(aws): Extend default headers signing test to cover all request paths\n\nAdd test coverage for bulk_delete_request and get_request to verify\ndefault headers are included in signature calculation. Extract\nassert_default_headers_signed and default_headers_config helpers to\nreduce duplication.\n\n* style(aws): Apply rustfmt formatting\n\n---------\n\nCo-authored-by: Saabir Singh \u003csaabirs@amazon.com\u003e"
    },
    {
      "commit": "50e1229a97225fa1d330cd925187e2b302d25676",
      "tree": "f9427242164f220c0b9c36b7d9d5924e4c0b41e8",
      "parents": [
        "7242bd1c8b89dd15880c3088d86ac2ba12af3421"
      ],
      "author": {
        "name": "Omar Khudeira",
        "email": "196368+omar@users.noreply.github.com",
        "time": "Tue Feb 10 06:14:33 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 10 13:14:33 2026 +0100"
      },
      "message": "Azure ADLS list_with_offset support (#623)\n\n* Add list_with_offset for Azure\n\n* Add list_from_exclusivity test\n\n* Update documentation on function\n\n* Remove unnecessary docs\n\n* Remove redundant tests\n\n* Run cargo fmt\n\n* Skip Azurite version check\n\n* Skip list_with_offset_exclusivity against Azure emulator\n\n* Fix failing test by changing behavior of list_with_offset if emulator is running instead of skipping a test\n\n* Update src/azure/mod.rs\n\nCo-authored-by: Marco Neumann \u003cmarco@crepererum.net\u003e\n\n---------\n\nCo-authored-by: Marco Neumann \u003cmarco@crepererum.net\u003e"
    },
    {
      "commit": "7242bd1c8b89dd15880c3088d86ac2ba12af3421",
      "tree": "0a9b1f08f374f4251b0297b67732984d2f85d3f5",
      "parents": [
        "fc620abc8ab9048063066afaf4153f44051125e1"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adamgsal@gmail.com",
        "time": "Tue Feb 10 10:03:32 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 10 11:03:32 2026 +0100"
      },
      "message": "Clarify behavior of parse_url_opts (#613)\n\nSigned-off-by: Adam Gutglick \u003cadam@spiraldb.com\u003e"
    },
    {
      "commit": "fc620abc8ab9048063066afaf4153f44051125e1",
      "tree": "0ac7d6a3f932f5164049ae29b45d7828baa674d8",
      "parents": [
        "744c3fca36c44bdd493c6107d58c9806f9ae4f0d"
      ],
      "author": {
        "name": "John Vandenberg",
        "email": "jayvdb@gmail.com",
        "time": "Fri Feb 06 19:34:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 06 12:34:14 2026 +0100"
      },
      "message": "Implement typos-cli (#570)\n\n* Implement typos-cli\n\n* Add liense header\n\n* Another typo"
    },
    {
      "commit": "744c3fca36c44bdd493c6107d58c9806f9ae4f0d",
      "tree": "705cb10e3cbb2ea6f8071ad4395c19c6afa2ff9b",
      "parents": [
        "2e419f8206e2c8b68a044606e9237cc206851084"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Feb 05 14:14:38 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 05 14:14:38 2026 +0100"
      },
      "message": "build(deps): update nix requirement from 0.30.0 to 0.31.1 (#616)\n\nUpdates the requirements on [nix](https://github.com/nix-rust/nix) to permit the latest version.\n- [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/nix-rust/nix/compare/v0.30.0...v0.31.1)\n\n---\nupdated-dependencies:\n- dependency-name: nix\n  dependency-version: 0.31.1\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "2e419f8206e2c8b68a044606e9237cc206851084",
      "tree": "ffc6746275bcfa35b93289ca8addad8a259ee322",
      "parents": [
        "05145235a2f8e68757fe02c22a0101da09b5e464"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adamgsal@gmail.com",
        "time": "Thu Feb 05 12:51:47 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 05 13:51:47 2026 +0100"
      },
      "message": "read_range with exact API when available (#628)\n\nSigned-off-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e"
    },
    {
      "commit": "05145235a2f8e68757fe02c22a0101da09b5e464",
      "tree": "b9ded56bce5e1d1384998146cc3e12ab93400028",
      "parents": [
        "c5f1b2b9af2790935c8ffc48ab8ba3ddb9103c16"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Thu Feb 05 07:41:40 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 05 13:41:40 2026 +0100"
      },
      "message": "use the correct fabric url (#631)\n\n"
    },
    {
      "commit": "c5f1b2b9af2790935c8ffc48ab8ba3ddb9103c16",
      "tree": "4c2548e7eb9b4e4c4032b9c0908766380e2deb2a",
      "parents": [
        "19264b856396f76c9cf31029d6c800feeeb53714"
      ],
      "author": {
        "name": "Daniël Heres",
        "email": "danielheres@gmail.com",
        "time": "Tue Feb 03 19:43:35 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 03 19:43:35 2026 +0100"
      },
      "message": "Avoid metadata lookup for `LocalFileSystem::read_ranges` and `chunked_stream` (#621)\n\n* Avoid metadata lookup\n\n* Avoid metadata lookup\n\n* Clippy\n\n* Allocation fix\n\n* Factor out error mapping, reduce duplication and simplify error handling\n\n* clippy\n\n* Simplify more\n\n---------\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "19264b856396f76c9cf31029d6c800feeeb53714",
      "tree": "d9a7608c827d5528718b1111f160763c6e207d53",
      "parents": [
        "8ef1aaa9cad5699971de1173d16637d01795da6e"
      ],
      "author": {
        "name": "Victor Ordaz",
        "email": "vitoordaz@users.noreply.github.com",
        "time": "Tue Feb 03 10:09:06 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 03 13:09:06 2026 -0500"
      },
      "message": "Implement tests for range and partial content responses (#619)\n\n* Implement tests for range and partial content responses\n\nAdded tests for handling partial content responses and retries for incomplete response bodies.\n\n* Add CONNECTION header import in get.rs\n\n* Clean up whitespace in get.rs\n\nRemoved unnecessary empty lines in the get.rs file."
    },
    {
      "commit": "8ef1aaa9cad5699971de1173d16637d01795da6e",
      "tree": "8accf9e4ddb9b7b69b620f7be46eba4c59dffbd0",
      "parents": [
        "9f4f679116d7291923e6d07d4142d8f74948bcd5"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adamgsal@gmail.com",
        "time": "Wed Jan 28 13:39:01 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 28 13:39:01 2026 +0000"
      },
      "message": "Unblock emulater based tests (#627)\n\n* Unblock emulater based tests\n\n* Use uv instead of pipx\n\nSigned-off-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e\n\n* Skip azurite API version check\n\n---------\n\nSigned-off-by: Adam Gutglick \u003cadamgsal@gmail.com\u003e"
    },
    {
      "commit": "9f4f679116d7291923e6d07d4142d8f74948bcd5",
      "tree": "d80dd4fef19c630449bd8bdc81263595d539d064",
      "parents": [
        "196e691b1f1b8e94c03b03d0afaf62f0a75dc9f6"
      ],
      "author": {
        "name": "Raphael Taylor-Davies",
        "email": "1781103+tustvold@users.noreply.github.com",
        "time": "Tue Jan 20 08:35:08 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 20 08:35:08 2026 +0000"
      },
      "message": "Fix Azure URL parsing (#604)\n\n"
    },
    {
      "commit": "196e691b1f1b8e94c03b03d0afaf62f0a75dc9f6",
      "tree": "e4a9b8aa89190cdcd0e789eb922a89a7a7a88521",
      "parents": [
        "b3027f8dfaf2cfd8c1502866849692a903839e8c"
      ],
      "author": {
        "name": "Raphael Taylor-Davies",
        "email": "1781103+tustvold@users.noreply.github.com",
        "time": "Wed Jan 14 20:42:39 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 14 20:42:39 2026 +0000"
      },
      "message": "Fix logical format conflict (#605)\n\n"
    },
    {
      "commit": "b3027f8dfaf2cfd8c1502866849692a903839e8c",
      "tree": "c4f695bf097855752df19c5de93b2886e184fd1b",
      "parents": [
        "1cf4925e51f678075d785bba198ad408644bf73a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jan 14 20:38:14 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 14 20:38:14 2026 +0000"
      },
      "message": "build(deps): update quick-xml requirement from 0.38.0 to 0.39.0 (#602)\n\nUpdates the requirements on [quick-xml](https://github.com/tafia/quick-xml) to permit the latest version.\n- [Release notes](https://github.com/tafia/quick-xml/releases)\n- [Changelog](https://github.com/tafia/quick-xml/blob/master/Changelog.md)\n- [Commits](https://github.com/tafia/quick-xml/compare/v0.38.0...v0.39.0)\n\n---\nupdated-dependencies:\n- dependency-name: quick-xml\n  dependency-version: 0.39.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "1cf4925e51f678075d785bba198ad408644bf73a",
      "tree": "94841ec5595d81bcb7085685c76af6c9b2dd5e9a",
      "parents": [
        "01a1c518372d78f56d3768fa5cc46e108b1b1758"
      ],
      "author": {
        "name": "Vladislav Wohlrath",
        "email": "10547281+vladidobro@users.noreply.github.com",
        "time": "Mon Jan 12 17:13:33 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 12 11:13:33 2026 -0500"
      },
      "message": "feat (azure): support for \u0027.blob.core.windows.net\u0027 in \u0027{az,abfs,abfss}://\u0027 (#431)\n\nCo-authored-by: Vladislav Wohlrath \u003cvladislav.wohlrath@second-foundation.eu\u003e"
    },
    {
      "commit": "01a1c518372d78f56d3768fa5cc46e108b1b1758",
      "tree": "c8b2ad1c17c1ad02e656cadbf6c8c214732cbbd1",
      "parents": [
        "d00911715c9faffd97b036740372b6b91d7b018e"
      ],
      "author": {
        "name": "Xin Sun",
        "email": "ddupgs@gmail.com",
        "time": "Sat Jan 10 02:35:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 09 13:35:50 2026 -0500"
      },
      "message": "feat: impl MultipartStore for PrefixStore (#587)\n\nChange-Id: I2d8ae7970cc77cfde3d1085dabafbb30332b2779"
    },
    {
      "commit": "d00911715c9faffd97b036740372b6b91d7b018e",
      "tree": "bfce65377671f08ab5919036bc827c81241f70c8",
      "parents": [
        "1e32f96d3167d4321814a07335bb26de6358cd6d"
      ],
      "author": {
        "name": "Adam Gutglick",
        "email": "adam@spiraldb.com",
        "time": "Thu Jan 08 21:51:39 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 08 16:51:39 2026 -0500"
      },
      "message": "Only read file metadata once in `LocalFileSystem::read_ranges` (#595)\n\n"
    },
    {
      "commit": "1e32f96d3167d4321814a07335bb26de6358cd6d",
      "tree": "dd11cf3575b9c21ff7420daadee9a8d5371c7f7e",
      "parents": [
        "5cb565b2fdf3200c74e1f1322badc60dd42f6730"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Thu Jan 08 16:33:26 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 08 16:33:26 2026 -0500"
      },
      "message": "Update version to 0.13.1 and add CHANGELOG (#599)\n\n* Bump version to 0.13.1\n\n* Update CHANGELOG\n\n* Update release schedule"
    },
    {
      "commit": "5cb565b2fdf3200c74e1f1322badc60dd42f6730",
      "tree": "ae8a20ed89f8a9b9ec6b63388ff18fb1124e256c",
      "parents": [
        "78717c522d74c8a680c5dc8724ce6569914177f3"
      ],
      "author": {
        "name": "Marco Neumann",
        "email": "marco@crepererum.net",
        "time": "Mon Jan 05 09:57:39 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 05 09:57:39 2026 -0600"
      },
      "message": "fix: `docs.rs` build failure (#591)\n\nSee https://docs.rs/crate/object_store/latest/builds/2752265 :\n\n```text\n[INFO] [stderr]  Documenting object_store v0.13.0 (/opt/rustwide/workdir)\n[INFO] [stderr] error[E0557]: feature has been removed\n[INFO] [stderr]   --\u003e src/lib.rs:18:29\n[INFO] [stderr]    |\n[INFO] [stderr] 18 | #![cfg_attr(docsrs, feature(doc_auto_cfg))]\n[INFO] [stderr]    |                             ^^^^^^^^^^^^ feature has been removed\n[INFO] [stderr]    |\n[INFO] [stderr]    \u003d note: removed in 1.92.0; see \u003chttps://github.com/rust-lang/rust/pull/138907\u003e for more information\n[INFO] [stderr]    \u003d note: merged into `doc_cfg`\n[INFO] [stderr]\n[INFO] [stderr] error: Compilation failed, aborting rustdoc\n[INFO] [stderr]\n[INFO] [stderr] For more information about this error, try `rustc --explain E0557`.\n[INFO] [stderr] error: could not document `object_store`\n```\n\nCo-authored-by: Andrew Lamb \u003candrew@nerdnetworks.org\u003e"
    },
    {
      "commit": "78717c522d74c8a680c5dc8724ce6569914177f3",
      "tree": "7af489f804b6435c294c811b7184fee0daa1db25",
      "parents": [
        "eedbf3d7d8c347eb114eeebc96cbf5b718f7b59b"
      ],
      "author": {
        "name": "Marco Neumann",
        "email": "marco@crepererum.net",
        "time": "Mon Jan 05 09:02:34 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 05 10:02:34 2026 -0500"
      },
      "message": "fix: `SO_LINGER` w/ zero doesn\u0027t block (also: it\u0027s just a test) (#592)\n\n"
    },
    {
      "commit": "eedbf3d7d8c347eb114eeebc96cbf5b718f7b59b",
      "tree": "1f6044acbdcd541d40ee4da31e6175ba5e97bf31",
      "parents": [
        "44e258cd592d6007a69315fd334beb396140a4f2"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Dec 19 09:03:16 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 19 09:03:16 2025 -0500"
      },
      "message": "Prepare for 0.13.0 release (#581)\n\n* Increase version to 0.13.0\n\n* Add CHANGELOG.md\n\n* Update\n\n* Update changelog"
    },
    {
      "commit": "44e258cd592d6007a69315fd334beb396140a4f2",
      "tree": "cc2d6f105469222f12d67b02957004f36ef44336",
      "parents": [
        "24e5fbc661056ad5ea6bdca6add633bbabb1d4ae"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Dec 19 08:59:12 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 19 08:59:12 2025 -0500"
      },
      "message": "Add A \"upgrading to 0.13.0\" guide in docs (#584)\n\n* Add upgrade guide\n\n* Add another example\n\n* Update src/lib.rs\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Update src/lib.rs\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Update src/lib.rs\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "24e5fbc661056ad5ea6bdca6add633bbabb1d4ae",
      "tree": "e46565694f2eef9f7f027c3c79209782aa397180",
      "parents": [
        "378bfe77bd7ddb62da44f722299f91e6dd172506"
      ],
      "author": {
        "name": "Andrew Lamb",
        "email": "andrew@nerdnetworks.org",
        "time": "Fri Dec 19 08:54:14 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 19 08:54:14 2025 -0500"
      },
      "message": "Update release schedule on README (#583)\n\n* Update release schedule on README\n\n* Add upgrade guide"
    },
    {
      "commit": "378bfe77bd7ddb62da44f722299f91e6dd172506",
      "tree": "d09210d59df5c5340dbe37b2c412730d27afc936",
      "parents": [
        "fa4017018105167c0caebbd9333d5965c5b8a81d"
      ],
      "author": {
        "name": "Carl Sverre",
        "email": "82591+carlsverre@users.noreply.github.com",
        "time": "Thu Dec 18 10:23:26 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 18 13:23:26 2025 -0500"
      },
      "message": "correctly expose HttpError through RetryError::source (#580)\n\n* correctly expose HttpError through RetryError::source\n\n* Update src/client/retry.rs\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* break in loop\n\n---------\n\nCo-authored-by: Copilot \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "fa4017018105167c0caebbd9333d5965c5b8a81d",
      "tree": "7de56e3f4387b549f2f293cd7f07d4c0fb056ff1",
      "parents": [
        "493a5d07d29b12a5731bf112d3ab5df8d0de9616"
      ],
      "author": {
        "name": "Ruslan Fadeev",
        "email": "github@kinrany.dev",
        "time": "Thu Dec 18 21:12:11 2025 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Dec 18 13:12:11 2025 -0500"
      },
      "message": "`Path` improvements (#546)\n\n* crate::path::Path improvements\n\n* fn prefix -\u003e fn parent\n\n* test: check exact part count\n\n* fix: impl Extend must not add / before the first part\n\n* impl IntoIterator for \u0026Path; add second test for impl Extend\n\n* test: specifically cover adding one segment\n\n* fix: broken intra-doc links\n\n* fix: Path::parent returning None for single segment"
    }
  ],
  "next": "493a5d07d29b12a5731bf112d3ab5df8d0de9616"
}
