Config-driven pub/sub selection for the cable server, read from the cable
section of config/<env>.yml. Mirrors the config modules in
doido-jobs/doido-cache: callers only ever see an Arc<dyn PubSub>.
The live WebSocket cable server: an axum ws upgrade handler that speaks the
ActionCable wire protocol, a ChannelRegistry routing subscriptions to
Channel handlers, a heartbeat ping loop, and a pub/sub bridge so
broadcasts reach subscribed clients.
Build the pub/sub backend selected by the cable section of
config/<env>.yml (in-memory when absent), connecting the database for the
db backend. Pair with cable! to mount the endpoint: