Skip to content

build(deps-dev): bump ruff from 0.15.20 to 0.16.0 - #16

Closed
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/ruff-0.16.0
Closed

build(deps-dev): bump ruff from 0.15.20 to 0.16.0#16
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/ruff-0.16.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 30, 2026

Copy link
Copy Markdown
Contributor

Bumps ruff from 0.15.20 to 0.16.0.

Release notes

Sourced from ruff's releases.

0.16.0

Release Notes

Released on 2026-07-23.

Check out the blog post for a migration guide and overview of the changes!

Breaking changes

  • Ruff 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 (E) 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, and F722.

  • Ruff can now format Python code blocks in Markdown files and will do this by default. See the documentation for more details.

  • Ruff now supports ruff: ignore comments at the ends of lines, like noqa comments, or on the line preceding a diagnostic. For example, these both suppress an unused-import (F401) diagnostic:

    import math  # ruff: ignore[F401]
    ruff: ignore[F401]
    import os

  • Fixes are now shown in check and format --check output:

    ruff format --check .
    unformatted: File would be reformatted
     --> try.md:1:1
      |
    1 | ```python
      - import   math
    2 + import math
    3 | ```
      |
    1 file would be reformatted

    This example also shows off the Markdown formatting.

  • format --check now supports the same output formats as the linter, including the github and gitlab outputs for rendering annotations in CI:

    ruff format --check --output-format github .
    ::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted

    See the CLI help or documentation for the full list of supported formats.

  • The filename, location, end_location, fix.edits[].location, and fix.edits[].end_location fields in the JSON output format may now be null rather than defaulting to the empty string and row 1, column 1, respectively.

... (truncated)

Changelog

Sourced from ruff's changelog.

0.16.0

Released on 2026-07-23.

Check out the blog post for a migration guide and overview of the changes!

Breaking changes

  • Ruff 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 (E) 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, and F722.

  • Ruff can now format Python code blocks in Markdown files and will do this by default. See the documentation for more details.

  • Ruff now supports ruff: ignore comments at the ends of lines, like noqa comments, or on the line preceding a diagnostic. For example, these both suppress an unused-import (F401) diagnostic:

    import math  # ruff: ignore[F401]
    ruff: ignore[F401]
    import os

  • Fixes are now shown in check and format --check output:

    ruff format --check .
    unformatted: File would be reformatted
     --> try.md:1:1
      |
    1 | ```python
      - import   math
    2 + import math
    3 | ```
      |
    1 file would be reformatted

    This example also shows off the Markdown formatting.

  • format --check now supports the same output formats as the linter, including the github and gitlab outputs for rendering annotations in CI:

... (truncated)

Commits
  • a2635fd 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)
  • Additional commits viewable in compare view

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code labels Jul 30, 2026
@dependabot dependabot Bot changed the title Bump ruff from 0.15.20 to 0.16.0 build(deps-dev): bump ruff from 0.15.20 to 0.16.0 Jul 30, 2026
@dependabot
dependabot Bot force-pushed the dependabot/uv/ruff-0.16.0 branch 2 times, most recently from 60daa4b to 55b439d Compare July 30, 2026 17:14
Chris-ObtuseAI added a commit that referenced this pull request Aug 1, 2026
* Rotate the pinned supply-chain digests dependabot cannot reach

Dependabot proposes a dependency bump but cannot update the pins that
guard it, so these PRs could never go green on their own:

  - tests/test_runtime_dependency_lock.py pins the exact runtime version
    and asserts requirements-runtime.lock matches the uv resolution
  - tests/test_validation_dependency_lock.py pins every validation tool
    version across pyproject, uv.lock and requirements-validation.lock
  - tests/test_release_build_trust.py and
    tests/test_doofus_external_trial_workflow.py pin the exact commit
    digest of each attestation action, so a workflow-only bump fails

Every digest below was verified against the upstream tag before use,
not taken from dependabot's word:

  actions/attest v4.2.0 = f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6
  actions/attest v4.2.1 = 508db95dd578ae2727ebd6217d5ba78e4fbda05d
  actions/attest-build-provenance v4.1.1
                        = 0f67c3f4856b2e3261c31976d6725780e5e4c373

