Retention category assigned to each uppercase STEP type.
Whether each uppercase STEP type is known to the schema registry.
Distinct IFCREL* uppercase types seen.
Distinct IFCREL* uppercase types seen but not indexed as an edge.
Whether each uppercase STEP type's inheritance chain includes
IfcRoot. Drives the expectedSkippedClasses /
unexpectedSkippedClasses split — see ClassCensusEntry.isRootDescendant.
Records scanned, keyed by uppercase STEP type.
Uppercase STEP types the categoriser explicitly intends to retain even though they are not
IfcProduct/IfcRootdescendants — e.g.columnar-entity-preparation.ts'sRELEVANT_NON_PRODUCT_HELPERS(IFCMATERIAL,IFCSIUNIT,IFCCLASSIFICATION, …). None of these reachIfcRootin the schema's inheritance chain, so onisRootDescendantalone a regression that dropped one of them from that set would computeisRootDescendant: falseand land inexpectedSkippedClassesatinfoseverity — indistinguishable from routine geometry/placement noise. Membership here means "the code intends to retain this class regardless of root-descendancy", so a skip isunexpectedSkippedClassesregardless of that check. Passing the set the categoriser already maintains (rather than a second, separately-hand-maintained list here) keeps the two in sync by construction.