feat(web): room social layer - broadcast reactions + in-room chat#67
Conversation
Reactions and chat now ride the signaling relay, closing the chatter gap named by ticket 15 (Option A) as ticket 20. - room:reaction / room:chat events: server validates (curated emoji allowlist, single-line 280-char sanitization), rate-limits per socket (fail closed, silent drops), and echoes to the whole room - the echo is the single render path - last-50 chat ring buffer per room, replayed to late joiners via the room:join ack; in-memory only, wiped with the room, never on /status - attributed reaction petals: sender initials + name-hashed hue over the cover (Constellation honesty rule); the phase C CSS had already hidden the old local-only react bar, which is removed - new RoomChat aside (messages, curated reaction row, input) mounted in the room-mode lower grid; session state in useSession, transport- agnostic message shapes in shared/types.ts for a future Statement Store presence layer - 7 new signaling integration tests; socket-events reference updated Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
✅ Deploy Preview for muzinga ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
|
Hey @claude, review this please |
|
Claude finished @knzeng-e's task in 3m 11s —— View job Review
This is a clean, well-scoped implementation of ticket 20. Server-side echo as the single render path, curated emoji allowlist, sanitize-then-cap chat, in-memory-only history that never touches One thing worth a look, one minor nit: 1. Rate limits are trivially bypassable by reconnecting ( 2. Duplicated initials logic — Everything else checked out: Note: I was not able to run |
Re-checked the backlog tables against issue/PR state and merged work: - Ticket 08 (frontend refactor, #9): "In progress" -> "Delivered on main". Issue #9 is closed and the refactor PRs (8b-1..8b-5, PR9 shared/ tree, PR10-13) are merged. - improvement-plan Now table: PR8b and PR9 "Planned" -> "Delivered on main" (PR10 split-mega-hooks stays Proposed; useCatalog/useSession are not split yet). - Ticket 20 (social layer): "Delivered on feat/room-social-layer" -> "Delivered on main (PR #67)" now that #67 is merged. - Ticket 21 (this PR): now tracked by a dedicated issue #69; row reads "In review (issue #69, PR #68)". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reactions and chat now ride the signaling relay, closing the chatter gap named by ticket 15 (Option A) as ticket 20.