Release 3.5
Dev Infrastructure - Mailhog, Messenger & E2E
Local email capture, async queue worker, and end-to-end test infrastructure
Overview
Added Mailhog for local email capture, an auto-consuming messenger worker container, a debug email endpoint, and Playwright-based E2E test infrastructure with automatic re-authentication.
What Changed
Mailhog Container
- New Docker service captures all local email (SMTP on port 1025, web UI on port 18025).
MAILER_DSN=smtp://mailhog:1025set as the dev default across all environment files.- No emails leave the local development environment.
Messenger Worker Container
messenger-workerDocker service auto-consumes theasyncqueue on container start.- Hourly restart via
--time-limit=3600and crash recovery viarestart: unless-stopped. - Memory bounded at 256M. No need to manually run
bun run dev:consume. - Worker logs:
docker compose logs messenger-worker -f
Debug Test Email Endpoint
GET /debug/test-emailendpoint (dev environment only) for verifying email delivery.- Optional query params:
?to=...&subject=... - Sends a test email through the configured mailer, viewable in Mailhog.
Error Email Reduction (PR #702)
- Fixed
DateTimeField::setHelp(null)TypeError inProjectCrudController.php:1995- now checks before calling setHelp. - Fixed
GET /refresh-milestones-previewreturning 405 - endpoint now accepts GET and returns JSON. - Eliminated 35 of 225 error emails found during Mailhog review.
Playwright Auto-Reauth (PR #704)
- E2E tests detect session expiry and automatically re-authenticate via
/debug/test-login. auth-storage.jsonpersisted between runs, removing the need for manuale2e:save-admin-form-auth.
Files Touched
| File | Change |
|---|---|
docker-compose.yml | Mailhog + messenger-worker services |
app/.env | MAILER_DSN default |
app/src/Controller/Debug/TestController.php | Test email + test-login endpoints |
app/src/Controller/Admin/ProjectCrudController.php | setHelp(null) fix |
scripts/e2e-admin-title-status-milestones-playwright.ts | Auto-reauth |