Thanks @shieman for the heads-up. Looks like Claude made an assumption that was incorrect. It didn’t affect how it was working because is_muted always fell back to the local state tracker. As long as I didn’t manually change any properties via the Zynthian UI itself it would always have a consistent understanding of the loop state.
I’m in the process of debugging this now. That said, through my own personal testing I’ve found this to be robust, so perhaps local state tracking is sufficient. I’ll post an updated version when I have the new code working.