← all releases

v0.13.1

pre-release on GitHub

Not the newest. v1.5.1 is out →

Release notes

Fixed

  • Compose per-service notify_on_failure/notify_on_success overrides now reach notifications. A [compose.<alias>.<svc>] notify list was parsed and discarded; it now desugars into a notify route keyed by the imported service’s task name, exactly like [services.*]. See Compose.
  • Retention skips non-terminal runs. Age- and count-based cleanup now only prunes runs that have ended, so a run still pending or running is never removed while in flight. See Retention.
  • Catch-up honors a task’s timezone. Missed-tick detection at startup evaluates each task’s schedule in its own timezone (or the scheduler default) instead of the host’s local zone. See Missed runs.
  • Non-service restart backoff now escalates. Consecutive restarts of a non-service task apply the configured restart_backoff curve instead of repeating at the flat base delay. See Tasks.
  • Negative timeout, retry_delay, and restart_delay are rejected at config load instead of being silently ignored. See Tasks.
  • docker compose availability is re-probed after a transient failure, so a task using compose is no longer disabled for the daemon’s lifetime when the first probe fails while Docker is still starting.
  • A malformed Docker build response stream now fails the build rather than spinning on the undecodable bytes.
  • A container start cancelled mid-flight no longer leaks its container or image — cleanup runs on a context detached from the cancelled run.
  • Terminal events for runs that never execute are published off the runtime lock, removing a re-entrancy deadlock reachable on skip-overlap, queue-full, catch-up, and DST-fallback paths.
  • Assorted concurrency fixes in run event publishing, the notification ingress path and outbound coalescer shutdown, and the cloud execution-update buffer and reconnect backoff.
  • Log search now handles non-ASCII task output correctly, and the cursor-based result window advances past the first 50 runs.
  • Shell tasks no longer receive the daemon’s own internal environment variables (RUNWISP_*), matching the container and compose backends.
  • Cloud log-archive uploads now validate the destination URL before connecting.
  • An unrecognized system timezone now falls back to UTC instead of failing daemon startup.
  • Byte-size parsing now rejects non-finite and overflowing values.
  • Rate-limited notification channels now clamp their Retry-After wait to the backoff budget.
  • Concurrent notification publish and unsubscribe no longer race.
  • Restoring soft-deleted runs by filter now returns only the rows it restored.
All releases