บ็อตตรวจสอบคำแนะนำในการพัฒนาเว็บที่ทันสมัยช่วยให้ MetaMask นำเสนอ UI ที่ทันสมัยและเข้าถึงได้ง่ายได้อย่างไร

เผยแพร่เมื่อ: 10 พฤศจิกายน 2569

MetaMask เป็นแพลตฟอร์มทางการเงินแบบไม่มีผู้ดูแล (Self-Custodial) ที่มียอดดาวน์โหลดมากกว่า 100 ล้านครั้งในประมาณ 190 ประเทศ ส่วนขยายเบราว์เซอร์ของบริษัทได้รับการพัฒนาในแบบเปิด ดังนั้นจึงมี Pull Request ที่สม่ำเสมอจากผู้ร่วมให้ข้อมูลทั้งภายในและภายนอกบริษัท

Francis Nepomuceno วิศวกร UX ของ MetaMask ได้ตรวจสอบ Pull Request เหล่านั้นจำนวนมาก และต้องการวิธีที่สอดคล้องกันเพื่อช่วยให้ผู้ร่วมให้ข้อมูลใช้แนวทางปฏิบัติแนะนำด้านการช่วยเหลือพิเศษและใช้ฟีเจอร์เว็บที่ทันสมัย ในเครื่องมือแก้ไข เขาได้ใช้คำแนะนำในการพัฒนาเว็บที่ทันสมัยของ Chrome ซึ่งเป็นชุดทักษะที่นำแนวทางปฏิบัติแนะนำสำหรับแพลตฟอร์มเว็บและข้อมูลความเข้ากันได้ของเบราว์เซอร์มาใช้กับ Agent การเขียนโค้ด เพื่อให้คำแนะนำเดียวกันนี้แก่ผู้ร่วมเขียนรายอื่นๆ เขาจึงตั้งค่าบ็อตให้ตรวจสอบ Pull Request ทุกรายการในที่เก็บโอเพนซอร์สของ MetaMask ไม่ว่าผู้เขียนจะใช้เครื่องมือใดก็ตาม

ความท้าทาย: การตามให้ทันฟีเจอร์เว็บสมัยใหม่

HTML และ CSS สมัยใหม่ยังคงเพิ่มฟีเจอร์ที่ปรับปรุงการช่วยเหลือพิเศษและประสบการณ์ของผู้ใช้ และการติดตามว่าฟีเจอร์ใดทำงานในเบราว์เซอร์ต่างๆ ได้นั้นเป็นเรื่องยาก เมื่อมีผู้ร่วมเขียนโค้ดจำนวนมาก ความรู้ดังกล่าวจะต้องเข้าถึงทุกคนที่เปิด Pull Request

ความปลอดภัยเป็นอีกเหตุผลหนึ่งที่ควรให้ความสำคัญ โดย MetaMask จะแซนด์บ็อกซ์ทรัพยากร Dependency ของบุคคลที่สามทั้งหมดโดยค่าเริ่มต้น ซึ่งทำให้ฟีเจอร์เบราว์เซอร์แบบเนทีฟมีค่าใช้จ่ายในการนำไปใช้น้อยกว่าทางเลือกไลบรารี ดังที่ Nepomuceno กล่าวไว้ว่า "การเข้าถึง API ที่ทันสมัยเหล่านี้ เช่น การใช้กล่องโต้ตอบและเมนูแบบเลื่อนลงโดยไม่ต้องใช้ JavaScript ถือเป็นชัยชนะครั้งใหญ่"

วิธีแก้ปัญหา: คำแนะนำในการพัฒนาเว็บที่ทันสมัยจะตรวจสอบ Pull Request ทุกรายการ

เมื่อวันที่ 16 กันยายน 2026 มี Pull Request ไปยัง MetaMask/metamask-extension ซึ่งเพิ่มหน้า "วิธีการทำงาน" พร้อมคำถามที่พบบ่อยซึ่งสร้างขึ้นในลักษณะเดียวกับคำถามที่พบบ่อยส่วนใหญ่ของ React ดังนี้

