StackTrading Docs

QnA Init Docs — UC_4.9.1 Discord Chat Stream (ONE-WAY) — SIM

QnA Init Docs — UC_4.9.1: Discord Chat Stream (ONE-WAY)

FieldValue
UCUC_4.9.1 — Discord Chat Stream (ONE-WAY) (Module: Community & Live Broadcast — SIM)
WBS CategorySTAGE 2.1. DASHBOARD SIM → folder dashboard_sim/
⚠️ RenumberWBS chưa có function này (chỉ có UC_4.5.2 — Discord Chat Stream TWO-WAY, thuộc STAGE 2.2: DASHBOARD LIVE). BA chỉ đạo 2026-08-10: Discord Chat Stream (ONE-WAY) → UC_4.9.1, Soft Breach - Daily Loss Limit Hit → UC_4.10.1. Renumber Soft Breach đã thực hiện xong (xem Phần 3).
Phạm vi yêu cầuBA yêu cầu viết cho SIM account. Khách confirm feed hiển thị cho cả SIM và LIVE, nhưng quyền gửi tin chỉ có ở LIVE Level 1+ ([C-9]) → UC này chỉ document chiều inbound (ONE-WAY: Discord → Dashboard) + trạng thái khoá vùng input. Chiều outbound (TWO-WAY) thuộc UC_4.14.1.
AgentAgent 2 — Challenger (Init Flow)
Ngày tạo2026-08-10
Trạng thái✅ BA review 2026-08-10 — bypass toàn bộ Phần 2, SRS viết thẳng theo Phần 1. UC_4.9.1_v1.md đã xuất bản.

Nguồn đã đối chiếu trước khi raise câu hỏi:

  1. References/CR/_CR_INDEX.md — quét 30 CR, không có CR nào ảnh hưởng Discord Chat Stream / Community.
  2. References/QnA from clients/03_STAGE2_DASHBOARD_EVALUATION/Community + Settings/Stage 2 - Dashboard & Fomula (Community).csv (ký hiệu [C-n] = dòng n) — dòng [C-9][C-16] (Discord Chat Stream) + [C-34] (Discord Server Details).
  3. Stage 2 - Dashboard & Fomula (Settings).csv (ký hiệu [S-n]) — phần Discord Linking, nguồn của link token và role assignment.
  4. References/Customer supplies/(Stage 2) Community & Live Broadcast/Discord Server Details.md — đặc tả channel #live-broadcast-chat, bảng Role/Badge, User Scopes.
  5. References/Customer supplies/RFQ_ Website and Dashboard Implementation V7.pdf §Community Page Implementation → Live Chat Feed; RFQ_ Stack Trading Prop Tech V7.pdf §2.3 Discord Bot & Message Queueing (Redis queue + Batch Worker).
  6. docs/BA/Common_rule/common_rules.md, list-toast-popup.md — không có rule sẵn cho chat feed / rolling window.
  7. docs/BA/UC_4.1-4.17/community/SIM_Community_Wireframe_Brief.md (brief SIM, duyệt nội bộ 2026-08-07) — FUNCTION 2 (B3, B4, CHAT-1 → CHAT-4).
  8. docs/BA/UC_4.1-4.17/dashboard_common/UC_4.5.1/UC_4.5.1_v1.md + QnA_init_docs.md — UC anh em cùng màn (Live Broadcast), nguồn của cơ chế is_live.
  9. docs/BA/UC_4.1-4.17/dashboard_common/UC_4.5.2/QnA_init_docs.md — UC anh em (The Pit), nguồn của quyết định renumber và của link-token flow.

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

