The crash is to be expected, this is from the docs of assumeIsolated:
If the current context is not running on the actor’s serial executor, or if the actor is a reference to a remote actor, this method will crash with a fatal error (similar to
preconditionIsolated()).
MySubject.send is a synchronous non-isolated function, meaning it will inherit the isolation of the caller. Context.send is an asynchronous non-isolated function, meaning it will run on the global executor.
makeSubject's isolation is not really relevant in this case. Just the creation of MySubject will be MainActor-isolated. After that it will switch back to the global executor and run MySubject.send on there.
You'd need to annotate Context.send with @MainActor. You will then also be able to drop the await in front of mySubject().send().