- ในรีโพซิทอรี Ghostty ผู้ใช้ไม่สามารถสร้าง Issue ได้โดยตรง และต้องเริ่มการพูดคุยใน GitHub Discussions ก่อน
- โปรเจกต์นี้ ไม่ใช้ตัวติดตาม Issue สำหรับการพูดคุยเรื่องบั๊กหรือคำขอฟีเจอร์ โดยการสนทนาทั้งหมดจะเกิดขึ้นใน Discussions
- เมื่อการพูดคุยมีความชัดเจนเพียงพอและ สรุปเป็นรายการที่นำไปดำเนินการได้ ผู้ดูแลจะเปลี่ยนสิ่งนั้นให้เป็น Issue
- วิธีนี้เป็น โครงสร้างที่ช่วยให้ผู้ดูแลและผู้มีส่วนร่วมค้นหา Issue ที่ลงมือทำได้จริงอย่างรวดเร็ว
- เนื่องจากรายงานส่วนใหญ่เป็น ปัญหาเฉพาะสภาพแวดล้อมของผู้ใช้ ความเข้าใจผิด หรือคำขอฟีเจอร์ที่ยังไม่ได้พัฒนา ขั้นตอนนี้จึงสำคัญต่อการควบคุมคุณภาพของโปรเจกต์
นโยบายการจำกัดการสร้าง Issue
- ในรีโพซิทอรี Ghostty ผู้ใช้ไม่สามารถสร้าง Issue ได้โดยตรง
- แต่ต้องแชร์ปัญหาหรือข้อเสนอใน GitHub Discussions ก่อน
- หากผู้ดูแลตรวจสอบการพูดคุยแล้วพบว่าเป็น ปัญหาที่สามารถทำซ้ำได้อย่างชัดเจน ก็จะเปลี่ยนเป็น Issue
- วิธีนี้เป็น โครงสร้างเพื่อให้ตัวติดตาม Issue มีเฉพาะรายการที่ลงมือทำได้จริงเท่านั้น
- เนื่องจากทุก Issue ถูกทำให้ชัดเจนไว้แล้ว ผู้มีส่วนร่วมจึงเริ่มลงมือทำงานได้ทันที
หลักการดำเนินงานของตัวติดตาม Issue
- Ghostty ไม่ใช้ตัวติดตาม Issue สำหรับการอภิปรายหรือคำขอฟีเจอร์
- คำขอฟีเจอร์หรือคำถามทั่วไปจะจัดการใน Discussions
- Issue จะมีเฉพาะ บั๊กที่นิยามไว้อย่างชัดเจนหรือรายการงานที่ดำเนินการได้
- แนวทางนี้เป็น หลักการดำเนินงานที่ก่อตัวขึ้นจากประสบการณ์ในการดูแลโปรเจกต์โอเพนซอร์ส
- จากประสบการณ์ที่ผ่านมา 80~90% ของรายงานจากผู้ใช้ไม่ใช่บั๊กจริง แต่เป็นความเข้าใจผิดหรือปัญหาสภาพแวดล้อม
- ส่วนที่เหลือส่วนใหญ่เป็น คำขอฟีเจอร์ที่ยังไม่ได้พัฒนา ซึ่งมักต้องการรายละเอียดเพิ่มเติม
การเพิ่มประสิทธิภาพในการดูแลรักษา
- เมื่อผ่านขั้นตอน Discussions ผู้ดูแลจะจัดการเฉพาะปัญหาที่ผ่านการตรวจสอบแล้วในรูปแบบ Issue
- ลดรายงานซ้ำที่ไม่จำเป็นหรือบั๊กรายงานที่ไม่ถูกต้อง
- ทำให้รายการ Issue ถูกจัดระเบียบโดยเน้นรายการที่ลงมือทำได้ทันที
- ผู้ใช้ ไม่จำเป็นต้องทำงานเพิ่มเติมแม้จะพบปัญหาที่ใช้ได้จริง
- ผู้ดูแลจะเปลี่ยนเป็น Issue และจัดการให้โดยตรง
เอกสารอ้างอิง
- สามารถดูขั้นตอนโดยละเอียดและแนวทางการมีส่วนร่วมได้ในไฟล์ CONTRIBUTING.md
- ในเอกสารดังกล่าวมีการระบุ วิธีเข้าร่วม Discussions และเกณฑ์ในการเปลี่ยนเป็น Issue ไว้อย่างชัดเจน
3 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เห็นด้วย 100% ถ้าเป็นโปรเจ็กต์ของคนอื่น อำนาจในการตัดสินว่าอะไรควรเป็น issue ก็เป็นของคนนั้นทั้งหมด
ยิ่งโปรเจ็กต์ใหญ่ ก็ยิ่งมีทั้งคนที่ไม่อ่านข้อความ คนที่ขออะไรแปลกๆ หรือแม้แต่กรณี ใช้ AI ปั่น CVE ให้ดูเกินจริง
ถึงผู้ใช้จะไม่รู้ความหมายของ error อย่างน้อยก็ควรบอกว่า ขึ้น error อะไร
เคยมีตอนทดสอบที่ระบุชัดว่าเป็น “broken pipe error” แต่วิศวกรปิดเคสโดยบอกว่า “reproduce ไม่ได้” แล้วก็อ้าง error เดิมนี่แหละว่าเลย reproduce ไม่ได้
tracker ส่วนใหญ่จัดสถานะอย่าง “unconfirmed” ได้ แต่ Github เป็นแค่ระบบ discussion แบบเรียบง่าย เลยจัดการยาก
ใช้เวลา 4 ชั่วโมงโต้แย้งพร้อมยกโค้ดและหลักฐาน สุดท้ายคำตอบที่ได้คือ “shrugs AI”
“Facebookization” ทำให้คนคุ้นกับแนวคิดว่าคลิกไม่กี่ครั้งก็เสร็จ และตอนนี้ “LLMization” ก็น่าจะยิ่งซ้ำเติม
วิธีคิดแบบนี้ไม่เหมาะกับซอฟต์แวร์เฉพาะทาง แต่ความคาดหวังของคนก็ถูกสร้างมาแบบนั้นแล้ว
การที่ Ghostty ใช้ discussion เพื่อคัดแยกคำขอเป็นแนวทางที่ไม่เหมือนใคร แต่ก็ใช้ได้ผล
การสืบสวน memory leak กระจัดกระจายอยู่หลายแพลตฟอร์ม
ลิงก์ X 1, ลิงก์ X 2, discussion 1, discussion 2
ยังไม่ได้ยกระดับเป็น issue อย่างเป็นทางการ
แม้แต่บนเครื่องที่มีแรม 8GB แค่เปิด terminal ไม่กี่ครั้งก็หน่วยความจำไม่พอแล้ว
Foot ฟีเจอร์น้อยกว่า แต่เสถียรกว่ามาก
ลิงก์ที่สองดูเหมือนเป็นความพยายามจะหาเรื่องโต้เถียงมากกว่า
ผมวิเคราะห์ log ด้วย Claude Code แล้วแก้ชั่วคราว ตอนนี้เลย reproduce ได้แค่ประมาณ 1 ใน 10 ครั้ง
หวังว่าจะช่วยคนที่มาสืบต่อทีหลังได้
แม้แต่ integrated GPU ก็ยังมีปัญหา แต่สุดท้ายก็มักโทษ GTK หรือ Nvidia ตลอด
คิดว่าการแยกระหว่าง “Issues” กับ “Discussions” ไม่มีประสิทธิภาพ
ต้องค้นหาซ้ำซ้อน และก็ย้าย ticket ไปมาไม่ได้
ถ้าตามต่อทางอีเมล การแจ้งเตือนก็ขาดหายไปเลย
เพราะงั้นในโปรเจ็กต์ของผมเลยปิด Discussions ไปแล้ว
ถ้าเป็นบั๊กจริง ค่อยเปลี่ยนเป็น issue ตอนนั้นก็ได้
แค่ให้แอดมินติด label “bug” ก็พอ
เพราะถ้าสรุปการคุยกันได้แล้ว ค่อยสร้าง issue ตอนนั้นก็ได้
และการแจ้งเตือนก็ยังคงอยู่
โปรเจ็กต์ใหญ่บางส่วนในชุมชน Python ก็ใช้วิธีนี้เหมือนกัน
แต่ในมุมของ power user ขั้นตอนการรายงานบั๊กมัน ยุ่งยาก
ท่าทีแบบ “โปรเจ็กต์เราสมบูรณ์แบบ” ทำให้รู้สึกหยิ่งยโส
drive-by bug report ส่วนใหญ่ใช้ประโยชน์ไม่ได้ และยิ่งเพิ่ม noise
ถ้าอยากมีส่วนร่วมจริง การไปแก้บั๊กที่นิยามไว้แล้วน่าจะดีกว่า
การตั้งข้อจำกัดกับวิธีรายงานก็เป็นเรื่องปกติ
ต่อข้ออ้างที่ว่า “ทุก issue ต้องอยู่ในสภาพพร้อมให้เริ่มทำงานได้ทันที”
ก็มีคนถามว่า “ถ้างั้นแค่ติดแท็ก ‘ready-to-be-worked-on’ ไม่พอเหรอ?”
ระบบนี้ประสบความสำเร็จกว่ามาก
เลยแยกพื้นที่ของนักพัฒนาออกจากพื้นที่ของผู้ใช้
Issues นั้น พอขยายใหญ่ก็จัดการไม่ไหว
ใช้ Discussions เป็นตัวกรองจะมีประสิทธิภาพกว่า
ฟีเจอร์สองอย่างนี้ของ Github มี UI แทบจะเหมือนกัน
เพียงแต่ Discussions มี ฟังก์ชัน upvote
curl/curl/issues
ยังมีความเห็นว่าวิธีนี้ควรเป็นค่าเริ่มต้น
ให้ชุมชนดูแล discussion และให้ผู้มีส่วนร่วมดูแล issue จะเป็นโครงสร้างที่เหมาะที่สุด
ใช้ระบบ label ของ GitHub ก็จัดการได้เพียงพอแล้ว
เอกสารการจัดการ label ของ GitHub
คล้ายกับ Natural experiment
เห็นด้วยกับนโยบายการรับเรื่องจากผู้ใช้
ถ้าดู discussion ที่ปิดไปแล้ว มันก็คล้ายกับ issue ที่ปิดแล้ว แต่ก็อย่างน้อย ช่วยลด noise ในแท็บ issue ได้
รายการ discussion ที่ปิดแล้วของ Ghostty
discussion จำนวนมากไปไม่ถึงขั้นนั้น แต่ปัญหาของผู้ใช้ก็ได้รับการแก้ไข
โครงสร้างแบบแยกส่วนนี้ถือว่า ออกแบบได้ฉลาดมาก
จริงๆ แล้วการที่ “เปิด issue ไม่ได้” ไม่ใช่ฟีเจอร์ของ GitHub
มันเป็นแค่ ข้อความในเทมเพลต ที่บอกว่า “อย่าเปิด issue ใหม่ ให้ใช้ Discussions แทน”
เคยเห็นวิธีนี้ในโปรเจ็กต์อื่นเหมือนกัน
โครงสร้างแบบ ใช้ discussion เป็นจุดเริ่มต้น ดูสมเหตุสมผลมากทีเดียว
เพียงแต่หลายโปรเจ็กต์ยังไม่ได้เปิดใช้ GitHub Discussions
แล้วการสนทนานั้นต่างจาก issue อย่างไร? issue ไม่ได้หมายถึงแค่ “บั๊ก” เท่านั้น ไม่ว่าจะเป็นบั๊ก ข้อเสนอฟีเจอร์ หรือ PR... ถ้ามีประเด็นให้ถกเถียงกัน นั่นก็คือ issue
ถ้าไม่มีคุณค่าพอให้ถกเถียง ก็ปิดมันได้
ไม่ใช่ว่าระหว่าง Discussion กับ Issue มีความต่างกันอะไรเป็นพิเศษหรอก น่าจะแค่ชอบให้แยกเป็นแท็บคนละอันมากกว่า
จะโพสต์ทั้งทูดูลิสต์และ Discussion ไว้ในแท็บ Issue แล้วจัดการด้วยแท็ก
vs
หรือจะใช้แท็บ Issue สำหรับทูดูลิสต์เท่านั้น และใช้ Discussion สำหรับ Discussion เท่านั้น