I definitely think that being able to manually control what gets rebuild would be useful. Another very common example for me is that I change some #[test] fn, which requires rebuilding a ludicrous amount of stuff. To some extent incr. comp. will help here, but due to the nature of bootstrapping less than you might think – so long as we are still committed to preserving correctness.
I’m not sure that “roles” is the way to think of it. I feel like just having flags you can pass to rustbuild telling it to ignore the fact that things are out of date, or specialized targets that start from a given point regardless of what is out of date, might be good enough. We just have to document them well, and make clear their shortcomings.
This has the advantage that you start out with the safe targets and kind of “opt in” to the more advanced ones.
Still, thinking about “roles” – or at least common use cases – is a great idea to come up with what those targets are.