9bdda6aaf8
Unit Tests / test (push) Successful in 7m21s
- calendar: create_calendar_user() now writes bcrypt htpasswd entry to data/services/calendar/config/users (the path Radicale reads at /etc/radicale/users); delete_calendar_user() removes the entry - email: create_email_user() calls `docker exec cell-mail setup email add` to register the account in docker-mailserver's Dovecot/Postfix store; delete_email_user() calls the matching `setup email del` — both are non-fatal if the container isn't running - service_composer.install(): pull image separately before up so slow registry pulls don't race with container startup; retry up once on failure so a transient registry hiccup on first install doesn't require the user to manually retry Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>