RFCs
August 15, 2026 · View on GitHub
Substantial changes to OmniGraph — new user-facing surface, format or protocol
changes, anything irreversible or cross-cutting — go through a lightweight RFC
so the design is agreed as reviewable code before implementation starts.
docs/rfcs/ is the durable home for both externally authored proposals and
maintainer design series. Every formal RFC uses the same four-digit filename
namespace; explicit metadata selects the applicable lifecycle.
This complements the always-on review bar in ../dev/invariants.md: the invariants say what every change must respect; an RFC says why this particular change is worth making and how.
Two tracks, don't conflate their lifecycle. Every RFC must declare an
Author trackof eitherPublic contributionorMaintainer design series, plus an explicitStatus. Those fields—not the filename—select the lifecycle. Anyone may author a public contribution RFC, and merge means maintainer acceptance. Maintainer design series may be merged and revised while still draft so design, review findings, and implementation evidence remain visible together. Existingdocs/dev/rfc-00N-*.mdfiles are legacy internal design and implementation records that retain their existing lifecycle; new formal RFCs live here.
When you need one
- RFC required: new query/schema/CLI/HTTP surface; on-disk or wire-format changes; a new substrate dependency; anything the deny-list in ../dev/invariants.md flags; anything irreversible ("reversibility shapes evidence demand").
- RFC not required: bug fixes for an
acceptedissue, and the trivial fast-lane (typos, docs, deps) — see ../../CONTRIBUTING.md.
If you're unsure, open the issue anyway — triage routes it: accepted alone
means code may follow, while needs-rfc means the design lands first.
Public contribution lifecycle
Issue (feature/rfc + needs-triage)
│ maintainer accepts the problem → needs-rfc
▼
RFC pull request → adds docs/rfcs/NNNN-title.md
(Author track: Public contribution; Status: Proposed)
│
maintainer review ──▶ changes requested / declined (PR closed, with rationale)
│
▼
merged == Accepted (the merged file is the durable decision record)
│
▼
Implementation PR(s) reference the accepted RFC
- Author: anyone. Acceptance: a maintainer decision, performed by merging the RFC PR. Declining is closing it with rationale.
- The merged RFC is the accepted record — there is no separate sign-off step.
- Later reversals don't edit history: supersede with a new RFC that links back
and flip the old one's
StatustoSuperseded.
Numbering & naming
- Every formal RFC file is
docs/rfcs/NNNN-kebab-title.md, whereNNNNis the next free zero-padded integer.0000-template.mdis reserved. - Pick the number when you open the PR; if it collides with another in-flight RFC, the second to merge bumps theirs.
- Numbers are never reused. A maintainer-series or superseded record still reserves its number.
- Every RFC declares exactly one
Author trackand an explicitStatus. If a file has both YAML frontmatter and rendered metadata, the values must agree.
Public status values
Proposed (open PR) · Accepted (merged) · Declined (closed) ·
Superseded by NNNN · Implemented (set once the work lands, optional).
Copy 0000-template.md to start a public contribution RFC.
Maintainer design-series lifecycle
Maintainers use this lane for a related architecture series that benefits from
durable in-repository review before every decision or implementation dependency
is ready. Merge publishes the current reviewed design state; it does not by
itself mean acceptance. Each file names Maintainer design series as its author
track, identifies an owner, links its review ledger when one exists, and records
support boundaries alongside implementation evidence. This metadata is required
for new or materially revised series; older records are not silently reclassified.
When YAML frontmatter is present, its machine-readable status is draft,
research-blocked, accepted, implemented, or superseded; headings render
these as Draft, Research blocked, Accepted, Implemented, and
Superseded by RFC-<number>.
Moving a file to accepted or implemented requires dispositioning the blockers
owned by that RFC. Open findings in a sibling RFC do not prevent an independently
reviewable member of the series from advancing.
The explicit author track and status are a process boundary, not an authority distinction: both tracks are reviewed by maintainers, and neither may bypass the invariants, compatibility gates, or evidence required by the change.