renames

abstract val renames: MapProperty<String, String>

Declared serial-name moves, old → new, so a rename is diffed as a moved contract (its contents compared) rather than a spurious remove + add.