It looks like 'run' (A) overrides the base reactor's implementation, and (B) doesn't actually run the reactor.

Correct, that is the intention, pulsar is the driver and the PulsarReactor is a proxy to one of pulsar event loops.

it's probably a more serious underlying problem that just happens to be initially visible with your TLS connection.
 
The main issue was the missing implementation of callFromThread and callInThread. I've also switched off signal handling, threads and scheduling, all handled by pulsar.

https://github.com/quantmind/pulsar/blob/handshake/pulsar/lib/tx.py

I'm now getting mailboxes via a websocket. Looking promising.

https://github.com/quantmind/pulsar/blob/handshake/examples/webmail/manage.py

Luca