1. เข้าใจสถานะก่อนแก้
draft_version และทุกการ Activate ใช้ revision/hash/timestamp เดิมเป็น CAS ถ้าข้อมูลเปลี่ยนระหว่างทาง ระบบต้องหยุดและให้ Reload2. เปิดห้องเขียนบท
- เข้าสู่ระบบและเปิดโปรเจกต์ที่มี Episode อย่างน้อยหนึ่งตอน
- ที่การ์ด Episode กด คิดบทใหม่ / ห้องเขียนบท แยกจากปุ่มเปิด Episode
- ตรวจชื่อ Episode, Active Revision และสถานะ Worker ด้านบนก่อนเริ่ม
- เลือกแท็บ แก้บท, AI เสนอ 5 ทาง, เปรียบเทียบ หรือ ประวัติ

3. แก้และบันทึก Working Draft
- เปิดแท็บ แก้บท ระบบจะสร้างหรือโหลด Working Draft ของ Episode นี้
- เลือกฉากจาก Scene Spine ด้านซ้าย แล้วแก้ Title, Location, Time, Action หรือ Dialogue ตรงกลาง
- เมื่อมีการแก้ สถานะจะเปลี่ยนเป็น ยังไม่บันทึก และเลข Draft Version ยังไม่เพิ่ม
- กด บันทึกตอนนี้ หรือรอ autosave; เมื่อ API ยืนยันแล้วจึงขึ้น บันทึกแล้ว และ Version เพิ่ม
- หากพิมพ์ต่อขณะที่ขึ้น กำลังบันทึก… ระบบต้องเก็บข้อความใหม่ไว้ในหน้าและส่ง Autosave รอบถัดไป ห้ามนำ response รอบก่อนมาทับข้อความใหม่
- เปิด Episode เดิมอีกครั้งเพื่อยืนยันว่า Active Revision ยังไม่เปลี่ยนจนกว่าจะ Activate



4. Checkpoint, Undo และ Redo

5. ให้ AI เสนอ Episode ถัดไป 5 แบบ
- เปิดแท็บ AI เสนอ 5 ทาง แล้วตรวจว่า Anchor Episode ถูกตอน
- กรอกสิ่งที่ต้องมี สิ่งที่ห้ามมี และคำสั่งเพิ่มเติม เช่น “เริ่มจาก end_state เดิม แต่เปลี่ยนต้นเหตุของความขัดแย้ง”
- กด เสนอ Episode ถัดไป 5 ทาง เพียงครั้งเดียว ระบบจะส่ง durable job ชนิด
script_outline_set - ปิด Modal, ปิด Tab หรือปิด Browser ได้ Worker จะทำงานต่อ
- กลับมาเปิด Workbench แล้วเลือก Generation Round ที่ถูกต้อง ต้องเห็น Candidate 5 ใบจาก round เดียวกันเท่านั้น


6. Semantic Compare และเลือกทาง
เปิด Candidate แล้วกด เปรียบเทียบ เพื่อดูข้อมูลที่คนเขียนบทใช้ตัดสินใจ ไม่ใช่ raw JSON:
| หัวข้อ | ต้องตอบคำถามอะไร |
|---|---|
| Logline / Conflict | แรงขับของตอนต่างจากทางอื่นจริงหรือเพียงเปลี่ยนถ้อยคำ |
| Beats / Scene changes | เพิ่ม ลบ ย้าย หรือแก้ฉากใด และจังหวะเรื่องเปลี่ยนอย่างไร |
| Character delta | ตัวละครตัดสินใจหรือเปลี่ยนสภาวะอะไรเมื่อจบตอน |
| Continuity | เริ่มจาก end_state ของ Anchor Episode ถูกต้องหรือไม่ |
| Ending / Payoff | จบแบบเฉลย ค้างคา หักมุม หรือส่ง setup ไปตอนใด |
- เลือก Candidate สองใบจาก Generation Round เดียวกัน
- อ่าน Summary และรายการเปลี่ยนระดับ Field/Scene
- ถ้าเป็น Outline ให้กด ขยายเป็นบทเต็ม และรอ Worker จบก่อน Apply
- กด นำเข้า Working Draft; ระบบยังไม่ Activate และเก็บ Candidate อื่นไว้เลือกภายหลัง


7. Validate ก่อน Activate
กด ตรวจบท หลัง Save ล่าสุด ระบบจะตรวจโครงสร้าง Episode, scene_uid, ตัวละคร, continuity และข้อบังคับที่พิสูจน์แบบ deterministic ได้
- ผ่าน: lifecycle เป็น
validatedและปุ่ม Activate พร้อมใช้ - ไม่ผ่าน: Working Draft ยังเปิดอยู่ แก้รายการ Error แล้ว Save + Validate ใหม่
- คำแนะนำเชิงศิลป์จาก AI ไม่ควรถูกแสดงเป็น deterministic PASS

8. Activate หรือ Fork
- สร้าง Checkpoint และตรวจว่า Draft Version ปัจจุบัน Validate ผ่าน
- ตรวจ Semantic Diff รอบสุดท้าย แล้วกด Activate Draft
- ถ้า Episode ไม่มี Veo/VDO ระบบสร้าง Active Revision ใหม่และเก็บ Revision เก่าไว้ใน History
- ถ้ามี Veo/VDO ระบบต้องหยุดด้วย
media_requires_forkและแสดงปุ่ม Fork Draft - กด Fork เมื่อยืนยันว่าจะสร้าง Episode ใหม่ สื่อของ Episode ต้นทางต้องไม่ถูกลบหรือย้าย และ Episode ใหม่ต้องไม่มี video URL/task ID ของต้นทางติดไป
applied; การ Restore Revision เก่าต้องสร้าง Revision ใหม่ ไม่ลบประวัติ

