Assuming it is not, then does it start from a random (unpredictable) starting point? If it does, then you might want to rethink the process so that it does not.
Otherwise, that means you start from a known starting point and perform known actions the same way every time. This means that you, the script writer, should be able to predict (based on the actions your script takes) exactly which user-added columns should exist at any time. Run the script again, and the same columns should exist again because the script starts in the known conditions and performs the same actions, every time.
If that's the case, just make individual checkpoints for each column that you care about, (existing columns, default columns, user-created columns, etc.) - these checkpoints should be the same every time because your script begins with known conditions and creates the same columns every time.
If your script doesn't work this way, then you might want to think about why it doesn't and also think about how you could make it work this way - if that's impossible, then we can explore more complicated solutions.