chore: release v0.90.13#4301
Merged
Merged
Conversation
|
@gregfurman is attempting to deploy a commit to the Hatchet Team on Vercel. A member of the Team first needs to authorize it. |
Collaborator
Author
Release Notes BodyHatchet v0.90.13 is a stability-focused release. It keeps long-running deployments healthy by bounding session-table growth, reduces scheduling latency under load, fixes a duration-parsing bug that could silently shorten your timeouts, and ships a batch of dashboard fixes.
### Highlights
- The `UserSession` table no longer grows unbounded: an hourly cleanup job now removes expired and orphaned sessions automatically. See [Upgrade Notes](#usersession-bulk-cleanup) for an optional one-time bulk cleanup to run before upgrading.
- Multi-unit duration strings such as `42m30s` are now parsed correctly and enforce their full value, rather than silently truncating to a shorter duration. See [Upgrade Notes](#stricter-duration-validation) for the related behavior and validation changes.
- Reduced engine cold-start latency when moving runs from `QUEUED` to `ASSIGNED_TO_WORKER` under load, and stale concurrency state is now cleaned up automatically so it can no longer build up and slow scheduling.
- Fixed a dashboard race that could return a 500 when triggering a run, alongside several quality-of-life improvements: a system theme option in account settings, a scrollable workflow settings page, persisted sidebar scroll position across navigation, a tooltip for long tenant names, and CodeEditor theming and border fixes in light mode.
- The Go SDK now retries bodyless `GET` and `HEAD` reads with backoff on transient failures, which can be disabled via the `HATCHET_CLIENT_NO_RETRY` environment variable.
- Durable execution is sturdier: dead-lettered callback messages are now handled gracefully instead of erroring, and a failing child task correctly raises an error in its durable parent, matching the behavior of regular tasks.
- Hatchet Cloud adds the foundations for tenant-scoped Prometheus metrics and audit logs.
### Upgrade Notes
#### Stricter duration validation
Registration now rejects duration strings that were previously accepted and silently coerced: signed values, bare numbers, sub-millisecond units (`ns`/`us`), and mixed forms using `d`/`w`/`y`. If you register durations in any of these forms, they'll now fail at registration — check your workflow definitions before upgrading.
#### `UserSession` bulk cleanup
This update includes an additional cleanup job for the `UserSession` table to correctly remove expired/invalid user sessions from the table -- addressing unbounded growth. However, you can optionally run the following query as many times as needed against your Postgres instance to ensure a bulk-cleanup prior to upgrade:
```sql
DELETE FROM "UserSession"
WHERE ctid IN (
SELECT ctid
FROM "UserSession"
WHERE NOT (
("userId" IS NOT NULL AND "expiresAt" >= NOW())
OR
("userId" IS NULL AND "createdAt" >= NOW() - INTERVAL '24 hours')
)
LIMIT 10000
);
```
Note: the `10000` limit can be adjusted as needed.
## What's Changed
### Added
- **sdks/go:** Add retry foundation for REST reads `v0.90.5` by @igor-kupczynski in [#4240](https://github.com/hatchet-dev/hatchet/pull/4240)
- **cloud:** Tenant scoped prometheus and audit logs `v0.90.0` by @grutt in [#4215](https://github.com/hatchet-dev/hatchet/pull/4215)
- **engine:** Cron to run stale concurrency cleanup `v0.89.7` by @mrkaye97 in [#4202](https://github.com/hatchet-dev/hatchet/pull/4202)
- **dashboard:** Add system theme option to account theme settings `v0.89.7` by @BittuBarnwal7479 in [#4170](https://github.com/hatchet-dev/hatchet/pull/4170)
### Changed
- **engine:** Expand `listutils` to include `Uniq`, `UniqBy` `v0.90.9` by @mrkaye97 in [#4283](https://github.com/hatchet-dev/hatchet/pull/4283)
- **cli:** Accept fs.FS for quickstart templates `v0.89.7` by @BloggerBust in [#4174](https://github.com/hatchet-dev/hatchet/pull/4174)
- **dispatcher:** Unify dispatcher and dispatcher/v1 packages `v0.89.3` by @abelanger5 in [#4148](https://github.com/hatchet-dev/hatchet/pull/4148)
### Fixed
- **api:** Add cron job to clean up UserSession `v0.90.13` by @NirajNair in [#4105](https://github.com/hatchet-dev/hatchet/pull/4105)
- On-demand lease manager for cold start concurrency queue `v0.90.12` by @mnafees in [#4281](https://github.com/hatchet-dev/hatchet/pull/4281)
- Parse multi-unit duration strings in convert_duration_to_interval `v0.90.11` by @juanuicich in [#3895](https://github.com/hatchet-dev/hatchet/pull/3895)
- **dashboard:** Short-circuit run lookup on dashboard trigger `v0.90.10` by @mrkaye97 in [#4289](https://github.com/hatchet-dev/hatchet/pull/4289)
- **engine:** Check nil uuid before creating event resource hint `v0.90.9` by @mrkaye97 in [#4282](https://github.com/hatchet-dev/hatchet/pull/4282)
- **dashboard:** Make sure workflow settings page is scrollable `v0.90.9` by @mnafees in [#4267](https://github.com/hatchet-dev/hatchet/pull/4267)
- Rm another instance of `seenAt` being in the wrong place `v0.90.8` by @mrkaye97 in [#4278](https://github.com/hatchet-dev/hatchet/pull/4278)
- Disable deactivateStaleStepConcurrency operation for now `v0.90.7` by @mnafees in [#4279](https://github.com/hatchet-dev/hatchet/pull/4279)
- Concurrency strategy cold starts `v0.90.5` by @grutt in [#4275](https://github.com/hatchet-dev/hatchet/pull/4275)
- Make sure we use partial index when creating scheduled and cron refs `v0.90.3` by @mnafees in [#4260](https://github.com/hatchet-dev/hatchet/pull/4260)
- Tenant switcher tool tip for long tenant names `v0.90.2` by @grutt in [#4234](https://github.com/hatchet-dev/hatchet/pull/4234)
- **engine:** Handle dead lettered durable callback messages `v0.90.2` by @mrkaye97 in [#4231](https://github.com/hatchet-dev/hatchet/pull/4231)
- Disable hover preloading for sidebar navigation links `v0.90.2` by @BittuBarnwal7479 in [#4225](https://github.com/hatchet-dev/hatchet/pull/4225)
- **engine:** Set the `eventSeenAt` on the ingest side of the mq `v0.90.1` by @mrkaye97 in [#4226](https://github.com/hatchet-dev/hatchet/pull/4226)
- **dashboard:** Persist sidebar scroll position across navigation `v0.90.0` by @chandan-1427 in [#4163](https://github.com/hatchet-dev/hatchet/pull/4163)
- **dashboard:** Fix CodeEditor theme and border visibility in light mode `v0.89.6` by @chandan-1427 in [#4150](https://github.com/hatchet-dev/hatchet/pull/4150)
- Extend lock timeouts significantly `v0.89.5` by @mrkaye97 in [#4175](https://github.com/hatchet-dev/hatchet/pull/4175)
- Wait however long we need to acquire the lock to run `FINALIZE` `v0.89.4` by @mrkaye97 in [#4173](https://github.com/hatchet-dev/hatchet/pull/4173)
- **olap:** Don't lose status updates when replaying completed tasks `v0.89.3` by @igor-kupczynski in [#4165](https://github.com/hatchet-dev/hatchet/pull/4165)
- **engine:** Correctly raise error in durable parent when child fails `v0.89.3` by @mrkaye97 in [#4154](https://github.com/hatchet-dev/hatchet/pull/4154)
- Change default max death count to 1000 `v0.89.3` by @grutt in [#4167](https://github.com/hatchet-dev/hatchet/pull/4167)
- Gate loadtest emission on registration `v0.89.3` by @igor-kupczynski in [#4156](https://github.com/hatchet-dev/hatchet/pull/4156)
- **docs:** Update Resources link to point to docs site `v0.89.3` by @BittuBarnwal7479 in [#4141](https://github.com/hatchet-dev/hatchet/pull/4141)
- Use new connection from ddlPool to set timeout on task partition creation `v0.89.3` by @juliusgeo in [#4147](https://github.com/hatchet-dev/hatchet/pull/4147)
- Reduce default buffer size for RabbitMQ sub and pub buffers, flush when full, reduce default QoS to 100 `v0.89.3` by @juliusgeo in [#4073](https://github.com/hatchet-dev/hatchet/pull/4073)
- **engine:** Drain grpc streams and bound graceful shutdown `v0.89.2` by @igor-kupczynski in [#4139](https://github.com/hatchet-dev/hatchet/pull/4139)
- **engine:** Exclude evicted runtimes from timeouts `v0.89.2` by @BloggerBust in [#4132](https://github.com/hatchet-dev/hatchet/pull/4132)
- **repository:** Key failureOpts by taskId in failTasksTx to fix wrong error message after dedup `v0.89.2` by @burnerlee in [#4137](https://github.com/hatchet-dev/hatchet/pull/4137)
## New Contributors
* @NirajNair made their first contribution in [#4105](https://github.com/hatchet-dev/hatchet/pull/4105)
* @juanuicich made their first contribution in [#3895](https://github.com/hatchet-dev/hatchet/pull/3895)
* @juanluisdb made their first contribution in [#4232](https://github.com/hatchet-dev/hatchet/pull/4232)
* @adem-loghmari made their first contribution in [#4194](https://github.com/hatchet-dev/hatchet/pull/4194)
* @chandan-1427 made their first contribution in [#4150](https://github.com/hatchet-dev/hatchet/pull/4150)
* @burnerlee made their first contribution in [#4137](https://github.com/hatchet-dev/hatchet/pull/4137)
|
gregfurman
commented
Jun 29, 2026
mrkaye97
approved these changes
Jun 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Updates the
CHANGELOG.mdto reflect all changes betweenv0.89.0and upcomingv0.90.13release.Type of change
What's Changed
appendmode for goreleaser to instead usereplace🤖 AI Disclosure
What's Changed?diff generated bygit cliff