You’re committing recursive calculations – sorta like chasing after your own tail.
sourceRectAtTime() doesn’t calculate transform.scale but since you needed it, you thought it was a good idea to calculate for scale but as you scale down to hit the target, you also scale the source.
So, it’s like shooting at a moving target that will always be behind you. 😀
The trick is to use the Transform Effect to do the scaling.
I did a screengrab of the solution. FWIW, you can drop this into Claude and ask it to use OCR to convert it into text.