#Nội dung đã chốtNguồn
1Chat Stream có tồn tại và hiển thị cho SIM. Không có locked/upsell state cho toàn bộ panel — chỉ vùng input bị khoá.[C-9]
2Nguồn dữ liệu: webhook DISCORD_CHAT_STREAM monitor channel #live-broadcast-chat. Public access của channel này là Read-Only → luồng tin nhắn globally visible với mọi người trên dashboard.[C-9], Discord Server Details.md §#live-broadcast-chat
3SIM ở trạng thái read-only. Post privileges (scope Read/Write) của #live-broadcast-chat chỉ dành cho role Associate Trader trở lên (Live Level 1+); SIM còn ở evaluation phase (Level 0) nên chỉ có Public (Read).[C-9], Discord Server Details.md §Compiled Discord Roles
4UI bắt buộc hiển thị live scrolling feed cho SIM. Chỉ text input box + nút Send bị khoá.[C-9]
5Chat panel mở và đóng đúng cùng thời điểm với video broadcast. Cả 2 component chỉ được điều khiển bởi cờ is_live từ GET /community/live-broadcast. Không có schedule/field riêng để mở chat sớm hoặc giữ chat mở muộn.[C-10]
6Khi broadcast chuyển Offline: chat panel xoá sạch active messages ngay lập tức và chuyển sang empty state — panel hiện No live chat, input field lock, nút Send disable, placeholder đổi thành Waiting for session.[C-10], [C-12] A10
7Hydrate lần đầu: khi component mount, FE thực hiện 1 request duy nhất nạp 50 tin gần nhất từ Redis cache để panel không load rỗng.[C-12] A8
8Không infinite scroll, không pagination. Giữ rolling DOM window cố định 50 tin gần nhất, purge node cũ để tiết kiệm bộ nhớ browser.[C-12] A9
9Auto-scroll: nếu scroll position đang neo ở đáy container → auto-scroll xuống khi có tin mới. Nếu user đã cuộn lên đọc lịch sử → giữ nguyên vị trí và hiện badge New Messages nhỏ, bấm được, ở đáy container.[C-12] A7
10Chiều inbound (Discord → Dashboard) stream qua WebSocket real-time 1:1. Logic batching chỉ áp cho chiều outbound (Dashboard → Discord). SIM chỉ dùng chiều inbound.[C-12] A11, RFQ_ Stack Trading Prop Tech V7.pdf §2.3
11WebSocket payload: { author, message_text, timestamp }.[C-14]
12Thứ tự tin nhắn theo FIFO dựa trên UTC receipt timestamp. Thứ tự được đảm bảo.[C-12] A13
13Nội dung: plain text + Unicode emoji. Không hỗ trợ image upload, GIF picker, custom Discord emoji, rich link preview. Custom Discord emoji render thành raw text string.[C-12] A5, [C-13]
14Không build emoji picker trong dashboard — user dùng bàn phím emoji của OS.[C-13]
15Không có @mention auto-complete và không có tag notification. Text chứa ký tự @ render như plain text.[C-12] A6
16Tin nhắn dài: Read more làm khung chat giãn ra (grow), và ở góc dưới bên phải xuất hiện read less để thu nhỏ lại. Là inline expand, KHÔNG phải modal, KHÔNG phải side panel.[C-12] A17 (Adam)
17Moderation chạy hoàn toàn server-side qua Discord AutoMod + backend bot. Tin bị flag/xoá bị drop ở tầng API, không bao giờ broadcast qua WebSocket → không có UI cho case này trên dashboard.[C-12] A14
18User không đổi được display name / avatar của mình trong dashboard UI. Toàn bộ identity đọc từ Discord profile đã link.[C-12] A3
19Backend không sinh custom hash hay handle riêng cho display name.[C-12] A2
20Badge 38 online đếm member online của Discord channel, KHÔNG phải số WebSocket connection tới dashboard.[C-12] A15
21Max message length 2.000 ký tự (khớp giới hạn Discord), enforce bằng thuộc tính maxlength chuẩn của HTML. Cấm build component character counter riêng. (Áp cho vùng input — SIM không dùng, ghi nhận để UC_4.14.1 reference.)[C-12] A4
22Endpoint gửi tin chính thức: POST /community/chat/send (khách chỉ đạo sửa WBS từ /chat/send sang path này). Rate limit 1 request/giây/user ở tầng endpoint. (Outbound — không thuộc scope UC này.)[C-14]
23Bị throttle outbound → hiện inline UI notification Message rate limit reached. Please wait a moment.; Enter gửi tin, Shift+Enter xuống dòng. (Outbound — không thuộc scope UC này.)[C-12] A12, [C-13] A3
24#the-pit#live-broadcast-chat2 text channel khác nhau trong cùng 1 Discord server. #live-broadcast-chat là kênh riêng cho livestream và là nguồn feed cho chat UI.[C-34]
25Chưa link Discord → quyền gửi tin phải bị ẩn (hidden, không chỉ disabled).[C-12] A18 (Adam)

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

