Glamies v2 · use-case walkthrough

Voting day

Reviewer voting-day scoring (Part A) and chapter review of scores → nominations → winners (Part B). The phase gate, eligibility enforcement, the 2-point score-change rule, and adjudicator approval are built and shown live via a real eligible/ineligible reviewer pair; the eligibility-dashboard card, performer-conflict engine, and all nomination/winner computation are not built.

15 steps 10 built & screenshotted 5 not yet built
01

Voting day already active for the season

Chapter admin (Casey Marsh) Built & verified

Step A1 — A single button on the season page (`admin.setVotingDay`) toggles `seasons.votingDayActive`, which switches the phase resolver for every performance from performance-day to voting-day scoring. Shown here already active (seeded that way); toggling it is demonstrated below.

02

Toggled off

Chapter admin (Casey Marsh) Built & verified

One click deactivates voting day — every performance's scoring phase reverts to performance-day.

03

Toggled back on

Chapter admin (Casey Marsh) Built & verified

Reactivated — the rest of this walkthrough happens with voting day live.

04

Reviewer sees an eligibility snapshot on their dashboard

Reviewer Not yet built
Not yet built — no UI exists for this step today

Step A2 — `eligibility.evaluateEligibility` computes everything needed (shows attended, response average, exclusions, reason) but it's only exposed admin-side (`/api/admin/seasons/:id/eligibility`). There's no `GET /api/me/eligibility` or dashboard card yet — a reviewer has no way to see their own status before hitting the wall at submit time (see A3).

05

Ineligible reviewer blocked at finalization

Reviewer (Riley Chen — only 3 shows attended, below the 4-show minimum) Built & verified

Step A3 — This IS enforced server-side: `submitScore`'s voting-day branch checks the `enforce_voting_eligibility` policy and throws "Not eligible to finalize on voting day: …" (403), shown here as a real error from a real blocked submit attempt — not a mock. It's just not explained to the reviewer ahead of time (that's the A2 gap above).

06

Eligible reviewer finalizes voting-day scores

Reviewer (Finn Ortega — 6 shows attended, eligible) Built & verified

Step A4 — Impersonating an eligible reviewer (chapter-admin/platform-admin "View as"): the screen shows a Voting Day badge. Voting day writes a brand-new score row per scorer/category (the 2-phase model), separate from Finn's performance-day scores — this rubric starts blank, not pre-filled from PD.

07

Voting-day score submitted

Reviewer (Finn Ortega) Built & verified

First voting-day submission for this category — submitted for adjudicator review, same approval flow as performance day (see A8).

08

A >2-point revision requires a written reason

Reviewer (Finn Ortega) Built & verified

Step A5 — Revising a already-submitted voting-day score enough to move the category score by more than 2 points surfaces a required reason field. v2 hard-blocks this (v1 only asked on paper — 2,385 of 7,607 v1 finalized scores moved ≥2 points but only 46 reasons were ever recorded).

09

Revised score submitted with reason on file

Reviewer (Finn Ortega) Built & verified

The revision is now on record with its change reason, ready for adjudicator re-approval.

10

Adjudicator approves voting-day submissions

Adjudicator (Jordan Pierce) Built & verified

Step A8 — The exact same review-and-approve flow as performance day, just against voting-day-phase score rows. Production v1 reality: all 7,607 voting-day-submitted scores were approved (blanket batch-approve), so this single "Approve all" action is the real-world workflow, not an edge case.

11

Per-performance score aggregates exist — no season-wide leaderboard yet

Chapter admin (Casey Marsh) Built & verified

Step B1 — The admin console aggregates scores per performance (what's shown here), but there's no `awards.getCategoryStandings(seasonId)` — a season-wide leaderboard ranking every nominee within a category across all performances, which is what B2's top-5 computation needs to read from.

12

Compute top-5 nominations per category

System / chapter admin Not yet built
Not yet built — no UI exists for this step today

Step B2 — Nothing built. `award_categories.maxNominees` exists as a data field but no standings→top-N slate computation exists anywhere.

13

Committee reviews slates and determines winners

Chapter admin (committee) Not yet built
Not yet built — no UI exists for this step today

Step B3 — No winners view, no "confirm winner" write path, no audit trail for the decision — depends entirely on B2 existing first.

14

Reviewer award (perfect on-time attendance, all responses)

System / chapter admin Not yet built
Not yet built — no UI exists for this step today

Step B4 — `attendance_status='late'` and `user_profiles.studentGrade` are both tracked (the raw inputs exist), but no `awards.getReviewerStandings` computation reads them into a per-grade standing.

15

Results feed the gala (winners export)

Chapter admin Not yet built
Not yet built — no UI exists for this step today

Step B5 — Out of scope until B2/B3 exist; would just be an export view over their output.