1# Node.js Project Governance
2
3<!-- TOC -->
4
5* [Triagers](#triagers)
6* [Collaborators](#collaborators)
7  * [Collaborator activities](#collaborator-activities)
8* [Technical steering committee](#technical-steering-committee)
9  * [TSC meetings](#tsc-meetings)
10* [Collaborator nominations](#collaborator-nominations)
11  * [Onboarding](#onboarding)
12* [Consensus seeking process](#consensus-seeking-process)
13
14<!-- /TOC -->
15
16## Triagers
17
18Triagers assess newly-opened issues in the [nodejs/node][] and [nodejs/help][]
19repositories. The GitHub team for Node.js triagers is @nodejs/issue-triage.
20Triagers are given the "Triage" GitHub role and have:
21
22* Ability to label issues and pull requests
23* Ability to comment, close, and reopen issues and pull requests
24
25See:
26
27* [List of triagers](./README.md#triagers)
28* [A guide for triagers](./doc/contributing/issues.md#triaging-a-bug-report)
29
30## Collaborators
31
32Node.js core collaborators maintain the [nodejs/node][] GitHub repository.
33The GitHub team for Node.js core collaborators is @nodejs/collaborators.
34Collaborators have:
35
36* Commit access to the [nodejs/node][] repository
37* Access to the Node.js continuous integration (CI) jobs
38
39Both collaborators and non-collaborators may propose changes to the Node.js
40source code. The mechanism to propose such a change is a GitHub pull request.
41Collaborators review and merge (_land_) pull requests.
42
43Two collaborators must approve a pull request before the pull request can land.
44(One collaborator approval is enough if the pull request has been open for more
45than 7 days.) Approving a pull request indicates that the collaborator accepts
46responsibility for the change. Approval must be from collaborators who are not
47authors of the change.
48
49If a collaborator opposes a proposed change, then the change cannot land. The
50exception is if the TSC votes to approve the change despite the opposition.
51Usually, involving the TSC is unnecessary. Often, discussions or further changes
52result in collaborators removing their opposition.
53
54See:
55
56* [List of collaborators](./README.md#current-project-team-members)
57* [A guide for collaborators](./doc/contributing/collaborator-guide.md)
58
59### Collaborator activities
60
61* Helping users and novice contributors
62* Contributing code and documentation changes that improve the project
63* Reviewing and commenting on issues and pull requests
64* Participation in working groups
65* Merging pull requests
66
67The TSC can remove inactive collaborators or provide them with _emeritus_
68status. Emeriti may request that the TSC restore them to active status.
69
70A collaborator is automatically made emeritus (and removed from active
71collaborator status) if it has been more than 18 months since the collaborator
72has authored or approved a commit that has landed.
73
74## Technical Steering Committee
75
76A subset of the collaborators forms the Technical Steering Committee (TSC).
77The TSC has final authority over this project, including:
78
79* Technical direction
80* Project governance and process (including this policy)
81* Contribution policy
82* GitHub repository hosting
83* Conduct guidelines
84* Maintaining the list of collaborators
85
86The current list of TSC members is in
87[the project README](./README.md#current-project-team-members).
88
89The [TSC Charter][] governs the operations of the TSC. All changes to the
90Charter need approval by the OpenJS Foundation Cross-Project Council (CPC).
91
92### TSC meetings
93
94The TSC meets in a video conference call. Each year, the TSC elects a chair to
95run the meetings. The TSC streams its meetings for public viewing on YouTube.
96
97The TSC agenda includes issues that are at an impasse. The intention of the
98agenda is not to review or approve all patches. Collaborators review and approve
99patches on GitHub.
100
101Any community member can create a GitHub issue asking that the TSC review
102something. If consensus-seeking fails for an issue, a collaborator may apply the
103`tsc-agenda` label. That will add it to the TSC meeting agenda.
104
105Before each TSC meeting, the meeting chair will share the agenda with members of
106the TSC. TSC members can also add items to the agenda at the beginning of each
107meeting. The meeting chair and the TSC cannot veto or remove items.
108
109The TSC may invite people to take part in a non-voting capacity.
110
111During the meeting, the TSC chair ensures that someone takes minutes. After the
112meeting, the TSC chair ensures that someone opens a pull request with the
113minutes.
114
115The TSC seeks to resolve as many issues as possible outside meetings using
116[the TSC issue tracker](https://github.com/nodejs/TSC/issues). The process in
117the issue tracker is:
118
119* A TSC member opens an issue explaining the proposal/issue and @-mentions
120  @nodejs/tsc.
121* The proposal passes if, after 72 hours, there are two or more TSC voting
122  member approvals and no TSC voting member opposition.
123* If there is an extended impasse, a TSC member may make a motion for a vote.
124
125## Collaborator nominations
126
127Existing collaborators can nominate someone to become a collaborator. Nominees
128should have significant and valuable contributions across the Node.js
129organization.
130
131To nominate a new collaborator, open an issue in the [nodejs/node][] repository.
132Provide a summary of the nominee's contributions. For example:
133
134* Commits in the [nodejs/node][] repository.
135  * Use the link `https://github.com/nodejs/node/commits?author=GITHUB_ID`
136* Pull requests and issues opened in the [nodejs/node][] repository.
137  * Use the link `https://github.com/nodejs/node/issues?q=author:GITHUB_ID`
138* Comments on pull requests and issues in the [nodejs/node][] repository
139  * Use the link `https://github.com/nodejs/node/issues?q=commenter:GITHUB_ID`
140* Reviews on pull requests in the [nodejs/node][] repository
141  * Use the link `https://github.com/nodejs/node/pulls?q=reviewed-by:GITHUB_ID`
142* Help provided to end-users and novice contributors
143* Pull requests and issues opened throughout the Node.js organization
144  * Use the link  `https://github.com/search?q=author:GITHUB_ID+org:nodejs`
145* Comments on pull requests and issues throughout the Node.js organization
146  * Use the link `https://github.com/search?q=commenter:GITHUB_ID+org:nodejs`
147* Participation in other projects, teams, and working groups of the Node.js
148  organization
149* Other participation in the wider Node.js community
150
151Mention @nodejs/collaborators in the issue to notify other collaborators about
152the nomination.
153
154The nomination passes if no collaborators oppose it after one week. Otherwise,
155the nomination fails.
156
157There are steps a nominator can take in advance to make a nomination as
158frictionless as possible. To request feedback from other collaborators in
159private, use the [collaborators discussion page][]
160(which only collaborators may view). A nominator may also work with the
161nominee to improve their contribution profile.
162
163Collaborators might overlook someone with valuable contributions. In that case,
164the contributor may open an issue or contact a collaborator to request a
165nomination.
166
167### Onboarding
168
169After the nomination passes, a TSC member onboards the new collaborator. See
170[the onboarding guide](./onboarding.md) for details of the onboarding
171process.
172
173## Consensus seeking process
174
175The TSC follows a [Consensus Seeking][] decision-making model per the
176[TSC Charter][].
177
178[Consensus Seeking]: https://en.wikipedia.org/wiki/Consensus-seeking_decision-making
179[TSC Charter]: https://github.com/nodejs/TSC/blob/HEAD/TSC-Charter.md
180[collaborators discussion page]: https://github.com/nodejs/collaborators/discussions/categories/collaborator-nominations
181[nodejs/help]: https://github.com/nodejs/help
182[nodejs/node]: https://github.com/nodejs/node
183