Workflow Management¶
Workflows are the heart of Validibot. Each workflow defines an ordered sequence of validation steps that your data passes through. This guide covers how to create, organize, edit, and maintain workflows as your validation library grows.
Planning Your Workflow Library¶
Before creating workflows, think about how to organize them:
By data type: Create separate workflows for different file formats or data structures.
By validation purpose: Group validations by what they check. A "Compliance Check" workflow might verify regulatory requirements, while a "Quality Assurance" workflow checks for common data entry errors.
By audience: If different teams need different validation levels, create workflows for each. A "Quick Check" workflow might run fast schema validation, while a "Full Analysis" workflow includes simulation-based validators.
Naming Conventions¶
Consistent naming helps teammates find the right workflow:
- Include the data type: "IDF Building Model Validation"
- Include the purpose: "ASHRAE 90.1 Compliance Check"
- Consider versioning: "Product Schema v2" (when you need breaking changes)
Creating a Workflow¶
To create a new workflow:
- Navigate to Workflows in the sidebar.
- Click New Workflow.
- Fill in the required fields:
- Name: A clear, descriptive name
- Project: The project this workflow belongs to
- Allowed File Types: Which formats this workflow accepts (JSON, XML, TEXT, etc.)
- Add optional fields:
- Description: Explain what this workflow validates and when to use it
- Public Information: A description visible to anyone who runs this workflow
- Click Create.
The workflow starts in an inactive state, giving you time to add steps before making it available.
Cloning a Workflow¶
To create a variation of an existing workflow:
- Open the workflow you want to copy.
- Click Clone (or find it in the workflow's action menu).
- Give the clone a new name.
- Edit the cloned workflow as needed.
Cloning is useful when you need similar validation logic with minor differences, like checking the same schema with different assertion thresholds.
Adding and Configuring Steps¶
Each workflow needs at least one step. Steps execute in order from top to bottom.
Adding a Step¶
- From the workflow detail page, click Add Step.
- Select a Validator from the list. The list shows:
- All validators compatible with your workflow's allowed file types
- Validators that don't match are shown but disabled with a hint
- Configure the step:
- Name: A label for this step (e.g., "Schema Validation", "Energy Use Check")
- Validator-specific settings: Vary by validator type (schema files, configuration options, etc.)
- Click Save.
Reordering Steps¶
Drag steps to change their execution order. Early steps typically perform basic checks (syntax, schema compliance), while later steps perform deeper analysis.
Removing Steps¶
Click the delete icon on a step to remove it. This doesn't affect past validation runs—their results are preserved.
Validator vs Action Steps¶
Most steps use validators that check your data. Some workflows also include action steps that do other things:
- Send notifications (Slack, email)
- Generate certificates or badges
- Trigger external systems
Action steps typically come after validation steps to respond to the validation outcome.
Editing Workflow Settings¶
From the workflow detail page, click Edit (or the settings icon) to modify:
Name and Description: Update these as your workflow evolves.
Status: Control whether the workflow accepts new runs:
- Active: The workflow accepts validation runs.
- Inactive: The workflow is visible but won't accept new runs. Use this while making changes or when temporarily disabling a workflow.
Project: Move the workflow to a different project if your organization changes.
Allowed File Types: Add or remove supported formats. Changing this may require updating your steps if validators don't support the new types.
Public Information: Update the description shown to users who run this workflow.
Signals, Step Inputs, and Step Outputs¶
When you write assertions, you need to tell Validibot which piece of data to check. Validibot organises the values you can assert against into three distinct concepts:
- Signals — named values in the workflow's vocabulary, available to every
step. You define them; they live in the
s.*namespace. - Step inputs — values a step's validator has at the start of its work
(e.g., parsed facts about an uploaded IDF). Step-local, live in
i.*. - Step outputs — values a step's validator produces after running (e.g.,
simulation results). Step-local, live in
o.*.
Signals (the workflow's vocabulary)¶
Signals are author-defined names you create once and reference everywhere. You create them two ways:
- Signal mapping — on the workflow's settings page, give a signal a name
and a data path. For example, map a signal called
target_euitometadata.target_eui_kwh_m2. From that point on, every step can references.target_eui. - Promotion — lift a step-local value (a step input or step output) to a signal by clicking "Copy to Signal" and choosing a workflow-wide name.
In CEL expressions, signals are written as s.<name> (or the long form
signal.<name>).
Step inputs and step outputs (step-local values)¶
Some validators have a process that transforms data — parsing an IDF, running a simulation, evaluating SHACL shapes. For these validators, you get step-local named values:
- Step inputs (
i.<name>) — what the validator can see at the start of the step, before its main work runs. Often parsed facts about the submitted payload, or values supplied as configuration. - Step outputs (
o.<name>) — what the validator produced after its work.
Not every validator has step inputs or step outputs. Schema validators (JSON
Schema, XML Schema, Basic) don't have a transformation process — they just
check rules over the payload — so both their step inputs and step outputs
panels stay empty. You write your assertions against p.* (the payload) and
s.* (any signals you've defined).
A quick guide by validator type:
| Validator type | p.* (payload) |
s.* (signals) |
i.* (step inputs) |
o.* (step outputs) |
submission.* (envelope) |
|---|---|---|---|---|---|
| JSON Schema, XML Schema, Basic | Primary | If defined | Empty | Empty | Always |
| SHACL, THERM | Available | If defined | Empty | Primary | Always |
| EnergyPlus, FMU | Opaque (rarely useful) | If defined | Primary at input stage | Primary at output stage | Always |
| Tabular | Dataset facts via i.* |
If defined | Dataset-level | Dataset-level | Always |
The submission.* envelope (submitter metadata and server facts like upload
time) is the one namespace available for every validator, regardless of
file format — it's the reliable choice when the file itself isn't JSON (RDF,
CSV). See CEL Expressions.
(The Tabular validator's per-row row.* rules are the one exception — they see
only the current row plus signals.)
Custom data paths¶
Some validators — like Basic, JSON Schema, and XML Schema — validate data
structure but don't pre-declare specific step inputs or step outputs. When
you use these validators, you reference data using custom data paths:
dot-notation expressions that navigate into the submitted data via p.*.
For example, if someone submits this XML:
You could write an assertion targeting p.building.thermostat.setpoint.
Custom data paths use dot notation for nested objects and [index] for lists:
p.building.thermostat.setpoint— a nested valuep.results[0].value— the first item in a listp.Materials.Material[2]["@Conductivity"]— an XML attribute on the third Material element
Which mode you'll see when authoring assertions¶
When you add an assertion to a workflow step, the form adapts based on the validator and the assertion's stage:
- Validator with declared step inputs/outputs: You'll see a Target
dropdown with the available
s.*,i.*, ando.*values. The available list depends on whether you're editing an input-stage or output-stage assertion (step outputso.*only show in output-stage assertions, since the validator hasn't produced them at input stage). - Validator without declared values (Basic, JSON Schema, XML Schema):
You'll see a Target Path field where you enter a custom data path
against
p.*(the payload). - Validator with declared values that also allows custom paths: You'll see Target — you can pick a known value or enter a custom path.
Stage-aware authoring¶
Each step's assertions are organised into two stages: input-stage (evaluated before the validator runs) and output-stage (evaluated after). The available references depend on which stage you're authoring:
- An input-stage assertion can reference
p.*,s.*,i.*, and earlier steps viasteps.<key>.*. It should not reference this step'so.*— those outputs don't exist yet, so such references resolve to null at runtime. - An output-stage assertion can reference everything, including this step's
o.*andi.*.
Strict edit-time rejection of o.* references in input-stage assertions
is being rolled out — until it's fully threaded through the assertion
editor, please double-check that your input-stage assertions reference
only p.*, s.*, i.*, and steps.* values.
Assertions¶
Validibot evaluates two tiers of assertions for each workflow step. Both produce findings visible in the run results, and both count toward the step's assertion statistics.
Default Assertions¶
Default assertions are defined by the validator author on the validator itself. They run automatically whenever the validator executes, regardless of which workflow step is using it. Validator authors manage them from the validator detail page.
Default assertions are always evaluated first. Workflow authors cannot override or remove them — they represent the validator's built-in domain checks (for example, "site EUI must be positive"). When you view a workflow step in the editor, a card shows how many default assertions the selected validator has.
Step Assertions¶
Step assertions are authored by the workflow creator and are specific to one workflow step. They let you add custom rules on top of the validator's defaults.
When to use step assertions:
- To tighten validation beyond the default checks
- To enforce business rules specific to your use case
- To check relationships between data fields
Adding step assertions:
- Edit the workflow step.
- In the "Assertions" section, click Add Assertion.
- Choose a target — either a signal from the validator or a custom data path (see Signals, Step Inputs, and Step Outputs above).
- Define:
- Expression: The CEL expression or comparison that must evaluate to true
- Message: The error message shown when the assertion fails
- Severity: Error, Warning, or Info
- Save the step.
Evaluation Order¶
When a step runs, built-in validation work happens before the assertion tiers. For example, JSON Schema steps validate the JSON document first, XML Schema steps validate the XML document first, and SHACL steps validate the RDF graph against the configured shapes first.
Assertions are then evaluated in this order:
- Default assertions from the validator (always run first)
- Step assertions defined on the workflow step (run second)
Findings from both tiers appear together in the results.
Workflow Lifecycle¶
Active vs Inactive¶
- Active workflows accept new validation runs and appear prominently in the UI.
- Inactive workflows are visible but don't accept runs. The "Launch" button is disabled.
Toggle status from the workflow detail page. Making a workflow inactive doesn't affect runs already in progress.
Archiving Workflows¶
When a workflow is no longer needed but you want to preserve its history:
- Open the workflow.
- Click Archive (in the actions menu).
Archived workflows:
- Don't appear in the default workflow list (toggle "Show Archived" to see them)
- Cannot accept new validation runs
- Preserve all historical runs and findings
- Can be unarchived later if needed
Who can archive?
- Owners and Admins can archive any workflow in their organization.
- Authors can archive workflows they created.
- Executors and Viewers cannot archive workflows.
Unarchiving¶
To restore an archived workflow:
- Enable "Show Archived" in the workflow list.
- Find the archived workflow.
- Click Unarchive.
The workflow returns to inactive status. Set it to active when you're ready to accept runs again.
Deleting Workflows¶
Deleting a workflow permanently removes it and all associated runs. This action cannot be undone.
Consider archiving instead of deleting when you might need the validation history later.
Best Practices¶
Test before activating: Keep workflows inactive while you're still setting up and testing. Run sample validations to verify the behavior before making the workflow available to others.
Document your workflows: Use the description and public information fields to explain what the workflow checks and when to use it. Future you (and your teammates) will thank you.
Version with care: When you need to make breaking changes, consider creating a new workflow (e.g., "Product Schema v2") rather than modifying the existing one. This preserves history and lets users migrate gradually.
Review validator compatibility: When changing allowed file types, verify that all steps still work. Validators that don't support the new types will show warnings.
Use projects consistently: Keep related workflows in the same project. This makes it easier to find workflows and analyze validation trends across related data.