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
- 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.
- 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.
- Live Ops polls the check-in count and a feed that identifies students only by number.
- 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
- Process: UC-11 Live event
- Logical:
CheckInAuditin the domain model
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.