Investigate "Unknown Player" (id 199) — duplicate of Kevin Porja or sibling? #423

Open
opened 2026-04-10 18:34:44 +00:00 by forgejo_admin · 0 comments

Type

Bug

Lineage

Standalone — discovered during 2026-04-10 Westside Ops session while querying the contract_status = 'none' pool.

Repo

forgejo_admin/basketball-api

What Broke

A player row exists with name = 'Unknown Player' (id 199), division NULL, no team assigned, contract status none. The row shares the SAME parent email and phone as Kevin Porja (id 198):

  • Parent email: jamma15@gmail.com
  • Parent phone: 8013478828
  • Parent name: Mary Lemi

Two possibilities:

  1. Duplicate registration: Mary Lemi tried to register Kevin twice and on the second attempt the name field was left blank — resulting in "Unknown Player" as a fallback default. In that case, row 199 is garbage and should be deleted.
  2. Sibling registration: Mary Lemi was starting to register a SECOND child (Kevin's brother or sister) and abandoned the form before entering the name. In that case, row 199 represents a real but incomplete registration — the form should be resumed, not deleted.

Repro Steps

  1. SELECT id, name, division, contract_status, parent_id FROM players WHERE name = 'Unknown Player';
  2. Observe: row 199, division NULL, parent_id pointing to Mary Lemi (same as Kevin Porja)
  3. SELECT p.name, p.created_at FROM players p JOIN parents par ON par.id = p.parent_id WHERE par.email = 'jamma15@gmail.com';
  4. Observe: Kevin Porja + Unknown Player, same parent

Expected Behavior

Either row 199 is deleted (if it's a duplicate) OR its name is updated and the registration is completed (if it's a real sibling). The current state — an unnamed player with no team and no contract — is not a valid production state.

Environment

  • Cluster/namespace: prod (basketball-api)
  • Service version/commit: current main
  • Affected tables: players (id 199), possibly parents
  • Related alerts: none
  • Discovery: Streamlit Westside Ops query on contract_status = 'none' pool

Acceptance Criteria

  • Investigation complete: determine whether row 199 is a dupe or a real sibling (ask Mary Lemi directly, or ask Marcus if he knows)
  • If duplicate: delete row 199 via Alembic migration
  • If real sibling: contact parent for the kid's name, update the row, continue registration flow normally
  • SELECT name FROM players WHERE name = 'Unknown Player' returns 0 rows after fix
  • No regression to Kevin Porja's row (id 198)
  • westside-basketball — project this affects
  • Related: basketball-api #418 (email normalization — this case is NOT the same bug, but is another example of registration form producing duplicate/incomplete rows)
### Type Bug ### Lineage Standalone — discovered during 2026-04-10 Westside Ops session while querying the `contract_status = 'none'` pool. ### Repo `forgejo_admin/basketball-api` ### What Broke A player row exists with `name = 'Unknown Player'` (id 199), division NULL, no team assigned, contract status `none`. The row shares the SAME parent email and phone as Kevin Porja (id 198): - Parent email: `jamma15@gmail.com` - Parent phone: `8013478828` - Parent name: Mary Lemi Two possibilities: 1. **Duplicate registration**: Mary Lemi tried to register Kevin twice and on the second attempt the name field was left blank — resulting in "Unknown Player" as a fallback default. In that case, row 199 is garbage and should be deleted. 2. **Sibling registration**: Mary Lemi was starting to register a SECOND child (Kevin's brother or sister) and abandoned the form before entering the name. In that case, row 199 represents a real but incomplete registration — the form should be resumed, not deleted. ### Repro Steps 1. `SELECT id, name, division, contract_status, parent_id FROM players WHERE name = 'Unknown Player';` 2. Observe: row 199, division NULL, parent_id pointing to Mary Lemi (same as Kevin Porja) 3. `SELECT p.name, p.created_at FROM players p JOIN parents par ON par.id = p.parent_id WHERE par.email = 'jamma15@gmail.com';` 4. Observe: Kevin Porja + Unknown Player, same parent ### Expected Behavior Either row 199 is deleted (if it's a duplicate) OR its name is updated and the registration is completed (if it's a real sibling). The current state — an unnamed player with no team and no contract — is not a valid production state. ### Environment - Cluster/namespace: prod (basketball-api) - Service version/commit: current main - Affected tables: `players` (id 199), possibly `parents` - Related alerts: none - Discovery: Streamlit Westside Ops query on `contract_status = 'none'` pool ### Acceptance Criteria - [ ] Investigation complete: determine whether row 199 is a dupe or a real sibling (ask Mary Lemi directly, or ask Marcus if he knows) - [ ] If duplicate: delete row 199 via Alembic migration - [ ] If real sibling: contact parent for the kid's name, update the row, continue registration flow normally - [ ] `SELECT name FROM players WHERE name = 'Unknown Player'` returns 0 rows after fix - [ ] No regression to Kevin Porja's row (id 198) ### Related - `westside-basketball` — project this affects - Related: basketball-api #418 (email normalization — this case is NOT the same bug, but is another example of registration form producing duplicate/incomplete rows)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
forgejo_admin/basketball-api#423
No description provided.