v0.27.0
Minor Changes
-
Claims can now be held for long-running work by heartbeating — on both transports. A claim’s TTL is crash cleanup, not a work estimate; work that outlives it (a 30-minute report, a long agent run) keeps its lease by beating.
claim({ heartbeat: true })beats automatically until release;held.heartbeat()beats by hand. A lapsed lease answers the next beat withAbloClaimedError(claim_lost) — for a socketless worker, the failed beat is the loss notification, and any write attempted under the old lease is independently rejected by itsreadAtguard. -
Beats carry progress and pressure.
heartbeat({ details })stores lightweight progress as the claim’s peer-visiblemeta.progress(last beat wins, viaclaim.state); every beat’s answer reportsqueueDepth— how many participants wait in line behind the lease — observable per auto-beat with the newonHeartbeatclaim option. -
ablo.claims.heartbeatAll({ ttl })extends every lease the credential holds in one request (POST /api/v1/claims/heartbeat) — the stateless twin of the WebSocket keepalive, for workers holding many rows. -
Keepalive renewals extend but never shorten a lease, so an explicit work-duration
ttlnow survives pings and brief reconnects instead of collapsing to the liveness window. -
README. The quick start leads with a runnable example, and a new Background workers section shows the enqueue-on-your-own-queue / heartbeat-the-claim pattern end to end.