But say you're a journalist who wants to protect their source (on your end) e.g. a total stranger who is going to tell you some secrets then no need to even have a contact list. No need for a history. You just use the ricochet-id once. Maybe in a short-lived VM, Qubes or Tails whatever ... And tear down the whole system anyway once I'm done with the chat.
So in the first case you can simply avoid spam with boostrapping a safe rendezvous point, the second case would never see any spam.
The entire early Internet worked this way and it was lovely.
If you're a journalist who wants to receive a message from a total stranger, then you'd have to accept a contact request from a that stranger. Spammers can then deny the journalist access to anonymous requests by spamming them with anonymous requests.
The journalist could try to keep their contact ID a secret, but then anonymous sources would have no idea how to contact the journalist.
as mentioned you can use other anonymous channels before you switch to another one such as ricochet. the point isn't to establish authenticity before moving to anonymity but to add a layer of protection that allows you to decide on the rendezvous point and further increase plausible deniability
But people can spam your email account as well. When this became a problem, spam filters were developed. There's no reason the same thing couldn't happen in Ricochet if spam became a problem.
Ricochet's problem isn't that too many spammers are using it. It's that almost nobody at all is using it.
I'm not saying that spam is a problem today, but that the design goals of Richochet don't allow it to deal with the spam problem for users who actually want anonymous messaging.
That's where spam forces us to choose between blacklisting people and whitelisting (which breaks anonymity).