Skip to content
Docs on how @unifiedjs and the projects under it are run
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.editorconfig
.gitignore
code-of-conduct.md
decisions.md
github.md
governance-grant.md
package.json
readme.md

readme.md

Governance Draft

The unified collective is made up of organizations and governed by the team members steering them.

Summary

  • unified is governed by several teams
  • teams are scoped to one organization or the collective
  • teams respectively govern the projects or organizations under them
  • the core and moderation teams are special
  • individuals making significant contributions may join a team, they are nominated by existing members of that team and approved by the core team
  • any member may merge, some members may release
+-------------------------------------------------+
|                   COLLECTIVE                    |
|                core & moderation                |
|                                                 |
|                                                 |
|                  ORGANIZATIONS                  |
| +-------------+ +-------------+ +-------------+ |
| |  unifiedjs  | |  remarkjs   | |  rehypejs   | |
| +-------------+ +-------------+ +-------------+ |
| +-------------+ +-------------+ +-------------+ |
| |   retextjs  | |   redotjs   | |   mdx-js    | |
| +-------------+ +-------------+ +-------------+ |
| +-------------+ +-------------+ +-------------+ |
| |  micromark  | |    vfile    | | syntax-tree | |
| +-------------+ +-------------+ +-------------+ |
+-------------------------------------------------+

Table of Contents

Teams

All teams serve as leadership for their scope. They:

  • Set the direction in their scope. That means setting the values that are used when making decisions about tradeoffs, steering the scope toward specific directions, and leading the discussion for initiatives
  • Shepherd initiatives for what is governed. This means making stakeholders (people who are strongly affected by decisions) aware of initiatives, teasing out design tradeoffs and alternatives, and helping build consensus.
  • Accept or reject initiatives.
  • Nominate and onboard team members This means nominating individuals making significant and valuable contributions across the scope to be part of the team, and when accepted, onboarding them.

Teams should be made up of:

  • A team lead: this role must be fulfilled by a core team member. Each team except for the moderation and core teams has a lead.
  • Area experts: people who have a lot of interest and expertise in the area covered by the team, but who may be far less engaged with other areas of the collective.
  • Stakeholders: people who are strongly affected by decisions in the area of the team, but who may not be experts in the design or implementation of that area.

The team leader is responsible for:

  • Setting up the team: this includes deciding on the initial membership of the team (in consultation with the core team) when the team is up and running and working with team members to determine and publish team policies and mechanics, including the way that team members join or leave the team (which should be based on consensus).
  • Communicating between the team and collective teams.
  • Alerting collective teams of initiatives that need global, cross-cutting attention.
  • Ensuring initiatives and PRs are progressing at a reasonable rate, re-assigning as needed.
  • Making final decisions in cases of initiatives that are unable to reach consensus otherwise (this should be unlikely, and should be discussed with the core team).

The way that teams communicate internally and externally is left to each team to decide, but:

  • Technical discussion should take place as much as possible on public forums, ideally on initiative or PR threads, or on forum posts.
  • Each team will have a dedicated forum channel.
  • Teams should actively seek out discussion and input from non-members.

Organization teams

Organization teams are scoped to an organization and govern the projects under it.

They have the same responsibilities as all teams, and additionally:

  • Escalate initiatives affecting the collective to a collective team
  • Implement accepted collective-level initiatives
  • Define policy on what form changes should take. This includes which changes can be a direct PR, which need to be escalated, and which can be handled by the team itself.

It’s suggested that organization teams differentiate between mergers and releasers. All team members are mergers: they have the right to merge a pull request, although it is highly suggested to wait at least 72 hours, in order to gather enough feedback, and at least 2 approvals from other members. Some members are releasers: they can release a new version of a project, taking into account that some changes are better bundled together.

Mergers materialize in having write access to the GitHub organization, and releasers in that they have access to npm.

These guidelines are suggestions because there are differences between the projects under the unified umbrella and differences in proposed changes. For example, making a breaking change to a high-level project should be handled differently that adding prettier to a refactor a low-level project’s style.

Projects under an organization team are sometimes originally developed or maintained by an individual outside that team. These individuals, in the scope of that project, have the responsibility and right like team members of accepting or rejecting initiatives. If the organization differentiates between mergers and releasers, these individuals should additionally be classified as mergers, but not releasers.

unified team

The unified team is an organization team responsible for @unifiedjs.

Members

remark team

The remark team is an organization team responsible for @remarkjs.

Members

rehype team

The rehype team is an organization team responsible for @rehypejs.

Members

retext team

The retext team is an organization team responsible for @retextjs.

Members

redot team

The redot team is an organization team responsible for @redotjs.

Members

mdx team

The mdx team is an organization team responsible for @mdx-js.

Members

Emeriti

micromark team

The micromark team is an organization team responsible for @micromark.

Members

syntax tree team

The syntax tree team is an organization team responsible for @syntax-tree.

Members

vfile team

The vfile team is an organization team responsible for @vfile.

Members

Collective teams

Collective teams are scoped to the whole collective and govern the organizations under it.

They have the same responsibilities as all teams, and additionally:

  • De-escalate initiatives to organization teams.
  • Focus on overarching concerns. The collective teams are specifically designed to take a global view of the collective, to make sure the pieces are fitting together in a coherent way.

Core team

The core team is a collective team responsible for governing all other teams. Members of this team should not be on the moderation team.

They additionally:

  • Set the direction and vision for the collective across organizations. That means setting the core values that are used when making decisions about tradeoffs, steering the collective toward specific directions, and leading the discussion for major initiatives.
  • Spin up or shut down teams. That means creating teams around new (temporary) areas and disolving teams when their area is complete.
  • Accept or reject members. This means accepting or rejecting individuals nominated by existing members.
  • Review inactive team members. The core team periodically reviews the list of team members to identify inactive team members. Past members are typically given Emeritus status. Emeriti may request that the their status is restored.
  • Offboard team members.

Members

Moderation team

The moderation team is a collective team responsible for enforcing the code of conduct. This team does not have a leader and, to limit conflicts of interest, should not include core team members.

Members

Glossary

Collective

The collective is unified as a whole with the organizations under it the projects under them.

Organization

An organization is a collection of projects around a shared area typically hosted in a GitHub organization.

Project

A project is typically one GitHub repository, although some repositories are not projects in the sense that they include code.

Initiative

An initiative is a non-trivial change that significantly affects users. Teams must define what they deem trivial or significant.

Code of Conduct

We follow the Contributor Covenant Code of Conduct. Please read it at your leisure, as you agree to abide by it by interacting with @unifiedjs on GitHub.

This Code of Conduct should be copied to all documentation repositories for each project, and applies to every repository in the wider @unifiedjs ecosystem.

License

This work is licensed under a Creative Commons Attribution 4.0 International License. It’s based on the Rust governance proposal and the Node governance docs.

You can’t perform that action at this time.