Skip to content

Ruff 0.15 - #22875

Merged
ntBre merged 28 commits into
mainfrom
brent/0.15.0
Feb 3, 2026
Merged

Ruff 0.15#22875
ntBre merged 28 commits into
mainfrom
brent/0.15.0

Conversation

@ntBre

@ntBre ntBre commented Jan 26, 2026 •

Copy link
Copy Markdown
Contributor

@ntBre ntBre added breaking Backwards-incompatible changes release Related to the release process (not for changelogs) labels Jan 26, 2026
@ntBre ntBre added this to the v0.15 milestone Jan 26, 2026
@astral-sh-bot

astral-sh-bot Bot commented Jan 29, 2026 •

Copy link
Copy Markdown

ruff-ecosystem results

Linter (stable)

ℹ️ ecosystem check detected linter changes. (+873 -6 violations, +0 -0 fixes in 28 projects; 27 projects unchanged)

DisnakeDev/disnake (+7 -0 violations, +0 -0 fixes)

+ disnake/client.py:1286:52: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ disnake/client.py:1287:53: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ disnake/ext/commands/flag_converter.py:330:33: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ disnake/guild.py:5614:19: FURB110 [*] Replace ternary `if` expression with `or` operator
+ disnake/guild.py:5615:22: FURB110 [*] Replace ternary `if` expression with `or` operator
+ disnake/user.py:227:38: FURB110 [*] Replace ternary `if` expression with `or` operator
+ tests/ext/tasks/test_loops.py:72:15: PLW0108 Lambda may be unnecessary; consider inlining inner function

RasaHQ/rasa (+1 -0 violations, +0 -0 fixes)

+ tests/core/training/test_interactive.py:663:58: RUF037 [*] Unnecessary empty iterable within a deque call

PlasmaPy/PlasmaPy (+1 -0 violations, +0 -0 fixes)

+ noxfile.py:448:15: PLC0207 [*] String is split more times than necessary

