Happy path
Attendee enters raffle.
Entry is accepted only for checked-in attendees and keyed by attendee plus raffle.
Organizer closes entries.
The live station hides winner results until the close command is committed.
Organizer draws winners.
A server-side seed produces deterministic prize-tier winners and runner-up order.
Failure modes
Socket reconnect resilience
Reconnect restores entry count and draw state.
Out-of-order messages
Late entry deltas cannot appear after closed draw.
Concurrent entry load
Thousands of checked-in attendees can enter without dropped acks.
Late join shows prior state
Visualizer joins and sees current entry count and draw state.
Organizer pause/cancel
Pause blocks new entries; cancel does not leak winners.
Results visible only after close
Winner display is gated until close.
Idempotent raffle entry
One attendee produces one entry.
Cross-station isolation
Raffle A entries cannot enter Raffle B draw.
Deterministic draw
Same seed and entry set produce same winners.
Runner-up if unreachable
Unreachable winner advances the next runner-up once.
SMS gap
Winner SMS dependency on EF-071 is visible.
Stable test attributes
Visibility teeth. Each attribute must be effectively visible when active and must match the agent probes.
| data-test | Where | Purpose |
|---|---|---|
raffle-station | station shell | raffle station |
raffle-socket-status | station shell | socket state |
raffle-entry-cta | attendee surface | enter raffle |
raffle-entry-count | station shell | entry count |
raffle-close-cta | organizer surface | close entries |
raffle-draw-cta | organizer surface | draw winners |
raffle-winner-panel | visualizer | winner display |
raffle-sms-gap-panel | gap panel | SMS winner gap |
Agent test plan
- raffle-opens
- raffle-enters
- socket-reconnect
- out-of-order-entry
- load-stable
- late-join
- organizer-pause
- winners-after-close
- idempotent-entry
- cross-station-isolation
- deterministic-draw
- runner-up
- sms-gap