Validation: Issue #413 — Queens pink palette for girls program emails
Ticket
Forgejo: basketball-api#413 — board item #910
Shipped: Queens pink palette (
#e91e8c) added to brand.py + email.py. _brand_wrapper() accepts optional accent_color parameter (defaults to Kings red). send_first_payment_email() selects pink when player.division == Division.girls. Backward compatible with 7 other email functions.Environment
Prod cluster, basketball-api namespace, pod basketball-api-7c7847dfc9-lvx2g then 7d4c488776-t9gsw (post-deploy rollout).
Checks
| # | Criterion | How to Verify | Result | Evidence |
|---|---|---|---|---|
| 1 | brand.py has COLOR_QUEENS_PINK and COLOR_QUEENS_PINK_HOVER constants | Inspect brand.py in deployed pod | PASS | Constants present, values match westside-contracts CSS exactly (#e91e8c, #f23d9e) |
| 2 | _brand_wrapper() accepts optional accent_color parameter, defaults to _BRAND_RED | Inspect signature in email.py:200 | PASS | <code>def _brand_wrapper(tenant_name, body_html, accent_color=_BRAND_RED)</code> |
| 3 | Kings player (Division.boys) gets exactly 4 occurrences of #d42026 and 0 occurrences of #e91e8c in generated HTML | Run send_first_payment_email with mocked gmail client, grep HTML body | PASS | Test Kings Player boys division: Red=4, Pink=0 |
| 4 | Queens player (Division.girls) gets exactly 4 occurrences of #e91e8c and 0 occurrences of #d42026 in generated HTML | Same player, flipped to girls division | PASS | Test Queens Player girls division: Red=0, Pink=4 |
| 5 | Null division defaults to red (not crash) | Code path inspection — <code>accent = _BRAND_QUEENS_PINK if player.division == Division.girls else _BRAND_RED</code> | PASS | Non-girls or null → default _BRAND_RED |
| 6 | All 7 other _brand_wrapper() callers unchanged | QA review verified no behavioral change to jersey-reminder, profile-reminder, roster-export, tryout-announcement, contract-signed, contract-reminder, password-reset | PASS | Backward-compat verified via QA agent review on PR #415 |
| 7 | Production blast delivered pink emails to girls parents | Blast execution 2026-04-11 18:41 — 8 girls players received pink-branded first-payment emails, 21 boys received red | PASS | EmailLog has 32 entries, visually verified on phone by Lucas for both Kings red and Queens pink test emails before blast |
Verdict
PASS — Queens pink branding production-ready and delivered in the first blast. Clean separation: 4/4 color references flip correctly based on player division.
Discovered Issues
- AC stated "7 other _brand_wrapper() callers" — actual count is 10. Cosmetic discrepancy noted during QA, non-blocking.