From 8e0bace9b429e67355b9f2f7a2c3f58c54f9e8ce Mon Sep 17 00:00:00 2001
From: Arnav Sourced from prek's releases. Released on 2026-07-25. This release adds two new builtin hooks, Hook priorities now support reusable aliases: [[repos]]\nrepo = "builtin"\nhooks = [\n{ id = "check-json", priority = "checks" },\n{ id = "check-yaml", priority = "checks" },\n]\nRelease notes
\n\n
0.4.11
\nRelease Notes
\nHighlights
\n\n
deny-pattern and require-pattern,\nas native alternatives for pygrep use cases. deny-pattern fails when a\nconfigured pattern is found, while require-pattern ensures every selected\nfile contains a match. By matching natively without spawning a Python\nsubprocess, they run over 4x faster than pygrep in benchmarks. Note that\nthey use Rust regex syntax, which does\nnot support look-around features such as negative lookbehind.prek run now supports --glob <PATTERN> to run hooks on tracked files\nmatching a glob. It can be repeated or combined with --files and\n--directory.[priorities]\r\nchecks = 10\r\n
This makes parallel scheduling easier to read and maintain.
\n\n\ndeny-pattern and require-pattern builtin hooks (#2359)--glob patterns in prek run (#2381)requirements-txt-fixer as a builtin hook (#2390)... (truncated)
\n\nSourced from prek's changelog.
\n\n\n0.4.11
\nReleased on 2026-07-25.
\nHighlights
\n\n
\n- \n
\nThis release adds two new builtin hooks,
\ndeny-patternandrequire-pattern,\nas native alternatives forpygrepuse cases.deny-patternfails when a\nconfigured pattern is found, whilerequire-patternensures every selected\nfile contains a match. By matching natively without spawning a Python\nsubprocess, they run over 4x faster thanpygrepin benchmarks. Note that\nthey use\nRustregexsyntax, which does\nnot support look-around features such as negative lookbehind.- \n
\n\n
prek runnow supports--glob <PATTERN>to run hooks on tracked files\nmatching a glob. It can be repeated or combined with--filesand\n--directory.- \n
\nHook priorities now support reusable aliases:
\n\n[priorities]\nchecks = 10\n[[repos]]\nrepo = "builtin"\nhooks = [\n{ id = "check-json", priority = "checks" },\n{ id = "check-yaml", priority = "checks" },\n]\n
This makes parallel scheduling easier to read and maintain.
\nEnhancements
\n\n
\n- Add
\ndeny-patternandrequire-patternbuiltin hooks (#2359)- Support
\n--globpatterns inprek run(#2381)- Support reusable aliases for hook priorities (#2331)
\n- Implement
\nrequirements-txt-fixeras a builtin hook (#2390)- Improve user-facing warnings and errors (#2380)
\n- Install Node hooks through git url (#2394)
\nPerformance
\n\n
\n- Reduce blocking-pool overhead in file hooks (#2384)
\n- Speed up mixed-line-ending scans with memchr2 (#2391)
\nBug fixes
\n\n
... (truncated)
\n92ba6c8 Bump version to 0.4.11 (#2402)f575e42 Bump quinn-proto from 0.11.14 to 0.11.16 (#2401)c0ed56d Preserve system download policy when applying metadata (#2395)3b8b5c5 Install Node hooks through git url (#2394)ff11cbb Implement requirements-txt-fixer as a builtin hook (#2390)c7dfc32 Match identify tags across filename parts (#2399)928dc5c Speed up mixed-line-ending scans with memchr2 (#2391)6c89849 Honor filenames in builtin hook entry and args (#2389)28bc3f0 Add description for no-commit-to-branch (#2388)1d9addd Reduce blocking-pool overhead in file hooks (#2384)Sourced from ruff's releases.
\n\n\n0.16.0
\nRelease Notes
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration guide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for more details and the new Default Rules page for a full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more opinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:E401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,E742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the documentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\r\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\r\nunformatted: File would be reformatted\r\n --> try.md:1:1\r\n |\r\n1 | ```python\r\n - import math\r\n2 + import math\r\n3 | ```\r\n |\r\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithubandgitlaboutputs for rendering annotations in CI:\n\u276f ruff format --check --output-format github .\r\n::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted\r\nSee the CLI help or documentation for the full list of supported formats.
\n- \n
\nThe
\nfilename,location,end_location,fix.edits[].location, andfix.edits[].end_locationfields in the JSON output format may now benullrather than defaulting to the empty string and row 1, column 1, respectively.
... (truncated)
\nSourced from ruff's changelog.
\n\n\n0.16.0
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration\nguide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for\nmore details and the new Default Rules page for a\nfull listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more\nopinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:\nE401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,\nE742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the\ndocumentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\nunformatted: File would be reformatted\n --> try.md:1:1\n |\n1 | ```python\n - import math\n2 + import math\n3 | ```\n |\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithuband\ngitlaboutputs for rendering annotations in CI:\n
... (truncated)
\na2635fd Bump 0.16.0 (#27136)3433449 [ty] Reuse full call diagnostics for implicit setter calls (#27115)2240070 Reflect ruff: ignore and --add-ignore stabilization in documentation (#27...17ef711 Stabilize --add-ignore (#27125)ef912bb Add newly stabilized rules to defaults (#27055)b30f040 Stabilize new default rules (#27035)bcd70c5 Exclude Markdown files from format-dev runs (#27052)87e51e2 Fix format --check spans for syntax errors (#27045)afe2723 [flake8-gettext] Stabilize qualified-name and built-in binding resolution (...a9702d8 [flake8-bandit] Stabilize string literal binding resolution (S310) (#26944)Sourced from ruff's releases.
\n\n\n0.16.0
\nRelease Notes
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration guide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for more details and the new Default Rules page for a full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more opinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:E401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,E742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the documentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\r\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\r\nunformatted: File would be reformatted\r\n --> try.md:1:1\r\n |\r\n1 | ```python\r\n - import math\r\n2 + import math\r\n3 | ```\r\n |\r\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithubandgitlaboutputs for rendering annotations in CI:\n\u276f ruff format --check --output-format github .\r\n::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted\r\nSee the CLI help or documentation for the full list of supported formats.
\n- \n
\nThe
\nfilename,location,end_location,fix.edits[].location, andfix.edits[].end_locationfields in the JSON output format may now benullrather than defaulting to the empty string and row 1, column 1, respectively.
... (truncated)
\nSourced from ruff's changelog.
\n\n\n0.16.0
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration\nguide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for\nmore details and the new Default Rules page for a\nfull listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more\nopinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:\nE401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,\nE742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the\ndocumentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\nunformatted: File would be reformatted\n --> try.md:1:1\n |\n1 | ```python\n - import math\n2 + import math\n3 | ```\n |\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithuband\ngitlaboutputs for rendering annotations in CI:\n
... (truncated)
\na2635fd Bump 0.16.0 (#27136)3433449 [ty] Reuse full call diagnostics for implicit setter calls (#27115)2240070 Reflect ruff: ignore and --add-ignore stabilization in documentation (#27...17ef711 Stabilize --add-ignore (#27125)ef912bb Add newly stabilized rules to defaults (#27055)b30f040 Stabilize new default rules (#27035)bcd70c5 Exclude Markdown files from format-dev runs (#27052)87e51e2 Fix format --check spans for syntax errors (#27045)afe2723 [flake8-gettext] Stabilize qualified-name and built-in binding resolution (...a9702d8 [flake8-bandit] Stabilize string literal binding resolution (S310) (#26944)Sourced from ruff's releases.
\n\n\n0.16.0
\nRelease Notes
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration guide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for more details and the new Default Rules page for a full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more opinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:E401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,E742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the documentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\r\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\r\nunformatted: File would be reformatted\r\n --> try.md:1:1\r\n |\r\n1 | ```python\r\n - import math\r\n2 + import math\r\n3 | ```\r\n |\r\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithubandgitlaboutputs for rendering annotations in CI:\n\u276f ruff format --check --output-format github .\r\n::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted\r\nSee the CLI help or documentation for the full list of supported formats.
\n- \n
\nThe
\nfilename,location,end_location,fix.edits[].location, andfix.edits[].end_locationfields in the JSON output format may now benullrather than defaulting to the empty string and row 1, column 1, respectively.
... (truncated)
\nSourced from ruff's changelog.
\n\n\n0.16.0
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration\nguide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for\nmore details and the new Default Rules page for a\nfull listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more\nopinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:\nE401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,\nE742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the\ndocumentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\nunformatted: File would be reformatted\n --> try.md:1:1\n |\n1 | ```python\n - import math\n2 + import math\n3 | ```\n |\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithuband\ngitlaboutputs for rendering annotations in CI:\n
... (truncated)
\na2635fd Bump 0.16.0 (#27136)3433449 [ty] Reuse full call diagnostics for implicit setter calls (#27115)2240070 Reflect ruff: ignore and --add-ignore stabilization in documentation (#27...17ef711 Stabilize --add-ignore (#27125)ef912bb Add newly stabilized rules to defaults (#27055)b30f040 Stabilize new default rules (#27035)bcd70c5 Exclude Markdown files from format-dev runs (#27052)87e51e2 Fix format --check spans for syntax errors (#27045)afe2723 [flake8-gettext] Stabilize qualified-name and built-in binding resolution (...a9702d8 [flake8-bandit] Stabilize string literal binding resolution (S310) (#26944)Sourced from ruff's releases.
\n\n\n0.16.0
\nRelease Notes
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration guide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for more details and the new Default Rules page for a full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more opinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:E401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,E742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the documentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\r\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\r\nunformatted: File would be reformatted\r\n --> try.md:1:1\r\n |\r\n1 | ```python\r\n - import math\r\n2 + import math\r\n3 | ```\r\n |\r\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithubandgitlaboutputs for rendering annotations in CI:\n\u276f ruff format --check --output-format github .\r\n::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted\r\nSee the CLI help or documentation for the full list of supported formats.
\n- \n
\nThe
\nfilename,location,end_location,fix.edits[].location, andfix.edits[].end_locationfields in the JSON output format may now benullrather than defaulting to the empty string and row 1, column 1, respectively.
... (truncated)
\nSourced from ruff's changelog.
\n\n\n0.16.0
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration\nguide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for\nmore details and the new Default Rules page for a\nfull listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more\nopinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:\nE401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,\nE742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the\ndocumentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\nunformatted: File would be reformatted\n --> try.md:1:1\n |\n1 | ```python\n - import math\n2 + import math\n3 | ```\n |\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithuband\ngitlaboutputs for rendering annotations in CI:\n
... (truncated)
\na2635fd Bump 0.16.0 (#27136)3433449 [ty] Reuse full call diagnostics for implicit setter calls (#27115)2240070 Reflect ruff: ignore and --add-ignore stabilization in documentation (#27...17ef711 Stabilize --add-ignore (#27125)ef912bb Add newly stabilized rules to defaults (#27055)b30f040 Stabilize new default rules (#27035)bcd70c5 Exclude Markdown files from format-dev runs (#27052)87e51e2 Fix format --check spans for syntax errors (#27045)afe2723 [flake8-gettext] Stabilize qualified-name and built-in binding resolution (...a9702d8 [flake8-bandit] Stabilize string literal binding resolution (S310) (#26944)Sourced from ruff's releases.
\n\n\n0.16.0
\nRelease Notes
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration guide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for more details and the new Default Rules page for a full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more opinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:E401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,E742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the documentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\r\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\r\nunformatted: File would be reformatted\r\n --> try.md:1:1\r\n |\r\n1 | ```python\r\n - import math\r\n2 + import math\r\n3 | ```\r\n |\r\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithubandgitlaboutputs for rendering annotations in CI:\n\u276f ruff format --check --output-format github .\r\n::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted\r\nSee the CLI help or documentation for the full list of supported formats.
\n- \n
\nThe
\nfilename,location,end_location,fix.edits[].location, andfix.edits[].end_locationfields in the JSON output format may now benullrather than defaulting to the empty string and row 1, column 1, respectively.
... (truncated)
\nSourced from ruff's changelog.
\n\n\n0.16.0
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration\nguide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for\nmore details and the new Default Rules page for a\nfull listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more\nopinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:\nE401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,\nE742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the\ndocumentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\nunformatted: File would be reformatted\n --> try.md:1:1\n |\n1 | ```python\n - import math\n2 + import math\n3 | ```\n |\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithuband\ngitlaboutputs for rendering annotations in CI:\n
... (truncated)
\na2635fd Bump 0.16.0 (#27136)3433449 [ty] Reuse full call diagnostics for implicit setter calls (#27115)2240070 Reflect ruff: ignore and --add-ignore stabilization in documentation (#27...17ef711 Stabilize --add-ignore (#27125)ef912bb Add newly stabilized rules to defaults (#27055)b30f040 Stabilize new default rules (#27035)bcd70c5 Exclude Markdown files from format-dev runs (#27052)87e51e2 Fix format --check spans for syntax errors (#27045)afe2723 [flake8-gettext] Stabilize qualified-name and built-in binding resolution (...a9702d8 [flake8-bandit] Stabilize string literal binding resolution (S310) (#26944)Sourced from ruff's releases.
\n\n\n0.16.0
\nRelease Notes
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration guide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for more details and the new Default Rules page for a full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more opinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:E401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,E742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the documentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\r\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\r\nunformatted: File would be reformatted\r\n --> try.md:1:1\r\n |\r\n1 | ```python\r\n - import math\r\n2 + import math\r\n3 | ```\r\n |\r\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithubandgitlaboutputs for rendering annotations in CI:\n\u276f ruff format --check --output-format github .\r\n::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted\r\nSee the CLI help or documentation for the full list of supported formats.
\n- \n
\nThe
\nfilename,location,end_location,fix.edits[].location, andfix.edits[].end_locationfields in the JSON output format may now benullrather than defaulting to the empty string and row 1, column 1, respectively.
... (truncated)
\nSourced from ruff's changelog.
\n\n\n0.16.0
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration\nguide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for\nmore details and the new Default Rules page for a\nfull listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more\nopinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:\nE401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,\nE742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the\ndocumentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\nunformatted: File would be reformatted\n --> try.md:1:1\n |\n1 | ```python\n - import math\n2 + import math\n3 | ```\n |\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithuband\ngitlaboutputs for rendering annotations in CI:\n
... (truncated)
\na2635fd Bump 0.16.0 (#27136)3433449 [ty] Reuse full call diagnostics for implicit setter calls (#27115)2240070 Reflect ruff: ignore and --add-ignore stabilization in documentation (#27...17ef711 Stabilize --add-ignore (#27125)ef912bb Add newly stabilized rules to defaults (#27055)b30f040 Stabilize new default rules (#27035)bcd70c5 Exclude Markdown files from format-dev runs (#27052)87e51e2 Fix format --check spans for syntax errors (#27045)afe2723 [flake8-gettext] Stabilize qualified-name and built-in binding resolution (...a9702d8 [flake8-bandit] Stabilize string literal binding resolution (S310) (#26944)Sourced from ruff's releases.
\n\n\n0.16.0
\nRelease Notes
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration guide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for more details and the new Default Rules page for a full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more opinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:E401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,E742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the documentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\r\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\r\nunformatted: File would be reformatted\r\n --> try.md:1:1\r\n |\r\n1 | ```python\r\n - import math\r\n2 + import math\r\n3 | ```\r\n |\r\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithubandgitlaboutputs for rendering annotations in CI:\n\u276f ruff format --check --output-format github .\r\n::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted\r\nSee the CLI help or documentation for the full list of supported formats.
\n- \n
\nThe
\nfilename,location,end_location,fix.edits[].location, andfix.edits[].end_locationfields in the JSON output format may now benullrather than defaulting to the empty string and row 1, column 1, respectively.
... (truncated)
\nSourced from ruff's changelog.
\n\n\n0.16.0
\nReleased on 2026-07-23.
\nCheck out the blog post for a migration\nguide and overview of the changes!
\nBreaking changes
\n\n
\n\n- \n
\nRuff now enables a much larger set of rules by default (413, up from 59). See the blog post for\nmore details and the new Default Rules page for a\nfull listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more\nopinionated pycodestyle (
\nE) and pyflakes (F) rules have been removed from the default set:\nE401,E402,E701,E702,E703,E711,E712,E713,E714,E721,E731,E741,\nE742,E743,F403,F405,F406, andF722.- \n
\nRuff can now format Python code blocks in Markdown files and will do this by default. See the\ndocumentation for more details.
\n- \n
\nRuff now supports
\nruff: ignorecomments at the ends of lines, likenoqacomments, or on the line preceding a diagnostic. For example, these both suppress anunused-import(F401) diagnostic:\nimport math # ruff: ignore[F401]\nruff: ignore[F401]
\nimport os\n
- \n
\nFixes are now shown in
\ncheckandformat --checkoutput:\n\u276f ruff format --check .\nunformatted: File would be reformatted\n --> try.md:1:1\n |\n1 | ```python\n - import math\n2 + import math\n3 | ```\n |\n1 file would be reformatted\n
This example also shows off the Markdown formatting.
\n- \n
\n\n
format --checknow supports the same output formats as the linter, including thegithuband\ngitlaboutputs for rendering annotations in CI:\n
... (truncated)
\na2635fd Bump 0.16.0 (#27136)3433449 [ty] Reuse full call diagnostics for implicit setter calls (#27115)2240070 Reflect ruff: ignore and --add-ignore stabilization in documentation (#27...17ef711 Stabilize --add-ignor...\n\n_Description has been truncated_",
+ "createdAt": "2026-08-04T09:31:10Z",
+ "closedAt": "2026-08-11T09:38:02Z",
+ "ground_truth_label": "deterministic_flag",
+ "ground_truth_reason": "CI failure detected (1 failed checks)"
+ },
+ {
+ "number": 1083,
+ "title": "chore(deps-dev): bump the python-deps group across 9 directories with 3 updates",
+ "author": "dependabot",
+ "authorAssociation": "CONTRIBUTOR",
+ "statusCheckRollup": "FAILURE",
+ "failed_checks": [
+ "prek",
+ "pytest (oauth-draft)",
+ "tests-ok"
+ ],
+ "recent_main_failures": [],
+ "mergeable": "MERGEABLE",
+ "unresolved_threads": 0,
+ "isDraft": false,
+ "commits_behind": 0,
+ "real_ci_ran": true,
+ "labels": [
+ "dependencies",
+ "python:uv"
+ ],
+ "commit_messages": [
+ "chore(deps-dev): bump the python-deps group across 9 directories with 3 updates"
+ ],
+ "body": "Updates the requirements on [prek](https://github.com/j178/prek), [ruff](https://github.com/astral-sh/ruff) and [mcp](https://github.com/modelcontextprotocol/python-sdk) to permit the latest version.\nUpdates `prek` from 0.4.10 to 0.4.13\n\nRelease notes
\nSourced from prek's releases.
\n\n0.4.13
\nRelease Notes
\nReleased on 2026-08-10.
\nHighlights
\nManage hook tools with mise
\nThe new language: mise support lets hooks install tools using\nmise in an isolated environment:
\nrepos:\n - repo: local\n hooks:\n - id: golangci-lint\n name: golangci-lint\n language: mise\n additional_dependencies: ["aqua:golangci/golangci-lint@2"]\n entry: golangci-lint run --fast-only ./...\n pass_filenames: false\n
\nRun commands in hook environments
\nThe new prek exec subcommand can run an explicit command in a configured\nhook's prepared environment. For example, the hook above makes its managed\nbinary available to this command:
\n$ prek exec golangci-lint -- golangci-lint --version\n
\nEnhancements
\n\n- Add
mise language support (#2540) \n- Add
deny-filename-pattern and require-filename-pattern hooks (#2488) \n- Add
prek exec for running commands in a hook environment (#2478) \n- Add
yaml-language-server: comment to YAML sample config (#2486) \n- Make
prek cache size output terminal-aware (#2508) \n- Match file regexes against path bytes (#2541)
\n- Show hook aliases in run output (#2497)
\n- Show hook descriptions in run output (#2490)
\n
\nPerformance
\n\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from prek's changelog.
\n\n0.4.13
\nReleased on 2026-08-10.
\nHighlights
\nManage hook tools with mise
\nThe new language: mise support lets hooks install tools using\nmise in an isolated environment:
\nrepos:\n - repo: local\n hooks:\n - id: golangci-lint\n name: golangci-lint\n language: mise\n additional_dependencies: ["aqua:golangci/golangci-lint@2"]\n entry: golangci-lint run --fast-only ./...\n pass_filenames: false\n
\nRun commands in hook environments
\nThe new prek exec subcommand can run an explicit command in a configured\nhook's prepared environment. For example, the hook above makes its managed\nbinary available to this command:
\n$ prek exec golangci-lint -- golangci-lint --version\n
\nEnhancements
\n\n- Add
mise language support (#2540) \n- Add
deny-filename-pattern and require-filename-pattern hooks (#2488) \n- Add
prek exec for running commands in a hook environment (#2478) \n- Add
yaml-language-server: comment to YAML sample config (#2486) \n- Make
prek cache size output terminal-aware (#2508) \n- Match file regexes against path bytes (#2541)
\n- Show hook aliases in run output (#2497)
\n- Show hook descriptions in run output (#2490)
\n
\nPerformance
\n\nBug fixes
\n\n
\n... (truncated)
\n\n\nCommits
\n\n6204a68 Bump version to 0.4.13 (#2543) \nf1c73c5 Add mise language support (#2540) \n3f08ed4 Match file regexes against path bytes (#2541) \n6bc5f06 Update Rust crate serde-saphyr to v1 (#2539) \nb8c5c69 Update Rust crate fancy-regex to 0.19.0 (#2537) \n2557af9 Update prek hooks (#2528) \na958731 Update Rust crate http to v1.5.0 (#2538) \nfc8b9a4 Update Rust crate clap to v4.6.5 (#2531) \n3bacaa1 Update dependency uv to v0.12.1 (#2536) \n222fc00 Update Rust crate toml to v1.1.4 (#2535) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` from 0.15.22 to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n\n\n\nFile \nPlatform \nChecksum \n \n\n\n\nruff-aarch64-apple-darwin.tar.gz \nApple Silicon macOS \nchecksum \n \n\nruff-x86_64-apple-darwin.tar.gz \nIntel macOS \nchecksum \n \n\nruff-aarch64-pc-windows-msvc.zip \nARM64 Windows \nchecksum \n \n\nruff-i686-pc-windows-msvc.zip \nx86 Windows \nchecksum \n \n\nruff-x86_64-pc-windows-msvc.zip \nx64 Windows \nchecksum \n \n\nruff-aarch64-unknown-linux-gnu.tar.gz \nARM64 Linux \nchecksum \n \n\nruff-i686-unknown-linux-gnu.tar.gz \nx86 Linux \nchecksum \n \n\nruff-powerpc64-unknown-linux-gnu.tar.gz \nPPC64 Linux \nchecksum \n \n\nruff-powerpc64le-unknown-linux-gnu.tar.gz \nPPC64LE Linux \nchecksum \n \n\nruff-riscv64gc-unknown-linux-gnu.tar.gz \nRISCV Linux \nchecksum \n \n\nruff-s390x-unknown-linux-gnu.tar.gz \nS390x Linux \nchecksum \n \n\n
\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from ruff's changelog.
\n\n0.16.2
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\n0.16.1
\nReleased on 2026-07-30.
\nPreview features
\n\n- Add an option to opt out of human-readable names (#27160)
\n- [
flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#27201) \n- [
pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#27133) \n- [
ruff] Fix false positive with unpacked arguments (RUF065) (#26959) \n
\nBug fixes
\n\n- Bump
gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#27230) \n- [
flake8-bugbear] Mark range as immutable (B008) (#27247) \n- [
flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#26813) \n- [
flake8-return] Fix false positive when variable is read in finally clause (RET504) (#25441) \n- [
pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#23635) \n- [
refurb] Parenthesize yield arguments in the FURB192 fix (#27192) \n
\nRule changes
\n\n- [
flake8-pytest-style] Mark PT022 fixes as unsafe (#26440) \n- [
refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#27200) \n
\nServer
\n\n\n
\n... (truncated)
\n\n\nCommits
\n\n5b48a04 Bump 0.16.2 (#27555) \n1b9e5fc Update Swatinem/rust-cache action to v2.9.2 (#27568) \nc4e86fc [ty] Add helper extension methods for half-range and equality constraints (#2... \n17a00de [ty] Reuse primer commands in memory reports (#27553) \n6ea296b [ty] Normalize type labels in structured docstrings (#26923) \n2fc445f [ty] Diagnose invalid getattr calls (#27502) \n22c7823 [ty] Enable (but downrank) auto-import completion suggestions from stub-only ... \n05160d5 [ty] Diagnose invalid descriptor __get__ calls (#27400) \nbaea3d0 [ty] Expose strict analysis options in the playground (#27543) \nc88946e [ty] Bump ecosystem-analyzer for strict project settings (#27542) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` from 0.15.22 to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n\n\n\nFile \nPlatform \nChecksum \n \n\n\n\nruff-aarch64-apple-darwin.tar.gz \nApple Silicon macOS \nchecksum \n \n\nruff-x86_64-apple-darwin.tar.gz \nIntel macOS \nchecksum \n \n\nruff-aarch64-pc-windows-msvc.zip \nARM64 Windows \nchecksum \n \n\nruff-i686-pc-windows-msvc.zip \nx86 Windows \nchecksum \n \n\nruff-x86_64-pc-windows-msvc.zip \nx64 Windows \nchecksum \n \n\nruff-aarch64-unknown-linux-gnu.tar.gz \nARM64 Linux \nchecksum \n \n\nruff-i686-unknown-linux-gnu.tar.gz \nx86 Linux \nchecksum \n \n\nruff-powerpc64-unknown-linux-gnu.tar.gz \nPPC64 Linux \nchecksum \n \n\nruff-powerpc64le-unknown-linux-gnu.tar.gz \nPPC64LE Linux \nchecksum \n \n\nruff-riscv64gc-unknown-linux-gnu.tar.gz \nRISCV Linux \nchecksum \n \n\nruff-s390x-unknown-linux-gnu.tar.gz \nS390x Linux \nchecksum \n \n\n
\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from ruff's changelog.
\n\n0.16.2
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\n0.16.1
\nReleased on 2026-07-30.
\nPreview features
\n\n- Add an option to opt out of human-readable names (#27160)
\n- [
flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#27201) \n- [
pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#27133) \n- [
ruff] Fix false positive with unpacked arguments (RUF065) (#26959) \n
\nBug fixes
\n\n- Bump
gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#27230) \n- [
flake8-bugbear] Mark range as immutable (B008) (#27247) \n- [
flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#26813) \n- [
flake8-return] Fix false positive when variable is read in finally clause (RET504) (#25441) \n- [
pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#23635) \n- [
refurb] Parenthesize yield arguments in the FURB192 fix (#27192) \n
\nRule changes
\n\n- [
flake8-pytest-style] Mark PT022 fixes as unsafe (#26440) \n- [
refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#27200) \n
\nServer
\n\n\n
\n... (truncated)
\n\n\nCommits
\n\n5b48a04 Bump 0.16.2 (#27555) \n1b9e5fc Update Swatinem/rust-cache action to v2.9.2 (#27568) \nc4e86fc [ty] Add helper extension methods for half-range and equality constraints (#2... \n17a00de [ty] Reuse primer commands in memory reports (#27553) \n6ea296b [ty] Normalize type labels in structured docstrings (#26923) \n2fc445f [ty] Diagnose invalid getattr calls (#27502) \n22c7823 [ty] Enable (but downrank) auto-import completion suggestions from stub-only ... \n05160d5 [ty] Diagnose invalid descriptor __get__ calls (#27400) \nbaea3d0 [ty] Expose strict analysis options in the playground (#27543) \nc88946e [ty] Bump ecosystem-analyzer for strict project settings (#27542) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` from 0.15.22 to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n\n\n\nFile \nPlatform \nChecksum \n \n\n\n\nruff-aarch64-apple-darwin.tar.gz \nApple Silicon macOS \nchecksum \n \n\nruff-x86_64-apple-darwin.tar.gz \nIntel macOS \nchecksum \n \n\nruff-aarch64-pc-windows-msvc.zip \nARM64 Windows \nchecksum \n \n\nruff-i686-pc-windows-msvc.zip \nx86 Windows \nchecksum \n \n\nruff-x86_64-pc-windows-msvc.zip \nx64 Windows \nchecksum \n \n\nruff-aarch64-unknown-linux-gnu.tar.gz \nARM64 Linux \nchecksum \n \n\nruff-i686-unknown-linux-gnu.tar.gz \nx86 Linux \nchecksum \n \n\nruff-powerpc64-unknown-linux-gnu.tar.gz \nPPC64 Linux \nchecksum \n \n\nruff-powerpc64le-unknown-linux-gnu.tar.gz \nPPC64LE Linux \nchecksum \n \n\nruff-riscv64gc-unknown-linux-gnu.tar.gz \nRISCV Linux \nchecksum \n \n\nruff-s390x-unknown-linux-gnu.tar.gz \nS390x Linux \nchecksum \n \n\n
\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from ruff's changelog.
\n\n0.16.2
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\n0.16.1
\nReleased on 2026-07-30.
\nPreview features
\n\n- Add an option to opt out of human-readable names (#27160)
\n- [
flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#27201) \n- [
pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#27133) \n- [
ruff] Fix false positive with unpacked arguments (RUF065) (#26959) \n
\nBug fixes
\n\n- Bump
gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#27230) \n- [
flake8-bugbear] Mark range as immutable (B008) (#27247) \n- [
flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#26813) \n- [
flake8-return] Fix false positive when variable is read in finally clause (RET504) (#25441) \n- [
pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#23635) \n- [
refurb] Parenthesize yield arguments in the FURB192 fix (#27192) \n
\nRule changes
\n\n- [
flake8-pytest-style] Mark PT022 fixes as unsafe (#26440) \n- [
refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#27200) \n
\nServer
\n\n\n
\n... (truncated)
\n\n\nCommits
\n\n5b48a04 Bump 0.16.2 (#27555) \n1b9e5fc Update Swatinem/rust-cache action to v2.9.2 (#27568) \nc4e86fc [ty] Add helper extension methods for half-range and equality constraints (#2... \n17a00de [ty] Reuse primer commands in memory reports (#27553) \n6ea296b [ty] Normalize type labels in structured docstrings (#26923) \n2fc445f [ty] Diagnose invalid getattr calls (#27502) \n22c7823 [ty] Enable (but downrank) auto-import completion suggestions from stub-only ... \n05160d5 [ty] Diagnose invalid descriptor __get__ calls (#27400) \nbaea3d0 [ty] Expose strict analysis options in the playground (#27543) \nc88946e [ty] Bump ecosystem-analyzer for strict project settings (#27542) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` from 0.15.22 to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n\n\n\nFile \nPlatform \nChecksum \n \n\n\n\nruff-aarch64-apple-darwin.tar.gz \nApple Silicon macOS \nchecksum \n \n\nruff-x86_64-apple-darwin.tar.gz \nIntel macOS \nchecksum \n \n\nruff-aarch64-pc-windows-msvc.zip \nARM64 Windows \nchecksum \n \n\nruff-i686-pc-windows-msvc.zip \nx86 Windows \nchecksum \n \n\nruff-x86_64-pc-windows-msvc.zip \nx64 Windows \nchecksum \n \n\nruff-aarch64-unknown-linux-gnu.tar.gz \nARM64 Linux \nchecksum \n \n\nruff-i686-unknown-linux-gnu.tar.gz \nx86 Linux \nchecksum \n \n\nruff-powerpc64-unknown-linux-gnu.tar.gz \nPPC64 Linux \nchecksum \n \n\nruff-powerpc64le-unknown-linux-gnu.tar.gz \nPPC64LE Linux \nchecksum \n \n\nruff-riscv64gc-unknown-linux-gnu.tar.gz \nRISCV Linux \nchecksum \n \n\nruff-s390x-unknown-linux-gnu.tar.gz \nS390x Linux \nchecksum \n \n\n
\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from ruff's changelog.
\n\n0.16.2
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\n0.16.1
\nReleased on 2026-07-30.
\nPreview features
\n\n- Add an option to opt out of human-readable names (#27160)
\n- [
flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#27201) \n- [
pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#27133) \n- [
ruff] Fix false positive with unpacked arguments (RUF065) (#26959) \n
\nBug fixes
\n\n- Bump
gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#27230) \n- [
flake8-bugbear] Mark range as immutable (B008) (#27247) \n- [
flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#26813) \n- [
flake8-return] Fix false positive when variable is read in finally clause (RET504) (#25441) \n- [
pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#23635) \n- [
refurb] Parenthesize yield arguments in the FURB192 fix (#27192) \n
\nRule changes
\n\n- [
flake8-pytest-style] Mark PT022 fixes as unsafe (#26440) \n- [
refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#27200) \n
\nServer
\n\n\n
\n... (truncated)
\n\n\nCommits
\n\n5b48a04 Bump 0.16.2 (#27555) \n1b9e5fc Update Swatinem/rust-cache action to v2.9.2 (#27568) \nc4e86fc [ty] Add helper extension methods for half-range and equality constraints (#2... \n17a00de [ty] Reuse primer commands in memory reports (#27553) \n6ea296b [ty] Normalize type labels in structured docstrings (#26923) \n2fc445f [ty] Diagnose invalid getattr calls (#27502) \n22c7823 [ty] Enable (but downrank) auto-import completion suggestions from stub-only ... \n05160d5 [ty] Diagnose invalid descriptor __get__ calls (#27400) \nbaea3d0 [ty] Expose strict analysis options in the playground (#27543) \nc88946e [ty] Bump ecosystem-analyzer for strict project settings (#27542) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` from 0.15.22 to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n\n\n\nFile \nPlatform \nChecksum \n \n\n\n\nruff-aarch64-apple-darwin.tar.gz \nApple Silicon macOS \nchecksum \n \n\nruff-x86_64-apple-darwin.tar.gz \nIntel macOS \nchecksum \n \n\nruff-aarch64-pc-windows-msvc.zip \nARM64 Windows \nchecksum \n \n\nruff-i686-pc-windows-msvc.zip \nx86 Windows \nchecksum \n \n\nruff-x86_64-pc-windows-msvc.zip \nx64 Windows \nchecksum \n \n\nruff-aarch64-unknown-linux-gnu.tar.gz \nARM64 Linux \nchecksum \n \n\nruff-i686-unknown-linux-gnu.tar.gz \nx86 Linux \nchecksum \n \n\nruff-powerpc64-unknown-linux-gnu.tar.gz \nPPC64 Linux \nchecksum \n \n\nruff-powerpc64le-unknown-linux-gnu.tar.gz \nPPC64LE Linux \nchecksum \n \n\nruff-riscv64gc-unknown-linux-gnu.tar.gz \nRISCV Linux \nchecksum \n \n\nruff-s390x-unknown-linux-gnu.tar.gz \nS390x Linux \nchecksum \n \n\n
\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from ruff's changelog.
\n\n0.16.2
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\n0.16.1
\nReleased on 2026-07-30.
\nPreview features
\n\n- Add an option to opt out of human-readable names (#27160)
\n- [
flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#27201) \n- [
pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#27133) \n- [
ruff] Fix false positive with unpacked arguments (RUF065) (#26959) \n
\nBug fixes
\n\n- Bump
gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#27230) \n- [
flake8-bugbear] Mark range as immutable (B008) (#27247) \n- [
flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#26813) \n- [
flake8-return] Fix false positive when variable is read in finally clause (RET504) (#25441) \n- [
pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#23635) \n- [
refurb] Parenthesize yield arguments in the FURB192 fix (#27192) \n
\nRule changes
\n\n- [
flake8-pytest-style] Mark PT022 fixes as unsafe (#26440) \n- [
refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#27200) \n
\nServer
\n\n\n
\n... (truncated)
\n\n\nCommits
\n\n5b48a04 Bump 0.16.2 (#27555) \n1b9e5fc Update Swatinem/rust-cache action to v2.9.2 (#27568) \nc4e86fc [ty] Add helper extension methods for half-range and equality constraints (#2... \n17a00de [ty] Reuse primer commands in memory reports (#27553) \n- \n
Commits
\n\nbc817c8 Sync actions.yml, composite action, and approved_patterns.yml \nb56cea7 action-allowlist-review: bump matlab-actions/run-tests (#1185) \nf90deca Sync actions.yml, composite action, and approved_patterns.yml \nfdedf4f action-allowlist-review: bump vapier/coverity-scan-action (#1184) \na64abbd Sync actions.yml, composite action, and approved_patterns.yml \n2bd2dc1 action-allowlist-review: bump rubygems/release-gem (#1183) \nc6b58a9 Sync actions.yml, composite action, and approved_patterns.yml \n645707d action-allowlist-review: bump astral-sh/setup-uv (#1182) \nec4fff2 Sync actions.yml, composite action, and approved_patterns.yml \n56b58d8 action-allowlist-review: bump carabiner-dev/actions/install/ampel-bootstrap (... \n- Additional commits viewable in compare view
\n
\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\nDependabot commands and options
\n
\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 that have been made to it\n- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n ",
+ "createdAt": "2026-08-18T10:40:36Z",
+ "closedAt": "2026-08-25T09:46:29Z",
+ "ground_truth_label": "passing",
+ "ground_truth_reason": "All checks green, mergeable, zero unresolved threads"
+ },
+ {
+ "number": 1103,
+ "title": "chore(deps-dev): bump the python-deps group across 9 directories with 3 updates",
+ "author": "dependabot",
+ "authorAssociation": "CONTRIBUTOR",
+ "statusCheckRollup": "FAILURE",
+ "failed_checks": [
+ "prek",
+ "pytest (oauth-draft)",
+ "tests-ok"
+ ],
+ "recent_main_failures": [],
+ "mergeable": "MERGEABLE",
+ "unresolved_threads": 0,
+ "isDraft": false,
+ "commits_behind": 0,
+ "real_ci_ran": true,
+ "labels": [
+ "dependencies",
+ "python:uv"
+ ],
+ "commit_messages": [
+ "Merge branch 'main' into dependabot/uv/python-deps-758d868e1c"
+ ],
+ "body": "Updates the requirements on [prek](https://github.com/j178/prek), [ruff](https://github.com/astral-sh/ruff) and [mcp](https://github.com/modelcontextprotocol/python-sdk) to permit the latest version.\nUpdates `prek` from 0.4.10 to 0.4.13\n\nRelease notes
\nSourced from prek's releases.
\n\n0.4.13
\nRelease Notes
\nReleased on 2026-08-10.
\nHighlights
\nManage hook tools with mise
\nThe new language: mise support lets hooks install tools using\nmise in an isolated environment:
\nrepos:\n - repo: local\n hooks:\n - id: golangci-lint\n name: golangci-lint\n language: mise\n additional_dependencies: ["aqua:golangci/golangci-lint@2"]\n entry: golangci-lint run --fast-only ./...\n pass_filenames: false\n
\nRun commands in hook environments
\nThe new prek exec subcommand can run an explicit command in a configured\nhook's prepared environment. For example, the hook above makes its managed\nbinary available to this command:
\n$ prek exec golangci-lint -- golangci-lint --version\n
\nEnhancements
\n\n- Add
mise language support (#2540) \n- Add
deny-filename-pattern and require-filename-pattern hooks (#2488) \n- Add
prek exec for running commands in a hook environment (#2478) \n- Add
yaml-language-server: comment to YAML sample config (#2486) \n- Make
prek cache size output terminal-aware (#2508) \n- Match file regexes against path bytes (#2541)
\n- Show hook aliases in run output (#2497)
\n- Show hook descriptions in run output (#2490)
\n
\nPerformance
\n\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from prek's changelog.
\n\n0.4.13
\nReleased on 2026-08-10.
\nHighlights
\nManage hook tools with mise
\nThe new language: mise support lets hooks install tools using\nmise in an isolated environment:
\nrepos:\n - repo: local\n hooks:\n - id: golangci-lint\n name: golangci-lint\n language: mise\n additional_dependencies: ["aqua:golangci/golangci-lint@2"]\n entry: golangci-lint run --fast-only ./...\n pass_filenames: false\n
\nRun commands in hook environments
\nThe new prek exec subcommand can run an explicit command in a configured\nhook's prepared environment. For example, the hook above makes its managed\nbinary available to this command:
\n$ prek exec golangci-lint -- golangci-lint --version\n
\nEnhancements
\n\n- Add
mise language support (#2540) \n- Add
deny-filename-pattern and require-filename-pattern hooks (#2488) \n- Add
prek exec for running commands in a hook environment (#2478) \n- Add
yaml-language-server: comment to YAML sample config (#2486) \n- Make
prek cache size output terminal-aware (#2508) \n- Match file regexes against path bytes (#2541)
\n- Show hook aliases in run output (#2497)
\n- Show hook descriptions in run output (#2490)
\n
\nPerformance
\n\nBug fixes
\n\n
\n... (truncated)
\n\n\nCommits
\n\n6204a68 Bump version to 0.4.13 (#2543) \nf1c73c5 Add mise language support (#2540) \n3f08ed4 Match file regexes against path bytes (#2541) \n6bc5f06 Update Rust crate serde-saphyr to v1 (#2539) \nb8c5c69 Update Rust crate fancy-regex to 0.19.0 (#2537) \n2557af9 Update prek hooks (#2528) \na958731 Update Rust crate http to v1.5.0 (#2538) \nfc8b9a4 Update Rust crate clap to v4.6.5 (#2531) \n3bacaa1 Update dependency uv to v0.12.1 (#2536) \n222fc00 Update Rust crate toml to v1.1.4 (#2535) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` from 0.15.22 to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n\n\n\nFile \nPlatform \nChecksum \n \n\n\n\nruff-aarch64-apple-darwin.tar.gz \nApple Silicon macOS \nchecksum \n \n\nruff-x86_64-apple-darwin.tar.gz \nIntel macOS \nchecksum \n \n\nruff-aarch64-pc-windows-msvc.zip \nARM64 Windows \nchecksum \n \n\nruff-i686-pc-windows-msvc.zip \nx86 Windows \nchecksum \n \n\nruff-x86_64-pc-windows-msvc.zip \nx64 Windows \nchecksum \n \n\nruff-aarch64-unknown-linux-gnu.tar.gz \nARM64 Linux \nchecksum \n \n\nruff-i686-unknown-linux-gnu.tar.gz \nx86 Linux \nchecksum \n \n\nruff-powerpc64-unknown-linux-gnu.tar.gz \nPPC64 Linux \nchecksum \n \n\nruff-powerpc64le-unknown-linux-gnu.tar.gz \nPPC64LE Linux \nchecksum \n \n\nruff-riscv64gc-unknown-linux-gnu.tar.gz \nRISCV Linux \nchecksum \n \n\nruff-s390x-unknown-linux-gnu.tar.gz \nS390x Linux \nchecksum \n \n\n
\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from ruff's changelog.
\n\n0.16.2
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\n0.16.1
\nReleased on 2026-07-30.
\nPreview features
\n\n- Add an option to opt out of human-readable names (#27160)
\n- [
flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#27201) \n- [
pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#27133) \n- [
ruff] Fix false positive with unpacked arguments (RUF065) (#26959) \n
\nBug fixes
\n\n- Bump
gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#27230) \n- [
flake8-bugbear] Mark range as immutable (B008) (#27247) \n- [
flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#26813) \n- [
flake8-return] Fix false positive when variable is read in finally clause (RET504) (#25441) \n- [
pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#23635) \n- [
refurb] Parenthesize yield arguments in the FURB192 fix (#27192) \n
\nRule changes
\n\n- [
flake8-pytest-style] Mark PT022 fixes as unsafe (#26440) \n- [
refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#27200) \n
\nServer
\n\n\n
\n... (truncated)
\n\n\nCommits
\n\n5b48a04 Bump 0.16.2 (#27555) \n1b9e5fc Update Swatinem/rust-cache action to v2.9.2 (#27568) \nc4e86fc [ty] Add helper extension methods for half-range and equality constraints (#2... \n17a00de [ty] Reuse primer commands in memory reports (#27553) \n6ea296b [ty] Normalize type labels in structured docstrings (#26923) \n2fc445f [ty] Diagnose invalid getattr calls (#27502) \n22c7823 [ty] Enable (but downrank) auto-import completion suggestions from stub-only ... \n05160d5 [ty] Diagnose invalid descriptor __get__ calls (#27400) \nbaea3d0 [ty] Expose strict analysis options in the playground (#27543) \nc88946e [ty] Bump ecosystem-analyzer for strict project settings (#27542) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n\n\n\nFile \nPlatform \nChecksum \n \n\n\n\nruff-aarch64-apple-darwin.tar.gz \nApple Silicon macOS \nchecksum \n \n\nruff-x86_64-apple-darwin.tar.gz \nIntel macOS \nchecksum \n \n\nruff-aarch64-pc-windows-msvc.zip \nARM64 Windows \nchecksum \n \n\nruff-i686-pc-windows-msvc.zip \nx86 Windows \nchecksum \n \n\nruff-x86_64-pc-windows-msvc.zip \nx64 Windows \nchecksum \n \n\nruff-aarch64-unknown-linux-gnu.tar.gz \nARM64 Linux \nchecksum \n \n\nruff-i686-unknown-linux-gnu.tar.gz \nx86 Linux \nchecksum \n \n\nruff-powerpc64-unknown-linux-gnu.tar.gz \nPPC64 Linux \nchecksum \n \n\nruff-powerpc64le-unknown-linux-gnu.tar.gz \nPPC64LE Linux \nchecksum \n \n\nruff-riscv64gc-unknown-linux-gnu.tar.gz \nRISCV Linux \nchecksum \n \n\nruff-s390x-unknown-linux-gnu.tar.gz \nS390x Linux \nchecksum \n \n\n
\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from ruff's changelog.
\n\n0.16.2
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\n0.16.1
\nReleased on 2026-07-30.
\nPreview features
\n\n- Add an option to opt out of human-readable names (#27160)
\n- [
flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#27201) \n- [
pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#27133) \n- [
ruff] Fix false positive with unpacked arguments (RUF065) (#26959) \n
\nBug fixes
\n\n- Bump
gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#27230) \n- [
flake8-bugbear] Mark range as immutable (B008) (#27247) \n- [
flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#26813) \n- [
flake8-return] Fix false positive when variable is read in finally clause (RET504) (#25441) \n- [
pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#23635) \n- [
refurb] Parenthesize yield arguments in the FURB192 fix (#27192) \n
\nRule changes
\n\n- [
flake8-pytest-style] Mark PT022 fixes as unsafe (#26440) \n- [
refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#27200) \n
\nServer
\n\n\n
\n... (truncated)
\n\n\nCommits
\n\n5b48a04 Bump 0.16.2 (#27555) \n1b9e5fc Update Swatinem/rust-cache action to v2.9.2 (#27568) \nc4e86fc [ty] Add helper extension methods for half-range and equality constraints (#2... \n17a00de [ty] Reuse primer commands in memory reports (#27553) \n6ea296b [ty] Normalize type labels in structured docstrings (#26923) \n2fc445f [ty] Diagnose invalid getattr calls (#27502) \n22c7823 [ty] Enable (but downrank) auto-import completion suggestions from stub-only ... \n05160d5 [ty] Diagnose invalid descriptor __get__ calls (#27400) \nbaea3d0 [ty] Expose strict analysis options in the playground (#27543) \nc88946e [ty] Bump ecosystem-analyzer for strict project settings (#27542) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n\n\n\nFile \nPlatform \nChecksum \n \n\n\n\nruff-aarch64-apple-darwin.tar.gz \nApple Silicon macOS \nchecksum \n \n\nruff-x86_64-apple-darwin.tar.gz \nIntel macOS \nchecksum \n \n\nruff-aarch64-pc-windows-msvc.zip \nARM64 Windows \nchecksum \n \n\nruff-i686-pc-windows-msvc.zip \nx86 Windows \nchecksum \n \n\nruff-x86_64-pc-windows-msvc.zip \nx64 Windows \nchecksum \n \n\nruff-aarch64-unknown-linux-gnu.tar.gz \nARM64 Linux \nchecksum \n \n\nruff-i686-unknown-linux-gnu.tar.gz \nx86 Linux \nchecksum \n \n\nruff-powerpc64-unknown-linux-gnu.tar.gz \nPPC64 Linux \nchecksum \n \n\nruff-powerpc64le-unknown-linux-gnu.tar.gz \nPPC64LE Linux \nchecksum \n \n\nruff-riscv64gc-unknown-linux-gnu.tar.gz \nRISCV Linux \nchecksum \n \n\nruff-s390x-unknown-linux-gnu.tar.gz \nS390x Linux \nchecksum \n \n\n
\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from ruff's changelog.
\n\n0.16.2
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\n0.16.1
\nReleased on 2026-07-30.
\nPreview features
\n\n- Add an option to opt out of human-readable names (#27160)
\n- [
flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#27201) \n- [
pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#27133) \n- [
ruff] Fix false positive with unpacked arguments (RUF065) (#26959) \n
\nBug fixes
\n\n- Bump
gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#27230) \n- [
flake8-bugbear] Mark range as immutable (B008) (#27247) \n- [
flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#26813) \n- [
flake8-return] Fix false positive when variable is read in finally clause (RET504) (#25441) \n- [
pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#23635) \n- [
refurb] Parenthesize yield arguments in the FURB192 fix (#27192) \n
\nRule changes
\n\n- [
flake8-pytest-style] Mark PT022 fixes as unsafe (#26440) \n- [
refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#27200) \n
\nServer
\n\n\n
\n... (truncated)
\n\n\nCommits
\n\n5b48a04 Bump 0.16.2 (#27555) \n1b9e5fc Update Swatinem/rust-cache action to v2.9.2 (#27568) \nc4e86fc [ty] Add helper extension methods for half-range and equality constraints (#2... \n17a00de [ty] Reuse primer commands in memory reports (#27553) \n6ea296b [ty] Normalize type labels in structured docstrings (#26923) \n2fc445f [ty] Diagnose invalid getattr calls (#27502) \n22c7823 [ty] Enable (but downrank) auto-import completion suggestions from stub-only ... \n05160d5 [ty] Diagnose invalid descriptor __get__ calls (#27400) \nbaea3d0 [ty] Expose strict analysis options in the playground (#27543) \nc88946e [ty] Bump ecosystem-analyzer for strict project settings (#27542) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n\n\n\nFile \nPlatform \nChecksum \n \n\n\n\nruff-aarch64-apple-darwin.tar.gz \nApple Silicon macOS \nchecksum \n \n\nruff-x86_64-apple-darwin.tar.gz \nIntel macOS \nchecksum \n \n\nruff-aarch64-pc-windows-msvc.zip \nARM64 Windows \nchecksum \n \n\nruff-i686-pc-windows-msvc.zip \nx86 Windows \nchecksum \n \n\nruff-x86_64-pc-windows-msvc.zip \nx64 Windows \nchecksum \n \n\nruff-aarch64-unknown-linux-gnu.tar.gz \nARM64 Linux \nchecksum \n \n\nruff-i686-unknown-linux-gnu.tar.gz \nx86 Linux \nchecksum \n \n\nruff-powerpc64-unknown-linux-gnu.tar.gz \nPPC64 Linux \nchecksum \n \n\nruff-powerpc64le-unknown-linux-gnu.tar.gz \nPPC64LE Linux \nchecksum \n \n\nruff-riscv64gc-unknown-linux-gnu.tar.gz \nRISCV Linux \nchecksum \n \n\nruff-s390x-unknown-linux-gnu.tar.gz \nS390x Linux \nchecksum \n \n\n
\n\n
\n... (truncated)
\n\n\nChangelog
\nSourced from ruff's changelog.
\n\n0.16.2
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\n0.16.1
\nReleased on 2026-07-30.
\nPreview features
\n\n- Add an option to opt out of human-readable names (#27160)
\n- [
flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#27201) \n- [
pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#27133) \n- [
ruff] Fix false positive with unpacked arguments (RUF065) (#26959) \n
\nBug fixes
\n\n- Bump
gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#27230) \n- [
flake8-bugbear] Mark range as immutable (B008) (#27247) \n- [
flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#26813) \n- [
flake8-return] Fix false positive when variable is read in finally clause (RET504) (#25441) \n- [
pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#23635) \n- [
refurb] Parenthesize yield arguments in the FURB192 fix (#27192) \n
\nRule changes
\n\n- [
flake8-pytest-style] Mark PT022 fixes as unsafe (#26440) \n- [
refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#27200) \n
\nServer
\n\n\n
\n... (truncated)
\n\n\nCommits
\n\n5b48a04 Bump 0.16.2 (#27555) \n1b9e5fc Update Swatinem/rust-cache action to v2.9.2 (#27568) \nc4e86fc [ty] Add helper extension methods for half-range and equality constraints (#2... \n17a00de [ty] Reuse primer commands in memory reports (#27553) \n6ea296b [ty] Normalize type labels in structured docstrings (#26923) \n2fc445f [ty] Diagnose invalid getattr calls (#27502) \n22c7823 [ty] Enable (but downrank) auto-import completion suggestions from stub-only ... \n05160d5 [ty] Diagnose invalid descriptor __get__ calls (#27400) \nbaea3d0 [ty] Expose strict analysis options in the playground (#27543) \nc88946e [ty] Bump ecosystem-analyzer for strict project settings (#27542) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `mcp` to 2.0.0\n\nRelease notes
\nSourced from mcp's releases.
\n\nv2.0.0
\nMCP Python SDK v2 Stable Release
\nThis is v2.0.0, the stable v2 release of the MCP Python SDK. It supports the 2026-07-28 revision of the Model Context Protocol and serves every earlier revision from the same server. pip install mcp now installs 2.x.
\npip install "mcp[cli]"\r\n# or\r\nuv add "mcp[cli]"\r\n
\nDocumentation Rewrite
\nThe documentation has the full tutorial and API reference. Coming from v1? What's new in v2 is the tour of what changed and why, and the migration guide lists every breaking change with before-and-after code.
\nV1 Maintenance mode
\nv1.x is in maintenance mode and will only receive security fixes from now on The 1.x line lives on the v1.x branch, continues to receive critical bug fixes and security patches, and is documented at https://py.sdk.modelcontextprotocol.io/v1/. If your project is not ready to migrate, keep a <2 upper bound on your requirement (for example mcp>=1.28,<2).
\nHighlights
\nOne SDK, both protocol eras
\nv2 speaks the 2026-07-28 revision (stateless requests with no handshake, server/discover, subscriptions/listen, multi-round-trip requests) and still serves every 2025-era client from the same MCPServer, over Streamable HTTP and stdio, with nothing to configure. Client(target) negotiates the version automatically.
\nFastMCP is now MCPServer, and there is a first-class Client
\nThe decorator API is unchanged; the low-level Server is rebuilt around a shared dispatcher engine, and one Client object replaces v1's transport-plus-ClientSession-plus-initialize() layering. It connects to a URL, a stdio subprocess, a custom transport, or straight to a server object in memory for tests.
\nMulti-round-trip requests and resolver dependency injection
\nAt 2026-07-28 the server can no longer call the client, so tools return the question instead. A Resolve(fn) parameter is filled by your function invisibly to the model and can put a question to the user; one tool body serves both eras.
\nExtension APIs, OpenTelemetry, and a standalone types package
\nServers and clients compose protocol extensions through pluggable extension APIs (MCP Apps built in); OpenTelemetry tracing ships on by default; every protocol type is its own package, mcp-types (imported as mcp_types), published in lock-step with mcp.
\nHardened stdio and auth
\nstdio servers keep handler subprocesses and stray prints off the wire, and stdout is diverted to stderr while serving. OAuth adds RFC 9207 issuer validation, the SEP-990 identity-assertion flow, and the client-credentials extension.
\nComing from a v2 pre-release
\nSince the last release candidate: the per-version wire packages are private (mcp_types._v*), mcp.types is a permanent alias for mcp_types, the auth registration request model is split from the registered-client record, cancelled requests are no longer answered, and log notifications are gated on the per-request log-level opt-in at 2026-07-28. Since the betas: Client(cache=False) is now cache=None with CacheConfig() the default; Context.client_id, RFC7523OAuthClientProvider, and OAuthClientProvider(timeout=) are removed; the client-credentials providers take scope=; message_handler receives notifications and exceptions only; FileResource(is_binary=) becomes encoding; MCP_* env vars are gone with pydantic-settings; Streamable HTTP servers reject bodies over 4 MiB with HTTP 413. The migration guide covers all of it.
\nKnown gaps
\nThe tasks extension (SEP-2663) is not part of this release. On the client, the DPoP proof binding (SEP-1932) and the workload-identity jwt-bearer grant are not implemented; both are additive and can land in 2.x.
\nFeedback
\n\n
\n... (truncated)
\n\n\nCommits
\n\n6f69a37 Present v2 as the stable release across the README, docs, and policies (#3178) \n78e6fbb Serve v2 docs at the site root, with permanent per-major paths (#3176) \naf06330 Remove unused StreamableHTTPTransport.get_session_id() (#3205) \n68ca87e Document the two-line release process for stable v2 (#3179) \nc9c431b Expose the middleware chain on MCPServer and stop sending unrequested change ... \n528e366 Fail fast on server-to-client requests in JSON-response mode instead of hangi... \n27f5cc7 Remove unused mcpserver.exceptions.ValidationError (#3199) \n89c5e70 Gate log notifications on the per-request log-level opt-in at 2026-07-28 (#3198) \nb61ce38 docs: fix off-by-one hl_lines in apps.md (#3196) \nb7c9a91 Add mcp.types as a permanent alias for mcp_types (#3190) \n- Additional commits viewable in compare view
\n
\n\n
\n\nUpdates `ruff` to 0.16.2\n\nRelease notes
\nSourced from ruff's releases.
\n\n0.16.2
\nRelease Notes
\nReleased on 2026-08-06.
\nBug fixes
\n\n- [
flake8-pyi] Avoid false positives on singledispatch functions (PYI041) (#27335) \n
\nServer
\n\n- Register formatting capabilities dynamically to exclude TOML files (#27332)
\n
\nContributors
\n\nInstall ruff 0.16.2
\nInstall prebuilt binaries via shell script
\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.sh | sh\n
\nInstall prebuilt binaries via powershell script
\npowershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.2/ruff-installer.ps1 | iex"\n
\nDownload ruff 0.16.2
\n