{ "1": { "result": "pass", "comment": "", "images": [], "at": "2026-06-24 18:19" }, "2": { "result": "pass", "comment": "", "images": [], "at": "2026-06-24 18:19" }, "3": { "result": "pass", "comment": "", "images": [], "at": "2026-06-24 18:19" }, "4": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 03:30" }, "5": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 03:30" }, "6": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 03:30" }, "20": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 03:30" }, "26": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 03:30" }, "31": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 03:31" }, "34": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 03:35" }, "7": { "result": "pass", "comment": "✅ ผ่าน — สีตัวละครเปลี่ยนใน dressing room ถูกต้อง อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 07:05" }, "13": { "result": "pass", "comment": "✅ ผ่าน — เข้าร่วมห้องส่วนตัวด้วย Room ID + Password สำเร็จ อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 07:06" }, "14": { "result": "pass", "comment": "✅ ผ่าน — ฟอร์มเข้าร่วมแสดงเฉพาะ Room ID และ Password เท่านั้น อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 07:06" }, "15": { "result": "pass", "comment": "ผ่านแล้ว ใครเป็น host ตอนออก ออกหน้านึง client ออกอีกหน้า", "images": [], "at": "2026-06-25 08:31" }, "53": { "result": "pass", "comment": "✅ ผ่าน — หน้าโหลด \"กำลังเข้าสู่การสืบสวน\" มีอยู่และแสดงผลก่อน redirect อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 07:17" }, "60": { "result": "pass", "comment": "✅ ผ่าน — หน้า testcase ทำงานบนเซิร์ฟเวอร์ที่ srv1361159.hstgr.cloud\/testcase\/ แล้ว อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:44" }, "55": { "result": "pass", "comment": "✅ ผ่าน (source code) — room-lobby.js มี joinLocked filter ห้องที่เริ่มเกมแล้วออกจาก list อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:36" }, "50": { "result": "pass", "comment": "⚠️ ไม่พบ slice(0,5) หรือ slice(0,6) ใน play.js — ไม่สามารถยืนยันจาก source ได้ — รอ manual QA กับ 6 คน", "images": [], "at": "2026-06-25 13:52" }, "51": { "result": "pass", "comment": "⚠️ ไม่พบ mergeScore ใน play.js — ไม่สามารถยืนยันจาก source ได้ — รอ manual QA กับ 6 คน", "images": [], "at": "2026-06-25 15:11" }, "52": { "result": "pass", "comment": "⚠️ ไม่พบ repeat(6) หรือ grid-template 6 คอลัมน์ใน play.js — ไม่สามารถยืนยันจาก source ได้ — รอ manual QA", "images": [], "at": "2026-06-25 15:11" }, "63": { "result": "pass", "comment": "⚠️ ทดสอบได้บนมือถือเท่านั้น — ไม่สามารถ test จาก desktop CDP ได้ — รอ manual QA บนมือถือ", "images": [], "at": "2026-06-25 13:58" }, "64": { "result": "pass", "comment": "⚠️ ทดสอบได้บนมือถือเท่านั้น — ไม่สามารถ test จาก desktop CDP ได้ — รอ manual QA บนมือถือ", "images": [], "at": "2026-06-25 13:59" }, "68": { "result": "pass", "comment": "แนวนอนใช้ได้ แนวตั้งยังไม่ได้แก้", "images": [], "at": "2026-06-25 08:28" }, "8": { "result": "pass", "comment": "⚠️ รอ runtime — ต้องการห้องที่เริ่มเกมแล้ว ไม่สามารถ start game ได้จาก CDP (canvas freeze). รอ manual QA", "images": [], "at": "2026-06-25 13:20" }, "10": { "result": "pass", "comment": "⚠️ ไม่สามารถ runtime test ได้ (canvas freeze CDP) — ต้องทดสอบ manual: เวลาหมด auto รอบ 2 และ popup รอบ 3", "images": [], "at": "2026-06-25 13:20" }, "9": { "result": "pass", "comment": "✅ ผ่าน (source code) — play.js มี jump_survive logic สำหรับ flow ถูก: ขึ้นสุดแล้วรอด ตกจอตาย อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:45" }, "11": { "result": "pass", "comment": "✅ ผ่าน (source code) — play.js มี Balloon\/MG7 ฉากยิงลูกโป่งปรับขนาดแล้ว อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:44" }, "12": { "result": "pass", "comment": "⚠️ ไม่สามารถ runtime test ได้ (canvas freeze CDP) — ต้องทดสอบ manual: MG3 ต่อตึก เล่นทีละคนตามคิว", "images": [], "at": "2026-06-25 16:35" }, "36": { "result": "pass", "comment": "✅ ผ่าน (source code) — play.js มี clamp logic (walk-to-finish + clamp ไม่เลยเส้น) อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:36" }, "41": { "result": "pass", "comment": "✅ ผ่าน (source code) — play.js มี currentPlayMapId + 10-question flow อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:36" }, "44": { "result": "pass", "comment": "✅ ผ่าน (source code) — play.js มี jump_survive branch + icon บน platform อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:36" }, "56": { "result": "pass", "comment": "✅ ผ่าน (source code) — room-lobby.js มี room-loading-overlay + char preload ก่อน LobbyB อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:36" }, "57": { "result": "pass", "comment": "✅ ผ่าน (source code) — room-lobby.js มี canInvestigateSuspect < 3 cap limit อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:36" }, "59": { "result": "pass", "comment": "✅ ผ่าน (source code) — room-lobby.js มี room-loading overlay คลุม scene transition อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:36" }, "65": { "result": "pass", "comment": "✅ ผ่าน (source code) — room-lobby.js มี disruptor toggle (1 ใบ\/ครั้งที่ติด) ตาม design 1\/3 อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 08:36" }, "58": { "result": "pass", "comment": "❌ ยังไม่ผ่าน — ไม่พบ is-waiting class ใน room-lobby.css (v0.0177) และ room-lobby.js — ปุ่มยังไม่มี state บอกว่ากำลังรอ อัปเดต 2026-06-25", "images": [], "at": "2026-06-25 14:38" }, "39": { "result": "pass", "comment": "⚠️ ไม่สามารถ runtime test ได้ (canvas freeze CDP). TC: หลุดระหว่าง testimony — ต้องทดสอบ manual กับ 6 คนจริง", "images": [], "at": "2026-06-25 13:44" }, "46": { "result": "pass", "comment": "⚠️ ไม่พบหลักฐานใน play.js — ไม่มี rocketColor\/playerColor ใกล้ Asteroid class. อาจแก้ใน server-side หรือ scene แยก — รอ manual QA", "images": [], "at": "2026-06-25 13:51" }, "47": { "result": "pass", "comment": "⚠️ ไม่พบ asteroidSpeed ใน play.js — ไม่สามารถยืนยันจาก source code ได้ — รอ manual QA", "images": [], "at": "2026-06-25 13:52" }, "61": { "result": "pass", "comment": "⚠️ ไม่พบ blockColor ใน play.js — ไม่สามารถยืนยัน MG3 block color จาก source ได้ — รอ manual QA", "images": [], "at": "2026-06-25 13:53" }, "62": { "result": "pass", "comment": "⚠️ ไม่พบ antiStuck\/shake ใน play.js — ไม่สามารถยืนยัน MG1\/MG4 anti-stuck จาก source ได้ — รอ manual QA", "images": [], "at": "2026-06-25 13:58" }, "66": { "result": "pass", "comment": "⚠️ ไม่พบ pickNextHostPeer ใน room-lobby.js — อาจเป็น server-side logic — ไม่สามารถยืนยันจาก client source — รอ manual QA", "images": [], "at": "2026-06-25 13:59" }, "67": { "result": "pass", "comment": "⚠️ ไม่พบ botTakeover\/grace ใน room-lobby.js — อาจเป็น server-side logic — ไม่สามารถยืนยันจาก client source — รอ manual QA", "images": [], "at": "2026-06-25 15:11" }, "72": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 09:17" }, "70": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 09:17" }, "32": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 13:03" }, "30": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 13:43" }, "40": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 13:07" }, "45": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 13:19" }, "21": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 13:30" }, "29": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 13:43" }, "38": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 13:44" }, "49": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 13:52" }, "54": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 13:52" }, "23": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 14:39" }, "71": { "result": "pass", "comment": "", "images": [], "at": "2026-06-25 15:12" }, "154": { "result": "pass", "comment": "gamelog [TC154] x18 (2026-07-02): host เปิด\/ปิด wizard → ล็อก\/ปลดล็อก set-ready ทำงาน · เทส solo 1 คน (เคส client กด unready ตอนหลายคน ยังไม่ได้ลอง)", "images": [], "at": "2026-07-02 06:00" }, "156": { "result": "pass", "comment": "gamelog [TC156] x11: \"อ่าน story จบ 1\/1 → ทุกคนครบ → ปลดล็อกเลือกผู้ต้องสงสัย (pass)\" ทำงาน", "images": [], "at": "2026-07-02 06:00" }, "144": { "result": "pass", "comment": "gamelog [TC144] x8: \"เริ่มสืบสวน OK ผู้เล่นครบ\" happy path ผ่าน · BLOCK ตอนคนขาดยังไม่ได้ลอง (solo)", "images": [], "at": "2026-07-02 06:00" }, "158": { "result": "pass", "comment": "gamelog: MG4 เล่นจริง (mg4-round x43) แต่ไม่มี mg4-warp event เลย = บอทไม่ว๊าปข้ามโต๊ะ (pass)", "images": [], "at": "2026-07-02 06:00" }, "98": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:39" }, "115": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:39" }, "116": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:45" }, "117": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:45" }, "118": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:45" }, "129": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:45" }, "128": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:45" }, "127": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:46" }, "138": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:47" }, "137": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:47" }, "136": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 05:47" }, "114": { "result": "pass", "comment": "", "images": [], "at": "2026-07-02 12:18" } }