)]}'
{
  "commit": "632be0cfae49d97ceee1c5edd5b3dd72f6e0ce5e",
  "tree": "1e406c486516527b733ac14ccd9ecccdfb32b389",
  "parents": [
    "05916c1776059ef0ab0edc1cdba84975d7f379e2"
  ],
  "author": {
    "name": "dependabot[bot]",
    "email": "49699333+dependabot[bot]@users.noreply.github.com",
    "time": "Thu Oct 29 03:19:40 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Oct 29 03:19:40 2026 +0000"
  },
  "message": "build(deps-user): Bump the \"user-facing\" group with 1 update across multiple ecosystems (#4378)\n\nBumps the user-facing group with 2 updates in the /tools directory:\n[certifi](https://github.com/certifi/python-certifi) and\n[importlib-metadata](https://github.com/python/importlib_metadata).\nBumps the user-facing group with 2 updates in the /tools/publish\ndirectory: [certifi](https://github.com/certifi/python-certifi) and\n[importlib-metadata](https://github.com/python/importlib_metadata).\n\nUpdates `certifi` from 2026.10.19 to 2026.10.23\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/certifi/python-certifi/commit/b60466c9f2882d9cf088943c650b0faac06c080c\"\u003e\u003ccode\u003eb60466c\u003c/code\u003e\u003c/a\u003e\n2026.10.23 (\u003ca\nhref\u003d\"https://redirect.github.com/certifi/python-certifi/issues/445\"\u003e#445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/certifi/python-certifi/compare/2026.10.19...2026.10.23\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `importlib-metadata` from 9.0.1 to 10.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/blob/main/NEWS.rst\"\u003eimportlib-metadata\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev10.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDetecting whether a distribution supplies metadata no longer reads\nor parses\nthat metadata where the metadata directory can be inspected instead, so\nretrieving a distribution by name, which prefers the valid candidates,\nis\nsubstantially faster.\u003c/li\u003e\n\u003cli\u003eReverted the preference for the greater metadata directory added in\nv9.1.0.\nThe ordering was lexicographic on the directory name and not on the\nparsed\nversion, so it only approximated a preference for the newer version.\nWhere a\npath supplies more than one metadata directory for a distribution,\ndiscovery\nonce again reports them in the order the path supplies\n\u003ccode\u003epython/cpython#100666\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eentry_points()\u003c/code\u003e now prefers distributions whose metadata\nis readable, so\nan empty metadata directory left behind by an unclean upgrade no longer\nshadows the valid one of the same name and suppresses its entry points.\nInvalid distributions are deferred to the end of the enumeration rather\nthan\ndropped. (\u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/534\"\u003e#534\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eThe preference for valid distributions no longer propagates the\n\u003ccode\u003eMetadataNotFound\u003c/code\u003e of a distribution that a provider derived\nfrom\n\u003ccode\u003eimportlib.metadata\u003c/code\u003e, whose exception is a different class\nfrom this\npackage\u0027s and so escaped the preference rather than marking the\ndistribution\ninvalid.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev10.0.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eIDistribution\u003c/code\u003e and \u003ccode\u003eIPackagePath\u003c/code\u003e\nprotocols so consumers can target a stable, shared interface across\n\u003ccode\u003eimportlib.metadata\u003c/code\u003e and \u003ccode\u003eimportlib_metadata\u003c/code\u003e. A\nprovider supplying its own \u003ccode\u003eDistribution\u003c/code\u003e subclass is warned\nabout only when the class omits members that interface requires, not\nmerely because it derives from \u003ccode\u003eimportlib.metadata\u003c/code\u003e.\n\u003ccode\u003eorigin\u003c/code\u003e is exempt from that expectation until support for\nPython 3.12 is dropped, as there is none to inherit before Python 3.13.\n(\u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/486\"\u003e#486\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen providers supply objects from \u003ccode\u003eimportlib.metadata\u003c/code\u003e,\nthey are now adapted to the classes from\n\u003ccode\u003eimportlib_metadata\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/486\"\u003e#486\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev9.1.0\u003c/h1\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/python/importlib_metadata/commit/d196fdbd3ebf90542b51f7215c230c17ef376cb0\"\u003e\u003ccode\u003ed196fdb\u003c/code\u003e\u003c/a\u003e\nFinalize\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/5d253aecaafb2fe88f2c0f6ff9d579fa95b24f09\"\u003e\u003ccode\u003e5d253ae\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/553\"\u003e#553\u003c/a\u003e\nfrom python/bugfix/534-entry-points-prefer-valid\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/0aa24f3392439c552a89fbd7fcc3cdc20d8f0105\"\u003e\u003ccode\u003e0aa24f3\u003c/code\u003e\u003c/a\u003e\nPrefer valid distributions when collecting entry points.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/e52be782b23218fff2dff7024654fae2d4410801\"\u003e\u003ccode\u003ee52be78\u003c/code\u003e\u003c/a\u003e\nDetect the presence of metadata without reading it.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/60bbaca797424d8234a703f0b076a12592079883\"\u003e\u003ccode\u003e60bbaca\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/552\"\u003e#552\u003c/a\u003e\nfrom python/debt/revert-prefer-greater-version\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/7e162d8a86815484cc26291e39052be5fbcf7514\"\u003e\u003ccode\u003e7e162d8\u003c/code\u003e\u003c/a\u003e\nRevert \u0026quot;Prefer the greater metadata directory when a path supplies\nseveral.\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/3be14168f846b406b0f3a48bb1907fe70c5fb7c8\"\u003e\u003ccode\u003e3be1416\u003c/code\u003e\u003c/a\u003e\nFinalize\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/e3dad222d3ed33f6b68306eb92e537e2bfc83690\"\u003e\u003ccode\u003ee3dad22\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/505\"\u003e#505\u003c/a\u003e\nfrom python/bugfix/486-local-objects\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/301b791a4b4281dd5100eb26fa53466e75b28fe5\"\u003e\u003ccode\u003e301b791\u003c/code\u003e\u003c/a\u003e\nFinalize\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/4b7c45f3d1a5ad3fed28bf52db377770b754ef4f\"\u003e\u003ccode\u003e4b7c45f\u003c/code\u003e\u003c/a\u003e\nAvoid a dot in the news fragment id.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/compare/v9.0.1...v10.1.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `certifi` from 2026.10.19 to 2026.10.23\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/certifi/python-certifi/commit/b60466c9f2882d9cf088943c650b0faac06c080c\"\u003e\u003ccode\u003eb60466c\u003c/code\u003e\u003c/a\u003e\n2026.10.23 (\u003ca\nhref\u003d\"https://redirect.github.com/certifi/python-certifi/issues/445\"\u003e#445\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eSee full diff in \u003ca\nhref\u003d\"https://github.com/certifi/python-certifi/compare/2026.10.19...2026.10.23\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\nUpdates `importlib-metadata` from 9.0.1 to 10.1.0\n\u003cdetails\u003e\n\u003csummary\u003eChangelog\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/blob/main/NEWS.rst\"\u003eimportlib-metadata\u0027s\nchangelog\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch1\u003ev10.1.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eDetecting whether a distribution supplies metadata no longer reads\nor parses\nthat metadata where the metadata directory can be inspected instead, so\nretrieving a distribution by name, which prefers the valid candidates,\nis\nsubstantially faster.\u003c/li\u003e\n\u003cli\u003eReverted the preference for the greater metadata directory added in\nv9.1.0.\nThe ordering was lexicographic on the directory name and not on the\nparsed\nversion, so it only approximated a preference for the newer version.\nWhere a\npath supplies more than one metadata directory for a distribution,\ndiscovery\nonce again reports them in the order the path supplies\n\u003ccode\u003epython/cpython#100666\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eBugfixes\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eentry_points()\u003c/code\u003e now prefers distributions whose metadata\nis readable, so\nan empty metadata directory left behind by an unclean upgrade no longer\nshadows the valid one of the same name and suppresses its entry points.\nInvalid distributions are deferred to the end of the enumeration rather\nthan\ndropped. (\u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/534\"\u003e#534\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eThe preference for valid distributions no longer propagates the\n\u003ccode\u003eMetadataNotFound\u003c/code\u003e of a distribution that a provider derived\nfrom\n\u003ccode\u003eimportlib.metadata\u003c/code\u003e, whose exception is a different class\nfrom this\npackage\u0027s and so escaped the preference rather than marking the\ndistribution\ninvalid.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev10.0.0\u003c/h1\u003e\n\u003ch2\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eAdded \u003ccode\u003eIDistribution\u003c/code\u003e and \u003ccode\u003eIPackagePath\u003c/code\u003e\nprotocols so consumers can target a stable, shared interface across\n\u003ccode\u003eimportlib.metadata\u003c/code\u003e and \u003ccode\u003eimportlib_metadata\u003c/code\u003e. A\nprovider supplying its own \u003ccode\u003eDistribution\u003c/code\u003e subclass is warned\nabout only when the class omits members that interface requires, not\nmerely because it derives from \u003ccode\u003eimportlib.metadata\u003c/code\u003e.\n\u003ccode\u003eorigin\u003c/code\u003e is exempt from that expectation until support for\nPython 3.12 is dropped, as there is none to inherit before Python 3.13.\n(\u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/486\"\u003e#486\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003eDeprecations and Removals\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eWhen providers supply objects from \u003ccode\u003eimportlib.metadata\u003c/code\u003e,\nthey are now adapted to the classes from\n\u003ccode\u003eimportlib_metadata\u003c/code\u003e. (\u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/486\"\u003e#486\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1\u003ev9.1.0\u003c/h1\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/python/importlib_metadata/commit/d196fdbd3ebf90542b51f7215c230c17ef376cb0\"\u003e\u003ccode\u003ed196fdb\u003c/code\u003e\u003c/a\u003e\nFinalize\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/5d253aecaafb2fe88f2c0f6ff9d579fa95b24f09\"\u003e\u003ccode\u003e5d253ae\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/553\"\u003e#553\u003c/a\u003e\nfrom python/bugfix/534-entry-points-prefer-valid\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/0aa24f3392439c552a89fbd7fcc3cdc20d8f0105\"\u003e\u003ccode\u003e0aa24f3\u003c/code\u003e\u003c/a\u003e\nPrefer valid distributions when collecting entry points.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/e52be782b23218fff2dff7024654fae2d4410801\"\u003e\u003ccode\u003ee52be78\u003c/code\u003e\u003c/a\u003e\nDetect the presence of metadata without reading it.\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/60bbaca797424d8234a703f0b076a12592079883\"\u003e\u003ccode\u003e60bbaca\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/552\"\u003e#552\u003c/a\u003e\nfrom python/debt/revert-prefer-greater-version\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/7e162d8a86815484cc26291e39052be5fbcf7514\"\u003e\u003ccode\u003e7e162d8\u003c/code\u003e\u003c/a\u003e\nRevert \u0026quot;Prefer the greater metadata directory when a path supplies\nseveral.\u0026quot;\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/3be14168f846b406b0f3a48bb1907fe70c5fb7c8\"\u003e\u003ccode\u003e3be1416\u003c/code\u003e\u003c/a\u003e\nFinalize\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/e3dad222d3ed33f6b68306eb92e537e2bfc83690\"\u003e\u003ccode\u003ee3dad22\u003c/code\u003e\u003c/a\u003e\nMerge pull request \u003ca\nhref\u003d\"https://redirect.github.com/python/importlib_metadata/issues/505\"\u003e#505\u003c/a\u003e\nfrom python/bugfix/486-local-objects\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/301b791a4b4281dd5100eb26fa53466e75b28fe5\"\u003e\u003ccode\u003e301b791\u003c/code\u003e\u003c/a\u003e\nFinalize\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/commit/4b7c45f3d1a5ad3fed28bf52db377770b754ef4f\"\u003e\u003ccode\u003e4b7c45f\u003c/code\u003e\u003c/a\u003e\nAvoid a dot in the news fragment id.\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/python/importlib_metadata/compare/v9.0.1...v10.1.0\"\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",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "be273c80fe9dcdc28b9023b4b55c584612e108da",
      "old_mode": 33188,
      "old_path": "tools/publish/requirements_darwin.txt",
      "new_id": "6fe7ceeba5ddc1cf93809398308d9d12a15e7a47",
      "new_mode": 33188,
      "new_path": "tools/publish/requirements_darwin.txt"
    },
    {
      "type": "modify",
      "old_id": "a4921dcc7e34b6a35c05cfd5b644e9e61c84c68c",
      "old_mode": 33188,
      "old_path": "tools/publish/requirements_linux.txt",
      "new_id": "9d870a4207f06c6bf80edd7ac504d86a833c3b6f",
      "new_mode": 33188,
      "new_path": "tools/publish/requirements_linux.txt"
    },
    {
      "type": "modify",
      "old_id": "979347f9cd80b924f16bd3c47c9d9c831aaebbf7",
      "old_mode": 33188,
      "old_path": "tools/publish/requirements_universal.txt",
      "new_id": "572dfabd23df81bfa78737d243ad94a6627a5255",
      "new_mode": 33188,
      "new_path": "tools/publish/requirements_universal.txt"
    },
    {
      "type": "modify",
      "old_id": "41d5efd07894d150552943e630c6be45379e9518",
      "old_mode": 33188,
      "old_path": "tools/publish/requirements_windows.txt",
      "new_id": "6f6083d15d9699f239e9a856553c7ad62ee7f85e",
      "new_mode": 33188,
      "new_path": "tools/publish/requirements_windows.txt"
    }
  ]
}