apache/airflow (+172 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --no-preview --select ALL

+ airflow-core/src/airflow/api/common/trigger_dag.py:172:12: FURB110 [*] Replace ternary `if` expression with `or` operator
+ airflow-core/src/airflow/api_fastapi/core_api/services/public/task_instances.py:189:22: FURB110 [*] Replace ternary `if` expression with `or` operator
+ airflow-core/src/airflow/api_fastapi/core_api/services/public/task_instances.py:190:26: FURB110 [*] Replace ternary `if` expression with `or` operator
+ airflow-core/src/airflow/cli/commands/config_command.py:991:19: FURB110 [*] Replace ternary `if` expression with `or` operator
+ airflow-core/src/airflow/cli/commands/config_command.py:992:17: FURB110 [*] Replace ternary `if` expression with `or` operator
+ airflow-core/src/airflow/cli/commands/config_command.py:994:23: FURB110 [*] Replace ternary `if` expression with `or` operator
... 91 additional changes omitted for rule FURB110
+ airflow-core/src/airflow/observability/trace.py:102:40: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ airflow-core/src/airflow/utils/db.py:1642:8: FURB171 Membership test against single-item container
+ airflow-core/tests/unit/cli/commands/test_variable_command.py:516:16: FURB171 Membership test against single-item container
+ airflow-core/tests/unit/cli/commands/test_variable_command.py:533:16: FURB171 Membership test against single-item container
... 162 additional changes omitted for project

apache/superset (+46 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --no-preview --select ALL

+ superset/commands/database/sync_permissions.py:92:13: FURB110 [*] Replace ternary `if` expression with `or` operator
+ superset/commands/database/tables.py:143:34: SIM910 [*] Use `extra_dict_by_name.get(table.table)` instead of `extra_dict_by_name.get(table.table, None)`
+ superset/commands/database/uploaders/csv_reader.py:389:25: FURB110 [*] Replace ternary `if` expression with `or` operator
+ superset/commands/database/uploaders/csv_reader.py:493:17: FURB110 Replace ternary `if` expression with `or` operator
+ superset/commands/database/uploaders/csv_reader.py:498:17: FURB110 Replace ternary `if` expression with `or` operator
+ superset/commands/database/uploaders/csv_reader.py:509:17: FURB110 Replace ternary `if` expression with `or` operator
+ superset/commands/database/uploaders/excel_reader.py:72:26: FURB110 Replace ternary `if` expression with `or` operator
... 22 additional changes omitted for rule FURB110
+ superset/connectors/sqla/models.py:883:62: FURB171 Membership test against single-item container
+ superset/dashboards/schemas.py:325:42: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ superset/datasets/schemas.py:128:23: PLW0108 Lambda may be unnecessary; consider inlining inner function
... 36 additional changes omitted for project

aws/aws-sam-cli (+10 -0 violations, +0 -0 fixes)

+ samcli/local/docker/platform_config.py:190:15: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ samcli/local/docker/platform_config.py:191:14: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ samcli/local/docker/platform_config.py:192:16: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/unit/commands/local/lib/test_stack_provider.py:114:51: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/unit/commands/local/lib/test_stack_provider.py:152:51: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/unit/commands/local/lib/test_stack_provider.py:190:51: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/unit/commands/local/lib/test_stack_provider.py:229:51: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/unit/commands/local/lib/test_stack_provider.py:270:51: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/unit/lib/observability/xray_traces/test_xray_event_mappers.py:69:46: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/unit/lib/telemetry/test_event.py:137:21: PLW0108 Lambda may be unnecessary; consider inlining inner function

binary-husky/gpt_academic (+1 -0 violations, +0 -0 fixes)

+ request_llms/bridge_all.py:1304:31: SIM910 [*] Use `dict.get()` without default value

bokeh/bokeh (+52 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --no-preview --select ALL

+ src/bokeh/core/property/dataspec.py:201:71: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ src/bokeh/io/notebook.py:663:26: PLC0207 [*] String is split more times than necessary
+ src/bokeh/io/webdriver.py:219:17: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ src/bokeh/models/annotations/geometry.py:85:31: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ src/bokeh/models/annotations/geometry.py:89:32: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ src/bokeh/models/annotations/geometry.py:93:30: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ src/bokeh/models/annotations/geometry.py:97:33: PLW0108 Lambda may be unnecessary; consider inlining inner function
... 38 additional changes omitted for rule PLW0108
+ src/bokeh/resources.py:617:19: FURB110 [*] Replace ternary `if` expression with `or` operator
+ src/bokeh/settings.py:374:25: FURB110 [*] Replace ternary `if` expression with `or` operator
+ src/bokeh/util/compiler.py:474:12: FURB110 [*] Replace ternary `if` expression with `or` operator
... 42 additional changes omitted for project

facebookresearch/chameleon (+8 -0 violations, +0 -0 fixes)

+ chameleon/inference/chameleon.py:648:19: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)
+ chameleon/miniviewer/miniviewer.py:190:16: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)
+ chameleon/viewer/backend/models/chameleon_distributed.py:405:13: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/chameleon_distributed.py:818:17: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/chameleon_local.py:633:13: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/service.py:131:21: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/service.py:154:17: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/service.py:226:25: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)

freedomofpress/securedrop (+2 -0 violations, +0 -0 fixes)

+ securedrop/pretty_bad_protocol/gnupg.py:644:26: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ securedrop/store.py:345:49: PLC0207 [*] String is split more times than necessary

fronzbot/blinkpy (+5 -0 violations, +0 -0 fixes)

+ tests/test_blink_functions.py:192:13: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/test_sync_module.py:616:13: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/test_util.py:135:13: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/test_util.py:149:13: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ tests/test_util.py:166:13: PLW0108 Lambda may be unnecessary; consider inlining inner function

ibis-project/ibis (+14 -0 violations, +0 -0 fixes)

