Provocação: o transactional outbox realmente resolve o dual write ou só passa o problema pra outro lugar?
No produtor, blz: dado + outbox ficam na mesma transação.
Mas no consumidor o exemplo faz AplicarEfeitoDeNegocioAsync() + gravação da inbox. Isso só é atomicamente seguro se esse "efeito" estiver no mesmo banco/transação. Se ali dentro tiver uma chamada para outra API, pagamento, e-mail, outro broker ou qualquer outra coisa, o dual write nasceu de novo, agora entre esse consumidor e o sistema externo.
Nesse caso, até a afirmação de que "Outbox + Inbox entrega consistência ponta a ponta" merece um asterisco enorme.
No fim, me parece que Outbox não elimina o problema de consistência distribuída, ele transforma uma operação impossível de tornar atômica em uma sequência de operações locais idempotentes na verdade.