Validation: Issue #367 — Migration 037 monthly category + first_payment EmailType

validation-367-2026-04-11 Doc

validation pass

Ticket

Forgejo: basketball-api#367 — board item #873
Shipped: migration 037 adds monthly to ProductCategory enum, first_payment to EmailType enum, and seeds the "Monthly Fee — Prorated April" product row.

Environment

Prod cluster, basketball-api namespace, pod basketball-api-78d84789c5-47hq7 (image at commit 2df40f08).

Checks

# Criterion How to Verify Result Evidence
1 ProductCategory.monthly exists in Python enum and Postgres Exec into pod, import ProductCategory, verify monthly member PASS <code>ProductCategory.monthly=monthly</code>
2 EmailType.first_payment exists in Python enum and Postgres Exec into pod, import EmailType, verify first_payment member PASS <code>EmailType.first_payment=first_payment</code>
3 Product row "Monthly Fee — Prorated April" seeded Query Product table filter by category=monthly PASS Product id=4, name=Monthly Fee — Prorated April, price_cents=0, active=True
4 alembic upgrade head applies cleanly ArgoCD rolled new pod successfully; init container migrated DB on startup PASS Pod Running 1/1, no migration errors in logs

Verdict

PASS — all 4 checks green. Migration landed and the new enums + product row are live in prod.

Discovered Issues

  • Migration numbered 037 instead of planned 031 due to 6 intermediate migrations merged concurrently. Harmless — Alembic's revision chain resolved correctly. Noted in QA review on PR #370.
  • oauth_tokens DB table is empty; file-based fallback is used for Gmail sends. Separate issue, not blocker.