Project not found.

Validation: Create 16U Local Queens team (#422)

validation-422-2026-04-11 Doc

validation pass

Validation: Create 16U Local Queens team (basketball-api#422)

Verdict

PASS with known follow-up debt (tracked in basketball-api#446).

Scope

  • Forgejo issue: basketball-api#422
  • PR merged: #427
  • Board item: #927 on board-westside-basketball
  • Deliverable: alembic migration 040 that inserts 16U Local Queens team row with contract_config cloned from LOCAL_CONFIG_16U pattern

What was validated in prod

  • Migration applied cleanly — alembic_version = 040 on basketball-api pod via kubectl exec ... psql -c "SELECT version_num FROM alembic_version;"
  • Row createdSELECT id, name FROM teams WHERE name = '16U Local Queens' returned team id 12
  • contract_config JSONB populated — verified structure matches LOCAL_CONFIG_16U pattern (variant=local, monthly_fee_default=200, Mon+Fri BWill practices, no tournaments)
  • End-to-end use — Jacelyn Bronson successfully moved to team 12 via basketball-api#425 contract-offer endpoint, audit log row written
  • tenant_id — correctly set to Westside Kings & Queens tenant (dynamic lookup by slug, not hardcoded)
  • division — set to 'girls' correctly

Known follow-up debt

Migration 040 inserted age_group = 'U16' which triggered a latent SQLAlchemy LookupError on read (Python enum names lowercase, values uppercase — SQLAlchemy reads by name). Mitigated by UPDATE teams SET age_group = NULL WHERE id = 12 — matches the 7 other teams which all have NULL age_group. The core migration goal (team exists, contract_config correct) is unaffected. Root cause tracked separately in basketball-api#446.

Why this is still PASS, not PARTIAL

The migration delivered exactly what the ticket specified — a 16U Local Queens team row with correct contract_config. The age_group enum bug is a pre-existing Python/Postgres schema mismatch that this migration simply happened to be the first to exercise. That's a separate defect, not a scope failure of #422.
  • basketball-api#425 (contract-offer endpoint) — used the new team for Jacelyn's tier change
  • basketball-api#446 (AgeGroup enum mismatch) — the latent bug this migration surfaced
  • basketball-api#424 (Marcus batch umbrella) — consumer of this team