StackTrading Docs

QnA Init Docs — UC_4.14.1 Discord Chat Stream (TWO-WAY) — LIVE

QnA Init Docs — UC_4.14.1: Discord Chat Stream (TWO-WAY)

FieldValue
UCUC_4.14.1 — Discord Chat Stream (TWO-WAY) (Module: Community & Live Broadcast — LIVE)
WBS CategorySTAGE 2.2: DASHBOARD LIVE → folder dashboard_live/
BA PiCanh.hoang12 (Anh Hoang) — theo WBS
Phạm viChiều outbound (Dashboard → Discord) + trạng thái vùng input theo 2 gate (Level / Discord link). Chiều inbound (Discord → Dashboard) không viết lại — reference sang UC_4.9.1.
Ngày tạo2026-08-26
Trạng thái📤 SRS UC_4.14.1_v1.md đã xuất bản. Q-01 đã chốt (BA, 2026-08-26 — khoá input, không ẩn). Còn 9 open item ở §10 của SRS chờ khách/BE chốt (2 mục 🔴 blocking).

Nguồn đã đối chiếu trước khi viết:

  1. References/CR/_CR_INDEX.md — quét toàn bộ CR. Có 1 CR trực tiếp: CR-20260818-002 (Flow 38 monitor thêm #live-broadcast-chat) và 1 CR gián tiếp: CR-20260720-004 (Freshdesk thay Zendesk).
  2. References/QnA from clients/03_STAGE2_DASHBOARD_EVALUATION/Community + Settings/QnA_STAGE2_COMMUNITY_LIVE_BROADCAST.md §2 — Discord Chat Stream ([DCS-*]), + §5 The Pit ([PIT-BIZ-03] trigger word list).
  3. References/Customer supplies/(Stage 2) Community & Settings/Discord Server Details.md — §#live-broadcast-chat, §#verify, §Compiled Discord Roles and Badges.
  4. References/Customer supplies/RFQ_ Stack Trading Prop Tech V7.pdf §2.3 Discord Bot & Message Queueing + §Community, Trustpilot and Discord Bot Endpoints; RFQ_ Website and Dashboard Implementation V7.pdf §Community Page Implementation.
  5. docs/BA/UC_4.1-4.17/dashboard_sim/UC_4.9.1/UC_4.9.1_v1.md — UC anh em (ONE-WAY, SIM). BR_4.9.1.12 đã chỉ đích danh UC_4.14.1 sở hữu chiều outbound.
  6. docs/BA/UC_4.1-4.17/dashboard_common/UC_4.5.1/UC_4.5.1_v1.md — nguồn cờ is_live; UC_4.5.2_v1.md — nguồn link-token block trên card The PIT.
  7. docs/BA/Common_rule/common_rules.md — CR-02 (text field), CR-08 (timestamp), CR-14 (WebSocket reconnection).
  8. References/QnA from clients/.../SIM_Community_Wireframe_Brief.md — brief SIM 2026-08-07, nguồn của các state CHAT-1 → CHAT-4 và của các câu hỏi chặn.
  9. Design pack khách gửi 2026-08-26 (6 state màn Community LIVE) — do BA cung cấp trực tiếp, chưa commit vào References/Wireframe/.

Phần 1 — Nội dung khách ĐÃ CHỐT (dùng thẳng khi viết SRS)

#Nội dung đã chốtNguồn
1Panel là 2 chiều ở LIVE. Quyền post (Read/Write) của #live-broadcast-chat chỉ dành cho role Associate Trader trở lên = LIVE Level 1+.[DCS-DEF-02], Discord Server Details.md
2Chỉ gửi được sau khi đã link Discord. Chưa link → vùng input bị khoá (không ẩn): 🔒 + placeholder Link your Discord account first to unlock chat. (A18 gốc ghi "should be hidden" → đã bị supersede bởi design 2026-08-26 + quyết định BA cùng ngày, xem Q-01.)[DCS-BIZ-18] (Adam) + design pack 2026-08-26
3Endpoint chính thức: POST /community/chat/send — thay cho POST /chat/send ghi trong WBS. Input { user_id, message_text }, response HTTP 202 Accepted ngay lập tức.[DCS-EP-01], RFQ_ Stack Trading Prop Tech V7.pdf §Community Endpoints
4Không có lớp kiểm duyệt nội dung custom ở endpoint. Bắt buộc có rate limit theo user ~1 request/giây/user để chặn spam làm ngập Redis queue.[DCS-EP-02]
5Bị throttle → hiện inline notice Message rate limit reached. Please wait a moment.[DCS-BIZ-12]
6Pipeline outbound: Redis memory queueBatch Worker. Nếu velocity > 1 msg/s → worker gộp N message thành 1 payload Discord format [User A]: Message \n [User B]: Message. Mục đích: né rate limit Discord 5 msg / 5s / channel.RFQ_ Stack Trading Prop Tech V7.pdf §2.3, [DCS-BIZ-11]
7Không optimistic render. Frontend KHÔNG hiển thị message tại thời điểm bấm Send. Live Chat Feed là component read-only hoàn toàn, chỉ được đổ bởi DISCORD_CHAT_STREAM. Message chỉ quay lại khi đã post thành công lên Discord.[DCS-BIZ-20] (Adrian Stack, 2026-08-18)
8Message bị AutoMod chặn → không bao giờ quay lại dashboardkhông cần UI flag, không cần animation xoá, không cần error toast riêng cho moderation.[DCS-BIZ-20]
9Flow 38 mở rộng 2 → 3 channel: Node.js Discord Bot phải monitor thêm #live-broadcast-chat, bên cạnh #the-pit#verify. Native AutoMod không hiểu ngữ cảnh trading nên không chặn được khiếu nại vận hành.[DCS-BIZ-21]CR-20260818-002
10Trigger word list Flow 38: slippage, lag, frozen, scam, missing payout, Rithmic down, MT5 down, TradingView down, connection dropped. Gemini sentiment gate phân loại Complaint / Positive / Neutral. Complaint → xoá message + public placeholder reply + ticket Freshdesk Priority = High.[PIT-BIZ-03], RFQ_ Stack Trading Prop Tech V7.pdf §2.3, CR-20260720-004
11Giới hạn 2.000 ký tự, enforce bằng HTML maxlength. Không build character counter custom.[DCS-BIZ-04]
12Enter = gửi. Shift+Enter = xuống dòng (giống Discord).[DCS-UI-03] (Adam)
13Chỉ plain text + Unicode emoji. Không emoji picker custom (dùng bàn phím OS), không custom Discord emoji, không upload ảnh/GIF, không link preview, không @mention auto-complete.[DCS-BIZ-05], [DCS-BIZ-06], [DCS-UI-01]
14Không có emoji reaction — reaction chỉ tồn tại bên Discord native, không sync về Dashboard.[DCS-UI-01]
15Panel chat mở/đóng đúng cùng thời điểm với video, chỉ điều khiển bởi cờ is_live. Offline → xoá sạch message, hiện No live chat, input khoá, placeholder Waiting for session....[DCS-TRIG-01], [DCS-BIZ-10]
16Hydrate 50 tin gần nhất từ Redis khi mount; rolling window cố định 50 tin; không pagination, không infinite scroll.[DCS-BIZ-08], [DCS-BIZ-09]
17Chiều inbound stream real-time 1:1, không batching. Thứ tự FIFO theo timestamp nhận (UTC).[DCS-BIZ-11], [DCS-BIZ-13]
18Tên hiển thị = nickname Discord server + role metadata append tự động. User không tự set được tên/avatar từ Dashboard.⚠️ Superseded một phần bởi CR-20260903-001 (2026-09-03): message gửi từ Dashboard nay đi qua Discord Webhook với username + avatar_url lấy từ Users record, không phải từ profile Discord (Ref: BR_4.14.1.12). Message gõ trực tiếp trong app Discord vẫn giữ nguyên. Câu "user không tự set được" vẫn đúng — cả hai field đều do BE điền. Còn mở: lấy Full Name hay Discord nickname (§10 item 11).[DCS-BIZ-01][DCS-BIZ-03]
19Auto-scroll khi neo đáy; giữ vị trí + badge New Messages khi đã cuộn lên.[DCS-BIZ-07]
20Không hiển thị online count trên panel chat ở mọi state — Discord API không cấp số online theo từng text channel.[DCS-BIZ-15] → đã đóng bởi BR_4.9.1.11
21Flow 7 §Digital Eviction gọi POST /discord/revoke-all-roles: strip title role + pod role, KHÔNG kick khỏi server, KHÔNG xoá discord_user_id. User tụt về everyone (read-only public).[DL-BIZ-04], RFQ_ Stack Trading Prop Tech V7.pdf §Community Endpoints
22Link-token block (Link your Discord account first + 3 bước + [Copy]) nằm trên card The PIT, đã do BR_4.5.2.7 sở hữu — UC này không viết lại.[PIT-BIZ-01], UC_4.5.2_v1.md

Phần 2 — Câu hỏi & giả định cần BA / khách chốt

Toàn bộ mục dưới đây đã được ghi vào §10 của UC_4.14.1_v1.md với cùng số thứ tự, để reviewer đọc SRS là thấy ngay. Q-01 đã chốt → nằm ở bảng Closed by this document của §10; Q-02 → Q-10 vẫn ở bảng Open Itemsgiữ nguyên số, nên §10 bắt đầu từ mục 2.

IDLoạiCâu hỏi / Giả địnhCách xử lý trong SRS v1Trạng thái
Q-01SOURCE_CONFLICTChưa link Discord: ẩn input hay khoá input? [DCS-BIZ-18] nói "the ability to send messages should be hidden". Design pack 2026-08-26 vẽ input hiện + khoá + 🔒 + placeholder Link your Discord account first to unlock chat.BA chốt 2026-08-26: khoá, không ẩn. Viết theo design. Lý do: input biến mất không giải thích gì cho trader, và bỏ hẳn row mâu thuẫn với chính ràng buộc "so the UI grid does not break" khách đã nêu 2 lần. A18 bị supersede ở điểm này. Note ⚠️ trong BR_4.14.1.2 đã đổi thành note quyết định; item chuyển sang bảng Closed by this document ở §10 của SRS. Không log thành CR — cả 2 nguồn đều từ khách, nguồn mới hơn thắng, không phát sinh scope/endpoint mới.✅ Đã chốt (BA, 2026-08-26)
Q-02SPEC_GAP 🔴Author attribution khi bot relay. Worker post dưới danh tính bot, và khi gộp thì 1 message Discord chứa text của nhiều trader. Không nguồn nào nói author / is_host của payload inbound được lấy từ đâu. Đọc thẳng theo tài liệu → dashboard sẽ render 1 bubble tác giả là bot chứa nhiều người, phá BR_4.9.1.5 và phá Host highlight.BA đề xuất: bot carry author + is_host qua Redis queue và tách payload gộp thành N event DISCORD_CHAT_STREAM riêng, mỗi sender 1 event. Ghi vào BR_4.14.1.3 dưới dạng đề xuất, đánh dấu blocking.Blocking BE
Q-03INTRA_RULE_CONTRADICTIONDesign LIVE lệch với UC_4.9.1 ở 2 điểm dù là cùng 1 component: (a) Read less — design vẽ inline trong bubble, BR_4.9.1.9 viết sticky ở góc dưới phải khung chat; (b) badge — design có cả New Message (số ít) lẫn New Messages (số nhiều).(a) viết theo design + flag divergence ở BR_4.14.1.7 và §9 row 5; (b) viết là label theo số lượng tin chưa xem.⏳ Chờ design/khách
Q-04UX_GAPSender không nhận feedback gì khi message bị chặn. (Open Item #15 của QnA_STAGE2_COMMUNITY_LIVE_BROADCAST.md.)Ghi rõ ràng là im lặng có chủ đích trong BR_4.14.1.10 + §7, để QA không log bug. Nếu khách muốn feedback → BE phải đọc AutoMod event + bắn WS event mới (scope mới).⏳ Chờ khách
Q-05TECH_RISK 🔴Discord AutoMod có quét message do bot post không? Toàn bộ layer 1 giả định là có, nhưng mọi message từ Dashboard đều đi qua bot, không đi qua account của trader.Viết đúng như khách mô tả, kèm cảnh báo BE phải verify với platform behaviour của Discord. Nếu AutoMod không áp cho bot → Dashboard không có filter nào và phải thêm custom pre-post filter (scope mới).Blocking BE verify
Q-06IMPACT_ANALYSISThiệt hại dây chuyền trong payload gộp. N message của N trader gộp thành 1 post; chỉ cần 1 dòng dính AutoMod / Flow 38 → cả payload bị chặn hoặc bị xoá, kéo theo các message vô tội.Ghi consequence vào BR_4.14.1.3 + BR_4.14.1.10. Giải pháp của Q-02 (tách per-sender) cũng đóng luôn mục này.⏳ Chờ khách
Q-07CR_OPENFlow 38 có post public placeholder reply trong #live-broadcast-chat không?#the-pit thì có; nhưng ở broadcast chat reply đó sẽ stream lên dashboard của mọi người ngay giữa buổi live. (Open question 1 của CR-20260818-002.)Viết theo hành vi Flow 38 hiện có, flag ở §10.⏳ Chờ khách
Q-08RACE_CONDITIONMessage bị Flow 38 xoá SAU khi đã lên WebSocket. DISCORD_CHAT_STREAM là append-only, không có retract event. (Open question 4 của CR-20260818-002.)Không spec cơ chế retract. Flag ở §10: hoặc thêm WS event mới, hoặc chốt rằng message đã render sẽ nằm đó tới khi rolling window 50 tin purge đi.⏳ Chờ khách
Q-09RESPONSIVELayout mobile của panel chat[DCS-UI-02] khách không trả lời. (Open Item #5.)Không spec trong UC v1.⏳ Chờ khách
Q-10SOURCE_HYGIENEDesign pack 2026-08-26 chưa có trong repo — 6 state được cite nhưng không mở được từ References/Wireframe/Stage 2.2/.Cite là "client design pack, 2026-08-26", flag ở §10.📋 BA cần commit file

Phần 3 — Giả định BA tự đóng (không cần hỏi khách)

IDGiả địnhCăn cứGhi vào
A-01Thứ tự ưu tiên state của input row: is_live == false > Level 0 > chưa link Discord > enabled.Cùng dạng va chạm mà SIM_Community_Wireframe_Brief.md câu hỏi chặn #2 nêu ra. Lý do: (a) trạng thái phiên là nguyên nhân gần nhất và sẽ hết trước; (b) link Discord không nâng Level 0 lên Level 1, nên hiện copy "link Discord" cho SIM là chỉ dẫn sai.BR_4.14.1.2
A-02Chiều inbound không viết lại, chỉ reference sang UC_4.9.1.BR_4.9.1.12 đã tuyên bố ranh giới ngược lại (outbound thuộc UC_4.14.1). Hai panel là cùng 1 component → duplicate rule sẽ lệch nhau ngay lần sửa đầu tiên.BR_4.14.1.7
A-03Input giữ nguyên text khi bị rate limit / lỗi mạng, chỉ clear khi nhận 202.Khách không nói, nhưng bắt trader gõ lại 2.000 ký tự là phản UX; và 202 là tín hiệu duy nhất xác nhận đã vào queue.BR_4.14.1.5, §9 row 7
A-04Message đã 202 mà session kết thúc thì không bị huỷ — worker vẫn có thể post lên Discord sau khi panel đã đóng.Không có cơ chế cancel trong pipeline Redis + worker. Discord là system of record; panel chỉ là cửa sổ nhìn vào, và cửa sổ đóng theo session.BR_4.14.1.8
A-05CR-02 không áp cho ô input này (255/500 ký tự + inline error khi out-click + placeholder Enter [label]).Khách chốt cứng 2.000 ký tự block-on-limit và 4 chuỗi placeholder riêng → override CR-02 §2.2 và §2.3.BR_4.14.1.6
A-06Reconnecting… là chip cạnh header Live chat, không phải banner full-width trên list (brief SIM đề xuất banner).Design pack 2026-08-26 vẽ chip cạnh header. CR-14 chỉ quy định hành vi, không quy định vị trí.BR_4.14.1.9, §9 row 2
A-07Hai gate chỉ được evaluate lúc mount, không poll discord_user_id, không subscribe event link.Khách đã từ chối polling ở mọi chỗ khác trên trang này ([LB-TRIG-02], [LB-EP-02]). Trader link xong phải reload — chấp nhận được vì link Discord là hành động một lần.BR_4.14.1.1
A-08Whitespace-only không gửi được, coi như rỗng.CR-02 §2.1 — spaces-only input treated as empty. Đây là phần duy nhất của CR-02 còn áp dụng.BR_4.14.1.6, §9 row 7
A-09Message của chính người gửi không có style riêng (không "me bubble", không tick sent/delivered).Hệ quả trực tiếp của [DCS-BIZ-20]: feed read-only hoàn toàn, message quay về qua WS y hệt message người khác → không có thông tin nào để phân biệt ở tầng render.BR_4.14.1.4, §9 row 3–4
A-10Sau Digital Eviction, input chỉ khoá ở lần load kế tiếp; message gửi trong khoảng chờ sẽ vào queue rồi bị Discord từ chối và biến mất im lặng.Hệ quả của A-07 + [DL-BIZ-04] (revoke role nhưng không kick, không xoá discord_user_id).BR_4.14.1.11

Phần 4 — Impact sang tài liệu khác

Tài liệuImpactTrạng thái
UC_4.9.1_v1.mdBR_4.9.1.12Rule ghi *"owned by UC_4.14.1 — Discord Chat Stream (TWO-WAY), LIVE (not yet documented in this repo)". Nay đã có doc → cần đổi thành link tới UC_4.14.1_v1.md`.⏳ Chưa apply
UC_4.9.1_v1.mdBR_4.9.1.9Vị trí Read less lệch với design LIVE (Q-03a). Hai panel là cùng component → phải đồng bộ sau khi khách chốt.⏳ Chờ Q-03
UC_4.9.1_v1.mdBR_4.9.1.8Badge label: BR_4.9.1.8 chỉ ghi New Messages; design LIVE có thêm New Message số ít (Q-03b).⏳ Chờ Q-03
UC_4.5.2_v1.mdBR_4.5.2.8Đang ghi "Flow 38 monitors #the-pit and #verify" → phải thêm #live-broadcast-chat theo CR-20260818-002.⏳ Chưa apply (đã nêu trong CR summary)
UC_4.6.1-4.6.4/UC_4.6.4_v1.mdCùng lý do — file có tham chiếu Flow 38.⏳ Chưa apply
UC cho Flow 38 (WBS UC_9.16)Description WBS ghi "monitors #the-pit and #verify" → cần update channel list.⏳ Chưa apply
WBS UC_4.14.1Cột Mapping BE ghi POST /chat/send → khách đã đổi thành POST /community/chat/send ([DCS-EP-01]). Cột Reference ghi channel #broadcast-chat → tên đúng là #live-broadcast-chat.📋 BA cần sửa WBS
WBS UC_9.16 / estimate BEFlow 38 mở rộng 2 → 3 channel; thêm Q-02 (tách payload per-sender) và Q-05 (custom pre-post filter nếu AutoMod không áp cho bot) → có thể phát sinh line item BE mới.📋 Cần review estimate
References/Wireframe/Stage 2.2/Thiếu folder Community & Live Broadcast chứa 6 state design LIVE (Q-10).📋 BA cần commit
QnA_STAGE2_COMMUNITY_LIVE_BROADCAST.md[DCS-BIZ-18]Answer gốc ghi "the ability to send messages should be hidden" → đã bị supersede bởi design 2026-08-26 + quyết định BA (Q-01). Cần annotate tại chỗ để người đọc sau không mở lại tranh luận này.📋 BA cần annotate

On this page