// Before: Custom React state (removes content from DOM)
const [expanded, setExpanded] = useState(false);
<button type="button" aria-expanded={expanded} onClick={() => setExpanded(c => !c)}>
  <Text>{question}</Text>
</button>
{expanded ? <Text>{answer}</Text> : null}

หลังจากนั้นประมาณ 5 นาที บ็อตก็แสดงความคิดเห็น โดยอ้างอิงจากคู่มือของ search-hidden-content ซึ่งมีประเด็นสำคัญ 3 ข้อดังนี้

  • การแสดงผลคำตอบแต่ละข้อแบบมีเงื่อนไขจะนำคำตอบออกจาก DOM ดังนั้นจึงไม่สามารถค้นหาข้อความที่ยุบได้ด้วยฟีเจอร์ค้นหาในหน้าเว็บของเบราว์เซอร์ และเทคโนโลยีความช่วยเหลือพิเศษจะค้นพบได้ยากขึ้น
  • <details>/<summary> แบบเนทีฟ (Baseline ตั้งแต่ปี 2020) จะเก็บเนื้อหาไว้ใน DOM ด้วยความหมายที่ถูกต้อง สำหรับแผงที่เปิดพร้อมกันไม่ได้ แอตทริบิวต์ name ที่ใช้ร่วมกัน (Baseline พร้อมใช้งานตั้งแต่ปี 2024) จะปิดแผงอื่นๆ โดยอัตโนมัติ ส่วนคำถามที่พบบ่อยแบบเปิดได้หลายรายการจะไม่ต้องใช้แอตทริบิวต์นี้
  • หากทีมต้องการใช้คอมโพเนนต์ Disclosure ที่มีอยู่ ก็ควรเก็บคำตอบไว้ใน DOM ด้วย hidden="until-found" และ Listener beforematch ที่ซิงค์ aria-expanded และสถานะไอคอน
// After: Native <details> / <summary> disclosure (findable with find-in-page)
<details>
  <summary>
    <Text>{question}</Text>
  </summary>
  <Text>{answer}</Text>
</details>

13 นาทีต่อมา ผู้เขียนได้พุชการแก้ไข คอมโพเนนต์กลายเป็นการเปิดเผย <details>/<summary> แบบเนทีฟ คำตอบที่ยุบยังคงอยู่ใน DOM สำหรับการค้นหาในหน้าเว็บ และปุ่มการนำทาง 2 ปุ่มกลายเป็นลิงก์

บ็อตดังกล่าวคือ Cursor Automation ที่ใช้คำแนะนำในการพัฒนาเว็บที่ทันสมัย และ Nepomuceno ได้ตั้งค่าบ็อตด้วยพรอมต์ 3 บรรทัด ภายในวันที่ 21 ตุลาคม 2026 ซึ่งเป็นสัปดาห์ที่ 5

  • บ็อตทำงานใน Pull Request ประมาณ 480 รายการและแสดงความคิดเห็นใน 64 รายการ (Pull Request สำหรับฟีเจอร์และการแก้ไข 57 รายการ รวมถึง Pull Request สำหรับการเผยแพร่และการซิงค์อัตโนมัติ 7 รายการ) จากผู้เขียน 26 คน
  • ในฟีเจอร์และแก้ไข Pull Request วิศวกรได้แก้ไขสิ่งที่พบ 43 รายการ และแก้ไขบางส่วนอีก 3 รายการใน Pull Request 22 รายการ
  • วิศวกรดำเนินการอย่างรวดเร็ว โดยจากการแก้ไข 38 รายการที่มีคอมมิตที่ระบุได้ มี 19 รายการที่ดำเนินการภายใน 15 นาที และ 26 รายการภายใน 1 ชั่วโมง โดยมีค่ามัธยฐานอยู่ที่ 15.2 นาทีตั้งแต่การแสดงความคิดเห็นไปจนถึงการแก้ไข