UC_4.9.1 — Discord Chat Stream (ONE-WAY)

⏭️ BA chỉ đạo 2026-08-10 — bypass toàn bộ bảng dưới. SRS được viết thẳng từ bộ answer khách đã trả lời trong Stage 2 - Dashboard & Fomula (Community).csv (Phần 1) + wireframe SIM đã duyệt. Bảng dưới giữ lại làm hồ sơ các điểm mâu thuẫn/để ngỏ đã phát hiện, không dùng làm nguồn khi viết docs.

Ghi chú: A-01A-02 đã được wireframe SIM khách duyệt trả lời (input disabled + locked, có icon khoá, nút Send vẫn hiện nhưng disabled, placeholder Pass the Associate Track to unlock chat) → viết theo wireframe, không cần giả định. A-06 (ngưỡng ký tự truncate) là điểm chính khách để ngỏ nên BR_4.9.1.9 chỉ mô tả hành vi, để trống con số.

IDCâu hỏiGiả định (BA/QC đề xuất)BA chốt (ưu tiên cao nhất)Trạng thái
A-01🔴 Vùng input của SIM: hidden hay disabled + locked, và dùng copy nào? Khách đưa 2 phương án hiển thị × 2 phương án copy nhưng không chốt cái nào. Nguyên văn: "the text input box and 'Send' button must be either completely hidden or disabled with a locked state. Use the placeholder text 'Pass the Associate Track to unlock chat' or 'Chat unlocks at Level 1'." [C-9] → đây là hành vi chính của UC này, không chốt thì không viết được Screen Description.Chọn disabled + locked (input không focus được, nút Send disabled) + copy Pass the Associate Track to unlock chat.Lý do: (a) ẩn hẳn input khiến SIM không hiểu vì sao mình không gửi được, còn locked state tự giải thích lý do; (b) copy này khớp ngôn ngữ nút card My POD Pass the Associate Track to Unlock, giữ nhất quán toàn màn Community; (c) giữ nguyên chiều cao panel → không vỡ grid 2×2 (nguyên tắc khách đã áp 2 lần [C-2], [C-17]).Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-02🔴 [INTRA_RULE_CONTRADICTION] SIM + chưa link Discord → vùng input hiện gì? Hai luật của khách chồng nhau và cho ra 2 kết quả khác nhau:(a) [C-9] — SIM → "hidden or disabled with a locked state" + placeholder Pass the Associate Track to unlock chat.(b) [C-12] A18 — chưa link Discord → "the ability to send messages should be hidden (hidden, not just disabled)".Phần lớn trader SIM rơi vào cả hai cùng lúc (token link gửi qua email onboarding, nhiều người bỏ qua). Nếu chọn (a) disabled+locked mà (b) bắt hidden thì 2 luật loại trừ nhau.Luật SIM [C-9] thắng. Với SIM, việc link Discord không mở được quyền gửi (vẫn Level 0 → vẫn Public (Read)) → nêu lý do "chưa link Discord" là sai nguyên nhân, gây hiểu nhầm rằng chỉ cần link là chat được. Luật (b) chỉ áp cho LIVE Level 1+ chưa link (thuộc UC_4.14.1). SIM luôn hiện đúng 1 state: disabled + locked + copy của A-01, bất kể discord_user_id null hay không.Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-03🔴 [INTRA_RULE_CONTRADICTION] Trader SIM chạy /link được gán role gì — và role đó có mở quyền gửi tin không?(a) [S-22] — bot verify token → ghi discord_user_idgán role Associate Trader.(b) [C-9] + Discord Server Details.md#live-broadcast-chat scope: Associate Trader trở lên = Read/Write; bảng role ghi Associate Trader = Levels 1 to 5 (tức đã LIVE).→ Nếu SIM (Level 0) chạy /linkthật sự nhận role Associate Trader thì theo (b) họ có Read/Writetrái thẳng với [C-9] "SIM read-only". Bảng role còn có 1 role Associate riêng ("paid track status but still in the associate phase") — nhiều khả năng đây mới là role đúng cho SIM.Role gán cho SIM khi /linkAssociate (membership group của giai đoạn evaluation), KHÔNG phải Associate Trader (Levels 1–5). Chỉ Associate Trader trở lên mới có Read/Write ở #live-broadcast-chat. → Dashboard khoá vùng input dựa trên level/account type của trader (level == 0 / SIM), không dựa trên discord_user_id.⚠️ Nếu BA xác nhận giả định này → cần sửa lại [S-22] và ghi nhận cho UC_4.6.2 (Discord Linking) + Flow 1 Step 6.Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-04🔴 Tên hiển thị trong bubble lấy từ nguồn nào? Khách mâu thuẫn ngay trong cùng 1 ô CSV, và chính khách ghi chú yêu cầu BA cross-check:(a) [C-12] A1–A3 — "the user's exact Discord server nickname passed via the author field… Roles (Coach/Mentor) are appended automatically based on Discord role metadata."(b) [C-12] A16 (Adam) — "There should be a symbolic link between the trader details and their discord details. Using that link with its associated trader, display who the message is from." → tức lấy từ profile trader phía StackTrading.→ Design đang có 2 kiểu bubble: Trader 0x4F (ẩn danh) và Coach T. (có title) — không biết nguồn nào sinh ra kiểu nào thì không viết được rule hiển thị.(a) thắng — author = Discord server nickname + role suffix tự động từ Discord role metadata. Lý do: đây là nguồn duy nhất thực sự có trong WebSocket payload đã chốt { author, message_text, timestamp } [C-14]; ý (b) của Adam vẫn được thoả mãn vì discord_user_id chính là symbolic link giữa trader và Discord — và cả 2 câu đều thống nhất user không tự đặt được title Coach [C-12] A3. Kiểu Trader 0x4Fnickname do chính user đặt trên Discord, không phải hash do hệ thống sinh ([C-12] A2 đã phủ định việc sinh hash).Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-05🔴 [CROSS_UC_CONFLICT với UC_4.5.1] Chat đóng lúc nào khi Ops tắt broadcast giữa lúc user đang xem?(a) [C-10]"the chat panel immediately clears the active messages and transitions to the empty state" khi broadcast chuyển offline.(b) BR_4.5.1.3 (BA đã chốt 2026-08-10) — FE chỉ gọi GET /community/live-broadcast đúng 2 lần (page load + countdown về 0), cấm polling và cấm WS channel riêng → "session end is not auto-detected mid-view".→ Với ràng buộc (b), FE không có kênh nào để biết is_live vừa tắt → chữ "immediately" ở (a) không thể thực hiện được.Áp đúng cơ chế đã chốt ở UC_4.5.1: chat panel chuyển sang empty state cùng thời điểm với video — tức ở lần load trang / điều hướng vào Community kế tiếp, không phải realtime. Chữ "immediately" trong [C-10] được hiểu là "ngay khi UI nhận biết được trạng thái offline", không phải "trong vòng vài giây kể từ lúc Ops bấm nút".Phương án thay thế (cần khách duyệt, phát sinh CR): backend gửi 1 WS event BROADCAST_OFFLINE trên chính channel DISCORD_CHAT_STREAM đã có — không phải WS channel mới nên không vi phạm ràng buộc [C-2].Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-06Ngưỡng ký tự để bắt đầu truncate Read more là bao nhiêu? Khách xác nhận hành vi nhưng để ngỏ con số: "Still open: the exact character threshold at which a message gets truncated." [C-12] A17. Kết hợp với giới hạn 2.000 ký tự/tin [C-12] A4 → 1 tin dài nhất có thể chiếm rất nhiều dòng.Truncate ở 4 dòng hiển thị (~280 ký tự), tính theo số dòng chứ không theo số ký tự cứng — vì chiều rộng panel thay đổi theo breakpoint, ngưỡng ký tự cố định sẽ cho kết quả khác nhau giữa desktop và mobile.CLOSED 2026-08-24 — khách defer cho Sotatek quyết ("I'll defer to you"), đề xuất bên trái được duyệt. Chốt: clamp 4 dòng render ở mọi breakpoint; ~280 ký tự chỉ là mốc tham chiếu desktop cho khách hình dung + dựng test data, không phải cơ chế enforce. Read more chỉ hiện khi body thực sự bị cắt (đo scroll height > visible height, re-check khi resize) — cấm quyết định bằng đếm ký tự, nếu không sẽ có case tin vừa đúng 4 dòng ở màn rộng vẫn mọc nút trỏ vào chỗ không bị cắt. Chọn 4 dòng vì 2-3 dòng sẽ bắn Read more lên cả tin chat thường (noise), còn >4 dòng thì 1 tin 2.000 ký tự (~30 dòng) đã nuốt gần hết panel. Đã viết vào BR_4.9.1.9, §5 step 5, §9 row 3 + row 4. ⚠️ Message defer của khách chưa được log vào References/CR/.✅ Closed (BA, 2026-08-24)
A-07Read more làm "chat window grow" — giãn theo chiều nào? Khách nói "makes that chat window grow" [C-12] A17, tức cả khung chat chứ không riêng bubble. Trong grid 2×2, chat nằm cùng hàng với Live Broadcast → cần chốt: khung chat đẩy cao cả hàng (video giãn theo / lệch hàng), hay giãn nội dung trong chiều cao cố định + cuộn nội bộ?Giãn trong chiều cao cố định + cuộn nội bộ. Cùng nguyên tắc "so the UI grid does not break" khách đã áp cho case TBD [C-2] và cho card My POD [C-17]. Bubble mở rộng hết nội dung, khung chat không đổi chiều cao, user cuộn trong panel; read less ở góc dưới phải khung chat để thu lại.CLOSED 2026-08-24 — chốt cùng lượt với A-06, đề xuất bên trái được duyệt. Panel giữ nguyên chiều cao, cuộn nội bộ: video Live Broadcast không resize, card My POD phía dưới không bị đẩy, grid 2×2 không xê dịch. Giải quyết mâu thuẫn giữa "makes that chat window grow" [C-12] A17 và "so the UI grid does not break" [C-2] nghiêng về vế sau — "grow" hiểu là vùng đọc nở ra trong panel, không phải panel nở ra. Đây cũng là điều kiện để read lessgóc dưới phải hoạt động được: cần biên panel cố định thì nút mới neo được. Chốt kèm 4 case phái sinh, đã viết vào BR_4.9.1.9: (1) 1 tin expand tại 1 thời điểm — expand tin B thì tin A tự collapse, khớp việc khách đặt 1 nút read less cho cả khung chat chứ không per-bubble; (2) read less sticky, luôn thấy kể cả khi cuộn giữa tin dài; (3) expand không được kích hoạt auto-scroll của BR_4.9.1.8 — giữ nguyên vị trí đỉnh tin vừa mở, nếu không màn sẽ nhảy mất đúng chỗ vừa bấm; (4) tin đang expand bị purge khỏi rolling window 50 → state chết theo, không warning, không giữ lại.✅ Closed (BA, 2026-08-24)
A-08🔴 Chat panel thuộc màn nào — Community Page hay Command Center? [C-34] nói rõ: #the-pit "feeds the Community Page", còn #live-broadcast-chat "feeds the chat UI specifically on the Command Center". Nhưng RFQ_ Website and Dashboard Implementation V7.pdf đặt Live Chat Feed trong mục §Community Page Implementation, và design/wireframe cũng đặt chat panel cạnh video trên Community Page. → Ảnh hưởng thẳng tới §2 Trigger và §3 Pre-conditions của UC. (Trùng câu hỏi treo #3 trong SIM_Community_Wireframe_Brief.md.)Community Page thắng. Lý do: (a) RFQ Dashboard V7 — tài liệu đặc tả UI chính thức — xếp Live Chat Feed vào §Community Page Implementation; (b) [C-10] chốt chat mở/đóng cùng cờ is_live với video, mà video nằm trên Community Page → tách 2 màn sẽ phá vỡ ràng buộc đồng bộ này; (c) design khách đã duyệt đặt chat cạnh video. Câu "on the Command Center" của [C-34] được hiểu là cách gọi chung cho Dashboard, không phải chỉ định 1 màn khác.Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-09Badge online count đếm phạm vi nào, và lấy dữ liệu từ đâu? [C-12] A15 nói đếm member online của chính channel đó, poll ~1 phút. Nhưng ở card The Pit, đúng vấn đề này đã được đóng ngược lại: "The metrics shown here can reflect the entire Discord server, not just The Pit channel" — vì widget.json chỉ trả presence_count server-wide, không expose số liệu theo channel [C-37]. → Badge chat gặp đúng giới hạn kỹ thuật đó, nên con số per-channel nhiều khả năng cũng không lấy được.Áp cùng kết luận đã chốt cho The Pit: badge hiển thị presence server-wide, lấy từ endpoint GET /community/server-status (backend caching proxy, Redis TTL 30s) đã tạo cho UC_4.5.2 — không gọi Discord trực tiếp từ browser, không tạo cơ chế poll thứ hai. Nhãn hiển thị nên đổi thành Members online cho đúng bản chất (đồng bộ với đề xuất A-02 của UC_4.5.2).Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-10SIM đang Soft Breach / Hard Breach / đã fail Associate Track — chat feed có bị khoá thêm không? Trader vẫn login và vẫn vào được Community Page (Ref: UC_4.10.1, UC_4.10.2). Thêm 1 lớp: Flow 7 (Digital Eviction) chạy POST /discord/revoke-all-roles revoke hết role [S-20] → trader mất role nhưng vẫn ở trong server. Không dòng nào trong CSV nói chat bị ảnh hưởng. (Trùng câu hỏi treo #4 trong SIM_Community_Wireframe_Brief.md.)Không khoá gì thêm. SIM vốn đã read-only ở mọi trạng thái account → breach không làm thay đổi state nào của panel này. Feed vẫn hiển thị đầy đủ; vùng input vẫn ở đúng state A-01. Nhất quán với BR_4.5.1.1 (BA đã chốt: breach chỉ chặn giao dịch, không chặn nội dung community).Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-11SIM read-only có giữ đủ các affordance ĐỌC không? Khách chỉ khoá quyền gửi (write), không nói gì về thao tác đọc. Cần chốt rõ để không vẽ/viết thiếu: badge New Messages ([C-12] A7), Read more / read less ([C-12] A17), cuộn lịch sử trong rolling window 50 tin ([C-12] A9).SIM giữ đầy đủ, y hệt LIVE. Đây là thao tác đọc, không nằm trong phạm vi bị khoá của [C-9] (chỉ nói text input box và nút Send). Ghi rõ trong SRS để tránh hiểu nhầm "read-only = panel tĩnh".Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-12Phạm vi UC: có document chiều outbound trong UC_4.9.1 không? Các nội dung khách đã chốt nhưng chỉ áp cho người gửi được tin: POST /community/chat/send + rate limit 1 req/s [C-14], toast Message rate limit reached. Please wait a moment. [C-12] A12, Enter / Shift+Enter [C-13] A3, maxlength=2000 [C-12] A4, Batch Worker + Redis queue.Không viết chi tiết outbound vào UC_4.9.1 — UC này là ONE-WAY (inbound only). Các mục trên ghi ở Phần 1 của QnA làm nguồn cho UC_4.14.1 (Discord Chat Stream TWO-WAY — LIVE). UC_4.9.1 chỉ nêu 1 câu ranh giới trỏ sang UC_4.14.1, tuân thủ Single Source of Truth.Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)
A-13Mất kết nối WebSocket / đang reconnect — panel hiển thị gì? Tài liệu không spec. Đây là state SIM gặp thường xuyên hơn LIVE vì SIM chỉ nhận inbound, cả phiên chỉ phụ thuộc vào 1 kết nối WS duy nhất.Hiện banner mảnh trong panel (phía trên list bubble): Reconnecting…. List tin nhắn cũ giữ nguyên trên màn, không xoá, không phủ mờ — vì xoá sẽ bị nhầm với empty state No live chat của case Offline [C-10]. Tự retry, không bắt user reload trang.Bypass — BA chỉ đạo 2026-08-10: không cần chốt, viết SRS thẳng theo bộ answer khách đã trả lời trong CSV.⏭️ Bypass (BA, 2026-08-10)

