Changelog
What changed in each release of Sextant. Versions follow semantic versioning; breaking changes only ship in a new major version.
- v2.4.0
Pause queues, read the whole attempt timeline
Queues can be paused and resumed without a restart, and sextant inspect now shows every attempt of a job on one timeline.
- New (beta):
sextant queues pause <name>andsextant queues resume <name>, plusPOST /v2/queues/{queue}/pauseand/resume. Running jobs finish; nothing new starts. See Pause and resume a queue. - New:
sextant inspect <job-id>prints each attempt with its worker, duration, error and the backoff that followed. - New: the Go SDK passes
context.Contextcancellation to handlers, so a cancelled job stops its work early. - Fix:
sextant logs --followno longer drops lines when the server restarts mid-stream. - Fix: the Postgres store no longer holds a long transaction while counting queue depth, which removed a source of lock waits on busy queues.
- New (beta):
- v2.3.1
Schedules survive daylight saving changes
A patch release for schedule drift around DST changes and a stricter webhook signature check.
- Fix: a schedule in a time zone with daylight saving time ran one hour late on the first day after the clocks changed. Next runs are now computed from the wall-clock expression, not from the previous run plus 24 hours.
- Fix:
sextant config checkreported validbackoff.maxvalues belowbackoff.baseas correct. It now fails with a clear message. - Security: webhook signatures now include the timestamp in the signed payload, and the SDKs reject deliveries older than five minutes by default. Update the SDK on the receiving side; see Webhooks.
- v2.3.0
Queue wait metrics and the overlap policy
A histogram for how long jobs wait in a queue, an overlap option for schedules, and an async Python client.
- New: the histogram
sextant_queue_wait_secondsmeasures the time between a job becoming runnable and a worker starting it. It is the metric to alert on when workers fall behind. See Observability. - New: schedules accept
overlap = "skip" | "queue" | "allow". The default staysskip. - New: the Python SDK ships
AsyncSextant, built onasyncio, with the same methods as the synchronous client. - New:
sextant jobs list --state failed --since 1hfilters by state and age.
- New: the histogram
- v2.2.0
Webhooks and scoped tokens
Job events can be pushed to your HTTPS endpoint with a signature, and API tokens carry scopes.
- New: webhooks for
job.succeeded,job.failed,job.deadandjob.cancelled, signed with HMAC-SHA256 and retried for 24 hours. - New: tokens have scopes such as
jobs:writeandqueues:read, and an optional expiry. Tokens created before 2.2 keep full access until you rotate them. - New:
sextant tokens create --scope jobs:write --expires-in 90d. - Improved: the SQLite store enables write-ahead logging by default and no longer blocks readers during a checkpoint.
- New: webhooks for
- v2.1.0
Jitter, the dead queue and live logs
Backoff gets jitter, hopeless jobs move to a dead state you can inspect, and logs can be followed from the CLI.
- New:
backoff.jitterspreads retries so that a burst of failures does not return as a burst of retries. - New: jobs that exhaust
max_attemptsmove todeadinstead of stayingfailed, and can be requeued withsextant jobs retry. - New:
sextant logs --follow --queue emailsstreams structured log lines from the server. - Deprecated: the
retry_delayoption. Usebackoff.base;retry_delaykeeps working until 3.0.
- New:
- v2.0.0
Sextant 2.0
A new store layer, a versioned REST API, a TOML config file and one binary for server and worker.
- Breaking: the config file is now
sextant.toml.sextant.yamlis no longer read.sextant migrate configconverts it. - Breaking: Redis is no longer a store. SQLite (one machine) and Postgres (many) replace it.
sextant migrate from-v1imports pending jobs and schedules. - Breaking: the REST API moved from
/api/v1to/v2, with bearer tokens instead of theX-Sextant-Keyheader. - New:
sextant serverandsextant workerreplacesextant start. - New: a Go SDK, next to Node and Python.
- New: idempotency keys on job creation.
The step-by-step path is in Migrating from v1.
- Breaking: the config file is now
- v1.9.4
Final maintenance release of v1
Security fixes and a Redis reconnect fix. Version 1 receives no further updates.
- Fix: workers reconnect after a Redis failover instead of exiting.
- Security: the v1 dashboard no longer echoes API keys in error pages.
- Deprecation: version 1 is end of life. Documentation stays available under v1.