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
/cannotor in the roadmap's Refused list. These also need a major version and 90 days' notice. - Anything the stability policy 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)