The CppWAMP APIs essentially match the asio async APIs, no? I decide whether to pass in a handler, a yield context, or asio::use_future, and the appropriate thing happens in all cases.
I'll take notes on anything non-trivial I do during migration. If it's trivial enough, maybe there is no need for such a guide after all.
The concurrency issues with Autobahn|Cpp only arise with futures, and only if you're using the experimental boost::future::then for futures derived from boost::promise. This is the way the Autobahn|Cpp examples use the futures, and it doesn't work if you care about thread-safety.
Unfortunately non-thenable futures are pretty sad, since the only thing you can really do is to block on them, which defeats the point a bit. There's nothing wrong with having futures for completeness to mirror asio's API, but you can see even from the asio examples that they're a lot more painful to work with than either callbacks or coroutines.