Most of the time the right answer is that you’re just not receiving email that rspamd scores between 5 and my reject threshold. Note that if the email doesn’t meet the threshold you set, you won’t know what rspamd scored it. All of the other spam headers are related to different layers, not relevant to that score. Rspamd will only write headers describing its scoring if the email meets your threshold.
Frankly it’s not that unusual with our setup. The last email in my spam folder was April 26th, and before that March 29th.
If I left everything alone, most of the things you never received at all might have been in your spam folder, and some of the things in your inbox might have instead landed in your spam folder. That’s really the goal I’m chasing after, that you don’t get spam or false positives. I’m constantly auditing logs and making adjustments to that end. Obviously I’m going to miss a lot of swings, because spammers are humans actively working against me. And if they do well, which is their intention, it’ll land in your inbox.
Try setting your score to 1 and set it to inbox, then start looking at headers of emails to see what rspamd is leaving for you. It still won’t be there for every email, they don’t all score even a 1, but a lot more will than a 5.
There is also a size limit to scanning, emails of a certain size and above will be skipped so as to not escalate the memory usage of rspamd. This protects from a specific DDOS attack that could otherwise bring down a server. That will surely account for some that are skipped. A few more might be skipped simply because I update the filters a few times a day, and an email coming in during that 2-3 second period may skip so as to not be delayed.