Expand description
Mounts plugin-registered routes as axum handlers.
Lives in the web layer (not core) so the DI engine and plugin
lifecycle stay HTTP-agnostic. Reuses boundary::assemble_context —
plugin routes get exactly the same body cap, trace propagation, and
credential extraction as macro routes, from the same code path.