schedule() declares one on a
nika serve --bind, and the server fires it, stores its state under its
--state-root and survives restarts. A local client refuses schedule() and
scheduleStatus(), because a short-lived process cannot honestly own a
schedule.
Declare, read, pause
Against the server of the server quickstart:schedule.mts
requestedCivil,
scheduledFor, shift), the server’s lastDecision, and due, which
reads { kind: 'paused', pauseUntil, reason } once paused.
Rules the server enforces
- Revisions. A create is sent with
If-None-Match: *; an update needs the exact current revision (If-Match). Revisions are the engine’s opaquesha256:<64 hex>values: never make one up. A stale one fails withschedule_conflict(HTTP 412), anderror.currentRevisionnames the current one. - Time zone. A cron cadence names its zone:
TZ=<IANA zone> <cron>. A cadence without one is refused (schedule_refused, 422). - Budget. A schedule’s
maxCostUsdmust be positive:0is refused, where a localrun()accepts it. - Served workflows only. The workflow is a served name under the server’s
--workflowsdirectory, named from the project root. Anything else is refused withschedule.workflow_outside_registry. - Pausing.
active: falseneeds apauseReasonand apauseUntilcalendar date (YYYY-MM-DD). - Overlap.
afterSkipneedsoverlap: 'skip', the default, so leavingoverlapout works too. Hash jitter is refused. - Catch-up. After the server was down, a
catch-up-oncerun’sreceipt.originnames the silence it answers for:missed_first, the first slot that passed unfired, andmissed_count.
schedule() or arm:
Both run the same workflows under the same engine. Choose by who should own
the cadence: your product, or your repository.
Arm registry covers the project-file lane.
Which version is this?
Which version is this?
Server quickstart
The server this page talks to.
Arm registry
Cadences reviewed in the project file.