## ADDED Requirements ### Requirement: Centralized broadcast module The system SHALL provide a centralized `src/lib/broadcast.ts` module used by all workshop SSE routes to push events to connected clients. #### Scenario: Server Action triggers broadcast - **WHEN** a Server Action mutates session data and calls `broadcast(sessionId, event)` - **THEN** all clients subscribed to that session SHALL receive the event immediately without waiting for the next poll cycle #### Scenario: Broadcast module subscribe/unsubscribe - **WHEN** an SSE route calls `subscribe(sessionId, callback)` - **THEN** the callback SHALL be invoked on every subsequent `broadcast(sessionId, ...)` call - **WHEN** the returned `unsubscribe()` function is called - **THEN** the callback SHALL no longer receive events ### Requirement: Granular cache invalidation via revalidateTag Server Actions SHALL use `revalidateTag` with session-scoped tags instead of `revalidatePath` to limit cache invalidation scope. #### Scenario: Session mutation invalidates only that session's cache - **WHEN** a Server Action mutates a specific session (e.g., adds an item) - **THEN** only the cache tagged `session:` SHALL be invalidated - **THEN** other sessions' cached data SHALL NOT be invalidated