v0.3.0 — Scheduled triggers + `work serve`
Time-based triggers, and a single long-lived host to run them.
⚠️ Breaking
work --webis removed — the local server is now thework serve
subcommand (no alias). Update any scripts or service units:work --web→
work serve(same--workspace/--portflags).
✨ New: scheduled triggers
- Declare
on: schedulewith one or morecron:expressions (UTC, five-field
GitHub-Actions syntax), validated at parse time. work serveis the scheduler — it fires a workflow when a cron slot comes
due, dispatching down the same path a manual run takes. No separate daemon, no
CLI scheduling.- Skip-by-default, no catch-up: a slot missed while the host is down is dropped
and the schedule resumes at the next future slot — never a backfill flood. A
slot-derived idempotency key fires each slot exactly once. - Status surface —
GET /api/schedulesand a Schedules panel in the serve
console (workflow, cron, last-fired, next-fire), read through the running host.
work serve
One process now serves the HTTP API, the browser console, the authenticated
webhook receiver, and the scheduler. History, deliveries, and schedule state
persist under <workspace>/.workflows/db/.
Docs
User-facing pages for on: schedule and the serve host, the --web → work serve
rename propagated across the site, and a test/e2e/scheduled/ gallery example.
What's Changed
- chore(deps): lock file maintenance by @renovate[bot] in #17
- Scheduled triggers:
on: schedulecron, fired bywork serveby @dydx in #22
Full Changelog: v0.2.3...v0.3.0