มาดูวิธีที่ MetaMask กำหนดค่าบ็อต สิ่งที่บ็อตตรวจจับได้ และจุดที่บ็อตส่งสัญญาณรบกวนกัน

การตั้งค่าเป็นพรอมต์ 3 บรรทัด

เมื่อถามถึงวิธีการกำหนดค่าการทำงานอัตโนมัติ Nepomuceno ตอบว่า "แน่นอนว่าการตั้งค่าของเราไม่มีอะไรพิเศษเลย เราแค่ทำให้กระชับและอยู่ในขอบเขต" คำสั่งทั้งหมดมีดังนี้

- Run /modern-web-guidance for any client-facing changes
- Run /chrome-extensions for any relevant extension changes
- Comment on the PR only when there are issues to address. Keep the comment focused on actionable items

ลักษณะการทำงานในทางปฏิบัติมีดังนี้

  • เป็นคำแนะนำ: ในช่วง 2 วันแรก บ็อตได้โพสต์รีวิว "ขอให้ทำการเปลี่ยนแปลง" (และการอนุมัติ 1 รายการ) ซึ่งผู้เขียนได้ปิดไปเมื่อแก้ไขแล้ว ตั้งแต่วันที่ 18 กันยายนเป็นต้นมา รีวิวทุกรายการเป็นความคิดเห็น แต่จะไม่บล็อกการผสานรวม ดังนั้นผู้เขียนจึงยังคงเป็นผู้ตัดสินใจขั้นสุดท้ายเกี่ยวกับคำแนะนำแต่ละรายการ
  • โดยอ้างอิงคู่มือและไฟล์ที่เฉพาะเจาะจงในที่เก็บโค้ด: บ็อตได้แสดงผลการค้นพบ 122 รายการใน Pull Request 64 รายการที่แสดงความคิดเห็น จาก Pull Request สำหรับฟีเจอร์และการแก้ไข 102 รายการ มี 63 รายการที่ระบุชื่อคำแนะนำในการพัฒนาเว็บที่ทันสมัยที่เฉพาะเจาะจงซึ่งกำลังนำไปใช้ เช่น search-hidden-content, state-aware-sticky-headers หรือ sms-otp-form และชี้ไปยังไฟล์ที่มีอยู่ในที่เก็บเมื่อใช้รูปแบบที่แนะนำอยู่แล้ว
  • บ็อตจะทำงานอย่างเงียบๆ เว้นแต่ Pull Request จะส่งผลต่อ UI: จาก Pull Request ประมาณ 480 รายการในช่วง 5 สัปดาห์ดังกล่าว มีอย่างน้อย 100 รายการที่ส่งผลต่อ UI หรือโค้ดฝั่งไคลเอ็นต์ และบ็อตพบข้อบกพร่องโดยเฉลี่ยประมาณ 2 รายการต่อ Pull Request ที่แสดงความคิดเห็น ทีมที่มีที่เก็บส่วนหน้าเป็นส่วนใหญ่จะเห็นว่ามีการแสดงความคิดเห็นในสัดส่วนที่มากขึ้น

พรอมต์นี้ทำงานร่วมกับ Agent Runner ได้ทุกประเภท โดยคำแนะนำในการพัฒนาเว็บที่ทันสมัยจะติดตั้งเป็นทักษะหรือปลั๊กอินสำหรับ Cursor, Claude Code, Codex, GitHub Copilot, Antigravity และ Agent การเขียนโค้ดอื่นๆ เมื่อ Agent เรียกใช้ทักษะ ระบบจะค้นหาคู่มือที่ตรงกันในดัชนีในเครื่องโดยไม่ต้องใช้คีย์ API และตรวจสอบความแตกต่างกับคู่มือเหล่านั้น โดยใช้โมเดลที่ Agent Runner ของทีมมีให้อยู่แล้ว

สิ่งที่คำแนะนำในการพัฒนาเว็บที่ทันสมัยตรวจพบแต่ Linter ตรวจไม่พบ

