It looks like Pyodide has some level of incompatibility with Trio, which will go away, or I can roll a weird messed-up shim library to paper over it, and either way, I'll see what's broken next. I want to get Trio working under Pyodide in the event that I try to port to it, because I went all in on async, and I'm fairly sure Trio's guest mode can act as an adaptor between async and Pyodide's promises API. The other possibility is trying to build some sort of minimal wrapper to do the translation.
Anyway, what I actually did today was work on improving the punq fork coverage. It's not fully covered, but it's much better. I'm just now adding a test for one bit of functionality that I'm not sure it's implemented. Once I've got that passing, I'm honestly tempted to just do the rewrite to get rid of the ast module. And the test passed. Slightly freaky, given that I don't remember what I did to make it pass, but I'll take it.
Anyway, the rewrite is desirable to me because it should actually make it more obvious what's happening, because my first plan should be expressible in terms of documented runtime behavior, rather than solely in terms of syntax properties, so it should also be more stable, and more obvious if I miss something.
Okay, that's enough spacing out before hitting "publish".