Enhancements ➕➕
- Add search and ordering to the automations page by @uinstinct in #23048
- Align flow runs timeline ticks to local time boundaries by @theluckystrike in #23272
Bug Fixes 🐞
- Fix early closure of async generator flows by @desertaxle in #23886
- Fix retry restart of async generator tasks closed during finalizer failure by @dfbustosus in #23739
- Fix parallel tasks failing when using kwargs by @uinstinct in #23820
- Fix parent transactions committing after child commit failure by @uinstinct in #23790
- Separate
visit_collectioncache entries by annotation type by @HarshithJeevan-pixel in #23851 - Preserve tuple and non-string key types in
hash_objectsby @devin-ai-integration[bot] in #23818 - Fix SQLAlchemy cursor reuse for parameterized fetches by @shion233 in #23847
- Replace null bytes in events before writing them to the database by @dayan02dev in #23853
- Don't count resuming a blocking pause as a new flow run attempt by @mansur-akhmadi in #23839
- Keep workers alive when reading the deployment fails before submission by @mansur-akhmadi in #23836
- Skip fetching a pinned commit that the clone already contains by @devin-ai-integration[bot] in #23814
- Keep
Annotated[T, Field(description=...)]descriptions in flow parameter schemas by @CassianoE in #23809 - Show the script error from
prefect deployandprefect flow servefor flows that fail to load by @CassianoE in #23807 - Generate automatic Dockerfile in
DockerImagebuild context by @devin-ai-integration[bot] in #23747 - Raise when
RemoteFileSystem.put_directory(overwrite=False)hits an existing file by @devin-ai-integration[bot] in #23816 - Reject invalid timezones in server-side
RRuleScheduleby @udsy19 in #23688 - Keep
RDATE/EXDATEinstants inRRuleSchedule.from_rrule()by @arieleven in #23436 - Preserve IANA timezone when
dateutilresolves viatzdataon Windows by @dltsum in #23295 - Hydrate schedule parameter overrides on every schedule write path by @dayan02dev in #23856
- Read
.envonce per process when loading settings by @devin-ai-integration[bot] in #23533
Integrations & Dependencies 🤝
- Bump
soupsievefrom 2.9 to 4.0 by @dependabot[bot] in #23872
Development & Tidiness 🧹
- Run duration-balanced Postgres test groups on every Python version by @devin-ai-integration[bot] in #23863
- Run duration-balanced SQLite test groups by @devin-ai-integration[bot] in #23865
- Fix flaky UI E2E tests reading stale default task run names by @devin-ai-integration[bot] in #23829
- Reserve hosted test API server port before starting uvicorn by @devin-ai-integration[bot] in #23799
- Fix flaky
artifact lstests that assert a sub-second "updated" time by @devin-ai-integration[bot] in #23866 - Use canonical IANA zone in interval schedule DST test by @devin-ai-integration[bot] in #23855
- Make the delete-block message assertions actually run by @dylanpulver in #23767
- Direct agents to re-request review after addressing requested changes by @devin-ai-integration[bot] in #23828
Documentation 📓
- Document flow archival and restoration policies by @nathandpeterson in #23546
- Rename managed automation to workspace policy by @nathandpeterson in #23800
- Fix broken examples in the store-flow-code guide by @ZainnQureshii in #23801
- Set
PREFECT_API_URLin the open source quickstart by @masonmenges in #23842 - Document OIDC identity tokens for Modal push work pools by @devin-ai-integration[bot] in #23545
- Document that the automatic Dockerfile uses the
DockerImagebuild context by @devin-ai-integration[bot] in #23868 - Document
ClassVarannotations for custom block metadata by @ashutosh8021 in #23827
Full Changelog: 3.9.2...3.9.3