Invite season-wide roles by email
Step 1 — No invite system exists. `admin.assignRole` requires an already-existing user account; there is no email-invite + accept flow for show directors or adjudicators.
Bulk invite via spreadsheet
Step 2 — No CSV/spreadsheet import path exists to match existing users by email and invite the rest in one pass.
Member fills out their profile
Step 3 — Better Auth sign-up/sign-in works, and a member can self-serve their own contact & safety details (phone, allergies, dietary restrictions, accessibility needs, emergency/parent contact, grade). What's missing is the invite-link binding — this profile page exists standalone, not as the last step of accepting an emailed invitation.
Member self-selects a role; admin approves
Step 4 — Only admin-initiated `assignRole` exists. There's no member-facing "request a role" workflow or approval queue.
Chapter admin assigns and edits season roles
Step 5 — On the season page's Roles section, the chapter admin picks a person, a role, and an optional school scope (season-wide if left blank), then assigns it. Existing roles below are searchable/filterable by person, role, or school, each removable in one click. The reviewer/adjudicator conflict is enforced server-side on assign.
New role assigned
Assigning "school representative" to Morgan Ellis (already the school's show director) — role crossovers on one person are explicitly supported.
Show director manages their own school's team
Step 6 — `assignRole` is gated to chapter admins only (`assertChapterAdmin`); there's no school-scoped version a show director can use for their own team. (A director's read-only team view IS built — see the performance-day presentation, step 17.)
Floating members (chapter membership, no season role)
Step 7 — The data model supports a person belonging to a chapter with no season role yet, but there's no in-app flow to add such a member outside of seeding/invites (which don't exist — step 1).
Lead-reviewer designation
Step 8 — Not in the `season_role` enum at all; there's no signifier-only "lead reviewer" label anywhere in the schema or UI.
Record the school liaison
Step 9 — No liaison field exists on the `schools` table; there's nowhere in the school profile UI to record this on-site contact.
Member signs their waiver
Step 10 — A member with an outstanding waiver sees a status badge and an "I have signed my waiver" button on their own profile page.
Waiver marked submitted
The badge flips to "submitted" — pending chapter approval.
Chapter admin approves the waiver
The admin's user-detail page has a waiver status dropdown (not_submitted / submitted / approved / expired). This is real and working, but it's global per-user rather than per-season, and there's no document upload — a minor's parent-signed waiver can't actually be attached anywhere yet.