Linter แบบคงที่สามารถแจ้งแอตทริบิวต์ที่ขาดหายไปในองค์ประกอบเดียวได้ แต่ผลการค้นหาที่ตามมาจะขึ้นอยู่กับลักษณะการโต้ตอบ ความหมายของ HTML และวิธีที่คอมโพเนนต์ต่างๆ เข้ากันได้ในไฟล์ต่างๆ

ช่องค่าธรรมเนียมธุรกรรมที่ดูเหมือนแก้ไขได้ แต่ระบบจะละเว้นข้อมูลที่ป้อนโดยไม่แจ้งให้ทราบ

ในส่วนการตั้งค่าค่าธรรมเนียมธุรกรรมขั้นสูงของ MetaMask ช่องขีดจำกัดก๊าซ (ซึ่งจำกัดค่าธรรมเนียมเครือข่ายที่ธุรกรรมสามารถใช้ได้) ดูเหมือนจะแก้ไขได้ แต่ระบบกลับละเว้นข้อมูลที่ผู้ใช้ป้อนโดยไม่แจ้งให้ทราบ ปัญหานี้เกิดขึ้นเมื่อค่าธรรมเนียมโดยประมาณยังคงโหลดอยู่หรือโหลดไม่สำเร็จ ในขณะเดียวกัน ปุ่มบันทึกก็ปิดใช้อยู่โดยไม่มีคำอธิบายที่เทคโนโลยีความช่วยเหลือพิเศษสามารถอ่านได้

บ็อตได้แจ้งว่ามีจุดที่ต้องแก้ไข 3 จุดโดยอ้างอิงจากคู่มือแบบฟอร์ม ดังนี้

  • ปิดใช้ช่องขีดจำกัดก๊าซเมื่อไม่มีค่าประมาณ และเชื่อมต่อข้อความสถานะที่มองเห็นได้กับช่องดังกล่าวเพื่อให้เทคโนโลยีความช่วยเหลือพิเศษอ่านคำอธิบาย
  • เชื่อมต่อปุ่มบันทึกที่ปิดใช้อยู่กับข้อความสถานะเดียวกันนั้นเพื่อให้โปรแกรมอ่านหน้าจอทราบสาเหตุที่ปิดใช้
  • เปลี่ยนช่องเป็นโหมดป้อนข้อมูลตัวเลขเพื่อให้ผู้ใช้มือถือเห็นปุ่มกดตัวเลข

ผู้เขียนใช้การแก้ไขทั้ง 3 รายการในโมดัลการตั้งค่าทั้ง 2 รายการและรวมไว้ในคอมโพเนนต์เดียว

ในแบนเนอร์สถานะสำหรับฟีเจอร์การซื้อขายอย่างใดอย่างหนึ่งของ MetaMask การดำเนินการ "คำถามที่พบบ่อย" และ "ติดต่อทีมสนับสนุนของ MetaMask" ในบรรทัดสร้างขึ้นเป็นปุ่มที่เปิดแท็บใหม่ด้วย JavaScript แทนที่จะเป็นลิงก์ ภายใน 3 นาที บ็อตซึ่งอ้างอิงคู่มือ HTML และการช่วยเหลือพิเศษได้แจ้งว่าโปรแกรมอ่านหน้าจอจะอ่านลิงก์เหล่านั้นเป็นปุ่ม และผู้ใช้จะสูญเสียความสามารถในการใช้ลิงก์ เช่น การคัดลอก URL หรือการเปิดในแท็บใหม่จากเมนูตามบริบท นอกจากนี้ยังชี้ให้เห็นถึงคอมโพเนนต์แบนเนอร์ที่มีอยู่ในฐานของโค้ดของ MetaMask ซึ่งแสดงผลการดำเนินการเหล่านี้เป็นลิงก์จริงอยู่แล้ว

