Skip to content

Hatchet 0.106.5

Latest

Choose a tag to compare

@github-actions github-actions released this 08 Sep 18:22
· 2 commits to main since this release
7f9752b

Hatchet v0.106.5 is a concurrency-focused release, adding support for dynamic concurrency limits, shared concurrency across workflows, and two new queue-depth concurrency strategies.

Highlights

  • Dynamic concurrency limits: set concurrency limits on a per-key basis using a CEL expression. For example, let premium-tier users run 10 workflows simultaneously while other users run one: input.tier == 'premium' ? 10 : 1 (#4863, #4873).
  • Shared concurrency across workflows: create concurrency rules that many tasks and workflows consume simultaneously, e.g. limiting workflow_a and workflow_b to 10 concurrent runs per user total. Previously this pattern required a parent router task; shared concurrency replaces it (#4845, #4873).
  • Two new concurrency strategies, CANCEL_QUEUED_EXCEPT_NEWEST and CANCEL_QUEUED_EXCEPT_OLDEST: configure the queue depth for each concurrency key, keeping only the most or least recent queued item until in-progress runs complete — conceptually similar to debouncing (#4793).

Security

  • Engine: satisfied durable event lookups are now filtered by tenant, enforcing tenant isolation on the durable event log (GHSA-992g-9cr3-vm5x).

Fixed

  • Engine: partitions are pruned in UpdateDurableEventLogEntriesSatisfied (#4891).
  • Engine: CEL evaluation inconsistencies (#4864).
  • Engine: duplicate rows no longer cause an on-conflict error during task assignment (#4829).
  • Engine: allocated crons are counted against the latest workflow version only (#4859).
  • Go SDK: all required symbols are exported and deprecated constructs are no longer depended on (#4875).

What's Changed

  • feat: stamp cloud.region on OpenTelemetry resources by @grutt in #4780
  • fix(engine): duped rows causing on conflict error on assign by @mrkaye97 in #4829
  • refactor(engine): buffer durable event ingestion by @mrkaye97 in #4854
  • chore(engine): decrease durable flush interval, add more spans by @mrkaye97 in #4858
  • fix: count allocated crons via DISTINCT ON latest workflow version by @grutt in #4859
  • docs: prioritize embedded mode by @abelanger5 in #4846
  • refactor(engine): bulk operation for UpsertDurableChildSignalCreatedEvents by @mrkaye97 in #4860
  • chore: Bump google.golang.org/grpc from 1.82.1 to 1.83.1 by @dependabot[bot] in #4866
  • fix: dependabot alert by @mnafees in #4869
  • fix: dependabot alert by @mnafees in #4870
  • feat(engine): shared concurrency strategies by @abelanger5 in #4845
  • feat: count ingested log and OTLP bytes after persist by @grutt in #4876
  • feat(engine): enable durable tasks running on the dag operator to be evicted by @mrkaye97 in #4872
  • chore: update skills to include embedded mode references by @abelanger5 in #4861
  • feat(docs): add a reference overview page for each SDK reference by @abelanger5 in #4862
  • fix: make sure Go SDK exports all required symbols and does not depend on deprecated constructs by @mnafees in #4875
  • ci: no verbose go test output required by @mnafees in #4878
  • chore: Bump qs from 6.15.2 to 6.16.0 in /frontend/app by @dependabot[bot] in #4877
  • feat(engine): dynamic per-group max runs via CEL expression by @abelanger5 in #4863
  • feat(dashboard): dag operator visibility by @mrkaye97 in #4881
  • fix(python,ts): use a queue for ordering durable callbacks by @mrkaye97 in #4821
  • feat(sdks): new concurrency features (dynamic max runs, tenant-scoped concurrency) by @abelanger5 in #4873
  • fix: bumps qs in the TS SDK to fix Dependabot alerts by @mnafees in #4884
  • chore: Bump github.com/rabbitmq/amqp091-go from 1.10.0 to 1.13.0 in /examples/go/embedded by @dependabot[bot] in #4885
  • fix(python): concurrent workflow registration, flaky test improvement by @mrkaye97 in #4888
  • ci: dont fail fast by @mrkaye97 in #4889
  • fix: CEL inconsistencies / bugs in the engine by @abelanger5 in #4864
  • feat(dashboard): add query params as span attributes on rest api requests by @mrkaye97 in #4892
  • fix(engine): prune partitions in UpdateDurableEventLogEntriesSatisfied by @mrkaye97 in #4891
  • fix: add new dag shapes to load test to stress test dag operator by @juliusgeo in #4857
  • docs: link CEL feature clients on reference overview pages by @abelanger5 in #4893
  • feat(dashboard): allow posthog flags to target users by email / id by @mrkaye97 in #4896
  • feat(docs): index files w/ backlinks in the SDKs by @abelanger5 in #4895
  • chore: pre-reqs for operators work (remove http operator, shared dispatcher types) by @abelanger5 in #4914
  • chore: remove dependabot update PRs by @mnafees in #4919
  • chore: Bump the github-actions group with 2 updates by @dependabot[bot] in #4906
  • chore: Bump the npm-dev-deps group across 2 directories with 4 updates by @dependabot[bot] in #4835
  • fix(engine): durable child spawn hang by @mrkaye97 in #4918
  • fix: guard worker isActive using a session id instead of just a timestamp by @abelanger5 in #4916
  • chore: Bump the go-modules group across 1 directory with 55 updates by @dependabot[bot] in #4921
  • fix: Go SDK's RunMany should return results in the same order of the inputs by @mnafees in #4825
  • chore: changelog for next release by @mnafees in #4915
  • fix: correct OSS release tag by @mnafees in #4924

Full Changelog: v0.105.16...v0.106.5