// If the subtree is ForceExecution, it means no AST has changed.

I don't think this is true.

We shouldn't expect the developers to only set this property if the AST hasn't changed. We should allow the user to set ForceReExecute even if the AST has been modified