v2.0.4

Minor
Published on September 29, 2026

Changelog

🚀 Features

controller

  • 328de91 add tenancy access check (#19689), closes #19689

core

  • 721b8ca add isDateBetween() Pebble function, closes #19502

execution

  • 4e9ffc4 allow to break out of Loop iterations

triggers

  • 5677a89 link each trigger to the executions it created (#19816), closes #12784 #19816

worker

  • 4fbfda0 reach the KV store through the controller, configurably (#19812), closes #19812
  • b267293 chunked streaming on the worker controller grpc surface
  • 204b9a6 carry the client edition on gRPC requests (#19525), closes #19525

📘 Subtasks

version

  • d97ca67 update to version '2.0.4'

🐛 Bug Fixes

ai

  • dd8b0e2 keep copilot custom header names verbatim for yaml providers (#19677), closes #19677
  • 7b39a05 keep the copilot hero visible and the empty state scrollable on short viewports (#19800), closes #19777 #19800

core

  • e2cbf2c handle Kestra markers inside OTLP log bodies (2.0.x) (#19902), closes #19902
  • 215acdb compilation issue
  • a5d1325 resolve host from raw authority in HTTP allow/deny-list matching
  • 4c34bba order SubflowExecutionEnd batch locks by parent to avoid executor deadlock (#19745) (#19750), closes #19745 #19750

design-system

  • c6cd65f center one-line alerts (#19761), closes #19761
  • 4634b2a await the i18n registration install starts (#19743), closes #19743
  • a1ebfde 29 --ks-* references that resolve to nothing (#19193), closes #18777 #19088 #19193

executions

  • 6e0747d a kill ends a retrying task run, and an expired retry never revives a killed execution, closes #19679

executor

  • b220d10 only expose dependsOn executions outputs in Flow trigger outputs (#19810), closes #19810
  • bc86c85 release the lease of a WorkingDirectory once it ends, closes #19678
  • fdd3614 do not resubmit a task run that has already ended, closes #19678

flows

  • 219d6dd suggest nested and errors task ids after outputs. (#19888), closes #11079 #19888
  • 869475a filter the blueprint tag list by the search (#19855), closes #19782 #19855

iam

  • fbbe901 resolve the MCP server id from the matched route, not the raw path

plugins

  • cb7c65e show the class name first when picking a type in the editor (#19747), closes #19747
  • ba99e32 plugin scan in configs commands (#19737), closes #13741 #19737
  • c72b638 prevent installed versions from leaking across navigation (#19735), closes #19735

system

  • edca577 keep /prometheus reachable on the management endpoint (#18258), closes #18258

ui

  • 3cbcca0 add blueprint template argument validation to the blueprints store
  • e6cd260 add templateArgumentsOrder to the flow blueprint template type

worker

  • 6c2ea77 report a forced termination when results may not have reached the controller, closes #19680
  • 6dbe5b2 reclaim the worker jobs orphaned by an inactive worker, closes #19680

🏭 Tests

executions

  • 3ba78b6 run the real DefaultExecutor in the testkit, one delivery at a time

  • 01cf501 2.0.x: executor refactor (ExecutorCore, injectable clock) and executor test kit (#19714), closes #19517 #19714

Contributors

We'd like to thank the following people for their contributions: Barthélémy Ledoux, Claude, Claude Opus 5 (1M context), Claude Opus 5.5, Dhruv Gupta, Florian Hussonnois, François Delbrayelle, GitHub, Loïc Mathieu, Malay Dewangan, Maxime Wojtczak, Miloš Paunović, Nicolas K., Piyush Bhaskar, Roman Acevedo, Rémi Barthe, Sheikh Limon, Steven Meek, YannC, YannC., Yerang-RB, github-actions[bot], nKwiatkowski