--- id: CRON-1 family: RT-CRON level: extended profiles: [runtime] posture: normative-target added: "1.0" changed: "1.0" source: https://flowdrop.io/spec/rules/rt-cron/cron-1 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # CRON-1 — A cleared schedule means not scheduled, and every reader says so *RT-CRON (Part II) · level: extended · profiles: runtime · added in 1.0* A schedule is invisible until it fires or fails to, so the component that decides a trigger is due and the one that reports when it will next run must never describe the same stored value differently. Blank-means-inactive is the reading every comparable scheduler uses. ## The rule > **Normative.** This is the rule. > > 1. A trigger whose cron expression is the empty string is not scheduled: it must not fire, and a report of when it will next run must say it has none. > > 2. Empty means exactly empty: an expression that merely looks unfilled, such as `0`, is a malformed expression and must be reported as invalid rather than as unset, so an operator is never told to fill in a field that is already filled in. > > 3. Whichever component decides that a trigger is due and whichever reports its next run must reach the same conclusion about the same stored schedule. ## What it means A cleared schedule expression is not special-cased on the way in — it is a stored value like any other, and the component that decides a trigger is due and the component that reports its next run must read that value the same way. Both must treat a blank expression as "not scheduled," never as a schedule that fires on every pass. The clause that a careful reader misses is the second one: "blank" means exactly blank. An expression that only looks unfilled, such as a single `0`, is a real schedule expression the parser rejects, not an absent one. Reporting it as absent tells whoever is debugging a dead trigger to go fill in a field that already holds a character. ## Example The same missing next run, reported for two different stored expressions: ```json title="The reported code for a cleared expression" verdict="unset" "no_expression" ``` ```json title="The reported code for a stored expression of a single zero" verdict="malformed" "invalid_expression" ``` ## Related rules - Names: CRON-2 - Referenced by: CRON-2 --- Rule identifiers are permanent and are never renumbered. This specification carries no implementation status: each implementation publishes its own standing against these rules. Licensed CC BY 4.0.