# The RFC process

Changes to the protocol are proposed, published and decided in the open.

## What needs an RFC

- The wire format: legs, blocks, locators, anything in SPEC §§4–8.
- The verdict rule, and the independence gate.
- Removing or weakening an entry in [`/cannot`](/cannot.json) or in the roadmap's Refused list. These also need a major version and 90 days' notice.
- Anything the [stability policy](/stability-policy.md) marks **frozen**.

Additive, experimental features do not need an RFC. They ship marked `experimental` and follow the stability policy.

## The steps

| State | What happens | Minimum time |
|---|---|---|
| **Draft** | Written from the template below; published with a number `MRFC-NNNN` | — |
| **Last call** | Open for objections from members, witnesses, supervisors and implementers | 30 days |
| **Decided** | Accepted or rejected. The decision, every formal objection and the answer to each are published together | — |
| **Implemented** | The change ships with its tests; the spec pin changes; conformance vectors are regenerated | — |

## Who decides, today

- **The maintainer decides.** The honest statement is that Mirror has one maintainer.
- **Objections are formal.** A formal objection must be published with the decision and answered in writing.
- **Corridors stay with their members.** What an RFC cannot override is a quorum's ratification: a protocol change never ratifies a corridor or a witness on the members' behalf.

When an independent body exists, whether a members' technical committee or a named review board, this page will name it and move the decision there. None is named before its members have agreed.

## Template

```
MRFC-NNNN: <title>
Status: Draft | Last call (until YYYY-MM-DD) | Accepted | Rejected | Implemented
Affects: wire format | verdict rule | refusal list | roadmap Refused | frozen API
Problem:      what fails today, with a reproducing test or a concrete case
Proposal:     the change, precisely enough to implement from
Refusals:     every /cannot entry and roadmap refusal it touches, and why it does not weaken one
Privacy:      what the operator learns that it did not learn before (usually: nothing - say so)
Migration:    what members, witnesses and implementers must do, and by when
Tests:        the tests and vectors that will pin it
Objections:   (filled at last call)
Decision:     (filled when decided, with the answer to each objection)
```
