Gabe Ruttner
1244039e64
Fix--durable-feedback ( #3240 )
...
* feat: duration takes ms
* fix: nondeterminism err clarity
* fix: cleanup
* chore: lint
* chore: feedback
* fix: typescript
* fix: python
2026-03-13 10:04:03 -07:00
Gabe Ruttner
583bb6f4ba
Feat--unify-running-and-evicted ( #3248 )
...
* feat: unify running and evicted counts with filter
* chore: gen
* chore: gen lint
* fix: opsies...
* chore: gen
* chore: feedback
2026-03-13 05:57:07 -07:00
matt
6fb50ce004
Feat: Wait wrapper signature improvements ( #3241 )
...
* fix: make memo private for now
* feat: first pass at returning structured data back
* fix: json marshalling, types
* feat: wiring
* fix: sleep for return type
* chore: add comments
* fix: tests for `expr_to_timedelta`
* fix: change examples
* feat: improve asserts
* fix: pass payloads through
* fix: add hacky fallbacks to avoid breaking changes
* feat: add memo now
* feat: add test for memo now
* fix: hack for old engine test
* fix: rm restore button
* fix: one more test
* fix: ts impls
* revert: unwind engine changes (woohoo!)
* fix: payload validation
* fix: ts
* chore: gen
* feat: sleep until
* fix: return wait result on replay
* fix: data get, pydantic warning
* fix: test assert
* fix: ts memo key, make memo private
* chore: rm comment, gen again
* chore: merge and gen
2026-03-12 12:53:03 -04:00
mrkaye97
c0204fbd8b
Merge branch 'main' into feat-durable-execution
2026-03-12 12:24:32 -04:00
Gabe Ruttner
7748898c59
fix: failure after cancellation ( #3243 )
...
* fix: failure after cancellation
* chore: generate
* fix: list multiple concurrency strategies
* fix: lock concerns
2026-03-11 18:11:15 -07:00
matt
b942092ba5
Feat: env var for stream event buffer timeout ( #3223 )
...
* feat: env var for stream event buffer timeout
* chore: gen
2026-03-11 11:41:18 -04:00
Gabe Ruttner
98212cb2de
Merge branch 'main' into feat-durable-execution
2026-03-10 09:01:01 -04:00
Mohammed Nafees
ab6cae4420
Test PgBouncer against our code-level partitioning logic ( #3178 )
...
* test partition drops with pgbouncer
* dedicated DDLPool to bypass pgbouncer
* fix generate
* add env var
* min env var
* update documentation
* no go mod redundancy
2026-03-10 12:24:07 +01:00
matt
918f18f127
Fix: Clean up durable exec todos ( #3214 )
...
* fix: comments
* fix: more todo comments
* fix: otel instrumentor
* fix: rm unused attrs
* chore: remove comment
---------
Co-authored-by: Gabe Ruttner <gabriel.ruttner@gmail.com >
2026-03-09 16:42:23 -04:00
Gabe Ruttner
468de0c584
feat: handle server initiated eviction on workers ( #3200 )
...
* refactor: ts in sync with python
* fix: waits respect abort signal
* chore: gen, lint
* fix: update key extraction logic in durable workflow example
* fix: flake
* fix: racey test
* chore: gen
* feat: send eviction to engine
* feat: handle eviction on workers
* fix: tests and invocation scoped eviction
* fix: cleanup scope
* refactor: cleanup how we do action keys in ts
* chore: gen, lint
* fix: test
* chore: lint
* fix: mock
* fix: cleanup
* chore: lint
* chore: copilot feedback
* fix: reconnect durable listener
* chore: feedback
* fix: bump worker status on wait and reconnect
* refactor: rename eviction notice
* fix: return error on query failure
* chore: lint
* chore: gen
* refactor: remove early completion
* Revert "refactor: remove early completion"
This reverts commit f756ce37b0 .
* chore: remove unused param
2026-03-09 05:16:46 -07:00
Gabe Ruttner
a70b0899d1
fix: type
2026-03-08 17:50:56 -04:00
Gabe Ruttner
7e01f7ba94
Merge branch 'main' into feat-durable-execution
2026-03-08 17:50:42 -04:00
abelanger5
46c4297b32
feat: add callback support for tenant and tenant member updates ( #3201 )
...
* feat: add callback support for tenant and tenant member updates
* add callbacks into tenant_invite.go
2026-03-07 17:31:44 -05:00
Gabe Ruttner
fca52697a8
refactor: ts in sync with python ( #3199 )
...
* refactor: ts in sync with python
* fix: waits respect abort signal
* chore: gen, lint
* fix: update key extraction logic in durable workflow example
* fix: flake
* fix: racey test
* chore: gen
2026-03-07 05:42:42 -08:00
Gabe Ruttner
1cd9660835
rip: remove unneeded durable event log update ( #3186 )
...
* rip: update
* refactor: start cleaning up proto defs
* refactor: finish cleaning up proto definitions
* fix: rm the kind
* refactor: rewire the server to have different methods for the different paths
* refactor: more intermediate work
* fix: variables
* fix: wire the kind through
* refactor: get it to compile
* chore: start fixing python
* fix: first pass at fixing python
* chore: rm unused sql
* fix: rm invocation count, rework some logic
* fix: alias (why does sqlc not catch this)
* fix: panics
* fix: add faster timeout to durable spawn test
* fix: task id bug
* refactor: more cleanup of types
* refactor: rm stale entries logic
* fix: rework getOrCreate logic
* fix: clean up a bunch more unneeded stuff
* fix: bug
* fix: python code
* fix: dag matches bug
* fix: add parent to dag to make it more broken, add timeout
* fix: more involved tests
* fix: dag waits
* fix: tests
---------
Co-authored-by: mrkaye97 <mrkaye97@gmail.com >
2026-03-07 04:02:48 -08:00
Gabe Ruttner
12bf7514c5
feat: durable-bulk-spawn ( #3173 )
...
* feat: durable bulk spawn
* feat: bulk db operations
* chore: lint
* chore: generate
* fix: sqlc hack
* cleanup
* chore: lint
* refactor: remove duplicated code
* refactor: simplify input
* ops: rules
* fix: add missing workflows to worker
* chore: add todo
* refactor: single execution path
* comment
* refactor: remove extra class
* chore: lint
* chore: lint
* refactor: batch ack
* fix: handle empty refs
* chore: feedback
* fix: durable output
* chore: lint
* chore: lint
* chore: test fix and gen
* revert: actually use bulk
* refactor: simplify path
* chore: empty commit
Made-with: Cursor
2026-03-05 16:08:13 -08:00
matt
1bffb66bb3
Feat: Branching off branches ( #3150 )
...
* feat: add branch point table
* chore: gen
* feat: id for ordering
* feat: check for `isBranchPoint` and handle branching
* feat: wire up branching over the api
* fix: api, gen
* fix: gen
* fix: branch
* feat: remove duped parent node and branch ids
* fix: rm branch count, dupe of latest id
* refactor: resolve naming
* fix: base case
* fix: test, + it's literally always a caching issue omg
* fix: docs
* chore: lint
* refactor: make branch resolution more efficient
* feat: stable sort, add a bunch of tests
* fix: confusing naming
* fix: naming
* chore: gen
* fix: update
* fix: failing test
---------
Co-authored-by: Gabe Ruttner <gabriel.ruttner@gmail.com >
2026-03-05 16:31:01 -05:00
Gabe Ruttner
a6f5fb6871
chore: rename durable fork to branch ( #3174 )
2026-03-05 09:56:46 -08:00
Gabe Ruttner
5b58eed1ce
tests: compat testing ( #3144 )
...
* tests: compat testing
* fix: new engine old sdk
* feat: ruby ts
* fix: namespaced tests, conditions
* chore: lint ts
* fix: python compat
* chore: lint
* fix: warn on version mismatch
* chore: lint
* fix: child spawn
* refactor: address review
* chore: lint
* chore: lint
* chore: lint
* refactor: address reviews
* chore: lint
* fix: typeguard
* tests: docker-compose
* fix: docker compose
* fix: labels?
* chore: skip new tests
* fix: backwards compat
* fix: grpc proxy
2026-03-04 18:12:45 -08:00
matt
46b3041eb1
Fix: Go unexported type ( #3160 )
...
* fix: internal types
* fix: rm unused helper
2026-03-04 17:40:13 -05:00
Gabe Ruttner
65e44d6f63
feat: OLAP status priority functions and query updates ( #3156 )
...
* feat: OLAP status priority functions and query updates
- Add v1_status_priority / v1_status_from_priority for v1_readable_status_olap
- Use priority-based aggregation in OLAP task status update queries (EVICTED
below terminal statuses)
- Migration v1_0_84 and schema v1-olap.sql
Made-with: Cursor
* test: durable eviction tests — replay, cancel after eviction, restore idempotency
- test_eviction_plus_replay, test_evictable_cancel_after_eviction, test_restore_idempotency
- Tighter poll interval for faster test runs
Made-with: Cursor
* fix: flakes
* feedback
2026-03-04 11:11:09 -08:00
mrkaye97
5d735b4c41
fix: linting issues
2026-03-04 13:59:05 -05:00
mrkaye97
e29459f58a
chore: merge main
2026-03-04 13:38:37 -05:00
matt
6c29e48204
Feat: Dynamic worker label assign ( #3137 )
...
* feat: initial wiring work on desired labels
* feat: initial wiring
* chore: gen python
* fix: use the whole desired label thing instead
* fix: more wiring, improve types
* fix: sql type
* fix: len check
* chore: gen python
* fix: initial plural label work
* fix: store the labels properly on the task
* fix: skip cache on override
* fix: bug
* fix: scoping bug whoops
* chore: lint
* fix: send labels back over the api correctly
* feat: python test
* fix: lint
* fix: comment
* fix: override
* fix: namespaces, ugh
* fix: no need for error here
* chore: version
* feat: ruby, go, ts
* feat: versions
* fix: appease the rubocop
* chore: lint
* chore: bundle install
* fix: tests
* chore: lint
* chore: lint more
* fix: ts test
* fix: rb
* chore: gen
* chore: reset gemfile
* chore: reset changelog
* fix: pgroup
* fix: tests, part i
* Revert "chore: reset changelog"
This reverts commit b63bf7d3e5 .
* Revert "chore: reset gemfile"
This reverts commit bb848bb6f0 .
* fix: go -> golang mapping hack
* fix: go enums
* fix: appease the cop
* fix: namespace
* chore: gen
2026-03-04 11:03:58 -05:00
Gabe Ruttner
1d3f54f4e4
Merge branch 'main' into feat-durable-execution
2026-03-03 18:17:24 -05:00
Gabe Ruttner
c8f762c12e
chore: simplify ruby e2e ci scripts ( #3152 )
...
* chore: simplify start script
* chore: log
* fix: log paths
* fix: race?
* fix: deadlock?
---------
Co-authored-by: mrkaye97 <mrkaye97@gmail.com >
2026-03-03 15:16:11 -08:00
mrkaye97
a4f65454f3
Merge branch 'main' into feat-durable-execution
2026-03-03 17:24:23 -05:00
Mohammed Nafees
e72051877e
Enable loadtest with PgBouncer ( #3143 )
...
* enable loadtest with pgbouncer
* use default_query_exec_mode=cache_describe for pgbouncer
* increase threshold
* make sure no regression
2026-03-03 15:24:30 +01:00
Julius Park
5e4bb9d151
Add seconds granularity to cron jobs ( #3136 )
2026-03-02 18:07:15 -05:00
abelanger5
e9eb65d9a8
feat: user callback additional methods ( #3057 )
...
* add more opts to create user callback
* add session callbacks
* add more options to authenticate
* add full route info to routes map
* small refactor to reduce deps on session helpers
2026-03-02 16:25:41 -05:00
matt
77f769bd66
Feat: Durable Memoization ( #3112 )
...
* feat: initial engine / db work
* chore: gen python
* feat: initial python work
* feat: wiring
* feat: initial test
* fix: scope memo key to the run id (we might not even need this)
* chore: gen, docstring
* fix: mandatory result type
* fix: docs
* fix: log a warning and don't cache
* fix: add test for non-unique keys, fix some bugs
* chore: lint
* chore: naming
* fix: more naming
* fix: comment
* chore: gen
* fix: docs
* fix: naming, ugh
* chore: gen
* chore: gen
* fix: always send event log entry and get ack
* fix: initial rework of memo to only use stream
* fix: start reworking python side
* fix: finish wiring up memo put
* chore: fmt
* chore: comment for monday
* fix: start reworking signature
* fix: docstring
* fix: union type for send event to improve typing a bunch
* fix: memo key
* chore: gen
* fix: rm unused query
* fix: comments
2026-03-01 16:27:56 -08:00
Gabe Ruttner
2d57b6793a
Feat durable olap refactor ( #3115 )
...
* chore: lint
* feat: counting and partitioning
* feat: add reason field to DurableTaskEvictInvocationRequest and update eviction handling
* fix: eviction durable execution race
* chore: generate
* refactor: simplified migration
* refactor: address review
* refactor: analyze parent tables in migraiton
* fix: migration
* fix: remove no txn
* fix: one statement
* fix: we do infact need no transaction
* add down/up/down to the online migration test
* fix: or multiple statements
* fix: two migrations...
* chore: rm old migraiton
* chore: generate
* chore: feedback
* fix: idempotent migration
* refactor: update assertions in durable tests and clean up imports in cache.py
* revert: migraiton
* chore: wrap down
2026-02-27 10:58:01 -08:00
Gabe Ruttner
daff28dbfe
Feat: durable eviction take 2 ( #3075 )
...
* feat: simplified eviction feature
* fix: assign new worker id
* test: shorter sleep
* fix: completion race on same worker
* chore: address todo
* chore: lint
* chore: generate
* fix: n+1 queries
* refactor: WasEvicted bool
* feat: evicted state
* chore: generate
* fix: map status
* fix: update PendingCallback structure to include InvocationCount
* revert: comment
* feat: add support for EVICTED status in waterfall component and metrics display
* fix: implicit eviction
* chore: readable cte
* refactor: queued bool
* refactor: rename eviction_policy
* fix: aio only
* chore: example return type
* fix: map
* feat: eviction error cases
* refactor: change external ID maps to use UUID type
* chore: feedback, cleanup
* tests: additional cases
* chore: generate
* chore: lint
* chore: lint generate
* chore: clean up comments to make matt happy
* refactor: more feedback
* chore: add TODO for worker state reconciliation and clean up comments in eviction policy
* tests: fix
* chore: gen
* test: increase ruby timeout...
* fix: invocation count
* fix: test cases
* fix: stale log entry
* chore: lint
* revert: durable tests to use time.time
* chore: lint
2026-02-27 09:25:50 -08:00
mrkaye97
392391b4a7
Merge branch 'main' into feat-durable-execution
2026-02-26 14:21:53 -05:00
matt
deee6e213c
fix: external ids ( #3111 )
2026-02-26 12:57:33 -05:00
Mohammed Nafees
ef2c01a499
Add ctx.WasSkipped helper to the Go SDK ( #3094 )
...
* introduce ctx.WasSkipped just like Py SDK
* fix lint and example
2026-02-26 17:56:45 +01:00
Mohammed Nafees
fa695fc8ca
non blocking ctx.Log with meaningful retries ( #3106 )
2026-02-25 18:55:17 +01:00
matt
5e672d0514
[Go] Feat: Details Getter ( #3105 )
...
* feat: add details getter
* fix: naming
* fix: structs
2026-02-25 12:11:19 -05:00
mrkaye97
736ecaa3c0
Merge branch 'main' into feat-durable-execution
2026-02-24 13:26:48 -08:00
Mohammed Nafees
f3ec9597a6
Add env vars for max conn lifetime and idle time for pgx ( #3096 )
...
* add env vars for max conn lifetime and idele time for pgx
* add doc
2026-02-24 21:54:09 +01:00
Mohammed Nafees
444a335c18
Fix cross-strategy slot contamination in chained concurrency gates ( #3089 )
...
* filter properly based on strategy ids
* remove remnants
* add concurency integration test
* more tests
2026-02-24 12:54:04 +01:00
Mohammed Nafees
44069cef89
make sure to use 60 seconds timeout for PutWorkflowVersion ( #3085 )
2026-02-23 16:20:31 +01:00
matt
df9e86081a
Fix: Move event log to a tab on the task run detail ( #3067 )
...
* fix: separate tab for activity on run detail
* fix: output payload bug
* fix: couple more uuid bugs
* fix: set var
* fix: add event type check
2026-02-22 19:02:22 -08:00
matt
e2e41243bb
refactor: don't need isNewInvocation anymore! ( #3072 )
2026-02-21 07:35:37 -08:00
matt
e85d05adfe
Fix: Correctly create log files, reject events from non-current invocations ( #3071 )
...
* fix: reject non-current invocations
* fix: log file inserts
* fix: use `EXCLUDED`
* fix: default branch
* fix: update
* fix: comment
2026-02-20 23:07:42 -05:00
matt
6f3f6e08ac
Feat: Replay as new (or from a node) ( #3055 )
...
* feat: new messages for reset
* chore: gen python
* feat: reset scaffolding
* feat: initial work
* feat: initial e2e wiring of resetting from a specific node
* fix: add branch to pk
* fix: wire up branches
* fix: add branch to awaited entry
* feat: start wiring up reset api
* fix: colname
* fix: add branch id more places
* fix: some bugs
* fix: replay
* fix: replay, simplify
* feat: add parent branch id
* fix: start reworking parent nodes and branches
* fix: parent branch wiring
* fix: start fixing some bugs
* fix: parent branch bug
* fix: advisory lock for locking the log file to prevent concurrent modification
* fix: move claude.md ignore path
* fix: remove eager replays of events
* fix: rm cruft
* fix: cleanup more params and such
* fix: return type
* fix: comment
* fix: comments
* fix: comment
* chore: gen
* chore: gen
* fix: decrease sleep time
* chore: gen again
* fix: add invocation count on event log entries, make it int32, fix toInt
* fix: more wiring
* chore: gen, simplify
* fix: lint
* fix: more zero values, I hate Go
* feat: add `is_durable` to v1_task
* feat: initial work wiring up dispatcher to increment log entry invocation counts
* feat: wire up assigned action
* fix: property
* fix: send is durable through to the engine
* fix: more invoc count wiring
* fix: node resetting
* fix:revert
* fix: import
* chore: gen
* fix: reset -> fork
* fix: rm a bunch of dead code
* fix: api
* fix: repo method
* fix: log file locking using `FOR UPDATE` + atomic compare-and-set update
* fix: move to shared repo
* feat: increment invocation count on the scheduler
* fix: naming
* fix: make test more reliable
* fix: props
* fix: node id reset
2026-02-20 13:01:46 -05:00
mrkaye97
f8e787cd89
Merge branch 'main' into feat-durable-execution
2026-02-19 19:35:40 -05:00
matt
7e3e3b8fc0
Feat: Non-determinism errors ( #3041 )
...
* fix: retrieve payloads in bulk
* fix: hash -> idempotency key
* feat: initial hashing work
* feat: check idempotency key if entry exists
* fix: panic
* feat: initial work on custom error for non-determinism
* fix: handle nondeterminism error properly
* feat: add error response, pub message to task controller
* chore: lint
* feat: add node id field to error proto
* chore: rm a bunch of unhelpful cancellation logs
* fix: conflict issues
* fix: rm another log
* fix: send node id properly
* fix: improve what we hash
* fix: improve error handling
* fix: python issues
* fix: don't hash or group id
* fix: rm print
* feat: add python test
* fix: add timeout
* fix: improve handling of non determinism error
* fix: propagate node id through
* fix: types, test
* fix: make serializable
* fix: no need to cancel internally anymore
* fix: hide another internal log
* fix: add link to docs
* fix: copilot
* fix: use sha256
* fix: test cleanup
* fix: add error type enum
* fix: handle exceptions on the worker
* fix: clean up a bunch of cursor imports
* fix: cursor docstring formatting
* fix: simplify idempotency key func
* fix: add back cancellation logs
* feat: tests for idempotency keys
* fix: add a couple more for priority and metadata
* chore: gen
* fix: python reconnect
* fix: noisy error
* fix: improve log
* fix: don't run durable listener if no durable tasks are registered
* fix: non-null idempotency keys
2026-02-18 11:27:02 -05:00
abelanger5
73ef4747e7
feat: new search bar component ( #2909 )
...
* fix: compute payload size correctly for pg_notify
* refactor: pull search bar into its own component
* just use tab for autocomplete
* fix: log line typing
* Refactor Search Bar (#2964 )
* Add empty search state
* V1 table layout logviewer
* Add temp hatchet-worker for testing
* Fix log css grid when expanded
* undo search notfound logic, needs API logic
* Rework workflow example
* use correct info color
* better table headers
* Add back ansi formatting
* Allow enter along with tab to traverse chips
* remove tutorial
* Add syntax color to search chips
* styling progress
* styling progress
* constrain width
* Add rel time
* Readd flag conditional
* remove hatchet-worker, feature flag, and cypress test
* remove tenant hook
---------
Co-authored-by: Alexander Belanger <alexander@hatchet.run >
* fix: remove ansi-to-html, review feedback
---------
Co-authored-by: Sebastian Graz <graz@live.se >
2026-02-17 20:47:20 -08:00
matt
eaf6bba824
Refactor: Remove separate callback table ( #3045 )
...
* fix: remove callback table
* fix: type
* fix: type
* fix: wiring everything up
* fix: result payload for replays
* chore: lint
* feat: set fillfactor
* chore: gen
* fix: simplify v1 match changes
* fix: simplify v1 match wiring
* fix: rm print line
* fix: some more wiring
* fix: wiring
* chore: comments
* chore: gen, proto naming
* chore: comments
* fix: rm comment
* fix: broken listener
2026-02-17 13:25:08 -05:00