12 นาทีต่อมา ผู้เขียนเปลี่ยนการดำเนินการทั้ง 2 รายการเป็นลิงก์ "ฉันพบว่าเมื่อมีการนำคำแนะนำไปใช้แล้ว รีวิวในอนาคตจะกล่าวถึงคำแนะนำนั้นเป็นตัวอย่างอ้างอิง ซึ่งมีประโยชน์มาก" Nepomuceno กล่าว

อินพุตการยืนยันที่มีป้ายกำกับอยู่ในตำแหน่งอื่น

ความสามารถของบ็อตในการอ่านไฟล์ต่างๆ ยังช่วยให้กรอกแบบฟอร์มหลายขั้นตอนได้สำเร็จด้วย Linter แบบคงที่จะเห็นเฉพาะช่องข้อความที่มีข้อความตัวยึดตำแหน่งภายในแต่ละขั้นตอน และไม่สามารถบอกได้ว่าส่วนหัวและวิธีการที่มองเห็นได้นั้นอยู่ในคอมโพเนนต์เลย์เอาต์หลัก เมื่ออ้างอิงคู่มือแบบฟอร์มและการช่วยเหลือพิเศษ บ็อตพบว่าตัวยึดตำแหน่งเป็นป้ายกำกับเดียวของช่อง ชื่อขั้นตอนและวิธีการในเลย์เอาต์หลักไม่ได้เชื่อมโยงกับอินพุต และข้อความแสดงข้อผิดพลาดและข้อความ "ส่งรหัสอีกครั้ง" ไม่ได้ประกาศให้โปรแกรมอ่านหน้าจอทราบ 15 นาทีต่อมา ทั้ง 3 ปัญหาก็ได้รับการแก้ไข และการเชื่อมต่อการช่วยเหลือพิเศษนั้นยังคงอยู่เมื่อ Pull Request ที่ตามมาได้ปรับรูปแบบอินพุตโค้ดเป็นช่องตัวเลข 6 ช่องที่มองเห็นได้

สิ่งที่บ็อตตรวจพบเพิ่มเติม

สิ่งที่ค้นพบเพิ่มเติม 5 รายการจากการทดสอบ 5 สัปดาห์เดียวกันมีดังนี้

  • รายละเอียด CSS ที่วิศวกรที่อยู่เบื้องหลังบ็อตพลาดไป: Pull Request ของ Nepomuceno เองสำหรับแท็บหน้าแรกแบบติดหนึบได้ฝังการค้นหาสถานะการเลื่อน CSS โดยไม่ตั้งชื่อคอนเทนเนอร์และสลับเส้นขอบในลักษณะที่เปลี่ยนเลย์เอาต์ระหว่างการเลื่อน บ็อตอ้างอิงคู่มือส่วนหัวที่ไม่เคลื่อนที่ซึ่งรับรู้สถานะ และเขาก็แก้ไขทั้ง 2 อย่าง เขาพบว่าการตรวจสอบมีประโยชน์สำหรับการค้นหาตำแหน่ง Anchor และสถานะการเลื่อน
  • การจำกัดความคลาดเคลื่อนระหว่างการกดแป้นพิมพ์: ข้อมูลความคลาดเคลื่อนที่กำหนดเอง (การเคลื่อนไหวของราคาที่ผู้ใช้ยอมรับได้ในการซื้อขาย) จำกัดค่าไว้ที่ 100% ในทุกการกดแป้นพิมพ์ โดยเปลี่ยน 101 เป็น 100 ขณะที่ผู้ใช้ยังพิมพ์อยู่ การแก้ไขตามคู่มือแบบฟอร์มได้ย้ายการตรวจสอบไปยังตอนที่ช่องสูญเสียโฟกัสและเพิ่มแบนเนอร์คำเตือนที่มองเห็นได้
  • ตัวบ่งชี้การโหลดที่โปรแกรมอ่านหน้าจอใช้ไม่ได้: โครงร่างการโหลดรายการโทเค็นใส่ป้ายกำกับ "กำลังโหลด" ไว้ในองค์ประกอบทั่วไปที่ไม่มีบทบาท ซึ่ง ARIA ไม่อนุญาต บ็อตชี้ไปที่คอมโพเนนต์ 2 รายการในฐานของโค้ดที่ใช้รูปแบบเฉพาะโปรแกรมอ่านหน้าจอของ MetaMask อยู่แล้ว (ทั้ง 2 รายการได้รับการอัปเดตหลังจากที่คำแนะนำในการพัฒนาเว็บที่ทันสมัยตรวจสอบเมื่อ 6 วันก่อน) และผู้เขียนได้ปรับโครงสร้างให้สอดคล้องกับรูปแบบดังกล่าวในอีก 8 นาทีต่อมา
  • การดำเนินการแบบอะซิงโครนัสที่ไม่มีการป้องกัน: ปุ่ม "ดูในผู้ให้บริการ" แบบอะซิงโครนัสไม่มีการป้องกันระหว่างดำเนินการ ดังนั้นการดับเบิลคลิกจึงอาจเปิดแท็บที่ซ้ำกันและผู้เฝ้าดูในเบื้องหลังได้ ผู้เขียนเพิ่มการป้องกันภายในเวลาไม่ถึง 4 นาทีหลังจากแสดงความคิดเห็น
  • การตรวจสอบการกดแป้นพิมพ์โดยไม่มีแบบฟอร์ม: หน้า "นำเข้า NFT" ได้รับการตรวจสอบทุกครั้งที่มีการกดแป้นพิมพ์ และไม่มีองค์ประกอบ <form> สำหรับความหมายของการส่ง ทั้ง 2 รายการได้รับการแก้ไขแล้วใน 19 นาทีหลังจากการตรวจสอบ

