Skip to content

UC-11 Admin manages a live event

Primary actor SHS Staff (Admin)
Supporting actors Event Attendant
Priority Should
Satisfies FR-D4, FR-D5, FR-D6
Precondition A published challenge with the event's task exists.
Trigger The admin opens Live Ops for the task, or the attendant opens the display link.

Main success scenario

  1. Live Ops shows the event QR, re-minted every 30 seconds so a photographed code stops validating, with the 7-character backup code beside it.
  2. The admin, or an attendant with no account, opens the display link on a projector: a full-screen QR with no staff session on the shared screen.
  3. Live Ops polls the check-in count and a feed that identifies students only by number.
  4. Where a scan failed, the admin records, corrects or removes a completion in the override panel, giving a reason; the change and its audit row commit together.

Extensions

  • 1a. The projected code is stale. Live Ops warns before students scan it.
  • 2a. Display link rate limit. The public display endpoint is throttled per client.
  • 4a. Override on a rehearsal student. Allowed, and excluded from reports like every rehearsal row.
  • Audit. Every override names the student and the acting admin in CheckInAudit; the reason is required.

Acceptance criteria (Gherkin)

Feature file Test module
live_event_dashboard.feature test_live_event_dashboard_bdd.py
live_qr_staleness.feature and frontend/live_qr_staleness.feature test_live_qr_staleness_bdd.py
display_link.feature test_display_link_bdd.py
manual_override.feature test_manual_override_bdd.py
checkin_audit_names_the_student.feature and frontend/checkin_audit_names_the_student.feature test_checkin_audit_names_the_student_bdd.py
check_in_override_panel_dismissal.feature and frontend/check_in_override_panel_dismissal.feature test_check_in_override_panel_dismissal_bdd.py

Plain pytest: test_manual_override.py, test_display_link.py, test_display_link_rate_limit.py, test_checkin_audit_student_subject.py. Frontend: LiveOps.test.tsx, LiveOps.staleness.test.tsx, Display.test.tsx.

Views

Code: backend/app/routers/display_links.py, backend/app/services/display_links.py, backend/app/services/checkins.py, frontend/src/components/admin/LiveOps/, frontend/src/components/Display/. ADR 0005 records the display-credential decision.