Overview
After a workflow’s trigger fires, Rootly evaluates run conditions to decide whether the workflow’s actions should execute. Conditions are the difference between a workflow that fires once a quarter on real SEV0s and one that fires hundreds of times a day on every minor update. Every condition has two layers:- A join operator — how the individual conditions combine (all of, any of, none of).
- A per-condition operator — how each condition compares its target field to the value(s) you configured (
is,is one of,contains any of,is set, etc.).
Join Operators
Rootly supports three operators for joining multiple run conditions:| Operator | Meaning | When to Use |
|---|---|---|
| all of | Every condition must be true. | The default and most common choice. Use when you want the workflow to fire only on a specific combination. |
| any of | At least one condition is true. | Use when any of several conditions independently warrants firing (e.g., SEV0 or Security incident type). |
| none of | Every condition must be false. | Use to exclude — e.g., “fire on all incidents except Test Kind”. |
Per-Condition Operators
Each individual condition picks an operator that determines how Rootly compares the field’s current value to the value(s) you configured.| Operator | Returns true when… | Common Field Types |
|---|---|---|
is | The field’s value matches exactly. | Single-select, boolean |
is one of | A single-select field matches any of the provided values. | Single-select |
none of | A single-select field matches none of the provided values. | Single-select |
contains any of | A multi-select field includes at least one of the provided values. | Multi-select |
contains all of | A multi-select field includes all of the provided values. | Multi-select |
contains none of | A multi-select field includes none of the provided values. | Multi-select |
is set | The field has any value. | Any |
is unset | The field has no value. | Any |
Operator Selection by Field Type
The right operator depends on whether the field stores a single value, multiple values, or a boolean:- Boolean fields (e.g.,
Is Private) — useis set/is unset, oris true/is falsepatterns. - Single-select fields (e.g.,
Severity,Kind,Status) — useis,is one of,none of. - Multi-select fields (e.g.,
Services,Teams,Functionalities) — usecontains any of,contains all of,contains none of. - Presence checks —
is setandis unsetwork on any field type and are useful for “fire only when an optional field has been filled in” patterns.

Common Condition Recipes
The patterns below cover the majority of real-world incident workflow conditions — each is a starting point you can extend with additional conditions joined by all of to scope further. Recipes for alert, action item, retrospective, or pulse workflows follow the same operator patterns but with different available fields.is / is one of / none of in place of the contains-family operators.All values shown in the recipes are the user-facing labels visible in the workflow editor. In the raw API and audit-log payloads, some of these correspond to different internal identifiers (for example, the Kind label Sub Test Incident is test_sub); use the labels shown in the UI when authoring conditions.Fire only on SEV0 production incidents
Kind is: Incident clause is the easiest miss — without it, a Test Incident at SEV0 will fire the workflow. This example assumes Environments is multi-select (the default); if it’s configured as single-select, use Environment is: Production instead.
Fire only on incidents owned by a specific team
contains any of (not is) because Teams is multi-select by default. Teams is one of would silently fail to match incidents tagged with multiple teams that include Platform. If your workspace has Teams configured as single-select, use Teams is one of: Platform.
Exclude test incidents from a paging workflow
Kind is: Incident) is usually clearer and survives the addition of new Kind values better than an exclusion list. See Incident Kind for the full list of kinds and what each one triggers.
Fire only when a custom field is filled in
Severity is one of: SEV0 to scope further.
Fire on any status update except cancellation
How Conditions Interact with Triggers
Triggers are OR-joined — if any selected trigger fires, the workflow initiates. Conditions are then evaluated against the incident’s state at the moment the trigger fired. This has two consequences worth knowing:- Triggers do not contribute to conditions. A workflow with a Status Updated trigger and a
Status is mitigatedcondition will fire only when status changes to mitigated — butStatusin the condition refers to the new status, not the trigger event. - Conditions evaluate post-trigger. If a workflow’s trigger is Incident Created and a condition references
Mitigated At, the condition evaluates against the just-created incident — which has nomitigated_atyet. Useis unsetdeliberately if you want to fire only on freshly-created incidents.
Best Practices
- Default to
all ofand verify the operator before saving. A workflow that fires too often is almost always anany ofslip. - Always include a
Kind is: Incidentcondition on any workflow that pages or notifies people. Without it, Test Incidents will trigger the workflow during training and demos. - Prefer positive conditions over exclusion lists.
Kind is: Incidentsurvives the introduction of a new kind value; anone ofexclusion list (Test Incident, Sub Test Incident, Scheduled Maintenance, Sub Scheduled Maintenance, Backfill Incident) breaks the next time a kind is added. - Use
contains any offor multi-select fields.isandis one ofsilently fail to match when the field stores multiple values that include your target — use the contains-family operators instead. - Test new conditions on Test Incidents first. Run a
/rootly testand confirm the workflow fires (or doesn’t) as expected before relying on it in production.
Troubleshooting
A workflow runs when not all conditions are met
A workflow runs when not all conditions are met
The workflow doesn't fire even though it should
The workflow doesn't fire even though it should
- Trigger mismatch. Workflows fire only on the triggers you selected. If you expect a workflow to fire on Severity Updated but only Status Updated is selected, it won’t run.
- Multi-select condition using
is. A condition likeTeams is Platformevaluates to false when Teams contains [Platform, Database]. Switch toTeams contains any of: Platform. - Kind filter exclusion. If the workflow has
Kind is: Incidentand you’re testing with a/rootly test, the condition correctly filters out the test incident. Drop the Kind filter temporarily or run a real/rootly newfor the test.
A workflow fires for test incidents
A workflow fires for test incidents
Kind is: Incident condition to scope the workflow to real production incidents only. Test incidents trigger workflows by default, which is desirable when you want to validate workflow logic — but undesirable for workflows that page humans or notify customers.A condition referencing a custom field doesn't evaluate
A condition referencing a custom field doesn't evaluate
A `none of` condition is matching when I expected it to fail
A `none of` condition is matching when I expected it to fail
none of returns true when none of the listed values match — so an empty/unset field returns true (none of the values match because there’s no value to match). If you want the condition to require the field to be set, combine none of with is set under an all of join.Frequently Asked Questions
Can I nest condition groups?
Can I nest condition groups?
(A AND B) OR (C AND D)), split into two workflows or restructure as a single workflow with conditions that can be joined under one operator.Are conditions evaluated against the incident's pre-update or post-update state?
Are conditions evaluated against the incident's pre-update or post-update state?
Status is mitigated returns true.Do conditions support Liquid expressions?
Do conditions support Liquid expressions?
Can a workflow with no conditions fire?
Can a workflow with no conditions fire?