What problem does it solve? Legacy Modifier.composed factories allocate a fresh composable scope on every recomposition, cannot be skipped, and force parent composables to recompose on every frame. This Skill guides authoring new custom modifiers as Modifier.Node and migrating existing composed factories to the persistent-node model with ModifierNodeElement diffing. ## Core Features & Use Cases - Migration workflow: Identifies every Modifier.composed factory in a module and converts it into the three-piece pattern of public extension, data class ModifierNodeElement, and Modifier.Node subclass. - Specialized node interfaces: Maps legacy behavior to DrawModifierNode, LayoutModifierNode, SemanticsModifierNode, PointerInputModifierNode, CompositionLocalConsumerModifierNode, LayoutAwareModifierNode, and DelegatingNode compositions. - Lifecycle and invalidation rules: Covers onAttach, onDetach, onReset, the built-in coroutineScope, and manual invalidation via invalidateDraw, invalidateMeasurement, and invalidatePlacement. - Use Case: A code review flags a Modifier.composed factory wrapping drawBehind and LaunchedEffect. Use this Skill to rewrite it as a data class Element plus a DrawModifierNode that launches its animation in the node's coroutineScope, eliminating per-frame parent recompositions. ## Quick Start Ask the assistant to migrate the Modifier.composed factories in your Compose module to Modifier.Node and verify none remain.