Gate finding (PL1 r1 efficiency, Medium regression): after a re-arm, the
next watcher tick ran the plugin's import + register() inside the sync
_create_adapter on the event loop, and run_with_load_deadline joins for up to
plugins.load_timeout_seconds, which stalls inbound messages, heartbeats and
the control socket.
The watcher now materializes the registry entry with platform_registry.get
in the gateway executor first, using _run_in_executor_with_context so the
profile ContextVars are preserved, and _create_adapter then finds the plugin
already resolved. The rest of _create_adapter stays on the loop, as it was
on main. Builtin adapter constructors ran there before this stack and may be
loop-affine, so moving the whole call into the executor would change
unrelated behaviour.