WARN Training sample not found

That one is harmless. During a classifier training run, samples reference a message by its content hash, and if the message was deleted, moved or expired between being queued for training and the training pass actually running, the blob is gone and Stalwart logs “training sample not found” and skips it.

It’s a documented warn-level event, not an error. The accountId is the mailbox the sample came from and the blobId is the missing message.

Seeing it on a couple of accounts with distinct blobIds is the normal shape: auto-learn enqueued some messages that were then removed. Nothing breaks; the trainer just skips them. If the volume bothers you, review the auto-learn settings so it isn’t learning from messages that get deleted right after.