Phần 3 — Cross-UC & Missing Dependency (thông tin cho Agent 3)

LoạiNội dung
[RENUMBER — đã thực hiện]Theo chỉ đạo BA 2026-08-10: Soft Breach - Daily Loss Limit Hit: UC_4.9.1 → UC_4.10.1. Đã đổi tên folder + file + toàn bộ anchor/BR ID nội bộ (BR_4.9.1.1BR_4.9.1.5BR_4.10.1.x) và cập nhật cross-ref tại: dashboard_sim/index.md, UC_4.10.2_v1.md §5, UC_4.7.5_v1.md §1+§8, UC_4.7.5/QnA_init_docs.md, UC_4.5.1_v1.md BR_4.5.1.1, UC_4.5.1/QnA_init_docs.md A-09, common_rules.md §Changelog.
[ORPHAN_UC — ✅ đã giải quyết 2026-08-10]Trước đây UC_4.9.1 (Discord Chat Stream ONE-WAY, SIM) chưa tồn tại trong WBS. WBS mới References/WBS/[BA Internal] Stacktrading.csv đã có dòng này: UC_4.9.1 — category STAGE 2.1. DASHBOARD SIM, module Community & Live Broadcast, function Discord Chat Stream (ONE-WAY). Bản LIVE (TWO-WAY) nay là UC_4.14.1.
[RENUMBER — đã hoàn tất 2026-08-10]Toàn bộ Failure & Recovery (SIM) đã về chung dải 4.10.x: UC_4.10.1 Soft Breach · UC_4.10.2 Hard Breach · UC_4.10.3 Scenario A Sim Reset · UC_4.10.4 Time Extension. Va chạm mã cũng đã hết: Settings — Account Actions: Reset Associate Track nay là UC_4.11 (không còn là UC_4.10). WBS mới References/WBS/[BA Internal] Stacktrading.csv đã phản ánh đủ.
[CROSS_UC_CONFLICT][C-10] ("immediately clears") mâu thuẫn với BR_4.5.1.3 mà BA đã chốt — xem A-05. Đây là điểm chặn: hai UC cùng màn không được mô tả 2 cơ chế khác nhau cho cùng 1 sự kiện.
[CONTRADICTS_SOURCE]Discord Server Details.md §#live-broadcast-chat ghi "Integrates directly with the Command Center UI", trong khi RFQ_ Website and Dashboard Implementation V7.pdf đặt Live Chat Feed trong §Community Page Implementation — xem A-08.
[MISSING_DEPENDENCY]UC_4.14.1 (Discord Chat Stream TWO-WAY — LIVE), UC_4.6.2 (Settings — Discord Linking), UC_4.14.2 (Pod Mentorship) chưa có SRS. UC_4.5.2 (The Pit) mới có QnA, chưa có SRS. UC_4.9.1 sẽ tham chiếu bằng plain text kèm ghi chú "not yet documented in this repo", đúng pattern đang dùng ở UC_4.1.1-4.1.5_v1.md.
Cross-UC ràng buộc — is_liveCờ is_live và endpoint GET /community/live-broadcast thuộc sở hữu của UC_4.5.1. UC_4.9.1 tham chiếu, không viết lại contract của endpoint (Single Source of Truth).
Cross-UC ràng buộc — NewsquawkBR_4.1.4.4 quy định Newsquawk auto-off khi user vào màn Community → UC_4.9.1 tham chiếu, không viết lại. Rule thuộc cấp màn Community, không phải cấp chat panel.
Cross-UC ràng buộc — server presenceNếu A-09 được chốt theo giả định, badge online count dùng chung endpoint GET /community/server-status do UC_4.5.2 (The Pit) sở hữu → UC_4.9.1 reference, không định nghĩa lại cơ chế cache/poll.
Điểm vàoSidebar tab Community (Ref: UC_4.1.2 §2 Screen Description) là điểm điều hướng duy nhất tới màn chứa panel này.
Không thuộc scope UC nàyLive Broadcast player (UC_4.5.1), card The Pit (UC_4.5.2), card My POD (UC_4.14.2), toàn bộ chiều outbound (UC_4.14.1), màn LOAD-1 cấp trang, và câu hỏi treo #1/#6 trong SIM_Community_Wireframe_Brief.md.
WireframeReferences/Wireframe/Stage 2/Community & Live Broadcast/ — state B3 (chat có tin, bản LIVE gửi được) và B4 (No live chat lúc Offline) đã có. State CHAT-1 (SIM read-only lúc Live), CHAT-2 (badge New Messages), CHAT-3a/3b (Read more / read less), CHAT-4 (reconnect) chưa có file wireframe trong repo — Figma node 1767-348308.
Metadatagit config user.name = QuynhAnh12không có trong BA Roster của project_context.md. Agent 3 sẽ lấy BA in Charge = Anh Hoang (khớp UC_4.5.1 / UC_4.5.2 cùng module Community). BA xác nhận hoặc sửa lại tên.

On this page