diff --git a/indigo-matter.indigoPlugin/Contents/Info.plist b/indigo-matter.indigoPlugin/Contents/Info.plist
index f21c051..4f41ec8 100644
--- a/indigo-matter.indigoPlugin/Contents/Info.plist
+++ b/indigo-matter.indigoPlugin/Contents/Info.plist
@@ -20,7 +20,7 @@
IwsApiVersion
1.0.0
PluginVersion
- 2026.4.1
+ 2026.4.2
ServerApiVersion
3.6
diff --git a/tests/test_device_zoo.py b/tests/test_device_zoo.py
index 6ef000f..1dedceb 100644
--- a/tests/test_device_zoo.py
+++ b/tests/test_device_zoo.py
@@ -13,7 +13,10 @@
3. every spec's device_type_id exists in Devices.xml;
4. every initial state is XML-declared or an Indigo built-in;
5. every sensor-type spec carries explicit SupportsOnState /
- SupportsSensorValue with exactly one True (the issue #56 class).
+ SupportsSensorValue with exactly one True (the issue #56 class);
+ 6. no device type's block redeclares a state key that a True
+ Supports* prop already derives natively (the PR #73 class — Indigo
+ rejects plugin-declared state keys that duplicate a native one).
"""
from __future__ import annotations
@@ -54,6 +57,15 @@
"matterThermostat", "matterWindowCovering", "matterLock", "matterValve",
}
+# Supports* creation prop → the native Indigo state key it derives (PR #73:
+# Indigo rejects a plugin-declared that duplicates one of these).
+NATIVE_STATE_KEY_BY_PROP = {
+ "SupportsSensorValue": "sensorValue",
+ "SupportsOnState": "onOffState",
+ "SupportsPowerMeter": "curEnergyLevel",
+ "SupportsEnergyMeter": "accumEnergyTotal",
+}
+
def _raw(node_id, eps):
@@ -275,6 +287,20 @@ def test_zoo_sensor_specs_carry_explicit_display_props(name):
)
+@pytest.mark.parametrize("name", ZOO)
+def test_zoo_native_props_not_redeclared_in_devices_xml(name):
+ raw, _ = ZOO[name]
+ for specs in _specs_by_endpoint(raw).values():
+ for spec in specs:
+ declared = XML_STATES_BY_ID.get(spec.device_type_id, set())
+ for prop, key in NATIVE_STATE_KEY_BY_PROP.items():
+ if spec.props.get(prop) is True:
+ assert key not in declared, (
+ f"{name}: {spec.device_type_id} declares native state "
+ f"'{key}' in Devices.xml even though {prop} is True"
+ )
+
+
def test_every_registered_handler_type_exists_in_devices_xml():
# Registry-wide, zoo-independent: a handler pointing at a typo'd or
# removed Devices.xml id would create devices that Indigo rejects.