Skip to content

Proposal: allow for subsystem collaborators in nodejs/node (refinement of #1853) #1855

@mcollina

Description

@mcollina

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:

  1. Binding review where they actually contribute? — scoped bar, existing
    process
    .
  2. 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

  1. Author CODEOWNERS from the Who to CC table. Advisory only.
  2. Create @nodejs/core/maintainers, seeded from @nodejs/collaborators. Reuse existing subsystem teams.
  3. Update collaborator-guide.md and GOVERNANCE.md for the new tier and the scoped nomination bar (process unchanged).
  4. Protect main against direct write outside @nodejs/tsc and @nodejs/core/releasers.
  5. Open subsystem-team nominations.

Steps 1–3 are reversible config/docs. Step 4 is the only merge-flow change.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions