So this supports TracedMessage and DeadLetter(TracedMessage) but not TracedMessage(DeadLetter) or TracedMessage(DeadLetter(TracedMessage)).

Note that TracedMessage(DeadLetter(TracedMessage)) is not completely far-fetched. There are places where envelope.message is sent to dead letters, and we get DeadLetter(TracedMessage). If that's sent to an actor or published to the event stream and sent to a listening actor, we can have TracedMessage(DeadLetter(TracedMessage)). So the interaction with other message wrappers is the one to watch out for the most, I think.