English · Português (Brasil) · Deutsch · Français · 简体中文 · 日本語 · 한국어 · ภาษาไทย
เอกสารนี้กำหนดกติกาสำหรับการเป็น, การทำหน้าที่ และการ step down จากบทบาท Maintainer ของ nexu-io/open-design. รายชื่อรายบุคคลของ Core Team ถูก maintain ภายในและไม่ได้ enumerate ไว้ที่นี่ — สิ่งที่สำคัญต่อสาธารณะคือกติกาที่ทุกคนเล่นตาม.
Status: v1, drafted 2026-05-11. เป็น companion ของ
CONTRIBUTING.th.md— ไฟล์นั้นชี้ contributors มาที่นี่เพื่อดูกติกาเต็ม.
| Role | Permissions |
|---|---|
| Contributor | ใครก็ตามที่มี merged PR อย่างน้อย 1 รายการ. ไม่มีสิทธิ์พิเศษ. |
| External Maintainer | Community contributor ที่ได้รับ promotion ตามกติกาด้านล่าง. Review, approve, close/reopen issues และ self-assign issues ได้. กด merge button ไม่ได้ — สิทธินั้นอยู่กับ Core Team. |
| Core Team | ทีมภายในของ Open Design. ถือ repository write access เต็มและเป็น final authority สำหรับ governance decisions. Roster maintain ภายใน. |
ส่วนที่เหลือของเอกสารนี้พูดถึง External Maintainers เว้นแต่ระบุไว้เป็นอย่างอื่น.
| Action | Contributor | Maintainer |
|---|---|---|
| Approve PR | ✓ นับเป็น required approval สำหรับ merge | |
| Close / reopen issues | เฉพาะ issues ที่ตนเปิดเอง | ✓ issue ใดก็ได้ |
| Self-assign open, unassigned issues (P0 first) | ✗ | ✓ |
PR ใด ๆ — ไม่ว่าใครเป็น author — ต้องมีครบ ทั้งสามข้อ:
- ไม่มี code conflicts.
- CI green ครบ.
- มี approval อย่างน้อยหนึ่งรายการจาก Maintainer หรือ Core Team member.
Approval ของ Maintainer คือ path ที่ PR ส่วนใหญ่ใช้เพื่อ merge — เป็นวิธีตรงที่สุดที่ trust ของ Maintainer ปรากฏในงาน day-to-day ของ project.
มี entry criteria สามข้อ. ต้องผ่านทั้งสามข้อ.
- ≥ 20 merged PRs ไปยัง
nexu-io/open-design.
นี่เป็น soft floor ไม่ใช่ตั๋วอัตโนมัติ. แตะ 20 PRs แล้วเข้าสู่การพิจารณา; ไม่ได้ guarantee role.
เราตรวจ GitHub profile ของ candidate ตามเจ็ดมิติ. ต้องผ่าน admission lines อย่างน้อย 5 จาก 7 และ trigger veto lines เป็นศูนย์.
| # | Dimension | Admission line | Veto line |
|---|---|---|---|
| 1 | GitHub account age | ≥ 1 year | < 90 days |
| 2 | Public repos | ≥ 3 | 0 |
| 3 | Followers | ≥ 10 | < 3 |
| 4 | Followers / following ratio | > 0.30 | < 0.05 (pattern แบบ follow-farm ทั่วไป) |
| 5 | Profile completeness | Custom avatar และ อย่างน้อยหนึ่งอย่างจาก bio / company / blog / twitter | Default avatar และ bio/company/blog ว่างทั้งหมด |
| 6 | Cross-project activity | มี merged PR อย่างน้อยหนึ่งรายการ หรือ sustained issue/star activity ใน public repo อื่น | Merged PRs อยู่เฉพาะใน repo นี้ |
| 7 | Account standing | ไม่มี GitHub platform restrictions (spam/banned/restored) | มีข้อใดข้อหนึ่งข้างต้น |
ขณะที่ nexu-io/open-design ยังอายุน้อยกว่าหกเดือนจาก initial commit, veto ด้าน cross-project activity (#6) อาจ waive ได้โดย Core Team consensus เมื่อ:
- Dimensions 1, 2, 3 และ 5 สูงกว่า admission line อย่างชัดเจน; และ
- Core Team judge ว่า PR quality ของ candidate ใน repo นี้สูงจาก hands-on review.
Waiver ต้องถูก note ใน internal record ของ Core Team พร้อมชื่อ candidate และวันที่. หลัง repo อายุครบหกเดือน clause นี้จะใช้ไม่ได้อีก.
ข้อนี้เป็น qualitative และไม่ได้ใช้ formula. Core Team ดูจาก:
- Code quality ของ merged PRs (correctness, scope discipline, repo-boundary respect).
- Review quality ของ review comments ที่ฝากไว้ใน PR ของคนอื่น.
- Community participation — Discussions, issue triage, Discord engagement.
- Collaboration signal — responsiveness ต่อ feedback, willingness to revise.
ผ่านสอง criteria แรกแล้วจะเข้าสู่ candidate pool. การข้าม threshold ที่สามนี้คือสิ่งที่ทำให้คุณถูก nominate.
- Core Team member คนหนึ่ง raise candidate ภายใน.
- Core Team reaches consensus.
- Core Team member ติดต่อเป็นการส่วนตัวเพื่อ confirm ว่า candidate willing.
- Onboarding.
- Public announcement.
ไม่มี nomination PR, ไม่มี public voting, ไม่มี fixed term. Intent คือ ตรงข้ามกับ K8s/Apache approver-vote model — ในช่วงต้นของ project, lightweight Core Team consensus เดินเร็วกว่าและให้ outcome quality แบบเดียวกัน. เมื่อ Maintainer cohort โตเกิน External Maintainers ห้าคน section นี้จะถูก revisit.
ไม่มี hard quotas. ไม่มี weekly PR-review count, ไม่มี minimum issue-triage rate, ไม่มี SLA สำหรับ response time. Maintainership คือ recognition of trust ไม่ใช่งาน unpaid.
สิ่งที่เราขอในเชิง spirit:
- Approve PRs ที่คุณมี context; abstain เมื่อไม่มี.
- เคารพ merge requirements (§ "Merge requirements") — approval ของคุณคือ signal จริง ไม่ใช่ rubber stamp.
- แจ้ง
#maintainersถ้าคุณจะหายไปนาน. - Treat roadmap ที่ยังไม่ public และแชร์ใน
#maintainersเป็น confidential.
ถ้า Core Team เห็น pattern ของ bad-case behavior (rubber-stamp approvals, malicious issue closures, leaking unannounced roadmap ฯลฯ), permissions จะถูก revoke ตาม § "Step-down — for cause".
นอกจาก repository permissions ที่ลิสต์ไว้ข้างบน Maintainers จะได้บางอย่างที่ wider community ไม่ได้:
- Discord
#maintainerschannel — private working space ที่ใช้ร่วมกับ Core Team. ใช้สำหรับ design previews, RFC drafts และ internal coordination ใน roadmap ส่วนที่ยังไม่ public. - Confidential roadmap — เห็นงานที่ยังไม่ announce เร็วกว่าคนอื่น. Maintainers ตกลงว่าจะรักษา contents เป็น confidential จนกว่า Core Team member จะ announce ต่อสาธารณะ.
- Direct line to the Core Team — messages ของคุณใน
#maintainersจะได้ response ที่เร็วและ substantive กว่า public Discussions และ Core Team ตั้งใจ solicit Maintainer input ใน architectural และ roadmap decisions จริง ๆ. - Maintainer badge — public mark of trust บน GitHub profile ของคุณและใน MAINTAINERS-related repo surfaces (จะ rollout เมื่อ GitHub badge capability พร้อม).
- Public recognition at promotion — announcement ผ่าน Twitter, GitHub Discussions และ Discord เมื่อคุณเข้าร่วม.
Maintainership ไม่ใช่ lifetime appointment. มี exit paths สามทาง.
- Maintainer message หา Core Team หรือ post ใน
#maintainers. - Permissions revoked ภายใน 24 ชั่วโมง.
- Maintainer transition เป็น Emeritus status.
- ไม่ต้องมี public reason.
Maintainer จะถูกพิจารณา inactive transition เมื่อมี ข้อใดข้อหนึ่ง:
- 90 consecutive days โดยไม่มี activity signal (merged PR, review comment, issue triage, substantial Discussion หรือ Discord participation), หรือ
- 60 consecutive days โดยไม่ตอบ @-mention ใด ๆ (PR review request, issue assignment).
Process:
- Core Team @-mention Maintainer เป็นการส่วนตัวใน
#maintainers, ให้ 14-day response window. - ถ้าไม่มี substantive response ภายใน 14 วัน, Maintainer transition เป็น Emeritus และ permissions ถูก revoke.
- Post public note สั้น ๆ และสุภาพใน GitHub Discussions: "Thanks for your contributions — you've been moved to Emeritus, you're welcome back any time."
- การกลับมาทำได้ง่าย — ดู "Emeritus" ด้านล่าง.
Triggered by:
- Repeated bad-case behavior (เช่น rubber-stamp approvals บน PRs ที่ substandard, malicious issue closures, abuse of permissions).
- Violation of project's Code of Conduct.
- Security-grade incidents (compromised account ที่ไม่ report ทันที, ตั้งใจ leak unannounced roadmap ฯลฯ).
Process:
- Core Team member คนใดก็เปิด discussion ได้.
- Core Team members อย่างน้อย 3 คน ต้อง agree ก่อน action (ไม่จำเป็นต้อง full Core Team consensus).
- ภายใน 24 ชั่วโมงหลัง decision: permissions revoked, removed from
#maintainers, removed from Maintainer roster ใด ๆ (จะ ไม่ transition เป็น Emeritus). - แจ้ง affected person ถึง decision และ reasons และ appeal ได้หนึ่งครั้ง.
Principle คือ bias toward keeping the Maintainer. Lapse เล็กครั้งเดียวไม่ใช่ grounds สำหรับ forced step-down; path for-cause มีไว้สำหรับ repeated patterns หรือ severe one-off incidents เท่านั้น.
Maintainers ที่ step down อย่าง graceful หรือ transition เพราะ inactivity จะเป็น Emeritus. Emeritus status:
- เอา write/approve/close permissions ออก.
- เก็บชื่อของบุคคลนั้นไว้ใน section Emeritus ของ roster (internal).
- เก็บ Discord
#maintainersaccess ไว้ (อ่านหรือ post — ตามที่ Maintainer เลือก). - ไม่มี ongoing responsibility.
Path กลับที่ง่ายที่สุด: 3 merged PRs ใน 30 วันที่ผ่านมา แล้ว Core Team restore permissions. ไม่ต้อง re-nomination.
Point ของ Emeritus คือ acknowledge ว่าชีวิตเกิดขึ้นได้ — sabbatical, job change, kid — โดยไม่มี drama หรือ social cost ทั้งสองฝั่ง.
กติกาในเอกสารนี้ amend ได้โดย Core Team consensus. Material changes (admission criteria, step-down thresholds) จะ announce ใน GitHub Discussions ก่อนมีผลกับ active candidate ใด ๆ. Editorial clarifications land ได้โดยตรง.