+ ibis/backends/impala/tests/test_value_exprs.py:217:9: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ ibis/backends/polars/compiler.py:353:49: FURB110 [*] Replace ternary `if` expression with `or` operator
+ ibis/backends/singlestoredb/__init__.py:1045:16: FURB171 Membership test against single-item container
+ ibis/backends/tests/sql/test_sql.py:671:22: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ ibis/backends/tests/test_client.py:1024:13: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ ibis/backends/tests/test_client.py:1043:13: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ ibis/backends/tests/test_client.py:1051:13: PLW0108 Lambda may be unnecessary; consider inlining inner function
+ ibis/backends/tests/test_client.py:211:24: PLW0108 Lambda may be unnecessary; consider inlining inner function
... 6 additional changes omitted for rule PLW0108
+ ibis/examples/gen_registry.py:125:52: PLC0207 [*] String is split more times than necessary
... 5 additional changes omitted for project

... Truncated remaining completed project reports due to GitHub comment length restrictions

Changes by rule (12 rules affected)

code total + violation - violation + fix - fix
UP043 250 250 0 0 0
RUF061 206 206 0 0 0
FURB110 154 154 0 0 0
PLW0108 144 144 0 0 0
PLC0207 54 54 0 0 0
FURB171 35 35 0 0 0
invalid-syntax: 15 15 0 0 0
SIM910 6 6 0 0 0
RUF100 6 0 6 0 0
RUF060 4 4 0 0 0
RUF037 3 3 0 0 0
A003 2 2 0 0 0

Linter (preview)

ℹ️ ecosystem check detected linter changes. (+69 -54 violations, +0 -0 fixes in 16 projects; 39 projects unchanged)

