What problem does it solve? Kotlin developers often wrap single values in data classes, paying unnecessary allocation costs, or use raw primitives where domain types would prevent mixing up values like UserId and String. This Skill provides decision rules for when @JvmInline value class is the right choice, including its Compose stability benefits. ## Core Features & Use Cases - Decision flow: A table mapping situations (single field with domain meaning, multiple fields, custom equality needs) to the right type declaration. - Compose stability guidance: Explains that value classes wrapping stable types are treated as Stable by the Compose compiler, improving skippability at UI boundaries. - Gotcha coverage: Documents autoboxing in nullable/generic positions, serialization contract changes with kotlinx.serialization, and the lack of copy()/componentN(). - Use Case: While reviewing a pull request, you spot data class UserId(val value: String) and replace it with @JvmInline value class UserId(val value: String) to remove the wrapper allocation while keeping type safety. ## Quick Start Review this Kotlin file and replace any single-field data classes that carry domain meaning with @JvmInline value classes, flagging any cases where autoboxing or serialization would be affected.