Run a first check
Use Run check from the project sidebar when you want to test rule logic on real project data.Load preview model
Draft and preview rules
WHERE / CHECK; preview (Run Preview or Ctrl+Enter / Cmd+Enter) to validate
logic before save.Review first output
Refine before save
Handle large-model behavior
Confirm persistence
Import rules from IDS, COBie, or Speckle
On an empty check, select Import IDS, Import COBie, or Import Speckle to turn an existing requirements file into rules. You can also drop an IDS or COBie file onto the check assistant to adapt it to the model. Always rerun preview on a representative version after import, then tune predicates if needed.- IDS — IFC-aligned facets map to rules. Most facets map to Exists, Equals, In
list, or Between. IDS
xs:patternvalues often land as Contains rather than full regex, so verify naming rules after import. Advanced applicability or property mappings may need manual fixes. - COBie — worksheet fields map to rules. Typical outcomes are sheet-scoped Exists checks
and pick-list In list assertions. Optional fields often arrive as
infoseverity so they do not drive the overall score. Unusual columns or macro-heavy sheets can lose fidelity, so verify property paths, severities, and messages. - Speckle — JSON, TSV, or CSV exports from dashboards and related tooling. Supported dashboard
predicates map to Data Validation operators; unsupported negations (not exists, not in list,
does not contain) are skipped, and dashboard warning severity becomes
info.
Build a check with many rules
One topical check can own many rules (e.g. fire ratings on walls/doors/windows) so failures stay rule-level inspectable—use Add rule, one requirement per rule, per-rule Run, duplicate when scopes match.Operate checks over time
Saving locks rules to tracked models—later versions rerun the same predicates without redoing ad-hoc spreadsheets. Manual vs auto trigger matches how tightly you gate runs. Charts need repeated runs—the first save is often your baseline-only pass. Expanded rule rows exposeWHERE → CHECK
counts when a filter swallowed your elements prematurely.
Layouts: What you see on the
page. Ordering:
Practical review
flow.
Save the check after scope is final, then read combined scores on
Viewing Results.
First visit to results can lag when many rules, models, or deep history enqueue work.
Rule structure in checks
Each rule is filters plus one assertion.Default scope
A new check starts with an empty global scope. The version already contains user-facing objects only, so no starting filter is needed. Narrow with category, type, or parameter filters inWHERE when you need a tighter rule. Add condition adds a scope filter above the check; it does
not turn the existing check into a filter.
An unsaved draft from before 2026.9 that still carries the earlier default filter loses it when
you reopen the draft. Saved checks keep it; see the warning below.
Thresholds and status
Rates map through thresholds. You set a global pass (and optional warn) threshold when saving, and you can override thresholds per rule in authoring.PASS (≥ pass), WARN (between thresholds when warn is set), FAIL
(under thresholds), PENDING (evaluation not finished).
Only error severity rules contribute to the overall check score. info rules still
evaluate and appear in results, but they do not change the aggregate pass rate.
Interpret outcomes on Viewing Results.
Predicates and matching
The operator dropdown lists every authorable predicate. The UI does not grey operators by property type—pick a value shape that matches the property you are testing (text, number, or boolean). Booleans compare as Equals withtrue or false.
Operator catalog
Matching details
Matches (wildcard):* and % match any character run; ? matches one character.
Matching is case-sensitive.
Matches (regex): turn on the .* toggle to use a regular expression. You can enter a
plain pattern, or a /pattern/i literal for case-insensitive matching. Lookahead,
lookbehind, and backreferences are not supported.
Regex mode requires a full-string match. The pattern must account for the entire value, not
only the prefix you are asserting. ^(Wall|Door) matches only the exact strings “Wall” and
“Door”. Use ^(Wall|Door).* to match values that start with those prefixes, or use wildcard
mode (Wall*) instead. See Regex mode for more
pattern examples.
Equals template: bind {{token}} placeholders to other property paths. Use exact mode
to require the concatenated value, or regex mode (same .* toggle and the same full-string
match) when the template is a pattern.
Contains is substring search only. Prefer Matches when you need wildcards or regex.
Numeric tolerance
Optional per-condition Tolerance sets decimal placesN (ε = 10^-N). It applies to
numeric Equals, Equals property, At least, At most, and Between. It
does not apply to Greater than, Less than, Not equals, list/text operators, or
Exists.
Property paths
Pick paths from the path picker after a preview model loads so value suggestions come from real data. Typical Revit parameters sit underproperties.Parameters, for example type Width
under properties.Parameters.Type Parameters.Dimensions.Width. Common shapes:
categorynameproperties.Parameters.Type Parameters.Dimensions.Width
parameters.Width.value and baseline.length come from the data format used before
2026.9 and may not exist on your version. Use the path picker for the paths your model has.Match a property wherever it sits
A Fire Rating parameter is not always on the same path. Click the path-matching control next to the path to cycle modes:- Exact (
=) — the full path from the picker - Suffix (
*.x) — every property whose path ends with that segment, for example Fire Rating. Every matching value must pass - Regex (
.*) — a regular expression over the full path
Short examples
- Fire rating present:
WHEREcategory EqualsWalls,CHECKfire-rating path Exists (or Equals a required rating string). - Width band:
CHECKthe Width path Between100and300, with tolerance if units are noisy. - Naming convention:
CHECKnameMatchesW-*. In regex mode use^W-.*so characters after the prefix still match. - Consistency:
CHECKone path Equals property against another path on the same object.
Checks against related objects
A rule can check an object against something it is related to — a door against the wall that hosts it, or a wall against the rooms it bounds — because those relationships are in the published version. Use Add related object on the rule. The editor adds a binding row. The name on the left (@host, @room, @connected) is how later conditions address that object. Pick a relationship
from the list the version actually carries. Friendly labels include Host element,
Sub-elements, Room, Bounded room, Assembly, and Connected element.
Then choose a property on that related object from the path picker. Related paths show as
@host · Fire Rating in the sentence pills.
Direction, all versus any, and narrowing
The arrow on the binding follows the relation forward (for example a door toward its host wall) or backward (a wall toward the elements hosted on it). Click the arrow to reverse it. all (default) means every related object must satisfy the check. any means one related object is enough. That setting applies to the check only. A scope filter on a related path still keeps a subject when at least one related object matches, regardless of all or any. Open where and select Narrow related objects to keep only some related objects, for example hosts whose category is Walls. Those filters run on the related object. They do not use@ prefixes.
When there is no related object
A subject with no related object fails a check that reads that binding. If a door with no host should be not applicable instead of a fail, add a scope condition that the related path exists (for example@host is present) before the check.
Examples you can author:
- A door’s fire rating must match the wall that hosts it
- If the host wall is fire-rated, the door must be rated. Unrated walls are not applicable, not a fail (scope on the host rating, then check the door)
- Every door must be hosted on a wall
- Every wall that bounds a room carries a rating (all), or at least one of them does (any)
- A door can be checked against a room reached through the host wall: add a second related
object, set of to
@hostinstead of this element, and pick Bounded room or Room
@name, or while a later binding
chains from it. Update those references first.
Map labels before you compare
When a check compares two properties (Equals property), you can map each side’s raw labels onto shared values before the comparison. This is how60 MIN and 1 HR become the same rating,
and how a 2 HR wall can require a door of at least 90 MIN.
Select Equals property, pick the other path, then open the comparison control beside it. The
control shows = until you add a mapping or change the comparison.
Set Compare to = equals, ≥ at least, or ≤ at most. Under This value maps and
Other value maps, select Add mapping, pick a raw value from the list, and set what it
maps to. Unmapped values stay as they are.
Map both sides to the same numbers when the labels should count as equal. Map the other side to a
required minimum and use ≥ at least when one side must be stricter than the other. The same
mapping works when the other path is on a related object, such as a host wall.
Check a calculated value
Some rules test a number no single property holds, such as a beam’s span-to-depth ratio: its length divided by the depth parsed from a section name like300x600. A rule’s scope or check can
test a computed value calculated from each object’s properties. The usual comparisons apply,
so the threshold stays a value you can edit.
Describe the calculation to the assistant to create it.
Describe the calculation
Review the value range
Save the rule
Change the calculation
Select the Σ subject, then Edit with AI to describe the change to the assistant, or Edit SQL to change it yourself. When you edit by hand, you can change the description, the unit, and the SQL. Select Preview to run the edited SQL in its rule. The preview shows the range of values, how many objects it checked, and how many have no value. Apply stays disabled until the preview has run on exactly the current SQL, no object has more than one value, and you confirm the description and unit still match.22.5, expected ≤ 20.
When there is no value or more than one
An object whose inputs are missing, or do not parse (a type name likeCustom beam), has no
value. A scope condition on the computed value drops it, and the check fails it. The object table
shows no value, expected ≤ 20. To treat those objects as not applicable, ask the assistant to
check only objects where the value can be calculated.
The calculation must give one value per object. When it gives more than one for any object the rule
checks, the rule shows ERROR with a message such as 3 objects have more than one computed value, instead of pass or fail. Ask the assistant to fix the calculation.
Computed values work in a rule’s scope and check only, not in the global scope or on a related
object. Each one reads the properties of the model the check runs on.
Run a check on every submission automatically
For the specific pattern of validating incoming consultant or subcontractor models against your standard at every milestone — author once, set auto trigger, and stop relying on someone to remember to run it — see Validate incoming models automatically.Best practices
TightenWHERE first so broad scopes do not flood triage.
Write descriptive Message text so fix owners can act without extra clarification.
Run preview before save so you catch false positives before history is recorded.
FAQ
Where did Project standards go?
Where did Project standards go?
Why does my existing check show 0 objects?
Why does my existing check show 0 objects?
Should I still filter on DataObject to widen scope?
Should I still filter on DataObject to widen scope?
WHERE.Why does an object that has every input still show no value?
Why does an object that has every input still show no value?
Custom beam
that does not match the expected pattern. Fix the source data, or ask the assistant to handle
that format. See When there is no value or more than
one.How do I know a check is too strict?
How do I know a check is too strict?
WHERE, tune predicates, or downgrade severity to info.What happens to check results when a tracked model is deleted?
What happens to check results when a tracked model is deleted?
Can rules inside one check be reordered?
Can rules inside one check be reordered?
What is the difference between preview and saving a check?
What is the difference between preview and saving a check?
How do I recover when a version update spikes unexpected failures?
How do I recover when a version update spikes unexpected failures?
Why does a Matches regex check fail values that start with my pattern?
Why does a Matches regex check fail values that start with my pattern?
^(Wall|Door) matches only those exact
strings, so values such as Wall_01 fail. Append .* (^(Wall|Door).*) or use wildcard mode
(Wall*). See Predicates and matching.