Skip to content

feat(badges): plumb working group and refined conference role badges #1952

@cdcore09

Description

@cdcore09

Summary

Phase 2 of the badge expansion. Wire `computeBadges` to consume tables that already exist in the schema but don't yet feed the recognition system: `group_memberships`, `event_committee_assignments`, `event_sessions`, and `event_session_types`. Adds ~10 new badges spanning sustained community participation and granular conference roles.

Requirements

  • Working Group Member / Working Group Chair badges from `group_memberships` joined to `groups` (filter to working-group type, distinguish chair/co-chair from rank-and-file).
  • Affinity Group Member / Affinity Group Coordinator from the same tables filtered to affinity-group type.
  • Program Committee badge from `event_committee_assignments`.
  • Reviewer badge from `event_committee_assignments` filtered to reviewer-style areas.
  • Refined conference-role badges using `event_sessions` and `event_session_types`: Keynote Speaker, Plenary Speaker, Lightning Talk, Tutorial Lead, Workshop Lead, Birds of a Feather Lead, Panelist. Replaces the current heuristic regex on `event_attendances.notes` with a proper join.
  • Backwards compatibility: existing `Talk` and `Poster` badges continue to work for events that don't have richer session data.
  • `pickFeaturedBadges` updated — Keynote and Plenary should rank near the top of the achievements strip alongside Service tier.

Context

Tables already exist (verified during the disciplines/skills work): `groups`, `group_memberships`, `event_committee_areas`, `event_committee_assignments`, `event_sessions`, `event_session_presenters`, `event_session_types`. Nothing in `badges.ts` reads them today.

The Phase 1 issue (#1951) is a prerequisite — its widened `computeBadges` signature is the natural place to add these new inputs. Phase 3 introduces the brand-new `awards` / `mentorship` / `contributions` tables.

Implementation Notes

  • `loadMemberDossier` will need to load these additional rows (or join them lazily) before passing to `computeBadges`. Worth measuring query count — the Promise.all batch is already a few queries deep.
  • Conference-role badges should prefer `event_sessions` data over `event_attendances.notes` regex. If a session matches via `event_session_presenters`, emit the session-type badge; otherwise fall back to the existing logic.
  • Group membership end-dating (if the join carries dates) should distinguish "current chair" from "former chair" — current rates higher in the visual hierarchy.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions