Hah! Okay, I was doing several things incorrectly to create the deadlocks in my #OCaml project.
First thing was, as I mentioned yesterday, creating essentially an infinite series of latches that would never clear until the infinite loop ended (whoops).
The second was unsafely mixing Channels from #Domainslib and #Eio. These, it turns out, don't play nicely together.
The final issue was a little more subtle and not a deadlock _per se_.