9. แก้ Stale Draft / สอง Tab ชนกัน
ถ้า Tab A บันทึก Version ใหม่ก่อน Tab B คำขอจาก Tab B ต้องได้ HTTP 409 draft_version_conflict ไม่ใช่เขียนทับงานล่าสุด
- หยุดพิมพ์ใน Tab ที่ขึ้น Conflict
- คัดลอกข้อความที่ยังไม่บันทึกไว้ชั่วคราวถ้าจำเป็น
- กด โหลด Draft ล่าสุด
- เทียบความต่าง นำเฉพาะการแก้ที่ต้องการกลับมา แล้ว Save ใหม่
10. งานพื้นหลังและหลักฐาน
Next 5 และการ Expand Candidate ใช้ durable worker ปิดเว็บได้ เมื่อกลับมาเปิดให้ตรวจหน้า Jobs และ Evidence strip:
- Job status ต้องเป็น Completed และ Progress 100
- Request ID, Pair ID, Mode Hash และ Text Hash ต้องตรงระหว่าง UI กับ API
- Generation Round ต้องไม่รวม Candidate จากรอบอื่น
- ส่วนเขียนบทไม่มีขั้น Audio จึงต้องแสดง Audio: N/A ไม่ใช่สร้างหลักฐานเสียงปลอม
11. Troubleshooting
ปุ่ม Save ใช้ไม่ได้
ตรวจว่ามี Working Draft, scene_uid ไม่ซ้ำ และไม่มีงาน Save ก่อนหน้าค้างอยู่ หากเป็น Conflict ให้ Reload Draft แทนการกดซ้ำ
Next 5 ไม่ครบห้าใบ
ตรวจ Job terminal response และเลือก Variant Set ที่ถูกต้อง ระบบ final acceptance ต้องมี Candidate ID ไม่ซ้ำกัน 5 ค่า ห้ามรวมของเก่ามาเติมให้ครบ
Candidate Apply ไม่ได้
ต้อง Expand เป็น full draft, status ready และ candidate ต้องผูกกับ project/episode/base revision เดียวกับ Working Draft
Validate ผ่านแต่ Activate 409
ถ้า code เป็น draft_version_conflict หรือ draft_base_mismatch ให้ Reload; ถ้าเป็น media_requires_fork ให้ใช้ Fork เพื่อรักษาสื่อ
ปิด Browser แล้วงานหาย
เปิด Jobs ตรวจ Worker Online และ Job ID เดิม งานที่ submit สำเร็จต้อง recover จากฐานข้อมูล ไม่ควรสร้าง Job ใหม่ทันที
12. เกณฑ์ทดสอบ UI+API
ห้ามประกาศ PASS จากภาพอย่างเดียวหรือ API อย่างเดียว แต่ละ Testcase ต้องมี:
- ภาพ UI จริง 5 ขั้น:
01_open_page,02_input_ready,03_click_generate,04_result_state,05_audio_ready_or_error request.json,response.json,timing.jsonจาก Playwright browser network จริง- Sidecar ของทุกภาพที่ผูก SHA-256, viewport, URL, เวลา และ 4 identity fields
- Pair completeness 100%, pair consistency 100%, checks ผ่านทั้งหมด และ critical errors 0
| Testcase | สิ่งที่พิสูจน์ |
|---|---|
TC_P0_DRAFT_SAVE_001 | แก้ระหว่าง Save ที่กำลังทำงาน แล้วคิว Autosave รอบถัดไปโดยไม่ทำข้อความหาย; Active เดิมไม่เปลี่ยน |
TC_P0_CHECKPOINT_ACTIVATE_002 | Checkpoint + Validate + Activate |
TC_P0_BACKGROUND_NEXT5_003 | Next 5 ทำต่อหลังปิด Browser |
TC_P0_APPLY_CANDIDATE_004 | Apply Candidate เข้า Draft |
TC_P0_SEMANTIC_COMPARE_005 | Semantic Compare ไม่ใช่ raw JSON |
TC_P0_STALE_CONFLICT_006 | Stale version ถูกปฏิเสธ |
TC_P0_MEDIA_FORK_007 | Fork รักษา Media ที่ต้นทางและไม่คัดลอก media binding ไปตอนใหม่ |
TC_P0_MANUAL_HTML_008 | คู่มือเปิดได้และ probe identity ตรงกัน |
TC_P0_CHECKPOINT_RESTORE_009 | ย้อน Checkpoint เข้า Working Draft โดย Active Revision เดิมไม่เปลี่ยน |
TC_P0_REVISION_RESTORE_010 | Restore Revision ขณะมี Draft เปิดแล้วปิด Draft ฐานเก่าอย่างปลอดภัย |
ทางลัด
กลับหน้า Director Studio · คู่มือหลัก · Script Authoring evidence probe
Security: ห้ามวาง MiniMax key, JWT, Authorization, Cookie หรือ browser storage state ในภาพ คู่มือ รายงาน หรือ Git