Registration confirmation emails from CampaignEvents arrive with a primary link like:
https://example.org/Some_Event?markasread=
The parameter is empty rather than carrying an event ID.
EchoEventPresentationModel::getPrimaryLinkWithMarkAsRead() builds it from [ $this->event->getId() ]. For an event that was never written to the database getId() returns false, so implode( '|', [ false ] ) gives an empty string.
That happens on the instant email path. Notifier::notifyWithEmail() calls $event->acquireId() in the digest branch, but not before generateEmail() in the instant branch. If the notification type has no web delivery either, Notification::insert() never runs, so nothing else assigns an ID — and with $wgEchoUseJobQueue = false there's no enqueueEvent() to persist it.
It's harmless in practice, the link still resolves and the empty parameter is ignored, but it's visible in plain text emails and it's a slightly malformed URL. For an email-only notification there's no notification row to mark as read anyway, so arguably the parameter shouldn't be added at all in that case.
Seen with CampaignEvents' registration confirmation on MediaWiki 1.46.