)]}'
{
  "log": [
    {
      "commit": "c92e7abdaf3ceb0ea0dc7dd455d035430e3bfc91",
      "tree": "1b59306e771412ce20dfa8da0e32dacbb38a979b",
      "parents": [
        "b497f278417c181b35109036010cf88be242e45b"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Fri Sep 11 13:20:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 05:20:02 2026 +0000"
      },
      "message": "chore(ci): check license headers in Lua scripts (#3616)\n\nAdd Lua files to the license header checker and add the missing Apache\nheader to the LuaJIT bytecode regression script.\n\nAssistant-By GPT-6 Astra"
    },
    {
      "commit": "b497f278417c181b35109036010cf88be242e45b",
      "tree": "1db69cd58d2dab228507420d3b040359e8891843",
      "parents": [
        "8f117097288490b21994b9c2ab00ddeae7ca85fe"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Sep 10 18:47:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 18:47:45 2026 +0800"
      },
      "message": "ci: bump the github-actions group with 8 updates (#3614)\n\nBumps the github-actions group with 8 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [actions/checkout](https://github.com/actions/checkout) | `6` | `7` |\n| [dorny/paths-filter](https://github.com/dorny/paths-filter) | `4.0.1`\n| `4.0.3` |\n| [crate-ci/typos](https://github.com/crate-ci/typos) | `1.49.0` |\n`1.50.1` |\n| [actions/cache](https://github.com/actions/cache) | `5` | `6` |\n| [actions/setup-python](https://github.com/actions/setup-python) | `6`\n| `7` |\n|\n[SonarSource/sonarqube-scan-action/install-build-wrapper](https://github.com/sonarsource/sonarqube-scan-action)\n| `8.2.0` | `8.2.1` |\n| [actions/github-script](https://github.com/actions/github-script) |\n`8` | `9` |\n|\n[SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action)\n| `8.2.0` | `8.2.1` |\n\nUpdates `actions/checkout` from 6 to 7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/checkout/releases\"\u003eactions/checkout\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eblock checking out fork pr for pull_request_target and workflow_run\nby \u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2454\"\u003eactions/checkout#2454\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the\nminor-actions-dependencies group across 1 directory by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2458\"\u003eactions/checkout#2458\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump flatted from 3.3.1 to 3.4.2 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2460\"\u003eactions/checkout#2460\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump js-yaml from 4.1.0 to 4.2.0 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2461\"\u003eactions/checkout#2461\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/core\u003c/code\u003e and\n\u003ccode\u003e@​actions/tool-cache\u003c/code\u003e and Remove uuid by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2459\"\u003eactions/checkout#2459\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupgrade module to esm and update dependencies by \u003ca\nhref\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2463\"\u003eactions/checkout#2463\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eBump the minor-npm-dependencies group across 1 directory with 3\nupdates by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e[bot]\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2462\"\u003eactions/checkout#2462\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003egetting ready for checkout v7 release by \u003ca\nhref\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2464\"\u003eactions/checkout#2464\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eupdate error wording by \u003ca\nhref\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2467\"\u003eactions/checkout#2467\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2454\"\u003eactions/checkout#2454\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/checkout/compare/v6.0.3...v7.0.0\"\u003ehttps://github.com/actions/checkout/compare/v6.0.3...v7.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e[BREAKING]\u003c/strong\u003e backport\n\u003ccode\u003eallow-unsafe-pr-checkout\u003c/code\u003e to v6 by \u003ca\nhref\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2500\"\u003eactions/checkout#2500\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ebackport fixes to releases-v6 by \u003ca\nhref\u003d\"https://github.com/aiqiaoy\"\u003e\u003ccode\u003e@​aiqiaoy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2527\"\u003eactions/checkout#2527\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ca\nhref\u003d\"https://github.blog/changelog/2026-06-18-safer-pull_request_target-defaults-for-github-actions-checkout/\"\u003ehttps://github.blog/changelog/2026-06-18-safer-pull_request_target-defaults-for-github-actions-checkout/\u003c/a\u003e\nfor more details about this breaking change\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/checkout/compare/v6.0.3...v6.1.0\"\u003ehttps://github.com/actions/checkout/compare/v6.0.3...v6.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate changelog by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2357\"\u003eactions/checkout#2357\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: expand merge commit SHA regex and add SHA-256 test cases by \u003ca\nhref\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2414\"\u003eactions/checkout#2414\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix checkout init for SHA-256 repositories by \u003ca\nhref\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2439\"\u003eactions/checkout#2439\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate changelog for v6.0.3 by \u003ca\nhref\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2446\"\u003eactions/checkout#2446\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/yaananth\"\u003e\u003ccode\u003e@​yaananth\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2414\"\u003eactions/checkout#2414\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/checkout/compare/v6...v6.0.3\"\u003ehttps://github.com/actions/checkout/compare/v6...v6.0.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.0.2\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd orchestration_id to git user-agent when ACTIONS_ORCHESTRATION_ID\nis set by \u003ca\nhref\u003d\"https://github.com/TingluoHuang\"\u003e\u003ccode\u003e@​TingluoHuang\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2355\"\u003eactions/checkout#2355\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix tag handling: preserve annotations and explicit fetch-tags by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2356\"\u003eactions/checkout#2356\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/checkout/compare/v6.0.1...v6.0.2\"\u003ehttps://github.com/actions/checkout/compare/v6.0.1...v6.0.2\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.0.1\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate all references from v5 and v4 to v6 by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2314\"\u003eactions/checkout#2314\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdd worktree support for persist-credentials includeIf by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2327\"\u003eactions/checkout#2327\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eClarify v6 README by \u003ca\nhref\u003d\"https://github.com/ericsciple\"\u003e\u003ccode\u003e@​ericsciple\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/pull/2328\"\u003eactions/checkout#2328\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/3d3c42e5aac5ba805825da76410c181273ba90b1\"\u003e\u003ccode\u003e3d3c42e\u003c/code\u003e\u003c/a\u003e\nprep v7.0.1 release (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2531\"\u003e#2531\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/28802689a136bfcdb721715abd713740beecbe07\"\u003e\u003ccode\u003e2880268\u003c/code\u003e\u003c/a\u003e\nescape values passed to --unset (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2530\"\u003e#2530\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/12cd2235efa0937479335606d7c3ac9f6c0973b1\"\u003e\u003ccode\u003e12cd223\u003c/code\u003e\u003c/a\u003e\ntrim only ascii whitespace for branch (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2521\"\u003e#2521\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/62661c4e71a304b2823ed026347b8d34c3eac541\"\u003e\u003ccode\u003e62661c4\u003c/code\u003e\u003c/a\u003e\nskip running unsafe pr check if input is default (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2518\"\u003e#2518\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/e8d4307400f9427dba7cb98e488d6ab85f1cec5f\"\u003e\u003ccode\u003ee8d4307\u003c/code\u003e\u003c/a\u003e\nBump the minor-actions-dependencies group with 2 updates (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2499\"\u003e#2499\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/631c942040754b6e095e929c1677c07e10ed4f87\"\u003e\u003ccode\u003e631c942\u003c/code\u003e\u003c/a\u003e\neslint 9 (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2474\"\u003e#2474\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/4f1f4aec02e41874fa0262ea8ff5172d7978ad1e\"\u003e\u003ccode\u003e4f1f4ae\u003c/code\u003e\u003c/a\u003e\nBump actions/upload-artifact from 4 to 7 (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2476\"\u003e#2476\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/ba097532fb203f7e88c9c3c0b899b49469908a92\"\u003e\u003ccode\u003eba09753\u003c/code\u003e\u003c/a\u003e\nBump actions/checkout from 6 to 7 (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2488\"\u003e#2488\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/b9e0990d219a03df7633c93f6f005a8fecbcab22\"\u003e\u003ccode\u003eb9e0990\u003c/code\u003e\u003c/a\u003e\nBump docker/login-action from 3.3.0 to 4.2.0 (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2479\"\u003e#2479\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/checkout/commit/e8cb398be4a550817e382abf69e4c12c76fce1f2\"\u003e\u003ccode\u003ee8cb398\u003c/code\u003e\u003c/a\u003e\nBump docker/build-push-action from 6.5.0 to 7.2.0 (\u003ca\nhref\u003d\"https://redirect.github.com/actions/checkout/issues/2478\"\u003e#2478\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/actions/checkout/compare/v6...v7\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `dorny/paths-filter` from 4.0.1 to 4.0.3\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/releases\"\u003edorny/paths-filter\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev4.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate Outputs in readme to account for the \u0027every\u0027\npredicate-quantifier by \u003ca\nhref\u003d\"https://github.com/hintron\"\u003e\u003ccode\u003e@​hintron\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/247\"\u003edorny/paths-filter#247\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: scope base-ignored warning to API path by \u003ca\nhref\u003d\"https://github.com/saschabratton\"\u003e\u003ccode\u003e@​saschabratton\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/319\"\u003edorny/paths-filter#319\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: add contents permission to PR example by \u003ca\nhref\u003d\"https://github.com/134130\"\u003e\u003ccode\u003e@​134130\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/248\"\u003edorny/paths-filter#248\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat: add \u0027some-with-excludes\u0027 predicate quantifier by \u003ca\nhref\u003d\"https://github.com/arxeiss\"\u003e\u003ccode\u003e@​arxeiss\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/322\"\u003edorny/paths-filter#322\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eDocument safe handling of file list outputs in workflows by \u003ca\nhref\u003d\"https://github.com/dorny\"\u003e\u003ccode\u003e@​dorny\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/326\"\u003edorny/paths-filter#326\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eSecurity\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEscape multi-line filenames in list-files shell and csv output] by\n\u003ca href\u003d\"https://github.com/ken-matsui\"\u003e\u003ccode\u003e@​ken-matsui\u003c/code\u003e\u003c/a\u003e\nand \u003ca href\u003d\"https://github.com/tjswlsgg\"\u003e\u003ccode\u003e@​tjswlsgg\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://github.com/advisories/GHSA-7hc6-8hq5-9q2m\"\u003ehttps://github.com/advisories/GHSA-7hc6-8hq5-9q2m\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/hintron\"\u003e\u003ccode\u003e@​hintron\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/247\"\u003edorny/paths-filter#247\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/134130\"\u003e\u003ccode\u003e@​134130\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/248\"\u003edorny/paths-filter#248\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/arxeiss\"\u003e\u003ccode\u003e@​arxeiss\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/322\"\u003edorny/paths-filter#322\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/compare/v4...v4.0.3\"\u003ehttps://github.com/dorny/paths-filter/compare/v4...v4.0.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev4.0.2\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003efix warning message by \u003ca\nhref\u003d\"https://github.com/cgundy\"\u003e\u003ccode\u003e@​cgundy\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/282\"\u003edorny/paths-filter#282\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003echore: fix GitHub spelling in logs by \u003ca\nhref\u003d\"https://github.com/squat\"\u003e\u003ccode\u003e@​squat\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/278\"\u003edorny/paths-filter#278\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: use rev-parse instead of branch --show-current for older git\ncompat by \u003ca\nhref\u003d\"https://github.com/saschabratton\"\u003e\u003ccode\u003e@​saschabratton\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/303\"\u003edorny/paths-filter#303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efix: work around git dubious ownership errors in container jobs by\n\u003ca\nhref\u003d\"https://github.com/saschabratton\"\u003e\u003ccode\u003e@​saschabratton\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/317\"\u003edorny/paths-filter#317\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: update changelog for v4.0.2 by \u003ca\nhref\u003d\"https://github.com/saschabratton\"\u003e\u003ccode\u003e@​saschabratton\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/318\"\u003edorny/paths-filter#318\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/cgundy\"\u003e\u003ccode\u003e@​cgundy\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/282\"\u003edorny/paths-filter#282\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/squat\"\u003e\u003ccode\u003e@​squat\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/278\"\u003edorny/paths-filter#278\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/compare/v4.0.1...v4.0.2\"\u003ehttps://github.com/dorny/paths-filter/compare/v4.0.1...v4.0.2\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/blob/master/CHANGELOG.md\"\u003edorny/paths-filter\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eChangelog\u003c/h1\u003e\n\u003ch2\u003ev4.0.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/326\"\u003eDocument\nsafe handling of file list outputs in workflows\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/advisories/GHSA-7hc6-8hq5-9q2m\"\u003eEscape\nmulti-line filenames in list-files shell and csv output\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/322\"\u003eAdd\n\u0027some-with-excludes\u0027 predicate quantifier\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/248\"\u003eAdd\ncontents permission to PR example\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/319\"\u003eScope\nbase-ignored warning to API path\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/247\"\u003eUpdate\noutputs in readme to account for the \u0027every\u0027\npredicate-quantifier\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.0.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/317\"\u003eWork\naround git dubious ownership errors in container jobs\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/303\"\u003eUse\nrev-parse instead of branch --show-current for older git compat\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/282\"\u003eFix\nwarning message\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.0.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/255\"\u003eSupport\nmerge queue\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev4.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/294\"\u003eUpdate\naction runtime to node24\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.0.4\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/advisories/GHSA-7hc6-8hq5-9q2m\"\u003eEscape\nmulti-line filenames in list-files shell and csv output\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.0.3\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/279\"\u003eAdd\nmissing predicate-quantifier\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.0.2\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/224\"\u003eAdd\nconfig parameter for predicate quantifier\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.0.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/133\"\u003eCompare\nbase and ref when token is empty\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev3.0.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/210\"\u003eUpdate to\nNode.js 20\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/215\"\u003eUpdate\nall dependencies\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.11.1\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/167\"\u003eUpdate\n@​actions/core to v1.10.0 - Fixes warning about deprecated\nset-output\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/168\"\u003eDocument\nneed for pull-requests: read permission\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/164\"\u003eUpdating\nto actions/checkout@v3\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.11.0\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/157\"\u003eSet\nlist-files input parameter as not required\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/161\"\u003eUpdate\nNode.js\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/162\"\u003eFix\nincorrect handling of Unicode characters in exec()\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/163\"\u003eUse\nOctokit pagination\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/pull/160\"\u003eUpdates\nreal world links\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev2.10.2\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d\"\u003e\u003ccode\u003eceb8a2b\u003c/code\u003e\u003c/a\u003e\nUpdate CHANGELOG.md for v4.0.3 and v3.0.4 (\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/issues/327\"\u003e#327\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/ef09b88f3eacdbec6ce135a7c9a193a6849545c1\"\u003e\u003ccode\u003eef09b88\u003c/code\u003e\u003c/a\u003e\nDocument safe handling of file list outputs in workflows (\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/issues/326\"\u003e#326\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/44adc5b06dc135dba334efce9bf3cf0624512d2d\"\u003e\u003ccode\u003e44adc5b\u003c/code\u003e\u003c/a\u003e\nMerge commit from fork\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/4711b7a31b4aa89103d8c6ffab2e3b8e7b6381c7\"\u003e\u003ccode\u003e4711b7a\u003c/code\u003e\u003c/a\u003e\nfeat: add \u0027some-with-excludes\u0027 predicate quantifier (\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/issues/322\"\u003e#322\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/93c889f9e58fca66f35a0c83d8673ac7e88bb70a\"\u003e\u003ccode\u003e93c889f\u003c/code\u003e\u003c/a\u003e\nfix: escape multi-line filenames in list-files shell and csv output\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/b41dfa943b1939b9b646f67753bfe35cf6e4de03\"\u003e\u003ccode\u003eb41dfa9\u003c/code\u003e\u003c/a\u003e\ndocs: add contents permission to PR example (\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/issues/248\"\u003e#248\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/9af6e5a9d010d1ae8ec570390b3d793e2b70a402\"\u003e\u003ccode\u003e9af6e5a\u003c/code\u003e\u003c/a\u003e\nfix: scope base-ignored warning to API path (\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/issues/319\"\u003e#319\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/cae9006b65a1a53044b518c68e13e835c54948a7\"\u003e\u003ccode\u003ecae9006\u003c/code\u003e\u003c/a\u003e\ndocs: update outputs in readme to account for the \u0027every\u0027\npredicate-quantifie...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/7b450fff21473bca461d4b92ce414b9d0420d706\"\u003e\u003ccode\u003e7b450ff\u003c/code\u003e\u003c/a\u003e\ndocs: update changelog for v4.0.2 (\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/issues/318\"\u003e#318\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/commit/928037783a71f24983ea250c6e55290c1b2de54f\"\u003e\u003ccode\u003e9280377\u003c/code\u003e\u003c/a\u003e\nfix: work around git dubious ownership errors in container jobs (\u003ca\nhref\u003d\"https://redirect.github.com/dorny/paths-filter/issues/317\"\u003e#317\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/dorny/paths-filter/compare/fbd0ab8f3e69293af611ebaee6363fc25e6d187d...ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `crate-ci/typos` from 1.49.0 to 1.50.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/crate-ci/typos/releases\"\u003ecrate-ci/typos\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.50.1\u003c/h2\u003e\n\u003ch2\u003e[1.50.1] - 2026-09-01\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDon\u0027t correct \u003ccode\u003easend\u003c/code\u003e in Python code\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.50.0\u003c/h2\u003e\n\u003ch2\u003e[1.50.0] - 2026-08-28\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated the dictionary with the \u003ca\nhref\u003d\"https://redirect.github.com/crate-ci/typos/issues/1587\"\u003eAugust\n2026\u003c/a\u003e changes\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003ev1.49.1\u003c/h2\u003e\n\u003ch2\u003e[1.49.1] - 2026-08-27\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDon\u0027t correct the brand name \u003ccode\u003eHashiCorp\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/crate-ci/typos/blob/master/CHANGELOG.md\"\u003ecrate-ci/typos\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003e[1.50.1] - 2026-09-01\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDon\u0027t correct \u003ccode\u003easend\u003c/code\u003e in Python code\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.50.0] - 2026-08-28\u003c/h2\u003e\n\u003ch3\u003eFeatures\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated the dictionary with the \u003ca\nhref\u003d\"https://redirect.github.com/crate-ci/typos/issues/1587\"\u003eAugust\n2026\u003c/a\u003e changes\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e[1.49.1] - 2026-08-27\u003c/h2\u003e\n\u003ch3\u003eFixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eDon\u0027t correct the brand name \u003ccode\u003eHashiCorp\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/d43b6c087ac471e2ea7b8af622ff15f05c0c365b\"\u003e\u003ccode\u003ed43b6c0\u003c/code\u003e\u003c/a\u003e\nchore: Release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/84aa9630a9832cedb7be976b3a3e4e4cd9ad68e8\"\u003e\u003ccode\u003e84aa963\u003c/code\u003e\u003c/a\u003e\ndocs: Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/79e6746de5fb3fe58bb2d7a2128c22fd01e9e5e0\"\u003e\u003ccode\u003e79e6746\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/crate-ci/typos/issues/1608\"\u003e#1608\u003c/a\u003e\nfrom nightcityblade/fix/python-asend\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/aba69857f2fe31f16eb41990c92c0a3fa3244be1\"\u003e\u003ccode\u003eaba6985\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/crate-ci/typos/issues/1616\"\u003e#1616\u003c/a\u003e\nfrom crate-ci/renovate/clap-cargo-0.x\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/92ed824f4f7394e08eb031378ac49112ec496efd\"\u003e\u003ccode\u003e92ed824\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update compatible (\u003ca\nhref\u003d\"https://redirect.github.com/crate-ci/typos/issues/1615\"\u003e#1615\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/e575a6c8a0e161ad343c1b11e2bf6ee464fff115\"\u003e\u003ccode\u003ee575a6c\u003c/code\u003e\u003c/a\u003e\nchore(deps): Update Rust crate clap-cargo to 0.19.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/4d9c206a77c041268485162b8e2579ad7a5cb9a3\"\u003e\u003ccode\u003e4d9c206\u003c/code\u003e\u003c/a\u003e\nchore: Release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/67e851f0011378f3c32597df0225931cb6ee56a8\"\u003e\u003ccode\u003e67e851f\u003c/code\u003e\u003c/a\u003e\nchore: Release\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/fed981dab10d95fb6178e7f95e975713e5837c3b\"\u003e\u003ccode\u003efed981d\u003c/code\u003e\u003c/a\u003e\ndocs: Update changelog\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/crate-ci/typos/commit/30a35149762ce930813e3571c50908a7cd355587\"\u003e\u003ccode\u003e30a3514\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/crate-ci/typos/issues/1611\"\u003e#1611\u003c/a\u003e\nfrom epage/aug\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/crate-ci/typos/compare/v1.49.0...v1.50.1\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `actions/cache` from 5 to 6\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/cache/releases\"\u003eactions/cache\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev6.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate packages, migrate to ESM by \u003ca\nhref\u003d\"https://github.com/Samirat\"\u003e\u003ccode\u003e@​Samirat\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1760\"\u003eactions/cache#1760\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v6.0.0\"\u003ehttps://github.com/actions/cache/compare/v5...v6.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.1.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v5.1.0 - handle read-only cache\naccess by \u003ca\nhref\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1775\"\u003eactions/cache#1775\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v5.1.0\"\u003ehttps://github.com/actions/cache/compare/v5...v5.1.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.0.5\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate ts-http-runtime dependency by \u003ca\nhref\u003d\"https://github.com/yacaovsnc\"\u003e\u003ccode\u003e@​yacaovsnc\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1747\"\u003eactions/cache#1747\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v5.0.5\"\u003ehttps://github.com/actions/cache/compare/v5...v5.0.5\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.0.4\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd release instructions and update maintainer docs by \u003ca\nhref\u003d\"https://github.com/Link\"\u003e\u003ccode\u003e@​Link\u003c/code\u003e\u003c/a\u003e- in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1696\"\u003eactions/cache#1696\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePotential fix for code scanning alert no. 52: Workflow does not\ncontain permissions by \u003ca\nhref\u003d\"https://github.com/Link\"\u003e\u003ccode\u003e@​Link\u003c/code\u003e\u003c/a\u003e- in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1697\"\u003eactions/cache#1697\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix workflow permissions and cleanup workflow names / formatting by\n\u003ca href\u003d\"https://github.com/Link\"\u003e\u003ccode\u003e@​Link\u003c/code\u003e\u003c/a\u003e- in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1699\"\u003eactions/cache#1699\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003edocs: Update examples to use the latest version by \u003ca\nhref\u003d\"https://github.com/XZTDean\"\u003e\u003ccode\u003e@​XZTDean\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1690\"\u003eactions/cache#1690\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix proxy integration tests by \u003ca\nhref\u003d\"https://github.com/Link\"\u003e\u003ccode\u003e@​Link\u003c/code\u003e\u003c/a\u003e- in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1701\"\u003eactions/cache#1701\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix cache key in examples.md for bun.lock by \u003ca\nhref\u003d\"https://github.com/RyPeck\"\u003e\u003ccode\u003e@​RyPeck\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1722\"\u003eactions/cache#1722\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpdate dependencies \u0026amp; patch security vulnerabilities by \u003ca\nhref\u003d\"https://github.com/Link\"\u003e\u003ccode\u003e@​Link\u003c/code\u003e\u003c/a\u003e- in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1738\"\u003eactions/cache#1738\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/XZTDean\"\u003e\u003ccode\u003e@​XZTDean\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1690\"\u003eactions/cache#1690\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/RyPeck\"\u003e\u003ccode\u003e@​RyPeck\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/pull/1722\"\u003eactions/cache#1722\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v5.0.4\"\u003ehttps://github.com/actions/cache/compare/v5...v5.0.4\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev5.0.3\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v5.0.5 (Resolves: \u003ca\nhref\u003d\"https://github.com/actions/cache/security/dependabot/33\"\u003ehttps://github.com/actions/cache/security/dependabot/33\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/core\u003c/code\u003e to v2.0.3\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v5.0.3\"\u003ehttps://github.com/actions/cache/compare/v5...v5.0.3\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev.5.0.2\u003c/h2\u003e\n\u003ch1\u003ev5.0.2\u003c/h1\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/RELEASES.md\"\u003eactions/cache\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003eReleases\u003c/h1\u003e\n\u003ch2\u003eHow to prepare a release\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!NOTE]\nRelevant for maintainers with write access only.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003col\u003e\n\u003cli\u003eSwitch to a new branch from \u003ccode\u003emain\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003enpm test\u003c/code\u003e to ensure all tests are passing.\u003c/li\u003e\n\u003cli\u003eUpdate the version in \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/package.json\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/package.json\u003c/code\u003e\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003enpm run build\u003c/code\u003e to update the compiled files.\u003c/li\u003e\n\u003cli\u003eUpdate this \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/RELEASES.md\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/RELEASES.md\u003c/code\u003e\u003c/a\u003e\nwith the new version and changes in the \u003ccode\u003e## Changelog\u003c/code\u003e\nsection.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003elicensed cache\u003c/code\u003e to update the license report.\u003c/li\u003e\n\u003cli\u003eRun \u003ccode\u003elicensed status\u003c/code\u003e and resolve any warnings by\nupdating the \u003ca\nhref\u003d\"https://github.com/actions/cache/blob/main/.licensed.yml\"\u003e\u003ccode\u003ehttps://github.com/actions/cache/blob/main/.licensed.yml\u003c/code\u003e\u003c/a\u003e\nfile with the exceptions.\u003c/li\u003e\n\u003cli\u003eCommit your changes and push your branch upstream.\u003c/li\u003e\n\u003cli\u003eOpen a pull request against \u003ccode\u003emain\u003c/code\u003e and get it reviewed\nand merged.\u003c/li\u003e\n\u003cli\u003eDraft a new release \u003ca\nhref\u003d\"https://github.com/actions/cache/releases\"\u003ehttps://github.com/actions/cache/releases\u003c/a\u003e\nuse the same version number used in \u003ccode\u003epackage.json\u003c/code\u003e\n\u003col\u003e\n\u003cli\u003eCreate a new tag with the version number.\u003c/li\u003e\n\u003cli\u003eAuto generate release notes and update them to match the changes you\nmade in \u003ccode\u003eRELEASES.md\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eToggle the set as the latest release option.\u003c/li\u003e\n\u003cli\u003ePublish the release.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003cli\u003eNavigate to \u003ca\nhref\u003d\"https://github.com/actions/cache/actions/workflows/release-new-action-version.yml\"\u003ehttps://github.com/actions/cache/actions/workflows/release-new-action-version.yml\u003c/a\u003e\n\u003col\u003e\n\u003cli\u003eThere should be a workflow run queued with the same version\nnumber.\u003c/li\u003e\n\u003cli\u003eApprove the run to publish the new version and update the major tags\nfor this action.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2\u003eChangelog\u003c/h2\u003e\n\u003ch3\u003e6.1.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v6.1.0 to pick up \u003ca\nhref\u003d\"https://redirect.github.com/actions/toolkit/pull/2435\"\u003eactions/toolkit#2435\nHandle cache write error due to read-only token\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSwitch redundant \u0026quot;Cache save failed\u0026quot; warning to debug log\nin save-only\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e6.0.0\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdated \u003ccode\u003e@actions/cache\u003c/code\u003e to ^6.0.1,\n\u003ccode\u003e@actions/core\u003c/code\u003e to ^3.0.1, \u003ccode\u003e@actions/exec\u003c/code\u003e to\n^3.0.0, \u003ccode\u003e@actions/io\u003c/code\u003e to ^3.0.2\u003c/li\u003e\n\u003cli\u003eMigrated to ESM module system\u003c/li\u003e\n\u003cli\u003eUpgraded Jest to v30 and test infrastructure to be ESM\ncompatible\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.4\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003eminimatch\u003c/code\u003e to v3.1.5 (fixes ReDoS via globstar\npatterns)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003eundici\u003c/code\u003e to v6.24.1 (WebSocket decompression bomb\nprotection, header validation fixes)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003efast-xml-parser\u003c/code\u003e to v5.5.6\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.3\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/cache\u003c/code\u003e to v5.0.5 (Resolves: \u003ca\nhref\u003d\"https://github.com/actions/cache/security/dependabot/33\"\u003ehttps://github.com/actions/cache/security/dependabot/33\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eBump \u003ccode\u003e@actions/core\u003c/code\u003e to v2.0.3\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e5.0.2\u003c/h3\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/55cc8345863c7cc4c66a329aec7e433d2d1c52a9\"\u003e\u003ccode\u003e55cc834\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/issues/1768\"\u003e#1768\u003c/a\u003e\nfrom jasongin/readonly-cache\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/d8cd72f230726cdf4457ebb61ec1b593a8d12337\"\u003e\u003ccode\u003ed8cd72f\u003c/code\u003e\u003c/a\u003e\nBump \u003ccode\u003e@​actions/cache\u003c/code\u003e to v6.1.0 - handle cache write error\ndue to RO token\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/2c8a9bd7457de244a408f35966fab2fb45fda9c8\"\u003e\u003ccode\u003e2c8a9bd\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/cache/issues/1760\"\u003e#1760\u003c/a\u003e\nfrom actions/samirat/esm_migration_and_package_update\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e9b91fdc3fea7d79165fceb79042ef45c2d51023\"\u003e\u003ccode\u003ee9b91fd\u003c/code\u003e\u003c/a\u003e\nPrettier fixes\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e4884b8ff7f92ef6b52c79eda480bbc86e685adb\"\u003e\u003ccode\u003ee4884b8\u003c/code\u003e\u003c/a\u003e\nRebuild dist\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/10baf0191a3c426ea0fa4a3253a5c04233b6e18f\"\u003e\u003ccode\u003e10baf01\u003c/code\u003e\u003c/a\u003e\nFixed licenses\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/e39b386c9004d72a15d864ade8c0b3a702d47a37\"\u003e\u003ccode\u003ee39b386\u003c/code\u003e\u003c/a\u003e\nFix test mock return order\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/b6928203372a8571ff984c0c883ef3a1adfb0c06\"\u003e\u003ccode\u003eb692820\u003c/code\u003e\u003c/a\u003e\nPR feedback\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/60749128a44d25d3c520a489e576380cf00ff3f1\"\u003e\u003ccode\u003e6074912\u003c/code\u003e\u003c/a\u003e\nRebuild dist bundles as ESM to match type:module\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/cache/commit/5a912e8b4af820fa082a0e75cfd2c782f8fbfe0e\"\u003e\u003ccode\u003e5a912e8\u003c/code\u003e\u003c/a\u003e\nFix lint and jest issues\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/actions/cache/compare/v5...v6\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `actions/setup-python` from 6 to 7\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/setup-python/releases\"\u003eactions/setup-python\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev7.0.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eEnhancements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eMigrate to ESM and upgrade dependencies by \u003ca\nhref\u003d\"https://github.com/priyagupta108\"\u003e\u003ccode\u003e@​priyagupta108\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1330\"\u003eactions/setup-python#1330\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003ePin SHA commits and update docs with latest versions by \u003ca\nhref\u003d\"https://github.com/HarithaVattikuti\"\u003e\u003ccode\u003e@​HarithaVattikuti\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1338\"\u003eactions/setup-python#1338\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove the pip-install input by \u003ca\nhref\u003d\"https://github.com/gowridurgad\"\u003e\u003ccode\u003e@​gowridurgad\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1336\"\u003eactions/setup-python#1336\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eFix to Classify stderr warning messages as warnings instead of\nerrors in annotations by \u003ca\nhref\u003d\"https://github.com/lmvysakh\"\u003e\u003ccode\u003e@​lmvysakh\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1335\"\u003eactions/setup-python#1335\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eValidate and retry manifest fetch to prevent silent failures by \u003ca\nhref\u003d\"https://github.com/priyagupta108\"\u003e\u003ccode\u003e@​priyagupta108\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1332\"\u003eactions/setup-python#1332\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency Upgrade\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eBump certifi from 2020.6.20 to 2024.7.4 in\n/\u003cstrong\u003etests\u003c/strong\u003e/data by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1328\"\u003eactions/setup-python#1328\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eRemove EOL Python versions and Bumps numpy text fixture by \u003ca\nhref\u003d\"https://github.com/priya-kinthali\"\u003e\u003ccode\u003e@​priya-kinthali\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1333\"\u003eactions/setup-python#1333\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​actions/cache\u003c/code\u003e to 6.2.0 by \u003ca\nhref\u003d\"https://github.com/philip-gai\"\u003e\u003ccode\u003e@​philip-gai\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1337\"\u003eactions/setup-python#1337\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/lmvysakh\"\u003e\u003ccode\u003e@​lmvysakh\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1335\"\u003eactions/setup-python#1335\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/philip-gai\"\u003e\u003ccode\u003e@​philip-gai\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1337\"\u003eactions/setup-python#1337\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/setup-python/compare/v6...v7.0.0\"\u003ehttps://github.com/actions/setup-python/compare/v6...v7.0.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.3.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eEnhancement\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eAdd RHEL support and include Linux distro in cache keys by \u003ca\nhref\u003d\"https://github.com/priyagupta108\"\u003e\u003ccode\u003e@​priyagupta108\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1323\"\u003eactions/setup-python#1323\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFix pip cache error handling on Windows by \u003ca\nhref\u003d\"https://github.com/priyagupta108\"\u003e\u003ccode\u003e@​priyagupta108\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1040\"\u003eactions/setup-python#1040\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependency update\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade minimatch from 3.1.2 to 3.1.5 by \u003ca\nhref\u003d\"https://github.com/dependabot\"\u003e\u003ccode\u003e@​dependabot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1281\"\u003eactions/setup-python#1281\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade actions dependencies by \u003ca\nhref\u003d\"https://github.com/gowridurgad\"\u003e\u003ccode\u003e@​gowridurgad\u003c/code\u003e\u003c/a\u003e\nwith \u003ca href\u003d\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in\n\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1303\"\u003eactions/setup-python#1303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade \u003ccode\u003e@​actions/cache\u003c/code\u003e to 5.1.0, log cache write\ndenied by \u003ca\nhref\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1324\"\u003eactions/setup-python#1324\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eUpgrade dependency versions and test workflow configuration by \u003ca\nhref\u003d\"https://github.com/HarithaVattikuti\"\u003e\u003ccode\u003e@​HarithaVattikuti\u003c/code\u003e\u003c/a\u003e\nin \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1322\"\u003eactions/setup-python#1322\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpdate advanced-usage.md by \u003ca\nhref\u003d\"https://github.com/Dunky-Z\"\u003e\u003ccode\u003e@​Dunky-Z\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/811\"\u003eactions/setup-python#811\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/gowridurgad\"\u003e\u003ccode\u003e@​gowridurgad\u003c/code\u003e\u003c/a\u003e\nwith \u003ca href\u003d\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1303\"\u003eactions/setup-python#1303\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/jasongin\"\u003e\u003ccode\u003e@​jasongin\u003c/code\u003e\u003c/a\u003e\nmade their first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1324\"\u003eactions/setup-python#1324\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/Dunky-Z\"\u003e\u003ccode\u003e@​Dunky-Z\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/811\"\u003eactions/setup-python#811\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/setup-python/compare/v6.2.0...v6.3.0\"\u003ehttps://github.com/actions/setup-python/compare/v6.2.0...v6.3.0\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev6.2.0\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eDependency Upgrades\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade dependencies to Node 24 compatible versions by \u003ca\nhref\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/pull/1259\"\u003eactions/setup-python#1259\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c!-- raw HTML omitted --\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/5fda3b95a4ea91299a34e894583c3862153e4b97\"\u003e\u003ccode\u003e5fda3b9\u003c/code\u003e\u003c/a\u003e\nPin SHA commits and update docs with latest versions (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1338\"\u003e#1338\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/4ab7e95f05e168b4356aebde89dd84f59c283d8e\"\u003e\u003ccode\u003e4ab7e95\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1337\"\u003e#1337\u003c/a\u003e\nfrom actions/philip-gai/bump-actions-cache-6-2-0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/0f3a009f475dbea83c0371cd85d099690fee8c5c\"\u003e\u003ccode\u003e0f3a009\u003c/code\u003e\u003c/a\u003e\nRemove the pip-install input (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1336\"\u003e#1336\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/f8cf4291c8b8e273ddd26e569454615c7315d932\"\u003e\u003ccode\u003ef8cf429\u003c/code\u003e\u003c/a\u003e\nMigrate to ESM and upgrade dependencies (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1330\"\u003e#1330\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/54baeea5b34417d10a7479663a23cca53ea209b5\"\u003e\u003ccode\u003e54baeea\u003c/code\u003e\u003c/a\u003e\nValidate and retry manifest fetch to prevent silent failures (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1332\"\u003e#1332\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/c7092773a316760f4ecfe498e4af668a4dafeac5\"\u003e\u003ccode\u003ec709277\u003c/code\u003e\u003c/a\u003e\nAnnotation code fix (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1335\"\u003e#1335\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/6849080452e69b330395e8a6d23cf90f56d76a1a\"\u003e\u003ccode\u003e6849080\u003c/code\u003e\u003c/a\u003e\nremove EOL Python versions and Bumps numpy text fixture (\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1333\"\u003e#1333\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/setup-python/commit/0903b469fbf4441aadfe4f4b249dc5b1fba3a73e\"\u003e\u003ccode\u003e0903b46\u003c/code\u003e\u003c/a\u003e\nBump certifi from 2020.6.20 to 2024.7.4 in /\u003cstrong\u003etests\u003c/strong\u003e/data\n(\u003ca\nhref\u003d\"https://redirect.github.com/actions/setup-python/issues/1328\"\u003e#1328\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/actions/setup-python/compare/v6...v7\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `SonarSource/sonarqube-scan-action/install-build-wrapper` from\n8.2.0 to 8.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/sonarsource/sonarqube-scan-action/releases\"\u003eSonarSource/sonarqube-scan-action/install-build-wrapper\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eBug fix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://sonarsource.atlassian.net/browse/SQSCANGHA-156\"\u003eSQSCANGHA-156\u003c/a\u003e\nGPG signature verification fails when temporary directory path is too\nlong\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/SonarSource/sonarqube-scan-action/compare/v8.2.0...v8.2.1\"\u003ehttps://github.com/SonarSource/sonarqube-scan-action/compare/v8.2.0...v8.2.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/SonarSource/sonarqube-scan-action/commit/22918119ff8e1ca75a623e15c8296b6ea4fbe28f\"\u003e\u003ccode\u003e2291811\u003c/code\u003e\u003c/a\u003e\nSQSCANGHA-156 GPG signature verification fails when temporary directory\npath ...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/SonarSource/sonarqube-scan-action/commit/7cdc154593ec10cd3c019fceab40f415f9218437\"\u003e\u003ccode\u003e7cdc154\u003c/code\u003e\u003c/a\u003e\nSQSCANGHA-153 NO-JIRA Bump actions/checkout from 6.0.2 to 7.0.0 (\u003ca\nhref\u003d\"https://redirect.github.com/sonarsource/sonarqube-scan-action/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/SonarSource/sonarqube-scan-action/commit/45f27363d4ff7d6b16baa0516490f10c52bdd5fc\"\u003e\u003ccode\u003e45f2736\u003c/code\u003e\u003c/a\u003e\nSQSCANGHA-151 Change Code Owners (\u003ca\nhref\u003d\"https://redirect.github.com/sonarsource/sonarqube-scan-action/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/sonarsource/sonarqube-scan-action/compare/713881670b6b3676cda39549040e2d88c70d582e...22918119ff8e1ca75a623e15c8296b6ea4fbe28f\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `actions/github-script` from 8 to 9\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/actions/github-script/releases\"\u003eactions/github-script\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev9.0.0\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNew features:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003egetOctokit\u003c/code\u003e factory function\u003c/strong\u003e —\nAvailable directly in the script context. Create additional\nauthenticated Octokit clients with different tokens for multi-token\nworkflows, GitHub App tokens, and cross-org access. See \u003ca\nhref\u003d\"https://github.com/actions/github-script#creating-additional-clients-with-getoctokit\"\u003eCreating\nadditional clients with \u003ccode\u003egetOctokit\u003c/code\u003e\u003c/a\u003e for details and\nexamples.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eOrchestration ID in user-agent\u003c/strong\u003e — The\n\u003ccode\u003eACTIONS_ORCHESTRATION_ID\u003c/code\u003e environment variable is\nautomatically appended to the user-agent string for request\ntracing.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eBreaking changes:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003erequire(\u0027@actions/github\u0027)\u003c/code\u003e no longer works in\nscripts.\u003c/strong\u003e The upgrade to \u003ccode\u003e@actions/github\u003c/code\u003e v9\n(ESM-only) means \u003ccode\u003erequire(\u0027@actions/github\u0027)\u003c/code\u003e will fail at\nruntime. If you previously used patterns like \u003ccode\u003econst { getOctokit }\n\u003d require(\u0027@actions/github\u0027)\u003c/code\u003e to create secondary clients, use the\nnew injected \u003ccode\u003egetOctokit\u003c/code\u003e function instead — it\u0027s available\ndirectly in the script context with no imports needed.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003egetOctokit\u003c/code\u003e is now an injected function parameter.\nScripts that declare \u003ccode\u003econst getOctokit \u003d ...\u003c/code\u003e or \u003ccode\u003elet\ngetOctokit \u003d ...\u003c/code\u003e will get a \u003ccode\u003eSyntaxError\u003c/code\u003e because\nJavaScript does not allow \u003ccode\u003econst\u003c/code\u003e/\u003ccode\u003elet\u003c/code\u003e\nredeclaration of function parameters. Use the injected\n\u003ccode\u003egetOctokit\u003c/code\u003e directly, or use \u003ccode\u003evar getOctokit \u003d\n...\u003c/code\u003e if you need to redeclare it.\u003c/li\u003e\n\u003cli\u003eIf your script accesses other \u003ccode\u003e@actions/github\u003c/code\u003e internals\nbeyond the standard \u003ccode\u003egithub\u003c/code\u003e/\u003ccode\u003eoctokit\u003c/code\u003e client, you\nmay need to update those references for v9 compatibility.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdd ACTIONS_ORCHESTRATION_ID to user-agent string by \u003ca\nhref\u003d\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/github-script/pull/695\"\u003eactions/github-script#695\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eci: use deployment: false for integration test environments by \u003ca\nhref\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/github-script/pull/712\"\u003eactions/github-script#712\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003efeat!: add getOctokit to script context, upgrade\n\u003ccode\u003e@​actions/github\u003c/code\u003e v9, \u003ccode\u003e@​octokit/core\u003c/code\u003e v7, and\nrelated packages by \u003ca\nhref\u003d\"https://github.com/salmanmkc\"\u003e\u003ccode\u003e@​salmanmkc\u003c/code\u003e\u003c/a\u003e in \u003ca\nhref\u003d\"https://redirect.github.com/actions/github-script/pull/700\"\u003eactions/github-script#700\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eNew Contributors\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href\u003d\"https://github.com/Copilot\"\u003e\u003ccode\u003e@​Copilot\u003c/code\u003e\u003c/a\u003e made\ntheir first contribution in \u003ca\nhref\u003d\"https://redirect.github.com/actions/github-script/pull/695\"\u003eactions/github-script#695\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/actions/github-script/compare/v8.0.0...v9.0.0\"\u003ehttps://github.com/actions/github-script/compare/v8.0.0...v9.0.0\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/3a2844b7e9c422d3c10d287c895573f7108da1b3\"\u003e\u003ccode\u003e3a2844b\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/github-script/issues/700\"\u003e#700\u003c/a\u003e\nfrom actions/salmanmkc/expose-getoctokit + prepare re...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/ca10bbdd1a7739de09e99a200c7a59f5d73a4079\"\u003e\u003ccode\u003eca10bbd\u003c/code\u003e\u003c/a\u003e\nfix: use \u003ccode\u003e@​octokit/core/\u003c/code\u003etypes import for v7\ncompatibility\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/86e48e20ac85c970ed1f96e718fd068173948b7b\"\u003e\u003ccode\u003e86e48e2\u003c/code\u003e\u003c/a\u003e\nmerge: incorporate main branch changes\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/c1084728b5b935ec4ddc1e4cee877b01797b3ff9\"\u003e\u003ccode\u003ec108472\u003c/code\u003e\u003c/a\u003e\nchore: rebuild dist for v9 upgrade and getOctokit factory\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/afff112e4f8b57c718168af75b89ce00bc8d091d\"\u003e\u003ccode\u003eafff112\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/actions/github-script/issues/712\"\u003e#712\u003c/a\u003e\nfrom actions/salmanmkc/deployment-false + fix user-ag...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/ff8117e5b78c415f814f39ad6998f424fee7b817\"\u003e\u003ccode\u003eff8117e\u003c/code\u003e\u003c/a\u003e\nci: fix user-agent test to handle orchestration ID\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/81c6b7876079abe10ff715951c9fc7b3e1ab389d\"\u003e\u003ccode\u003e81c6b78\u003c/code\u003e\u003c/a\u003e\nci: use deployment: false to suppress deployment noise from integration\ntests\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/3953caf8858d318f37b6cc53a9f5708859b5a7b7\"\u003e\u003ccode\u003e3953caf\u003c/code\u003e\u003c/a\u003e\ndocs: update README examples from \u003ca\nhref\u003d\"https://github.com/v8\"\u003e\u003ccode\u003e@​v8\u003c/code\u003e\u003c/a\u003e to \u003ca\nhref\u003d\"https://github.com/v9\"\u003e\u003ccode\u003e@​v9\u003c/code\u003e\u003c/a\u003e, add getOctokit docs\nand v9 brea...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/c17d55b90dcdb3d554d0027a6c180a7adc2daf78\"\u003e\u003ccode\u003ec17d55b\u003c/code\u003e\u003c/a\u003e\nci: add getOctokit integration test job\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/actions/github-script/commit/a047196d9a02fe92098771cafbb98c2f1814e408\"\u003e\u003ccode\u003ea047196\u003c/code\u003e\u003c/a\u003e\ntest: add getOctokit integration tests via callAsyncFunction\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/actions/github-script/compare/v8...v9\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `SonarSource/sonarqube-scan-action` from 8.2.0 to 8.2.1\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/sonarsource/sonarqube-scan-action/releases\"\u003eSonarSource/sonarqube-scan-action\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev8.2.1\u003c/h2\u003e\n\u003ch2\u003eWhat\u0027s Changed\u003c/h2\u003e\n\u003ch3\u003eBug fix\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://sonarsource.atlassian.net/browse/SQSCANGHA-156\"\u003eSQSCANGHA-156\u003c/a\u003e\nGPG signature verification fails when temporary directory path is too\nlong\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eFull Changelog\u003c/strong\u003e: \u003ca\nhref\u003d\"https://github.com/SonarSource/sonarqube-scan-action/compare/v8.2.0...v8.2.1\"\u003ehttps://github.com/SonarSource/sonarqube-scan-action/compare/v8.2.0...v8.2.1\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/SonarSource/sonarqube-scan-action/commit/22918119ff8e1ca75a623e15c8296b6ea4fbe28f\"\u003e\u003ccode\u003e2291811\u003c/code\u003e\u003c/a\u003e\nSQSCANGHA-156 GPG signature verification fails when temporary directory\npath ...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/SonarSource/sonarqube-scan-action/commit/7cdc154593ec10cd3c019fceab40f415f9218437\"\u003e\u003ccode\u003e7cdc154\u003c/code\u003e\u003c/a\u003e\nSQSCANGHA-153 NO-JIRA Bump actions/checkout from 6.0.2 to 7.0.0 (\u003ca\nhref\u003d\"https://redirect.github.com/sonarsource/sonarqube-scan-action/issues/255\"\u003e#255\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/SonarSource/sonarqube-scan-action/commit/45f27363d4ff7d6b16baa0516490f10c52bdd5fc\"\u003e\u003ccode\u003e45f2736\u003c/code\u003e\u003c/a\u003e\nSQSCANGHA-151 Change Code Owners (\u003ca\nhref\u003d\"https://redirect.github.com/sonarsource/sonarqube-scan-action/issues/254\"\u003e#254\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/sonarsource/sonarqube-scan-action/compare/713881670b6b3676cda39549040e2d88c70d582e...22918119ff8e1ca75a623e15c8296b6ea4fbe28f\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore \u003cdependency name\u003e major version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s major version (unless you unignore this specific\ndependency\u0027s major version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e minor version` will close this\ngroup update PR and stop Dependabot creating any more for the specific\ndependency\u0027s minor version (unless you unignore this specific\ndependency\u0027s minor version or upgrade to it yourself)\n- `@dependabot ignore \u003cdependency name\u003e` will close this group update PR\nand stop Dependabot creating any more for the specific dependency\n(unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore \u003cdependency name\u003e` will remove all of the ignore\nconditions of the specified dependency\n- `@dependabot unignore \u003cdependency name\u003e \u003cignore condition\u003e` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "8f117097288490b21994b9c2ab00ddeae7ca85fe",
      "tree": "80849506ed35180431256712d8a603ff3dbf18d9",
      "parents": [
        "c61940a48fa2f77ddbdd3aa30c23567a7ea80062"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Thu Sep 10 15:50:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 07:50:31 2026 +0000"
      },
      "message": "ci: check GitHub Actions against ASF allowlist (#3612)\n\nFollows https://github.com/apache/asyncband/pull/178 to add ASF\nallowlist checks for GitHub Actions and configure weekly grouped\nDependabot updates with a four-day cooldown. Adapts the checks to\nKvrocks\u0027 `unstable` branch and both `.yml` and `.yaml` files.\n\nassisted-by: codex/gpt6"
    },
    {
      "commit": "c61940a48fa2f77ddbdd3aa30c23567a7ea80062",
      "tree": "8fa0b273f7bf9f0d7790b9600ef24d9a48e36408",
      "parents": [
        "7cf8e642274ad47a606859f4e3d940ffa1532c76"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Wed Sep 09 21:07:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 21:07:14 2026 +0800"
      },
      "message": "fix(ci): update nightly actions and INFO test (#3611)\n\nThere are two issues addressed in this PR:\n\n- Fix the Nightly workflow action revisions rejected by the ASF\nallowlist.\n- Remove the INFO test assertion requiring the server version to be\nexactly\n  \"unstable\", which fails on release versions."
    },
    {
      "commit": "7cf8e642274ad47a606859f4e3d940ffa1532c76",
      "tree": "6916f8571cfe73f850f34e7c0a7f786d70fe1b5c",
      "parents": [
        "5e79e7089b5b1bb56608a0f0331fbe760f5f2adf"
      ],
      "author": {
        "name": "weimeng",
        "email": "weim0000@163.com",
        "time": "Thu Sep 03 12:32:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 04:32:34 2026 +0000"
      },
      "message": "fix(server): add O_TRUNC when creating PID file to avoid stale content (#3598)\n\nWhat problem does this change solve?\n\nCreatePidFile opens the PID file with O_RDWR | O_CREAT but without\nO_TRUNC. If a stale PID file already exists from a previous run and the\nold PID string is longer than the new one, open() + write() will only\noverwrite the first N bytes of the file, leaving the trailing bytes from\nthe old content intact. This results in a corrupted PID file.\n\nExample:\nStep File content Note\nPrevious run (PID\u003d12345) 12345 correct\nNew run (PID\u003d678), without O_TRUNC 67845 corrupted — trailing 45 is\nstale\nNew run (PID\u003d678), with O_TRUNC            678                 correct\n\nA corrupted PID file can cause process management tools (e.g., kill\n$(cat pidfile), systemd, init scripts) to target the wrong process or\nfail to stop/restart the service.\n\nHow does this change fix the problem?\n\nAdd O_TRUNC to the open() flags in CreatePidFile so the file is\ntruncated to zero length before writing the new PID, ensuring no stale\nbytes remain.\n\nChanges\n\n- src/cli/pid_util.h: Add O_TRUNC flag to the open() call in\nCreatePidFile.\n- tests/cppunit/pid_util_test.cc: Add unit tests covering:\n- - Truncation on existing file: Write a longer fake PID first, then\ncall CreatePidFile and verify the content matches exactly the current\nPID with no leftover bytes.\n- - Creation from scratch: Verify CreatePidFile works correctly when no\nfile exists.\n- - RemovePidFile: Verify the PID file is properly removed.\n\n---------\n\nCo-authored-by: weimeng \u003cweimeng@didiglobal.com\u003e\nCo-authored-by: Twice \u003ctwice.mliu@gmail.com\u003e\nCo-authored-by: hulk \u003chulk.website@gmail.com\u003e"
    },
    {
      "commit": "5e79e7089b5b1bb56608a0f0331fbe760f5f2adf",
      "tree": "4436ecaea69a9c13f72deb0666d7cb82be8ea660",
      "parents": [
        "752a0aed0be989cda03f100805266a98a79455c6"
      ],
      "author": {
        "name": "Raghav",
        "email": "raghavawasthi2005@gmail.com",
        "time": "Wed Sep 02 13:45:07 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 12:45:07 2026 +0000"
      },
      "message": "fix(set): return scalar for SRANDMEMBER without count (#3601)\n\n## Summary\n\n- return a Redis-compatible bulk string for `SRANDMEMBER key`\n- return nil for a missing key when count is omitted\n- return a Redis-compatible array for `SRANDMEMBER key count` in both\nRESP2 and RESP3, including negative counts that may contain duplicates\n- add regression coverage for scalar, counted, missing-key, and raw\nRESP3 reply types\n\nCloses #2610.\n\n## Testing\n\n- `./x.py build build-docker --unittest --ninja -j 4`\n- `./x.py check format`\n- `./x.py check tidy build-docker -j 4`\n- `./x.py check golangci-lint`\n- `./x.py test go build-docker`\n- `/workspace/build-docker/unittest` (623 passed, 1 skipped)\n- `/workspace/build-docker/unittest\n--gtest_filter\u003dRedisSetTest.TakeWithoutPop`\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\nCo-authored-by: hulk \u003chulk.website@gmail.com\u003e"
    },
    {
      "commit": "752a0aed0be989cda03f100805266a98a79455c6",
      "tree": "ffb1f9aa8634310caf08d380e30e4cd1d6b7abe2",
      "parents": [
        "1418e23da766cbe9d72b03bebc52d0152f1cf0bd"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Wed Sep 02 03:54:42 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 08:54:42 2026 +0800"
      },
      "message": "chore(ci): bump skywalking-eyes actions to 0.9.0 (#3604)\n\nBump skywalking-eyes actions to 0.9.0 (see:\nhttps://github.com/apache/skywalking-eyes/releases/tag/v0.9.0)\n\nChanges:\n\n- check headers concurrently\n- bug fixes"
    },
    {
      "commit": "1418e23da766cbe9d72b03bebc52d0152f1cf0bd",
      "tree": "84147bffa204a47bc9660447e21b2a570acd0c72",
      "parents": [
        "a4febb5edb47fd877f88d1951b94e7f640f1149b"
      ],
      "author": {
        "name": "Aether",
        "email": "98370028+Aetherance@users.noreply.github.com",
        "time": "Fri Aug 28 15:52:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 07:52:42 2026 +0000"
      },
      "message": "feat(keyspace): emit set and del notifications (#3541)\n\nImplement initial keyspace notifications for set and del events,\ncompatible with Redis notify-keyspace-events.\n\nThis PR adds the initial notification emitters and configuration\nsupport:\n- Support `K`, `E`, `g`, `$`, and `A` flags, where `A` currently expands\nto the implemented event classes `g$`.\n- Emit `set` notifications only when the shared `Set` path actually\napplies a write, including conditional `SET` variants.\n- Emit `del` notifications only for keys that are actually deleted\nthrough the shared delete path.\n- Deduplicate repeated keys in a single delete operation, so the same\nkey is deleted and notified once.\n- Queue notifications inside `MULTI/EXEC` and publish them after a\nsuccessful commit.\n  - Map notification DB names correctly:\n    - default namespace uses DB `0`\n    - `redis-databases` namespaces map back to Redis DB indexes\n\nThis PR only adds the initial set and del event paths on primary nodes,\nkeeping the initial patch small and reviewable. Commands sharing the\nsame underlying mutation APIs may also produce these events.\nReplica-side notifications and additional event types, if supported, can\nbe added in follow-up PRs.\n\nUnsupported notification classes are rejected for now until their\nemitters are implemented.\n\n  Ref Proposal: #3533\n  Tracking Issue: #2915\n  \n  Assisted by Codex/GPT-5.5.\n\n---------\n\nCo-authored-by: hulk \u003chulk.website@gmail.com\u003e\nCo-authored-by: Aleks Lozovyuk \u003caleks.raiden@gmail.com\u003e"
    },
    {
      "commit": "a4febb5edb47fd877f88d1951b94e7f640f1149b",
      "tree": "1ce929cc776d8030f34753b732793b28b5584661",
      "parents": [
        "df6c98ec0ac8c458abd181ab747c816999c83849"
      ],
      "author": {
        "name": "DanFaudemer",
        "email": "dan.faudemer@gmail.com",
        "time": "Wed Aug 26 05:05:07 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 03:05:07 2026 +0000"
      },
      "message": "fix(comptaction): use int64_t for parsing total_keys and deleted_keys (#3599)\n\n# Summary \n\nWhen the number of total keys is above 2^31 the following error is\npresent in the logs\n\n```\n[E][compaction_checker.cc:87] [compaction checker] Parse total_keys error: out of range of integer type\n``` \n\nParsing as `int64_t` match `total_keys` and `deleted_keys` type."
    },
    {
      "commit": "df6c98ec0ac8c458abd181ab747c816999c83849",
      "tree": "df065e2bdbe0cd0b395c164f5e65d9512c3cbd98",
      "parents": [
        "15e047ee129b4363204382ebb04a7214bdee417d"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Fri Aug 21 16:42:23 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 21:42:23 2026 +0800"
      },
      "message": "chore(ci): bump golangci-lint to 2.13.0 (#3597)\n\nBump golangci-lint to 2.13.0 (see:\nhttps://golangci-lint.run/docs/product/changelog/#2130)\n\n- go1.27 support\n- Bugs fix\n- Update linters"
    },
    {
      "commit": "15e047ee129b4363204382ebb04a7214bdee417d",
      "tree": "0a407620ffb193bfa35b425cc570446be16cf43a",
      "parents": [
        "d3965fcc5066229be4e0b7725623b741a1f18e64"
      ],
      "author": {
        "name": "Alexander Bocharoff",
        "email": "bocharov.alexandr@gmail.com",
        "time": "Tue Aug 18 03:58:28 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 18:58:28 2026 +0800"
      },
      "message": "perf(stream): trim with a single DeleteRange instead of per-entry Delete (#3592)\n\n### Problem\n\n`Stream::trim()` — the shared path behind `XTRIM` and `XADD` with\n`MAXLEN`/`MINID` — removes trimmed entries one at a time: a per-entry\n`WriteBatch::Delete()` in a loop, committed as a single atomic batch.\nThis makes trimming **O(entries removed)**:\n\n- Removing a large number of entries builds a correspondingly large\nwrite batch of point tombstones and commits it in one atomic write.\n- Those point tombstones are then scanned one-by-one by every reader,\nand re-scanned by each subsequent trim\u0027s `Seek`.\n\nFor a stream that is trimmed continuously (each trim removes many\nentries), this is expensive both on the write and on subsequent\nreads/trims.\n\n### Change\n\nReplace the per-entry `Delete()` loop with a single\n`WriteBatch::DeleteRange()` over the trimmed span — the same approach\nalready used for bulk deletion in `DestroyGroup()`.\n\n- The entries are still scanned to count them, so `metadata` (`size`,\n`first_entry_id`, `max_deleted_entry_id`) is maintained exactly as\nbefore and `XLEN` stays exact. Only the deletion mechanism changes: the\nwrite batch stays O(1) (one range tombstone) instead of O(entries\nremoved).\n- Group, consumer and PEL subkeys are encoded with a `UINT64_MAX` prefix\nand sort after every entry key, so they always stay outside the deleted\nrange. The exclusive upper bound is the first surviving entry for a\npartial trim, or the next-version prefix when the whole stream is\ntrimmed.\n\n### Tests\n\nAdds cases for the behaviour specific to the range delete, alongside the\nexisting trim suite:\n\n- consumer group + PEL survival across a full-entry trim,\n- entries added after a trim-to-empty remaining visible (range-tombstone\nsequence-number semantics),\n- repeated `MINID` trims interleaved with adds keeping exact survivors\nand first/max-deleted bookkeeping.\n\n---------\n\nCo-authored-by: hulk \u003chulk.website@gmail.com\u003e"
    },
    {
      "commit": "d3965fcc5066229be4e0b7725623b741a1f18e64",
      "tree": "dd093a4637ebaa07eafbc354689daf052565a01e",
      "parents": [
        "7dbec8481d6749579830f688e5af5e9ed93eff6d"
      ],
      "author": {
        "name": "Edward Xu",
        "email": "xuxiangad@gmail.com",
        "time": "Tue Aug 18 10:43:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 10:43:58 2026 +0800"
      },
      "message": "feat(tdigest): implement `tdigest.cdf` command (#3551)\n\n# Issue\n\nClose #2807\n\n# Proposed Changes\n\n- Implement `tdigest.cdf` command\n- Add unit tests and integration tests\n\n---------\n\nCo-authored-by: Anirudh Lakhanpal \u003canirudhlakhanpal123@gmail.com\u003e"
    },
    {
      "commit": "7dbec8481d6749579830f688e5af5e9ed93eff6d",
      "tree": "0fa590091a294ab11fcb496ef5f5cbe06b6c6fef",
      "parents": [
        "380ebd11c46cf68cb2980c2a04d592c40e3506f5"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Wed Aug 12 17:39:11 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 22:39:11 2026 +0800"
      },
      "message": "chore(ci): bump setup-go action from v6 to v7 (#3590)\n\nUpgrade setup-go action from v6 to v7 (see:\nhttps://github.com/actions/setup-go/releases/tag/v7.0.0)"
    },
    {
      "commit": "380ebd11c46cf68cb2980c2a04d592c40e3506f5",
      "tree": "5f5a542175788585cd35bea8fa1b8333c318247c",
      "parents": [
        "4f0b224abadf0482708c54f12197cf8c0d5aa71b"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Wed Aug 12 09:45:02 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 06:45:02 2026 +0000"
      },
      "message": "chore(deps): bump google test to v1.18.0 (#3582)\n\nBump google test to v1.18.0 (see:\nhttps://github.com/google/googletest/releases/tag/v1.18.0)\n\n- GoogleTest now requires at least C++17 and follows Google\u0027s\nFoundational C++ Support Policy\n- Set GTEST_INTERNAL_HAS_STRING_VIEW \u003d 1\n- Many bug fixes"
    },
    {
      "commit": "4f0b224abadf0482708c54f12197cf8c0d5aa71b",
      "tree": "222b42ddfffadee91f985a362cc7bd6f5c7be99c",
      "parents": [
        "944473131863862f5220f7d80587865b57eb77af"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Wed Aug 12 05:19:44 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 12 02:19:44 2026 +0000"
      },
      "message": "chore(deps): bump rocksdb to v11.8.1 (#3585)\n\nUpdated RocksDB version to v11.8.1 (see:\nhttps://github.com/facebook/rocksdb/releases/tag/v11.8.1)\n\n**Key changes**\n\n- Lot of bug fixes\n- Performance Improvements\n- Wide-column entities with blob-backed columns now use a new V2 on-disk\nencoding\n- Added experimental DBOptions::fast_sst_open option\n- Added read-triggered compaction. A new DB option\nmax_compaction_trigger_wakeup_seconds (default 43200s / 12 hours)\ncontrols the maximum interval for periodic compaction score\nre-evaluation, which is necessary for this feature to work on quiet\n(no-write) databases\n- Read-only open with error_if_wal_file_exists\u003dtrue now tolerates empty\nWAL files so empty precreated WALs do not prevent inspection\n- Add experimental DB option async_wal_precreate to precreate the next\nWAL file in a background thread and reduce foreground WAL rotation\nlatency\n- Add reuse_manifest_on_open DBOption (default false). When enabled,\nDB::Open reuses the existing MANIFEST file for append instead of\ncreating a fresh one, avoiding the cost of serializing the entire\ndatabase state into a new MANIFEST on the first post-open write\n- Disable parallel compression (ignore\nCompressionOptions::parallel_threads) for fast built-in compressors:\nSnappy, LZ4 (accelerated, not LZ4HC), and accelerated levels of ZSTD\n(level \u003c 0)\n- The default compression for column families is now kLZ4Compression\nrather than kSnappyCompression. This affects only column families that\ndo not explicitly set compression, and only newly-written SST files. The\nchange is fully compatible: existing data remains readable with no\nmigration needed, as RocksDB selects the decompressor per block. LZ4\noffers slightly better compression ratios and decompression CPU\nefficiency vs. Snappy and similar compression CPU, tested across various\nserver CPUs. When support is not compiled in, the fallback path for\ndefault compression is LZ4 -\u003e Snappy -\u003e NoCompression.\n- Added DBOptions::use_direct_io_for_compaction_reads (default false).\n- Expanded the C API (include/rocksdb/c.h) with a large set of new\nrocksdb_* functions, mostly option getters/setters plus\ntable-properties, job/event-listener, and metadata accessors, a WAL\nfilter, a ReadOptions table filter, and a backup exclude-files callback.\n- Add callback-based asynchronous read APIs, DB::GetAsync() and\nDB::MultiGetAsync(). The idea is that when IO is required, RocksDB can\nsuspend its internal coroutine read path, allowing the read executor\nthread to do other work"
    },
    {
      "commit": "944473131863862f5220f7d80587865b57eb77af",
      "tree": "7fbf8a46426d4fe3eea8c46ec9aacce789ddb716",
      "parents": [
        "29c2c4b8cfe5e557018453c0b186d8b13ced2839"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Wed Aug 12 00:19:57 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 21:19:57 2026 +0000"
      },
      "message": "chore(deps): bump jsoncons to v1.9.0 (#3583)\n\nBump jsoncons to v1.9.0 (see:\nhttps://github.com/danielaparker/jsoncons/releases/tag/v1.9.0)\n\n- Fixed bugs\n- Some changes at CBOR support"
    },
    {
      "commit": "29c2c4b8cfe5e557018453c0b186d8b13ced2839",
      "tree": "3ac0a65ddc1bd981b768a512171676902f0f22ab",
      "parents": [
        "ced70e0080cc00aafdcb7d22f7034ac5a24f79e9"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Tue Aug 11 21:35:48 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 18:35:48 2026 +0000"
      },
      "message": "chore(ci): bump docker/login CI actions to v4.6.0 (#3587)\n\nBump docker/login CI actions to v4.6.0 (see:\nhttps://github.com/docker/login-action/releases/tag/v4.6.0)"
    },
    {
      "commit": "ced70e0080cc00aafdcb7d22f7034ac5a24f79e9",
      "tree": "490a472a6f3c69d853c845654b219647a469b2d8",
      "parents": [
        "3c1ac18172777cef83bbd6d287c1d28fd4231fba"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Tue Aug 11 19:06:44 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 16:06:44 2026 +0000"
      },
      "message": "chore(ci): bump typos action to v1.49.0 (#3586)\n\nBump typos action to v1.49.0 (see:\nhttps://github.com/crate-ci/typos/releases/tag/v1.49.0)"
    },
    {
      "commit": "3c1ac18172777cef83bbd6d287c1d28fd4231fba",
      "tree": "275fca0acbd5266513aaec67542162ee7fe5a226",
      "parents": [
        "50cd1f0da4c3eb8f8c86bad080410e556f18fc98"
      ],
      "author": {
        "name": "shitao",
        "email": "wengsht.sysu@gmail.com",
        "time": "Tue Aug 11 00:52:47 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 15:52:47 2026 +0800"
      },
      "message": "fix(stream): decrement pending_number when XAUTOCLAIM removes deleted PEL entries (#3578)\n\nThe group\u0027s and the owning consumer\u0027s `pending_number` can be serialized\nas a RESP integer larger than `INT64_MAX`, which breaks any client that\ndecodes integer replies as signed 64-bit — the reply fails to parse and\nthe connection is dropped. Hit in production.\n\n## XAUTOCLAIM `pending_number` drift\n\nWhen XAUTOCLAIM meets a PEL entry whose stream entry was trimmed or\nXDEL\u0027d, it deletes the PEL entry but never decrements the group\u0027s or the\nowning consumer\u0027s `pending_number`. The counts drift upward on every\nsuch sweep and, being unsigned, eventually underflow-wrap on a later\ndecrement — after which `XINFO GROUPS` and `XPENDING` report garbage.\n\nThe fix mirrors `DeletePelEntries` (XACK): when a deleted entry is\nremoved from the PEL, decrement the owning consumer and the group. A\nclaim only moves ownership within the group (net-zero for the group\ncount), so only deleted entries reduce it. Subtractions are saturating\nso a counter that has already drifted can\u0027t wrap.\n\nTest: read entries into a consumer, XDEL them, XAUTOCLAIM, then check\nthe group and consumer pending counts return to 0. The existing XDEL\nautoclaim tests only asserted the returned deleted-id list.\n\n\u003e This PR previously also carried an `XINFO GROUPS` lag-underflow fix.\nPer review it is a separate issue (SRP + clean cherry-pick), so I\u0027ve\ndropped it here and will open a follow-up PR.\n\n---\nAI assistance: diagnosis and drafting were done with AI help; I\u0027ve\nreviewed the changes and tests and understand the behavior.\n\n---------\n\nSigned-off-by: Shitao Weng \u003cshitao@tbean.ai\u003e\nCo-authored-by: Edward Xu \u003cxuxiangad@gmail.com\u003e"
    },
    {
      "commit": "50cd1f0da4c3eb8f8c86bad080410e556f18fc98",
      "tree": "13f976106e3dab31f90ddbae5ce660479be3436c",
      "parents": [
        "e82ed585c3f4a2c9d84f265dc58198236f2be496"
      ],
      "author": {
        "name": "XYenon",
        "email": "i@xyenon.bid",
        "time": "Sun Aug 09 13:06:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 09 05:06:10 2026 +0000"
      },
      "message": "fix(json): use bytes sink for CBOR encoding (#3580)\n\n## Why\n\n`string_sink\u003cstd::string\u003e` is incompatible with jsoncons 1.9.0 because\nthe CBOR encoder appends buffers through `const uint8_t *`, while\n`string_sink\u003cstd::string\u003e` expects `const char *`.\n\nUse `bytes_sink\u003cstd::string\u003e`, which is intended for binary output and\nis also used by jsoncons\u0027 `encode_cbor` implementation. It is compatible\nwith jsoncons 1.8.1 and 1.9.0 and produces the same serialized CBOR\noutput.\n\nRelated downstream update: https://github.com/NixOS/nixpkgs/pull/550324\n\n## Validation\n\n- `./x.py build build-pr --ninja --unittest -j 8`\n- `./x.py test cpp build-pr` — 600 passed, 1 skipped\n- `./x.py test go build-pr -run \u0027TestJson/JSON_storage_format_CBOR\u0027\n-count\u003d1`\n- `./x.py check format --clang-format-path clang-format-18`\n- `./x.py check tidy build-pr -j 8 --clang-tidy-path clang-tidy-18\n--run-clang-tidy-path run-clang-tidy-18`\n- `./x.py check golangci-lint`\n- `git diff --check`\n\nPrepared with assistance from Amp for investigating jsoncons API\ncompatibility, preparing the focused change, and running local\nvalidation."
    },
    {
      "commit": "e82ed585c3f4a2c9d84f265dc58198236f2be496",
      "tree": "4fd369d6ce68b6363e7d783ceb7ccff32ae528bc",
      "parents": [
        "4729a71b470da5236c384a7266946d786d38268b"
      ],
      "author": {
        "name": "纪华裕",
        "email": "jihuayu123@gmail.com",
        "time": "Tue Aug 04 20:18:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 20:18:04 2026 +0800"
      },
      "message": "chore(ci): remind new contributors about AI-assisted guidelines  (#3566)\n\nSince many contributors do not proactively read our AI-assisted\ncontribution guidelines, I added a GitHub Action that automatically\nposts the following message when a new pull request is opened by **a\ncontributor who has had no pull requests merged in the past year**:\n\n```text\nHi @author,\n\nThank you for your pull request. Please review our [Contributing Guide](...).\n\nPlease make sure you understand your changes and explain your reasoning in this pull request. Low-quality pull requests may be closed.\n```\n\nThis feature eliminates the need to manually remind contributors to read\nthe AI-assisted contribution guidelines.\n\n**I’d also appreciate hearing everyone’s thoughts on the wording of this\nmessage.**\n\nThis PR was written using Cursor and Grok 4.5.\n\n---------\n\nCo-authored-by: Cursor Agent \u003ccursoragent@cursor.com\u003e"
    },
    {
      "commit": "4729a71b470da5236c384a7266946d786d38268b",
      "tree": "a89cbd8cbaa2807d72dd69160f030ad8dd9fff14",
      "parents": [
        "b0f3dd49b02f5e64488f19c973b9bcde0c0bdb66"
      ],
      "author": {
        "name": "nhancdt2602",
        "email": "55862577+nhancdt2602@users.noreply.github.com",
        "time": "Mon Aug 03 19:02:17 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 12:02:17 2026 +0000"
      },
      "message": "fix(test): treat ECONNRESET as graceful in SimpleTCPProxy (#3574)\n\nFixes #3515.\n\nThis treats ECONNRESET the same as io.EOF in SimpleTCPProxy\u0027s copy loop\nas both are expected outcomes of an intentional teardown."
    },
    {
      "commit": "b0f3dd49b02f5e64488f19c973b9bcde0c0bdb66",
      "tree": "2c22c6a1e16b02e502e51977b071e6204dc91011",
      "parents": [
        "bae3ba7a356779a0af1798903aa0a0377b861b7e"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Sat Aug 01 13:32:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 01 13:32:22 2026 +0800"
      },
      "message": "fix(command): require admin permission for privileged commands (#3570)\n\nDEBUG, FLUSHMEMTABLE, FLUSHBLOCKCACHE, and _db_name operate on global\nor cross-namespace state (the shared block cache, all column families,\nthe process-wide db-size-limit flag, and the configured db name), yet\ntheir command attributes omitted the `admin` flag. A non-admin client\nauthenticated with a namespace token could invoke them and affect\nevery namespace on the server.\n\nAdd the `admin` flag so these commands are rejected for non-admin\nconnections, matching Redis (which gates DEBUG behind admin) and\ncompleting the hardening started for APPLYBATCH in #3458.\n\nThis is a breaking change from the user side: clients authenticated\nwith a namespace token can no longer run these commands, so we should\nhighlight it in the release notes.\n\nAssistant-By Claude Opus 4.8"
    },
    {
      "commit": "bae3ba7a356779a0af1798903aa0a0377b861b7e",
      "tree": "edef610638e1349958b8c53e79b16258dbe39e56",
      "parents": [
        "fcc54dc6c54ad784f45243076d3f7b0dd6702593"
      ],
      "author": {
        "name": "advisedy",
        "email": "advisedy@qq.com",
        "time": "Thu Jul 30 14:00:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 14:00:48 2026 +0800"
      },
      "message": "perf(search): share a thread-local RNG for HNSW and drop seed (#2398) (#3562)\n\nFixes #2398."
    },
    {
      "commit": "fcc54dc6c54ad784f45243076d3f7b0dd6702593",
      "tree": "5f1ace836cc8e7c47581a3c034a691352c1aac16",
      "parents": [
        "1512515ff72ffbfc3311cf650c3900e9f46c947d"
      ],
      "author": {
        "name": "maoyouaa",
        "email": "136690485+maoyouaa@users.noreply.github.com",
        "time": "Fri Jul 24 00:25:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 00:25:25 2026 +0800"
      },
      "message": "chore(devcontainer): update toolchain to project requirements (#3563)\n\n## What changed\n\n- switch the development container base image from Ubuntu Noble to\nUbuntu Resolute\n- use Resolute\u0027s packaged Go toolchain\n- install Clang Format/Tidy 18 and expose their unversioned commands to\nmatch CI\n\n## Why\n\nThe existing development container no longer matches the repository\nrequirements. Ubuntu Noble provides Go 1.22 while the Go test module\nrequires Go 1.25, and the container pins Clang Format/Tidy 14 while\n`x.py` requires version 18 or newer.\n\n## Impact\n\nFresh development containers provide the required Go and LLVM tooling,\nand the default format and tidy commands work without additional path\narguments.\n\n## Validation\n\n- full `docker build` of `.devcontainer/Dockerfile`\n- tool smoke check: Go 1.26.0, GCC 15.2.0, Clang Format/Tidy 18.1.8, and\nminica\n- `./x.py build build --unittest --ninja -j 12`\n- `./x.py test cpp build` (600 passed, 1 skipped)\n- `./x.py test go build -run TestPing`\n- `./x.py format`\n- `./x.py check format`\n- `./x.py check tidy build -j 12`\n- `git diff --check`\n\nPrepared with assistance from OpenAI Codex and verified locally."
    },
    {
      "commit": "1512515ff72ffbfc3311cf650c3900e9f46c947d",
      "tree": "daa107839e287d8928ed30474288077b9125e890",
      "parents": [
        "dd75ac8e57c2d1ee65863c003838fe8ab2e03489"
      ],
      "author": {
        "name": "Ishita Tyagi",
        "email": "ishita03012005@gmail.com",
        "time": "Mon Jul 20 18:37:12 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 13:07:12 2026 +0000"
      },
      "message": "perf(test): poll is_compacting instead of a fixed sleep in replication test (#3561)\n\n### What this does\n\n`TestReplicationShareCheckpoint` runs `COMPACT` and then blindly\n`time.Sleep(time.Second)` before starting the replicas. That is slower\nthan necessary and potentially flaky — on a loaded CI runner one second\nmay not be enough for the manual compaction to finish, so the test can\nproceed while compaction is still running.\n\nThis replaces the fixed sleep with the same `is_compacting` poll already\nused elsewhere in the same file (`TestReplicationWithHole`), returning\nas\nsoon as compaction completes:\n\n```go\nrequire.Eventually(t, func() bool {\n    return util.FindInfoEntry(masterClient, \"is_compacting\") \u003d\u003d \"no\"\n}, 10*time.Second, 100*time.Millisecond)\n```\n\n### Related\n\nPart of #3524, addresses #3527.\n\n### Note on testing\n\nI was not able to run the full Go integration suite locally for this\nchange; it mirrors an existing, already-tested pattern in the same file\nrather than introducing new behavior. Happy to adjust if maintainers\nprefer a different approach.\n\nCo-authored-by: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "dd75ac8e57c2d1ee65863c003838fe8ab2e03489",
      "tree": "cfe3f844db039383e2ff5dbdb0f11a8f69f65f71",
      "parents": [
        "aa907d860d549a0de60b01677c210a04ec7edcdd"
      ],
      "author": {
        "name": "Reilly.tang",
        "email": "tang.ruilin@foxmail.com",
        "time": "Mon Jul 20 19:31:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 11:31:27 2026 +0000"
      },
      "message": "perf(tests): shorten list blocking timeout cases (#3539)\n\nfix #3529 \n\nAssisted-by: Codex/GPT-5\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "aa907d860d549a0de60b01677c210a04ec7edcdd",
      "tree": "929b6a67bb34fcc42ba0521f4c496a2995d94b8c",
      "parents": [
        "4d7c1a6c75b1eda28b976c8276b1237824c26e90"
      ],
      "author": {
        "name": "advisedy",
        "email": "advisedy@qq.com",
        "time": "Mon Jul 20 13:43:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 05:43:48 2026 +0000"
      },
      "message": "fix(replication): prevent full-sync checkpoint race with cron purge (#3559)\n\nFixes #3100\n\n## Problem\n\nTSan reported an oversized allocation:\n\n```\nThreadSanitizer: requested allocation size 0x100000000000000\nexceeds maximum supported size of 0x10000000000\n```\n\nRoot cause:\n\nBefore the fix, `GetFullReplDataInfo` released the lock before calling\n`GetChildren`, while `Server::cron` called `rocksdb::DestroyDB` on the\nlive checkpoint directory without holding the lock at all. This allowed\nthe following interleaving:\n\n```\nmeta:  unlock checkpoint_mu_\npurge: DestroyDB starts deleting files\nmeta:  GetChildren → [] (dir exists but files are already gone)\n```\n\n`GetFullReplDataInfo` builds the file list by appending entries and then\ncalls `files-\u003epop_back()`. If the directory is empty, `files` is an\nempty string, and `pop_back` on an empty string is undefined behavior.\n(https://en.cppreference.com/cpp/string/basic_string/pop_back)\n\nOn libstdc++, the common manifestation is a size underflow that produces\na very large number. The subsequent `files + CRLF` then allocates memory\nbased on this corrupted size, triggering the TSan error.\n\neaxmple:\n\n```cpp\n#include \u003ccstdio\u003e\n#include \u003cstring\u003e\n\nint main() {\n  std::string files;\n  files.pop_back();\n  auto s \u003d files + \"\\r\\n\";\n  printf(\"size\u003d%zu\\n\", files.size());\n  return 0;\n}\n```\n\nRunning with GCC 11 + ASan on Linux:\n\n```\nAddressSanitizer: requested allocation size 0x100000000000000\n(0x100000000001000 after adjustments for alignment, red zones etc.)\nexceeds maximum supported size of 0x10000000000 (thread T0)\n    #0 0x7ffffee8b1e7 in operator new(unsigned long)\n        ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99\n    #1 0x7ffffecf8109 in void\n        std::__cxx11::basic_string::_M_construct\u003cchar*\u003e(...)\n        (/lib/x86_64-linux-gnu/libstdc++.so.6+0x14f109)\n    ...\nSUMMARY: AddressSanitizer: allocation-size-too-big\n```\n\nThe corrupted size (`0x100000000000000`) and the threshold\n(`0x10000000000`) match the TSan report in the issue.\n\nWhile investigating, we also found that the same race condition, besides\nthe \"empty list\" extreme case, could cause the replica to receive an\nincomplete file list (`GetChildren` returned only a subset of files).\n\n---\n\n## Fix\n\nNo `pop_back` on empty list：\n\nIn `GetFullReplDataInfo`, if `files` is empty, return `NotOK`\nimmediately instead of calling `pop_back`.\n\n\n\nIntroduce `TryPurgeCheckpoint` — rename then destroy：\n\nAdded `Storage::TryPurgeCheckpoint`, which changes the purge logic to:\n\n1. Under `checkpoint_mu_`, atomically rename `checkpoint_dir` to\n`checkpoint_dir.trash` via `RenameFile`;\n2. Clear `checkpoint_info_`;\n3. After releasing the lock, call `DestroyDB(trash)`.\n\nThis way, the meta listing either sees a complete live directory or no\ndirectory at all.\n\n---\n\n## Tests\n\nTwo new C++ gtests added (`storage_test.cc`):\n\n- `GetFullReplDataInfoRejectsEmptyCheckpoint`: Creates a checkpoint →\nclears the directory → asserts `NotOK`.\n- `TryPurgeCheckpointPolicyAndAtomicRemove`: Verifies idle purge, rename\natomicity, and `checkpoint_info_` reset.\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "4d7c1a6c75b1eda28b976c8276b1237824c26e90",
      "tree": "9f29c20f43f6411aa9fbc478e2dae09a7c948858",
      "parents": [
        "cfeab096c8795ebb0c3df229bd7b2707cf49c900"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Sun Jul 19 09:44:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 09:44:40 2026 +0800"
      },
      "message": "feat(server): support the client-output-buffer-limit configuration (#3560)\n\nAdd the client-output-buffer-limit configuration to disconnect clients\nthat are not reading data from the server fast enough, following the\nsame semantics as Redis: a client is disconnected immediately once the\nhard limit is reached, or when it stays over the soft limit for more\nthan the configured seconds continuously.\n\nUnlike Redis, all the classes are configured in a single line, and only\nthe specified classes are changed. The limits are disabled by default\nfor all classes of clients, e.g. to protect against slow Pub/Sub\nsubscribers with the same limits as Redis:\n\n```\nclient-output-buffer-limit pubsub 32m 8m 60\n```\n\nThe limit takes effect on the normal and pubsub classes since the\nreplication stream is written to the socket directly instead of going\nthrough the connection output buffer. The slave class is accepted for\ncompatibility but takes no effect: slow replicas are still handled by\nmax-replication-lag and replication-send-timeout-ms.\n\nThe check runs every time data is appended to the connection output\nbuffer. A client over the limit is closed asynchronously by manually\ntriggering the deferred write callback, since the write callback of a\nstuck client may never fire on its own; the callback then runs in the\nowner worker\u0027s event loop where freeing the connection is safe.\n\nAlso expose the client_output_buffer_limit_disconnections counter in\nINFO stats, and classify clients subscribed to only shard channels as\npubsub clients so that they are covered by the pubsub class as well.\n\nPart of #2284\n\nAssistant-By Claude Fable 5"
    },
    {
      "commit": "cfeab096c8795ebb0c3df229bd7b2707cf49c900",
      "tree": "7343dca06e5fbd970c472385f43c4cf9d149eaed",
      "parents": [
        "634ed15dfd9249cfb57a52541dddba05b377df0a"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Sat Jul 18 14:49:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 14:49:22 2026 +0800"
      },
      "message": "feat(hash): add HSETEX and HGETEX support (#3554)\n\nAdds Redis-compatible HSETEX and HGETEX commands on top of the hash\nfield expiration encoding. Implements batched field/value and metadata\ntransitions for persistent, expiring, expired, missing, and ghost\nfields, including FXX/FNX, KEEPTTL, PERSIST, and legacy-encoding\nrejection. Adds C++ unit and Go integration coverage for metadata\ninvariants, command parsing, replication, restart, and concurrency.\n\nProposal: https://github.com/apache/kvrocks/discussions/3432\nTracking issue: https://github.com/apache/kvrocks/issues/3436\n\nAssisted by GPT 5.5 Sol."
    },
    {
      "commit": "634ed15dfd9249cfb57a52541dddba05b377df0a",
      "tree": "ceff91252813830ac25b9e01b83cf4cc88dbe57d",
      "parents": [
        "567fcf6c26fc38367c1bda81ca0541c6ab861086"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Sat Jul 11 17:30:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 09:30:21 2026 +0000"
      },
      "message": "fix(rdb): reject over-large declared lengths when loading RDB payloads (#3550)\n\nThe RDB load path sized buffers from an attacker-declared 64-bit length\nbefore checking the stream actually holds that many bytes. A write-level\nclient could send a `RESTORE` payload declaring a huge length and make\nthe server allocate it up front and crash (OOM) — via both the plain\nstring path (`read_string.resize(len)`) and the LZF path (`out_buf(len,\n0)`).\n\nAdd `RdbStream::EnsureRemainingBytes()` and validate every length that\ndrives a read or allocation against the bytes still remaining in the\nstream, so a value can never be declared larger than the input that\ncarries it. The LZF decompressed size may legitimately exceed the\nremaining stream, so it is additionally capped against\n`proto-max-bulk-len`.\n\nAdd gocase regression tests for both the plain-string and LZF-encoded\n`RESTORE` payloads: the server now returns an error and stays up."
    },
    {
      "commit": "567fcf6c26fc38367c1bda81ca0541c6ab861086",
      "tree": "ac9063ced9baf34e324a7f8160f5d89ce1346b44",
      "parents": [
        "e887721cbcc11406769445ea7d66ad0c71a5502e"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Thu Jul 09 11:11:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 03:11:23 2026 +0000"
      },
      "message": "fix(scripting): guard against stack overflow on deeply nested Lua reply (#3547)\n\nReplyToRedisReply() converts a Lua return value into a RESP reply with\nnative C++ recursion that runs after lua_pcall() returns,\nso Lua\u0027s own recursion guard does not apply. A deeply self-nested table\ncould recurse until the worker thread stack overflowed and crashed\nthe whole server (the Lua VM is shared per worker).\n\nAdd a lua_checkstack() guard so such a reply fails with \"reached lua\nstack limit\"\ninstead of crashing. Includes a Go regression test in the scripting\nsuite.\n\nAssistant-By Claude Fable 5"
    },
    {
      "commit": "e887721cbcc11406769445ea7d66ad0c71a5502e",
      "tree": "5b2d17f1779d9dc7ea9422bad89efc3ac3a4b194",
      "parents": [
        "cace9a0fd3ddc4d330e0d50602d8cd095e09b6c8"
      ],
      "author": {
        "name": "nhancdt2602",
        "email": "55862577+nhancdt2602@users.noreply.github.com",
        "time": "Wed Jul 08 20:41:46 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 21:41:46 2026 +0800"
      },
      "message": "feat(info): support FORMAT (TXT | JSON) for the INFO command (#3549)\n\n## Summary\n\nAdd an optional `FORMAT (TXT | JSON)` option to the `INFO` command:\n\n```\nINFO [\u003csection\u003e ...] [FORMAT (TXT | JSON)]\n```\n\n- `FORMAT TXT` (the default) keeps the existing Redis-compatible text\noutput.\n- `FORMAT JSON` emits the same data as a JSON object keyed by section.\n\n```\n127.0.0.1:6666\u003e INFO server FORMAT JSON\n{\"Server\":{\"version\":\"unstable\",\"tcp_port\":6666,\"process_id\":123,...}}\n```\n\nCloses #2302.\n\n## Changes\n\n- `CommandInfo`: parse the optional `FORMAT` keyword, separating it from\nsection names.\n- `InfoEntry`: store each value as a typed `std::variant`, with\n`InfoEntry::ToString()` for the text form; `GetInfo` serializes to text\nor JSON.\n- Add `TestInfoFormat` integration tests.\n\n## Implementation Note\n\nEach `INFO` value carries its original type in the `InfoEntry` variant\n`std::variant\u003cstd::string, int64_t, double, bool\u003e`, captured in the\nconstructors, so the collectors stay unchanged and each format renders\nthe value at serialization time:\n\n- **Text** (`InfoEntry::ToString`): booleans as `0/1`, numbers via\n`std::to_string`, strings verbatim — identical to the previous output.\n- **JSON**: native types — numbers unquoted, booleans as `true/false`,\nstrings quoted.\n\nThe `FORMAT` keyword is case-insensitive; an unknown or missing value\nreturns `syntax error`.\n\n---------\n\nSigned-off-by: nhancdt \u003cnhancu2602@gmail.com\u003e\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Twice \u003ctwice@apache.org\u003e\nCo-authored-by: Twice \u003ctwice.mliu@gmail.com\u003e"
    },
    {
      "commit": "cace9a0fd3ddc4d330e0d50602d8cd095e09b6c8",
      "tree": "570f4042201b17922fe9e9172bd859afa02b1052",
      "parents": [
        "bfe3cbdf86e19d750673780ae3a82ecd7d33b65d"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Wed Jul 08 00:43:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 00:43:09 2026 +0800"
      },
      "message": "fix(ci): update docker/build-push-action to v7.3.0 (#3548)\n\nThe CI workflow fails at startup because the ASF org allowed-actions\nlist removed the expired ref docker/build-push-action@d08e5c35 (v7.0.0)\nin apache/infrastructure-actions@062f6aa1, so any run referencing it is\nnow rejected before jobs start:\nhttps://github.com/apache/kvrocks/actions/runs/28851612255\n\nUpdate the pin in kvrocks.yaml and nightly.yaml to 53b7df96 (v7.3.0),\nwhich is on the current allowlist:\n\nhttps://github.com/apache/infrastructure-actions/blob/f9d4ef191a045ce5cbd552828450081a24e425fa/approved_patterns.yml#L134"
    },
    {
      "commit": "bfe3cbdf86e19d750673780ae3a82ecd7d33b65d",
      "tree": "1187bde42a8d5cb2a4179eb1091323f416997800",
      "parents": [
        "8830e26ebd82308741bb04d4f220ef0091c42c22"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Mon Jul 06 12:48:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 04:48:43 2026 +0000"
      },
      "message": "refactor(cluster): remove the redis-command migration type (#3544)\n\nThis PR removes the `redis-command` slot migration type, leaving\nraw-key-value\nas the only migration path. The raw-key-value type has been introduced\nfor a long time, and it outperforms the redis-command type in both\nresource consumption and migration speed, so we can remove it to\nsimplify the slot migration code. Also, the redis command migration\ndidn\u0027t work well after introducing more and more new data types.\n\nTo be noticed, there is no fallback anymore, the migration now fails\nwith the error `destination node doesn\u0027t support the APPLYBATCH command`\nif the destination\nnode doesn\u0027t support the APPLYBATCH command, instead of silently falling\nback to the redis-command type.\n\nAssistant By Claude Fable 5"
    },
    {
      "commit": "8830e26ebd82308741bb04d4f220ef0091c42c22",
      "tree": "8503dd3df1bd659d7d2055a90bc24d4dda0b3983",
      "parents": [
        "970c2876034b9cea2d3364b5cde345ccf57e17fe"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Mon Jul 06 11:35:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 11:35:19 2026 +0800"
      },
      "message": "fix(cluster): release forbidden slot range on CLUSTER RESET (#3545)\n\nAfter a slot has been migrated away, the source node keeps\n`forbidden_slot_range_` set. That is normally harmless because the\ntopology no longer routes the slot to this node, so the forbidden-slot\ncheck is never reached. But `CLUSTER RESET` clears the topology while\nleaving the migrator\u0027s forbidden range intact — a subsequent SETNODES\nthat reassigns the slot back to this node then spuriously rejects writes\nwith `TRYAGAIN Can\u0027t write to slot being migrated`. Explicitly release\nthe forbidden slot range in `Cluster::Reset` to fix this.\n\nAssistant-By: Claude Opus 4.7"
    },
    {
      "commit": "970c2876034b9cea2d3364b5cde345ccf57e17fe",
      "tree": "960a2678bd82221462be92acedb5b5fc362454a9",
      "parents": [
        "504220e80142fe0fe2640b7cbc415b54afa9e4a6"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Thu Jul 02 14:44:58 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 11:44:58 2026 +0000"
      },
      "message": "chore(deps): bump libevent to 2.1.13-stable (#3540)\n\nBump libevent to 2.1.13-stable (see:\nhttps://github.com/libevent/libevent/releases/tag/release-2.1.13-stable)\n\nSecurity fix release and some backports compiler warnings and fixes for\nopenssl 3 compatability."
    },
    {
      "commit": "504220e80142fe0fe2640b7cbc415b54afa9e4a6",
      "tree": "a22c5b46a5e252aa5b7da6a62385af37c4bf156b",
      "parents": [
        "8e0fdefd4c304ab6c0f81f83c0ba405a545b2e06"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Thu Jul 02 16:53:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 08:53:34 2026 +0000"
      },
      "message": "fix(ci): update the sonarscan to v8.2.0 (#3542)\n\nFix CI issue due to using the deprecated\nversion:https://github.com/apache/kvrocks/actions/runs/28533264944"
    },
    {
      "commit": "8e0fdefd4c304ab6c0f81f83c0ba405a545b2e06",
      "tree": "d2eaa780876f3af63b1953768938ca4efb2c2c1e",
      "parents": [
        "df461ea19c71ddddd826d1a7547db388d07c8353"
      ],
      "author": {
        "name": "hurukawa",
        "email": "61525444+nagisa-kunhah@users.noreply.github.com",
        "time": "Mon Jun 29 09:55:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 01:55:27 2026 +0000"
      },
      "message": "feat(cf): add cf.add command (#3481)\n\ntask id: #3351\n\n---------\n\nCo-authored-by: qiang_liu \u003cliuqiang9596@gmail.com\u003e\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "df461ea19c71ddddd826d1a7547db388d07c8353",
      "tree": "3c981a6996e91fdffd1252cfdee1bf990cc18528",
      "parents": [
        "6367221c55ec6470df5531389107bbc911684d68"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Fri Jun 26 05:33:31 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 10:33:31 2026 +0800"
      },
      "message": "chore(deps): bump rocksdb to v11.1.2 (#3537)\n\nBump rocksdb to v11.1.2 (bugfix release, see:\nhttps://github.com/facebook/rocksdb/releases/tag/v11.1.2)\n\nFixed a bug where closing a read-only DB instance could delete live SST\nfiles created by a concurrent read-write DB sharing the same directory"
    },
    {
      "commit": "6367221c55ec6470df5531389107bbc911684d68",
      "tree": "fef928c97687ee05631045a2622ad4c6cd989c0c",
      "parents": [
        "b0ae44fe7c8c4b3052d779f4ff3acd4b6aff078c"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Tue Jun 23 13:22:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 05:22:00 2026 +0000"
      },
      "message": "fix(server): scope CLIENT LIST/INFO/KILL to caller\u0027s namespace (#3536)\n\nNon-admin (tenant) connections could previously enumerate and terminate\nconnections belonging to other namespaces — including the admin\nnamespace and replication links — via CLIENT LIST and CLIENT KILL.\nFilter both per-worker iteration and the slave-thread enumeration by the\ncaller\u0027s namespace, allowing only admin (default-namespace) callers to\nsee or kill connections outside their own namespace.\n\nAssistant By Claude Opus 4.7"
    },
    {
      "commit": "b0ae44fe7c8c4b3052d779f4ff3acd4b6aff078c",
      "tree": "d8376963b7eb2af10416caff52f90f1afce8f361",
      "parents": [
        "ee98a2dafbb33aebabbbcab94c728a7e10fbc36e"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Mon Jun 22 08:59:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 08:59:01 2026 +0800"
      },
      "message": "chore(.asf.yaml): add 2.16 into protected branches (#3535)\n\nWe can add `2.16` to protected branches since it\u0027s released now."
    },
    {
      "commit": "ee98a2dafbb33aebabbbcab94c728a7e10fbc36e",
      "tree": "586f4cd056d2b1868fe152d0099d880759699f3e",
      "parents": [
        "d51384c05cecbcf4ac3b2adc4451444f45abaaac"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Thu Jun 18 19:44:38 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 00:44:38 2026 +0800"
      },
      "message": "chore(deps): bump fmtlib to 12.2.0 (#3532)\n\nBump fmtlib to 12.2.0 (changelog:\nhttps://github.com/fmtlib/fmt/releases/tag/12.2.0)\n\n**Key changes**\n\n- Added a C11 API that brings fast, type-safe formatting to C\n- Added a separate fmt::fmt-module CMake target for C++20 modules and a\nCI workflow that exercises module-based builds\n- Enabled the full Dragonbox lookup cache by default for floating-point\nformatting unless optimizing for binary size, giving a ~10–25% speedup.\n- Improved integer formatting performance by ~3%\n- Added support for formatting std::unexpected\n- Made various code, build and test improvements"
    },
    {
      "commit": "d51384c05cecbcf4ac3b2adc4451444f45abaaac",
      "tree": "3b2a94e775705055ae4bf3346b76e1c330d58ceb",
      "parents": [
        "812386c33fd5801377895abb39c65a429c48a20c"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Thu Jun 18 18:51:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 10:51:49 2026 +0000"
      },
      "message": "fix(test): extend the replication wait time to prevent the flaky test (#3531)\n\nCurrently, WaitForSync only allows 5s for master_link_status to reach\n\"up\",\nwhich is not enough under loaded CI runners (e.g. SonarCloud coverage\nbuilds);\n\nReproduced locally by running 16 background CPU burners and looping the\ntest:\n```\nfor i in $(seq 1 6); do\n   go test -count\u003d1 -run TestReplicationWithLimitSpeed$ \\\n      ./integration/replication/... \\\n      -binPath\u003d.../build/kvrocks -workspace\u003d/tmp/kvrocks-test-ws\ndone\n```\n\nBefore the fix: 1/6 runs failed with the same trace as the CI flake\n(\"Condition never satisfied\" at client.go:50, called from\nreplication_test.go:362).\nAfter the fix: 8/8 runs pass under the same CPU load (run times 34-51s\nvs. an\nunloaded baseline of ~28s, confirming load was active).\n\n\nRelated flaky run:\nhttps://github.com/apache/kvrocks/actions/runs/27660686644/job/81804342125\n\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-authored-by: Claude Opus 4.7 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "812386c33fd5801377895abb39c65a429c48a20c",
      "tree": "a25ac0b9955f86d26953f000d8229cae0f47eb1a",
      "parents": [
        "34f4e707fb8559d8cc2ce44f856013da60b24c1a"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Wed Jun 17 09:59:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 09:59:01 2026 +0800"
      },
      "message": "ci: fix version of docker/login-action (#3525)\n\nRefer to https://github.com/apache/kvrocks/actions/runs/27584460435\n\u003e The action\ndocker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 is not\nallowed in apache/kvrocks because all actions must be from a repository\nowned by your enterprise, created by GitHub, or match one of the\npatterns\n\nSo we need to update the version to one that appears in\nhttps://github.com/apache/infrastructure-actions/blob/main/approved_patterns.yml."
    },
    {
      "commit": "34f4e707fb8559d8cc2ce44f856013da60b24c1a",
      "tree": "9ffffee7d12dd9ef467ae66c82eaeb3c36c30a2a",
      "parents": [
        "082653ab258abd14b7987b58186be86ed4993fc3"
      ],
      "author": {
        "name": "Reilly.tang",
        "email": "tang.ruilin@foxmail.com",
        "time": "Tue Jun 16 19:36:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 19:36:44 2026 +0800"
      },
      "message": "perf(test): parallelize bitmap subtests and optimize Set2SetBit with pipeline (#3507)\n\nPart of #2642\n\n- Add t.Parallel() to all 34 subtests for concurrent execution\n- Use util.KeyPrefix(t) for unique key names per subtest\n- Replace per-bit SETBIT calls with pipelined SETBIT in Set2SetBit\n(reduces ~8000 RTTs to 1 RTT for 1000-byte vectors)\n- Replace defer with t.Cleanup() so resources live until subtests finish\n- Move KeyPrefix helper to dedicated keys.go\n- Fix duplicate test name \"BITPOS BIT not found check check\"\n- Test time: 52s → 11s (~4.7x speedup)\n\nAssisted-by: Claude Code:DeepSeek-v4-pro\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "082653ab258abd14b7987b58186be86ed4993fc3",
      "tree": "2c867fb5f3e85b58d6f94313f40ea82b6cae20e6",
      "parents": [
        "f7ea9b2ac8194789f4460c66dead5c180ec794a7"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Tue Jun 16 02:59:27 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 23:59:27 2026 +0000"
      },
      "message": "chore(deps): bump jsoncons to 1.8.1 (#3514)\n\nBump jsoncons to 1.8.0 (changelog:\nhttps://github.com/danielaparker/jsoncons/releases/tag/v1.8.0)\n\n**Key changes**\n\n- Bug fix (a lot of bugs are fixed!)\n- The types json_pointer_arg_t and json_const_pointer_arg_t have been\nrenamed to json_ptr_arg_t and const_json_ptr_arg_t, and the constants\njson_pointer_arg and json_const_pointer_arg have been renamed to\njson_ptr_arg and const_json_ptr_arg.\n- Since 1.8.0, the basic_json copy constructor makes a deep copy of any\nconst_json_ref and json_ref pointers it may hold."
    },
    {
      "commit": "f7ea9b2ac8194789f4460c66dead5c180ec794a7",
      "tree": "cab48b3e05ae9e140f8e56df5aae77f63879077b",
      "parents": [
        "77107c80fcf8268316cafaa73c6aa70230660d2b"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Fri Jun 12 22:36:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 14:36:48 2026 +0000"
      },
      "message": "fix(rdb): reject malformed intset lengths (#3519)\n\nRESTORE loads intset contents from a length-prefixed RDB string. The\nparser checked IntSetHeaderSize + len * record_size using 32-bit\narithmetic, so a large len could overflow the product and make a\nheader-only intset appear correctly sized. It then entered the entry\nloop and read beyond the provided input.\n\nBefore this patch, a RESTORE payload using int64 intset encoding and len\n0x20000000 timed out or terminated the server instead of returning a\nparse error. After this patch, the same payload returns \"ERR invalid\nintset length,\" and the server continues to respond to PING.\n\nValidate the encoding before using it as a record size, compare the\ndeclared length with the remaining payload to ensure no overflow, and\nperform a bounds check before each record read.\n\nAssistant By GPT-5.5 HIGH"
    },
    {
      "commit": "77107c80fcf8268316cafaa73c6aa70230660d2b",
      "tree": "474c7fa44f38c4f95e4ceae6fe47be9c3c6f8d1c",
      "parents": [
        "01c3426ac7a7c35e8898029c6101228ac91f5663"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Tue Jun 09 06:22:15 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 11:22:15 2026 +0800"
      },
      "message": "chore(deps): bump fast_float to v8.2.7 (#3513)\n\nBump fast_float to v8.2.7 (see:\nhttps://github.com/fastfloat/fast_float/releases/tag/v8.2.7)\n\n**Changes**\n\n- Skip materializing parsed_number_string_t spans on the hot path\n- Unroll the integer-part digit scan (straight-line for the common 1-5\ndigit case)\n- Add a 4-digit SWAR follow-up to loop_parse_if_eight_digits (clang)\n- Parallelize the exhaustive float32 sweeps across hardware threads\n(~75-88x)"
    },
    {
      "commit": "01c3426ac7a7c35e8898029c6101228ac91f5663",
      "tree": "8f8f4917f4d674836e315e5944a9a52cbd8fed9e",
      "parents": [
        "d90f248235b328dea3c0153c90e2f048c55bdd27"
      ],
      "author": {
        "name": "纪华裕",
        "email": "jihuayu123@gmail.com",
        "time": "Mon Jun 08 19:46:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 19:46:41 2026 +0800"
      },
      "message": "ci: exclude kvrocks2redis from sonar coverage (#3512)\n\nThe previous go test code coverage data could be overwritten by the\ncoverage data from kvrocks2redis, which caused the overall coverage\nmetric to be lower than expected.\n\nThis PR disables the `kvrocks2redis` tests in the SonarCloud coverage\njob to prevent them from corrupting gcov data generated by the main C++\nand Go tests.\n\n\nAssisted-by: Codex/GPT5.5 xhigh"
    },
    {
      "commit": "d90f248235b328dea3c0153c90e2f048c55bdd27",
      "tree": "ca8d5f20a46d46f52aed869d6135c8aa32f620fe",
      "parents": [
        "e51eb2ed9132385c40b3f6b06f30287681d8e2eb"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Fri Jun 05 04:32:04 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 10:32:04 2026 +0800"
      },
      "message": "chore(security): add draft threat model and SECURITY.md for security-model discoverability (#3509)\n\n**This is a draft proposal for the Kvrocks PMC to review — please\ncorrect, reject, or discuss as needed.** Nothing here is a requirement;\nthe maintainers are the decision-makers, and this document describes\nKvrocks *as the PMC says it is*.\n\nThis PR adds **`THREAT_MODEL.md`** + **`SECURITY.md`** and a\n**Security** section in `AGENTS.md`, so an automated scan agent can\nmechanically find the model via `AGENTS.md → SECURITY.md →\nTHREAT_MODEL.md`.\n\nIt is **draft-first and mostly inferred** (~16 documented / 0 maintainer\n/ ~50 inferred). Every `*(inferred)*` claim routes to a numbered\nquestion in **§14 Open questions** — the fastest review is to walk §14\n(three short waves) and answer in-thread; we then promote the tags to\n`*(maintainer)*`.\n\nThe **wave-1** rulings are load-bearing:\n\n- Is running **without `requirepass`** (the default) a supported posture\nrelying on `bind`/network controls, or must operators set it before\nexposing the port — i.e. is an unauthenticated-access report `BY-DESIGN`\nor `VALID`?\n- Same for **TLS-off** on an untrusted network — operator responsibility\nor a claimed gap?\n- Are **replication / cluster peers** trusted (out of the adversary\nmodel) or should a malicious peer be in scope?\n\n`apache/kvrocks-controller` is in scope for the scan too; per §14 q10 it\nwill get its **own** model (its trust surface — the cluster control\nplane — differs), which we\u0027ll open as a separate PR.\n\nContext: the ASF Security team is preparing the project for an automated\nagentic security scan we\u0027re piloting; a complete, discoverable threat\nmodel keeps that scan\u0027s output signal-rich. We drafted this via the\n[threat-model-producer](https://gist.github.com/potiuk/da14a826283038ddfe38cc9fe6310573)\nrubric. If you\u0027d rather author it yourselves, close this PR and we\u0027ll\nregroup."
    },
    {
      "commit": "e51eb2ed9132385c40b3f6b06f30287681d8e2eb",
      "tree": "cb6f78f792d72fa752a82affd87736eec2818959",
      "parents": [
        "82eaa90ecb57ceb6acf0d5345d1eecf57ee9a7aa"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Sat May 30 22:28:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 30 22:28:09 2026 +0800"
      },
      "message": "feat(hash): add HFE expire and TTL commands (#3506)\n\nCompletes the hash field expiration command family by adding the\nremaining HFE commands and wiring them through the existing metadata and\nfield-expiration helpers.\n\nCommands covered in this PR:\n- `HPEXPIRE`\n- `HEXPIREAT`\n- `HPEXPIREAT`\n- `HTTL`\n- `HPTTL`\n- `HEXPIRETIME`\n- `HPEXPIRETIME`\n\nThe PR also keeps `HEXPIRE` and `HPERSIST` on the same shared\nimplementation path, and adds C++/Go coverage for command semantics,\nparsing, time boundaries, legacy encoding rejection, and metadata\nbehavior.\n\nTracking issue: https://github.com/apache/kvrocks/issues/3436\nProposal: https://github.com/apache/kvrocks/discussions/3432\n\nAssisted-by: Codex/GPT5.5"
    },
    {
      "commit": "82eaa90ecb57ceb6acf0d5345d1eecf57ee9a7aa",
      "tree": "231e3516c08d1bc48cdc44a833f91c8d1afbdbdd",
      "parents": [
        "5264d5922189cecd1371d2a713244e6a7891950b"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Wed May 27 11:02:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 11:02:53 2026 +0800"
      },
      "message": "feat(hash): support HFE compaction filter (#3503)\n\nImplement HFE-aware RocksDB compaction filtering so expired hash fields\ncan be safely dropped, and whole hash metadata can be removed when all\nTTL fields are past the tracked upper bound.\n\nReferences the HFE proposal in #3432 and tracking issue #3436.\n\nAssisted-by: Codex/GPT5.5 xhigh"
    },
    {
      "commit": "5264d5922189cecd1371d2a713244e6a7891950b",
      "tree": "768164d2561afe8e06771b3014837ed8dec9fae7",
      "parents": [
        "27a6d8a780d11f1e88ef2292114a26604bf049ce"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Tue May 26 18:31:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 18:31:12 2026 +0800"
      },
      "message": "feat(hash): implement hlen scan repair (#3501)\n\nImplements the HLEN fast-path algorithms and SCAN_AND_REPAIR lazy\ndeletion for hash field expiration, including APPROX/REPAIR handling and\ncoverage for expired physical fields and compaction ghosts.\n\nFollows the HFE proposal in #3432 and addresses the HLEN/SCAN_AND_REPAIR\ntask from tracking issue #3436.\n\nAssisted-by: Codex/GPT5.5 xhigh"
    },
    {
      "commit": "27a6d8a780d11f1e88ef2292114a26604bf049ce",
      "tree": "fb006f282fe6b78a88d163721354089cf44c2375",
      "parents": [
        "41ee6ae547941ae1261e16540ca18af25c607f23"
      ],
      "author": {
        "name": "纪华裕",
        "email": "jihuayu123@gmail.com",
        "time": "Wed May 20 10:54:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 10:54:40 2026 +0800"
      },
      "message": "fix(scripting): sanitize lua error replies (#3494)\n\nfix https://github.com/apache/kvrocks/issues/3493\n\n\nLua\u0027s error return poses an injection risk; see issues for details.\n\nI used codex gpt-5.5 to fix it."
    },
    {
      "commit": "41ee6ae547941ae1261e16540ca18af25c607f23",
      "tree": "e310e488cc196172ac08a06525458323aa1bd51e",
      "parents": [
        "9c411259020ad46e6ed04575db6768e83e26e32f"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Mon May 18 19:47:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 19:47:02 2026 +0800"
      },
      "message": "fix(scripting): bump LuaJIT to reject bytecode loading (#3492)\n\nUpgrade LuaJIT to a build that disables loading binary bytecode chunks,\nmitigating a DoS where crafted bytecode could crash the server. Add a\nregression test that confirms `loadstring` on malformed bytecode is\nrefused with \"attempt to load chunk with wrong mode\" and the server\nkeeps serving requests."
    },
    {
      "commit": "9c411259020ad46e6ed04575db6768e83e26e32f",
      "tree": "e0ce97ecba0a14cca92ee40fa1bdeba1ba166d53",
      "parents": [
        "88009fad36b3a4e1d71fb58db588ebce071761be"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Sun May 17 18:25:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 13:25:15 2026 +0300"
      },
      "message": "chore(scan): remove additional abstraction for subkey scanning (#3490)\n\nThese abstraction is for hash subkey scanning, but now we don\u0027t use it\nanymore. So better to remove them."
    },
    {
      "commit": "88009fad36b3a4e1d71fb58db588ebce071761be",
      "tree": "e1d1ff29a0e621eca5b329feef4369b93769bc89",
      "parents": [
        "13e5cae2ecea271e3edac4e33dea780b0eb4d23d"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Sun May 17 12:49:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 04:49:24 2026 +0000"
      },
      "message": "feat(hash): restrict condition for hash encoding mode (#3488)\n\n`encoded_mode \u003d\u003d 0` should not be valid here since when encoding mode is\nlegacy this field should be missing."
    },
    {
      "commit": "13e5cae2ecea271e3edac4e33dea780b0eb4d23d",
      "tree": "e1bb37b6a9ace7b26ff8c1fb02783fdcb1d9ee40",
      "parents": [
        "d42d0c7f74d51b26d8cf982961a9f10de1e33baa"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Fri May 15 23:58:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 15:58:26 2026 +0000"
      },
      "message": "feat(hash): track persistent hash fields \u0026 support hash field expiration commands (#3472)\n\nProposal #3432. Tracking issue #3436.  \n\nAdd hash field expiration support based on the new persistent-field\nmetadata model.\n\n  This PR:\n- Tracks persistent hash fields in metadata for field-expiration\nencoding.\n  - Adds `HEXPIRE` and `HPERSIST`.\n- Updates existing hash read/write commands to handle expired fields\ncorrectly.\n- Filters expired fields from hash read commands without mutating\nmetadata.\n- Adds C++ and Go coverage for persistent, TTL, expired, and\ncompaction-ghost states.\n\nAssisted-by: Codex/GPT 5.5 xhigh"
    },
    {
      "commit": "d42d0c7f74d51b26d8cf982961a9f10de1e33baa",
      "tree": "471f83c166008a44ae37a5e98e23304b57fddeae",
      "parents": [
        "b654013bb65a791cea2154bbc31789353c495332"
      ],
      "author": {
        "name": "纪华裕",
        "email": "jihuayu123@gmail.com",
        "time": "Wed May 13 14:19:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 14:19:04 2026 +0800"
      },
      "message": "fix(zset): register zdiffstore as write command (#3486)\n\n`ZDIFFSTORE` writes results to a destination key, but it was previously\nregistered as `read-only slow`. I fix it.\n\n\nI used codex gpt-5.5 to find and fix it."
    },
    {
      "commit": "b654013bb65a791cea2154bbc31789353c495332",
      "tree": "a7ca07d5ddb632b101398b257ba5382682c94b45",
      "parents": [
        "3e564ca4d0374130ad00a9c9ec03989c2ef44cf0"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Tue May 12 07:56:44 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 04:56:44 2026 +0000"
      },
      "message": "chore(test): bump Go-version to 1.25 for tests (#3485)\n\nI propose updating the minimum required Go version to 1.25.\n\nWe are not moving to 1.26 yet because our CI still builds on OpenSUSE\nLeap 15, where Go 1.25 (1.25.8) is the version available in the base\nrepositories. Go 1.26 is currently only present in the devel repository."
    },
    {
      "commit": "3e564ca4d0374130ad00a9c9ec03989c2ef44cf0",
      "tree": "526999a4e2a76f73003d2db3d8adc6c0f81e3e3c",
      "parents": [
        "47e08935c6fb4ec604d4d650860abca546b83c51"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Mon May 11 18:44:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 18:44:36 2026 +0800"
      },
      "message": "fix(replication): reject unsafe fullsync file names (#3483)\n\nReplication fullsync uses the peer\u0027s file names to fetch checkpoint\nfiles\nand materialize them in the local sync checkpoint directory. Previously,\nthose names were joined directly with local directories,\nso traversal components could escape the intended directory during\nexistence checks,\ntemporary file creation, rename, cleanup, or master-side file open.\n\nAssisted-by: Codex/GPT 5.5 xhigh"
    },
    {
      "commit": "47e08935c6fb4ec604d4d650860abca546b83c51",
      "tree": "9a6c779b52ed7e2f13ff97347c3b73865fb191ff",
      "parents": [
        "caf24a60f4a3a7330f34c1b7d8c07140ce872b23"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Mon May 11 12:22:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 12:22:55 2026 +0800"
      },
      "message": "fix(replication): require admin for transfer commands (#3484)\n\nMark PSYNC, _FETCH_META, and _FETCH_FILE as admin-only commands so\nnamespace users cannot invoke replication transfer internals.\n\nMove the regression coverage into the integration replication suite,\nwhere the command behavior is exercised against a running server.\n\nAssisted-by: Codex/GPT 5.5 xhigh"
    },
    {
      "commit": "caf24a60f4a3a7330f34c1b7d8c07140ce872b23",
      "tree": "45b58a43bc23866de475f7645bd030c89f825412",
      "parents": [
        "07a67beadd2efeaec6abfcb90f07b6c23e386e96"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Wed May 06 18:04:59 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 15:04:59 2026 +0000"
      },
      "message": "chore(build): bump golangci-lint to 2.12.1 (#3476)\n\nBump golangci-lint to 2.12.1 (changelog:\nhttps://golangci-lint.run/docs/product/changelog/#v2121)\n\nBugfix and update a lot of linters"
    },
    {
      "commit": "07a67beadd2efeaec6abfcb90f07b6c23e386e96",
      "tree": "443e8eba4aa0944c59f4a8ea3917073f9435b296",
      "parents": [
        "cbafb7a9142d234759fbdd9db1938757cb28f95f"
      ],
      "author": {
        "name": "kirito632",
        "email": "debuaqua40@gmail.com",
        "time": "Wed May 06 22:01:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 22:01:26 2026 +0800"
      },
      "message": "feat(string): support IFEQ/IFNE/IFDEQ/IFDNE in SET command (#3475)\n\n## What\nReintroduce conditional options IFEQ / IFNE / IFDEQ / IFDNE for the SET\ncommand.\n\n## Context\nThis is a clean, reworked version of the previously closed #3452.  \nIt addresses all previous feedback, reverts the accidental deletion of\n`CommandDelEX`, and is fully rebased onto the latest `unstable` branch.\n\nAll CI checks have been successfully run and verified on my personal\nfork before submission.\n\n## Behavior\n- IFEQ / IFNE: case-sensitive value comparison  \n- IFDEQ / IFDNE: case-insensitive digest comparison  \n- Return `WRONGTYPE` for non-string keys  \n- Mutually exclusive with NX/XX  \n- Fix: `SET key value NX GET` now correctly returns `WRONGTYPE` for\nnon-string keys (matching Redis 8.x behavior)\n\n## Testing\n- C++ unit test: Kept only the IFDEQ empty-string boundary coverage  \n- Go integration tests: Syntax, behavior, edge cases (uppercase \u0026\nmalformed digests), and regression coverage\n\n## AI-assisted Contribution Disclosure\nAI was used for code pattern suggestions, test scaffolding, and\ndebugging assistance.\nCore logic, bug fixes, validation, and final implementation were written\nand verified manually.\n\nCo-authored-by: hulk \u003chulk.website@gmail.com\u003e\nCo-authored-by: jihuayu \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "cbafb7a9142d234759fbdd9db1938757cb28f95f",
      "tree": "5ec02bb17a68172807f4d7359669ef39e448805f",
      "parents": [
        "fbe066f65b603b9da4bd5b3fefe3810cb59dd193"
      ],
      "author": {
        "name": "gongna-au",
        "email": "2036479155@qq.com",
        "time": "Wed May 06 11:45:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 03:45:15 2026 +0000"
      },
      "message": "feat(bit): add BYTE/BIT option support for BITPOS command (#3460)\n\n## Summary\nThis PR adds support for the `BYTE`/`BIT` unit option to the `BITPOS`\ncommand, aligning it with the Redis 7.0 specification.\n\nThe previous implementation only checked for `BIT` at a fixed argument\nposition (`args[5]`) and ignored `BYTE` entirely. This PR refactors the\nparser to correctly handle the full Redis 7.0 syntax:\n\n```\nBITPOS key bit [start [end [BYTE | BIT]]]\n```\n\nThe `BYTE|BIT` unit is strictly nested: it can only appear after both\n`start` and `end` are provided, matching Redis behavior exactly.\n\n## Changes\n### 1. Command Parser Refactor (`src/commands/cmd_bit.cc`)\n- Refactored `CommandBitPos::Parse` to cleanly separate argument parsing\nby count.\n- `args[4]` (the 5th argument) is always parsed as the `end` integer —\nnever as a unit keyword. This matches Redis, which rejects `BITPOS key 1\n0 BIT` with a \"not an integer\" error.\n- `args[5]` (the 6th argument) is checked for `BIT`/`BYTE` keyword, with\n`errInvalidSyntax` on anything else.\n- Added explicit `BYTE` recognition (previously only `BIT` was partially\nhandled).\n- Moved `bit` argument validation to the top for clarity.\n- Replaced verbose `ParseInt` + manual error check with `GET_OR_RET`\nmacro for consistency.\n\n### 2. Storage Layer — No Changes Needed\n- The `CHECK(stop_given)` assertion in `Bitmap::BitPos` is preserved as\na defensive guard. Since the parser guarantees `stop_given\u003dtrue`\nwhenever `is_bit_index\u003dtrue` (unit keyword requires `end` to be\npresent), this assertion is correct and protects against future\nregressions.\n\n## Compatibility\n\n| Command Form | Redis 7.0 | Kvrocks (after PR) |\n| --- | --- | --- |\n| `BITPOS key bit` | OK | OK |\n| `BITPOS key bit start` | OK | OK |\n| `BITPOS key bit start end` | OK | OK |\n| `BITPOS key bit start end BYTE` | OK (since 7.0) | **OK (new)** |\n| `BITPOS key bit start end BIT` | OK (since 7.0) | **OK (new)** |\n| `BITPOS key bit start BIT` | ERR not integer | ERR not integer |\n\n## Verification\n- Argument parsing logic verified against Redis 7.0 syntax definition:\n`BITPOS key bit [start [end [BYTE | BIT]]]`.\n- `is_bit_index` is only set when `args.size() \u003d\u003d 6`, guaranteeing\n`stop_given_ \u003d\u003d true`, so the `CHECK(stop_given)` assertion in the\nstorage layer is always satisfied.\n- `BITCOUNT` already has correct `BYTE/BIT` support and is not affected\nby this PR.\n\nCo-authored-by: gongna-au \u003cgongna1@xiaomi.com\u003e\nCo-authored-by: Sisyphus \u003cclio-agent@sisyphuslabs.ai\u003e\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "fbe066f65b603b9da4bd5b3fefe3810cb59dd193",
      "tree": "fee89836ff63f0407542af95665d63ea7072d90e",
      "parents": [
        "c8a66e2caf86217650786a5b58d852759a6877ac"
      ],
      "author": {
        "name": "Nikhil K Tyagi",
        "email": "nikhilq.75@gmail.com",
        "time": "Wed May 06 07:26:36 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 09:56:36 2026 +0800"
      },
      "message": "fix(bitfield): support Redis positional \u0027#N\u0027 offset syntax (#3470)\n\nLinked issue #3469 \n\n## Problem\n`BITFIELD` commands with positional offset `#N` syntax failed in\nkvrocks. Redis supports `#N` as shorthand for `N * bit_width`, so\n`INCRBY u16 #0 1` means bit\noffset `0 * 16 \u003d 0`, `#1` means `16`, etc.\nExample that worked in Redis but not kvrocks:\nBITFIELD mykey OVERFLOW SAT INCRBY u16 #0 1\n## Root Cause\n`GetBitOffsetFromArgument` called `ParseInt\u003cuint32_t\u003e` directly on\noffset string. `\"#0\"` fails integer parsing — `#` prefix was never\nhandled.\n## Fix\nIn `CommandBitfield::Parse()`, after encoding is parsed (bit width\nknown), detect `#` prefix and expand: `offset \u003d N * encoding.Bits()`.\nPlain integer offsets\n  unchanged.\n## Test\nAdded integration tests in\n`tests/gocase/unit/type/bitmap/bitmap_test.go` covering:\n- `SET`/`GET` with `#N` across multiple positions\n- `INCRBY` with `#N`\n- `OVERFLOW SAT INCRBY` with `#N` (original failing case)\n  - `BITFIELD_RO GET` with `#N`\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Vikram Alagh \u003csixthkrum@gmail.com\u003e\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e\nCo-authored-by: Aleks Lozovyuk \u003caleks.raiden@gmail.com\u003e"
    },
    {
      "commit": "c8a66e2caf86217650786a5b58d852759a6877ac",
      "tree": "16e15473b37b933bea84b97f6a9755d35c9b9885",
      "parents": [
        "5dcf4f6b31ebafd2da57f6b24212c496a3f6871a"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Mon May 04 11:53:44 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 16:53:44 2026 +0800"
      },
      "message": "chore(build): change base docker image to debian:trixie-slim (#3478)\n\nChange base docker image to debian:trixie-slim - current used bookworm\nare too old. So, I propose to use stable tagged Debian image - now it\u0027s\na codename trixie."
    },
    {
      "commit": "5dcf4f6b31ebafd2da57f6b24212c496a3f6871a",
      "tree": "c3fc5138c771d2ced7ca34d34936c5c780dd59cf",
      "parents": [
        "e23fdb4eedf7e9620a2e150514fe76ef5c125d3a"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Sun May 03 17:41:49 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 03 17:41:49 2026 +0300"
      },
      "message": "chore(deps): bump fast_float to 8.2.5 (#3479)\n\nBump fast_float to 8.2.5 (see:\nhttps://github.com/fastfloat/fast_float/releases/tag/v8.2.5)\n\nChanges\n - Replace std::min with ternary operators to avoid dependency"
    },
    {
      "commit": "e23fdb4eedf7e9620a2e150514fe76ef5c125d3a",
      "tree": "1c7b079b37e337a6229c18d9f00ce838a86c7c4c",
      "parents": [
        "acc9790b2aa2909b9c8fb8a624df8801baec43e5"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Sun May 03 16:00:11 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 03 13:00:11 2026 +0000"
      },
      "message": "chore(build): jemalloc disable flag for ArchLinux build (#3480)\n\nWe need to disable jemalloc (and use system) at Arch (due to error with\nstd::__throw_bad_alloc, its patch at this PR\nhttps://github.com/jemalloc/jemalloc/pull/2900)\n\n---------\n\nCo-authored-by: Twice \u003ctwice.mliu@gmail.com\u003e"
    },
    {
      "commit": "acc9790b2aa2909b9c8fb8a624df8801baec43e5",
      "tree": "9841f651d5db5a22473ec7de986fe05dc593b44f",
      "parents": [
        "4b4ce236870adf32ccfc217f1ce03f64180fa32b"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Sat May 02 20:21:04 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 03 01:21:04 2026 +0800"
      },
      "message": "chore(build): Move environment variables from RUN to dedicated ENV instruction (#3477)\n\nRemove `ENV` variables from the `RUN` instruction and use the dedicated\n`ENV` directive instead.\n\nThis change eliminates the following debconf warnings that appear during\npackage updates:\n\n`\n#8 5.404 debconf: unable to initialize frontend: Dialog\n#8 5.404 debconf: (TERM is not set, so the dialog frontend is not\nusable.)\n#8 5.404 debconf: falling back to frontend: Readline\n#8 5.404 debconf: unable to initialize frontend: Readline\n#8 5.404 debconf: (Can\u0027t locate Term/ReadLine.pm in @INC (you may need\nto install the Term::ReadLine module) (@INC contains: /etc/perl\n/usr/local/lib/x86_64-linux-gnu/perl/5.36.0 /usr/local/share/perl/5.36.0\n/usr/lib/x86_64-linux-gnu/perl5/5.36 /usr/share/perl5\n/usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.36\n/usr/share/perl/5.36 /usr/local/lib/site_perl) at\n/usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)\n#8 5.404 debconf: falling back to frontend: Teletype\n`"
    },
    {
      "commit": "4b4ce236870adf32ccfc217f1ce03f64180fa32b",
      "tree": "47ad4d38265cb73435c8fc9b6bcc8c3c4d8dc94c",
      "parents": [
        "7a34b9853007a846de654d1ebad1a22989cbbcfd"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Sat May 02 08:52:33 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 02 05:52:33 2026 +0000"
      },
      "message": "chore(deps): bump rocksdb to v11.1.1 (#3468)\n\nBump rocksdb to v11.1.1 (see:\nhttps://github.com/facebook/rocksdb/releases/tag/v11.1.1)\n\n**This PR need to merge** #3431 \n\n**Key changes**\n\n- Fix a bug in round-robin compaction that missed selecting input files\nthat are needed to guarantee data correctness and cause crashing in\ndebug builds or silent data corruption in release builds for Get()\n- Fix a memory accounting leak in IODispatcher\n- Add a new option open_files_async\n- Added BlockBasedTableOptions::kAuto index block search type that\nautomatically selects between binary and interpolation search on a\nper-index-block basis\n- Add memtable_batch_lookup_optimization option to use batch lookup\noptimization for memtable MultiGet\n- Added new mutable DB option verify_manifest_content_on_close (default:\nfalse)\n-\n\n---------\n\nCo-authored-by: PragmaTwice \u003ctwice@apache.org\u003e\nCo-authored-by: Twice \u003ctwice.mliu@gmail.com\u003e"
    },
    {
      "commit": "7a34b9853007a846de654d1ebad1a22989cbbcfd",
      "tree": "dd9a861a4cda36c49b3996a6ab819d00e4a5abab",
      "parents": [
        "3b29a4c768e4c37cc7ab051d8ac129e467bb1ea2"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Fri May 01 16:56:25 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 13:56:25 2026 +0000"
      },
      "message": "chore(deps): bump oneTBB to v2023.0.0 (#3473)\n\nBump oneTBB to v2023.0.0 (see:\nhttps://github.com/uxlfoundation/oneTBB/blob/master/RELEASE_NOTES.md)\n\nKey changes\n- Introduced ability to wait for a single task in a task_group instead\nof waiting for all tasks to finish. This increases reactivity and\ndecreases latency in key user workloads.\n- Introduced task_arena core type selector to better support hybrid\narchitectures with several core types\n- Added global control parameter to set default block time behavior on\nserver HW\n- Added new API to create a set of NUMA bound task arenas, simplifying\ncommon patterns used to optimize for NUMA architectures.\n- Using a hwloc version other than 1.11, 2.0, or 2.5 may cause an\nundefined behavior on Windows OS\n- Significantly improved scalability for concurrent ordered containers\non systems with many threads\n- Fixed ODR violations when public inline functions expose entities with\ninternal linkage\n-\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "3b29a4c768e4c37cc7ab051d8ac129e467bb1ea2",
      "tree": "8ab4c0bbdd870d0b200dbe3cd15cc8c0b244eedf",
      "parents": [
        "04d4e7fce8d1ad57178e56e5d97b7838dee619cc"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Fri May 01 15:59:15 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 20:59:15 2026 +0800"
      },
      "message": "chore(ci): bump crate-ci/typos to v1.46.0 (#3474)\n\nBump crate-ci/typos to v1.46.0\n\nChanges:\n\n- Updated the dictionary\n- Ignore ssh ed25519 public keys\n- (action) Use a temp dir for caching"
    },
    {
      "commit": "04d4e7fce8d1ad57178e56e5d97b7838dee619cc",
      "tree": "df1f62f3cb8a814f08e140e3e8033abb35953891",
      "parents": [
        "b04211e84efd6d694a0418d70ce029e02db2073e"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Wed Apr 29 05:59:12 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 02:59:12 2026 +0000"
      },
      "message": "chore(deps): bump jsoncons to v1.7.0 (#3464)\n\nBump jsoncons to v1.7.0 (full changelog:\nhttps://github.com/danielaparker/jsoncons/releases/tag/v1.7.0)\n\nKey changes\n\n- The jsonschema enum class walk_result has been renamed to walk_state\n- The enum staj_event_type has been redefined as a [BitMask\nType](https://en.cppreference.com/w/cpp/named_req/BitmaskType.html)\n- Reduced allocations in jsonschema compilation and validation\n- Fixed bugs"
    },
    {
      "commit": "b04211e84efd6d694a0418d70ce029e02db2073e",
      "tree": "7dd6702498a572f885638daf37ab32a8fba85689",
      "parents": [
        "27eae0d199b6a40b296d895073658354850087d6"
      ],
      "author": {
        "name": "Songqing Zhang",
        "email": "zhangsongqing164@163.com",
        "time": "Wed Apr 29 09:59:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 09:59:24 2026 +0800"
      },
      "message": "fix(scripting): reject negative FCALL key count (#3466)\n\nFCALL and FCALL_RO accepted numkeys\u003d-1 because the validation only\nrejected values\nsmaller than -1. That value was then used to construct key/arg vector\nranges from\nthe command arguments, which can produce an invalid iterator range and\ncrash or\nmis-handle the request.\n\nReject all negative numkeys values before splitting keys and args,\nmatching the\ncommand error message and preventing malformed FCALL input from reaching\nthe Lua\ncall path.\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "27eae0d199b6a40b296d895073658354850087d6",
      "tree": "4a3088114bc8f502b90a726038d48f4a534ff69e",
      "parents": [
        "edb033e5eb910c8663b69432096a704885430354"
      ],
      "author": {
        "name": "gongna-au",
        "email": "2036479155@qq.com",
        "time": "Tue Apr 28 17:47:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 17:47:13 2026 +0800"
      },
      "message": "feat(commands): implement CLIENT SETINFO subcommand (#3465)\n\n## Summary\n\nImplement the `CLIENT SETINFO` subcommand (introduced in Redis 7.2) to\nallow clients to set `lib-name` and `lib-ver` metadata on the\nconnection. Many modern Redis SDKs (go-redis v9, jedis 5, redis-py 5)\nautomatically send `CLIENT SETINFO` on connect — without this support,\nthose clients log errors on every new connection.\n\n## Changes\n\n- **`src/server/redis_connection.h`**: Add `lib_name_` / `lib_ver_`\nfields and getters/setters to the `Connection` class.\n- **`src/server/redis_connection.cc`**: Include `lib-name\u003d` and\n`lib-ver\u003d` in `CLIENT LIST` / `CLIENT INFO` output, matching the Redis\noutput format.\n- **`src/commands/cmd_server.cc`**: Add `SETINFO` subcommand parsing and\nexecution in `CommandClient`. Supports `LIB-NAME` and `LIB-VER`\nattributes, validates charset (same rules as `SETNAME`), and rejects\nunrecognized attributes.\n- **`tests/gocase/unit/client/client_setinfo_test.go`**: Integration\ntests covering set/get, `CLIENT INFO`/`LIST` output, case-insensitivity,\nempty value (clear), unknown attribute rejection, and invalid\ncharacters.\n\n## Behavior\n\n```\n\u003e CLIENT SETINFO LIB-NAME go-redis\nOK\n\u003e CLIENT SETINFO LIB-VER 9.7.0\nOK\n\u003e CLIENT INFO\nid\u003d3 addr\u003d127.0.0.1:6379 fd\u003d8 name\u003d age\u003d5 idle\u003d0 flags\u003dN namespace\u003d qbuf\u003d0 obuf\u003d0 cmd\u003dclient lib-name\u003dgo-redis lib-ver\u003d9.7.0\n```\n\n- `CLIENT SETINFO LIB-NAME \u003cvalue\u003e` — sets the client library name\n- `CLIENT SETINFO LIB-VER \u003cvalue\u003e` — sets the client library version\n- Empty string clears the field\n- Attribute names are case-insensitive\n- Values follow the same charset restriction as `CLIENT SETNAME` (no\nspaces/control chars)\n- Unrecognized attributes return: `ERR Unrecognized option \u0027\u003cattr\u003e\u0027`\n\n---------\n\nCo-authored-by: gongna-au \u003cgongna1@xiaomi.com\u003e\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "edb033e5eb910c8663b69432096a704885430354",
      "tree": "efb9f277b71513b5a7db27c150344c00a125b392",
      "parents": [
        "855bad3c13b6fd9fc9d8397ade8aa1a05dc747b5"
      ],
      "author": {
        "name": "Songqing Zhang",
        "email": "zhangsongqing164@163.com",
        "time": "Tue Apr 28 10:25:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 02:25:15 2026 +0000"
      },
      "message": "fix(stream): align XPENDING ID parsing and PEL range with XRANGE (incomplete IDs, exclusive bounds) (#3437)\n\nXPENDING extended form must use the same start/end ID rules as XRANGE:\nparse the end with ParseRangeEnd so a bare millisecond includes all\nsequence numbers in that ms; accept \u0027(\u0027 for exclusive start/end and\nhonor them when scanning the pending entry list.\n  \nRefs: https://redis.io/docs/latest/commands/xpending/ (\"in a similar way\nwe do it with XRANGE\")\nRefs: https://redis.io/docs/latest/commands/xrange/ (\"closed interval\" /\ninclusive unless \u0027(\u0027 prefix)\n\n---------\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "855bad3c13b6fd9fc9d8397ade8aa1a05dc747b5",
      "tree": "5754fbdbab88e255afa7e52e8fe16c4dc9ad0ef2",
      "parents": [
        "34ce39843bd3527d8e48e394b341fbb6c3c3a811"
      ],
      "author": {
        "name": "gongna-au",
        "email": "2036479155@qq.com",
        "time": "Mon Apr 27 21:20:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 13:20:35 2026 +0000"
      },
      "message": "feat(server): implement LATENCY command set (Redis 7.0+ compatibility) (#3461)\n\n## Summary\nThis PR implements the `LATENCY` command for Kvrocks, focusing on the\n`LATENCY HISTOGRAM` subcommand introduced in Redis 7.0. It leverages the\nexisting histogram infrastructure (`histogram-bucket-boundaries` config\n+ `CommandHistogram` stats) to expose per-command latency distributions\nvia the standard Redis protocol.\n\n## Changes\n### New File: `src/commands/cmd_latency.cc`\n\nImplements `CommandLatency` with three subcommands:\n\n- **`LATENCY HISTOGRAM [command ...]`** — Returns a cumulative\ndistribution of command latencies.\n- Output uses the Redis 7.0 format: outer map keyed by command name,\neach value is a map with `calls` (integer) and `histogram_usec` (map of\nboundary → cumulative count).\n- Frequency counts from `CommandHistogram::buckets` are converted to\ncumulative sums at output time.\n- Empty leading buckets are skipped (matching Redis behavior of omitting\nzero-count ranges).\n  - The last bucket (overflow) is rendered as `\"inf\"`.\n- Returns an empty map if `histogram-bucket-boundaries` is not\nconfigured.\n\n- **`LATENCY RESET [event ...]`** — Returns `(integer) 0`.\n- In Redis, this resets the spike-sampling event system (`LATENCY\nLATEST`/`HISTORY`/`GRAPH`), which Kvrocks does not have. Per Redis docs,\nhistogram data is reset via `CONFIG RESETSTAT`, not `LATENCY RESET`.\nReturning 0 correctly indicates no event classes were reset.\n\n- **`LATENCY HELP`** — Returns usage information for all supported\nsubcommands.\n\n### Build System\nNo changes needed. The file is automatically picked up by\n`file(GLOB_RECURSE KVROCKS_SRCS src/*.cc)` in root `CMakeLists.txt`.\n\n### Command Registration\nRegistered under `CommandCategory::Server` via\n`REDIS_REGISTER_COMMANDS(Server, ...)`, same category as\n`cmd_server.cc`. This is safe because the macro generates unique static\nvariables per translation unit using `__LINE__`.\n\n## Compatibility\n\n| Subcommand | Redis | Kvrocks | Note |\n| --- | --- | --- | --- |\n| `LATENCY HISTOGRAM [cmd ...]` | 7.0+ | **Yes** | Cumulative\ndistribution, `histogram_usec` field, empty buckets skipped |\n| `LATENCY HELP` | 7.0+ | **Yes** | |\n| `LATENCY RESET [event ...]` | 2.8.13+ | **Yes** | Always returns 0 (no\nspike-sampling infrastructure) |\n| `LATENCY LATEST` | 2.8.13+ | No | Requires spike-sampling event system\n|\n| `LATENCY HISTORY event` | 2.8.13+ | No | Requires spike-sampling event\nsystem |\n| `LATENCY GRAPH event` | 2.8.13+ | No | Requires spike-sampling event\nsystem |\n| `LATENCY DOCTOR` | 2.8.13+ | No | Requires spike-sampling event system\n|\n\n## Configuration Prerequisite\nHistograms are only tracked when `histogram-bucket-boundaries` is set in\n`kvrocks.conf`. Example:\n```\nhistogram-bucket-boundaries 1,5,10,25,50,100,250,500,1000,2500,5000,10000\n```\nIf empty (default), `LATENCY HISTOGRAM` returns an empty map — this is\nexpected behavior, not an error.\n\n## RESP Protocol Details\n- Uses RESP3 Map (`%`) via `conn-\u003eHeaderOfMap()`, which auto-degrades to\ninterleaved RESP2 arrays.\n- Per-command entry structure:\n  ```\n  command_name \u003d\u003e {\n    \"calls\"          \u003d\u003e (integer) N,\n    \"histogram_usec\" \u003d\u003e {\n      boundary_1 \u003d\u003e (integer) cumulative_count_1,\n      boundary_2 \u003d\u003e (integer) cumulative_count_2,\n      ...\n      \"inf\"      \u003d\u003e (integer) total_calls\n    }\n  }\n  ```\n\nCo-authored-by: gongna-au \u003cgongna1@xiaomi.com\u003e\nCo-authored-by: Sisyphus \u003cclio-agent@sisyphuslabs.ai\u003e\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "34ce39843bd3527d8e48e394b341fbb6c3c3a811",
      "tree": "7989f716e2023a0b2d4a1d0f718347dc8544b5d7",
      "parents": [
        "2fb270c77e2175fd0a9f3be73e550712e0876cdb"
      ],
      "author": {
        "name": "kirito632",
        "email": "debuaqua40@gmail.com",
        "time": "Mon Apr 27 14:56:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 06:56:04 2026 +0000"
      },
      "message": "feat(string): add digest length validation for DelEX IFDEQ/IFDNE (#3453)\n\n- Add 16-character digest validation for IFDEQ/IFDNE options in DelEX\ncommand\n- Return clear error if digest length is not exactly 16 hexadecimal\ncharacters\n- Add test case for invalid digest length rejection as requested by\nreviewer\n\n### AI-Assisted Contribution Disclosure\nThis contribution complies with the [ASF AI-assisted contribution\nguidelines](https://kvrocks.apache.org/community/contributing#guidelines-for-ai-assisted-contributions).\n* **AI Tool Usage :** AI was used to help format the Go test template\nbased on the reviewer\u0027s feedback and to reference the `util::EqualICase`\npattern.\n* **Human Implementation \u0026 Validation:** I manually implemented the\ncase-insensitive digest comparison logic for the `DelEX` command and\nintegrated the requested test cases. I fully understand these behavioral\nchanges (aligning with Redis Stack) and have successfully run all\nregression tests locally.\n\nThis commit only modifies DelEX command behavior.\n\n---------\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "2fb270c77e2175fd0a9f3be73e550712e0876cdb",
      "tree": "9e0c66bd1551db41703110c9935a9e44bedb0959",
      "parents": [
        "8d021258308790627524f2cae594c75f22be2c31"
      ],
      "author": {
        "name": "Reilly.tang",
        "email": "tang.ruilin@foxmail.com",
        "time": "Mon Apr 27 12:25:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 12:25:15 2026 +0800"
      },
      "message": "fix(tdigest): fix incorrect min/max default initialization (#3463)"
    },
    {
      "commit": "8d021258308790627524f2cae594c75f22be2c31",
      "tree": "50ddffea422f47ffcb64713b7bc9382af8e68504",
      "parents": [
        "2520bdac5a61b3515c7db6aff3c145e04c26b1cb"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Fri Apr 24 13:18:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 24 13:18:31 2026 +0800"
      },
      "message": "docs(agents): clarify agent workflow guidance (#3455)\n\nThis updates AGENTS.md to make repository-specific workflows clearer so\nagents can work more reliably and efficiently.\n\nAssisted-by: Codex"
    },
    {
      "commit": "2520bdac5a61b3515c7db6aff3c145e04c26b1cb",
      "tree": "2535319a0404ec8d7f6c23e68810aef414ff7d1d",
      "parents": [
        "7c4972814fcbeee94011fc17cafc542798379a51"
      ],
      "author": {
        "name": "hulk",
        "email": "hulk.website@gmail.com",
        "time": "Wed Apr 22 10:33:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 02:33:35 2026 +0000"
      },
      "message": "fix(command): APPLYBATCH should use the admin permission (#3458)\n\nThe server will apply whatever it writes in APPLYBATCH command, so we\nshould make sure it is only being sent with the admin permission.\n\nThis is a breaking change from the user side, we need to highlight this\nin the release."
    },
    {
      "commit": "7c4972814fcbeee94011fc17cafc542798379a51",
      "tree": "c411a10ee127d8e9b95e19abfd02bfa39ca005f6",
      "parents": [
        "64188fedbe891aefaa6d24c4093b40c0c3f6d82a"
      ],
      "author": {
        "name": "纪华裕",
        "email": "jihuayu123@gmail.com",
        "time": "Tue Apr 21 22:22:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 14:22:54 2026 +0000"
      },
      "message": "fix(geo): make geo store commands return the resulting set size with COUNT (#3457)\n\nFix the return value of geo store commands when `COUNT` is specified.\n\nPreviously, these commands stored only the limited number of members in\nthe destination zset, but returned the full matched result count instead\nof the actual stored count.\n\nAssisted-by: Codex"
    },
    {
      "commit": "64188fedbe891aefaa6d24c4093b40c0c3f6d82a",
      "tree": "98a4cf71b9c5480524ff6b9ed68990c9de93bd2b",
      "parents": [
        "98c051cacb0f77192f8f086050bcb3f5eee2351f"
      ],
      "author": {
        "name": "Songqing Zhang",
        "email": "zhangsongqing164@163.com",
        "time": "Fri Apr 17 11:24:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 03:24:38 2026 +0000"
      },
      "message": "fix(geo): delete store_key instead of user_key in SearchStore (#3456)\n\nWhen GEOSEARCHSTORE yields zero results, the code incorrectly deleted\nthe source key (user_key) instead of the destination key (store_key)."
    },
    {
      "commit": "98c051cacb0f77192f8f086050bcb3f5eee2351f",
      "tree": "4657789455738a021cccd94499e847eb57fec3ed",
      "parents": [
        "5ebde751f0e15058e9823978a02b062b3a20c115"
      ],
      "author": {
        "name": "Songqing Zhang",
        "email": "zhangsongqing164@163.com",
        "time": "Fri Apr 17 09:13:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 01:13:43 2026 +0000"
      },
      "message": "fix(stream): allow group and consumer names starting with digits (#3442)\n\nRedis does not restrict group or consumer names from starting with\ndigits. The restriction was kvrocks-specific and broke compatibility."
    },
    {
      "commit": "5ebde751f0e15058e9823978a02b062b3a20c115",
      "tree": "22938c57741d65456f9faa90e1123408aefc21e6",
      "parents": [
        "8d4d8ea6f40fb57fc1f0148e4d1582934592397f"
      ],
      "author": {
        "name": "Songqing Zhang",
        "email": "zhangsongqing164@163.com",
        "time": "Thu Apr 16 22:26:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 22:26:12 2026 +0800"
      },
      "message": "fix(hyperloglog): use namespace-prefixed key in PFMERGE GetMetadata (#3441)\n\nMerge called GetMetadata with the raw user key instead of the\nnamespace-prefixed key, causing the destination\u0027s existing metadata to\nnever be found and potentially orphaning old sub-keys.\n\n---------\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "8d4d8ea6f40fb57fc1f0148e4d1582934592397f",
      "tree": "b10a5c88324a593a156b14f6508eb0b192b38f94",
      "parents": [
        "d942f530af1bdbf442dd0ae063bb77c1965ff510"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Thu Apr 16 11:18:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 11:18:42 2026 +0800"
      },
      "message": "feat(commands): expose hash, list and json metadata in kmetadata (#3454)\n\nThis extends KMETADATA to expose hash, list, and JSON-specific metadata\nfields. It makes debugging and tests easier by improving observability\naround internal metadata.\n\nAssisted-by: Codex"
    },
    {
      "commit": "d942f530af1bdbf442dd0ae063bb77c1965ff510",
      "tree": "91db75b2331e4f57dc1cf153ba1c0549f416bf66",
      "parents": [
        "27fbff104fe918ff8733bbf6d9ac8810facc0552"
      ],
      "author": {
        "name": "纪华裕",
        "email": "jihuayu123@gmail.com",
        "time": "Wed Apr 15 15:38:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 07:38:09 2026 +0000"
      },
      "message": "feat(ci): add caching for CMake FetchContent in CI workflow (#3448)\n\nDue to the current instability of GitHub services, dependency download\nfailures occur frequently during CI runs. I add FetchContent caching to\nprevent these network issues from failing the CI."
    },
    {
      "commit": "27fbff104fe918ff8733bbf6d9ac8810facc0552",
      "tree": "0aec4ea4d3b2684cd47ba922f90739ee65b9da89",
      "parents": [
        "505108c35fbce3eae16db870141bb34e9d3654bf"
      ],
      "author": {
        "name": "Reilly.tang",
        "email": "tang.ruilin@foxmail.com",
        "time": "Wed Apr 15 14:25:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 06:25:16 2026 +0000"
      },
      "message": "fix(tdigest): correct TDIGEST.MERGE parser for COMPRESSION parameter. (#3449)\n\nFix #3447\n\nThe parser incorrectly used two independent `if` statements to check\nCOMPRESSION and OVERRIDE parameters. When COMPRESSION was successfully\nparsed, the code continued to the second `if` which would fail since the\nparser had reached the end, causing \"ERR wrong keyword\" error.\n\nFixed by changing the second `if` to `else if` to form a proper\nif-else-if-else chain.\n\nSigned-off-by: reilly \u003creilly@example.com\u003e\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    },
    {
      "commit": "505108c35fbce3eae16db870141bb34e9d3654bf",
      "tree": "4d5f0a0e575550784665db944d71546876c8b66a",
      "parents": [
        "75df3740ae2f65c4f1b5382a1a57ba42d947a8b2"
      ],
      "author": {
        "name": "Reilly.tang",
        "email": "tang.ruilin@foxmail.com",
        "time": "Wed Apr 15 10:42:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 02:42:04 2026 +0000"
      },
      "message": "fix(tdigest): merge into existing dest without OVERRIDE (#3412)\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e\nCo-authored-by: Edward Xu \u003cxuxiangad@gmail.com\u003e"
    },
    {
      "commit": "75df3740ae2f65c4f1b5382a1a57ba42d947a8b2",
      "tree": "0b022cc984d548dd128b974aa835c5cc698dc8e0",
      "parents": [
        "37140d6c30be4fa91e8a810e8be83981d618ce12"
      ],
      "author": {
        "name": "Aleks Lozovyuk",
        "email": "aleks.raiden@gmail.com",
        "time": "Tue Apr 14 20:24:47 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 17:24:47 2026 +0000"
      },
      "message": "chore(deps): bump jemalloc to 5.3.1 (#3451)\n\nBump jemalloc to 5.3.1 (use jemalloc repo again, see full changelog:\nhttps://github.com/jemalloc/jemalloc/releases/tag/5.3.1)\n\nLot of bugfix, portability improvements and optimizations.\n\nCo-authored-by: Twice \u003ctwice.mliu@gmail.com\u003e"
    },
    {
      "commit": "37140d6c30be4fa91e8a810e8be83981d618ce12",
      "tree": "d91829b64ec585fb661f3c25051c405e8b950c7d",
      "parents": [
        "94e4c8ef7e6bb5a98d892a05c4cbc6280c15f280"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Tue Apr 14 23:03:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 23:03:38 2026 +0800"
      },
      "message": "feat(hash): initialize field expiration metadata and subkey en/decoding (#3444)\n\nPart of #3436. See proposal #3432.\n\nThis PR includes:\n- metadata changes for the new encoding\n- subkey encoding/decoding and related logic in `redis_hash.cc`\n- new config option adding\n- an enhancement to `SubKeyScanner` so that it can be used for HFE\n- run hash test cases for both modes\n\nAssisted-by: Codex"
    },
    {
      "commit": "94e4c8ef7e6bb5a98d892a05c4cbc6280c15f280",
      "tree": "9da937043f369d938354ebdea4a20987c0161404",
      "parents": [
        "61f4dc232704c589b28c9fd1b4374b31fffe7d7b"
      ],
      "author": {
        "name": "Songqing Zhang",
        "email": "zhangsongqing164@163.com",
        "time": "Fri Apr 10 22:35:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 14:35:19 2026 +0000"
      },
      "message": "fix(geo): use strict weak ordering in sortGeoPointDESC comparator (#3439)\n\nThe GEO sort DESC comparator used \u003e\u003d instead of \u003e, violating the strict\nweak\nordering requirement of std::sort and causing undefined behavior when\n    elements have equal distances."
    },
    {
      "commit": "61f4dc232704c589b28c9fd1b4374b31fffe7d7b",
      "tree": "778a031ce6529b8e4e8e243cc6bbb1fc7389e285",
      "parents": [
        "2815e082fe2478331f645feb9b994e733c9fbe42"
      ],
      "author": {
        "name": "Twice",
        "email": "twice.mliu@gmail.com",
        "time": "Fri Apr 10 13:46:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 13:46:20 2026 +0800"
      },
      "message": "build: disable LTO by default (#3440)\n\nDisabled link-time optimization (LTO) by default and removed related\nconditions to simplify CMake configuration.\n\nUsers need to manually enable LTO by `-DENABLE_LTO\u003dON` if they want LTO."
    },
    {
      "commit": "2815e082fe2478331f645feb9b994e733c9fbe42",
      "tree": "dba9d96c74ca9d13c0fbc0f73c860f2d5c4d7c83",
      "parents": [
        "29b23731ca9096f60be82bbc72d8c1c45be8d021"
      ],
      "author": {
        "name": "Songqing Zhang",
        "email": "zhangsongqing164@163.com",
        "time": "Fri Apr 10 11:26:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 03:26:03 2026 +0000"
      },
      "message": "fix(stream): correct XREVRANGE minimum argument count from 2 to 4 (#3438)\n\nXREVRANGE requires key, end, start and [COUNT count] arguments (4\nminimum), but was registered with -2 which could cause out-of-bounds\naccess and crashes.\nRefs: https://redis.io/docs/latest/commands/xrevrange/"
    },
    {
      "commit": "29b23731ca9096f60be82bbc72d8c1c45be8d021",
      "tree": "41a257b5769f8687fa0cb9dc09269a7f45c69bac",
      "parents": [
        "ec523ccec1fe77bde23b942bba1bdef1542448e9"
      ],
      "author": {
        "name": "sryan yuan",
        "email": "sryan@qq.com",
        "time": "Thu Apr 09 15:20:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 07:20:44 2026 +0000"
      },
      "message": "fix(command): fix static initialization crash on Kunpeng/Kylin platform (#3416)\n\n## Problem:\n\nWe\u0027ve identified a critical startup crash specific to Kunpeng processors\n(aarch64) running Kylin OS v10 with GCC 12.5.0. The root cause is a\nstatic initialization order issue where:\n\n* Static command registration objects (e.g., RegisterToCommandTable in\ncommand files) initialize before CommandTable\u0027s static containers\n* This leads to accessing uninitialized containers during startup:\n```cpp\nCommandTable::commands[attr.name] \u003d ...;  // ❌ Accesses uninitialized map\n```\n\n* On Kunpeng/Kylin/GCC12.5, this consistently manifests as:\n  * Segmentation faults during static initialization\n  * 100% failure rate in cold starts\n\n## Solution:\n\nImplement the \"construct on first use\" pattern to guarantee safe\ninitialization.\n\n## Key Changes:\n\n* Converted all static members in CommandTable to accessor functions\n* Updated all references to use function-call \n* Maintained identical public interface while fixing initialization\nguarantees\n\nCo-authored-by: Twice \u003ctwice.mliu@gmail.com\u003e"
    },
    {
      "commit": "ec523ccec1fe77bde23b942bba1bdef1542448e9",
      "tree": "1f6df0ba8f275ec5676c863a8e3c8e01ca08e55e",
      "parents": [
        "9a3b8176b8c976d759d571d5105da49f24d08b94"
      ],
      "author": {
        "name": "nagisa-kunhah",
        "email": "61525444+nagisa-kunhah@users.noreply.github.com",
        "time": "Thu Apr 09 13:04:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 05:04:31 2026 +0000"
      },
      "message": "feat: Add support for dictionary compression settings (#3425)\n\nissue: #3409\n\n---------\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e\nCo-authored-by: Twice \u003ctwice.mliu@gmail.com\u003e"
    },
    {
      "commit": "9a3b8176b8c976d759d571d5105da49f24d08b94",
      "tree": "abf45dc920957a66900635585e52a4f3ecb96a4a",
      "parents": [
        "b272b5c1b673385ca6e58cf5c595fce252782e22"
      ],
      "author": {
        "name": "纪华裕",
        "email": "jihuayu123@gmail.com",
        "time": "Thu Apr 09 11:57:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 03:57:22 2026 +0000"
      },
      "message": "fix(script): upgrade Lua version to fix CVE-2024-31449 and CVE-2025-49844 (#3435)\n\nUpgrade Lua version to fix CVE-2024-31449 and CVE-2025-49844.\nhttps://github.com/RocksLabs/lua/commit/c77781d0c23df021a903a9a6199d301ec559e9cd\n\n\nfix https://github.com/apache/kvrocks/issues/3434 fix\nhttps://github.com/apache/kvrocks/issues/3433"
    },
    {
      "commit": "b272b5c1b673385ca6e58cf5c595fce252782e22",
      "tree": "3387530d68a69520840dc878a161536070b5f37f",
      "parents": [
        "4aede367b72416a591623c2f04f176ab3e74c40a"
      ],
      "author": {
        "name": "Songqing Zhang",
        "email": "zhangsongqing164@163.com",
        "time": "Thu Apr 09 09:01:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 01:01:42 2026 +0000"
      },
      "message": "fix(set): propagate storage errors in Set instead of treating as NotFound (#3428)\n\nPreviously, when `storage_-\u003eGet()` returned a non-NotFound error (e.g.,\nI/O error or corruption) during SADD, the code fell through to the\n`batch-\u003ePut` path, incorrectly treating the error as \"member not found\"\nand adding the member. This could silently inflate `metadata.size` and\ninsert duplicate members on storage failures.\n\nAdd an explicit `!s.IsNotFound()` check to propagate real errors, which\nis consistent with how `Set::Remove` already handles the same pattern.\n\n---------\n\nCo-authored-by: 纪华裕 \u003cjihuayu123@gmail.com\u003e"
    }
  ],
  "next": "4aede367b72416a591623c2f04f176ab3e74c40a"
}
