In the ruby space, scientist touches on some of the ideas you are talking about. While its not property based, GitHub has been able to use it to pull off a few refactors.
Nice use of git worktree!
Oh, that’s a good one for the toolbox. I had a rather big refactoring for the product I’m working on and this could definitely had helped. Next time :-D
Another possible remedy here is to make adding and updating tests easy. Update part is important: if you do have a boatload of tests, and you do want to update < 9 to < 10 because 9 is wrong, you don’t want to update each test manually. For this, a nice technique is snapshot/expect testing.
Here’s a couple of posts describing this approach:
I personally use this library of mine a lot when testing rust-analyzer.