Deduplicate Alice Uwamahoro player+parent rows (keep 202, delete 201) #420
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
forgejo_admin/basketball-api#420
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Bug
Lineage
Standalone — discovered during 2026-04-10 Westside Ops session. Confirmed by Coach Marcus in WKQ Stakeholders group that Alice Uwamahoro is one kid, not two. Symptom of the email normalization root-cause bug (basketball-api #418).
Repo
forgejo_admin/basketball-apiWhat Broke
Alice Uwamahoro has TWO player rows in prod with TWO separate parent rows, for the same real person. The mother re-submitted the registration form 6 minutes apart with a slightly different dot placement in her Gmail address. Gmail delivers both to the same inbox, but the basketball-api uniqueness check (no normalization) created separate rows.
Concrete rows:
aliceuwamahoro13a.@gmail.com, parent_id 175, created 2026-04-08 21:16:37aliceuwamahoro13.a@gmail.com, parent_id 176, created 2026-04-08 21:22:40Same phone (385-235-2876), same parent name (Justin Gatonda), same kid. Marcus confirmed in WKQ chat she should be on 16U Elite Queens with a $100/month contract — this blocked until dedupe.
Repro Steps
SELECT id, name, created_at FROM players WHERE name = 'Alice Uwamahoro';Expected Behavior
One player row for Alice Uwamahoro, one parent row. Row 202 (the corrected later submission) is canonical. Row 201 and its parent (id 175) should be removed.
Environment
players(ids 201, 202),parents(ids 175, 176)Acceptance Criteria
contract_status = 'none')SELECT COUNT(*) FROM players WHERE name = 'Alice Uwamahoro'returns 1Related
westside-basketball— project this affectsScope Review: READY
Review note:
review-925-2026-04-10Scope is solid. Concrete row IDs verified, acceptance criteria testable, Alembic migration path is correct (
alembic/versions/— next sequential number after 030). Both target rows havecontract_status = 'none'so no dependent rows to worry about. Idempotency requirement is called out. Audit trail via Alembic (not raw SQL) aligns with the never-alter-prod-directly convention.Minor notes (non-blocking):
story:WS-S7is a loose thematic fit (this is data cleanup from the #418 normalization bug, not an email announcement feature). Acceptable as foundational data hygiene.arch-basketball-apibacking note does not exist in pal-e-docs yet — pre-existing gap across many basketball-api tickets, not this ticket's responsibility.Ready for
todo→next_up. Dispatch a dev agent to write an idempotent migration that deletes player 201 and parent 175 (with guards).