Currently, when I am updating our build logic, I often come into the problem when incremental tasks would not run because the input timestamps are older than the outputs. The workaround is to use --rerun-tasks, but even if I mention it in an email to my colleagues, there are always people that do not pay attention and spend hours on chasin ghosts.
It would be nice if Gradle would detect the change in the build script or in task implementation and purge the caches related to that task or even all caches.
In addition, I noticed that if I manually edit an output of a task, the output is still considered up to date based on timestamp. That may be desirable in certain cases, but often I would rather regenerate. Ideally that would be an option of the task, defaulting to regeneration on hash mismatch (the more conservative option).