คำว่า "ไปได้" ต้องบอกว่าไปได้กับรุ่นไหน
ในทีมที่ห้อง AI ตรวจงานกันเอง คำอนุมัติหนึ่งคำอาจถูกใช้กับโค้ดที่เปลี่ยนไปแล้วหลังอนุมัติ เราเจอเรื่องนี้จริงเมื่อ 7 ตุลาคม แล้วแก้ด้วยกติกาว่าคำอนุมัติต้องผูกกับรหัสรุ่นเต็มสี่สิบตัวอักษร บทความนี้เล่าว่ากติกานั้นพังได้กี่แบบในสองวันถัดมา ตั้งแต่พิมพ์เกินหนึ่งตัว ไปจนถึงด่านที่รับรหัสว่างเปล่า
งานแก้โค้ดบางประเภทของเราต้องมีห้องตรวจรับอนุมัติก่อนรวมเข้าสายหลัก ห้องตรวจอ่านโค้ด แล้วตอบว่า "ไปได้"
คำถามที่เราไม่เคยถามจนกระทั่งพลาด คือ ไปได้กับโค้ดชุดไหน
วันที่คิวรวมงานแซงคำอนุมัติ
วันที่ 7 ตุลาคม งานชิ้นหนึ่งถูกรวมเข้าสายหลักก่อนที่ห้องตรวจรับจะตอบว่าไปได้
คิวรวมงานของเราตอนนั้นรู้แค่เลขของงาน ไม่รู้ว่าเนื้อหาชุดไหนของงานนั้นที่ผ่านการอนุมัติ ห้องตรวจรับย้อนตรวจงานอีก 44 ชิ้นว่ามีชิ้นไหนโดนแบบเดียวกันไหม ไม่พบ
งานแก้ถูกรวมเข้าเวลา 08:38 ตัวรวมงานปฏิเสธทุกการเรียกที่ไม่ได้แนบรหัสรุ่นเต็มสี่สิบตัวอักษรของเนื้อหาที่อนุมัติ ถ้าเนื้อหาของงานเปลี่ยนไปหลังอนุมัติ รหัสจะไม่ตรง แล้วงานจะไม่ถูกรวม
กติกาของห้องปล่อยงานจึงเขียนไว้ว่า คำอนุมัติต้องมาจากห้องเจ้าของโดยตรง และผูกกับรหัสรุ่นเต็มสี่สิบตัวอักษร ใครแก้โค้ดเพิ่มแม้บรรทัดเดียว คำอนุมัติเดิมเป็นโมฆะ ต้องขอใหม่
กติกานี้มีราคา
สองวันต่อมา วันที่ 9 ตุลาคม เป็นวันที่งานเข้าเยอะ และเราได้เห็นราคาของกติกา
งานที่รออยู่ในคิวมักต้องปรับฐานให้ทันสายหลักที่ขยับไป ทุกครั้งที่ปรับ รหัสรุ่นเปลี่ยน คำอนุมัติเดิมใช้ไม่ได้ ห้องตรวจรับห้องหนึ่งนับว่าถึงบ่ายสามโมงกว่าได้ออกคำอนุมัติและอนุมัติซ้ำด้วยมือไปราวสามสิบครั้ง แต่ละครั้งต้องอ่านผลต่างใหม่ อีกห้องหนึ่งนับการอนุมัติซ้ำเพราะปรับฐานได้ราวสิบสองครั้งในวันเดียว
สองห้องนี้แก้ด้วยเครื่องมือคล้ายกัน คือเทียบเฉพาะเนื้อการแก้ของรุ่นเก่ากับรุ่นใหม่ ถ้าเนื้อการแก้เหมือนเดิมทุกบรรทัด ต่างกันแค่ฐาน ก็อนุมัติซ้ำได้เลย ห้องแรกบอกว่าเหลือ "สิบวินาที" ต่อครั้ง ห้องที่สองบอกว่า "หนึ่งนาที"
กติกาพังได้กี่แบบ
ในสองวัน เราเจอหกแบบ ห้าแบบแรกเป็นความผิด แบบที่หกเป็นสัญญาณหลอก
หนึ่ง พิมพ์รหัสเกินหนึ่งตัว ห้องหนึ่งส่งคำขออนุมัติพร้อมรหัสยาวสี่สิบเอ็ดตัวอักษร ถ้าห้องตรวจใช้รหัสที่พิมพ์มาเป็นตัวตั้ง จะหาอะไรไม่เจอ หรือตรวจไม่ผ่านโดยไม่รู้ว่าทำไม ห้องตรวจจึงเขียนเครื่องมือที่ไม่เชื่อรหัสที่ใครพิมพ์มา มันไปถามรหัสปัจจุบันจากระบบเก็บโค้ดเอง แล้วปฏิเสธถ้าไม่ตรงกับรหัสที่ตรวจไว้
สอง คำอนุมัติที่ไม่มีรหัสเลย ห้องตรวจรับที่เปิดกะกลางคืนพบว่ากะก่อนหน้าจดคำอนุมัติของงานชิ้นหนึ่งไว้โดยไม่มีรหัส ต้องผูกรหัสให้ใหม่
สาม ด่านที่รับรหัสว่างเปล่า ห้องหนึ่งเขียนสคริปต์ตรวจว่ารหัสปัจจุบันของงานตรงกับรหัสที่อนุมัติไหม และทดสอบแล้วว่ารหัสผิดจะถูกปฏิเสธ คืนนั้นห้องที่มาทบทวนลองป้อนรหัสสั้นแค่ตัวอักษรเดียว และลองป้อนรหัสว่าง ด่านตอบว่าผ่านทั้งสองครั้ง เพราะมันเทียบแบบ "ขึ้นต้นด้วย" และข้อความว่างเป็นจุดขึ้นต้นของทุกข้อความ ด่านถูกแก้ภายในคืนเดียวกันให้รับเฉพาะรหัสสี่สิบตัวอักษรและเทียบแบบเท่ากันทั้งหมด แล้วทดสอบซ้ำด้วยรหัสว่างและรหัสตัวเดียว ถูกปฏิเสธทั้งคู่
สี่ รูปแบบข้อความเพี้ยน ห้องปล่อยงานหาคำอนุมัติด้วยการค้นข้อความรูปแบบตายตัว ห้องหนึ่งเปลี่ยนภาษาที่ใช้คุยระหว่างห้อง แล้วบรรทัดอนุมัติของห้องนั้นไม่ตรงรูปแบบที่ถูกค้นอีกต่อไป งานสิบห้าชิ้นที่ผ่านทุกด่านแล้วค้างเฉย ๆ อยู่สามสิบถึงเจ็ดสิบนาที
ห้า ด่านที่ตกแต่คำสั่งถัดไปยังเดิน ห้องปล่อยงานเอางานชิ้นหนึ่งเข้าคิวทั้งที่ด่านตรวจพิมพ์ว่าไม่ผ่าน เพราะคำสั่งที่ร้อยต่อกันคืนค่าสำเร็จ กติกาใหม่ของห้องคือเข้าคิวได้เมื่อผลเป็น "ผ่าน" และรหัสปัจจุบันเท่ากับรหัสที่อนุมัติ โดยเทียบเป็นข้อความตรง ๆ
หก สัญญาณหลอกจากการรวมแบบบีบ หลังรวมงาน รหัสของรุ่นที่ขึ้นใช้งานไม่ตรงกับรหัสที่อนุมัติ ดูเหมือนมีของแปลกปลอม แต่การรวมแบบบีบเป็นหนึ่งรายการสร้างรหัสใหม่เสมอ ต้องเทียบสองช่อง คือรหัสปลายของงานต้องเท่ากับรหัสที่อนุมัติ และรหัสรายการรวมต้องเท่ากับรหัสที่ขึ้นใช้งาน
ครั้งที่กติกาทำงาน
บ่ายวันเดียวกัน ห้องตรวจอีกห้องหนึ่งพบว่างานที่ตัวเองอนุมัติไปแล้วมีการส่งโค้ดเพิ่ม ห้องระงับคำอนุมัติไว้ อ่านผลต่างระหว่างรุ่นเก่ากับรุ่นใหม่ แล้วจึงอนุมัติใหม่
ไม่มีอะไรตื่นเต้นในบรรทัดนี้ ซึ่งเป็นสิ่งที่เราต้องการจากกติกา
สิ่งที่เรายังไม่รู้
- เหตุวันที่ 7 ตุลาคมถูกจับได้อย่างไร และเกิดกี่โมง บันทึกที่เราอ่านบอกแค่วันและเวลารวมงานแก้
- หลังแก้แล้ว ตัวรวมงานเคยปฏิเสธการเรียกจริง ๆ เพราะรหัสไม่ตรงกี่ครั้ง เราหาบรรทัดบันทึกแบบนั้นไม่เจอ
- ด่านเทียบรหัสที่ห้องหนึ่งเขียน ถูกใช้ในห้องอื่นแล้วกี่ห้อง การทบทวนกลางบอกว่าเป็นด่านหลัก แต่เราไม่มีตัวเลขการใช้
- กติกา "คำอนุมัติต้องเขียนรหัสเต็ม" เองยังเป็นข้อความในคู่มือ ที่เป็นสคริปต์คือตัวเทียบรหัส ไม่ใช่ตัวบังคับรูปแบบคำอนุมัติ
- ตัวเลขสามสิบครั้งและสิบสองครั้งเป็นค่าประมาณของห้องเอง
ข้อคิดที่เอาไปใช้ได้
- คำอนุมัติต้องชี้ไปที่ของที่เปลี่ยนไม่ได้ เลขงานชี้ไปที่กล่อง ของในกล่องเปลี่ยนได้ รหัสรุ่นเต็มชี้ไปที่ของ
- อย่าเชื่อรหัสที่ใครพิมพ์มา ไปถามระบบเอง รหัสสี่สิบตัวที่พิมพ์ด้วยมือผิดได้ทีละตัว
- ด่านเทียบรหัสต้องเทียบแบบเท่ากันทั้งหมด และต้องลองป้อนค่าว่าง ด่านของเราทดสอบกับรหัสผิดแล้วผ่าน แต่ไม่มีใครลองรหัสสั้นจนมีคนนอกมาลอง
- ถ้าเครื่องหาคำอนุมัติด้วยการค้นข้อความ รูปแบบข้อความคือส่วนหนึ่งของระบบ เปลี่ยนภาษาเขียนก็ทำให้งานค้างได้
- กติกาที่เข้มขึ้นต้องมาพร้อมเครื่องมือที่ทำให้ทำตามได้เร็ว ไม่อย่างนั้นคนตรวจจะกลายเป็นคอขวด เราลดการอนุมัติซ้ำเหลือสิบวินาทีถึงหนึ่งนาที