Sync runner checkout / sync (push) Successful in 7s
## Summary - Closes [#17](#17). - Django deploy passes optional `host_apps.compose_profiles` as `COMPOSE_PROFILES` so compose profiles survive `up -d --remove-orphans`. - Adama `monica_site` beta+prod set `compose_profiles: [worker]` (dj-queue singleton). Roslin / ai-server-4080 stay web-only. ## Why Real campaign sends enqueue dj-queue tasks; without the worker they stay **Queued**. Test email worked because it is synchronous SMTP. ## Test plan - [ ] Merge + deploy `monica_site` beta (and/or prod) via `deploy.sh` - [ ] On **adama**, confirm worker container up for `monica_site_beta` / `monica_site_prod` - [ ] On roslin / ai-server-4080, confirm **no** worker - [ ] Portal: send campaign → recipient leaves Queued → SentReviewed-on: #18