รีวิวทุกรายการจะเป็นแบบสาธารณะ ความคิดเห็นแบบเต็มของบ็อตจะอยู่ใน Pull Request ที่ลิงก์แต่ละรายการ และคุณสามารถเรียกดูความคิดเห็นทั้งหมดใน GitHub ได้

สิ่งที่ไม่ได้แก้ไขและเสียงรบกวนมากน้อยเพียงใด

แต่ไม่ใช่ว่าการค้นพบทุกอย่างจะประสบความสำเร็จ ตารางต่อไปนี้แสดงวิธีที่ MetaMask นับผลลัพธ์ 102 รายการใน Pull Request ของฟีเจอร์และการแก้ไข (อีก 20 รายการอยู่ใน Pull Request ของการเผยแพร่และการซิงค์ 7 รายการ ซึ่งไม่คาดว่าการตรวจสอบจะเปลี่ยนโค้ด)

ผลลัพธ์ ผลการสืบค้น หมายเหตุ
คงที่ 43 ผู้เขียนยืนยันแล้ว 23 รายการ และจะแสดง 20 รายการในคอมมิตถัดไป
แก้ไขบางส่วนแล้ว 3 ใช้บางส่วน หรือใช้แล้วและเปลี่ยนกลับ
ปฏิเสธหรือผลบวกลวง 16 ไม่อยู่ในขอบเขต เป็นไปตามที่ออกแบบไว้ หรือดำเนินการแล้ว
ไม่ได้ระบุ 20 ไม่มีการเปลี่ยนแปลง (ผู้เขียนเห็นด้วยกับตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้)
ไม่ทราบ 20 เปิด Pull Request หรือขีดจำกัดข้อมูลโดยไม่มีการตอบกลับ
รวม 102 ใน Pull Request สำหรับฟีเจอร์และการแก้ไข 57 รายการ

โดยแบ่งตามธีมจากผลการตรวจสอบทั้งหมด 122 รายการ (รวมถึง 20 รายการเกี่ยวกับ Pull Request สำหรับการเผยแพร่และการซิงค์) ดังนี้

