updatePowerChannelLabel
Sets a single power-channel label (0-based channelIndex) atomically: the read-modify-write runs inside a transaction that reads the current labels from the DB, so concurrent edits to different channels can't clobber each other via a stale read. Earlier channels keep their slot (blank padding); trailing blanks are dropped.
Reads via getNodeByNum rather than a scalar SELECT power_channel_labels: Room reads a List<String> query result as one String per row (returning the raw JSON text), not as the column's converted List<String>.