A scoped-down version of nodejs/TSC#1853 that touches only the nodejs/node repository. The two-approval landing rule is preserved as-is.
Problem
Every Collaborator on nodejs/node has codebase-wide approval rights (governance, code reviews). Subsystem ownership is only a social convention via Who to CC.
That single tier stalls nominations: contributors deeply competent in one subsystem (e.g. lib/internal/test_runner, lib/crypto, lib/fs.js) wait — sometimes for a year — to demonstrate breadth they may never need, because the only available bit grants binding review everywhere.
There is no rung between an external contributor and a full Collaborator. This
proposal adds that rung.
Proposal
1. Subsystem teams as code owners (advisory)
Materialise the Who to CC mapping into a CODEOWNERS file. Used to auto-request reviews and document ownership in machine-readable form. Not a merge gate — the two-approval rule is unchanged and no code-owner approval requirement is layered on top.
2. @nodejs/core/<subsystem> membership as a real tier
Membership in a subsystem team — e.g. @nodejs/core/test-runner, mirroring @nodejs/test_runner —
confers, for that team's paths only:
It does not confer binding approval outside those paths, direct push to main, or membership in @nodejs/core/maintainers.
Concretely: a PR touching only lib/internal/test_runner can land with two approvals from any mix of @nodejs/core/test-runner Team Members and @nodejs/core/maintainers. A PR touching crypto cannot be landed by two test-runner Team Members — outside their paths, their reviews are non-binding.
Branch protection
main is protected against direct write for everyone except @nodejs/tsc and @nodejs/core/releasers. The manual landing flow]technical-howto now goes through a PR; the commit queue is unaffected.
Nominations
Use the existing Collaborator nomination process unchanged. The only delta is the bar: the Ideal Nominees guidance is evaluated scoped to the team's paths — "trusted to give binding review on node:test PRs?" rather than "ready to give binding review across all of core?".
Promotion from a subsystem team to @nodejs/core/maintainers uses the same nomination process against the existing codebase-wide bar; a subsystem track record is evidence, not a substitute.
Rationale
The current stall is not "is this person good?" — it is "does competence in one area license binding approval everywhere?". The single tier forces reviewers to answer the second question before granting any binding review at all, so they answer it conservatively.
Splitting the tier separates the two questions without changing the
nomination mechanics:
- Binding review where they actually contribute? — scoped bar, existing
process.
- Binding review across all of core? — codebase-wide bar, existing
process, with the subsystem track record as evidence.
For contributors, this replaces a multi-year all-or-nothing wait with a visible incremental path. For nomination reviewers, "not ready to approve a V8 update" stops blocking someone whose work is in lib/internal/test_runner. Every existing safeguard — two approvals, wait time, CI, objections, TSC escalation — is preserved.
Out of scope
From nodejs/TSC#1853, deliberately excluded here:
- Renaming "Collaborator" → "Maintainer".
- Anything outside
nodejs/node (org-wide member/triager tiers, TSC charter).
- Changes to the Collaborator nomination process mechanics — only the bar is scoped for the new tier.
- Changes to the two-approval rule. No code-owner gate is added.
Migration
- Author
CODEOWNERS from the Who to CC table. Advisory only.
- Create
@nodejs/core/maintainers, seeded from @nodejs/collaborators. Reuse existing subsystem teams.
- Update
collaborator-guide.md and GOVERNANCE.md for the new tier and the scoped nomination bar (process unchanged).
- Protect
main against direct write outside @nodejs/tsc and @nodejs/core/releasers.
- Open subsystem-team nominations.
Steps 1–3 are reversible config/docs. Step 4 is the only merge-flow change.
A scoped-down version of nodejs/TSC#1853 that touches only the
nodejs/noderepository. The two-approval landing rule is preserved as-is.Problem
Every Collaborator on
nodejs/nodehas codebase-wide approval rights (governance, code reviews). Subsystem ownership is only a social convention via Who to CC.That single tier stalls nominations: contributors deeply competent in one subsystem (e.g.
lib/internal/test_runner,lib/crypto,lib/fs.js) wait — sometimes for a year — to demonstrate breadth they may never need, because the only available bit grants binding review everywhere.There is no rung between an external contributor and a full Collaborator. This
proposal adds that rung.
Proposal
1. Subsystem teams as code owners (advisory)
Materialise the Who to CC mapping into a
CODEOWNERSfile. Used to auto-request reviews and document ownership in machine-readable form. Not a merge gate — the two-approval rule is unchanged and no code-owner approval requirement is layered on top.2.
@nodejs/core/<subsystem>membership as a real tierMembership in a subsystem team — e.g.
@nodejs/core/test-runner, mirroring@nodejs/test_runner—confers, for that team's paths only:
It does not confer binding approval outside those paths, direct push to
main, or membership in@nodejs/core/maintainers.Concretely: a PR touching only
lib/internal/test_runnercan land with two approvals from any mix of@nodejs/core/test-runnerTeam Members and@nodejs/core/maintainers. A PR touchingcryptocannot be landed by twotest-runnerTeam Members — outside their paths, their reviews are non-binding.Branch protection
mainis protected against directwritefor everyone except@nodejs/tscand@nodejs/core/releasers. The manual landing flow]technical-howto now goes through a PR; the commit queue is unaffected.Nominations
Use the existing Collaborator nomination process unchanged. The only delta is the bar: the Ideal Nominees guidance is evaluated scoped to the team's paths — "trusted to give binding review on
node:testPRs?" rather than "ready to give binding review across all of core?".Promotion from a subsystem team to
@nodejs/core/maintainersuses the same nomination process against the existing codebase-wide bar; a subsystem track record is evidence, not a substitute.Rationale
The current stall is not "is this person good?" — it is "does competence in one area license binding approval everywhere?". The single tier forces reviewers to answer the second question before granting any binding review at all, so they answer it conservatively.
Splitting the tier separates the two questions without changing the
nomination mechanics:
process.
process, with the subsystem track record as evidence.
For contributors, this replaces a multi-year all-or-nothing wait with a visible incremental path. For nomination reviewers, "not ready to approve a V8 update" stops blocking someone whose work is in
lib/internal/test_runner. Every existing safeguard — two approvals, wait time, CI, objections, TSC escalation — is preserved.Out of scope
From nodejs/TSC#1853, deliberately excluded here:
nodejs/node(org-wide member/triager tiers, TSC charter).Migration
CODEOWNERSfrom the Who to CC table. Advisory only.@nodejs/core/maintainers, seeded from@nodejs/collaborators. Reuse existing subsystem teams.collaborator-guide.mdandGOVERNANCE.mdfor the new tier and the scoped nomination bar (process unchanged).mainagainst direct write outside@nodejs/tscand@nodejs/core/releasers.Steps 1–3 are reversible config/docs. Step 4 is the only merge-flow change.