I have bundled a sample json operation history and a sample .csv with relevant data in to a zip file, attached here.
OpenRefine-ApplyOpHist-BugReport-2025-10-16.zip (39.5 KB)
Thanks for the data to easily reproduce the problem.
The json operation works fine in OpenRefine 3.8, but runs into the validation problem in 3.9 due to missing columns in the csv data.
Actually, when I run this pair of files with OpenRefine 3.8, I get dozens of errors, but they are silently swallowed (actually, they're dumped on the console, but unless you start the Refine server from the command line, you'll never see them). Note that this isn't limited to missing columns, (almost?) NO errors are being reported to the user. While this may be fine for your use case (and Julia's) where you are confident in your post-export QC measures, for the vast majority of users' use cases, silently ignoring errors is going to be a real problem.
We can probably change these errors to warnings without too much difficulty, but I'll flag that, as we continue to improve error reporting, you'll likely to continue to uncover hidden problems like this one which have been masked by bugs in the past.
I'm curious where this Undo History was extracted from. Was there originally an uber spreadsheet that contained all these columns before subsets were created?
When the 3.10 beta is available (or now using one of the snapshot builds), I'd encourage you to check out the column mapping functionality, because I suspect it was built with a different world view than the one you operate under (again, I wasn't involved).
Lastly, I'll say that this probably should have received a prominent mention in the 3.9 release notes. I'll update them to highlight the compatibility issue.
Tom