)]}'
{
  "log": [
    {
      "commit": "be3a9f0d088c62c294b1acc68b36928df330383a",
      "tree": "414ef50f368160ec6ff573f29c5efe4251d23d3b",
      "parents": [
        "f8d27cf093c7c703a7825668798e984d8f0fb189"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Fri Jul 24 23:31:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 23:31:20 2026 +0800"
      },
      "message": "chore(release): prepare v0.58.1 (#7933)"
    },
    {
      "commit": "f8d27cf093c7c703a7825668798e984d8f0fb189",
      "tree": "6bffd99501addcdae78d7fe8aa9a381d9d25a145",
      "parents": [
        "eecfe563ac0302802da067f50e904f7e0121a01d"
      ],
      "author": {
        "name": "David Myriel",
        "email": "davidmyriel@gmail.com",
        "time": "Fri Jul 24 11:03:56 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 23:03:56 2026 +0800"
      },
      "message": "docs(services/s3): update Tigris endpoint and enrich compatible servi… (#7946)\n\ndocs(services/s3): update Tigris endpoint and enrich compatible service entry\n\n- Update the Tigris endpoint from the legacy fly.storage.tigris.dev to the\n  current t3.storage.dev (legacy endpoint noted as still working)\n- Document credential configuration via standard S3 access keys / AWS env vars\n- Note single global endpoint, no egress fees, and zero-copy snapshots/forks\n  with links to the relevant Tigris docs\n\nSigned-off-by: David Myriel \u003cdavidmyriel@gmail.com\u003e"
    },
    {
      "commit": "eecfe563ac0302802da067f50e904f7e0121a01d",
      "tree": "3def2b56315c8d11e2c6f91341c76b4fff19d628",
      "parents": [
        "aab4bda0daaf99a45cbc855747bb1419ca8efd92"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Fri Jul 24 12:33:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 12:33:16 2026 +0800"
      },
      "message": "Revert \"fix(services/gcs): stop double-encoding object paths in writer (#7943)\n\nRevert \"fix(services/gcs): stop double-encoding object paths in writer (#7927)\"\n\nThis reverts commit 19e028238cdc11398099bd25a8ef7895a15d68a7."
    },
    {
      "commit": "aab4bda0daaf99a45cbc855747bb1419ca8efd92",
      "tree": "f818350718e209ad72e5f3cca750af65d3d9663c",
      "parents": [
        "503e8b04364b8e7e8aa51cf095ee10737fced871"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Thu Jul 23 05:25:32 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 20:25:32 2026 +0800"
      },
      "message": "feat(core): not translate to \"interrupted\" std IO error (#7940)"
    },
    {
      "commit": "503e8b04364b8e7e8aa51cf095ee10737fced871",
      "tree": "a572f9f7582486af7ca6bd5ce0cef2a519ed04ae",
      "parents": [
        "19e028238cdc11398099bd25a8ef7895a15d68a7"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Thu Jul 23 01:14:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 16:14:30 2026 +0800"
      },
      "message": "ci: Fix Haskell CI cabal index update (#7941)"
    },
    {
      "commit": "19e028238cdc11398099bd25a8ef7895a15d68a7",
      "tree": "2370cd2fcf63b6999e03b69a410e0e5fccb9622a",
      "parents": [
        "6611d6e3aec9d4700047188c81367c6d1efeffcc"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Thu Jul 23 09:41:16 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 12:11:16 2026 +0800"
      },
      "message": "fix(services/gcs): stop double-encoding object paths in writer (#7927)\n\n* fix(services/gcs): stop double-encoding object paths in writer\n\nThe writer pre-encoded the path with gcs_percent_encode_path before\ncalling gcs_insert_object_request / gcs_initiate_multipart_upload, which\npercent-encode again. A key like odfs/w/x.parquet was stored under the\nliteral name odfs%2Fw%2Fx.parquet and was unreadable, since the reader\nencodes only once. Forward the raw path so it is encoded exactly once,\nmatching the reader and the other multipart calls.\n\nAdd regression tests asserting the write request single-encodes the path.\n\n* fix(services/gcs): percent-encode path in multipart initiation\n\ngcs_initiate_multipart_upload interpolated the object path into the URL\nwithout percent-encoding, unlike gcs_upload_part / gcs_complete_multipart_upload\n/ gcs_abort_multipart_upload. Once the writer forwards the raw path, object\nnames with characters that must be escaped (spaces, \u0027#\u0027, non-ASCII, ...) would\nproduce an invalid or wrong initiation URI. Extract the request builder and\nencode the path once, matching the other multipart calls.\n\nAdd a regression test asserting the initiation URI single-encodes the path.\n\n* refactor(services/gcs): drop encoding-fix helpers per review\n\nAddress review feedback: remove the GcsWriter::insert_object_request\nhelper (inline into write_once), the build_test_core test constructor and\nthe request-builder unit tests that relied on it, and inline the\nmultipart-initiation request builder back into gcs_initiate_multipart_upload.\n\nThe source fixes are unchanged: the writer forwards the raw path and\ngcs_initiate_multipart_upload percent-encodes the path once, matching the\nother multipart helpers."
    },
    {
      "commit": "6611d6e3aec9d4700047188c81367c6d1efeffcc",
      "tree": "32ded58f67932266e0fb5757d8c46582aee08dd7",
      "parents": [
        "152b0d81c7b213ddc0e82b49fcee5d2fd14fe85c"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Wed Jul 22 23:22:46 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 01:52:46 2026 +0800"
      },
      "message": "feat(bindings/python): typed service configs via TypedDict (#7937)\n\n* feat(bindings/python): typed service configs via TypedDict\n\nGenerate one TypedDict per service into opendal/config.py, keyed on a\nLiteral scheme discriminant, plus a discriminated ServiceConfig union\nconsumed by a single Operator.from_config / AsyncOperator.from_config.\n\nThe TypedDicts are typing-only (defined under TYPE_CHECKING, resolved to\ndict at runtime via __getattr__), so there is no runtime object, no\nruntime dependency, and configs pickle trivially. from_config reads the\nscheme key and converts native values (bool, int, os.PathLike, list) to\nthe flat string map core consumes.\n\nStatic checkers (mypy --strict, pyright, ty) catch a wrong scheme,\nunknown/misspelled key, wrong value type, and missing required key\nthrough both S3Config(...) and the from_config union.\n\n* docs(bindings/python): render typed service configs\n\nAdd an api/config.md page (::: opendal.config) and a nav entry so the\ngenerated *Config TypedDicts render in the API reference. mkdocstrings\nreads the TYPE_CHECKING block via griffe static analysis; fields render\nas attributes with types and docstrings, so no __new__/__init__ stub\nrewrite is needed.\n\n* chore(bindings/python): address review feedback on typed configs\n\n- Define the *Config TypedDicts at runtime instead of hiding them under\n  TYPE_CHECKING; drop the __getattr__ shim (a TypedDict is a dict at\n  runtime). Required/NotRequired stay under TYPE_CHECKING so Python 3.10\n  keeps working with no runtime typing_extensions dependency (annotations\n  are strings via `from __future__ import annotations`).\n- Drop the redundant `total\u003dFalse` (every key is Required/NotRequired).\n- Emit ruff-format-clean output (leading-pipe union, docstring code\n  \u003c\u003d60 cols) so the check_generated CI job passes without a Python\n  formatter step.\n- Document both the call form and the annotated-variable form.\n\n* fix(bindings/python): render config docstrings as markdown\n\nmkdocstrings renders docstrings as markdown, so the reST `:meth:`/`:class:`\nroles and the `::` literal block in the generated config module docstring\nshowed up literally. Switch to markdown: inline code refs and a fenced\n```python block, and use single-backtick code spans in the class/field\ndocstrings."
    },
    {
      "commit": "152b0d81c7b213ddc0e82b49fcee5d2fd14fe85c",
      "tree": "2948a1f98890dbd65ca57c5ecd1dc27dbe9562ce",
      "parents": [
        "17a02adcf3d2e5eaab846f92cb68378d61620556"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Thu Jul 23 00:04:06 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 23:04:06 2026 +0800"
      },
      "message": "docs: correct layer behavior descriptions (#7932)"
    },
    {
      "commit": "17a02adcf3d2e5eaab846f92cb68378d61620556",
      "tree": "b28b70efaba75122158bb19f5f961f88e2be9651",
      "parents": [
        "433438025f770d26e5f0ea9fd815819720f031e8"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Wed Jul 22 15:36:51 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 18:06:51 2026 +0800"
      },
      "message": "fix(dev): sync parquet release version to 0.9.0 (#7936)"
    },
    {
      "commit": "433438025f770d26e5f0ea9fd815819720f031e8",
      "tree": "4d69a925b7ea3cd506f447e49b553880ca442970",
      "parents": [
        "a13911ca36d72379f1fd58d9eb46938bbe13a654"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Wed Jul 22 13:01:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 13:01:50 2026 +0800"
      },
      "message": "chore(deps): upgrade object_store to 0.14.1 (#7935)"
    },
    {
      "commit": "a13911ca36d72379f1fd58d9eb46938bbe13a654",
      "tree": "b72622b7c4329211dffd5652b67436d530854085",
      "parents": [
        "2bb7bc56e798cc98834a50d514ff07d6b293be59"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Wed Jul 22 13:01:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 13:01:43 2026 +0800"
      },
      "message": "feat(integrations/parquet): upgrade Arrow and Parquet to 59 (#7934)"
    },
    {
      "commit": "2bb7bc56e798cc98834a50d514ff07d6b293be59",
      "tree": "def36b4371f83875a8fb86c11f7a9f98c20be645",
      "parents": [
        "488925b2fd41a6885d3340884037d89180fb165a"
      ],
      "author": {
        "name": "Andrew Kane",
        "email": "acekane1@gmail.com",
        "time": "Tue Jul 21 20:56:34 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 11:56:34 2026 +0800"
      },
      "message": "chore: include license and notice files in published crates (#7931)"
    },
    {
      "commit": "488925b2fd41a6885d3340884037d89180fb165a",
      "tree": "69556ad2210d43a58f6d9d17a232f62f8bbeca7e",
      "parents": [
        "2e9c10a33ad0811c76749dd5c21c412ea856b3bf"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Wed Jul 22 12:56:09 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 11:56:09 2026 +0800"
      },
      "message": "docs: polish inline documentations (#7930)\n\n* Polish inline documents\n\n* fix rename if_not_exist doc"
    },
    {
      "commit": "2e9c10a33ad0811c76749dd5c21c412ea856b3bf",
      "tree": "285ae256fb64215504f68f76aee1f003eadd0fc1",
      "parents": [
        "cdfd0b3a544a839e601f256233743428a95255a9"
      ],
      "author": {
        "name": "ForwardXu",
        "email": "forwardxu@apache.org",
        "time": "Tue Jul 21 21:45:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 21:45:17 2026 +0800"
      },
      "message": "chore(goosefs): bump goosefs-sdk to 0.1.8 (#7929)"
    },
    {
      "commit": "cdfd0b3a544a839e601f256233743428a95255a9",
      "tree": "fc05df6b9c04428a2562cf8a344ef038e66fea18",
      "parents": [
        "c5447141b2668e11f9942f0f98f20de81224d718"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Mon Jul 20 17:31:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:31:54 2026 +0800"
      },
      "message": "docs: treat release candidates as tag-bound (#7874)"
    },
    {
      "commit": "c5447141b2668e11f9942f0f98f20de81224d718",
      "tree": "e105868f07000ae620766481e2dfab38567e3de6",
      "parents": [
        "e42589ad764db6f659e029fc41a83e12b7fb9a92"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Mon Jul 20 02:29:52 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:29:52 2026 +0800"
      },
      "message": "feat(binding/cpp): add retry and timeout layer to cpp binding (#7915)\n\n* feat(binding/cpp): add retry and timeout layer to cpp binding\n\n* single RetryConfig struct\n\n* rust-based mock service for integration test"
    },
    {
      "commit": "e42589ad764db6f659e029fc41a83e12b7fb9a92",
      "tree": "9534ef0888869833bbc967d0ffc3d59058ce6055",
      "parents": [
        "fe971d79a086a282aa2b8fae3bd05ce416abb38f"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Sat Jul 18 00:54:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 00:54:15 2026 +0800"
      },
      "message": "fix: defer default reqwest client initialization (#7925)"
    },
    {
      "commit": "fe971d79a086a282aa2b8fae3bd05ce416abb38f",
      "tree": "bd766f436005b5020f46f7321562e63de335bb92",
      "parents": [
        "82dbd7afb25564f54d685410de7c89e660887b00"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Fri Jul 17 16:12:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 16:12:36 2026 +0800"
      },
      "message": "docs: clarify default HTTP transport ownership (#7924)"
    },
    {
      "commit": "82dbd7afb25564f54d685410de7c89e660887b00",
      "tree": "b99580d4082c3cbabd6d57999ee15c79f0b9f6c1",
      "parents": [
        "172c1ab8233fb57ef2a03f9d36466e9533bb2ccf"
      ],
      "author": {
        "name": "Robert Palmer",
        "email": "robd003@users.noreply.github.com",
        "time": "Thu Jul 16 01:15:17 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 13:15:17 2026 +0800"
      },
      "message": "fix(bindings/java): incorrect Java declarations (#7906)"
    },
    {
      "commit": "172c1ab8233fb57ef2a03f9d36466e9533bb2ccf",
      "tree": "af2b6ace915cf76cd9c8c23c18158f3d2faa1952",
      "parents": [
        "a3c13a8dc3a6e4a44171e0e2b31e2249993fca53"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Thu Jul 16 10:36:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 10:36:33 2026 +0800"
      },
      "message": "fix(goosefs): pin goosefs SDK (#7917)"
    },
    {
      "commit": "a3c13a8dc3a6e4a44171e0e2b31e2249993fca53",
      "tree": "64e4e87f3f94961501b3ec9401d1d521dd9baf02",
      "parents": [
        "8966e1d3d95149b64e852623225227e7f856a665"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Thu Jul 16 06:03:08 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 08:33:08 2026 +0800"
      },
      "message": "fix(bindings/python): enable hdfs-native on arm (#7911)"
    },
    {
      "commit": "8966e1d3d95149b64e852623225227e7f856a665",
      "tree": "63867ddf6a20776556c7106aa4b5840da4673450",
      "parents": [
        "2f3954846c6e615788bfc63b140755e08aaef0bd"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Wed Jul 15 17:49:14 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 20:19:14 2026 +0800"
      },
      "message": "chore(deps): upgrade hdfs-native to 0.14 (#7910)"
    },
    {
      "commit": "2f3954846c6e615788bfc63b140755e08aaef0bd",
      "tree": "14137e6037fcb0baa6f2352d8f1f6d35a518e06b",
      "parents": [
        "4254764a423eeca5d420188a1f2bb829ebee95b8"
      ],
      "author": {
        "name": "PoAn Yang",
        "email": "payang@apache.org",
        "time": "Wed Jul 15 18:51:00 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 17:51:00 2026 +0800"
      },
      "message": "feat(binding/go): Add Copier (#7732)"
    },
    {
      "commit": "4254764a423eeca5d420188a1f2bb829ebee95b8",
      "tree": "548abd6faa13a4ebb9941ba6f2623ea5076c1a94",
      "parents": [
        "edf3a4bac6aa8f0dff15424dfc42eb66c23b841e"
      ],
      "author": {
        "name": "Shaurya Srivastava",
        "email": "104617579+Shaurya2k06@users.noreply.github.com",
        "time": "Wed Jul 15 14:22:52 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 16:52:52 2026 +0800"
      },
      "message": "docs(website): add publications page for papers using OpenDAL (#7914)"
    },
    {
      "commit": "edf3a4bac6aa8f0dff15424dfc42eb66c23b841e",
      "tree": "5472883ed9da323c29a88034007747e9934ba768",
      "parents": [
        "cece212846ed4146cca2b58174f33779004f535d"
      ],
      "author": {
        "name": "ByteBaker",
        "email": "42913098+ByteBaker@users.noreply.github.com",
        "time": "Tue Jul 14 09:34:21 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 12:04:21 2026 +0800"
      },
      "message": "fix(s3): set content length for copy object (#7884)"
    },
    {
      "commit": "cece212846ed4146cca2b58174f33779004f535d",
      "tree": "830d8510609e1ef41ca4c31a6285f3331eb56468",
      "parents": [
        "318051086ba99a2c02ac2492105faf4aceb73815"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Mon Jul 13 19:25:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 19:25:40 2026 +0800"
      },
      "message": "doc: polish website layout and consistency (#7907)\n\n* Polish website layout and unify components\n\n* Polish docs and services layout and styles\n\n* Fix dependency"
    },
    {
      "commit": "318051086ba99a2c02ac2492105faf4aceb73815",
      "tree": "5aee32fb65493ce0e1ab87eb6316ace04c791178",
      "parents": [
        "f6939d13a2bdf2c77b3ce33210410679430b5a04"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Mon Jul 13 16:54:02 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 19:24:02 2026 +0800"
      },
      "message": "feat(core): expose registered schemes via OperatorRegistry::schemes (#7908)\n\n* feat(core): expose registered schemes via OperatorRegistry::schemes\n\nAdd a public OperatorRegistry::schemes() accessor that returns the set\nof registered schemes (HashSet\u003cString\u003e) as a thin read over the existing\nfactories map. For the global registry this is exactly the set that\nOperator::from_uri can construct.\n\nEnrich the from_uri \u0027scheme is not registered\u0027 error with an \u0027available\u0027\ncontext listing the registered schemes, so a wrong dialect or missing\nservices-* feature surfaces an actionable hint instead of a bare error.\n\n* fix(core): avoid self-deadlock in registry load() on unsupported scheme\n\nload() held the factories mutex while the ok_or_else closure called\nschemes(), which re-locked the same non-reentrant mutex and deadlocked\non the unsupported-scheme path. Collect the available schemes from the\nguard already held instead of re-locking."
    },
    {
      "commit": "f6939d13a2bdf2c77b3ce33210410679430b5a04",
      "tree": "b79fa7cf393085fd834b0361ea5186d54d592114",
      "parents": [
        "15d6d4844664f28ba90aa906d832c5fd1157bb10"
      ],
      "author": {
        "name": "Fatorin",
        "email": "sksly789@gmail.com",
        "time": "Mon Jul 13 09:00:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 09:00:45 2026 +0800"
      },
      "message": "fix(ci): use NuGet login action instead of manual login nuget (#7903)"
    },
    {
      "commit": "15d6d4844664f28ba90aa906d832c5fd1157bb10",
      "tree": "a060f366a2f968b3fc0f43101c9b44495171dd95",
      "parents": [
        "aedc810123e3e8c68fbc5c4507178ebf4a72d388"
      ],
      "author": {
        "name": "qaz",
        "email": "dev@malplena.net",
        "time": "Sat Jul 11 10:43:35 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 16:43:35 2026 +0800"
      },
      "message": "Set shared capability of Mini Moka and OPFS (#7856)\n\n* Set mini moka backend shared capability to false\n\n* Set opfs backend shared capability to true\n\n* Avoid setting implicitly defined capabilities"
    },
    {
      "commit": "aedc810123e3e8c68fbc5c4507178ebf4a72d388",
      "tree": "cf3ddbf13c381286ffa5682ae9ca114ccf8cb24f",
      "parents": [
        "e5658ecb60abfec56960fbcc41d6ba1b75f5932a"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Sat Jul 11 00:19:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 00:19:32 2026 +0800"
      },
      "message": "ci: upgrade nodejs release to npm 12 (#7900)\n\n* ci: pin npm major for nodejs release\n\n* ci: upgrade nodejs release to npm 12"
    },
    {
      "commit": "e5658ecb60abfec56960fbcc41d6ba1b75f5932a",
      "tree": "a893750198cbd96acdf422ad18fdfe15600ac7bb",
      "parents": [
        "5347a2ea4e3dd3994f7952b1af547d6354c91130"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Fri Jul 10 23:11:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 23:11:22 2026 +0800"
      },
      "message": "doc: use plain prose and active tone for bindings (#7902)"
    },
    {
      "commit": "5347a2ea4e3dd3994f7952b1af547d6354c91130",
      "tree": "10e3ac32a7bc8982ac6bcdec3a380d8dcd85d8ff",
      "parents": [
        "ae99a3b016e354a1b2bb2baf0c70f9f9e134970a"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Fri Jul 10 20:26:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 20:26:59 2026 +0800"
      },
      "message": "ci: include http transports in rust release plan (#7901)"
    },
    {
      "commit": "ae99a3b016e354a1b2bb2baf0c70f9f9e134970a",
      "tree": "cf82a32a375d4411860443df93a21dfadfc29ceb",
      "parents": [
        "9fdb6a382e8e84fc52b6cf2d98f3945bb5fb7116"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 10 13:17:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 13:17:15 2026 +0800"
      },
      "message": "chore(deps): bump the others group across 1 directory with 6 updates (#7893)\n\nBumps the others group with 6 updates in the /core directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [ctor](https://github.com/mmastrac/linktime) | `1.0.7` | `1.0.8` |\n| [aws-sdk-s3](https://github.com/awslabs/aws-sdk-rust) | `1.96.0` | `1.102.0` |\n| [jiff](https://github.com/BurntSushi/jiff) | `0.2.31` | `0.2.32` |\n| [hotpath](https://github.com/pawurb/hotpath-rs) | `0.19.1` | `0.21.1` |\n| [hf-xet](https://github.com/huggingface/xet-core) | `1.5.2` | `1.5.3` |\n| [surrealdb](https://github.com/surrealdb/surrealdb) | `3.1.5` | `3.2.0` |\n\n\n\nUpdates `ctor` from 1.0.7 to 1.0.8\n- [Release notes](https://github.com/mmastrac/linktime/releases)\n- [Changelog](https://github.com/mmastrac/linktime/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/mmastrac/linktime/compare/ctor-1.0.7...ctor-1.0.8)\n\nUpdates `aws-sdk-s3` from 1.96.0 to 1.102.0\n- [Release notes](https://github.com/awslabs/aws-sdk-rust/releases)\n- [Commits](https://github.com/awslabs/aws-sdk-rust/commits)\n\nUpdates `jiff` from 0.2.31 to 0.2.32\n- [Release notes](https://github.com/BurntSushi/jiff/releases)\n- [Changelog](https://github.com/BurntSushi/jiff/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/BurntSushi/jiff/compare/jiff-static-0.2.31...jiff-static-0.2.32)\n\nUpdates `hotpath` from 0.19.1 to 0.21.1\n- [Release notes](https://github.com/pawurb/hotpath-rs/releases)\n- [Changelog](https://github.com/pawurb/hotpath-rs/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/pawurb/hotpath-rs/compare/v0.19.1...v0.21.1)\n\nUpdates `hf-xet` from 1.5.2 to 1.5.3\n- [Release notes](https://github.com/huggingface/xet-core/releases)\n- [Commits](https://github.com/huggingface/xet-core/commits)\n\nUpdates `surrealdb` from 3.1.5 to 3.2.0\n- [Release notes](https://github.com/surrealdb/surrealdb/releases)\n- [Changelog](https://github.com/surrealdb/surrealdb/blob/main/release.toml)\n- [Commits](https://github.com/surrealdb/surrealdb/compare/v3.1.5...v3.2.0)\n\n---\nupdated-dependencies:\n- dependency-name: aws-sdk-s3\n  dependency-version: 1.102.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: others\n- dependency-name: ctor\n  dependency-version: 1.0.8\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: others\n- dependency-name: hf-xet\n  dependency-version: 1.5.3\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: others\n- dependency-name: hotpath\n  dependency-version: 0.21.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: others\n- dependency-name: jiff\n  dependency-version: 0.2.32\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: others\n- dependency-name: surrealdb\n  dependency-version: 3.2.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: others\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": "9fdb6a382e8e84fc52b6cf2d98f3945bb5fb7116",
      "tree": "aa84f34b671ebf2262329b19b857bad1d9a0d8c0",
      "parents": [
        "7b9794396b9432f1795634f6027f35d8e847f325"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 10 12:09:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 12:09:48 2026 +0800"
      },
      "message": "chore(deps): bump bytes from 1.12.0 to 1.12.1 in /core in the http-serialization-utils group across 1 directory (#7892)\n\nchore(deps): bump bytes\n\nBumps the http-serialization-utils group with 1 update in the /core directory: [bytes](https://github.com/tokio-rs/bytes).\n\n\nUpdates `bytes` from 1.12.0 to 1.12.1\n- [Release notes](https://github.com/tokio-rs/bytes/releases)\n- [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/tokio-rs/bytes/compare/v1.12.0...v1.12.1)\n\n---\nupdated-dependencies:\n- dependency-name: bytes\n  dependency-version: 1.12.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: http-serialization-utils\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": "7b9794396b9432f1795634f6027f35d8e847f325",
      "tree": "9997178872fed8519e1f241b2a4eb14230467ee7",
      "parents": [
        "34c615e8195f353c8c70f42c5540aaea3549142a"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Fri Jul 10 11:50:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 11:50:15 2026 +0800"
      },
      "message": "fix: CI prints clippy version and clippy fix (#7895)\n\n* Add clippy version printing\n\n* Fix linting after MSRV bump\n\n* Fix linting error\n\n* Revert \"Fix linting error\"\n\nThis reverts commit 7f70a0b0835393b96efb970bb6310e6b22edd07a.\n\n* Fix template"
    },
    {
      "commit": "34c615e8195f353c8c70f42c5540aaea3549142a",
      "tree": "3c7b7f3e37907c3bd1cfb7853864eff5c92a7d60",
      "parents": [
        "23216a129123204ff71d70b50daa214f14941854"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Thu Jul 09 11:56:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 11:56:27 2026 +0800"
      },
      "message": "fix(bindings/ruby): release ruby source package include Cargo.lock (#7891)\n\n* fix: include Ruby binding\u0027s Cargo.lock file\n\n* include .ruby-version file"
    },
    {
      "commit": "23216a129123204ff71d70b50daa214f14941854",
      "tree": "f90752abc022b7cd3894cc23958df64030bae881",
      "parents": [
        "24aaff9c62b11efaadd9b8a3c6c7c05b55c9f474"
      ],
      "author": {
        "name": "QuakeWang",
        "email": "45645138+QuakeWang@users.noreply.github.com",
        "time": "Wed Jul 08 17:44:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 17:44:53 2026 +0800"
      },
      "message": "fix(services/s3): encode version id for stat and read (#7886)\n\nSigned-off-by: QuakeWang \u003cwangfuzheng0814@foxmail.com\u003e"
    },
    {
      "commit": "24aaff9c62b11efaadd9b8a3c6c7c05b55c9f474",
      "tree": "a98f19bfc53fb180375cae6f86323ced69621c51",
      "parents": [
        "742ce3d8068b9766c573c30f2d6dc7ffe75de13c"
      ],
      "author": {
        "name": "Gergely Nagy",
        "email": "ngg@users.noreply.github.com",
        "time": "Tue Jul 07 19:21:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 01:21:31 2026 +0800"
      },
      "message": "fix(integrations/dav-server): depend only on opendal-core (#7876)"
    },
    {
      "commit": "742ce3d8068b9766c573c30f2d6dc7ffe75de13c",
      "tree": "6bc249a5a4021c3b0656ad26f726112ce88a7c80",
      "parents": [
        "cbba561933b729050c51ae88aff5eb6b3febceac"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Tue Jul 07 20:32:10 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 20:32:10 2026 +0530"
      },
      "message": "docs(python): fix duplicated headings on layers and types API pages (#7880)\n\n* docs(python): fix duplicated headings on layers and types API pages\n\nThe layers and types API pages put a manual Markdown heading before each\nmkdocstrings block, while mkdocstrings also renders its own heading for the\nclass. That produced two headings (and two table-of-contents entries) per\nclass. Drop the redundant manual headings so each class renders once, matching\nthe single-class API pages.\n\n* Fix typo in Python binding documentation"
    },
    {
      "commit": "cbba561933b729050c51ae88aff5eb6b3febceac",
      "tree": "a3ecc3a1232491194460c246bf3f3c02c7935112",
      "parents": [
        "66407852d402bc95b5fb15350975e8275089052e"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Tue Jul 07 20:31:44 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 20:31:44 2026 +0530"
      },
      "message": "fix(bindings/python): validate RetryLayer numeric inputs (#7879)\n\nRetryLayer accepted out-of-range values and forwarded them to the core\nbackoff builder, where they produce degenerate behavior: factor \u003c 1.0\n(or\nNaN/inf) yields a nonsensical backoff, and negative/NaN max_delay or\nmin_delay silently clamp to zero via the f64-\u003eu64 cast.\n\nReject these at construction with ConfigInvalid: factor must be finite\nand\n\u003e\u003d 1.0; max_delay and min_delay must be finite and non-negative.\n Document\n the ranges and add tests covering the boundaries."
    },
    {
      "commit": "66407852d402bc95b5fb15350975e8275089052e",
      "tree": "d0cf790997c16fdf6387a9ffb5fdf7f99c229a23",
      "parents": [
        "6eaf4b638097105dfcbfccf23beb9750b0c06eb4"
      ],
      "author": {
        "name": "Anand Dubey",
        "email": "dubey.anandkr@gmail.com",
        "time": "Tue Jul 07 17:27:57 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 20:57:57 2026 +0900"
      },
      "message": "feat(core): enable presign delete (#7386)\n\n* feat(core): enable presign delete\n\n* refactor(services/s3): keep sync delete request builder and async s3_delete_object sender\n\nAddress review feedback: make s3_delete_object_request a plain fn and\nrestore s3_delete_object mirroring the s3_head_object pattern."
    },
    {
      "commit": "6eaf4b638097105dfcbfccf23beb9750b0c06eb4",
      "tree": "2687685dbaee17ebabbb531f3225861d76ae0893",
      "parents": [
        "54b8392b6e2a26a74dc037e8878729aae4d2eb40"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Tue Jul 07 17:27:28 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 17:27:28 2026 +0530"
      },
      "message": "refactor(bindings/python): split layers into a package for extensibility (#7878)\n\nSplit the single layers.rs into a src/layers/ package with one module per\nlayer plus a mod.rs holding the shared PythonLayer trait, the base Layer, and\nre-exports. The Python surface stays flat on opendal.layers, so all existing\nimports are unchanged and stub generation needs no special handling.\n\nAdding a layer later is just: drop src/layers/\u003cname\u003e.rs, register it in\nmod.rs and lib.rs, and run just stub-gen."
    },
    {
      "commit": "54b8392b6e2a26a74dc037e8878729aae4d2eb40",
      "tree": "5f1d40845783a1b83c3eed28552b6274e5ddbe73",
      "parents": [
        "b65fd7fdab56299c662ec4400621c046b2e0db1f"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Tue Jul 07 13:48:45 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 13:48:45 2026 +0530"
      },
      "message": "feat(bindings/python): add from_uri constructor for Operator and AsyncOperator (#7869)\n\n* feat(bindings/python): add from_uri constructor for Operator and AsyncOperator\n\nExpose Operator.from_uri / AsyncOperator.from_uri classmethods backed by\nthe core Operator::from_uri URI registry path, mirroring the Node.js\nbinding. Replace __getnewargs_ex__ with __reduce__ so URI-built operators\npickle via a dedicated reconstructor instead of the scheme-based __new__.\n\n* fix(bindings/python): address review feedback on from_uri\n\n- Extract kwargs via extract_kwargs helper that returns a PyErr instead\n  of panicking on non-str values; apply to from_uri and __new__ for both\n  operator classes.\n- Mirror the async_operator fixture layers and capability overrides in the\n  from_uri test fixture so capability gating and equality assertions match.\n\n* refactor(bindings/python): simplify from_uri pickling and docs per review\n\n- Drop the __from_uri field: reconstruct both scheme- and URI-built\n  operators through a single from_uri-based reconstructor, since the core\n  resolves bare schemes and full URIs through the same path.\n- Reframe from_uri docstrings: options belong in the URI query string\n  (urlencode example); **kwargs documented as override-only.\n\n* docs(bindings/python): debloat from_uri docstrings and reconstructor comments\n\n* docs(bindings/python): use fenced code block in from_uri examples\n\nReplace \u003e\u003e\u003e doctest prompts with a python code block so copying from the\nrendered mkdocs docs does not include the prompt characters.\n\n* refactor(bindings/python): extract kwargs directly and add from_uri round-trip test\n\n- Bind **kwargs to Option\u003cHashMap\u003cString, String\u003e\u003e in the operator\n  constructors, dropping the extract_kwargs helper; PyO3 raises TypeError\n  natively on non-str values.\n- Add sync and async from_uri write/read round-trip tests."
    },
    {
      "commit": "b65fd7fdab56299c662ec4400621c046b2e0db1f",
      "tree": "a88d1222cee66668f38baa8720c3b11e051f6a58",
      "parents": [
        "13fb8bea0e29ad024540b35d4c834530b89976a1"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Tue Jul 07 13:22:22 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 15:52:22 2026 +0800"
      },
      "message": "docs(python): fix broken Python API reference links (404) (#7872)\n\nThe website linked to a flat opendal.html page, but the current MkDocs\nnav emits per-page directory URLs. Point the Operator and AsyncOperator\nreferences at api/operator/ and api/async_operator/ instead."
    },
    {
      "commit": "13fb8bea0e29ad024540b35d4c834530b89976a1",
      "tree": "b3168da8d344e38521dc3446591c0a0778793819",
      "parents": [
        "4f1df1216b0ecb8f2a1ba331dc82364ba957c732"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Tue Jul 07 14:25:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 14:25:54 2026 +0800"
      },
      "message": "ci: remove unsupported python 3.13t release wheel (#7868)"
    },
    {
      "commit": "4f1df1216b0ecb8f2a1ba331dc82364ba957c732",
      "tree": "21d6c97121e2de3db091976265b93ff5829c7a5b",
      "parents": [
        "9be59a44c8800967b9cd43cfca6a643e20466a38"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Tue Jul 07 01:00:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 01:00:24 2026 +0800"
      },
      "message": "chore(release): prepare v0.58.0 (#7867)\n\n* chore(release): prepare v0.58.0\n\n* chore(release): update nodejs generated files"
    },
    {
      "commit": "9be59a44c8800967b9cd43cfca6a643e20466a38",
      "tree": "2bf9bfb67e5e0f48fc51d38ec61b1b51c2e6bac9",
      "parents": [
        "a128add790903bc485f0def34c5a6825ac894794"
      ],
      "author": {
        "name": "Gergely Nagy",
        "email": "ngg@users.noreply.github.com",
        "time": "Mon Jul 06 18:30:04 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 00:30:04 2026 +0800"
      },
      "message": "fix(layers/tracing): propagate spans to executor tasks (#7864)\n\nWrap the composed executor so futures spawned by the tracing layer\ninherit the caller\u0027s current tracing span.\n\nFixes #7377"
    },
    {
      "commit": "a128add790903bc485f0def34c5a6825ac894794",
      "tree": "5c6b19f853e4b432c30c1a350247391fd88a8ffe",
      "parents": [
        "f18fdff7bbc2eb052f12511570a9b58587b9efeb"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Mon Jul 06 22:10:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 22:10:29 2026 +0800"
      },
      "message": "ci: fix release workflow tag publishing (#7863)"
    },
    {
      "commit": "f18fdff7bbc2eb052f12511570a9b58587b9efeb",
      "tree": "f7140858284de7a6a03338cbacaa5f25adcc17f3",
      "parents": [
        "10b16362111cc63c23757c5315737b7e2c6e0929"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Mon Jul 06 17:17:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 17:17:09 2026 +0800"
      },
      "message": "feat(dev): support dotnet version updates (#7862)"
    },
    {
      "commit": "10b16362111cc63c23757c5315737b7e2c6e0929",
      "tree": "e43e50084d5ba32fb3955fdd09d224f596eab987",
      "parents": [
        "b6cff68be231008699a5c166ca0042189bc796c9"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Mon Jul 06 16:27:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 16:27:10 2026 +0800"
      },
      "message": "chore(release): finalize Ruby binding version (#7861)\n\nchore(release): finalize ruby binding version"
    },
    {
      "commit": "b6cff68be231008699a5c166ca0042189bc796c9",
      "tree": "9e2910f6c925f48a93319ccc49ec5e0a3688ba59",
      "parents": [
        "311f324cca8d82a16880b93b0c387eb0faa709d0"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Mon Jul 06 16:04:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 16:04:37 2026 +0800"
      },
      "message": "feat(http-transport-reqwest): allow tls options (#7798)\n\n* feat(http-transport-reqwest): allow tls options\n\n* Update reqwest feature\n\n* fix reqwest tls backend configuration\n\n* fix reqwest rustls webpki feature name\n\n* add reqwest rustls ring backend\n\n* clarify reqwest tls backend default\n\n* Update comment\n\n* simplify reqwest tls backend selection\n\n* Address issues in feature configurations, dependencies\n\n* Set default transport to rustls\n\n* Fix compilation error in CI\n\n* Remove non TLS backend build\n\n* fix Cargo.toml\n\n* Bring back default but point to default feature\n\n* Fix default feature set\n\n* Fix default feature\n\n* Simplify reqwest TLS configuration\n\n* Document reqwest webpki roots TLS setup\n\n* Prettify comment\n\n* Remove opendal_http_transport_reqwest export in core\n\n* fix linting\n\n* Remove default builder"
    },
    {
      "commit": "311f324cca8d82a16880b93b0c387eb0faa709d0",
      "tree": "3ba213031cf3facad7ff8b508cc87254c2eee6a4",
      "parents": [
        "36952351e73774de69a1ca7b122f03b41d8a64eb"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Mon Jul 06 16:00:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 16:00:06 2026 +0800"
      },
      "message": "fix(services): improve stat implementation (#7857)\n\n* fix: avoid full value reads in kv stat\n\n* harden sql services and improve d1 and gridfs\n\n* Fix linting"
    },
    {
      "commit": "36952351e73774de69a1ca7b122f03b41d8a64eb",
      "tree": "82b01ab0194845ab7591250b5e13d1d72744e06f",
      "parents": [
        "140b2de0a6307ca4fdccde8650c110148c6d9ebf"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Mon Jul 06 15:42:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 15:42:30 2026 +0800"
      },
      "message": "ci: tighten ruby release process (#7859)\n\nTighten ruby release process"
    },
    {
      "commit": "140b2de0a6307ca4fdccde8650c110148c6d9ebf",
      "tree": "a4234915ceace8e33480b57eb5a805d444cf3939",
      "parents": [
        "dc0069760c7632bff80bc6a6142bfb633ca4dc9f"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Sat Jul 04 21:30:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 04 21:30:52 2026 +0800"
      },
      "message": "fix(services/sqlite): stat getting the entire object (#7853)\n\nFix sqlite stat getting the entire object"
    },
    {
      "commit": "dc0069760c7632bff80bc6a6142bfb633ca4dc9f",
      "tree": "69c181bbd05e800c0dc76b6479dd991d2bcce930",
      "parents": [
        "5d84f2b34261d38f6c59254fc9e561f5941fb6ee"
      ],
      "author": {
        "name": "Ryan Huang",
        "email": "ryankert01@gmail.com",
        "time": "Sat Jul 04 21:06:45 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 04 05:06:45 2026 -0700"
      },
      "message": "feat(binding/go): add write with metadata (#7827)"
    },
    {
      "commit": "5d84f2b34261d38f6c59254fc9e561f5941fb6ee",
      "tree": "b8dc492e0f0b325bdb31f16a8bcfe0a556737363",
      "parents": [
        "ae27793849622b61533950dd8b610e79160bf03c"
      ],
      "author": {
        "name": "tison",
        "email": "wander4096@gmail.com",
        "time": "Sat Jul 04 01:15:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 04 01:15:48 2026 +0800"
      },
      "message": "chore: MSRV 1.91 (#7849)\n\n* chore: MSRV 1.91\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e\n\n* fixup names\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e\n\n* chore: satisfy collapsible-if clippy lint\n\n---------\n\nSigned-off-by: tison \u003cwander4096@gmail.com\u003e\nCo-authored-by: Xuanwo \u003cgithub@xuanwo.io\u003e"
    },
    {
      "commit": "ae27793849622b61533950dd8b610e79160bf03c",
      "tree": "525db3bfac3ac10f05c4640878aa0cc167c6f3b3",
      "parents": [
        "47554c6236947eccc81c8bbcbebb6ebd26e544b5"
      ],
      "author": {
        "name": "hfutatzhanghb",
        "email": "hfutzhanghb@163.com",
        "time": "Sat Jul 04 00:39:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 04 00:39:14 2026 +0800"
      },
      "message": "fix(object_store): export send future helper (#7851)\n\nCo-authored-by: zhanghaobo@kanzhun.com \u003czhanghaobo@kanzhun.com\u003e"
    },
    {
      "commit": "47554c6236947eccc81c8bbcbebb6ebd26e544b5",
      "tree": "064841d1791f3b8a6331cb701410005dae205aa1",
      "parents": [
        "323e3ac191552c8dbe70422fc946ac6b0bc7204b"
      ],
      "author": {
        "name": "hfutatzhanghb",
        "email": "hfutzhanghb@163.com",
        "time": "Fri Jul 03 21:31:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 21:31:44 2026 +0800"
      },
      "message": "feat(core): add conditional rename option (#7815)\n\n* feat(core): support conditional rename\n\nAdd rename_with(...).if_not_exists(true) and RenameOptions to the\npublic API, mirroring the existing write and copy if_not_exists pattern.\n\nChanges:\n- ops.rs: add if_not_exists field to OpRename\n- operator.rs: add rename_with, rename_options, rename_inner\n- operator_futures.rs: add FutureRename with if_not_exists builder\n- options.rs: add RenameOptions\n- capability.rs: add rename_with_if_not_exists\n- correctness_check.rs: gate if_not_exists on capability\n- blocking/operator.rs: add rename_options\n- hdfs: implement conditional rename using native no-overwrite\n- async_rename.rs: add behavior tests\n- vs_object_store.md: update comparison table\n\n* chore: trigger ci\n\n---------\n\nCo-authored-by: zhanghaobo@kanzhun.com \u003czhanghaobo@kanzhun.com\u003e"
    },
    {
      "commit": "323e3ac191552c8dbe70422fc946ac6b0bc7204b",
      "tree": "6e7627c81bab78b7e912f9c5d709f28943d18119",
      "parents": [
        "fb84a23a890064d34ae55e8abd5e187ef3df4c84"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 03 21:21:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 21:21:34 2026 +0800"
      },
      "message": "chore(deps): bump the github-actions group across 1 directory with 2 updates (#7833)\n\nBumps the github-actions group with 2 updates in the / directory: [actions/checkout](https://github.com/actions/checkout) and [actions/cache](https://github.com/actions/cache).\n\n\nUpdates `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\nUpdates `actions/cache` from 5 to 6\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/cache\n  dependency-version: \u00276\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: github-actions\n- dependency-name: actions/checkout\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: github-actions\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": "fb84a23a890064d34ae55e8abd5e187ef3df4c84",
      "tree": "44835f5630c7059c492f216b67f13ded9de571aa",
      "parents": [
        "3a28adce704dd2cfee9f9452df9472399188e7f5"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 22:01:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 22:01:51 2026 +0800"
      },
      "message": "chore(deps): bump crate-ci/typos from 1.47.2 to 1.48.0 in the third-party-actions group (#7837)\n\nchore(deps): bump crate-ci/typos in the third-party-actions group\n\nBumps the third-party-actions group with 1 update: [crate-ci/typos](https://github.com/crate-ci/typos).\n\n\nUpdates `crate-ci/typos` from 1.47.2 to 1.48.0\n- [Release notes](https://github.com/crate-ci/typos/releases)\n- [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/crate-ci/typos/compare/v1.47.2...v1.48.0)\n\n---\nupdated-dependencies:\n- dependency-name: crate-ci/typos\n  dependency-version: 1.48.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: third-party-actions\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": "3a28adce704dd2cfee9f9452df9472399188e7f5",
      "tree": "7b3ae1721abec8583d3ae845c8d3f03cd3707ba5",
      "parents": [
        "7c06c4f7c34ff8bbeee0feb561e87511d000e24a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 21:53:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 21:53:07 2026 +0800"
      },
      "message": "chore(deps): bump the http-serialization-utils group across 1 directory with 3 updates (#7835)\n\nBumps the http-serialization-utils group with 3 updates in the /core directory: [bytes](https://github.com/tokio-rs/bytes), [quick-xml](https://github.com/tafia/quick-xml) and [uuid](https://github.com/uuid-rs/uuid).\n\n\nUpdates `bytes` from 1.11.1 to 1.12.0\n- [Release notes](https://github.com/tokio-rs/bytes/releases)\n- [Changelog](https://github.com/tokio-rs/bytes/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/tokio-rs/bytes/compare/v1.11.1...v1.12.0)\n\nUpdates `quick-xml` from 0.40.1 to 0.41.0\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\nUpdates `uuid` from 1.23.3 to 1.23.4\n- [Release notes](https://github.com/uuid-rs/uuid/releases)\n- [Commits](https://github.com/uuid-rs/uuid/compare/v1.23.3...v1.23.4)\n\n---\nupdated-dependencies:\n- dependency-name: bytes\n  dependency-version: 1.12.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: http-serialization-utils\n- dependency-name: quick-xml\n  dependency-version: 0.41.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: http-serialization-utils\n- dependency-name: uuid\n  dependency-version: 1.23.4\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: http-serialization-utils\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": "7c06c4f7c34ff8bbeee0feb561e87511d000e24a",
      "tree": "c36283f4e2c9b079eaffff4b662a849cc735b5d2",
      "parents": [
        "f9ccce351db5ae9c19aa6fdafcc531c213285b9e"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 21:27:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 21:27:36 2026 +0800"
      },
      "message": "chore(deps): bump the logs-errors-checksums group across 1 directory with 2 updates (#7841)\n\nBumps the logs-errors-checksums group with 2 updates in the /core directory: [anyhow](https://github.com/dtolnay/anyhow) and [log](https://github.com/rust-lang/log).\n\n\nUpdates `anyhow` from 1.0.102 to 1.0.103\n- [Release notes](https://github.com/dtolnay/anyhow/releases)\n- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.102...1.0.103)\n\nUpdates `log` from 0.4.32 to 0.4.33\n- [Release notes](https://github.com/rust-lang/log/releases)\n- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/rust-lang/log/compare/0.4.32...0.4.33)\n\n---\nupdated-dependencies:\n- dependency-name: anyhow\n  dependency-version: 1.0.103\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: logs-errors-checksums\n- dependency-name: log\n  dependency-version: 0.4.33\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: logs-errors-checksums\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": "f9ccce351db5ae9c19aa6fdafcc531c213285b9e",
      "tree": "05a97ce6cb1d784e9064a2c477200e39721d89c3",
      "parents": [
        "25eee0797885f69ce661be02c6f0ee73a59c89df"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 10:16:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:16:52 2026 +0800"
      },
      "message": "chore(deps): bump clap from 4.5.23 to 4.5.60 in /dev (#7844)\n\nBumps [clap](https://github.com/clap-rs/clap) from 4.5.23 to 4.5.60.\n- [Release notes](https://github.com/clap-rs/clap/releases)\n- [Changelog](https://github.com/clap-rs/clap/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/clap-rs/clap/compare/clap_complete-v4.5.23...clap_complete-v4.5.60)\n\n---\nupdated-dependencies:\n- dependency-name: clap\n  dependency-version: 4.5.60\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\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": "25eee0797885f69ce661be02c6f0ee73a59c89df",
      "tree": "ff8a2acde0bcb68f782656f19c64276392c02f89",
      "parents": [
        "9d892d4048a4acfe4e4eaaa09a90c7b74d731a66"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 10:16:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:16:38 2026 +0800"
      },
      "message": "chore(deps): bump the others group in /core with 6 updates (#7847)\n\nBumps the others group in /core with 6 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [jiff](https://github.com/BurntSushi/jiff) | `0.2.28` | `0.2.31` |\n| [hotpath](https://github.com/pawurb/hotpath-rs) | `0.17.0` | `0.19.1` |\n| [foundationdb](https://github.com/foundationdb-rs/foundationdb-rs) | `0.10.0` | `0.11.0` |\n| [suppaftp](https://github.com/veeso/suppaftp) | `8.0.4` | `8.0.5` |\n| [persy](https://gitlab.com/persy/persy) | `1.7.1` | `1.8.1` |\n| [surrealdb](https://github.com/surrealdb/surrealdb) | `3.1.4` | `3.1.5` |\n\n\nUpdates `jiff` from 0.2.28 to 0.2.31\n- [Release notes](https://github.com/BurntSushi/jiff/releases)\n- [Changelog](https://github.com/BurntSushi/jiff/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/BurntSushi/jiff/compare/jiff-static-0.2.28...jiff-static-0.2.31)\n\nUpdates `hotpath` from 0.17.0 to 0.19.1\n- [Release notes](https://github.com/pawurb/hotpath-rs/releases)\n- [Changelog](https://github.com/pawurb/hotpath-rs/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/pawurb/hotpath-rs/compare/v0.17.0...v0.19.1)\n\nUpdates `foundationdb` from 0.10.0 to 0.11.0\n- [Release notes](https://github.com/foundationdb-rs/foundationdb-rs/releases)\n- [Changelog](https://github.com/foundationdb-rs/foundationdb-rs/blob/main/release-plz.toml)\n- [Commits](https://github.com/foundationdb-rs/foundationdb-rs/compare/foundationdb-v0.10.0...foundationdb-v0.11.0)\n\nUpdates `suppaftp` from 8.0.4 to 8.0.5\n- [Release notes](https://github.com/veeso/suppaftp/releases)\n- [Changelog](https://github.com/veeso/suppaftp/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/veeso/suppaftp/compare/v8.0.4...v8.0.5)\n\nUpdates `persy` from 1.7.1 to 1.8.1\n- [Release notes](https://gitlab.com/persy/persy/tags)\n- [Changelog](https://gitlab.com/persy/persy/blob/master/release-checklist.md)\n- [Commits](https://gitlab.com/persy/persy/compare/1.7.1...1.8.1)\n\nUpdates `surrealdb` from 3.1.4 to 3.1.5\n- [Release notes](https://github.com/surrealdb/surrealdb/releases)\n- [Changelog](https://github.com/surrealdb/surrealdb/blob/main/release.toml)\n- [Commits](https://github.com/surrealdb/surrealdb/compare/v3.1.4...v3.1.5)\n\n---\nupdated-dependencies:\n- dependency-name: jiff\n  dependency-version: 0.2.31\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: others\n- dependency-name: hotpath\n  dependency-version: 0.19.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: others\n- dependency-name: foundationdb\n  dependency-version: 0.11.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: others\n- dependency-name: suppaftp\n  dependency-version: 8.0.5\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: others\n- dependency-name: persy\n  dependency-version: 1.8.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: others\n- dependency-name: surrealdb\n  dependency-version: 3.1.5\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: others\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": "9d892d4048a4acfe4e4eaaa09a90c7b74d731a66",
      "tree": "bac5456a0ccd5abd1997b9cfdf2963a4d7f67fac",
      "parents": [
        "4beb36b571acbd41d9a8ed81b6cf1384b7264bfa"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 10:16:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:16:14 2026 +0800"
      },
      "message": "chore(deps): bump flate2 from 1.1.0 to 1.1.9 in /dev (#7843)\n\nBumps [flate2](https://github.com/rust-lang/flate2-rs) from 1.1.0 to 1.1.9.\n- [Release notes](https://github.com/rust-lang/flate2-rs/releases)\n- [Commits](https://github.com/rust-lang/flate2-rs/compare/1.1.0...1.1.9)\n\n---\nupdated-dependencies:\n- dependency-name: flate2\n  dependency-version: 1.1.9\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\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": "4beb36b571acbd41d9a8ed81b6cf1384b7264bfa",
      "tree": "12e72a9193f7ad5e7ad52d1012d0684037973d98",
      "parents": [
        "fe63ec9b49fc86670998dcf917b219909e67b2d1"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 10:15:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:15:43 2026 +0800"
      },
      "message": "chore(deps): bump semver from 1.0.25 to 1.0.27 in /dev (#7842)\n\nBumps [semver](https://github.com/dtolnay/semver) from 1.0.25 to 1.0.27.\n- [Release notes](https://github.com/dtolnay/semver/releases)\n- [Commits](https://github.com/dtolnay/semver/compare/1.0.25...1.0.27)\n\n---\nupdated-dependencies:\n- dependency-name: semver\n  dependency-version: 1.0.27\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\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": "fe63ec9b49fc86670998dcf917b219909e67b2d1",
      "tree": "07360e857e34575c983f7a5bfd45b9c16852d049",
      "parents": [
        "8ab1e28f01df514e1bbf8df485bd371658d60e86"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 10:15:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:15:14 2026 +0800"
      },
      "message": "chore(deps): bump minijinja from 2.5.0 to 2.21.0 in /dev (#7845)\n\nBumps [minijinja](https://github.com/mitsuhiko/minijinja) from 2.5.0 to 2.21.0.\n- [Release notes](https://github.com/mitsuhiko/minijinja/releases)\n- [Changelog](https://github.com/mitsuhiko/minijinja/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/mitsuhiko/minijinja/compare/2.5.0...minijinja-go/v2.21.0)\n\n---\nupdated-dependencies:\n- dependency-name: minijinja\n  dependency-version: 2.21.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\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": "8ab1e28f01df514e1bbf8df485bd371658d60e86",
      "tree": "559f89fc29ee58b4b72faff784afeb44e7a708fe",
      "parents": [
        "5af2bd77c325fa4cb4e0940f31c30705c16382d6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 10:14:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:14:40 2026 +0800"
      },
      "message": "chore(deps): bump syn from 2.0.100 to 2.0.117 in /dev (#7846)\n\nBumps [syn](https://github.com/dtolnay/syn) from 2.0.100 to 2.0.117.\n- [Release notes](https://github.com/dtolnay/syn/releases)\n- [Commits](https://github.com/dtolnay/syn/compare/2.0.100...2.0.117)\n\n---\nupdated-dependencies:\n- dependency-name: syn\n  dependency-version: 2.0.117\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\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": "5af2bd77c325fa4cb4e0940f31c30705c16382d6",
      "tree": "23c3e69d9b0612b0d226e98777fbf810474c6c5d",
      "parents": [
        "4fe7b39f30fb0573ff19c9e65a23ac480dde24d9"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Tue Jun 30 14:57:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 14:57:19 2026 +0800"
      },
      "message": "docs(website): add more language snippets (#7805)\n\n* docs(website): add more language snippets\n\n* Fix main page components\n\n* Fix rustfmt\n\n* Fix format\n\n* Update java config"
    },
    {
      "commit": "4fe7b39f30fb0573ff19c9e65a23ac480dde24d9",
      "tree": "e7a5d375bb4fef85c75821010b56af6cac56afd0",
      "parents": [
        "2e037bbcb5d2cec15e284a52705898bf761f9190"
      ],
      "author": {
        "name": "tonghuaroot (童话)",
        "email": "tonghuaroot@gmail.com",
        "time": "Tue Jun 30 13:49:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 13:49:45 2026 +0800"
      },
      "message": "fix(fuzz): resolve fuzz_reader timeout on OSS-Fuzz (#7831)\n\nCloses #7808."
    },
    {
      "commit": "2e037bbcb5d2cec15e284a52705898bf761f9190",
      "tree": "bcfc4077423486c4eb2e49b708eefc8abafe4c61",
      "parents": [
        "29fb98f240a0d980fc61c3a7801a068d77553a31"
      ],
      "author": {
        "name": "Al Johri",
        "email": "al.johri@gmail.com",
        "time": "Tue Jun 30 01:19:12 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 13:19:12 2026 +0800"
      },
      "message": "feat(services/hf): honor HF_HUB_DISABLE_XET to force http download mode (#7819)\n\nhuggingface_hub documents HF_HUB_DISABLE_XET to disable the hf-xet integration and fall back to the classic resolve-redirect HTTP download. The services-huggingface backend already defaults download_mode to Xet and honors HF_ENDPOINT/HF_HOME, but had no equivalent to HF_HUB_DISABLE_XET.\n\nResolve download_mode via a new hf_download_mode(): an explicit .download_mode(...) config still wins; otherwise a set, non-empty HF_HUB_DISABLE_XET forces Http -- the same convention as the existing HF_HUB_DISABLE_IMPLICIT_TOKEN check; the default stays Xet. This lets downloads be forced through HF_ENDPOINT (e.g. a pull-through cache proxy) with no code change.\n\nSigned-off-by: Al Johri \u003cal.johri@gmail.com\u003e"
    },
    {
      "commit": "29fb98f240a0d980fc61c3a7801a068d77553a31",
      "tree": "dd19cf65b804076297a79e7af3f37a7bc039ac77",
      "parents": [
        "5160785c740fdb7ea0961bdee3b076edd16340b9"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Mon Jun 29 20:44:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 20:44:04 2026 +0800"
      },
      "message": "ci: cache docusaurus build cache (#7806)\n\n* Cache docusaurus build cache\n\n* Bump node, pnpm, and dependencies\n\n* Align node and pnpm versions"
    },
    {
      "commit": "5160785c740fdb7ea0961bdee3b076edd16340b9",
      "tree": "44d6875bbbc155d2152cb1181b5e1f9cc93163f6",
      "parents": [
        "29d55e8b1ff22e2252f34216f351480dd14fdd1e"
      ],
      "author": {
        "name": "tonghuaroot (童话)",
        "email": "tonghuaroot@gmail.com",
        "time": "Sun Jun 28 23:55:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 28 23:55:37 2026 +0800"
      },
      "message": "fix(layers/foyer): preserve read args while filling full-object cache (#7718)\n\nThe full-object cache fill called `stat` and `read` with default args,\nso versioned and conditional reads stored latest content under a\nversioned cache key. Derive the stat args from the reader\u0027s `OpRead`\nand pass the original read args, matching the fallback paths.\n\nCloses #7686\n\nCo-authored-by: tonghuaroot \u003c23011166+tonghuaroot@users.noreply.github.com\u003e"
    },
    {
      "commit": "29d55e8b1ff22e2252f34216f351480dd14fdd1e",
      "tree": "d6ef2c4bcd991634bb6ecf17c498906299799ba2",
      "parents": [
        "e489f0bc6b9ca842f8dfe5c9f3d9766163a2d0d6"
      ],
      "author": {
        "name": "Minh Vu",
        "email": "vuhoangminh97@gmail.com",
        "time": "Sun Jun 28 15:20:06 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 28 21:20:06 2026 +0800"
      },
      "message": "Fix C binding empty byte buffers (#7807)\n\n* Fix C binding empty byte buffers\n\n* bindings/c: require null data for empty buffers\n\n* bindings/c: clarify empty write_with test"
    },
    {
      "commit": "e489f0bc6b9ca842f8dfe5c9f3d9766163a2d0d6",
      "tree": "e50594039db03739df750fda55b4c2375249c680",
      "parents": [
        "573079188e0f42dccbe3c118c0158232becedccf"
      ],
      "author": {
        "name": "Yuang Gao",
        "email": "91290127+YuangGao@users.noreply.github.com",
        "time": "Sun Jun 28 00:08:09 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 28 15:08:09 2026 +0800"
      },
      "message": "feat(services/http): support if_modified_since and if_unmodified_since (#7636)\n\n* feat(services/http): support if_modified_since and if_unmodified_since\n\nInject If-Modified-Since and If-Unmodified-Since in http_get_request\nand http_head_request, and declare the matching read/stat capabilities.\n\nPart of #5486.\n\n* test(python): drop unnecessary delete capability and cleanup"
    },
    {
      "commit": "573079188e0f42dccbe3c118c0158232becedccf",
      "tree": "e9ae672f59b3b660bdd0e61c38b0a90462381739",
      "parents": [
        "701491486968f217719ceebdff1187ee9227ce9a"
      ],
      "author": {
        "name": "Ryan Huang",
        "email": "ryankert01@gmail.com",
        "time": "Fri Jun 26 18:19:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 03:19:51 2026 -0700"
      },
      "message": "feat(binding/go): add reader with options (#7817)"
    },
    {
      "commit": "701491486968f217719ceebdff1187ee9227ce9a",
      "tree": "22ebc22886dbf70274faf73a97530f06da6bc5e7",
      "parents": [
        "160fbae2cd46643aef140717c144f80611bca882"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Thu Jun 25 23:27:12 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 01:57:12 2026 +0800"
      },
      "message": "refactor(bindings/python): generate type stubs with pyo3 introspection (#7824)\n\n* refactor(bindings/python): drop pyo3-stub-gen for pyo3 introspection\n\nReplace pyo3-stub-gen with native PyO3 introspection\n(experimental-inspect) for type-stub generation.\n\n- Cargo.toml: add pyo3 experimental-inspect; drop pyo3-stub-gen dep\n  and the stub_gen bin; lib crate-type cdylib-only (rlib was only for\n  the deleted bin).\n- Delete src/bin/stub_gen.rs; drop define_stub_info_gatherer! and the\n  pyo3_stub_gen use from lib.rs.\n- Strip all #[gen_stub*] attrs across capability/errors/file/operator/\n  metadata/layers; convert override_type/override_return_type to inline\n  #[pyo3(signature \u003d (arg: \"T\") -\u003e \"R\")] annotations. errors.rs uses\n  pyo3::create_exception.\n- python.j2: drop module_doc!/gen_methods_from_python! stub-gen wiring,\n  keep the Scheme enum + impl_enum_to_str!. python.rs: keep the helper\n  fns/registrations for a follow-up PR; only add a trailing-newline\n  guard to the generated services.rs.\n\nStub layout, the generation pipeline, and the handling of exceptions\nand per-service constructors are handled separately.\n\n* build(bindings/python): wire stub-gen + fmt for pyo3 introspection\n\n- stub-gen: generate services bindings, build with maturin\n  --generate-stubs, run the stub post-processor, then `just fmt`.\n- fmt: ruff format then `ruff check --unsafe-fixes --fix` (fix must\n  run after format), so generated stubs are normalised in place.\n- ruff.toml: keep only the *.pyi ignores that are not auto-fixable\n  (PYI021 to retain introspected docstrings, ANN401, ANN003, TID252);\n  the rest are handled by the fmt fixers.\n- Use --manifest-path instead of -m for maturin commands.\n\n* refactor(bindings/python): remove old stub-gen .pyi stubs\n\nDelete the public opendal/*.pyi generated by pyo3-stub-gen. Stubs are\nnow produced by pyo3 introspection under opendal/_opendal/ and resolved\nvia the package\u0027s TYPE_CHECKING imports.\n\n* docs(bindings/python): note why __aenter__ uses typing_extensions.Self\n\nExplain that typing.Self (3.11+) is unavailable at the \u003e\u003d3.10 floor,\nso the introspected stub annotation uses typing_extensions.Self.\n\n* feat(bindings/python): add pyo3-introspection stubs at public paths\n\nAdd the type stubs generated by pyo3 introspection at the public\n``opendal/\u003cname\u003e.pyi`` paths so ``from opendal.operator import X`` and\nfriends resolve for type checkers and IDEs. ``__init__.py`` imports the\nnative ``_opendal`` extension first (which registers the submodules in\n``sys.modules``) and re-exports the public classes and submodules.\n\n* build(bindings/python): relocate generated stubs to public paths\n\nRewrite the stub post-processor to move the introspected stubs from\n``opendal/_opendal/`` to the public ``opendal/\u003cname\u003e.pyi`` paths (where\ntype checkers resolve them), in addition to injecting forward-ref\nimports and the hand-written exceptions stub. Run ruff\u0027s fixers\nsilently in ``just fmt`` so the relocated stubs are normalised.\n\n* feat(bindings/python): regenerate services.rs for pyo3 introspection\n\nRegenerate the service bindings from the updated codegen template:\na lean `Scheme` enum plus `impl_enum_to_str!`, dropping the\npyo3-stub-gen `gen_methods_from_python!` constructor overloads.\n\n* ci(bindings/python): add stub drift check\n\nAdd a `stubs` job that runs `just stub-gen` and `git diff --exit-code`,\nfailing the build when the committed codegen or introspection stubs are\nstale. Release wheels ship the committed python/opendal tree verbatim,\nso it must stay fresh.\n\n* fix(bindings/python): don\u0027t strip the extension for stub generation\n\n`maturin --generate-stubs` reads the introspection data from the built\nlibrary. On Linux, `[tool.maturin] strip \u003d true` strips that data out,\nso stub generation fails with \"No module named _opendal found\" (it\nhappened to survive the strip on macOS). Drop the maturin strip; release\nwheels are still stripped via `[profile.release]`.\n\n* ci(bindings/python): install taplo and hawkeye for the stubs job\n\n`just stub-gen` ends in `just fmt`, which runs taplo and hawkeye. Install\nboth in the stubs job so stub regeneration completes (matching the tools\nused elsewhere in CI).\n\n* ci(bindings/python): install hawkeye from prebuilt binary\n\nUse the prebuilt hawkeye installer instead of `cargo install`, which\nbuilds from source and is slow.\n\n* fix(bindings/python): correct File.readinto and AsyncFile.__aenter__ stubs\n\n- readinto requires a writable buffer; type it `bytearray | memoryview`\n  instead of `bytes | bytearray` (`bytes` is rejected at runtime).\n- __aenter__ returns an awaitable, so annotate it\n  `Awaitable[Self]` rather than `Self`."
    },
    {
      "commit": "160fbae2cd46643aef140717c144f80611bca882",
      "tree": "d2992b927f0e2fb5c3abb27088effd460ff1e3b5",
      "parents": [
        "5ebfb5b364f17da753b36e3549fca0fb8ec4652f"
      ],
      "author": {
        "name": "ZeonX",
        "email": "30890851+ZeonXr@users.noreply.github.com",
        "time": "Thu Jun 25 18:42:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 18:42:21 2026 +0800"
      },
      "message": "fix(webdav): support multiple propstat entries (#7823)"
    },
    {
      "commit": "5ebfb5b364f17da753b36e3549fca0fb8ec4652f",
      "tree": "56630715ba50209e6171edca44d64e8ba6d62bc2",
      "parents": [
        "73ba2c039e84349162e1e53ae00daa1eea8977a7"
      ],
      "author": {
        "name": "hfutatzhanghb",
        "email": "hfutzhanghb@163.com",
        "time": "Thu Jun 25 15:33:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 15:33:37 2026 +0800"
      },
      "message": "RFC: rename if not exists (#7818)\n\n* docs(core): propose rename if not exists RFC\n\n* docs(core): assign RFC 7818\n\n* docs(core): expand conditional rename service analysis\n\n* docs(core): remove placeholder tracking issue\n\n* Update core/core/src/docs/rfcs/7818_rename_if_not_exists.md\n\nCo-authored-by: Erick Guan \u003c297343+erickguan@users.noreply.github.com\u003e\n\n* Update core/core/src/docs/rfcs/7818_rename_if_not_exists.md\n\nCo-authored-by: Erick Guan \u003c297343+erickguan@users.noreply.github.com\u003e\n\n* Update core/core/src/docs/rfcs/7818_rename_if_not_exists.md\n\nCo-authored-by: Erick Guan \u003c297343+erickguan@users.noreply.github.com\u003e\n\n* Update core/core/src/docs/rfcs/7818_rename_if_not_exists.md\n\nCo-authored-by: Erick Guan \u003c297343+erickguan@users.noreply.github.com\u003e\n\n* docs(core): note alignment with copy/write correctness_check\n\nAddress erickguan\u0027s review: explicitly document that RenameOptions is\nalways constructable, matching the existing write and copy pattern where\nthe correctness_check layer returns Unsupported when the capability is\nnot advertised.\n\n* docs(core): clarify \u0027the destination condition\u0027 terminology\n\nReplace ambiguous \u0027the destination condition\u0027 with explicit phrasing:\n\u0027destination-does-not-exist check\u0027 and\n\u0027destination already exists (if_not_exists condition fails)\u0027.\n\nAddresses erickguan\u0027s review feedback.\n\n* docs(core): clarify \u0027the operation\u0027 -\u003e \u0027the rename\u0027 in atomicity section\n\nReplace the ambiguous \u0027the operation\u0027 with \u0027the rename\u0027 for clarity.\nAddresses erickguan\u0027s review feedback.\n\n* docs(core): clarify why overwrite rename can be non-atomic\n\nAdd an explicit paragraph explaining that overwrite rename does not\nrequire atomicity (multi-step delete+rename achieves the same result),\nwhile the if_not_exists condition must be checked atomically with the\nmove. A backend with non-atomic overwrite may still support conditional\nrename by skipping the pre-delete and relying on the native conflict\nrejection. HDFS is the example.\n\nAddresses erickguan\u0027s review feedback about the apparent contradiction\nbetween non-atomic overwrite implementations and the atomicity\nrequirement for conditional rename.\n\n---------\n\nCo-authored-by: zhanghaobo@kanzhun.com \u003czhanghaobo@kanzhun.com\u003e\nCo-authored-by: Erick Guan \u003c297343+erickguan@users.noreply.github.com\u003e"
    },
    {
      "commit": "73ba2c039e84349162e1e53ae00daa1eea8977a7",
      "tree": "1b1412104b5381b0c5a43e07bd58971af8eb16c9",
      "parents": [
        "a004995e13af00c5b141a5ea12b77d80d19156a7"
      ],
      "author": {
        "name": "HelloKitty",
        "email": "hfutqyy@163.com",
        "time": "Thu Jun 25 15:25:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 15:25:35 2026 +0800"
      },
      "message": "docs(services/s3): fix inverted comment on disable_list_objects_v2 (#7820)\n\nThe first line of the doc comment said disabling list objects v2 makes\nOpenDAL \u0027not use the older List Objects V1\u0027, which is the opposite of the\nactual behavior. Setting disable_list_objects_v2 \u003d true makes the backend\nselect S3ListerV1, i.e. it falls back TO the older List Objects V1.\n\nFix the wording to \u0027fall back to the older List Objects V1\u0027 to match the\ncode and the following sentence about legacy services not supporting V2."
    },
    {
      "commit": "a004995e13af00c5b141a5ea12b77d80d19156a7",
      "tree": "632ccabcc9d5c7c01cacba96a5c3424aa9094a60",
      "parents": [
        "98f8edf5aa3e3c8c017979d1a500bc9957b15283"
      ],
      "author": {
        "name": "Yuang Gao",
        "email": "91290127+YuangGao@users.noreply.github.com",
        "time": "Wed Jun 24 20:40:42 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 11:40:42 2026 +0800"
      },
      "message": "feat(services/obs): support if_modified_since and if_unmodified_since… (#7708)\n\nfeat(services/obs): support if_modified_since and if_unmodified_since on read (part of #5486)"
    },
    {
      "commit": "98f8edf5aa3e3c8c017979d1a500bc9957b15283",
      "tree": "1c7d961688e701fcf05dc60b8c7acd3c1c17a415",
      "parents": [
        "868837c9ec2e5e29e7bf97cf8e00a24bf0424766"
      ],
      "author": {
        "name": "Yuang Gao",
        "email": "91290127+YuangGao@users.noreply.github.com",
        "time": "Wed Jun 24 19:31:03 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 10:31:03 2026 +0800"
      },
      "message": "feat(services/webdav): support conditional read headers (#7637)\n\n* feat(services/webdav): support conditional read headers\n\nInject If-Match, If-None-Match, If-Modified-Since and If-Unmodified-Since\nin webdav_get, declare the matching read_with_if_* capabilities, and map\n412/304 responses to ConditionNotMatch.\n\nAdd a disable_conditional_read backend option (default false) for servers\nthat don\u0027t honor these headers, and turn it on for the nginx fixtures\nwhich don\u0027t return ETags in PROPFIND.\n\nPart of #5486.\n\n* rename to enable_conditional_read\n\n* chore: cargo fmt bindings/python\n\n* inline header list in conditional-read doc"
    },
    {
      "commit": "868837c9ec2e5e29e7bf97cf8e00a24bf0424766",
      "tree": "f679cb216b0b119fe8137010e5cd6b5d0dbbf013",
      "parents": [
        "9d7c68eaaf2cc12435f3779bf747ae3800ca6237"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Wed Jun 24 09:59:29 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 09:59:29 2026 -0700"
      },
      "message": "feat(fs): copy with metadata (#7535)"
    },
    {
      "commit": "9d7c68eaaf2cc12435f3779bf747ae3800ca6237",
      "tree": "83e0a015d5e615e2cc5ae652833b517b498dc147",
      "parents": [
        "a83e4ed1e3dd19fdc16f61306db33f402ca88412"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Wed Jun 24 21:14:49 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 21:14:49 2026 +0530"
      },
      "message": "refactor(bindings/python): use declarative pymodule syntax (#7812)\n\n* refactor(bindings/python): use declarative pymodule syntax\n\nConvert _opendal from the imperative add_pymodule!/add_pyexceptions!\nmacros to PyO3\u0027s declarative #[pymodule] mod form with #[pymodule_export].\nExport __version__ as a #[pymodule_export] const, and add a register_in_sys\nhelper plus an add_exceptions! macro. Submodule __name__ is now the\nfully qualified dotted name (e.g. opendal.operator).\n\nRefs: https://pyo3.rs/v0.29.0/module.html\n\n* refactor(bindings/python): register submodules via a single recursive walk\n\nReplace the per-submodule `register_in_sys` calls (one `#[pymodule_init]`\neach) with a single `register_submodules` walk invoked once from the root\nmodule. It recurses over the declarative submodules and inserts them into\n`sys.modules` under the public `opendal` name, fixing each `__name__`.\n\nAdapted from the approaches in PyO3 issue #759. The data submodules are now\nplain `#[pymodule] mod` blocks; only `exceptions` keeps an init for\n`add_exceptions!`.\n\n* chore(bindings/python): refresh uv.lock dependencies\n\n* refactor(bindings/python): collapse register_submodules into one recursive fn\n\nIt is only called from the root `#[pymodule_init]`, so fold the thin\n`sys.modules`-import wrapper into the recursive function itself.\n\n* docs(bindings/python): explain the _opendal mixed-layout module name"
    },
    {
      "commit": "a83e4ed1e3dd19fdc16f61306db33f402ca88412",
      "tree": "dc38e406c28959acfbdc95edf39f45685930c0b5",
      "parents": [
        "931baacfbb73d50e16961ff8d97c0b688c8d054d"
      ],
      "author": {
        "name": "dentiny",
        "email": "dentinyhao@gmail.com",
        "time": "Tue Jun 23 02:03:53 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 02:03:53 2026 -0700"
      },
      "message": "feat(binding/go): add presign with options (#7814)"
    },
    {
      "commit": "931baacfbb73d50e16961ff8d97c0b688c8d054d",
      "tree": "3c6c621d29581a42b5ffa39b3b8612a06bb8be66",
      "parents": [
        "65a70132a321efd2ca164180f277b5f4a003e1df"
      ],
      "author": {
        "name": "Philipp Krones",
        "email": "hello@philkrones.com",
        "time": "Mon Jun 22 18:28:44 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 00:28:44 2026 +0800"
      },
      "message": "fix(services/memcached): TCP address resolution (#7701)\n\n* [memcached] Fix TCP address resolution\n\nPR #7112 added support for Unix sockets to the memcached backend. As a\nside effect, it switched the TCP address parsing from being done inside\nof `TcpStream::connect` to `SocketAddr::parse`. The major difference is\nthat `SocketAddr::parse` cannot resolve addresses like `localhost:1234`,\nas it errors out if it sees non-octal numbers in the address.\n\nThis seemed like an unintended breaking change to me. I also can\u0027t see\nthe benefit of doing that, as `TcpStream::connect` already calls\n`to_socket_addrs` internally.\n\n* Add regression tests\n\n* Update test comments"
    },
    {
      "commit": "65a70132a321efd2ca164180f277b5f4a003e1df",
      "tree": "f38e9c1b8e756b273ab49fe89e18a946ba35d0e4",
      "parents": [
        "a6f04d0f4218cdaa97fdd74c6593768aaaebdf38"
      ],
      "author": {
        "name": "Chitral Verma",
        "email": "chitralverma@gmail.com",
        "time": "Mon Jun 22 18:25:59 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 20:55:59 2026 +0800"
      },
      "message": "chore(bindings/python): replace pyright with ty for type checking (#7813)\n\nSwitch the Python binding from pyright/basedpyright to ty (astral-sh/ty).\nRemove pyrightconfig.json, add a [tool.ty.src] config plus the ty lint\ndependency in pyproject.toml, and run ty check from the lint recipe.\nDrop the now-unnecessary pyright:ignore in __init__.py and update a\ntype-checker reference in upgrade.md."
    },
    {
      "commit": "a6f04d0f4218cdaa97fdd74c6593768aaaebdf38",
      "tree": "06cfc7909cc803b38a3ea56b3604c2fa88bb53c4",
      "parents": [
        "3fd4ead4a378db1659275d1062723daaa56cfebd"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 22 19:57:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 19:57:36 2026 +0800"
      },
      "message": "chore(deps): bump the third-party-actions group across 1 directory with 2 updates (#7757)"
    },
    {
      "commit": "3fd4ead4a378db1659275d1062723daaa56cfebd",
      "tree": "13054ead1de1933bb60c275945ae903ac17ba500",
      "parents": [
        "b6a0a7a9c60d050c8ba22a532fb51007483effae"
      ],
      "author": {
        "name": "Ed McClanahan",
        "email": "emcclanahan@nvidia.com",
        "time": "Sun Jun 21 07:09:02 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 21 22:09:02 2026 +0800"
      },
      "message": "feat(services/swift): support list with start_after (#7810)\n\nOpenStack Swift\u0027s container listing supports a `marker` query parameter\n(an exclusive start-after), and the Swift lister already pages through it\nvia `ctx.token`. Only the initial seed and the capability flag were\nmissing, so `list_with_start_after` was unsupported and a user-supplied\n`start_after` was silently ignored.\n\nSeed the first page\u0027s marker from `OpList::start_after()` (made absolute\nlike the S3 lister does), thread it through `SwiftLister`, and advertise\n`list_with_start_after` in the native capability. Subsequent pages keep\nusing the continuation marker carried in `ctx.token`.\n\nSigned-off-by: Edward McClanahan \u003cemcclanahan@nvidia.com\u003e"
    },
    {
      "commit": "b6a0a7a9c60d050c8ba22a532fb51007483effae",
      "tree": "846209cf1725c9d0f4ae2c8b5c8ad94247ebeec8",
      "parents": [
        "393abb02d11b66251234f894503f4a67908e0185"
      ],
      "author": {
        "name": "tonghuaroot (童话)",
        "email": "tonghuaroot@gmail.com",
        "time": "Sun Jun 21 13:00:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 21 13:00:12 2026 +0800"
      },
      "message": "fix(services/onedrive): build correct children URL when listing root (#7720)\n\n* fix(services/onedrive): build correct children URL when listing root\n\n* docs(services/onedrive): tighten root list-request comment"
    },
    {
      "commit": "393abb02d11b66251234f894503f4a67908e0185",
      "tree": "abe85537732fd80ae4f41f6cfe2691cf36995891",
      "parents": [
        "9886f52f9ecea93be42e51e261db78eadeaed198"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Fri Jun 19 23:51:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 23:51:06 2026 +0800"
      },
      "message": "rfc: path normalization and secure hardening (#7799)\n\n* rfc: path normalization and secure hardening\n\nAdd RFC proposing to remove `.trim()` from `normalize_path` so that\nwhitespace within path components is preserved. The current behavior\nsilently rewrites paths with leading/trailing whitespace to different\nobjects, violating the documented API contract.\n\n* fix typo"
    },
    {
      "commit": "9886f52f9ecea93be42e51e261db78eadeaed198",
      "tree": "ae8b48c88cadb5b83e26253916f9cc0945d75a48",
      "parents": [
        "57e1e8e33959f83445537d9628943ea44337f9cb"
      ],
      "author": {
        "name": "Erick Guan",
        "email": "297343+erickguan@users.noreply.github.com",
        "time": "Fri Jun 19 23:15:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 23:15:39 2026 +0800"
      },
      "message": "ci: build only generic macOS target (#7800)\n\n* Exclude CI set up files\n\n* Build one macOS native gem\n\n* Attempt to exclude \".\" folder\n\n* Version bump"
    },
    {
      "commit": "57e1e8e33959f83445537d9628943ea44337f9cb",
      "tree": "a6f3f46a44cef7a11bf66a3b266da40fdf1eae7b",
      "parents": [
        "cfde8a31a70e8e4ac5a28914fd4f823f0245e372"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jun 18 22:03:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 22:03:48 2026 +0800"
      },
      "message": "chore(deps): update ext-php-rs requirement from 0.13.1 to 0.15.15 in /bindings/php (#7767)\n\n* chore(deps): update ext-php-rs requirement in /bindings/php\n\nUpdates the requirements on [ext-php-rs](https://github.com/extphprs/ext-php-rs) to permit the latest version.\n- [Release notes](https://github.com/extphprs/ext-php-rs/releases)\n- [Changelog](https://github.com/extphprs/ext-php-rs/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/extphprs/ext-php-rs/compare/ext-php-rs-v0.13.1...ext-php-rs-v0.15.15)\n\n---\nupdated-dependencies:\n- dependency-name: ext-php-rs\n  dependency-version: 0.15.15\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\n\n* fix(php): support ext-php-rs 0.15\n\n* fix(php): register classes explicitly\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: Xuanwo \u003cgithub@xuanwo.io\u003e"
    },
    {
      "commit": "cfde8a31a70e8e4ac5a28914fd4f823f0245e372",
      "tree": "2b135e69df79e4520a6b5d081f5a858b79ba6269",
      "parents": [
        "7ec141780f43ade098920246f1edf3f13371fc8f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jun 18 22:03:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 22:03:14 2026 +0800"
      },
      "message": "chore(deps): update mlua requirement from 0.9 to 0.11 in /bindings/lua (#7766)\n\n* chore(deps): update mlua requirement from 0.9 to 0.11 in /bindings/lua\n\nUpdates the requirements on [mlua](https://github.com/mlua-rs/mlua) to permit the latest version.\n- [Release notes](https://github.com/mlua-rs/mlua/releases)\n- [Changelog](https://github.com/mlua-rs/mlua/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/mlua-rs/mlua/compare/v0.9.0...v0.11.6)\n\n---\nupdated-dependencies:\n- dependency-name: mlua\n  dependency-version: 0.11.6\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\n\n* fix(lua): support mlua 0.11\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: Xuanwo \u003cgithub@xuanwo.io\u003e"
    },
    {
      "commit": "7ec141780f43ade098920246f1edf3f13371fc8f",
      "tree": "f479757d7af6ea4c91db54f51b393ffec3209820",
      "parents": [
        "0c1d930589472ba654a30bffd273e1da38f84e96"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jun 18 18:12:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 18:12:09 2026 +0800"
      },
      "message": "chore(deps): update rb-sys-env requirement from 0.1.2 to 0.2.3 in /bindings/ruby"
    },
    {
      "commit": "0c1d930589472ba654a30bffd273e1da38f84e96",
      "tree": "87a000537c2c00fdfe62a8f617ab43f5f1c7eca0",
      "parents": [
        "36a8cb8c3bba41f8fd6792ebd23ab7d250dab7e6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jun 18 18:12:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 18:12:01 2026 +0800"
      },
      "message": "chore(deps-dev): update minitest-reporters requirement from ~\u003e 1.7.1 to ~\u003e 1.8.0 in /bindings/ruby"
    },
    {
      "commit": "36a8cb8c3bba41f8fd6792ebd23ab7d250dab7e6",
      "tree": "8b0580aca5a216c447216902e00989a0dfc6b8e4",
      "parents": [
        "55eb8d1ded2b30610571b10210f4552bd1623a5d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jun 18 18:11:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 18:11:52 2026 +0800"
      },
      "message": "chore(deps): bump the others group across 1 directory with 6 updates"
    },
    {
      "commit": "55eb8d1ded2b30610571b10210f4552bd1623a5d",
      "tree": "16a7f6ad40e466448dea8069985e7dcfb8675b54",
      "parents": [
        "b94d02e03b994963ef9cf9f7993ef549644435e4"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Thu Jun 18 18:06:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 18:06:39 2026 +0800"
      },
      "message": "refactor: normalize service module layout (#7797)"
    },
    {
      "commit": "b94d02e03b994963ef9cf9f7993ef549644435e4",
      "tree": "bb524fa1a4e0afaea36578e3b90e6bdf752666fc",
      "parents": [
        "ec239c7d0f2178fccc639c651d0c772be01f9d85"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Thu Jun 18 16:49:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 16:49:22 2026 +0800"
      },
      "message": "refactor(core): lazy open positioned read handles (#7796)\n\n* Refine positioned read handle initialization\n\n* Simplify positioned read handle initialization"
    },
    {
      "commit": "ec239c7d0f2178fccc639c651d0c772be01f9d85",
      "tree": "c7cb496487f0d7dc037154095e3cdd790a9c7296",
      "parents": [
        "e399da6e160e62d8fa2d0e8be995fa4fa71a3e91"
      ],
      "author": {
        "name": "Xuanwo",
        "email": "github@xuanwo.io",
        "time": "Thu Jun 18 16:40:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 16:40:34 2026 +0800"
      },
      "message": "docs(website): link landing service and binding entries to docs (#7795)\n\nThe landing page showed services as static chips and bindings as static cards, with no way to reach the matching documentation. Make each entry a link: service chips go to /services/\u003cscheme\u003e, and binding cards go to their docs landing page (/docs/core for Rust, /docs/bindings/\u003cslug\u003e for the rest)."
    }
  ],
  "next": "e399da6e160e62d8fa2d0e8be995fa4fa71a3e91"
}
