On the 10th of September I enabled a change which allowed you to call
coroutine.yield in any sort of context, essentially making a user-owned thread and Roblox thread synonymous.
coroutine.yield is not at fault.
The problem is related to continuations, an internal mechanism used to pass information between a thread and the Roblox scheduler. In this specific case, the continuation is used to resume all threads requiring the module.
coroutine.resume does not support continuations as it exists outside of the Roblox scheduler. Therefore, the script which called
require will never resume.
You can see this in action with the following example (note how
coroutine.yield is not called).
If the thread is resumed by the Roblox scheduler, continuations will run.
I have every intention of fixing this at some point in the future, however it’s not as trivial as it may seem. By rerouting
coroutine.resume to use the same resume mechanism as other threads, there is a significant performance impact which I would like to avoid.