start method
Creates a new session named name with config. Completes when the
process is spawned and its RuntimeEvent.sessionStarted has been emitted.
Throws SessionAlreadyExists if a live session already holds name.
Implementation
@override
Future<void> start(String name, RuntimeConfig config) async {
started.add((name: name, config: config));
if (startGate != null) await startGate!.future;
final t = throwOnStart;
if (t != null) {
throwOnStart = null;
throw t;
}
// The spawn LANDED — only now does the transport hold the session, and the
// new incarnation clears any stale prior terminal (the terminalOf release
// contract).
_terminals.remove(name);
_live.add(name);
}