- processor.py: raise on an empty mail_message payload (OCS data=null with a
<400 meta) so the task dead-letters instead of indexing a near-empty
placeholder — mirrors the nc_mail_get_message tool guard. (the round-6
approve-gating item)
- server/mail.py: clamp limit once in nc_mail_list_messages and base has_more on
the effective (post-clamp) limit, so a caller passing limit<=0 doesn't get a
misleading count.
- server/mail.py: note in nc_mail_get_message that attachments with id=null are
inline body parts and can't be fetched via nc_mail_get_attachment.
- tests: add the first-time-missing incremental scanner case (enters the grace
period, nothing queued/deleted).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>