Changes:
  - cryptography 48.0.1 -> 49.0.0, constraint <49 -> <50 (closes #13)
  - pip-audit 2.9.0 -> 2.10.1, which drops toml for tomli/tomli-w
    (closes #17)
  - actions/attest v4.2.0 -> v4.2.1 in ui.yml and
    nimrod-external-witness.yml (closes #10)
  - actions/attest-build-provenance v3 -> v4.1.1 in
    doofus-external-trial.yml (closes #12)

Both lock files were regenerated with the pinned uv 0.11.15 rather than
hand-edited, so every hash is machine-derived.

ruff 0.16.0 is deliberately NOT included. It changes default rule
behaviour and reports 893 errors (497 auto-fixable) against this tree.
That is a lint migration, not a dependency bump, and it belongs in its
own change. #16 stays open.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Export requirements-validation.lock with the canonical gate flags

validate_release_python.py regenerates the file with
--only-group validation --no-annotate and byte-compares. The first
export omitted --no-annotate, so the committed file carried 37 lines of
"# via" provenance comments the gate never produces, and
validation_lock_reproducible failed.

Both lock files are now written with exactly the commands the gate uses:
  runtime:    uv export --locked --no-default-groups --format requirements-txt --no-header --no-emit-project
  validation: uv export --locked --only-group validation --no-annotate --format requirements-txt --no-header --no-emit-project

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Rotate the fifth pip-audit pin in the release validator

EXPECTED_TOOL_VERSIONS in scripts/validate_release_python.py asserts the
INSTALLED tool versions match the contract, so pip-audit is pinned in
five places, not four: pyproject.toml, uv.lock,
requirements-validation.lock, tests/test_validation_dependency_lock.py,
and this validator.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* Key the pages concurrency group by ref so PRs stop starving each other

`concurrency.group` was the fixed string `pages`, so every pull request
and every push to main contended for a single slot. With
`cancel-in-progress: false` GitHub keeps only the newest queued run and
supersedes the rest, and because `Build synthetic-only Organism` is a
REQUIRED status check on main, any PR whose run was superseded became
permanently unmergeable — the check never reports at all, so it can
never be satisfied by re-running CI.

Observed on four open dependabot PRs, all `completed/cancelled` for this
workflow while a fifth succeeded:

  cancelled  dependabot/cargo/ui/src-tauri/reqwest-0.13   3385339  #19
  cancelled  dependabot/npm_and_yarn/ui/vitest-4.1.10     50eef14  #15
  cancelled  dependabot/npm_and_yarn/ui/multi-223fb6760   e32b73b  #20
  cancelled  dependabot/github_actions/actions/setup-py   2a9c4d3  #11
  success    dependabot/cargo/ui/src-tauri/getrandom-0.   cd54a61  #37

Keying the group by `github.ref` serialises per branch, so pushes to
main still queue against each other and real Pages deployments remain
ordered, while pull requests no longer compete for the same slot.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.20 to 0.16.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](astral-sh/ruff@0.15.20...0.16.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-version: 0.16.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@Chris-ObtuseAI

Copy link
Copy Markdown
Contributor

Measured: this is a pin update plus ~935 lint fixes, not a pin update

Probed with uvx ruff@0.16.0 in an ephemeral environment (never touched the project venv):

ruff 0.15.20 (pinned)      0 errors  — clean
ruff 0.16.0              935 errors, 524 auto-fixable

All 935 are new in 0.16. Top rules:

count rule
216 RUF100 unused-noqa auto-fixable
160 I001 unsorted-imports auto-fixable
119 SIM117 multiple-with-statements
99 TRY004 type-check-without-type-error
67 FURB162 fromisoformat-replace-z
53 BLE001 blind-except review-required
32 UP035 deprecated-import auto-fixable

The hazard is BLE001

This codebase uses except Exception deliberately for fail-closed behaviour — the audit and evidence machinery depends on refusing rather than propagating. Bulk-fixing those 53 would attack the exact property the whole design rests on. Any migration must treat BLE001 as review-required, never auto-fixed.

Two findings worth harvesting regardless of this bump

  • 216 RUF100 — the repo carries 216 # noqa suppressions for rules that no longer fire. Dead scar tissue; removing them is safe and clarifying.
  • 67 FURB162.replace("Z", "+00:00") before fromisoformat appears throughout. Python 3.11+ parses Z natively.

And the pin sites, since dependabot only updates two of five

1. pyproject.toml
2. uv.lock                                <- dependabot does this
3. requirements-validation.lock           uv export --only-group validation --no-annotate
4. requirements-runtime.lock              uv export --no-default-groups
5. scripts/validate_release_python.py:41  EXPECTED_TOOL_VERSIONS   <- the one that gets missed

--no-annotate matters; without it the export differs byte-wise and validation_lock_reproducible fails, which is the gate currently red here.

Caution: never run uv run --frozen or uv sync while the forward service is live — it rebuilds .venv, fails on the file lock, and leaves it partially deleted. uv lock and uv export are safe.

Diagnosed 2026-08-02 alongside #18 (hidden two-major Vite migration) and #36 (breaking Rust API change). The three open dependabot PRs are three different problems.

@dependabot @github

dependabot Bot commented on behalf of github Aug 3, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #69.

@dependabot dependabot Bot closed this Aug 3, 2026
@dependabot
dependabot Bot deleted the dependabot/uv/ruff-0.16.0 branch August 3, 2026 10:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant