Now it does all the time:
internal fun setPreLaunchCleanup() {
doFirst(CleanAction())
}
This forces the users always perform ./gradlew clean build. The clean task call is required to invalidate the input for generateProto task, which produces the input for launchProtoData. Otherwise, we end up with an empty target directory, which, in turn, breaks the compilation.