identity
Stable identity string for the layout, used as a recomposition key.
Deliberately NOT a constructor property (P1-10): identity used to default to root.identity() but be stored as ordinary constructor state, so copy(root = changedRoot) silently kept the OLD identity — Kotlin's generated copy() only copies constructor properties as-is, it never re-evaluates a default expression. Both native views key recomposition/rendering on layout.identity, so a stale identity meant the platform view was never rebuilt after the tree changed. Computing it here, in the class body, means it is recomputed on EVERY construction — including every copy() — so it can never go stale.