PlasmaPy/PlasmaPy (+1 -1 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview

- noxfile.py:448:15: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ noxfile.py:448:15: PLC0207 [*] String is split more times than necessary

apache/airflow (+16 -16 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview --select ALL

- dev/backport/update_backport_status.py:80:21: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ dev/backport/update_backport_status.py:80:21: PLC0207 [*] String is split more times than necessary
- dev/breeze/src/airflow_breeze/commands/common_options.py:524:26: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ dev/breeze/src/airflow_breeze/commands/common_options.py:524:26: PLC0207 [*] String is split more times than necessary
- dev/breeze/src/airflow_breeze/commands/release_management_commands.py:2815:50: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ dev/breeze/src/airflow_breeze/commands/release_management_commands.py:2815:50: PLC0207 [*] String is split more times than necessary
- dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py:719:34: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ dev/breeze/src/airflow_breeze/prepare_providers/provider_documentation.py:719:34: PLC0207 [*] String is split more times than necessary
- dev/breeze/src/airflow_breeze/utils/click_validators.py:46:17: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ dev/breeze/src/airflow_breeze/utils/click_validators.py:46:17: PLC0207 [*] String is split more times than necessary
- dev/breeze/src/airflow_breeze/utils/run_utils.py:120:25: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ dev/breeze/src/airflow_breeze/utils/run_utils.py:120:25: PLC0207 [*] String is split more times than necessary
- dev/breeze/src/airflow_breeze/utils/selective_checks.py:1779:23: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
... 19 additional changes omitted for project

apache/superset (+3 -3 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview --select ALL

- superset/db_engine_specs/lint_metadata.py:100:17: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ superset/db_engine_specs/lint_metadata.py:100:17: PLC0207 [*] String is split more times than necessary
- tests/common/query_context_generator.py:214:29: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ tests/common/query_context_generator.py:214:29: PLC0207 [*] String is split more times than necessary
- tests/common/query_context_generator.py:255:22: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ tests/common/query_context_generator.py:255:22: PLC0207 [*] String is split more times than necessary

bokeh/bokeh (+3 -3 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview --select ALL

- src/bokeh/io/notebook.py:663:26: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ src/bokeh/io/notebook.py:663:26: PLC0207 [*] String is split more times than necessary
- src/bokeh/util/token.py:142:41: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ src/bokeh/util/token.py:142:41: PLC0207 [*] String is split more times than necessary
- src/bokeh/util/token.py:155:41: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ src/bokeh/util/token.py:155:41: PLC0207 [*] String is split more times than necessary

facebookresearch/chameleon (+8 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview

+ chameleon/inference/chameleon.py:648:19: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)
+ chameleon/miniviewer/miniviewer.py:190:16: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)
+ chameleon/viewer/backend/models/chameleon_distributed.py:405:13: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/chameleon_distributed.py:818:17: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/chameleon_local.py:633:13: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/service.py:131:21: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/service.py:154:17: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)
+ chameleon/viewer/backend/models/service.py:226:25: invalid-syntax: Cannot use `match` statement on Python 3.7 (syntax was added in Python 3.10)

freedomofpress/securedrop (+1 -1 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview

- securedrop/store.py:345:49: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ securedrop/store.py:345:49: PLC0207 [*] String is split more times than necessary

ibis-project/ibis (+1 -1 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview

- ibis/examples/gen_registry.py:125:52: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ ibis/examples/gen_registry.py:125:52: PLC0207 [*] String is split more times than necessary

langchain-ai/langchain (+10 -10 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview

- libs/langchain/langchain_classic/agents/chat/output_parser.py:66:22: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ libs/langchain/langchain_classic/agents/chat/output_parser.py:66:22: PLC0207 [*] String is split more times than necessary
- libs/langchain/langchain_classic/agents/conversational/output_parser.py:34:28: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ libs/langchain/langchain_classic/agents/conversational/output_parser.py:34:28: PLC0207 [*] String is split more times than necessary
- libs/langchain/langchain_classic/agents/mrkl/output_parser.py:72:28: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ libs/langchain/langchain_classic/agents/mrkl/output_parser.py:72:28: PLC0207 [*] String is split more times than necessary
- libs/langchain/langchain_classic/agents/output_parsers/react_json_single_input.py:81:22: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ libs/langchain/langchain_classic/agents/output_parsers/react_json_single_input.py:81:22: PLC0207 [*] String is split more times than necessary
- libs/langchain/langchain_classic/agents/output_parsers/react_single_input.py:72:28: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ libs/langchain/langchain_classic/agents/output_parsers/react_single_input.py:72:28: PLC0207 [*] String is split more times than necessary
... 10 additional changes omitted for project

pandas-dev/pandas (+1 -1 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview

- pandas/compat/_optional.py:165:14: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ pandas/compat/_optional.py:165:14: PLC0207 [*] String is split more times than necessary

pypa/cibuildwheel (+3 -3 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview

- bin/update_pythons.py:129:22: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ bin/update_pythons.py:129:22: PLC0207 [*] String is split more times than necessary
- cibuildwheel/platforms/macos.py:154:31: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ cibuildwheel/platforms/macos.py:154:31: PLC0207 [*] String is split more times than necessary
- cibuildwheel/selector.py:78:26: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ cibuildwheel/selector.py:78:26: PLC0207 [*] String is split more times than necessary

qdrant/qdrant-client (+2 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview

+ qdrant_client/async_qdrant_fastembed.py:226:16: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)
+ qdrant_client/qdrant_fastembed.py:223:16: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)

zulip/zulip (+10 -10 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview --select ALL

- zerver/lib/send_email.py:301:16: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ zerver/lib/send_email.py:301:16: PLC0207 [*] String is split more times than necessary
- zerver/lib/send_email.py:449:21: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ zerver/lib/send_email.py:449:21: PLC0207 [*] String is split more times than necessary
- zerver/lib/webhooks/common.py:285:26: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ zerver/lib/webhooks/common.py:285:26: PLC0207 [*] String is split more times than necessary
- zerver/lib/webhooks/common.py:297:16: PLC0207 [*] Replace with `split(..., maxsplit=1)`.
+ zerver/lib/webhooks/common.py:297:16: PLC0207 [*] String is split more times than necessary
- zerver/middleware.py:230:49: PLC0207 [*] Replace with `rsplit(..., maxsplit=1)`.
+ zerver/middleware.py:230:49: PLC0207 [*] String is split more times than necessary
... 10 additional changes omitted for project

openai/openai-cookbook (+5 -0 violations, +0 -0 fixes)

ruff check --no-cache --exit-zero --no-fix --output-format concise --preview --select A,E703,F704,B015,B018,D100

+ examples/Context_summarization_with_realtime_api.ipynb:cell 15:7:16: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)
+ examples/Embedding_long_inputs.ipynb:cell 12:9:12: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)
+ examples/agents_sdk/session_memory.ipynb:cell 42:30:53: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)
+ examples/chatgpt/rag-quickstart/azure/Azure_AI_Search_with_Azure_Functions_and_GPT_Actions_in_ChatGPT.ipynb:cell 21:7:12: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)
+ examples/chatgpt/rag-quickstart/gcp/Getting_started_with_bigquery_vector_search_and_openai.ipynb:cell 18:7:12: invalid-syntax: Cannot use named assignment expression (`:=`) on Python 3.7 (syntax was added in Python 3.8)

... Truncated remaining completed project reports due to GitHub comment length restrictions

Changes by rule (2 rules affected)

code total + violation - violation + fix - fix
PLC0207 108 54 54 0 0
invalid-syntax: 15 15 0 0 0

Formatter (stable)

ℹ️ ecosystem check detected format changes. (+1293 -691 lines in 470 files in 33 projects; 22 projects unchanged)

PostHog/HouseWatch (+2 -0 lines across 2 files)

housewatch/api/async_migration.py~L52

 
     @action(methods=["POST"], detail=True)
     def trigger(self, request, **kwargs):
+
         migration = self.get_object()
 
         migration.status = MigrationStatus.Starting

housewatch/async_migrations/runner.py~L27

 def start_async_migration(
     migration: AsyncMigration, ignore_posthog_version=False
 ) -> bool:
+
     if migration.status not in [MigrationStatus.Starting, MigrationStatus.NotStarted]:
         logger.error(f"Initial check failed for async migration {migration.name}")
         return False

RasaHQ/rasa (+178 -20 lines across 92 files)

data/test_classes/custom_slots.py~L28

         value_reset_delay: Optional[int] = None,
         influence_conversation: bool = True,
     ) -> None:
+
         super().__init__(
             name=name,
             initial_value=initial_value,

examples/reminderbot/actions/actions.py~L28

         tracker: Tracker,
         domain: Dict[Text, Any],
     ) -> List[Dict[Text, Any]]:
+
         dispatcher.utter_message("I will remind you in 5 seconds.")
 
         date = datetime.datetime.now() + datetime.timedelta(seconds=5)

examples/reminderbot/actions/actions.py~L56

         tracker: Tracker,
         domain: Dict[Text, Any],
     ) -> List[Dict[Text, Any]]:
+
         name = next(tracker.get_slot("PERSON"), "someone")
         dispatcher.utter_message(f"Remember to call {name}!")
 

examples/reminderbot/actions/actions.py~L71

     async def run(
         self, dispatcher, tracker: Tracker, domain: Dict[Text, Any]
     ) -> List[Dict[Text, Any]]:
+
         conversation_id = tracker.sender_id
 
         dispatcher.utter_message(f"The ID of this conversation is '{conversation_id}'.")

examples/reminderbot/actions/actions.py~L98

         tracker: Tracker,
         domain: Dict[Text, Any],
     ) -> List[Dict[Text, Any]]:
