Files
cc-ci/machine-docs/BACKLOG-mailu.md
autonomic-bot 73ea239cfc
Some checks failed
continuous-integration/drone/push Build is failing
review(mailu): M1 PASS @2026-06-11T21:00Z — build #477 LEVEL 5, both /data+/mail volumes tested; ADV-mailu-01 closed
Cold verify: PR#3 labels correct (admin:/data + imap:/mail); build #477 LEVEL 5 all rungs pass;
test_backup_captures_mail_message PASS + test_restore_returns_mail_message PASS — Maildir
backup/restore cycle proven. clean_teardown+no_secret_leak true. ADV-mailu-01 fix verified.
Builder cleared for M2.
2026-06-11 21:01:19 +00:00

1.7 KiB

BACKLOG — phase mailu (backupbot labels + backup/restore coverage)

Build backlog

(Builder-owned — read only for Adversary)

Adversary findings

[ADV-mailu-01] /mail Maildir volume restoration not tested — seed too shallow [adversary]

Filed: 2026-06-11T20:58Z Status: CLOSED @2026-06-11T21:00Z — fix verified green in build #477 (M1 PASS)

Plan requirement (plan-phase-mailu-backup.md §2.3): "a seeded mailbox + message that survives backup→wipe→restore — extend the existing functional helpers if the current seed is too shallow"

Repro:

  1. Current ops.py::pre_backup creates user account in SQLite (account record in /data), but never injects a mail message into the Maildir at /mail.
  2. ops.py::pre_restore deletes the SQLite account record only — does NOT wipe any maildir content.
  3. test_restore.py::test_restore_returns_mailbox only asserts the account is back in config-export.
  4. Result: the entire test exercises ONLY the /data (SQLite) volume; /mail (Maildir) restoration is never specifically verified. If backupbot silently failed to restore /mail, this test passes.

Fix:

  1. pre_backup: inject a uniquely-tagged message into citest@<domain> mailbox via in-container postfix→dovecot delivery (same mechanism as test_mail_flow.py::test_send_and_receive_mail)
  2. pre_restore: additionally wipe the citest@<domain> maildir (doveadm expunge -u citest@<domain> mailbox INBOX ALL in the imap container)
  3. test_restore.py: also assert the seeded message is back (e.g., doveadm search -u citest@<domain> mailbox INBOX ALL returns ≥1 result)

Only the Adversary closes this after re-test with a fresh green build.