ธีม ผลการค้นหาทั้งหมด ในฟีเจอร์และแก้ไข Pull Request คงที่ แก้ไขบางส่วนแล้ว
การช่วยเหลือพิเศษ 47 38 12 1
ความหมายของ HTML และ CSS 18 16 9 2
แบบฟอร์มและการป้อนข้อมูล 15 15 10 0
ประสิทธิภาพ 15 11 6 0
ฟีเจอร์และความเข้ากันได้ของเบราว์เซอร์ 11 6 3 0
อื่นๆ 16 16 3 0
รวม 122 102 43 3

รูปแบบบางอย่างในตัวเลขเหล่านั้นมีดังนี้

  • การแก้ไขที่อยู่ภายในคอมโพเนนต์เดียวจะเกิดขึ้นบ่อยกว่าการเปลี่ยนแปลงการช่วยเหลือพิเศษแบบข้ามคอมโพเนนต์ การแก้ไขแบบฟอร์มและ HTML จะยังคงอยู่ในคอมโพเนนต์ที่อยู่ระหว่างการตรวจสอบ ดังนั้นผู้เขียนจึงมักจะนำการแก้ไขไปใช้ทันที (แก้ไขแล้ว 19 จาก 31 รายการ) การช่วยเหลือพิเศษมีผลการค้นพบมากที่สุด (38 รายการ) แต่ได้รับการแก้ไขเพียง 12 รายการเท่านั้น ซึ่งมักเป็นเพราะการแก้ไขอยู่นอกขอบเขตของ Pull Request หรือต้องใช้คอมโพเนนต์ระบบการออกแบบที่ใช้ร่วมกันซึ่งยังไม่มีอยู่
  • "อื่นๆ" คือส่วนที่อยู่นอกเหนือคำแนะนำของแพลตฟอร์มเว็บ ผลการตรวจสอบ 16 รายการครอบคลุมความสอดคล้องของระบบการออกแบบ, ข้อบกพร่องด้านตรรกะ, ข้อความ, คุณภาพการทดสอบ, โหมดมืด และความสะอาดของโค้ด โดยมีการดำเนินการ 3 รายการ ซึ่งหนึ่งในนั้นเป็นการถดถอยจริง (การเปลี่ยนแปลงรายการเครือข่ายที่ทำให้การกรอกแบบฟอร์มล่วงหน้าใช้งานไม่ได้) การทดสอบส่วนใหญ่จาก 16 รายการนั้นผ่านได้ง่ายๆ แต่การตรวจพบการถดถอยทำให้การทดสอบเหล่านั้นคุ้มค่าที่จะตรวจสอบอย่างรวดเร็ว
  • ผลบวกลวงเกิดจากวิธีที่ Agent ใช้คำแนะนำ และสัญญาณรบกวนส่วนใหญ่สามารถแก้ไขได้ในการตั้งค่า เนื่องจากบ็อตตรวจสอบเป็น Agent ที่อ่านความแตกต่างแทนที่จะเป็น Linter แบบคงที่ ผลบวกลวงจึงมาจากการอ่านโค้ดโดยรอบผิดหรือใช้กฎที่เข้มงวดกว่าคู่มือที่ลิงก์ไว้ การข้ามการเผยแพร่และซิงค์ Branch และการปรับแต่งพรอมต์ให้รัดกุมยิ่งขึ้นเพื่อให้ Agent ปฏิบัติตามกฎที่ระบุไว้อย่างชัดเจนในคู่มือคือการปรับเปลี่ยนที่ชัดเจนในขั้นตอนถัดไป

Nepomuceno อธิบายถึงผลกระทบในวงกว้างที่มีต่อทีมและระยะเวลาในการตรวจสอบ ดังนี้

"รีวิวมีประโยชน์มาก ซึ่งช่วยให้วิศวกรของเราได้รู้จักและคุ้นเคยกับ API สมัยใหม่ เช่น Interest Invoker และ Popover API"

