1️⃣ Все свойства val (желательно)
Свойства должны быть только для чтения (val). var допускается, если гарантируется стабильное поведение при изменениях.
2️⃣ Все свойства Stable типов
Все поля должны быть либо примитивами (Int, String, Boolean и т.д.), либо тоже Stable.
Лямбда сама по себе считается Stable типом, но важно что захватывает лямбда в теле и это может приводить к рекомпозиции
3️⃣ Нет reflection и переопределения equals/hashCode
Переопределённые методы могут сделать тип не Stable.
Проще говоря тип считается Stable, если:
👉 Его данные не изменяются неожиданно,
👉 Он не содержит ссылок на нестабильные объекты,
👉 Все его поля либо примитивные, либо Stable-типы.
Подробнее в документации
#compose