Jupyter notebooks now linted by default without config; three rules deprecated and nine pylint-derived rules stabilized from preview mode.
Reduces friction for notebook workflows by eliminating extend-include configuration, while stricter rule enforcement (pytest decorator styles now match official recommendations) may require targeted fixes in existing codebases.
Drop-in upgrade for most projects; review pytest decorator rules (PT001, PT023) and run `ruff check . --fix --select=PT001 --select=PT023` if affected. Notebook default inclusion is stable and ready now, but test isort behavior since src/ directories are now searched by default for first-party imports.
“Ruff can be used to replace Black, Flake8 (plus dozens of plugins), isort, pydocstyle, pyupgrade, and more, all while executing tens or hundreds of times faster than any individual tool.”
“When passed a directory of files to lint or format, Ruff will now search for .ipynb files within that directory in exactly the same way as it would for .py or .pyi files — with no extra configuration necessary.”
“By default, our isort rules now search inside src/ directories when determining the list of package names that are likely to represent first-party code.”
“PT001 would by default change @pytest.fixture decorators to @pytest.fixture(), and PT023 would change @pytest.mark.foo decorators to @pytest.mark.foo(). They will now both remove parentheses by default, rather than adding them.”
python-toolinglintingjupyterruffbreaking-changes
Dev Signal
Get issues like this in your inbox — free, 3x a week.
Quick Signals
Temporal Swift SDK now handles distributed workflows
Use durable workflows in Swift to automatically resume from failure without retry logic or state management code.
Eliminates boilerplate for coordinating multi-service operations, retries, and recovery in production systems. Lets you focus on business logic instead of failure handling.
Replaces custom retry logic and state machines in distributed systems. Requires Temporal server infrastructure and async/await familiarity. Production-ready for data pipelines, payment processing, and long-running tasks.
“Temporal is an open source platform for building reliable distributed applications”
“your code runs to completion even in the face of infrastructure failures”
“When a worker crashes or restarts, Temporal automatically resumes your workflow from where it left off”
“Workflows must be deterministic. Given the same inputs and history, they must always make the same decisions”
“Activities should be idempotent, meaning they can be safely retried without causing unintended side effects”
NVIDIA released an open omnimodal world model handling text, images, video, audio, and actions; Microsoft shipped production-ready MAI variants across image editing, voice, and transcription via Azure AI Foundry.
Developers now have two competing multimodal strategies: NVIDIA's unified open model for physical AI systems, and Microsoft's modality-specific, production-deployed models. This expands the toolkit for adding vision and voice to applications without training from scratch.
Enjoying Dev Signal? Get every issue in your inbox.
Free forever · 3 issues a week · One-click unsubscribe
3 issues a week · Free forever · 4,200+ developers
Cosmos 3 replaces building separate text-to-image and image-to-video pipelines if you accept the open-source dependency and inference cost. MAI models replace Foundry model selection friction — they're available now across Azure AI Foundry, Fireworks AI, Baseten, and OpenRouter. Both are worth evaluating immediately if building robotics or multimodal features; no artificial blockers.
“Built on a mixture-of-transformers architecture”
“Currently ranked #1 open-source Text-to-Image and #1 Image-to-Video model by Artificial Analysis”
“Top policy model on RoboArena for robotics tasks”
“Available now via Azure AI Foundry, Fireworks AI, Baseten, and OpenRouter”
Ruff v0.8 bumps default target Python from 3.8 to 3.9, causing formatting and linting changes if you haven't explicitly set `requires-python` or `target-version`—update your config now to avoid surprises.
Default version bumps silently alter formatting output and rule behavior across your codebase. Without explicit configuration, developers will see unexpected with-statement parenthesization, import reordering, and new linter complaints on existing code.
Replace your Ruff config: add `project.requires-python = ">= 3.8"` in pyproject.toml or set `target-version = "py38"` in [tool.ruff] to preserve old behavior, or accept the format shift and declare Python 3.9+ support. Ready to deploy now if you handle the breaking changes upfront.
“Ruff v0.8 bumps this default to 3.9, as Python 3.8 is now End Of Life”
“13 rules have been stabilized that were previously only available in preview mode”
“Ruff can be used to replace Black, Flake8 (plus dozens of plugins), isort, pydocstyle, pyupgrade, and more, all while executing tens or hundreds of times faster than any individual tool”
“If you haven't specified a value for target-version or requires-python, you might see formatting changes”
Biome now formats and lints CSS-in-JS and GraphQL template literals natively via experimentalEmbeddedSnippetsEnabled, eliminating separate tool chains for styled-components and graphql-tag.
Reduces context switching between linters for polyglot JavaScript files. HTML a11y rules and Vue/Svelte parsing improvements cut false positives in component-heavy codebases, lowering configuration friction.
Replaces manual CSS/GraphQL formatter passes. Requires upgrading to v2.4.0, running `biome migrate --write`, and enabling experimental flag in biome.json. Worth adopting now for CSS-in-JS shops; a11y rules are stable but HTML support remains experimental.
“the ability to format and lint embedded CSS and GraphQL snippets within JavaScript files”
“experimentalEmbeddedSnippetsEnabled”
“Biome 2.4 introduces 15 comprehensive accessibility-focused lint rules for HTML”
“biome migrate --write”
biomelintingcss-in-jsgraphqltooling
ADK for Kotlin brings agentic workflows to backend
ADK 0.1.0 for Kotlin enables hybrid cloud-edge agent orchestration with on-device Gemini Nano, abstracting context handling and API adaptation through a single LlmAgent interface.
Eliminates manual coordination logic between cloud and on-device models, letting you swap inference targets per task without rewriting agent definitions. Shipping multi-agent systems that keep user data local while preserving cloud reasoning becomes a few-liner Kotlin task instead of architectural debt.
Replaces hand-rolled agent routing and cloud-device bridging code. Requires gradle dependency (com.google.adk:google-adk-kotlin-core:0.1.0) plus KSP processor for @Tool annotation generation. Early stage (0.1.0) but complete enough to ship: has sequential agents, retrieval agents, session state, OpenTelemetry. Worth prototyping now if you're targeting Android or building multi-model backends.
“ADK removes that friction by managing all the complex orchestration, context handling, and error handling for you”
“Gemini Nano as a model on Android, it has become available on over 140 million devices”
“You can use a cloud model as your main orchestrator, which can then offload specific tasks to sub-agents that run fully on-device”
“Local Retrieval: By utilizing on-device models like Gemini Nano, you can create retrieval agents that access and parse documents locally, ensuring data never has to leave the hardware”