"เครื่องมือนี้ไม่ได้เพิ่มเวลาในการตรวจสอบ PR แต่ช่วยลดเวลาลงด้วยซ้ำ วิศวกรหลายคนใช้ Agent เพื่อจัดการกับความคิดเห็น ปัญหาที่คำแนะนำในการพัฒนาเว็บที่ทันสมัยตรวจพบนั้น หากเป็นเมื่อก่อนจะต้องใช้เจ้าหน้าที่ตรวจสอบที่คุ้นเคยกับเทคนิคเว็บสมัยใหม่เหล่านี้"

— Francis Nepomuceno, วิศวกร UX ของ MetaMask

David Murdoch วิศวกรของ MetaMask ยังได้ร่วมให้คำแนะนำด้วย โดยเมื่อคู่มือเลย์เอาต์ CSS มีข้อผิดพลาดในตัวอย่างหนึ่ง เขาได้รายงานปัญหา และทีมคำแนะนำในการพัฒนาเว็บที่ทันสมัยได้รวมการแก้ไขไว้ในอีก 2 วันต่อมา

สิ่งที่ MetaMask จะบอกทีมที่กำลังพิจารณาใช้โซลูชันนี้

  • อ่านคำแนะนำก่อนเขียนอะไรก็ตาม เรียกใช้ npx modern-web-guidance@latest search "accordion find in page" เพื่อดูว่า Agent จะดึงข้อมูลคู่มือใดสำหรับงาน นอกจากนี้ คุณยังเรียกดูคำแนะนำในการพัฒนาเว็บที่ทันสมัยทั้งหมดได้ด้วย
  • เริ่มต้นด้วยพรอมต์ 3 บรรทัดและ Agent ที่คุณเรียกใช้อยู่แล้ว ติดตั้งทักษะ (npx modern-web-guidance@latest install หรือคำสั่งปลั๊กอินของ Agent) ชี้สิ่งที่สามารถเรียกใช้ใน Pull Request ไปที่ทักษะนั้น และบอกให้แสดงความคิดเห็นเฉพาะเมื่อมีสิ่งที่ดำเนินการได้และปฏิบัติตามกฎที่ระบุไว้อย่างชัดเจนในคู่มือ การทำให้บ็อตเงียบเมื่อไม่มีอะไรผิดปกติคือเหตุผลที่วิศวกรของ MetaMask ยังคงอ่านความคิดเห็นของบ็อต
  • คาดว่าผลการตรวจสอบบางอย่างจะไม่ได้รับการแก้ไข จากผลการตรวจสอบ 102 รายการในฟีเจอร์และ Pull Request สำหรับการแก้ไข มีการแก้ไข 43 รายการ และถูกปฏิเสธหรือไม่ได้รับการแก้ไข 36 รายการ อัตราส่วนดังกล่าวเหมาะสำหรับบ็อตตรวจสอบที่ให้คำแนะนำ แต่จะสร้างความรำคาญหากใช้เป็นการตรวจสอบการบล็อก
  • ให้เจ้าหน้าที่ตรวจสอบต่อไป บ็อตมีความเชี่ยวชาญด้านความหมายของแพลตฟอร์มเว็บ, CSS สมัยใหม่ และรูปแบบการโต้ตอบ แต่ไม่รู้จักผลิตภัณฑ์

นอกจากนี้ยังมีสิ่งที่ MetaMask ยังไม่ได้วัดผลด้วย โดยหลังจากผ่านไป 5 สัปดาห์ ทีมยังไม่ได้ติดตามต้นทุนต่อ Pull Request, รันไทม์, การเปรียบเทียบรูปแบบการระบุแหล่งที่มา หรือพฤติกรรมของบ็อตตรวจสอบนอกฐานของโค้ด React

ด้วยการกำหนดค่าเพียง 3 บรรทัด MetaMask ก็ได้บ็อตตรวจสอบที่อ้างอิงคู่มือเฉพาะสำหรับการค้นพบส่วนใหญ่ (และตัวอย่างในที่เก็บที่มีอยู่เมื่อมี) โดยปกติแล้วคำแนะนำที่ยอมรับจะได้รับการแก้ไขภายใน 1 ชั่วโมง