Since #316 replaced the groups list's "Reviewed" column with "Annotators", validated_by_username on SequenceGroupListItem has no reader anywhere in the app — and the list query still pays a LEFT JOIN users on every request to populate it.
It was added only three days earlier (#257, docs/specs/2026-08-03-group-validated-by-design.md) to show who validated a group next to the validated badge. That badge is gone from the list; SequenceGroupAnnotatePage shows a "Validated" badge but never the username, so the attribution is now invisible end-to-end.
Where it lives
annotation_api/src/app/api/api_v1/endpoints/sequence_groups.py — User.username.label("validated_by_username") in the list select, plus .outerjoin(User, User.id == SequenceGroup.validated_by_user_id)
annotation_api/src/app/schemas/sequence_group.py — SequenceGroupListItem.validated_by_username
frontend/src/types/api.ts — same field on the TS interface
SequenceGroup.validated_by_user_id (the column) is not in question — only the denormalized username on the list row.
Decide between
- Drop it — remove the field, the label and the join. Cheapest list query; attribution stays available via
validated_by_user_id if a UI ever wants it again.
- Surface it again — show "validated · username" on the group detail page, where the Validated badge already lives, and keep the list field only if that page starts reading the list item.
Either way, is_validated stays on the list item: the "to label" tooltip branches on it (propagation only fires for validated groups).
Worth noting the wider gap: after #316 no row on /classify/groups shows validation state at all, so on the Labeled tab you cannot tell a validated group from an unvalidated one. If that turns out to matter in use, the answer may be a compact validated marker rather than reinstating the whole column — but that is a product call, not part of this cleanup.
Since #316 replaced the groups list's "Reviewed" column with "Annotators",
validated_by_usernameonSequenceGroupListItemhas no reader anywhere in the app — and the list query still pays aLEFT JOIN userson every request to populate it.It was added only three days earlier (#257,
docs/specs/2026-08-03-group-validated-by-design.md) to show who validated a group next to the validated badge. That badge is gone from the list;SequenceGroupAnnotatePageshows a "Validated" badge but never the username, so the attribution is now invisible end-to-end.Where it lives
annotation_api/src/app/api/api_v1/endpoints/sequence_groups.py—User.username.label("validated_by_username")in the list select, plus.outerjoin(User, User.id == SequenceGroup.validated_by_user_id)annotation_api/src/app/schemas/sequence_group.py—SequenceGroupListItem.validated_by_usernamefrontend/src/types/api.ts— same field on the TS interfaceSequenceGroup.validated_by_user_id(the column) is not in question — only the denormalized username on the list row.Decide between
validated_by_user_idif a UI ever wants it again.Either way,
is_validatedstays on the list item: the "to label" tooltip branches on it (propagation only fires for validated groups).Worth noting the wider gap: after #316 no row on
/classify/groupsshows validation state at all, so on the Labeled tab you cannot tell a validated group from an unvalidated one. If that turns out to matter in use, the answer may be a compact validated marker rather than reinstating the whole column — but that is a product call, not part of this cleanup.