Files
cc-ci/STATUS-mailu.md
autonomic-bot 36ece30442
Some checks failed
continuous-integration/drone/push Build is failing
status(mailu): drone build #470 in flight — PR#3 + cc-ci test files all committed
2026-06-11 20:43:18 +00:00

3.1 KiB

STATUS — phase mailu (backupbot labels for mailu recipe)

Phase plan: /srv/cc-ci/cc-ci-plan/plan-phase-mailu-backup.md Builder: autonomic-bot / Claude (Builder loop) Started: 2026-06-11T18:00Z


Current state

Active work: Drone build #470 running — full lifecycle at PR#3 head (edc0201a79d3).

Gate M1: NOT YET CLAIMED Gate M2: NOT YET CLAIMED


DoD tracker (M1)

  • Data-layout research documented (which volumes hold durable state, justification in PR desc)
  • Recipe-mirror PR open with backupbot v2 labels (admin /data + imap /mail)
    • PR#3: recipe-maintainers/mailu#3
    • Branch: add-backupbot-labels from main (3.0.1 → 3.0.2+2024.06.52)
    • Commit: edc0201a79d3 — adds deploy.labels backupbot.backup: "true" + backupbot.backup.path to admin + imap
  • Version label bumped in compose.yml (3.0.1 → 3.0.2+2024.06.52)
  • cc-ci: tests/mailu/ops.py with pre_backup (seed mailbox) + pre_restore (delete mailbox)
  • cc-ci: tests/mailu/test_backup.py asserting mailbox present at backup time
  • cc-ci: tests/mailu/test_restore.py asserting mailbox restored after restore
  • cc-ci: tests/mailu/PARITY.md updated (P4 now covered, not N/A)
  • Full lifecycle green at PR head (L5) including backup/restore rung — via drone !testme
    • IN FLIGHT: drone build #470 (started ~20:42Z)
  • Before/after level recorded (was: L4 intentional skip → now: L5 earned)

DoD tracker (M2)

  • Fresh Adversary cold pass (independent re-trigger at PR head)
  • Levels reconciled
  • DEFERRED entry closed
  • STATUS-mailu.md operator summary
  • REVIEW-mailu.md shows PASS for M1 + M2 (within 24h)

Verification recipe (for Adversary M1 check)

# 1. Verify backupbot v2 labels in compose.yml at PR head (edc0201a79d3)
curl -s "https://git.autonomic.zone/api/v1/repos/recipe-maintainers/mailu/contents/compose.yml?ref=add-backupbot-labels" \
  -u "<bot>:<pass>" | python3 -c "import sys,json,base64; print(base64.b64decode(json.load(sys.stdin)['content']).decode())" \
  | grep -A3 backupbot
# Expected: admin service: backupbot.backup: "true" + backupbot.backup.path: "/data"
#           imap service:  backupbot.backup: "true" + backupbot.backup.path: "/mail"

# 2. Verify version bump
# Expected: coop-cloud.${STACK_NAME}.version=3.0.2+2024.06.52

# 3. Verify drone build #470 level
curl -s "https://drone.ci.commoninternet.net/api/repos/recipe-maintainers/cc-ci/builds/470" \
  -H "Authorization: Bearer <token>" | python3 -c "
import sys,json; b=json.load(sys.stdin)
print('status:', b['status'])
# look for 'level' in logs or build metadata
"

# 4. Verify ops.py deletes user correctly (data really wiped before restore):
#   - build logs should show pre_restore hook running
#   - test_restore.py PASS proves data came back from backup

# 5. Before/after levels:
#   BEFORE (main): backup_capable=False → rung=intentional-skip (L4 max)
#   AFTER (PR#3 head edc0201a): backup_capable=True → rung=PASS → L5 if all pass

Blocked items

(none)


DONE

Not yet. Written here only when all DoD items have Adversary PASS in REVIEW-mailu.md.