I wasn't really sure to call this "coding", because I just did a little more work on the Earley parser, or "worldbuilding" because I revised the poem earlier today.
So. I revised the poem a little. I was just focusing on some meter and scansion issues near the beginning, so I haven't confronted the big issues near the end, where I just kind of gave up on stuff like "sounding good". Not much more to say there, but I did put in some work.
On the Earley parser, I hacked together nullable infinite loop detection in a way that makes sense to me. ("If a rule's RHS doesn't contain any of the symbols that could participate in an infinite loop, then it definitely doesn't participate in an infinite loop, so it can be removed from the set. Repeat this process until the set is empty, or the process reaches a fixed point.") All of this code has no tests, so I'm now going to back-burner it for real, until I... Until I get MOTR into a workable state. So, I guess the next thing I'll work on in terms of coding is either... MOTR again, or something else that I can scribble into a Jupyter lab session.
I'll sleep on that, and call this entry early.