Pset_RoofCommon, Pset_RampCommon and Pset_StairCommon each declared their
LoadBearing IfcSimplePropertyTemplate with 11 attributes instead of 12 -
the `$` placeholder for OwnerHistory was dropped in 822107a, shifting
every following attribute by one:
1 OwnerHistory 'LoadBearing' <- should be $
2 Name 'Indicates whether the object is intended to carry...'
4 TemplateType 'IfcBoolean' <- not a valid P_* enum
The property therefore surfaced with its description as a name and no
valid template type, so it never showed up in the property set UI.
Restore the missing OwnerHistory placeholder, and add regression tests
covering both the three affected psets and the general well-formedness of
all bundled Pset_*.ifc property templates.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
LoadBearing was missing from Pset_RoofCommon (and Pset_RampCommon / Pset_StairCommon) in the property set UI, even though the IFC4 documentation defines it: https://standards.buildingsmart.org/IFC/RELEASE/IFC4/ADD2_TC1/HTML/schema/ifcsharedbldgelements/pset/pset_roofcommon.htm
Root cause
The property is declared in Pset_IFC4_ADD2.ifc, but the entity was malformed. 822107a ("Patch Ifc4 psets that missing IfcBoolean type in LoadBearing props #5708") hand-edited these lines and accidentally dropped the $ placeholder for OwnerHistory, leaving 11 attributes instead of 12. Every following attribute shifted by one:
So the property surfaced with its description as the name and no valid template type, which is why it never appeared. Reading attribute 11 (AccessState) raises RuntimeError outright.
Affected entities: #3983 (Pset_RoofCommon), #3808 (Pset_RampCommon), #4429 (Pset_StairCommon). The fourth edit in that commit (#22147) was done correctly. Pset_IFC2X3.ifc and Pset_IFC4X3.ifc are unaffected.
Fix
Restored the missing $ on the three lines. Parsing now yields:
Pset_RampCommon [('LoadBearing', 'P_SINGLEVALUE', 'IfcBoolean')] Pset_RoofCommon [('LoadBearing', 'P_SINGLEVALUE', 'IfcBoolean')] Pset_StairCommon [('LoadBearing', 'P_SINGLEVALUE', 'IfcBoolean')]Tests
Added to test/util/test_pset.py:
I also scanned all three template files for any other attribute-count mismatches in IfcSimplePropertyTemplate / IfcPropertySetTemplate / IfcComplexPropertyTemplate — these three were the only ones.
Full test/util/test_pset.py suite: 22 passed.
Note: separately, ifc4_properties.json has "LoadBearing": {} under Pset_RoofCommon (empty description). That file is auto-generated by the doc scraper in util/doc.py and only affects tooltip text, so I left it rather than hand-editing generated output.
🤖 Generated with Claude Code