diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ids
new file mode 100644
index 0000000..1b2a7d5
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ids
@@ -0,0 +1,33 @@
+
+
+
+ A one sided restriction on a bounded property requires the matching bound 2/3
+ Generated via code automation in the Ids Repository on github.
+
+
+
+
+
+
+ IFCWALL
+
+
+
+
+
+
+ Foo_Bar
+
+
+ Foo
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ifc
new file mode 100644
index 0000000..2349165
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ifc
@@ -0,0 +1,19 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0','');
+FILE_SCHEMA(('IFC4'));
+ENDSEC;
+DATA;
+#1=IFCPROJECT('1FmBKp01LBiACpwVaAschw',$,$,$,$,$,$,$,#6);
+#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.);
+#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.);
+#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
+#6=IFCUNITASSIGNMENT((#5,#4,#2,#3));
+#7=IFCWALL('1hllvgXn57QwBEuxoC9LPl',$,$,$,$,$,$,$,$);
+#8=IFCPROPERTYSET('2PwdJaXF581fbt6kTURaVH',$,'Foo_Bar',$,(#10));
+#9=IFCRELDEFINESBYPROPERTIES('3o8fYQECLFrx$lRlXPKtoD',$,$,$,(#7),#8);
+#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(40000.),$,$,$);
+ENDSEC;
+END-ISO-10303-21;
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ids
new file mode 100644
index 0000000..2d7a488
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ids
@@ -0,0 +1,33 @@
+
+
+
+ A one sided restriction on a bounded property requires the matching bound 3/3
+ Generated via code automation in the Ids Repository on github.
+
+
+
+
+
+
+ IFCWALL
+
+
+
+
+
+
+ Foo_Bar
+
+
+ Foo
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ifc
new file mode 100644
index 0000000..f6a609c
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ifc
@@ -0,0 +1,19 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0','');
+FILE_SCHEMA(('IFC4'));
+ENDSEC;
+DATA;
+#1=IFCPROJECT('3O0sv4DyTAAB$5skbLZ$xY',$,$,$,$,$,$,$,#6);
+#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.);
+#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.);
+#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
+#6=IFCUNITASSIGNMENT((#5,#4,#2,#3));
+#7=IFCWALL('0E9xCMduPANAiCLhBW3Lnp',$,$,$,$,$,$,$,$);
+#8=IFCPROPERTYSET('3YsK9JUPb7mflgt_hgZmde',$,'Foo_Bar',$,(#10));
+#9=IFCRELDEFINESBYPROPERTIES('2H77sYlnH92PsHk4BbyUXQ',$,$,$,(#7),#8);
+#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,$,$,$,IFCLENGTHMEASURE(25000.));
+ENDSEC;
+END-ISO-10303-21;
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids
new file mode 100644
index 0000000..23c9895
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids
@@ -0,0 +1,34 @@
+
+
+
+ A restriction on a bounded property requires both bounds within range 2/3
+ Generated via code automation in the Ids Repository on github.
+
+
+
+
+
+
+ IFCWALL
+
+
+
+
+
+
+ Foo_Bar
+
+
+ Foo
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ifc
new file mode 100644
index 0000000..c60e3c7
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ifc
@@ -0,0 +1,19 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0','');
+FILE_SCHEMA(('IFC4'));
+ENDSEC;
+DATA;
+#1=IFCPROJECT('1z7Ch67On8teDImg33F4uf',$,$,$,$,$,$,$,#6);
+#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.);
+#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.);
+#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
+#6=IFCUNITASSIGNMENT((#5,#4,#2,#3));
+#7=IFCWALL('0Nl6oJf2r5DhAqAvk9lDzI',$,$,$,$,$,$,$,$);
+#8=IFCPROPERTYSET('035Z2$ojr5Hv04f6le26W9',$,'Foo_Bar',$,(#10));
+#9=IFCRELDEFINESBYPROPERTIES('1LS78BbKj1qu7Rp6_vqATo',$,$,$,(#7),#8);
+#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(30000.),IFCLENGTHMEASURE(20000.),$,$);
+ENDSEC;
+END-ISO-10303-21;
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ids
new file mode 100644
index 0000000..fb54a00
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ids
@@ -0,0 +1,33 @@
+
+
+
+ A one sided restriction on a bounded property requires the matching bound 1/3
+ Generated via code automation in the Ids Repository on github.
+
+
+
+
+
+
+ IFCWALL
+
+
+
+
+
+
+ Foo_Bar
+
+
+ Foo
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ifc
new file mode 100644
index 0000000..3a16163
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ifc
@@ -0,0 +1,19 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0','');
+FILE_SCHEMA(('IFC4'));
+ENDSEC;
+DATA;
+#1=IFCPROJECT('21n1xf2$LE0eQPHILQ4EOB',$,$,$,$,$,$,$,#6);
+#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.);
+#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.);
+#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
+#6=IFCUNITASSIGNMENT((#5,#4,#2,#3));
+#7=IFCWALL('0u6mB2q4H0DQDI$$L1C4zL',$,$,$,$,$,$,$,$);
+#8=IFCPROPERTYSET('16$JOcbxT2kO1NGP6PDoRX',$,'Foo_Bar',$,(#10));
+#9=IFCRELDEFINESBYPROPERTIES('2OvTcy5W5E0Aoph4cLPsGG',$,$,$,(#7),#8);
+#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,$,IFCLENGTHMEASURE(25000.),$,$);
+ENDSEC;
+END-ISO-10303-21;
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids
new file mode 100644
index 0000000..52aac7e
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids
@@ -0,0 +1,34 @@
+
+
+
+ A restriction on a bounded property requires both bounds within range 1/3
+ Generated via code automation in the Ids Repository on github.
+
+
+
+
+
+
+ IFCWALL
+
+
+
+
+
+
+ Foo_Bar
+
+
+ Foo
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ifc
new file mode 100644
index 0000000..79d8c4d
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ifc
@@ -0,0 +1,19 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0','');
+FILE_SCHEMA(('IFC4'));
+ENDSEC;
+DATA;
+#1=IFCPROJECT('3Q_A$GN6j3Cv5CiwXBhwZo',$,$,$,$,$,$,$,#6);
+#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.);
+#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.);
+#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
+#6=IFCUNITASSIGNMENT((#5,#4,#2,#3));
+#7=IFCWALL('30Usig1498rOyRQvqnBfVR',$,$,$,$,$,$,$,$);
+#8=IFCPROPERTYSET('1HGx84yxr60RyH5PdDhPy5',$,'Foo_Bar',$,(#10));
+#9=IFCRELDEFINESBYPROPERTIES('0oWwNmtmv0XRz$6qsSkwCW',$,$,$,(#7),#8);
+#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(35000.),IFCLENGTHMEASURE(25000.),$,$);
+ENDSEC;
+END-ISO-10303-21;
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids
new file mode 100644
index 0000000..a7d3894
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids
@@ -0,0 +1,34 @@
+
+
+
+ A restriction on a bounded property requires both bounds within range 3/3
+ Generated via code automation in the Ids Repository on github.
+
+
+
+
+
+
+ IFCWALL
+
+
+
+
+
+
+ Foo_Bar
+
+
+ Foo
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ifc b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ifc
new file mode 100644
index 0000000..b196989
--- /dev/null
+++ b/Documentation/ImplementersDocumentation/TestCases/property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ifc
@@ -0,0 +1,19 @@
+ISO-10303-21;
+HEADER;
+FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');
+FILE_NAME('','2026-08-05T00:00:00',(),(),'IfcOpenShell v0.8.0','IfcOpenShell v0.8.0','');
+FILE_SCHEMA(('IFC4'));
+ENDSEC;
+DATA;
+#1=IFCPROJECT('19pSBO1vTBNgzebcXi_wcC',$,$,$,$,$,$,$,#6);
+#2=IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
+#3=IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.);
+#4=IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.);
+#5=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
+#6=IFCUNITASSIGNMENT((#5,#4,#2,#3));
+#7=IFCWALL('2W7hvDehr4HgNrABTNhmZF',$,$,$,$,$,$,$,$);
+#8=IFCPROPERTYSET('3DKto$qK15D9xBybBax7WX',$,'Foo_Bar',$,(#10));
+#9=IFCRELDEFINESBYPROPERTIES('2Z1OozacT118eUKavrG1BU',$,$,$,(#7),#8);
+#10=IFCPROPERTYBOUNDEDVALUE('Foo',$,IFCLENGTHMEASURE(40000.),IFCLENGTHMEASURE(30000.),$,$);
+ENDSEC;
+END-ISO-10303-21;
diff --git a/Documentation/ImplementersDocumentation/TestCases/scripts.md b/Documentation/ImplementersDocumentation/TestCases/scripts.md
index 0a0dd2e..c3bad4e 100644
--- a/Documentation/ImplementersDocumentation/TestCases/scripts.md
+++ b/Documentation/ImplementersDocumentation/TestCases/scripts.md
@@ -1953,6 +1953,80 @@ Requirements:
Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,''2''
```
+### A restriction on a bounded property requires both bounds within range 1/3
+
+A restriction facet (minInclusive, maxInclusive, minExclusive, maxExclusive) applied to a
+property checks an IfcPropertyBoundedValue by its LowerBoundValue and UpperBoundValue.
+SetPointValue is not considered, as it does not constrain the range of the property.
+Both bounds must lie within the restriction for the specification to pass.
+
+``` ids property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_1_3.ids
+A restriction on a bounded property requires both bounds within range 1/3
+Entity: ''IFCWALL''
+Requirements:
+Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinExclusive(''20'') MaxInclusive(''40'')
+```
+
+### A restriction on a bounded property requires both bounds within range 2/3
+
+The lower bound sits exactly on the excluded end of the restriction, so it fails.
+
+``` ids property/fail-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_2_3.ids
+A restriction on a bounded property requires both bounds within range 2/3
+Entity: ''IFCWALL''
+Requirements:
+Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinExclusive(''20'') MaxInclusive(''40'')
+```
+
+### A restriction on a bounded property requires both bounds within range 3/3
+
+The upper bound sits exactly on the included end of the restriction, so it passes.
+
+``` ids property/pass-a_restriction_on_a_bounded_property_requires_both_bounds_within_range_3_3.ids
+A restriction on a bounded property requires both bounds within range 3/3
+Entity: ''IFCWALL''
+Requirements:
+Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinExclusive(''20'') MaxInclusive(''40'')
+```
+
+### A one sided restriction on a bounded property requires the matching bound 1/3
+
+When a restriction only constrains one end (here minInclusive), only the corresponding
+bound of the IfcPropertyBoundedValue needs to be present and within range. The unconstrained
+end may be absent.
+
+``` ids property/pass-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_1_3.ids
+A one sided restriction on a bounded property requires the matching bound 1/3
+Entity: ''IFCWALL''
+Requirements:
+Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinInclusive(''20'')
+```
+
+### A one sided restriction on a bounded property requires the matching bound 2/3
+
+The constrained end (LowerBoundValue) is missing, so the specification fails even though an
+UpperBoundValue is present.
+
+``` ids property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_2_3.ids
+A one sided restriction on a bounded property requires the matching bound 2/3
+Entity: ''IFCWALL''
+Requirements:
+Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinInclusive(''20'')
+```
+
+### A one sided restriction on a bounded property requires the matching bound 3/3
+
+Only a SetPointValue is present, with neither a LowerBoundValue nor an UpperBoundValue.
+SetPointValue is excluded from restriction checking, so this fails even though its value
+would otherwise satisfy the restriction.
+
+``` ids property/fail-a_one_sided_restriction_on_a_bounded_property_requires_the_matching_bound_3_3.ids
+A one sided restriction on a bounded property requires the matching bound 3/3
+Entity: ''IFCWALL''
+Requirements:
+Property: ''Foo_Bar'',''Foo'',IFCLENGTHMEASURE,xs:double MinInclusive(''20'')
+```
+
### Any matching value in a list property will pass 1/3
``` ids property/pass-any_matching_value_in_a_list_property_will_pass_1_3.ids