3.6.24 - A watched flow never boils
Released on March 27, 2026 New Features 🎉- Add
flow-run watchcommand to watch any flow run until it reaches a terminal state by @devin-ai-integration[bot] in #21260 - Add
with_context()for propagating Prefect run context into user-spawned subprocesses by @desertaxle in #21304
- Add bounded queue support to
QueueServiceto prevent OOM during server outages by @zionts in #21033 - Add time-based checkpoint to events websocket client by @zangell44 in #21264
- Add
positionto block schema properties for UI field ordering by @devin-ai-integration[bot] in #21307 - Add opt-in BuildKit/buildx support via
python-on-whalesby @devin-ai-integration[bot] in #21286 - Remove default timeout on
suspend_flow_runby @devin-ai-integration[bot] in #21285 - Include
PREFECT_CLIENT_CUSTOM_HEADERSin standalone version check by @devin-ai-integration[bot] in #21262
- Fix
PrefectFutureList.result()raisingAttributeErrorafter flow resolution by @devin-ai-integration[bot] in #21221 - Fix Jinja template parameter type coercion in
RunDeploymentactions by @devin-ai-integration[bot] in #21231 - Fix
prefect deploy --allto respect default work pool settings by @bdalpe in #21258 - Fix
UnicodeDecodeErrorwhen subprocess outputs non-UTF-8 bytes by @Krishnachaitanyakc in #21267 - Fix
ValueErrorwhen deploying flows whose source is outside cwd by @devin-ai-integration[bot] in #21281 - Inline orphan condition into batch delete to prevent vacuum timeout by @devin-ai-integration[bot] in #21298
- Default missing
Content-Typetoapplication/jsonfor old client compatibility by @chuqCTC in #21302 - Fix
allow_failure()not working with mapped tasks inwait_forby @devin-ai-integration[bot] in #21305 - Respect
PREFECT_SERVER_ANALYTICS_ENABLEDenv var in CLI by @devin-ai-integration[bot] in #21315 - Preserve field aliases during Block serialization with
include_secretsby @devin-ai-integration[bot] in #21306 - Skip
dotenv_valueswhen.envis not a regular file by @devin-ai-integration[bot] in #21320 - Fix heartbeat starvation under CPU-bound workloads by @desertaxle in #21276
- Fix
EventsWorkerclass variable mutation and add_on_item_droppedfor queue cleanup by @devin-ai-integration[bot] in #21273 - Preserve deployment concurrency lease ID across state transitions by @bunchesofdonald in #21280
- Fix flaky test: switch work queue tests to in-process client by @devin-ai-integration[bot] in #21042
- Add pre-commit hook to prevent double backticks by @desertaxle in #21211
- Fix flaky test: handle
CancelledErrorduring sync concurrency slot release by @devin-ai-integration[bot] in #21212 - Split client tests into two matrix jobs to avoid CI timeouts by @devin-ai-integration[bot] in #21213
- Replace bare
except:with explicitException/BaseExceptionbranches inrun_flow()by @devin-ai-integration[bot] in #21228 - Raise versioningit default-version so Dependabot
uv locksucceeds by @devin-ai-integration[bot] in #21230 - Split orchestration tests into core and API suites by @devin-ai-integration[bot] in #21232
- Set versioningit
default-tagabove integration floors by @devin-ai-integration[bot] in #21234 - Batch Python dependabot updates weekly with grouping by @devin-ai-integration[bot] in #21242
- Fix Docker CI job failing on dependabot PRs by @devin-ai-integration[bot] in #21243
- Add document-changes skill and CI workflow by @desertaxle in #21248
- Remove internal
Runnerusage from bundle execution and CLI paths by @desertaxle in #21252 - Exclude auto-generated docs from document-changes skill by @devin-ai-integration[bot] in #21275
- Move Postgres container to a service in python-tests workflow by @devin-ai-integration[bot] in #21282
- Correct PrivateLink scope — API only, not UI by @aaazzam in #21204
- Document Kubernetes Worker RBAC permissions by @devin-ai-integration[bot] in #21207
- Expand GitHub App integration docs for enterprise SAML/SSO use cases by @devin-ai-integration[bot] in #21182
- Document parameter resolution behavior and
quote/opaqueannotations by @devin-ai-integration[bot] in #21214 - Add network configuration guide for restricted environments by @devin-ai-integration[bot] in #21215
- Warn about default persistence with ephemeral infrastructure by @devin-ai-integration[bot] in #21236
- Expand testing how-to with harness internals and troubleshooting by @devin-ai-integration[bot] in #21249
- Add docs broken link checker CI workflow and fix broken links by @devin-ai-integration[bot] in #21250
- Correct pip install command for dev dependencies by @devin-ai-integration[bot] in #21255
- Add Mintlify keywords to all doc pages missing them by @devin-ai-integration[bot] in #21263
- Add section on reading persisted results by @devin-ai-integration[bot] in #21278
- Add
prefect-slurmto the integrations catalog by @desertaxle in #21229 - Remove Cloudflare reference from network access docs by @devin-ai-integration[bot] in #21289
- Update PrivateLink docs with setup, validation, and troubleshooting by @jamiezieziula in #21288
- Update callout for deploy CLI options with multiple targets by @bdalpe in #21299
- Remove expired docs banner by @jakekaplan in #21321
3.6.23 - Glob Trotter
Released on March 19, 2026 Enhancements ➕➕- Skip no-op SQL filters for empty values to speed up deployment pagination by @devin-ai-integration[bot] in #21115
- Add
--no-create-pool-if-not-foundflag toworker startby @VittoriaLanzo in #21004 - Emit events for deployment create, update, and delete operations by @devin-ai-integration[bot] in #21139
- Support glob patterns in events matching by @clifflau1120 in #21110
- Support module path entrypoints in
prefect.yamldeployments by @devin-ai-integration[bot] in #21152 - Add
stream_progress_toparameter toDockerImageby @zzstoatzz in #21175 - Add concurrency status endpoints and client methods by @desertaxle in #21150
- Add
active_slotsfield to work pool and work queue API responses by @desertaxle in #21149 - Add concurrency slot CLI commands for work pools and work queues by @desertaxle in #21174
- Add
include_filessupport to remaining infrastructure decorators by @devin-ai-integration[bot] in #21178 - Enforce minimum heartbeat interval at the engine level by @desertaxle in #21188
- Fix
ProcessPoolTaskRunnerto check upstream task states inwait_fordependencies by @devin-ai-integration[bot] in #21122 - Fix asyncpg multihost parsing in postgres listener by @zzstoatzz in #21146
- Add shell mode to
run_shell_scriptfor pipe and redirect support by @ihabshea in #21130 - Shield subprocess cleanup from cancellation in
run_shell_scriptby @devin-ai-integration[bot] in #21163 - Use shell mode on Windows in
run_shell_scriptfor built-in command support by @devin-ai-integration[bot] in #21167 - Fix tag-based concurrency batching delay by @devin-ai-integration[bot] in #21156
- Migrate Redis to GitHub Actions service container by @devin-ai-integration[bot] in #21165
- Update concurrency status schemas by @devin-ai-integration[bot] in #21164
- Add
just unreleased-integrationscommand by @devin-ai-integration[bot] in #21136
- Add guide for assuming an AWS IAM role with a Prefect Cloud Managed worker by @bdalpe in #21103
- Update Prefect MCP docs to mention Horizon by @zhen0 in #21162
- Document
.submit()and.submit_to_work_pool()for infrastructure-bound flows by @devin-ai-integration[bot] in #21180 - Document
include_fileson infrastructure decorators by @devin-ai-integration[bot] in #21186
3.6.22 - Actually, I’ve got triples of the pending
Released on March 12, 2026 New Features 🎉- Add
SubmittingandInfrastructurePendingstates and emit fromBaseWorkerby @desertaxle in #20964 - Add OS-level resource metric collection to flow run subprocesses by @desertaxle in #21071
- Add
end_timefilter support for flow and task runs by @jellyfish0316 in #21013 - Use
hmac.compare_digestfor auth token comparisons by @bunchesofdonald in #21072 - Use cyclopts native lazy loading for CLI commands by @zzstoatzz in #21017
- Extend
flow_run_loggerto accept a bareflow_run_idUUID by @devin-ai-integration[bot] in #21019 - Improve worker lifecycle logs and use exit code registry by @desertaxle in #20990
- Add deployment step lifecycle logs and error resolution hints by @devin-ai-integration[bot] in #21020
- Change heartbeat default from
Noneto 180s by @bunchesofdonald in #21058
- Handle
FlowRunCancellingObserversubscriber connection failure gracefully by @devin-ai-integration[bot] in #21039 - Fix
postgres_listenersslquery param causingCantChangeRuntimeParamErrorby @devin-ai-integration[bot] in #21040 - Add retry logic to concurrency lease renewal loop by @chuqCTC in #21065
- Add server version check for websocket clients by @devin-ai-integration[bot] in #21053
- Preserve explicit result storage during ad-hoc submission by @zzstoatzz in #21038
- Fix
CANCEL_NEWstrategy not cancelling late runs when limit is full by @devin-ai-integration[bot] in #21086 - Reconcile automations when Postgres notifications are unavailable by @zzstoatzz in #21089
- Surface template rendering failures in automation action status by @devin-ai-integration[bot] in #21045
- Fix env var leakage between concurrent deployments in worker by @devin-ai-integration[bot] in #21047
- Fix auth bypass via
endswith()health check path exemption by @bunchesofdonald in #21063 - Validate types in JSON object decoder by @bunchesofdonald in #21073
- Bump
packagingupper bound from<25.1to<26.1by @purificant in #21015
- Refactor Runner internals into single-responsibility services by @desertaxle in #20931
- Replace ad-hoc exit code interpreter with centralized registry by @devin-ai-integration[bot] in #21049
- Speed up CI checkout across all workflows by @desertaxle in #21077
- Fix flaky
test_two_subscriptions_get_all_eventsby handlingNoneheartbeats by @devin-ai-integration[bot] in #21037 - Fix flaky
test_cache_expiration_expiresby usingadvance_timefixture by @devin-ai-integration[bot] in #21070 - Disable heartbeats in tests to fix CI timeout by @desertaxle in #21062
- Make telemetry metrics module private by @devin-ai-integration[bot] in #21095
- Fix noisy ‘I/O operation on closed file’ during test teardown by @zzstoatzz in #21096
- Add Unify tagging for contract-tier docs pages by @zzstoatzz in #21055
3.6.21 - {"cli": { "speaks_json": true } }
Released on March 05, 2026
Enhancements ➕➕
- Add
--output jsonsupport toflow lscommand by @Br1an67 in #20907 - Fix
match_relatedtype hints and add Python examples forDeploymentEventTriggerby @devin-ai-integration[bot] in #20902 - Support multihost Postgres connection strings in LISTEN/NOTIFY listener by @devin-ai-integration[bot] in #20926
- Move event trimming from
EventPersisterto docket-baseddb_vacuumservice by @tom21100227 in #20811 - Add
--output jsontotask-run ls,work-pool ls, andconcurrency-limit lsby @zzstoatzz in #20967 - Add
--output jsonsupport toblock inspectandblock type inspectby @zzstoatzz in #20981 - Add
--output jsonsupport toflow-run logsandtask-run logsby @zzstoatzz in #20982 - Add
--output jsonsupport toserver services lsby @jellyfish0316 in #20983 - Add
--output jsonsupport tocloud workspaceandwebhookcommands by @zzstoatzz in #20984 - Add
--output jsonsupport towork-queue lsandpreviewby @zzstoatzz in #20985 - Add
--output jsonsupport towork-pool previewby @zzstoatzz in #20986 - Add
--output jsonsupport toprofile lsandconfig viewby @zzstoatzz in #20987 - Add composite index on
task_run(state_type, start_time)by @desertaxle in #20940 - Defer task worker import in CLI
taskcommand by @zzstoatzz in #20925 - Lazy-load top-level CLI command registration by @zzstoatzz in #20930
- Add centralized exit code hint registry by @desertaxle in #20959
- Add
PREFECT_CLIENT_SERVER_VERSION_CHECK_ENABLEDsetting by @devin-ai-integration[bot] in #20973 - Cache serialized context and env vars in
ProcessPoolTaskRunner.submit()by @devin-ai-integration[bot] in #20972
- Fix
postgres_listenerto preserve Kerberos/GSSAPI and TLS connection params by @devin-ai-integration[bot] in #20890 - Fix non-deterministic flow scanning in
prefect deployby @ashwanth0110 in #20874 - Remove Panel border from
work-pool createsample code output by @Br1an67 in #20906 - Fix broken link in
PrefectHTTPStatusErrormessage by @devin-ai-integration[bot] in #20938 - Prevent Rich console from word-wrapping CLI JSON output by @zzstoatzz in #20947
- Fix database reset failing on PostgreSQL with orphaned
state_idreferences by @devin-ai-integration[bot] in #20941 - Mark followers as seen and clean up lost follower Redis keys by @devin-ai-integration[bot] in #20955
- Fix expiration check on in-memory cache hits in
ResultStore._read/_areadby @devin-ai-integration[bot] in #20988
- Add clearer CLI benchmark regression gating feedback by @zzstoatzz in #20916
- Fix flaky test: mock
git_cloneinpip_install_reqstest by @devin-ai-integration[bot] in #20949 - Add apt retry configuration to Dockerfile to handle transient network errors by @devin-ai-integration[bot] in #20943
- Document prebuilt integration images and version pinning for workers by @rcash in #20893
- Improve MCP discoverability in existing docs IA by @gabcoyne in #20660
- Update rate limit docs to match unified limits by @zangell44 in #20927
- Add
pull_with_blockYAML example to Bitbucket integration docs by @toroleapinc in #20935 - Add missing
PREFECT_API_URLenv var in the self-hosted Docker Compose file by @Kiskadee-dev in #20897 - Add note about server default limit for client queries by @audreydng in #20909
- Document that deployment steps are just Python functions by @Sagargupta16 in #20956
- Minor cleanup from custom steps clarification by @zzstoatzz in #20963
3.6.20 - new cli, who dis?
Released on February 27, 2026 Enhancements ➕➕- Migrate CLI from
typertocyclopts, remove toggle and delegation machinery by @zzstoatzz in #20821 - Route
ProcessPoolTaskRunnersubprocess events and logs through a single parent queue, improving per-task performance by ~28% in log-heavy workloads by @desertaxle in #20864 - Add configurable subprocess message processors to
ProcessPoolTaskRunnerfor custom event/log handling in the parent forwarder by @desertaxle in #20869 - Use distinct FK scan for orphaned log/artifact vacuum queries, reducing cycle time from ~3.6s to ~0.5s on large databases by @zzstoatzz in #20868
- Avoid
Noneasset descriptions in events by @devin-ai-integration[bot] in #20840 - Lower default DB vacuum
batch_sizefrom 1000 to 200 to prevent query timeouts on Postgres by @zzstoatzz in #20857 - Fix subprocess events silently lost in
ProcessPoolTaskRunnerwhen task completes before async event forwarding by @devin-ai-integration[bot] in #20876 - Fix page header breadcrumb truncation for long entity names by @devin-ai-integration[bot] in #20870
- Add truncation to card breadcrumbs and locale format automation count by @devin-ai-integration[bot] in #20871
- Promote
_cyclopts/tosrc/prefect/cli/, removetyperdependency by @zzstoatzz in #20838 - Prevent
nvmfrom clobberingsetup-nodein pre-commit CI by @zzstoatzz in #20854 - Increase test timeout to fix flaky concurrency slot release test by @devin-ai-integration[bot] in #20843
- Replace inline SQLite compilation with pre-built Docker image for faster builds by @desertaxle in #20824
- Update rate limit docs for unified two-bucket system by @zangell44 in #20828
- Update docs logos and favicon by @znicholasbrown in #20858
3.6.19 - This release sucks in the best way possible
Released on February 24, 2026 This release introduces an optional database vacuum service that periodically deletes old flow runs and orphaned resources (logs, artifacts, artifact collections) to keep your database lean. It’s disabled by default — enable it withPREFECT_SERVER_SERVICES_DB_VACUUM_ENABLED=true. Once enabled, it runs hourly and removes terminal top-level flow runs older than 90 days. Both the retention period and frequency are configurable via PREFECT_SERVER_SERVICES_DB_VACUUM_RETENTION_PERIOD (in seconds, minimum 1 hour) and PREFECT_SERVER_SERVICES_DB_VACUUM_LOOP_SECONDS.
Enhancements ➕➕
- Add DB vacuum service in Docket by @tom21100227 in #20746
- Add Docker images for
prefect-gcpandprefect-azureby @devin-ai-integration[bot] in #20771
- Add SSRF protection to
CustomWebhookNotificationBlockby @devin-ai-integration[bot] in #20781 - Fix scheduler to check per-schedule run counts for multi-schedule deployments by @devin-ai-integration[bot] in #20699
- Fix FastAPI 0.132.0 compatibility by @devin-ai-integration[bot] in #20822
- Add UI v2 unit tests and E2E tests to Devin flaky test workflow by @devin-ai-integration[bot] in #20774
- Migrate work-pool command to cyclopts by @zzstoatzz in #20766
- Migrate transfer command to cyclopts by @zzstoatzz in #20767
- Migrate cloud command to cyclopts by @zzstoatzz in #20780
- Migrate deploy command to cyclopts by @zzstoatzz in #20783
- Remove bogus alias from cyclopts deployment command by @zzstoatzz in #20793
- Add deploy to cyclopts routing and remove dead delegation code by @zzstoatzz in #20794
- Migrate automation command to cyclopts and register init at root level by @zzstoatzz in #20802
- Split database and orchestration tests into separate jobs by @desertaxle in #20803
- Clean up cyclopts phase 2 — server status, stdin handling, watch monkeypatch by @devin-ai-integration[bot] in #20807
- Add
ImportStringsection to form-building guide by @zzstoatzz in #20768 - Fix MDX rendering issues in prefect-databricks API reference docs by @desertaxle in #20792
3.6.18 - The annotation that minds its own business
Released on February 19, 2026 Enhancements ➕➕- Add
opaqueannotation to prevent recursive traversal of resolved task inputs by @devin-ai-integration[bot] in #20650 - Add
PREFECT_WORKER_DEBUG_MODEfor worker-only debug logging by @devin-ai-integration[bot] in #20653 - Support
DateTimeDeltaas interval option inIntervalScheduleby @devin-ai-integration[bot] in #20692
- Include duration fields in
TaskRunResponseby @vyagubov in #20664 - Skip lease renewal and release when no concurrency limits exist by @zzstoatzz in #20666
- Fix order-dependent slug collisions in deployment schedule
replaceshandling by @chrisguidry in #20669 - Strip null bytes from log messages before database insert by @Mr-Neutr0n in #20677
- Fix
uq_task_run__flow_run_id_task_key_dynamic_keyconstraint violation with multiple background workers by @devin-ai-integration[bot] in #20697 - Fix async listener for UNIX domain socket PostgreSQL connections by @devin-ai-integration[bot] in #20744
- Bump
pydocketminimum version to 0.17.7 by @devin-ai-integration[bot] in #20731
- Update YAML templates to conform with yamllint standards by @veeceey in #20594
- Migrate
server,worker,shellCLI commands to cyclopts by @zzstoatzz in #20603 - Add Claude Code
SessionStarthook to symlinkAGENTS.mdfiles toCLAUDE.mdfiles by @desertaxle in #20667 - Migrate
flowCLI command to cyclopts by @zzstoatzz in #20672 - Migrate
flow-runCLI command to cyclopts by @zzstoatzz in #20673 - Add regression gate to CLI startup benchmarks by @zzstoatzz in #20678
- Migrate
deploymentCLI command to cyclopts by @zzstoatzz in #20721 - Migrate
dashboard,task,sdkCLI commands to cyclopts by @zzstoatzz in #20723 - Migrate
concurrency-limit,events,experimentalCLI commands to cyclopts by @zzstoatzz in #20724 - Migrate
variable,artifact,task-run,apiCLI commands to cyclopts by @zzstoatzz in #20740 - Migrate
dev,global-concurrency-limitCLI commands to cyclopts by @zzstoatzz in #20745 - Migrate
blockCLI command to cyclopts and add command aliases by @zzstoatzz in #20749 - Migrate
work-queueCLI command to cyclopts by @zzstoatzz in #20763
- Add comprehensive base job template examples for Kubernetes by @kingsley-123 in #20670
- Set up automatic API reference docs via mdxify for all integration packages by @devin-ai-integration[bot] in #20679, #20704–#20720
- Exclude
analyticsmodule from API reference docs by @devin-ai-integration[bot] in #20722 - Add documentation for logging inside hooks by @pblocz in #20734
- Clarify that primitive
wait_for_inputtypes generate avaluefield for programmatic resume by @desertaxle in #20741
3.6.17 - Goodbye, Ghost in the WebSocket
Released on February 12, 2026 New Features 🎉- Add
prefect server statuscommand by @devin-ai-integration[bot] in #20619
- Make
PrefectFutureList.result()fail-fast usingas_completedby @desertaxle in #20592 - Improve CLI connection message for self-hosted server by @Kulkarnivaishnavi473 in #20623
- Add
replacesfield for renaming schedule slugs by @desertaxle in #20460 - Add attribution headers to SDK API requests by @zangell44 in #20508
- Fix flow timeout not retrying when retries are enabled by @devin-ai-integration[bot] in #20572
- Fix the flow run graph being hidden when a flow run is in
AwaitingRetrystate by @vyagubov in #20318 - Fix websocket timeout when watching long-running flow runs by @devin-ai-integration[bot] in #20590
- Handle missing resources gracefully in
prefect transferautomations by @devin-ai-integration[bot] in #20639 - Fix
prefect deploystripping{{ ctx.flow.* }}templates from job variables by @desertaxle in #20611 - Add
ResumeFlowRunaction to automation events by @lordsoffallen in #20604 - Fix
print_as_logso log formatters report the caller’s location by @devin-ai-integration[bot] in #20618
- Deflake lease renewal failure tests: revoke via API to avoid FS race by @devin-ai-integration[bot] in #20576
- Fix flaky
test_error_handling_on_cache_policiesby increasing random range by @devin-ai-integration[bot] in #20566 - Fix flaky
test_docker_deploy: add retry logic for transient Docker registry errors by @devin-ai-integration[bot] in #20580 - Add cyclopts CLI migration infrastructure by @zzstoatzz in #20584
- Migrate
config,profile,versionto cyclopts (wave 1) by @zzstoatzz in #20585 - Add
CycloptsCliRunnerfor in-process CLI testing by @zzstoatzz in #20609 - Fix flaky threaded client lifespan test by using thread-safe counters by @devin-ai-integration[bot] in #20616
- Fix potential script injection in Docker build workflows by @RinZ27 in #20593
- Fix flaky concurrency timeout tests by @devin-ai-integration[bot] in #20568
- Add CLI subdirectories to
EXCLUDE_FROM_CLEAR_DB_AUTO_MARKby @devin-ai-integration[bot] in #20578 - Replace
UI_COMPONENTS_CONTENTS_PRS_RWwithGITHUB_TOKENin nightly release workflow by @jamiezieziula in #20602 - Use PAT token for nightly release workflow by @jamiezieziula in #20627
- Increase SQLite
busy_timeoutfor better test concurrency by @devin-ai-integration[bot] in #20553
- Update manage workspace instructions by @rcash in #20569
- Add testing with
caplogexample by @rcash in #20570 - Remove deprecated GitHub Action reference by @seanpwlms in #20610
- Add
docs/AGENTS.mdandwrite-docsskill for AI agent guidance by @desertaxle in #20606 - Fix inconsistent deployment concurrency limit documentation by @devin-ai-integration[bot] in #20622
- Fix incorrect
concurrency_optionskey in debouncing guide by @desertaxle in #20633 - Add Telegram notification example by @Rodrigorm33 in #20385
- Fix MDX OpenAPI frontmatter to match
schema.jsonpaths by @devin-ai-integration[bot] in #20620
- Add
include_filessupport to@ecsdecorator for bundling non-Python files by @desertaxle in #20551
3.6.16 - It’s Bulking Season
Released on February 05, 2026 New Features 🎉- Add
prefect cloud assetlist and delete commands by @zzstoatzz in #20524 - Add bulk operation endpoints for flow runs, deployments, and flows by @bunchesofdonald in #20469
- Add SDK instrumentation module by @desertaxle in #20438
- Allow infra name templating with
flowandflow_runby @Rodrigorm33 in #20358 - Add
max_scheduled_runs,parameters, andslugfields to deployment schedule methods by @devin-ai-integration[bot] in #20556
- Fix
visit_collectionto handleNamedTuples by @chuqCTC in #20517 - Use count endpoint for deployments page empty state check by @zzstoatzz in #20404
- Handle non-serializable objects in
JsonFormatterfor logging by @devin-ai-integration[bot] in #20482 - Fix env var template resolution in
deploy --allconsole output by @devin-ai-integration[bot] in #20511 - Resolve circular import when plugins import from
prefectby @desertaxle in #20514 - Fix stale
TaskRunContextleaking into Pending event related resources by @bunchesofdonald in #20536
- Remove old admin routes by @desertaxle in #20515
- Untrack analytics config file to fix build versioning by @devin-ai-integration[bot] in #20483
- Add regression test for fan-out sibling asset dependency isolation by @chrisguidry in #20478
- Fix flaky test: add thread completion check and increase timeout by @devin-ai-integration[bot] in #20505
- Use unique block type slugs in tests to prevent parallel test conflicts by @devin-ai-integration[bot] in #20496
- Exclude 10 test modules from
clear_dbauto-mark by @devin-ai-integration[bot] in #20487 - Add more test modules to
EXCLUDE_FROM_CLEAR_DB_AUTO_MARKby @devin-ai-integration[bot] in #20490 - Add DB-LIGHT test modules to
clear_dbexclusion list by @devin-ai-integration[bot] in #20491 - Add
test_flow_runs.pyandtelemetry/toclear_dbexclusion list by @devin-ai-integration[bot] in #20492 - Add
input/,deployment/,experimental/toclear_dbexclusion list by @devin-ai-integration[bot] in #20493 - Add
tests/resultstoclear_dbexclusion list by @devin-ai-integration[bot] in #20495 - Add 5 test modules to
EXCLUDE_FROM_CLEAR_DB_AUTO_MARKby @devin-ai-integration[bot] in #20504 - Add
tests/events/clienttoclear_dbexclusion list by @devin-ai-integration[bot] in #20506 - Add
tests/infrastructuretoclear_dbexclusion list by @devin-ai-integration[bot] in #20507 - Add
tests/blocks/toEXCLUDE_FROM_CLEAR_DB_AUTO_MARKby @devin-ai-integration[bot] in #20512 - Add
tests/test_task_runners.pyandtests/test_variables.pytoclear_dbexclusion list by @devin-ai-integration[bot] in #20530 - Add
tests/test_futures.pyandtests/test_logging.pytoclear_dbexclusion list by @devin-ai-integration[bot] in #20531 - Add UUID-based randomization to top-level test files by @devin-ai-integration[bot] in #20539
- Add UUID-based randomization to CLI Cloud test files by @devin-ai-integration[bot] in #20546
- Add UUID-based randomization to CLI Deploy test files by @devin-ai-integration[bot] in #20552
- Add UUID-based randomization to CLI transfer test files by @devin-ai-integration[bot] in #20563
- Add Claude Code marketplace install instructions to MCP docs by @devin-ai-integration[bot] in #20545
3.6.15 - Simply Authful
Released on January 30, 2026 Bug Fixes 🐞- Fix
PrefectCloudEventsClientauth handshake breaking Cloud connections by @desertaxle in #20472 - Cap concurrency limit
retry-afterto prevent excessive delays from burst traffic by @bunchesofdonald in #20470
3.6.14 - A Prefect Server for Every ::1
Released on January 29, 2026 Enhancements ➕➕- Support parsing TOML 1.0 on Python 3.11+ by @zed in #20398
- Make runner cancellation observing critical to runner health by @joshuastagner in #20219
- Reload root settings after running plugins to enable environment variable updates to take effect by @desertaxle in #20393
- Support IPv6 addresses in
prefect server startby @zzstoatzz in #20361 - Add authentication to
/api/events/inWebSocket endpoint by @devin-ai-integration[bot] in #20372
- Add polling fallback in
PrefectFlowRunFuture.wait_asyncby @devin-ai-integration[bot] in #20406 - Fix race condition in ephemeral consumer group cleanup by @devin-ai-integration[bot] in #20435
- Fix flow runs with parameter validation failures missing
end_timeby @devin-ai-integration[bot] in #20369 - Fix
flow_run.idreturning string"None"instead ofNoneby @bnaul in #20425
- Bump
pydocketminimum version to 0.17.2 by @chrisguidry in #20405
- Replace
skipif(sys.platform != 'win32')with@pytest.mark.windowsand removeskipif(sys.platform == 'win32')by @devin-ai-integration[bot] in #20327 - Fix flaky test: use
pytest.approxfordate_diff_secondstiming assertions by @devin-ai-integration[bot] in #20354 - Migrate
deployments/runner.pyfrom@sync_compatibleto@async_dispatchby @zzstoatzz in #20359 - Fix flaky
test_timeout_concurrency_slot_releasedtests by @devin-ai-integration[bot] in #20364 - Migrate
Task.serve()from@sync_compatibleto@async_dispatchby @zzstoatzz in #20374 - Migrate
Flow.deploy()from@sync_compatibleto@async_dispatchby @zzstoatzz in #20380 - Migrate
Runnermethods from@sync_compatibleto@async_dispatchby @zzstoatzz in #20382 - Fix flaky docket task keys tests: use custom lifespan without worker by @devin-ai-integration[bot] in #20408
- Fix flaky test: use
TestClientas context manager for proper lifespan cleanup by @devin-ai-integration[bot] in #20426 - Add CLI benchmark harness as external dependency by @zzstoatzz in #20439
- Add in-repo CLI benchmark workflow by @zzstoatzz in #20451
- Add accordion for logging pydantic-ai tool calls to Prefect by @zzstoatzz in #20410
- Expand task invocation methods documentation by @devin-ai-integration[bot] in #20403
- Add Docket URL configuration for HA background services by @devin-ai-integration[bot] in #20422
- Add Bluesky link to README by @zzstoatzz in #20413
3.6.13 - The heartbeat is coming from inside the engine
Released on January 23, 2026 Enhancements ➕➕- Add
FlowRunFilterCreatedByby @zzstoatzz in #20256 - Add retry logic for
PrefectEventsClient.__aenter__()initial connection by @devin-ai-integration[bot] in #20328
- Move flow run heartbeat event emission to flow run engine by @zzstoatzz in #19641
- Fix websocket cleanup
AttributeErrorin event clients by @devin-ai-integration[bot] in #20323 - Add warning when sync task with timeout runs in worker thread by @desertaxle in #20315
- Prevent GitHub token leakage in git error messages by @Rodrigorm33 in #20330
- Consolidate
strip_auth_from_urlintoprefect._internal.urlsby @zzstoatzz in #20331 - Fix git URL comparison when credentials are embedded in URL by @zzstoatzz in #20346
- Fix
slot_decay_per_secondNonevalue causing 422 error inupsert_global_concurrency_limit_by_nameby @devin-ai-integration[bot] in #20320 - Fix Windows-specific process termination bug in
hosted_api_serverfixture by @devin-ai-integration[bot] in #20322
- Fix flaky docket task keys tests: include running tasks in key assertions by @devin-ai-integration[bot] in #20293
- Pin miniconda3 image to fix conda Docker build failure by @desertaxle in #20309
- Bump dependencies in lockfile by @zzstoatzz in #20205
- Push dev images to main repository with dev tags by @mitchnielsen in #20311
- Fix flaky test cleanup: use
ignore_errorsinrmtreefor SQLite race condition by @devin-ai-integration[bot] in #20326 - Fix release workflows not triggering on prereleases by @mitchnielsen in #20332
- Fix conda Docker build by installing git from Trixie on Bookworm by @desertaxle in #20345
- Fix flaky test: add
sys.pathisolation fixture for importtools tests by @devin-ai-integration[bot] in #20347 - Migrate
task_worker.pyfrom@sync_compatibleto@async_dispatchby @zzstoatzz in #20259 - Migrate testing fixtures from
@sync_compatibleto@async_dispatchby @zzstoatzz in #20313 - Migrate
ResultStorefrom@sync_compatibleto@async_dispatchby @zzstoatzz in #20314 - Migrate
Flow.visualizefrom@sync_compatibleto@async_dispatchby @zzstoatzz in #20353
- Update job variables page title to cover flow runs by @devin-ai-integration[bot] in #20351
3.6.12 - It’s not a feature, it’s a bug!
Released on January 20, 2026 Enhancements ➕➕- Add httpx.ConnectError to client retry exceptions by @joshuastagner in #20276
- Add build=False documentation to flow.deploy guide by @devin-ai-integration[bot] in #20269
- fix: display error details nicely in
work-pool createcommand by @devin-ai-integration[bot] in #20277 - fix: remove CANCELLED from EnforceCancellingToCancelledTransition to allow retrying cancelled flows by @zzstoatzz in #20275
- Add retry logic to
PrefectEventSubscriber.__aenter__()for initial connections by @devin-ai-integration[bot] in #20295 - fix: convert dynamic_key to str in sync client’s create_task_run by @zzstoatzz in #20302
- Fix wait() timeout not being respected when using WatcherThreadCancelScope by @devin-ai-integration[bot] in #20257
- migrate RemoteFileSystem and SMB from @sync_compatible to @async_dispatch by @zzstoatzz in #20230
- Migrate notification blocks from @sync_compatible to @async_dispatch by @zzstoatzz in #20258
- Fix Devin flaky tests workflow API integration by @desertaxle in #20272
- Add GitHub Actions workflow to trigger Devin.ai on test failures by @desertaxle in #20255
- Add release notes for integration packages by @desertaxle in #20266
3.6.11 - It’s my generation, baby
Released on January 15, 2026 This release introducesprefect sdk generate a new CLI command that generates fully-typed, custom Python SDKs from the deployments in your workspace or self-hosted server, making it easy to trigger your deployments from other workflows with confidence.
To see how it works, check out the Prefect docs. This functionality is currently in beta, so try it out and open a GitHub issue if you have feedback!
New Features 🎉
- Add
prefect sdk generateCLI command for generating custom deployment SDKs from existing deployments by @desertaxle in #20150, #20158, #20167, #20172, #20173
- Add JSON output to
prefect variable lsCLI command by @xeniumcode in #20192 - Add JSON output to
prefect global-concurrency-limit lsCLI command by @xeniumcode in #20194 - Add JSON output to
prefect artifactCLI commands by @xeniumcode in #20193 - Add JSON output to
prefect block lsCLI command by @xeniumcode in #20195 - Add JSON output to
prefect block type lsCLI command by @xeniumcode in #20196 - Add JSON output to
prefect deployment scheduleCLI commands by @xeniumcode in #20197 - Add JSON output to
prefect deploymentCLI commands by @xeniumcode in #20198 - Migrate
pause,suspend,resume, andrun_inputfrom@sync_compatibleto@async_dispatchby @devin-ai-integration[bot] in #20178 - Add
forceparameter toChangeFlowRunStateandflow_run_idJinja filter by @zzstoatzz in #20112 - Link
automation.action.*events toautomation.triggeredevent by @chrisguidry in #20227 - Add
DISABLEDto clientDeploymentStatusenum for Cloud compatibility by @chrisguidry in #20244
- Fix flow run cancellation handling bugs by @joshuastagner in #20143
- Fix race condition in filesystem lease storage with atomic writes by @devin-ai-integration[bot] in #20153
- Add task keys to docket calls in API handlers to prevent duplicate execution by @desertaxle in #20210
- Support ISO 8601 duration strings for interval schedules in
prefect.yamlby @zzstoatzz in #20238 - Disable Docket result storage to prevent memory bloat by @desertaxle in #20253
- Preserve the
updatedcolumn value of deployments when marking them as ready by @vkrot-innio in #19936
- Add
arun_deploymentand replace@sync_compatiblewith@async_dispatchby @desertaxle in #20160 - Patch correct method in
test_concurrency_respects_timeoutby @devin-ai-integration[bot] in #20185 - Fix flaky test by reducing
slot_decay_per_secondto prevent race condition by @devin-ai-integration[bot] in #20208 - Remove incorrect docstrings from CLI ls commands by @zzstoatzz in #20206
- Add Claude command frontmatter by @zzstoatzz in #20224
- Enable multi-checker type safety tests with mypy, pyright, and ty by @zzstoatzz in #20159
- Migrate
concurrency/v1from@sync_compatibleto@async_dispatchby @zzstoatzz in #20225 - Migrate
blocks/core.pyfrom@sync_compatibleto@async_dispatchby @devin-ai-integration[bot] in #20226 - Stale item cleanup enhancements by @bdalpe in #20145
- Add plan label to exclude from release notes by @zzstoatzz in #20182
- Auto-label PRs that touch
plans/directory by @zzstoatzz in #20183 - Disable migrations and block registration for multi-worker test by @devin-ai-integration[bot] in #20179
- Fix plan label to only apply when all changed files are in
plans/by @desertaxle in #20207
- Add ECS base job template customization guide by @zzstoatzz in #20249
- Fix MDX parsing error in events CLI documentation by @desertaxle in #20252
- Add documentation for
prefect sdk generateCLI by @desertaxle in #20241
3.6.10 - Five Bugs Walked Into A Bar And None Of Them Left
Released on January 08, 2026 Enhancements ➕➕- Add
prefect automation updateCLI command by @devin-ai-integration[bot] in #20118 - Add upserting global concurrency limit decay by @cbrown1234 in #20124
- Fix
AttributeErrorinConsumer.cleanup()for non-memory brokers by @devin-ai-integration[bot] in #20089 - Fix
exception_to_crashed_state_syncfailing without async backend by @zzstoatzz in #20139 - Fix
MockValSerserialization error withStateDetailsby @zzstoatzz in #20127 - Resolve race condition in compound trigger evaluation by @desertaxle in #20106
- Fix
AttributeErrorforfunctools.partialhooks inRunnerby @devin-ai-integration[bot] in #20136
- Add
UISettingsmodel for/ui-settingsendpoint by @desertaxle in #20103 - Fix flaky
test_concurrency_respects_timeouttest by @devin-ai-integration[bot] in #20138 - Update
@prefecthq/prefect-ui-libraryto version 3.14.8 by @marvin-robot in #20147 - Run integration tests against PostgreSQL to prevent CI timeouts by @devin-ai-integration[bot] in #20080
- Use correct apt version syntax for git in Dockerfile by @devin-ai-integration[bot] in #20094
- Link to MCP server security FAQ by @zzstoatzz in #20120
- Fix broken ECS worker deployment guide links by @devin-ai-integration[bot] in #20119
- Clarify that base job template variables must be referenced in
job_configurationby @zzstoatzz in #20133
3.6.9 - Auld Lang Sync
Released on December 31, 2025 New Features 🎉- Add worker-side cancellation for pending flow runs by @joshuastagner in #20022
- Add JSON schema for
prefect.yamlfiles by @zzstoatzz in #19996 - Send entrypoint pip install errors to Prefect logs by @jakekaplan in #20058
- Run read and count queries concurrently in paginate endpoints by @zzstoatzz in #20049
- Preserve symlinks in
get_directoryinstead of following them by @majiayu000 in #19993 - Fix
GitRepositoryname parameter preservation in pull step conversion by @devin-ai-integration[bot] in #20004 - Add explicit
ruamel.yaml.clibdependency to fix Docker builds by @zzstoatzz in #20068
- Update
@prefecthq/prefect-ui-libraryto version 3.14.5 by @marvin-robot in #20003 - Add GitHub Actions workflow for UI v2 E2E tests by @devin-ai-integration[bot] in #20042
3.6.8 - On Exception! On Timeout! On Error and Failure! 🦌
Released on December 24, 2025 New Features 🎉- Add
prefect flow-run retrycommand by @desertaxle in #19858
- Add
urlproperty to server-sideReceivedEventfor automation templates by @devin-ai-integration[bot] in #19851
- Add timeout to Docket worker shutdown by @desertaxle in #19940
- Prevent dictionary mutation during iteration in
preprocess_schemaby @zzstoatzz in #19946 - Allow string
form_datainCustomWebhookNotificationBlockby @zzstoatzz in #19953 - Bump
pydocketversion and remove background worker shutdown timeout by @desertaxle in #19969 - Fix
TASK_SOURCEcache policy for remote execution withcloudpickleby @desertaxle in #19926
- Run lint, build, and test in parallel for ui-v2 checks by @devin-ai-integration[bot] in #19884
- Fix docker deploy integration test failing due to uv import by @desertaxle in #19899
- Update kickoff-release schedule from Monday to Thursday by @devin-ai-integration[bot] in #19930
- Add security considerations to Prefect MCP server guide by @zzstoatzz in #19875
- Document AWS IAM role assumption by @seanpwlms in #19963
3.6.7 - LoopService #OpenToWork: 3+ Years Experience Looping
Released on December 18, 2025 Enhancements ➕➕- Add support for AWS IAM authentication for PostgreSQL database by @alaminopu in #19580
- Add generic typing support for
Variable.getmethod by @devin-ai-integration[bot] in #19764 - Convert
late_runsservice to Docket perpetual function by @zzstoatzz in #19722 - Convert
repossessorservice to Docket perpetual function by @zzstoatzz in #19739 - Convert
foremanservice to Docket perpetual function by @zzstoatzz in #19741 - Convert
telemetryservice to Docket perpetual function by @zzstoatzz in #19754 - Convert scheduler and proactive triggers to Docket, remove
LoopServiceby @zzstoatzz in #19756
- Update broken links in creating-automations docs by @devin-ai-integration[bot] in #19759
- Silence retryable SQLite lock errors from
docket.workerlogger by @devin-ai-integration[bot] in #19772 - Exclude unset
grace_period_secondsfrom deploymentconcurrency_optionsby @zzstoatzz in #19784 - Correct
docket_urlsetting path toserver.docket.urlby @zzstoatzz in #19791 - Fix Mattermost bot name issue by @tre-ert in #19780
- Restore netloc-based credential formatting for YAML deployments by @zzstoatzz in #19873
- Add @chrisguidry as a CODEOWNER by @zzstoatzz in #19738
- Add negative matching documentation for automation triggers by @chrisguidry in #19760
3.6.6 - The Eternal Docket of the Spotless Server
Released on December 08, 2025 Enhancements ➕➕- Add client-side configuration for deployment concurrency grace period by @devin-ai-integration[bot] in #19489
- Add PostgreSQL
search_pathsupport via settings by @devin-ai-integration[bot] in #19620 - Add memory safeguards to event persister service by @desertaxle in #19651
- Add perpetual services infrastructure and convert
cancellation_cleanupto perpetual Docket task by @zzstoatzz in #19715 - Convert
pause_expirationsservice to perpetual Docket task by @zzstoatzz in #19719
- Prevent uvloop from setting global event loop policy in healthcheck by @zzstoatzz in #19660
- Clarify
result_storageusage with@taskand@flowdecorators by @devin-ai-integration[bot] in #19671 - Exclude
DEFAULTcache policy from triggering automaticpersist_resultby @devin-ai-integration[bot] in #19673 - Remove return type annotation from settings serializer to fix OpenAPI schema by @zzstoatzz in #19616
- Use
history_interval_secondsas parameter name in OpenAPI schema by @desertaxle in #19659
- Turn off dependabot for Vue UI package updates by @desertaxle in #19636
- Add weekly release kickoff workflow by @desertaxle in #19661
- Migrate
prefect.input.actionsfromsync_compatibletoasync_dispatchby @zzstoatzz in #19632 - Remove auto-generate docs workflow by @desertaxle in #19665
- Fix incorrect Dockerfile example in “Deploy via Python” guide by @desertaxle in #19653
3.6.5 - Batch Me If You Can
Released on December 04, 2025 Enhancements ➕➕- Raise if event is too big by @jakekaplan in #19531
- Support
Pathobjects inresult_storageparameter by @zzstoatzz in #19533 - Hide “Join the Community” in air-gapped deployments by @zzstoatzz in #19540
- Parametrize
xreadgroupbatch size in consumer and addEventPersisterservice setting by @saschwartz in #19545 - Parametrize
xautoclaimbatch size by @saschwartz in #19557 - Parametrize
TaskRunRecorderandTriggerservice message read batch size by @saschwartz in #19559 - Add Slack GovCloud (slack-gov.com) webhook support to
SlackWebhookblock by @devin-ai-integration[bot] in #19565 - Support dot-delimited syntax for
job_variablesin workers by @devin-ai-integration[bot] in #19619 - Add client-side caching for concurrency limits by @devin-ai-integration[bot] in #19625
- Support
username:passwordauth for self-hosted BitBucket instances by @zzstoatzz in #19516 - Optimize
/api/task_runs/countendpoint performance by @naaa760 in #19548 - Fix docker compose file in self hosted docs by @rodeyfeld in #19551
- Fix performance issues with sync tasks on Windows by @desertaxle in #19595
- Fix dead thread hang by @zzstoatzz in #19601
- Allow Jinja templates in trigger enabled field during YAML loading by @zzstoatzz in #19610
- Fix compatibility with
fastapi==0.123.7by @desertaxle in #19626 - Allow EC2 task definitions to omit
launchTypefor capacity providers by @zzstoatzz in #19630
- Update sucrase to remove vulnerable glob dependency by @zzstoatzz in #19599
- Add timeout to worker teardown to prevent test flakes by @zzstoatzz in #19465
- Update CODEOWNERS by @desertaxle in #19578
- Pin
pytest-asyncioto fix 3.10 client tests by @desertaxle in #19609 - Fix flakes in
TestReadTaskRunCountsByState::test_returns_all_state_typesby @desertaxle in #19612
- Add per-worker task concurrency example by @zzstoatzz in #19541
- Improve database maintenance documentation and examples by @zzstoatzz in #19604
- Fix YAML key for Bitbucket repository by @desertaxle in #19607
- Add Google Tag Manager integration to docs by @zzstoatzz in #19629
3.6.4 - No Deployment Left Unparametrized
Released on November 21, 2025 Bug Fixes 🐞- fix: preserve event template parameters in deployment triggers by @zzstoatzz in #19504
- Fix truncating log behavior by @jakekaplan in #19496
- Chore: Bump ui library by @znicholasbrown in #19492
- docs: Add migration note about unmapped mutable objects by @zzstoatzz in #19494
3.6.3 - That’s JSON Bourne
Released on November 19, 2025 Enhancements ➕➕- Add
-o jsonoutput option toprefect flow-run lscommand by @devin-ai-integration[bot] in #19484 - fix: allow pause_flow_run() to pause parent flow when called from task by @zzstoatzz in #19457
- Use acquisition service pattern for lease-based concurrency slots by @bunchesofdonald in #19451
- fix: respect subflow attributes (log_prints, result_storage) when running inside task by @zzstoatzz in #19450
- fix: defer forward reference resolution in ValidatedFunction by @zzstoatzz in #19452
- fix: validate deployment triggers after templating so jinja-based booleans work, should close #19348 by @iclectic in #19414
- fix: show detailed validation errors for top-level prefect.yaml fields by @zzstoatzz in #19468
- Clamp denied_slots decay rate to match retry-after calculation by @bunchesofdonald in #19466
- Fix: Enable parameter type checking for @task decorator by @zzstoatzz in #19459
- add —build-arg to dev build-image command to allow direct passing of… by @conrade-ctc in #19473
- Add database cleanup example with human/AI approval by @zzstoatzz in #19456
3.6.2 - The Missing Link
Released on November 13, 2025 Enhancements ➕- Add causal link from automation action events to triggering events by @zzstoatzz in #19426
- cap retry-after for concurrency limits to prevent excessive delays by @zzstoatzz in #19428
- accept numeric values for PREFECT_API_SERVICES_LATE_RUNS_AFTER_SECONDS by @zzstoatzz in #19434
- add work_queue_id to DeploymentResponse by @zzstoatzz in #19417
- correct GitHub Actions conditional syntax in integration release workflow by @zzstoatzz in #19439
3.6.1 - Pop, Lock it, Docket
Released on November 10, 2025 Enhancements ➕- Add logfire sampling configuration and fix boolean env var handling by @zzstoatzz in #19383
- Fix interactive deploy CLI selecting wrong flow when opting out by @zzstoatzz in #19392
- Fix deployment.parameters in nested flows using ContextVars by @zzstoatzz in #19366
- Upgrade pydocket to stable 0.13.0 release by @zzstoatzz in #19401
- Add client methods for querying events via REST API by @zzstoatzz in #19382
3.6.0 - Throw it on the docket and we’ll get to it in a jiffy
This release addspydocket, a background task system, to replace FastAPI’s background_tasks. Background tasks now include automatic retries and can optionally use Redis as a backing layer for enhanced durable execution.
Released on November 07, 2025
Enhancements ➕➕
- Replace FastAPI
background_taskusage withpydocketby @desertaxle in #19377 - Emit events for deployment pull step execution by @zzstoatzz in #19339
- Fix import order dependency and circular import issues by @zzstoatzz in #19344
- Fix
deployment.parametersin subprocess flows by @zzstoatzz in #19331 - Fix misleading
pyrighterror when calling async task with wrong argument types by @zzstoatzz in #19327 - Fix
EventsWorkersingleton leak inprefect_test_harnessby @zzstoatzz in #19343 - Fix
run_deploymentexecution graph display when called from tasks by @desertaxle in #19361 - Fix automation deletion deadlock by enforcing consistent lock ordering by @zzstoatzz in #19369
- Update
prefect-ui-libraryto latest version by @znicholasbrown in #19350
- Remove legacy settings imports from CLI by @desertaxle in #19353
- Clean up root directory by @zzstoatzz in #19355
- Replace Optional with pipe syntax in _trim_traceback function by @devin-ai-integration[bot] in #19358
- Auto-close superseded documentation PRs by @zzstoatzz in #19357
- Add @chrisguidry as a CODEOWNER by @desertaxle in #19368
- Sync UI v2 OpenAPI schema with node v20.19.0 by @zzstoatzz in #19373
- Migrate
RedisStorageContainerfromsync_compatibletoasync_dispatchby @devin-ai-integration[bot] in #19363
- Add Pulumi section to Infrastructure as Code documentation by @bdalpe in #19352
- Fix link in ECS worker docs by @mattiamatrix in #19364