How to decompose a synchronous media upload flow into an async pipeline without breaking the existing API contract.