Home app shows identical bridged Matter compound devices (Thermostat + Fan) as different tiles — how is the primary service chosen?

Hi!

We build a Matter bridge that exposes air conditioners as compound devices, following Device Library §2.5.6 "Separate Endpoints":

Aggregator → Bridged Node (no application device type) → Thermostat (0x0301) + Fan (0x002B)

In the Home app some of these accessories appear as a Thermostat tile and others as a Fan tile, even when the devices are identical. A matter.js test bridge with 5 identical devices gave 1 Thermostat / 4 Fan tiles on Matter 1.5.1 and the same on 1.6.0. Removing and re-adding our ESP32 bridge, with no firmware change, swapped which device was shown as a Fan.

Putting the Thermostat device type on the Bridged Node endpoint itself, with the Fan as its child, gave 3 Thermostat / 2 Fan, so that is not stable either (and Device Library 1.5 §2.5.6 does not allow it).

The home hub log (homed, hmmtr.protocolmap) shows "Multiple primary service candidates found" for each of these devices; the chosen service is redacted.

Questions:

  1. How does Home choose the primary service for a bridged compound device?
  2. Is there a supported way for the accessory to indicate which endpoint is primary (order in PartsList, TagList, something else)?
  3. Is a single endpoint with Thermostat plus an extra Fan Control server cluster the recommended layout for Apple Home instead?

Filed as FB25263651.

Environment: iPhone with iOS 27.0.1, Apple TV home hub with tvOS 27.0.