mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-09 01:35:18 +02:00
Formalize the public contribution surface. Maintainers keep a separate internal process and are exempt from the intake gates; everyone stays bound by review, CODEOWNERS, and branch protection. Model: - Issues = problem reports only (bug form + config.yml redirects ideas to Discussions and disables blank issues). - Discussions = ideas + RFC incubation. - RFCs = anyone (incl. external) authors docs/rfcs/NNNN-*.md; a maintainer merging it is acceptance. Distinct from the maintainer-internal docs/dev/rfc-00N-* track. - PRs = link an `accepted` issue or accepted RFC, or use the trivial fast-lane (typos/docs/deps). Enforced softly to start (template + review). Adds GOVERNANCE.md, rewrites CONTRIBUTING.md, adds docs/rfcs/ (README + template), .github issue/PR/discussion templates. Wires docs/rfcs/ into the doc-link checker (excluded like releases; linked from docs/dev/index.md). Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
106 lines
6 KiB
Markdown
106 lines
6 KiB
Markdown
# Governance
|
|
|
|
This document describes how **external contributions** to OmniGraph are
|
|
proposed, accepted, and merged. It exists so an outside contributor can answer,
|
|
without asking: *where does my report/idea/change go, who decides, and what has
|
|
to happen before code lands?*
|
|
|
|
> **Scope.** This governs the public contribution surface — Issues,
|
|
> Discussions, RFCs, and pull requests from people outside the ModernRelay
|
|
> team. **Maintainers operate under a separate internal process** and are not
|
|
> bound by the intake gates below. Everyone, maintainer or not, is still bound
|
|
> by the universal gates: branch protection on `main` and CODEOWNERS review
|
|
> (see [docs/dev/branch-protection.md](docs/dev/branch-protection.md) and
|
|
> [docs/dev/codeowners.md](docs/dev/codeowners.md)).
|
|
|
|
## Roles
|
|
|
|
| Role | Who | Authority |
|
|
|---|---|---|
|
|
| **Maintainer** | The code owners in [`.github/CODEOWNERS`](.github/CODEOWNERS) (generated from [`.github/codeowners-roles.yml`](.github/codeowners-roles.yml)) | Validate issues, accept/reject RFCs, review and merge PRs, set direction. Final decision authority. |
|
|
| **Contributor** | Anyone else | Report problems (Issues), propose ideas (Discussions), author RFCs, and open pull requests. |
|
|
|
|
Decision authority rests with the maintainers. CODEOWNERS is the single source
|
|
of truth for who that is; this document does not duplicate the list.
|
|
|
|
## The three channels
|
|
|
|
Each channel has one job. Using the right one is the first thing we ask of a
|
|
contribution.
|
|
|
|
| Channel | Purpose | Not for |
|
|
|---|---|---|
|
|
| **[Issues](../../issues)** | **Report a problem** — a bug, a regression, a documented behavior that's wrong. Something concrete and reproducible. | Feature requests, ideas, questions, or design proposals (→ Discussions). |
|
|
| **[Discussions](../../discussions)** | **Propose and explore** — new ideas, feature requests, questions, and the incubation of RFCs. | Bug reports (→ Issues). |
|
|
| **Pull requests** | **Land a sanctioned change** — a fix for a *validated* issue, an *accepted* RFC, or a trivial change (see fast-lane). | Substantive change with no backing issue/RFC — it will be redirected. |
|
|
|
|
## How a change becomes mergeable
|
|
|
|
```
|
|
┌─────────── bug ───────────┐ ┌──────── idea / feature ────────┐
|
|
▼ │ ▼ │
|
|
Issue (problem report) │ Discussion (idea / RFC incubation) │
|
|
│ │ │ │
|
|
maintainer triage │ rough consensus │
|
|
│ │ │ graduate │
|
|
▼ │ ▼ │
|
|
label: accepted ──────────┐ │ RFC PR (docs/rfcs/NNNN-*.md) │
|
|
│ │ │ │ │
|
|
│ │ │ maintainer review │
|
|
▼ ▼ │ ▼ │
|
|
Pull request ◀──────────┴──────────│── merged == accepted │
|
|
(links the issue or the accepted RFC) ◀───────┘ (implementation PRs reference it) │
|
|
│
|
|
review + CODEOWNERS + branch protection
|
|
▼
|
|
merged
|
|
```
|
|
|
|
### Issues → validated
|
|
A new issue starts unlabeled. A maintainer triages it and, if it's a real,
|
|
in-scope problem, applies the **`accepted`** label. **Only `accepted` issues are
|
|
open for a contributor PR.** This prevents the "I fixed an issue you hadn't
|
|
agreed was a problem" rejection. Want to fix something? Get the issue accepted
|
|
first, or pick one already labelled `accepted` / `help wanted`.
|
|
|
|
### Discussions → RFCs → accepted
|
|
Ideas and feature requests start in **Discussions**. Anyone — including external
|
|
contributors — may then **author an RFC** by opening a pull request that adds
|
|
`docs/rfcs/NNNN-title.md` (see [docs/rfcs/README.md](docs/rfcs/README.md)). The
|
|
RFC is reviewed as code; **a maintainer merging it is the act of acceptance**
|
|
(it becomes the durable decision record). Implementation PRs then reference the
|
|
accepted RFC.
|
|
|
|
Authoring an RFC is open to everyone; **accepting one is a maintainer
|
|
decision.** Maintainers may also decline an RFC, with rationale, by closing it.
|
|
|
|
### Pull requests → sanctioned
|
|
A contributor PR must do one of:
|
|
1. link a maintainer-**`accepted`** issue it fixes, or
|
|
2. be (or reference) an **accepted RFC**, or
|
|
3. qualify for the **trivial fast-lane**.
|
|
|
|
**Trivial fast-lane** — these may be opened directly, no prior issue/RFC:
|
|
typo and wording fixes, documentation corrections, dependency bumps, comment
|
|
fixes, and obviously-correct one-line CI tweaks. When in doubt, open an Issue or
|
|
Discussion first; a PR that turns out to be non-trivial will be asked to.
|
|
|
|
A substantive PR with no backing issue/RFC will be closed with a pointer to the
|
|
right channel — not as a judgment of the idea, but to keep design discussion
|
|
where it's reviewable.
|
|
|
|
## What maintainers do *not* gate
|
|
Maintainers' own changes do not pass through the intake gates above — the team
|
|
runs a separate internal process. The universal gates (review, CODEOWNERS,
|
|
branch protection, CI) apply to everyone. Enforcement of the intake rules is, to
|
|
start, **by convention and review** (PR template + labels); an automated check
|
|
keyed to author association may be added later if volume warrants.
|
|
|
|
## Code of conduct & security
|
|
- Conduct: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
|
|
- Security issues are **not** public Issues — see [SECURITY.md](SECURITY.md).
|
|
|
|
## Changing this document
|
|
Governance changes the same way code does: a pull request, reviewed by
|
|
maintainers. This file describes the external surface; the internal maintainer
|
|
process is intentionally out of scope here.
|