Skip to content

Rewrite team structure and decision making for the federated model - #718

Open
dcmcand wants to merge 1 commit into
mainfrom
dcmcand/rfd-59-governance-pages
Open

dcmcand wants to merge 1 commit into
mainfrom
dcmcand/rfd-59-governance-pages

Conversation

@dcmcand

@dcmcand dcmcand commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Implements item 2 of the implementation outline in
RFD #59, accepted 2026-09-10.

Refs nebari-dev/governance#59

Why

These two pages describe governance built for Nebari Classic: one monolithic platform
in one repository. They grant Contributors "commit rights across all Nebari repositories"
and Core "repository-level management rights across all Nebari projects", and assume every
decision of consequence reaches one central team.

The platform is now a stable infrastructure core plus many independently developed packs,
each in its own repository. Org-wide blanket commit is both a security problem and
meaningless at that shape, and routing every decision through Core reintroduces exactly the
bottleneck the new architecture removed.

team-structure.md

  • Access is per repository. The org-wide commit claim is gone.
  • Core's mandate is narrowed to the seams: the Pack Specification, auth/routing/TLS
    conventions, the security baseline, the standards, the official designation, the
    trademark, and platform RFDs. It no longer claims authority over every repository.
  • Pack maintainers are documented as a role, holding access on their own repository and
    listed in that repository's MAINTAINERS.md, which is authoritative rather than this page.
  • Triage becomes a per-repository grant rather than a standing team, with a note that
    existing Triage members keep access where they are active. Flagging this because the RFD's
    role list omits Triage entirely while the team exists today with real members; this
    follows what the RFD does say about triage being granted per-repo.
  • SIGs are retired, since a pack repository is now what a SIG approximated. Ad-hoc
    working groups remain available.
  • Also notes that the core-team GitHub team is the authoritative record of Core membership,
    because its human size is the denominator for an RFD vote.

Deliberately preserved: the nomination process, the identity-verification heuristics, the
leave-a-team process, and the inactivity rule. The RFD does not change any of it, and it is
good material.

decision-making.md

  • Two lanes, repository-local first because it covers the overwhelming majority of
    decisions. Platform RFD triggers are listed rather than left to judgement.
  • How votes are counted is now written down: which reactions count, that each person
    counts once however many they leave, that bots are excluded from the denominator, and that
    "more than 50%" means strictly more than half, so ten members takes six votes rather than
    five.
  • A vote taken in a meeting must be recorded on the issue with the date and who was
    present, or it is treated as not yet decided.

Those last two are not cosmetic. RFD #59 itself reached consent in a meeting that left no
trace on the issue, which made it impossible to record honestly weeks later; and tallying
its vote produced two different answers depending on whether ❤️ counted and who was on
Core. Both gaps are now closed here and in
GOVERNANCE.md.

Bug fixed along the way

The RFD issue link pre-filled the wrong label: labels=type%3A+RFD, without the emoji.
No label of that name exists, and GitHub silently drops labels it cannot match, so RFDs
opened from that link arrived unlabelled. Now type%3A+RFD+%F0%9F%97%B3.

The same bug existed in the issue template itself and is fixed in
nebari-dev/.github#49.

Testing

  • yarn run build succeeds. This config sets onBrokenLinks: "throw", so the build is
    a real check on every link I touched, and it passes.
  • The build reports pre-existing broken anchors in /classic/how-tos/configuring-keycloak,
    three /classic/* pages that link to it, and
    /community/maintainers/release-process-branching-strategy. None are in these two pages,
    and I have left them alone.
  • Verified before rewriting that every internal link target these pages use still resolves:
    ./maintainers/triage-guidelines, ./file-issues#working-on-issues-to-improve-them (the
    id of issues.md), and /community/introduction/#how-to-contribute.
  • prettier@3.3.3 run with this repo's .prettierrc, so the diff is what lint-staged
    would produce at commit time rather than leaving a formatting-only follow-up.
  • Page ids are unchanged, so sidebarsCommunity.js needs no edit.

Note for reviewers

These pages now describe teams and process and link to the governance repository for policy,
rather than restating it. That split is deliberate, per the RFD: policy has one home, so the
two cannot drift apart the way the RFD status vocabulary did.

These two pages described governance built for Nebari Classic, a single
monolithic platform shipped from one repository. They granted Contributors
"commit rights across all Nebari repositories" and Core "repository-level
management rights across all Nebari projects", and assumed every decision
of consequence reached one central team.

Team structure:

- Access is per repository, following least privilege. The claim of
  org-wide commit is gone, because it was both a security problem and
  meaningless across dozens of independently versioned repositories.
- Core's mandate is narrowed to the seams it actually owns: the Pack
  Specification, the auth, routing and TLS conventions, the security
  baseline, the standards, the official designation, the trademark, and
  platform RFDs. It no longer claims authority over every repository.
- Pack maintainers are documented as a role, holding access on their own
  repository and listing themselves in that repository's MAINTAINERS.md.
- Triage becomes a per-repository grant rather than a standing team.
  Existing Triage members keep access where they are active.
- SIGs are retired, since a pack repository is now what a SIG used to
  approximate. Ad-hoc working groups remain available for cross-cutting
  topics.

Decision making:

- Two lanes, with the repository-local one first because it covers the
  overwhelming majority of decisions. Platform RFDs are the exception, and
  the triggers are listed rather than left to judgement.
- How votes are counted is now written down: which reactions count, that
  each person counts once, that bots are excluded from the denominator,
  and that "more than 50%" means strictly more than half.
- A vote taken in a meeting has to be recorded on the issue with the date
  and who was present, or it is treated as not yet decided. An earlier
  RFD reached consent in a meeting and left no trace, which made it
  impossible to record honestly weeks later.

Also fixes the RFD issue link, which pre-filled the label "type: RFD"
without its emoji. No such label exists, and GitHub silently drops labels
it cannot match, so RFDs opened from that link arrived unlabelled.

The full model lives in nebari-dev/governance. These pages describe the
teams and the process and link there rather than restating policy.

Item 2 of the implementation outline in nebari-dev/governance#59.
@netlify

netlify Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for nebari-docs2 ready!

Name Link
🔨 Latest commit c1f3bcf
🔍 Latest deploy log https://app.netlify.com/projects/nebari-docs2/deploys/6aa2a55ffa2b5d0008dad7b3
😎 Deploy Preview https://deploy-preview-718--nebari-docs2.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant