Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,59 @@ All notable changes to taskito are documented here. The format is based on
[Semantic Versioning](https://semver.org/spec/v2.0.0.html). All SDKs (Python, Node, Java) and the
underlying Rust crates are released together, in lock-step.

## 0.19.0

Parity release: the Java SDK reaches feature parity with the other SDKs (and its baseline moves
to Java 17), payload codecs land as a cross-SDK wire contract, and the resource system gains a
bounded pooled scope plus health-check-driven recreation. One breaking change in the Node SDK:
scan-heavy queue methods now return Promises.

### Added

- **Java SDK full parity.** Workflows grow gates, conditional steps, sub-workflows, sagas,
incremental caching, analysis/visualization, and canvas shortcuts. New: worker resource
dependency injection with five scopes (worker / thread / task / request / pooled), enqueue
predicates and interception, two-sided payload codecs with per-task annotations, signed
resource proxies with expiry/purpose binding and sessions, producer-side batching, in-process
autoscaling plus a scaler HTTP endpoint, an optional MessagePack serializer, observability
middleware, a Spring Boot 3 starter, a mesh scheduling worker, and a Panama FFM fast-path for
hot byte operations. Maven Central publishing is automated end to end.
- **Payload codecs (all SDKs).** A codec chain (gzip, AES-GCM, HMAC) that wraps the queue
serializer on both the enqueue and result paths — configurable globally or per task via a
named registry. The wire format is a cross-SDK contract: payloads encoded by one SDK decode
in any other. Dedup keys hash pre-codec bytes, so encryption does not break idempotency.
- **Pooled resource scope (Node + Java).** A bounded checkout/return pool per resource:
each task checks out one instance for its duration and returns it at task end. Capacity,
prewarm, acquire timeout, and max lifetime are configurable; instances are disposed at
worker shutdown or lifetime expiry.
- **Node resource health checks.** Per-resource `healthCheck` with automatic recreation and a
terminal unhealthy state after the recreation budget is spent. The worker heartbeat now
carries per-resource health, surfaced through `listWorkers()`.
- **Node proxy system.** Signed proxy references with a file handler (HMAC-SHA256 over a
canonical JSON form, path allowlists, TTL and purpose binding), plus proxy sessions with
identity dedup on deconstruct, signature-keyed memoization on reconstruct (re-verified on
every resolve), and LIFO cleanup on close.
- **Node enqueue interceptors.** Pass / convert / redirect / reject rules that run before
defaults, middleware, and serialization — same model as the other SDKs.
- **Java THREAD and REQUEST resource scopes**, completing the scope matrix alongside worker,
task, and pooled.

### Changed

- **Node (breaking): scan-heavy queue methods are now async.** `stats*`, `listJobs`,
`deadLetters*`, `purge*`, `listWorkers`, `getMetrics`, and `getJobErrors` return Promises and
no longer block the event loop; webhook `Delivery` was reshaped to the dashboard contract.
- **Java baseline is now 17** (previously 11).

### Fixed

- **Python results always use the queue serializer.** Task results were serialized with raw
cloudpickle on three of the four write paths while reads went through the configured
serializer; all result writes now route through the queue serializer (with a legacy fallback
so old results stay readable).
- **Node workflow tracker correctness** (static-successor cascade on managed runs, fan-out
sibling successors — both also fixed in Python), plus cursor-based task-log streaming.

## 0.18.0

Reliability and storage release: Postgres dequeues with `SKIP LOCKED`, crashed workers'
Expand Down
12 changes: 6 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion crates/taskito-core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "taskito-core"
version = "0.18.0"
version = "0.19.0"
edition = "2021"

[features]
Expand Down
2 changes: 1 addition & 1 deletion crates/taskito-java/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "taskito-java"
version = "0.18.0"
version = "0.19.0"
edition = "2021"
description = "Java (JNI) bindings for the Taskito task-queue core"
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion crates/taskito-mesh/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "taskito-mesh"
version = "0.18.0"
version = "0.19.0"
edition = "2021"

[dependencies]
Expand Down
2 changes: 1 addition & 1 deletion crates/taskito-node/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "taskito-node"
version = "0.18.0"
version = "0.19.0"
edition = "2021"
description = "Node.js (napi-rs) bindings for the Taskito task-queue core"
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion crates/taskito-python/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "taskito-python"
version = "0.18.0"
version = "0.19.0"
edition = "2021"

[features]
Expand Down
2 changes: 1 addition & 1 deletion crates/taskito-workflows/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "taskito-workflows"
version = "0.18.0"
version = "0.19.0"
edition = "2021"

[features]
Expand Down
2 changes: 1 addition & 1 deletion docs/app/lib/version.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// AUTO-GENERATED from /CHANGELOG.md by scripts/sync-changelog.mjs — do not edit directly.
export const VERSION = "0.18.0";
export const VERSION = "0.19.0";
53 changes: 53 additions & 0 deletions docs/content/docs/resources/changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,59 @@ All notable changes to taskito are documented here. The format is based on
[Semantic Versioning](https://semver.org/spec/v2.0.0.html). All SDKs (Python, Node, Java) and the
underlying Rust crates are released together, in lock-step.

## 0.19.0

Parity release: the Java SDK reaches feature parity with the other SDKs (and its baseline moves
to Java 17), payload codecs land as a cross-SDK wire contract, and the resource system gains a
bounded pooled scope plus health-check-driven recreation. One breaking change in the Node SDK:
scan-heavy queue methods now return Promises.

### Added

- **Java SDK full parity.** Workflows grow gates, conditional steps, sub-workflows, sagas,
incremental caching, analysis/visualization, and canvas shortcuts. New: worker resource
dependency injection with five scopes (worker / thread / task / request / pooled), enqueue
predicates and interception, two-sided payload codecs with per-task annotations, signed
resource proxies with expiry/purpose binding and sessions, producer-side batching, in-process
autoscaling plus a scaler HTTP endpoint, an optional MessagePack serializer, observability
middleware, a Spring Boot 3 starter, a mesh scheduling worker, and a Panama FFM fast-path for
hot byte operations. Maven Central publishing is automated end to end.
- **Payload codecs (all SDKs).** A codec chain (gzip, AES-GCM, HMAC) that wraps the queue
serializer on both the enqueue and result paths — configurable globally or per task via a
named registry. The wire format is a cross-SDK contract: payloads encoded by one SDK decode
in any other. Dedup keys hash pre-codec bytes, so encryption does not break idempotency.
- **Pooled resource scope (Node + Java).** A bounded checkout/return pool per resource:
each task checks out one instance for its duration and returns it at task end. Capacity,
prewarm, acquire timeout, and max lifetime are configurable; instances are disposed at
worker shutdown or lifetime expiry.
- **Node resource health checks.** Per-resource `healthCheck` with automatic recreation and a
terminal unhealthy state after the recreation budget is spent. The worker heartbeat now
carries per-resource health, surfaced through `listWorkers()`.
- **Node proxy system.** Signed proxy references with a file handler (HMAC-SHA256 over a
canonical JSON form, path allowlists, TTL and purpose binding), plus proxy sessions with
identity dedup on deconstruct, signature-keyed memoization on reconstruct (re-verified on
every resolve), and LIFO cleanup on close.
- **Node enqueue interceptors.** Pass / convert / redirect / reject rules that run before
defaults, middleware, and serialization — same model as the other SDKs.
- **Java THREAD and REQUEST resource scopes**, completing the scope matrix alongside worker,
task, and pooled.

### Changed

- **Node (breaking): scan-heavy queue methods are now async.** `stats*`, `listJobs`,
`deadLetters*`, `purge*`, `listWorkers`, `getMetrics`, and `getJobErrors` return Promises and
no longer block the event loop; webhook `Delivery` was reshaped to the dashboard contract.
- **Java baseline is now 17** (previously 11).

### Fixed

- **Python results always use the queue serializer.** Task results were serialized with raw
cloudpickle on three of the four write paths while reads went through the configured
serializer; all result writes now route through the queue serializer (with a legacy fallback
so old results stay readable).
- **Node workflow tracker correctness** (static-successor cascade on managed runs, fan-out
sibling successors — both also fixed in Python), plus cursor-based task-log streaming.

## 0.18.0

Reliability and storage release: Postgres dequeues with `SKIP LOCKED`, crashed workers'
Expand Down
2 changes: 1 addition & 1 deletion sdks/java/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {
}

group = "org.byteveda"
version = "0.18.0"
version = "0.19.0"

java {
// Sources + javadoc jars are added by the maven-publish plugin below.
Expand Down
2 changes: 1 addition & 1 deletion sdks/java/graalvm-smoke/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {
}

group = "org.byteveda"
version = "0.18.0"
version = "0.19.0"

repositories {
mavenCentral()
Expand Down
2 changes: 1 addition & 1 deletion sdks/java/processor/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {
}

group = "org.byteveda"
version = "0.18.0"
version = "0.19.0"

mavenPublishing {
publishToMavenCentral()
Expand Down
2 changes: 1 addition & 1 deletion sdks/java/test-support/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ plugins {
}

group = "org.byteveda"
version = "0.18.0"
version = "0.19.0"

mavenPublishing {
publishToMavenCentral()
Expand Down
2 changes: 1 addition & 1 deletion sdks/node/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@byteveda/taskito",
"version": "0.18.0",
"version": "0.19.0",
"description": "Rust-powered task queue for Node.js — no broker required.",
"license": "MIT",
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion sdks/python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "maturin"

[project]
name = "taskito"
version = "0.18.0"
version = "0.19.0"
description = "Rust-powered task queue for Python. No broker required."
requires-python = ">=3.10"
license = { file = "LICENSE" }
Expand Down
2 changes: 1 addition & 1 deletion sdks/python/taskito/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,4 +136,4 @@

__version__ = _get_version("taskito")
except PackageNotFoundError:
__version__ = "0.18.0"
__version__ = "0.19.0"
Loading