--- id: CRON-2 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-2 specification: FlowDrop Workflow Specification 1.0-draft licence: CC BY 4.0 --- # CRON-2 — Every reason a schedule has no next run carries a stable code *RT-CRON (Part II) · level: extended · profiles: runtime · added in 1.0* The report of a trigger's next run is the only view of a schedule an operator has. A report that cannot distinguish "fine, nothing due" from "will never fire" is the diagnostic being absent exactly when it is needed. ## The rule > **Normative.** This is the rule. > > 1. An absent next run, reported on its own, means only that nothing is currently due, the answer a perfectly healthy schedule gives between fires. > > 2. Every other reason a schedule yields no next run must be reported with a stable code: `no_expression` where the expression is cleared, `invalid_expression` where it is malformed, or well-formed but unsatisfiable. > > 3. Severity must not be flattened: an unusable timezone does not stop a trigger, since the implementation substitutes UTC, so such a schedule still reports a real next run alongside the code `invalid_timezone`; an expression problem, being the more consequential of the two, takes its place. > > 4. A broken stored schedule is not a broken request: the report is answered with 200 and carries the diagnosis. ## Related rules - Names: CRON-1 - Referenced by: CRON-1 --- 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.