Detail Items and False Positives
What is OST_DetailComponents?
In Revit, Detail Items are 2D annotation-like elements used in views — section marks, hatch patterns, detail lines, and similar drafting content. In the Revit UI they appear under the category name "Detail Items".
Their internal label is OST_DetailComponents.
Despite their 2D, view-only nature, Revit classifies them as category.type = "Model". This means a broad model-category filter includes them:
$[type = "FamilySymbol" and values.category.type = "Model"]
/* OST_DetailComponents is included here */
Why they cause false positives
Detail Items behave differently from true model elements:
- They are placed in views, not in the 3D model
- They do not carry parameters like Mark, Level, or Assembly Code
- They are not part of the building's physical data
When a rule checks that all model elements have a Mark or Assembly Code, Detail Item instances will always fail — not because the data is wrong, but because these elements were never intended to carry that data.
The result is a long list of reported errors for elements that are not in scope. This is a false positive: the rule flags something as an error when it is not.
The solution: explicit exclusion
Because Detail Items cannot be excluded by category.type alone, they must be removed with an explicit label exclusion:
$CategoryExclusion := ["OST_DetailComponents"];
$[
type = "FamilySymbol"
and values.category.type = "Model"
and $not(values.category.label in $CategoryExclusion)
]
Using an exclusion list rather than a hardcoded != condition makes it easy to add other problematic categories later without rewriting the filter logic.
Code examples
Code examples will be added here.
Summary
| Property | Value |
|---|---|
| Revit UI name | Detail Items |
category.label |
OST_DetailComponents |
category.type |
"Model" |
| Why excluded | Carries no model data; always fails parameter checks |
| How to exclude | $not(values.category.label in $CategoryExclusion) |