ABI-stable plugin interface.
Both the host and the plugin depend on this crate. Everything that
crosses the dlopen boundary is defined here and uses abi_stable
types (RVec, RString, RResult, RBox, sabi-trait objects).
RuntimeData itself is not in this surface — instead it is
serialized to msgpack bytes (RVec<u8> via rmp-serde::to_vec_named)
at the boundary. That keeps remotemedia-core out of the FFI
contract entirely, so a plugin built against a different rustc /
feature set can still load.
For the full contract — wire format, versioning policy, plugin
author rules, change history — see
docs/LOADABLE_NODE_ABI.md.