Skip to main content
Current limitationIn v0, after creation you can rename a check only; scope, rule list, and predicates stay frozen. For different behaviour, create a new check.
Use this page for Validation Check authoring and execution.
Checks are executable validation definitions tied to tracked models. For reusable templates, use Standards.
v0 release behavior (available today): checks can be defined and run against all models in a project. Editing an existing check is currently limited to its name; scope and rules are not yet editable after creation.This will evolve. We would value feedback on the expected versioning behavior for checks (for example: mutable checks vs immutable versions/forks).

Run a first check

Use Run check from the project sidebar when you want to test rule logic on real project data.
1

Load preview model

Empty first screen until a preview model loads. Load preview to unlock starters and pick model/version context first.
2

Draft and preview rules

Define WHERE / CHECK; preview (Run Preview or Ctrl+Enter / Cmd+Enter) to validate logic before save.
3

Review first output

First preview yields one aggregate plus one row per rule.
4

Refine before save

Preview is ephemeral, so tune scope before save. Edited rules prompt a rerun so displayed numbers stay trusted.
5

Handle large-model behavior

Large models may skip the 3D pane; assertions still evaluate when preview is unloaded.
6

Confirm persistence

Done when Checks shows the new card, which confirms persistence.

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 expose WHERECHECK 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.
ComponentDescription
WHEREFilter scope of objects evaluated by the rule
ANDOptional additional filters within the same scope
CHECKFinal validation assertion
Property pathTarget property (category, baseline.length, parameters.Width.value)
PredicateComparison operator (Equals, Exists, Matches pattern, and more)
ValueReference value for the predicate
Report severityERROR or INFO
MessageHuman-facing explanation for failed outcomes

Default scope

Default filter: speckle_type Contains DataObject, the connector-produced base BIM bucket (Revit, IFC, …). DataObject is the base type Speckle connectors produce, so most BIM objects match it. Narrow with category/type/parameters—dropping DataObject widens noise risk.
One terminal CHECK per rule—extra assertions belong in extra rules.

Thresholds and status

Rates map through thresholds:
SettingEffect
Pass thresholdMinimum pass-rate for PASS.
Warn thresholdOptional lower bound yielding WARN between warn and pass.
No warn thresholdBelow pass ⇒ FAIL (no intermediate WARN).
Statuses: PASS (≥ pass), WARN (between thresholds when warn is set), FAIL (under thresholds), PENDING (evaluation not finished).

Predicates and matching

Type-aware predicates:
  • Text: Exists, Equals, Contains, Matches pattern
  • Number: Is greater than, Is less than, Is between
  • Boolean: Is true, Is false
Matches pattern accepts wildcard or regex-like syntax per field help.

Best practices

Tighten WHERE 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

Yes—pick models and triggers after choosing the standard as the base.
Noise usually means tighten WHERE, tune predicates, or downgrade severity.
Existing results stay in history because they store the evaluated model/version ids from run time. The deleted model no longer appears in live scope, so future runs exclude it.
Rule order follows how rules were authored and saved. Reordering is not supported in v0, so duplicate/delete is the fallback when order matters for review.
Preview runs against the current session model/version and is not persisted after you leave. Saving persists tracked models, trigger mode, thresholds, and result history.
First confirm the result used the model/version you expected, then inspect failing rules for missing or changed properties in the new version. If needed, duplicate the check for debug narrowing, export BCF for issue handoff, then create a replacement check once root cause is clear.
Last modified on May 31, 2026