I see here that it's iterating lever each column in the root node and "processing" it, but I have no idea what that really means. It appears `ProcessColumnName` that is mutating `root`, but the name `ProcessColumnName` doesn't make that clear.

I would suggest writing some tests for `ProcessColumnName` that describe what it does and then rename it appropriately. Also, I'd usually prefer a specific `Task` for this purpose, but I don't know if using a task for recursion is a good fit.