process
How proposals are raised, discussed, and accepted into the specification.
contents

This page describes how changes are made to the Core Protocol and Companion Protocol specifications. The process is designed to be lightweight, transparent, and tied to running code wherever possible.

Guiding principles

How to participate

Chat

We are on irc.libera.chat in the channels #coreprotocol and #coreprotocol-dev. You can chat without an account or special client software by using the web client.

E-Mail

Subscribers can join by sending email to coreprotocol-request at freelists.org with ‘subscribe’ in the Subject field or by visiting here.

You can send to the list without subscribing by sending to coreprotocol at freelists.org and there is an archive available here.

You can participate without any formal membership. The three main places work happens are:

All issues SHOULD go to the mailing list, proposals MUST go to the mailing list and discussion MAY occur anywhere.

Proposal lifecycle

Every proposal moves through a small set of stages. A proposal can be withdrawn or rejected at any stage; it can also be sent back to an earlier stage if new information arises.

  1. DraftAuthor writes the proposal and opens it for comment. The goal at this stage is to make the proposal readable, motivated, and concrete.
  2. DiscussionThe working group reviews the proposal. Feedback happens in the open. The author revises. Implementers raise concrete concerns — what breaks, what gets harder, what gets easier.
  3. ExperimentalAt least one implementation exists and can interoperate with a reference implementation. The proposal is marked experimental in the draft specification. Other implementers are invited to try it.
  4. Last callThe editor announces a final review period — typically two weeks. Remaining objections must be stated during this window. Silence is taken as assent.
  5. AcceptedThe proposal is merged into the specification. The specification version is bumped according to the compatibility rules below. The proposal remains archived for reference.

Proposal template

A good proposal is short, specific, and answers the right questions. Use roughly this shape:

# Title

## Summary
One paragraph. What is being changed?

## Motivation
Why is the current specification inadequate? What real use case or
failure mode prompted this? If possible, name the deployments or
implementations affected.

## Specification
The concrete text to add, change, or remove. Quote the sections of
the specification being edited. Use the same conventions (§1 of the
specification).

## Compatibility
- Does this change packet format, framing, or command codes?
- Is it backwards-compatible with nodes running an older version?
- What is the migration path?
- What version of the specification does this target?

## Reference implementation
A link to code, a branch, or a prototype that implements the proposal.
Running code is strongly preferred; a design without an implementation
will usually be asked to produce one before leaving Discussion.

## Prior discussion
Links to related issues, chat threads, or earlier proposals.

Versioning

The specification uses a simple two-number version: MAJOR.MINOR.

Every accepted proposal must state which kind of change it is. If the classification is contested, the editor decides during Last call.

Roles

The working group is deliberately flat. There are only two roles:

Editors are selected by the working group and rotate periodically. There is no permanent chair.

Current editor during initial draft implementation: Enot (ded) Skelly ~ enot AT mail box DOT org.

Code of conduct

Discussion is technical, not personal. Disagree with the proposal, not the author. Assume good faith. If you see behaviour that falls short of this, contact an editor.

generated 2026-05-15 14:35 -0700 · Hugo