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│
└──────────┘ └───────────┘
| Status | Meaning |
|---|---|
| Draft | Under active authoring |
| Review | Open for community feedback (minimum 14 days) |
| Accepted | TSC approved, ready for implementation |
| Rejected | TSC declined with documented rationale |
| Merged | Implementation PR merged |
| Implemented | Fully released |
| Superseded | Replaced 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:
mainbranch - 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
Implementedwhen 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
- Start with the problem, not the solution
- Be specific — avoid vague proposals
- Consider alternatives — show you've thought about other approaches
- Keep it focused — one major change per RFC
- Anticipate questions — address likely objections upfront