And by bugs, I don't mean the type found in Golden Spider.
I mean a programming error, or perhaps more accurately a feature.
The Undo button worked except that when moving a card from the Waste to the Stock, the card was placed on the Waste face up, and remained face up.
I'm calling this a feature rather than a bug as the coding worked as intended. It was just not what was required.
This was suprisingly difficult to fix.
I've been coding for years and never normally write code in this fashion. It was partly an experiment, and partly because I didn't think about the initial design in sufficient detail.
I also could not (and can not) be bothered to refactor it in a better manner as I went along.
I have another coding project planned (Mahjong.day). I will plan and write this in a more traditional manner.
Let's return to SolitaireOnline.Org.
Although as an (ex)professional coder, I am slightly appalled by a 3000 line file, it isn't (or wasn't) entirely unknown in the games programming world.
Good editors do to a point obviate the need for multiple smaller files (within reason).
While I'm not holding the code in solitairemain.js up as a shining example of good coding practice, some of the ideas within it are sound.
I will implement these more successfully in Mahjong.day.