Repository navigation
Replies: 5 comments 4 replies
|
This looks excellent and a great evolution for emdash governance (from the perspective of an interested user / hopefully more active community member soon)! The heading I especially like:
|
|
Thanks for writing this up, Matt. This is a really clear proposal, and it puts into words a lot of what has been working informally over the last months. A few things I especially like:
On your feedback questions, two small things:
Happy to help with the TRIAGE.md update once this is accepted. |
|
LGTM! Thank you for working on this 🙌 |
|
Thanks for putting this together, Matt! I support the distinction between Project Team reviews and maintainer approval, as it is especially valuable for bot-authored changes: a passing check or bot verdict may not verify runtime behavior. The Project Team can contribute that validation while the maintainer remains responsible for the merge decision. |
|
Thanks Matt, this reads really well. Two small things:
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
EmDash has grown a lot since its first beta release in April. From a single engineer, to a community of contributors, triage team and now a maintainer team. The project needs more people able to keep work moving, with clear boundaries around who can decide, approve, merge, and administer it.
This proposal defines the Project Team, Maintainers, and Project Lead, establishes how people join and leave those groups, separates project roles from technical access and sets a human review requirement for merges. It also moves routine project work out of private maintainer conversations.
It draws on the detailed post-1.0 proposal prepared by some maintainers and the follow-up discussion about how the project should operate.
Feature planning, RFCs, and the roadmap are covered by a separate proposal. The two proposals are related, but this Discussion is about people, authority, access, and review.
Proposed outcome
#triageto#project-team, and define its expanded scope.#contributingby default for discussion of the project's development,#project-teamfor trusted operational coordination and#maintainersonly for matters that genuinely cannot be public.Governance principles
Work in public by default
Product direction, architecture, roadmap priorities, feature acceptance, RFCs, bug evidence, review judgments, and project policy belong in public GitHub Discussions, issues, RFCs, and pull requests.
Discord can help people discover and coordinate work, but it must not hold the only record of a decision. If a private or synchronous conversation affects the project, its conclusion must be written back to the relevant public GitHub artifact (Discussion, issue or a merged markdown file).
Define roles by responsibility
A project role describes responsibility and decision-making authority. GitHub permissions support that role; they do not define it. Granting Write access does not by itself make someone a maintainer. For example, for technical or administrative reasons, additional Cloudflare employees may have Write or Admin access, but this does not make them maintainers.
Release access, package publishing, infrastructure access, repository administration, secrets, and Discord administration are separate capabilities. They are granted only when a person needs them for an agreed responsibility.
Apply rules consistently
Review and contribution rules apply to the Project Lead, Cloudflare employees, external maintainers, and other contributors. A person's employer or project title does not replace independent review.
Keep privileged access current
Maintainer access is an operational capability, not a permanent award. Dormant privileged accounts create supply-chain risk: an abandoned or compromised account can retain the ability to approve or merge code, modify automation, or publish releases without the activity being noticed promptly.
The project can continue to recognise past contributions without retaining unnecessary access.
Project roles
Project Team
The Project Team is a group of trusted, regular contributors who help operate the project in public. Contributions can include code, documentation, issue and Discussion triage, reviews, design work, support, and community work.
Project Team members can:
Project Team membership does not grant merge authority. A Project Team review is valuable evidence, but it does not satisfy a required maintainer approval.
Project Team members receive GitHub Triage access by default. They receive the "Project Team" role in Discord to help other community members identify them as trusted sources of information.
Maintainers
Maintainers are Project Team members trusted to approve and merge changes and to apply project policy consistently.
Maintainers can:
Maintainers receive GitHub Write access by default. Write access does not automatically include package publishing, releases, production systems, secrets, or repository administration.
Project Lead
The Project Lead is the maintainer accountable for the project's overall direction and governance. The Project Lead:
The Project Lead should seek public input on public project decisions and consult the maintainers before exercising this authority. Ordinary work within an accepted design or documented policy does not require separate Project Lead approval merely because the Project Lead has final authority.
Decision-making
EmDash retains a Project Lead appointed by Cloudflare. Discussion and consensus are preferred, but the Project Lead makes the final call for project decisions, and is responsible for explaining public project decisions in the relevant public artifact.
Maintainers are trusted to make routine decisions within documented policy without waiting for the Project Lead. A decision is escalated when it establishes new direction, conflicts with an accepted design, changes governance, or cannot reach agreement through normal review.
Public and private channels
Public channels and GitHub
Use public channels for discovery and informal community input. Use the relevant GitHub Discussion, issue, RFC, or pull request for substantive reasoning and the durable decision record.
The public
#contributingDiscord channel covers contributing, triage, roadmap, RFCs, implementation, and how the project is run. Threads can keep individual topics together.#project-team#project-teamis for trusted operational coordination, including:It is not a second forum for product, architecture, roadmap, RFC, review, or governance decisions. If a coordination thread becomes substantive, move the reasoning to a public channel or GitHub.
A useful boundary is: discussion about what the project should do is public; coordination about who will handle the work can happen in
#project-team. If the boundary is unclear, use the public channel.#maintainers#maintainersis limited to subjects that cannot be discussed safely in public:Routine triage, planning, reviews, and project decisions do not belong there.
Calls can be used for coordination, but an agenda should be available beforehand and decisions must be recorded on GitHub. Attendance at calls is not required to participate in governance.
Review and merge authority
A normal pull request can merge when:
This rule applies to every author, including the Project Lead and other maintainers. Routine self-merge is not permitted.
emdashbot and other automated reviews provide evidence for the human reviewer. Their findings must be considered, but a bot approval does not satisfy the human approval requirement even if GitHub currently records it as an approving review. Repository rules and review-state automation should distinguish human maintainer approval from bot state.
Changes to governance, protected-branch or release automation, package publishing, access controls, or other privileged supply-chain paths require two human maintainer approvals. Neither approval can come from the author.
During an urgent security or production incident, the Project Lead or nominated maintainer can bypass the normal approval requirement when waiting would create greater risk. The bypass and the change must receive retrospective review as soon as it is safe to disclose and review them.
Joining the Project Team
Someone can join the Project Team when they have:
Useful contributions include code, documentation, reviews, triage, design, support, and community work. Regular Discord activity is not required, and GitHub-focused contributors are not excluded.
Anyone can express interest or suggest a candidate. A maintainer normally sponsors the candidate, the active maintainers have an opportunity to raise relevant concerns privately, and the Project Lead makes the appointment. Successful appointments are announced publicly. Unsuccessful nominations and private concerns are not published.
Becoming a maintainer
A maintainer candidate should normally already be on the Project Team and have demonstrated:
An existing maintainer nominates an interested candidate. The active maintainers discuss the nomination privately, and the Project Lead makes the final decision. The appointment is announced publicly after the candidate accepts it.
There is no fixed maximum size for the Project Team or Maintainers. Each group should contain the qualified, active people who have genuine responsibilities to perform. Maintainer membership remains more selective because every appointment adds merge authority and supply-chain exposure.
Participation and inactivity
Project Team members and maintainers are volunteers. There is no minimum number of hours, commits, reviews, or other contributions. Members can take breaks and can step down at any time without giving a reason.
Members should nevertheless remain sufficiently involved to exercise their current responsibilities with up-to-date project context. Activity includes implementation, review, triage, planning, documentation, support, and community work.
The project handles inactivity through a private check-in rather than an automatic public removal:
The project reviews privileged access at least annually. The review covers GitHub, package publishing, releases, infrastructure, secrets, and Discord administration separately.
Removing inactive access is a security and responsibility decision, not criticism of the person's previous contributions.
Area ownership and rotations
Maintainers and Project Team members can volunteer to watch particular areas or participate in a triage rotation. These are coordination tools, not permanent ownership or additional authority. An area owner helps route and review work but does not gain a veto over that area.
Rotations must allow handoff and skipped turns. They do not create a standing time commitment for volunteers.
Implementing this proposal
If accepted, the governance documentation PR will:
GOVERNANCE.mdas the canonical description of roles, authority, appointments, participation, and channels.MAINTAINING.mdfor the detailed review and merge process.CONTRIBUTING.mdto act as the directory for project processes.TRIAGE.mdfor the Project Team name, public-first coordination, and escalation rules.#triageto Project Team and#project-team.The initial Project Team and Maintainers membership can then be announced under the accepted policy.
Feedback requested
This proposal takes a position rather than asking for a governance model from scratch. Feedback is particularly useful on:
#project-team, and#maintainersboundaries leave any common work without an appropriate place.After public feedback and consultation with the current team, the Project Lead will post a decision summary and open the documentation and configuration pull requests needed to implement the accepted model.
All reactions