QnA Init Docs — UC_8.2.1 (Flow 10 - Pod Joining)
UC liên quan: UC_8.2.1 — Flow 10: Pod Joining
Trigger: Flow 3 (Live Onboarding) hoàn tất → gửi mời; trader gửi form Style → ghép pod
Agent tạo: Agent 1 (Auditor) + Agent 2 (Challenger), theo system_init_workflow.md — Init Flow
Ngày tạo: 2026-10-12 · Phiên bản: v1
BA phụ trách: Anh Hoang
Ghi chú: Thay thế bản QnA_init_docs ngày 2026-10-09 (đã xoá cùng UC cũ). Câu hỏi cũ được mang sang, ghi ID cũ trong ngoặc. SRS chưa viết — chờ BA review file này (PAUSE Gate).
0. Compliance Checklist (Agent 1 — Auditor)
| # | Hạng mục | Kết quả | Ghi chú |
|---|---|---|---|
| 1 | Source pre-flight: _CR_INDEX.md → _SOURCE_MANIFEST.yaml → _QNA_INDEX.md | ✅ | CR: CR-20260818-001 (Flow 7 Pod Impact — gián tiếp). QnA: QnA_STAGE6_POD_SYSTEM_FLOW10_11.md v1.7, QnA_STAGE2_COMMUNITY_LIVE_BROADCAST.md (POD-DEF-01, POD-BIZ-01/14). Nguồn gốc: Zapier Integration V7.pdf §Flow 10, §3.1 Table C, §3.3 Table E · RFQ_ Stack Trading Prop Tech V7.pdf §Match Pod Mentor, §Get Pod Data, §Create Pod Channel |
| 2 | CR-08 Timestamp | ✅ | Áp cho pod_join_date, mốc vào waitlist (Join_Date), Plan_Due |
| 3 | CR-18 Webhook no-op | ✅ | Áp cho: gửi form trùng, discord_user_id IS NULL, thiếu kênh pod |
| 4 | CR-15.2 Slack | ✅ | Khách ghi kênh "Operations" / #operations / #risk-ops — xem P-01 |
| 5 | WBS: UC_ID tồn tại | ✅ | UC_8.2.1, category STAGE 6: CAREER PATH & PROFESSIONALIZATION. WBS ghi PiC huyen.dinh2 — tài liệu ghi Anh Hoang (xem §7 việc 1) |
| 6 | Folder | ✅ | docs/BA/UC_8.1-8.5/UC_8.2.1/ — theo tiền lệ UC_8.1.1 |
| 7 | [MISSING_DEPENDENCY] | ⚠️ | UC_8.2.2 → UC_8.2.8 đang viết cùng đợt. UC_8.2.9 (Flow 15A), UC_8.2.10 (Flow 15B) chưa có SRS → chỉ ghi ID dạng text |
| 8 | [CROSS_UC_CONFLICT] | ⚠️ | Khớp UC_4.14.2 (BR_4.14.2.4, BR_4.14.2.13 sự kiện 1–3) và UC_8.1.1 (Stage 2 bước 3 — Pod Graduation). Lệch với Discord Server Details.md — xem C-01 |
| 9 | [INTRA_RULE_CONTRADICTION] | ⚠️ | Welcome ping công khai chứa link form cá nhân — xem A-07 |
| 10 | Spec V7 bị QnA override | ✅ | Xem §2 |
1. Đã chốt từ QnA / CR / BA — không hỏi lại
| ID | Nội dung đã chốt | Nguồn |
|---|---|---|
| Q-01 | Pod chỉ cho LIVE. Mentee Level 1–6; Level 7 = tốt nghiệp, không được làm mentee (2 vai trò loại trừ nhau) | POD-DEF-01, POD-JOIN-27, POD-BIZ-14 |
| Q-02 | Pod_Mentorship_Invite gửi qua AWS SES, Zapier dispatch; link gắn user_id làm Typeform hidden field; lời mời không hết hạn, không submit thì trade bình thường không có pod | POD-JOIN-05/15/24, POD-JOIN-13 (partial) |
| Q-03 | Form Style trên Typeform, Sotatek dựng; chỉ hỏi Style (1 trong Scalping, Day Trading, Swing Trading, Algorithmic Trading); Asset_Class đọc từ Users; Style lưu vào profile mentee trong Users, không vào Table E; không có UI Dashboard (Day 2) | POD-JOIN-01/02/03/10, POD-XF-08 |
| Q-04 | Form cũng mở được từ nút [Join a POD] trên thẻ My POD (join_form_url có sẵn user_id) | UC_4.14.2 BR_4.14.2.4 |
| Q-05 | Submit lại khi đã có pod / đang Waitlist → 200 OK, drop | POD-JOIN-16 |
| Q-06 | Waterfall: Asset_Class bắt buộc → Style ưu tiên → Current_Count thấp nhất → Leader_ID ASC. Không dùng điểm survey/engagement. Không leader cùng Asset còn suất → Waitlist | POD-JOIN-06/07/08/09 |
| Q-07 | Style khớp khi Style mentee nằm trong danh sách Style của leader | BA chốt 2026-10-09 (UC_8.2.8 cũ A-15) |
| Q-08 | Chỉ leader Status = Active; so với Max_Capacity per-leader (Table E); Pod_Max_Capacity (Table C) chỉ là default khi tạo leader | POD-JOIN-19, POD-JOIN-18 (partial) |
| Q-09 | Row-locking khi tranh suất cuối; người thua → waitlist + nhận email | POD-JOIN-17 |
| Q-10 | Matching + ghi DB chạy native Node.js (bỏ Python Script) | POD-JOIN-04/05 |
| Q-11 | Gán pod = set pod_leader_id + Current_Count + 1 cùng lúc; ghi pod_join_date; mở Plan_Due = lúc gán + 72 giờ liên tục | POD-JOIN-03, POD-FDBK-09, POD-PLAN-07 |
| Q-12 | Chỉ Middleware được ghi Current_Count | BA chốt 2026-10-09 (UC_8.2.8 cũ A-17) |
| Q-13 | Suất đang giữ cho trader waitlist được tính vào Current_Count → Flow 10 tự không thấy suất đó. Flow 10 giữ nguyên, không cần sửa | POD-WAIT-03/04 |
| Q-14 | Pod_Assignment_Confirmation do Klaviyo gửi (Middleware emit event), bắt buộc có link Trading Plan + nhắc liên kết Discord | POD-JOIN-20/22, POD-XF-07 |
| Q-15 | Chưa liên kết Discord → vẫn gán pod; /manage-discord-role drop (CR-18) | POD-JOIN-20 |
| Q-16 | Welcome ping công khai trong kênh pod (copy T-02); kênh thiếu / archived → drop + Slack (copy T-01), mentee vẫn được gán | POD-JOIN-21/22 |
| Q-17 | Không match → status Waitlist + Pod_Waitlist_Notification (Klaviyo, gửi 1 lần). Cách lưu waitlist do BE tự quyết | POD-JOIN-09/17, POD-WAIT-15, BA chốt UC_8.2.8 cũ A-09, A-16 |
| Q-18 | Không self-service đổi / rời pod; đổi qua Support → /admin-pod-reassignment (cooldown 30 ngày); rời kênh Discord ≠ rời pod, vào lại qua ticket | POD-JOIN-12/26/28 |
2. Spec V7 bị QnA override — đã áp, không cần BA quyết
| ID | Spec V7 | QnA (thắng) |
|---|---|---|
| O-01 | Flow 10 Step 2 form hỏi Asset_Class + Style · Match Pod Mentor input có asset_class | Bỏ Asset_Class khỏi form và input, đọc từ Users (POD-JOIN-03). BA xác nhận lại 2026-10-13 (client sheet Flow 10 chưa gạch Asset_Class) |
| O-02 | Match Pod Mentor Criteria: khớp cả Style + Asset | Style chỉ là ưu tiên (POD-JOIN-06) |
| O-03 | Step 3 "Python Script" | Native Node.js SQL (POD-JOIN-04) |
| O-04 | Step 5 status Pod_Waitlist + tăng Pod_Waitlist_Count | Waitlist, không có bộ đếm; cách lưu do BE quyết (POD-WAIT-15). BA xác nhận lại 2026-10-13 |
| O-05 | QnA round 1: Pod_Assignment_Confirmation "sent via Zapier" | Klaviyo (round 2 — POD-JOIN-20/22) |
3. Conflict — cần BA quyết
4. Câu hỏi & giả định (Agent 2 — Challenger)
| ID | Câu hỏi | Giả định (BA/QC đề xuất) | BA chốt (ưu tiên cao nhất) | Trạng thái |
|---|---|---|---|---|
| S-01 | Bảng phân chia sở hữu nội dung cho 8 UC Pod — để mỗi rule chỉ viết 1 lần, UC khác link sang. Xem bảng §4.1 bên dưới. | Áp đúng bảng §4.1. | ⏳ Chờ BA 🔴 | |
| A-01 | Đường đi của form Style (cũ: A-01): Typeform → Zapier Flow 10 → Middleware Match Pod Mentor → Zapier gọi /manage-discord-role? Hay Typeform bắn thẳng vào Middleware (như survey Flow 10.4) và Middleware tự gọi Discord bot? | Qua Zapier (khớp V7 Flow 10 + POD-JOIN-20 "khi Zapier gọi /manage-discord-role"). | Typeform → Zapier → Zapier gọi Match Pod Mentor API → trả Assigned thì Zapier gọi tiếp API Manage Discord Role. BA chốt 2026-10-15. | ✅ Đã chốt |
| A-02 | Ai được gửi form Style (cũ: A-02 + UC_8.2.8 cũ N-04). Link email không hết hạn nên người không còn đủ điều kiện vẫn gửi được. POD-JOIN-16 mới chỉ drop khi đã có pod / đang Waitlist. Còn: Pending_Pod_Confirmation, Inactive_Hold, Waitlist_Ghost, Level ≥ 7, đã terminate/resign. | Drop (CR-18): đã có pod_leader_id, status Waitlist / Pending_Pod_Confirmation / Inactive_Hold, Level ≥ 7, tài khoản LIVE không còn hoạt động. Cho gửi lại: Waitlist_Ghost → chạy matching như người mới, nếu vào waitlist thì cuối hàng (Join_Date mới). | Bỏ qua (200 OK, không ghi) như trường hợp đã có pod / Waitlist: Pending_Pod_Confirmation, Inactive_Hold, Level ≥ 7, LIVE không còn hoạt động. Waitlist_Ghost ghép như người mới, vào waitlist thì cuối hàng. BA chốt 2026-10-15. | ✅ Đã chốt |
| A-03 | Welcome ping khi chưa liên kết Discord (cũ: A-03): ping cần <@discord_user_id> để tag. | Bỏ welcome ping, không gửi Slack. Mentee nhận link Trading Plan qua email Klaviyo. | Vẫn đăng welcome ping — tin này đồng thời báo Pod Leader có mentee mới. discord_user_id rỗng → dùng first_name last_name dạng chữ thường thay tag. Khách trả lời (POD-JOIN-29). | ✅ Đã chốt |
| A-04 | Liên kết Discord sau khi đã được gán pod (cũ: A-04): /manage-discord-role đã bị drop lúc gán → không ai gán lại role Pod Member → mentee không vào được kênh pod. | Khi trader liên kết Discord thành công, Middleware kiểm tra pod_leader_id; có pod → gán role Pod Member (cùng chỗ đồng bộ role theo Level — UC_8.1.1 "Late-linking role sync"). Không gửi lại welcome ping. | Trader liên kết Discord thành công → Middleware kiểm tra pod_leader_id; có pod → gán role Pod Member. BA chốt 2026-10-15. | ✅ Đã chốt |
| A-05 | Gán thành công nhưng bước sau lỗi (cũ: A-06): emit Klaviyo lỗi, /manage-discord-role lỗi (không phải do thiếu Discord). [POD-XF-04] | Không rollback việc gán (DB là nguồn chuẩn). Lỗi Zap → cơ chế "Zap Error" (UC_8.2.2 P-02). Emit Klaviyo từ Middleware lỗi → retry 3 lần, vẫn lỗi thì log + Slack Ops. | Không rollback. Lỗi → 1 Slack alert #ops-general (khách ghi #operations, map theo P-01): "Pod Assignment Downstream Error: Failed to dispatch Klaviyo/Discord event for User [user_id] in Pod [pod_leader_id]." Retry 3 lần đẩy sang Day 2 (trừ khi có helper dùng chung). Discord lỗi → 200 OK để Zap không báo thêm "Zap Error". Khách trả lời 2026-10-22. | ✅ Đã chốt |
| A-06 | Trader có cả Futures và Forex [POD-JOIN-11]: 1 pod hay 2 pod, lấy asset nào? | 1 pod duy nhất; lấy Asset_Class của tài khoản LIVE đang hoạt động đầu tiên. | Không áp dụng — mỗi trader chỉ có 1 Asset_Class (Zapier Integration V7.pdf Flow 1 lưu 1 giá trị theo nền tảng chọn lúc checkout). BA chốt 2026-10-15. | ✅ Đã chốt |
| A-07 | [INTRA_RULE_CONTRADICTION] Link form trong welcome ping công khai (chuyển từ UC_8.2.2 cũ A-01). T-02 post công khai trong kênh pod kèm [Typeform_Link]. Link phải có user_id của mentee mới (hidden field) → ai trong kênh cũng bấm và nộp thay được (kích hoạt đóng Plan_Due, email cho leader). Mâu thuẫn với nguyên tắc "map bằng hidden field để không nhầm người" (POD-JOIN-15). | Welcome ping dùng câu nhắc "check your email for your Trading Plan link", không chứa link; link có user_id chỉ đi qua email riêng (Pod_Assignment_Confirmation, email SLA). Cần khách đổi copy T-02. | Không cần chặn, giữ link trong T-02. Form nhúng trang wrapper có đăng nhập trên stacktrading.com, user_id lấy từ phiên đăng nhập (CHR-127) → người khác bấm link chỉ mở form của chính họ. Kèm theo: chặn gửi lần 2 ở form Style / Trading Plan / Mentee Survey. Khách trả lời 2026-10-22. | ✅ Đã chốt |
| A-08 | Điều kiện gửi mời [POD-JOIN-14] (cũ: A-08): Flow 3 hoàn tất, account_status = Active_L1_DMA, hay sau giao dịch LIVE đầu tiên? | Flow 3 hoàn tất (ngay sau email Live_Onboarding_Level_1), đúng V7. | Gửi ngay khi Flow 3 hoàn tất. BA chốt 2026-10-15. | ✅ Đã chốt |
| A-09 | Registry rỗng lúc go-live [POD-JOIN-25] (cũ: A-09). | Vẫn gửi mời + waitlist như thường. Leader mới vào sẽ kéo người từ waitlist (Flow 11 sự kiện 2 — POD-WAIT-18). | ⏳ Chờ khách 🟡 | |
| A-10 | Nhắc lại lời mời [POD-JOIN-13] (cũ: A-12): có gửi nhắc không; trader muốn tham gia sau thì lấy link ở đâu? | Không nhắc lại; trader vào form qua nút [Join a POD] trên thẻ My POD. | ⏳ Chờ khách 🟡 | |
| A-11 | pod_id ≡ Leader_ID? [POD-JOIN-23] — /admin-pod-reassignment nhận new_pod_id; calendar-strike và Flow 10.5 nhận cả pod_id lẫn leader_id. | Đúng — 1 leader = 1 pod, dùng Leader_ID làm pod_id trong mọi UC Pod. | ⏳ Chờ khách 🟡 | |
| A-12 | Job đối chiếu Current_Count [POD-XF-02] (cũ: UC_8.2.8 A-17 phần BLOCKED): có job hằng ngày so Current_Count với số mentee thực tế (+ số suất đang giữ) không? | Có — chạy hằng ngày, lệch thì tự sửa + Slack Ops. | ⏳ Chờ khách 🟠 | |
| A-13 | Notification Center [POD-XF-09] (cũ: A-13): sự kiện pod có hiện trên Dashboard không? Áp cho cả 8 UC Pod. | Không hiển thị giai đoạn này (nhất quán POD-XF-08). | ⏳ Chờ khách 🟡 | |
| A-14 | Ngôn ngữ [POD-XF-11]: mọi email / DM / form của Pod System chỉ tiếng Anh? Áp cho cả 8 UC Pod. | Chỉ tiếng Anh (mọi template khách gửi đều tiếng Anh). | ⏳ Chờ khách 🟡 |
4.1 Bảng phân chia sở hữu (cho S-01)
| Nội dung | UC viết đầy đủ | UC khác chỉ link |
|---|---|---|
| Điều kiện được làm mentee, ai được gửi form | UC_8.2.1 | 8.2.8 |
Waterfall ghép pod + bước "gán pod" (pod_leader_id, Current_Count, pod_join_date, mở Plan_Due, email Klaviyo, Discord role, welcome ping) | UC_8.2.1 | 8.2.8 (dùng lại khi trader bấm xác nhận) |
Vòng đời status pod của trader (Waitlist, Pending_Pod_Confirmation, Assigned, Waitlist_Ghost, Inactive_Hold) | UC_8.2.8 | 8.2.1 |
Form Trading Plan, PDF, phân tích AI, webhook TRADING_PLAN_ANALYZED | UC_8.2.2 | 8.2.3, 8.2.5 |
| Email gửi leader, Master Calendar link, Calendar Compliance Auditor, strike | UC_8.2.3 | 8.2.4 (đóng Induction_Due) |
Quy tắc "email cho leader chỉ gửi vào @stacktrading.com" | UC_8.2.3 | 8.2.4, 8.2.5 |
Bảng SLA_Deadlines (cột, đóng, tạm dừng, xoá) + danh sách status được loại trừ | UC_8.2.4 | 8.2.1 (mở Plan_Due), 8.2.2 (đóng Plan_Due, mở Induction_Due), 8.2.3 (đóng Induction_Due), 8.2.5, 8.2.7 |
| Cơ chế "Zap Error" → Slack cho mọi Zap Pod | UC_8.2.2 (hoặc common rule — P-02) | còn lại |
| Kênh Slack của Pod System | UC_8.2.1 P-01 (hoặc common rule) | còn lại |
Impact analysis — dữ liệu Flow 10 ghi ra và nơi dùng tiếp (không viết vào UC, chỉ để QA/BE truy vết)
| Dữ liệu | Dùng bởi |
|---|---|
Users.pod_leader_id | Flow 4 carry + Pod Graduation (UC_8.1.1) · Flow 10.1A/B tra leader (UC_8.2.2/8.2.3) · Flow 10.3 brief (UC_8.2.5) · Flow 7 Pod Impact (CR-20260818-001) · Get Pod Data (UC_4.14.2) |
Pod_Leader_Registry.Current_Count | Waterfall Flow 10/11 · Flow 10.5 bỏ qua leader Current_Count = 0 (UC_8.2.7) |
Users.pod_join_date | Chu kỳ survey Flow 10.4 (UC_8.2.6) |
SLA_Deadlines — Plan_Due | Flow 10.2 (UC_8.2.4) · đóng ở Flow 10.1A (UC_8.2.2) |
Trading Style trong Users · Join_Date waitlist | Waterfall Flow 11 (UC_8.2.8) |
5. [PATTERN] Rule candidate cho common_rules.md
6. BLOCKED — chờ khách, loại khỏi SRS
| QnA ID | Nội dung | Ảnh hưởng UC |
|---|---|---|
POD-JOIN-24 | ✅ Đã có copy (khách cung cấp 2026-10-15) — ghi ở UC BR_8.2.1.4 | — |
7. Việc nội bộ phát sinh
| # | Việc | Owner |
|---|---|---|
| 1 | Cập nhật cột BA PiC của UC_8.2.1 → UC_8.2.8 trong WBS → Anh Hoang | BA |
| 2 | Gửi khách: A-04, A-07; gửi lại POD-JOIN-14, POD-JOIN-25 (chưa có trên client sheet) | BA |
| 3 | Báo khách sửa audience pod trong Discord Server Details.md (C-01) | BA |
Tổng kết trạng thái
- Đã chốt (không hỏi lại): Q-01 → Q-18, O-01 → O-05.
- Đã chốt 2026-10-15: A-01, A-02, A-03, A-04, A-06, A-08, copy
Pod_Mentorship_Invite. - Đã chốt 2026-10-22 (khách): A-05, A-07.
- Chờ BA: S-01, C-01.
- Chờ khách: A-09 → A-14 (BA có thể chốt theo giả định để viết tiếp, đánh dấu cần confirm khách).
- BLOCKED: không còn.