+
         plant = next(tracker.get_latest_entity_values("plant"), "someone")
         dispatcher.utter_message(f"Your {plant} needs some water!")
 

examples/reminderbot/actions/actions.py~L113

     async def run(
         self, dispatcher, tracker: Tracker, domain: Dict[Text, Any]
     ) -> List[Dict[Text, Any]]:
+
         dispatcher.utter_message("Okay, I'll cancel all your reminders.")
 
         # Cancel all reminders

examples/reminderbot/callback_server.py~L4

 
 
 def create_app() -> Sanic:
+
     bot_app = Sanic("callback_server", configure_logging=False)
 
     @bot_app.post("/bot")

rasa/cli/export.py~L177

 
 
 async def _export_trackers(args: argparse.Namespace) -> None:
+
     _assert_max_timestamp_is_greater_than_min_timestamp(args)
 
     endpoints = rasa.core.utils.read_endpoints_from_path(args.endpoints)

<a href='https://github.com/RasaHQ/rasa/blob/c4069568b4fe2adb5d5a1e55d17ce8cb9dda27fc

... (truncated 8993 lines) ...

ntBre and others added 20 commits February 3, 2026 09:41
I made two small tweaks to the docs, but this otherwise looked good to
me.

https://docs.astral.sh/ruff/rules/legacy-form-pytest-raises/
Summary
--

