I pull the project apart and put it back together. This time it seems to be stable.
I licked my wounds and got over the fact that I would have to pull apart the project to try again with a new board. Will it blow up this board, too?
I pulled the project apart, and desoldered the headers of a new board. But before I started with the new board, I still couldn't help myself thinking about what was it that went wrong with the prior board. I don't want to repeat the failure.
My old board was now cleaned up and naked, so I plugged it in one more time. It was still non-responsive, but I believed that to be due to a bad flash, and should be recoverable. The tools I was weren't able to reflash it, but I knew that the ESP8266 itself required some magic holding of gpio lines during reset to invoke the bootloader. At length, I was able to enter the bootloader by diddling these lines and the nRST. Then the flashing tool I was using was able to write an image successfully.
After flashing, I connected to it, and got the expected prompt, so that's an improvement. But not trusting the board, I let it sit for a while. We'll see if I get the random garbage that I experienced before.
After about an hour of sitting, I did not see the garbage. Hmm. Well, maybe because the radio is off, it hasn't heated up the chip enough. I wrote^H^H^H^H^H cut-and-pasted a little code to set up the required WiFi parameters, and set it to auto-connect, and wrote them out. These are in non-volatile memory, so it should happen irrespective of reboots. I let it sit a few hours longer, demonstrably on the network by it's being able to be ping'ed, and still it seemed stable. Hmm....
Well, I don't know what went wrong before, but I am not heartened by the prospect that the board cannot be used in this combination without more 'stuff', and am skeptical of that notion, anyway. So I did a bad thing, and decided to hook the old board back up to the clock. /Not/ use the fresh, new board. I.e., asking for further trouble.
Before I hooked back up the old board, I did some cogitation on the previous problems. I didn't seem to do hard damage to the board, but it still could be flaky. It could simply be that the firmware itself is fundamentally flaky, and that all the hardware fixin' in the world will not be enough. This does happen (I had a recent 2 mo battle with Google on a similar line), but I doubted it in this case because the NodeMCU project has been released for quite a while, and it's codebase seems to have have simmered down to a 'maintenance and feature' phase rather than a less mature 'architecture and infrastructure' phase. Still, there could be a recent bug introduced, and my firmware was built off the tip.
I did occur to me that perhaps there could have been coupling of extraneous signal into... something! The way I had mounted the board before, I put the level shifter underneath the NodeMCU, and some extraneous wire wrapped around the side, underneath the PCB antenna. That is radiating out power and the wire could make for a great receiving antenna. Maybe. Also, where I mounted the board is close to the high-voltage line, which is pumped at 300 KHz by the switching regulator. So, maybe.
It did also occur to me that the bypass caps on the power supply might be inadequate to take power of questionable cleanliness.
At any rate, I went ahead and rewired everything, but changed the layout. I moved the board towards the end, away from where the high-voltage goes the the Nixie board. I also pulled the level shifter out from under the NodeMCU board, and stuck it separately on the clock board. I also added a .1 uF bypass cap to the power tap point I was using. While I was at it, I also put a piece of foam tape over the high-voltage pins. I was bored with shocking myself. I somewhat enjoyed the shocks, but I was afraid an unexpected one might cause me to fling the assembly and break it.
I went through a similar step-by-step re-connection of the boards, and connected with the computer. I let it sit for a few hours to see if it started spewing garbage again. It didn't. So I guess I fixed something. In retrospect I regret not being more scientific about it, because I'd really like to know what change fixed it. Oh, well.
So, now the unit seems to be working, and ready for some software!
Coding the application