DocumentsThe protocol and its limits

The RFC process

1 min readSource rfc-process.mdsha256 3fb91d6511e3b890…

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 or 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#

StateWhat happensMinimum time
DraftWritten from the template below; published with a number MRFC-NNNN—
Last callOpen for objections from members, witnesses, supervisors and implementers30 days
DecidedAccepted or rejected. The decision, every formal objection and the answer to each are published together—
ImplementedThe 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)