This PR stabilizes the changes from #21097 and closes #19552. Note that
this has
two effects:

- the default output format in `--watch` mode becomes `full` instead of
`concise`
- the `--output-format` flag will now be respected

So the default output is now more verbose, but the old stable behavior
can be
retained by passing `--output-format=concise` (or any other supported
format)
instead.

Test Plan
--

Manual testing. I think we tried to set up automated tests in an earlier
PR but
decided they were too complex.

I really should have cropped these, but I'll just collapse them instead:

<details><summary>Screenshots</summary>
<p>

### Current output, no `--output-format`

<img width="783" height="514" alt="image"
src="https://github.com/user-attachments/assets/a758daa8-534e-4dab-9cff-858321cede61"
/>

### Current output, `--output-format=json`

The same as above, the flag has no effect

<img width="783" height="514" alt="image"
src="https://github.com/user-attachments/assets/e5b0743a-6bd5-4dec-83e0-de24e44567ca"
/>

### PR branch output, no `--output-format`

Default format is now `full` rather than `concise`

<img width="783" height="514" alt="image"
src="https://github.com/user-attachments/assets/cf51947d-52e3-4420-83e7-73530557c324"
/>

### PR branch output, `--output-format=json`

JSON output, the flag works

<img width="783" height="514" alt="image"
src="https://github.com/user-attachments/assets/e7127c5a-88ad-4b2a-80b4-193b63b631ee"
/>

</p>
</details>
I re-wrapped one line in the docs here and also factored out a reference
link
since it was used twice. I also moved the test from the `preview_rules`
function
to `rules`.
Docs and tests looked good
I tried to simplify the docs slightly by using a code block instead of a
fairly
long inline function definition, but the docs and tests otherwise looked
good to
me.

https://docs.astral.sh/ruff/rules/unnecessary-lambda/
I made a couple small tweaks to the docs, but this otherwise looked good
to me.

https://docs.astral.sh/ruff/rules/missing-maxsplit-arg/
Added in #21623. 

I think I caught everything, including the preview reference in the
linter docs, but hopefully @amyreese will remember anything else I
missed.
## Summary

Closes #21956 

**Root cause:** When a .ruff.toml, ruff.toml config was discovered via
ancestor search, Ruff eagerly derived target-version from
requires-python in pyproject.toml during config loading. That fallback
value then participated in config merging and incorrectly overrode an
explicit target-version defined in an extended config.

**Fix:** Defer the requires-python fallback until after the full extend
chain across .ruff.toml / ruff.toml is merged, and apply it only if
target-version is still unset.

**Impact:** Explicit target-version settings in extended configs are now
respected, requires-python is only used as a fallback.

## Test Plan

Added a new test. I was useful to validate the fix but may be redundant
to keep, lmk if you would love me to remove it

---------

Co-authored-by: dylwil3 <dylwil3@gmail.com>
Styles stabilized:

-
[`avoid_parens_for_long_as_captures`](#22743)
-
[`remove_parens_around_except_types`](#22741)
-
[`allow_newline_after_block_open`](#22742)
- [`no_chaperone_for_escaped_quote_in_triple_quoted_docstring
`](#22739)
- [`blank_line_before_decorated_class_in_stub
`](#22740)
-
[`parenthesize_lambda_bodies`](#22744)

To-do:

- [x] Change target branch to 0.15 release branch
- [x] Update documentation
- [x] Remove empty commit

---------

Co-authored-by: Brent Westbrook <brentrwestbrook@gmail.com>
@ntBre
ntBre marked this pull request as ready for review February 3, 2026 14:42
@AlexWaygood
AlexWaygood removed their request for review February 3, 2026 14:47
@ntBre
ntBre merged commit b534607 into main Feb 3, 2026
64 checks passed
@ntBre ntBre mentioned this pull request Jul 13, 2026
2 tasks done
@ntBre ntBre mentioned this pull request Sep 18, 2026
2 tasks done

This branch was previously deployed

1 inactive deployment
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking Backwards-incompatible changes release Related to the release process (not for changelogs)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants