Skip to main content

RFC Process

RFC = Request for Comments

RFCs are the mechanism for proposing significant changes to Framework M. They ensure that major decisions are documented, discussed, and deliberated before implementation.

When to Write an RFC

Required for:

  • New Protocols (Ports) in the core
  • Breaking changes to existing APIs
  • New adapters that ship with core
  • Significant architectural changes
  • New CLI commands or major flags
  • Changes to the metadata/DocType system

Not required for:

  • Bug fixes
  • Performance improvements (without API change)
  • Documentation updates
  • Refactoring (without behavioral change)
  • New adapters in separate packages

RFC Lifecycle

┌─────────┐     ┌─────────┐     ┌──────────┐     ┌──────────┐     ┌────────────┐
│ Draft │ ──► │ Review │ ──► │ Accepted │ ──► │ Merged │ ──► │ Implemented│
└─────────┘ └─────────┘ └──────────┘ └──────────┘ └────────────┘
│ │
▼ ▼
┌──────────┐ ┌───────────┐
│ Rejected │ │ Superseded│
└──────────┘ └───────────┘
StatusMeaning
DraftUnder active authoring
ReviewOpen for community feedback (minimum 14 days)
AcceptedTSC approved, ready for implementation
RejectedTSC declined with documented rationale
MergedImplementation PR merged
ImplementedFully released
SupersededReplaced by a newer RFC

Process

1. Create RFC

# Fork and create a new branch
git checkout -b rfc/your-proposal-name

# Copy template
cp docs/processes/rfc-template.md docs/rfcs/0000-your-proposal-name.md

# Edit and commit

2. Open Pull Request

  • Title: RFC: Your Proposal Title
  • Target: main branch
  • Label: rfc

3. Discussion Period

  • Minimum 14 days for review
  • RFC author addresses feedback
  • Anyone may comment; be constructive

4. TSC Decision

  • TSC reviews during regular meeting
  • Lazy consensus: Approved if no objections after 7 days
  • Contested: 2/3 TSC vote required
  • Decision recorded in RFC header

5. Implementation

  • Accepted RFCs tracked in GitHub Project
  • Implementation PRs reference the RFC
  • RFC updated to Implemented when released

RFC Template

See rfc-template.md.

RFC Numbering

  • RFCs are numbered sequentially: 0001, 0002, etc.
  • Number assigned when PR is opened
  • Rejected RFCs keep their number (not reused)

Where RFCs Live

docs/rfcs/
├── 0001-protocol-versioning.md
├── 0002-virtual-doctype-api.md
└── ...

Tips for Authors

  1. Start with the problem, not the solution
  2. Be specific — avoid vague proposals
  3. Consider alternatives — show you've thought about other approaches
  4. Keep it focused — one major change per RFC
  5. Anticipate questions — address likely objections upfront