Method of MainActor-isolated value not called on the main actor

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().