Review: Create 16U Local Queens team

review-927-2026-04-10 Review

review block

Verdict: BLOCK

Board item #927 — basketball-api#422 — Create 16U Local Queens team. Ticket premise based on a schema field that does not exist in basketball-api.

Template Completeness

  • [x] Type: Feature (ticket body says Feature — board label says type:bug, mismatch flagged)
  • [x] Lineage
  • [x] Repo
  • [x] User Story
  • [x] Context
  • [x] File Targets
  • [x] Acceptance Criteria
  • [x] Test Expectations
  • [x] Constraints
  • [x] Related

Traceability

  • [x] story:WS-S23 — "custom contract terms per player" — strong fit
  • [x] arch:basketball-api label
  • [ ] arch-basketball-api note — NOT FOUND. Pre-existing gap.
  • [x] Forgejo issue #422 — open
  • [!] type:bug label contradicts ticket body (Feature). [LABEL] Change to type:feature.

File Targets — CRITICAL ISSUE

  • [x] alembic/versions/ — path exists, next number 031.
  • [!] teams.contract_config JSONB column — DOES NOT EXIST. Verified via src/basketball_api/models.py Team class (lines 341-360): only id, tenant_id, name, division, age_group, coach_id, groupme_group_id, groupme_share_url, created_at. No contract_config, no JSONB. grep -rn "contract_config" across entire repo (src, alembic, tests) returns ZERO hits.
  • [!] JSONB in basketball-api is limited to products.custom_fields, orders.custom_data, oauth_tokens.token_data. No team-scoped contract configs.
  • [!] Ticket claims "16U Local Kings has variant: local, practices: Monday + Friday at BWill, monthly_fee_default: 200". No such structure in source. Either (a) someone ALTERed prod directly (violates feedback_never_alter_prod_directly), or (b) ticket author assumed unimplemented structure.

Repo Placement

basketball-api correct IF team-level contract configs are intended. Right now contract_config is a phantom column.

Dependencies

Ticket implicitly requires: (1) schema migration adding teams.contract_config JSONB, (2) backfill/seed for existing teams, (3) app-layer code to read it during contract rendering. None exist. Multi-ticket feature, not one-row insert.

Acceptance Criteria

AC internally consistent with ticket's mental model, but model doesn't match schema. Dev agent cannot satisfy "contract_config JSONB populated" — column doesn't exist. Agent would fabricate, no-op, or block.

Blast Radius

High if agent guesses: adding a JSONB with opinionated shape bakes in design decisions that should come from proper WS-S23 scoping. Low if ticket is rewritten honestly.

Decomposition Assessment

Blocked before decomposition makes sense. Root problem: ticket is architecture work disguised as a data migration. If rewritten to Option 1 (minimal row insert), it becomes a ~5 min single-agent ticket.

Recommendation

  • [BLOCK] Cannot dispatch as written. teams.contract_config does not exist.
  • [SCOPE] Decide path with Lucas/Ava. Two viable options:
  • [LABEL] Change type:bug → type:feature.
  • [SCOPE] Expand Marcus practice-schedule question to confirm whether Option 1 is sufficient or full WS-S23 system is needed.
Do NOT dispatch a dev agent until scope rewritten. Recommend Option 1 for the Marcus batch.