Observed
First non-Apple ecosystem test, 2026-08-06. Alexa paired successfully — fabric #3, CASE sessions established, accessories discovered and shown. But the devices did not respond to commands, and Alexa reported them as not responding.
The bridge node received and accepted Alexa's invokes:
12:53:57 indigo-matter-bridge.aggregator.indigo-287885105.onOff.on (Study Lamp)
12:54:09 indigo-matter-bridge.aggregator.indigo-287885105.onOff.off
12:54:42 indigo-matter-bridge.aggregator.indigo-1736047509.onOff.on (Study Pendant)
12:54:47 indigo-matter-bridge.aggregator.indigo-1736047509.onOff.off
… each answered Invoke (final) » commands: 1
The plugin was attached throughout (Client attached (plugin 2026.8.4) at 11:44:45Z, invokes from 11:53Z). Nothing appeared in the Indigo event log for any of them — no dispatch, no sent "Study Lamp" on from the owning plugin, no error.
Suspected mechanism — NOT yet proven
Command events are emitted from attribute-change listeners (watchCommands → onOff$Changed etc.), not from invocation handlers. If an ecosystem commands a state the endpoint already holds, matter.js accepts the invoke, the attribute does not change, no $Changed fires, and nothing is emitted — so the real Indigo device is never told.
That would make control silently dependent on the endpoint's belief matching reality. Any drift (a dropped state push, a physical switch, a plugin restart between pushes) leaves commands in that direction dead until something else moves the attribute.
This is not Alexa-specific in principle — Apple would behave the same way under the same conditions. Apple control has worked in testing, which is consistent with its endpoint state simply being accurate at the time.
To investigate before fixing
- Confirm the mechanism: set an endpoint's
onOff true via set_state, then invoke onOff.on remotely, and check whether any command event is emitted.
- If confirmed, emit from the invocation as well as the attribute change — an ecosystem asking for a state is an intent to be forwarded, regardless of what the endpoint currently believes. Mind the echo guard: a plugin-originated
set_state must still not round-trip.
- Check every role, not just onOff —
setLevel, setColor, lock/unlock and covering commands ride the same watcher design. Note doorLock and windowCovering are already invocation-driven (E4 made them emit-only), so they may be unaffected — which would be evidence for the mechanism.
- Re-test with Alexa afterwards; the fabric was removed (
removeFabric fabricIndex: 3) when the user deleted the pairing.
Also worth noting
Alexa pairing itself worked — three fabrics live simultaneously (two Apple, one Alexa), which is the multi-admin proof ADR-0007 asks for (#139), independent of this control bug.
Observed
First non-Apple ecosystem test, 2026-08-06. Alexa paired successfully — fabric #3, CASE sessions established, accessories discovered and shown. But the devices did not respond to commands, and Alexa reported them as not responding.
The bridge node received and accepted Alexa's invokes:
The plugin was attached throughout (
Client attached (plugin 2026.8.4)at 11:44:45Z, invokes from 11:53Z). Nothing appeared in the Indigo event log for any of them — no dispatch, nosent "Study Lamp" onfrom the owning plugin, no error.Suspected mechanism — NOT yet proven
Command events are emitted from attribute-change listeners (
watchCommands→onOff$Changedetc.), not from invocation handlers. If an ecosystem commands a state the endpoint already holds, matter.js accepts the invoke, the attribute does not change, no$Changedfires, and nothing is emitted — so the real Indigo device is never told.That would make control silently dependent on the endpoint's belief matching reality. Any drift (a dropped state push, a physical switch, a plugin restart between pushes) leaves commands in that direction dead until something else moves the attribute.
This is not Alexa-specific in principle — Apple would behave the same way under the same conditions. Apple control has worked in testing, which is consistent with its endpoint state simply being accurate at the time.
To investigate before fixing
onOfftrue viaset_state, then invokeonOff.onremotely, and check whether any command event is emitted.set_statemust still not round-trip.setLevel,setColor, lock/unlock and covering commands ride the same watcher design. NotedoorLockandwindowCoveringare already invocation-driven (E4 made them emit-only), so they may be unaffected — which would be evidence for the mechanism.removeFabric fabricIndex: 3) when the user deleted the pairing.Also worth noting
Alexa pairing itself worked — three fabrics live simultaneously (two Apple, one Alexa), which is the multi-admin proof ADR-0007 asks for (#139), independent of this control bug.