Incremental Rebuilds

Using RegisterSourceOutput with SyntaxValueProvider, generators only re-run when relevant syntax changes. On a clean build, all generators run; on subsequent builds, only the generators whose inputs changed run — keeping build times fast even in large solutions.