The SparkPlan looks like this:
So not all of it was planned (some PlanLater still in there).
This appears to be a longstanding issue.
I traced it to the use of var in TreeNode.
For example in mapChildren:
If args is a Stream then changed will never be set here, ultimately causing the method to return the original plan.