Also, maybe this is too obvious to mention, but any Git repo (not that it even has to be Git) can be used this way, just by taking a row of commits which starts and ends with all the tests passing, then incrementally compiling from the early commit to the last one.
It’s as fine-grained as the commits are, but so what, the same principle applies.