2018-12-03 13:27:58 +01:00
.. raw :: html
%proposalscssinjection%
2018-05-24 12:36:56 +02:00
.. title :: Proposals for Spec Changes to Matrix
2018-05-02 14:47:01 +02:00
.. contents :: Table of Contents
.. sectnum ::
Proposals for Spec Changes to Matrix
------------------------------------
2018-05-14 23:05:28 +02:00
2018-10-15 15:48:55 +02:00
If you are interested in submitting a change to the Matrix Specification,
2018-10-15 02:33:15 +02:00
please take note of the following guidelines.
2019-05-29 22:00:34 +02:00
Most changes to the Specification require a formal proposal. Bug fixes, typos,
and clarifications to existing behaviour do not need proposals - see the
`contributing guide <https://github.com/matrix-org/matrix-doc/blob/master/CONTRIBUTING.rst> `_
for more information on what does and does not need a proposal.
The proposal process involves some technical writing, having it reviewed by
everyone, having the proposal being accepted, then actually having your ideas
implemented as committed changes to the `Specification repository
2018-10-15 16:05:09 +02:00
<https://github.com/matrix-org/matrix-doc> `_.
2018-10-15 02:33:15 +02:00
2019-05-29 22:00:34 +02:00
.. TODO: Replace GH team link with https://matrix.org/foundation or something
2018-10-16 00:57:08 +02:00
Meet the `members of the Core Team
2018-10-16 00:44:05 +02:00
<https://github.com/orgs/matrix-org/teams/spec-core-team/members> `_, a group of
individuals tasked with ensuring the spec process is as smooth and painless as
2018-10-16 00:57:08 +02:00
possible. Members of the Core Team will do their best to participate in
2018-10-16 00:44:05 +02:00
discussion, summarise when things become long-winded, and generally try to act
towards the benefit of everyone. As a majority, team members have the ability
to change the state of a proposal, and individually have the final say in
proposal discussion.
2018-10-20 23:35:33 +02:00
Guiding Principles
------------------
Proposals **must** act to the greater benefit of the entire Matrix ecosystem,
rather than benefiting or privileging any single player or subset of players -
2019-05-29 22:00:34 +02:00
and must not contain any patent encumbered intellectual property. Members of
the Core Team pledge to act as a neutral custodian for Matrix on behalf of the
whole ecosystem.
2018-10-20 23:35:33 +02:00
For clarity: the Matrix ecosystem is anyone who uses the Matrix protocol. That
includes client users, server admins, client developers, bot developers,
2019-05-29 22:00:34 +02:00
bridge and application service developers, users and admins who are indirectly
using Matrix via 3rd party networks which happen to be bridged, server developers,
room moderators and admins, companies/projects building products or services on
2018-10-20 23:35:33 +02:00
Matrix, spec contributors, translators, and those who created it in
the first place.
"Greater benefit" could include maximising:
* the number of end-users reachable on the open Matrix network
* the number of regular users on the Matrix network (e.g. 30-day retained
federated users)
* the number of online servers in the open federation
* the number of developers building on Matrix
* the number of independent implementations which use Matrix
* the quality and utility of the Matrix spec
In addition, proposal authors are expected to uphold the following values in
their proposed changes to the Matrix protocol:
* Supporting the whole long-term ecosystem rather than individual stakeholder gain
* Openness rather than proprietariness
* Collaboration rather than competition
* Accessibility rather than elitism
* Transparency rather than stealth
* Empathy rather than contrariness
* Pragmatism rather than perfection
* Proof rather than conjecture
Process
-------
2018-10-15 02:33:15 +02:00
The process for submitting a Matrix Spec Change (MSC) Proposal in detail is as
follows:
2018-10-15 15:51:54 +02:00
- Create a first draft of your proposal using `GitHub-flavored markdown
2018-10-15 02:33:15 +02:00
<https://help.github.com/articles/basic-writing-and-formatting-syntax/>`_
- In the document, clearly state the problem being solved, and the possible
solutions being proposed for solving it and their respective trade-offs.
2018-12-13 12:14:21 +01:00
- Proposal documents are intended to be as lightweight and flexible as the
2018-05-15 17:07:55 +02:00
author desires; there is no formal template; the intention is to iterate
as quickly as possible to get to a good design.
2018-10-15 02:33:15 +02:00
- However, a `template with suggested headers
2018-10-17 15:35:15 +02:00
<https://github.com/matrix-org/matrix-doc/blob/master/proposals/0000-proposal-template.md>`_
2018-10-15 02:33:15 +02:00
is available to get you started if necessary.
- Take care in creating your proposal. Specify your intended changes, and
give reasoning to back them up. Changes without justification will likely
be poorly received by the community.
2018-10-15 16:05:09 +02:00
- Fork and make a PR to the `matrix-doc
2018-10-16 01:06:44 +02:00
<https://github.com/matrix-org/matrix-doc>`_ repository. The ID of your PR
will become the MSC ID for the lifetime of your proposal.
2018-10-15 02:33:15 +02:00
2018-10-16 00:44:05 +02:00
- The proposal must live in the `` proposals/ `` directory with a filename that
follows the format `` 1234-my-new-proposal.md `` where `` 1234 `` is the MSC
2018-10-15 15:54:28 +02:00
ID.
2018-10-15 02:33:15 +02:00
- Your PR description must include a link to the rendered markdown document
2018-12-13 12:14:21 +01:00
and a summary of the proposal.
2018-10-15 16:05:09 +02:00
- It is often very helpful to link any related MSCs or `matrix-doc issues
<https://github.com/matrix-org/matrix-doc/issues>`_ to give context
2018-10-15 23:51:28 +02:00
for the proposal.
2018-10-21 00:52:39 +02:00
- Additionally, please be sure to sign off your proposal PR as per the
2018-10-23 19:37:51 +02:00
guidelines listed on `CONTRIBUTING.rst
2018-10-21 00:52:39 +02:00
<https://github.com/matrix-org/matrix-doc/blob/master/CONTRIBUTING.rst>`_.
2018-05-15 17:07:55 +02:00
2018-10-17 14:49:01 +02:00
- Gather feedback as widely as possible.
2018-05-15 17:07:55 +02:00
2018-10-15 02:33:15 +02:00
- The aim is to get maximum consensus towards an optimal solution. Sometimes
trade-offs are required to meet this goal. Decisions should be made to the
benefit of all major use cases.
2018-05-15 17:07:55 +02:00
- A good place to ask for feedback on a specific proposal is
2018-10-15 16:05:09 +02:00
`#matrix-spec:matrix.org <https://matrix.to/#/#matrix-spec:matrix.org> `_ .
If preferred, an alternative room can be created and advertised in
#matrix-spec:matrix.org. Please also link to the room in your PR
description.
- For additional discussion areas, know that that #matrix-dev:matrix.org is
for developers using existing Matrix APIs, #matrix:matrix.org is for users
2018-10-15 15:48:55 +02:00
trying to run Matrix apps (clients & servers) and
2018-10-15 16:05:09 +02:00
#matrix-architecture:matrix.org is for cross-cutting discussion of matrix's
2018-10-15 02:33:15 +02:00
architectural design.
2018-05-17 19:21:39 +02:00
- The point of the spec proposal process is to be collaborative rather than
competitive, and to try to solve the problem in question with the optimal
2018-10-15 02:33:15 +02:00
set of trade-offs. The author should neutrally gather the various
2018-05-17 19:21:39 +02:00
viewpoints and get consensus, but this can sometimes be time-consuming (or
the author may be biased), in which case an impartial 'shepherd' can be
2018-10-27 20:34:52 +02:00
assigned to help guide the proposal through this process instead. A shepherd is
2018-10-16 00:57:08 +02:00
typically a neutral party from the Core Team or an experienced member of
2018-10-17 17:17:07 +02:00
the community. There is no formal process for assignment. Simply ask for a
shepherd to help get your proposal through and one will be assigned based
on availability. Having a shepherd is not a requirement for proposal
2018-10-15 02:33:15 +02:00
acceptance.
2018-10-15 23:37:41 +02:00
2018-10-16 00:57:08 +02:00
- Members of the Core Team and community will review and discuss the PR in the
2018-10-15 15:48:55 +02:00
comments and in relevant rooms on Matrix. Discussion outside of GitHub should
2018-10-15 15:46:26 +02:00
be summarised in a comment on the PR.
2018-10-20 23:50:26 +02:00
- When a member of the Core Team believes that no new discussion points are
being made, they will propose a motion for a final comment period (FCP),
along with a *disposition* of either merge, close or postpone. This FCP is
provided to allow a short period of time for any invested party to provide a
final objection before a major decision is made. If sufficient reasoning is
given, an FCP can be cancelled. It is often preceded by a comment summarising
the current state of the discussion, along with reasoning for its occurrence.
2018-10-16 00:57:08 +02:00
- A concern can be raised by a Core Team member at any time, which will block
2019-01-29 15:36:26 +01:00
an FCP from beginning. An FCP will only begin when a **75% majority** of core
2018-10-15 02:33:15 +02:00
team members agree on its outcome, and all existing concerns have been
resolved.
- The FCP will then begin and last for 5 days, giving anyone else some time to
speak up before it concludes. On its conclusion, the disposition of the FCP
2018-10-20 23:50:26 +02:00
will be carried out. If sufficient reasoning against the disposition is
2018-10-15 16:09:04 +02:00
raised, the FCP can be cancelled and the MSC will continue to evolve
accordingly.
2018-10-15 23:51:28 +02:00
- Once the proposal has been accepted and merged, it is time to submit the
2018-10-15 15:48:55 +02:00
actual change to the Specification that your proposal reasoned about. This is
2018-10-15 23:51:28 +02:00
known as a spec PR. However in order for the spec PR to be accepted, an
implementation **must** be shown to prove that it works well in practice. A
2018-10-15 16:18:20 +02:00
link to the implementation should be included in the PR description. In
2018-10-15 02:33:15 +02:00
addition, any significant unforeseen changes to the original idea found
2018-10-17 14:34:57 +02:00
during this process will warrant another MSC. Any minor, non-fundamental
changes are allowed but **must** be documented in the original proposal
document. This ensures that someone reading a proposal in the future doesn't
assume old information wasn't merged into the spec.
2018-10-15 02:33:15 +02:00
2018-10-21 00:52:39 +02:00
- Similar to the proposal PR, please sign off the spec PR as per the
2018-10-23 19:37:51 +02:00
guidelines on `CONTRIBUTING.rst
2018-10-21 00:52:39 +02:00
<https://github.com/matrix-org/matrix-doc/blob/master/CONTRIBUTING.rst>`_.
2018-05-15 17:07:55 +02:00
2018-10-15 02:33:15 +02:00
- Your PR will then be reviewed and hopefully merged on the grounds it is
implemented sufficiently. If so, then give yourself a pat on the back knowing
2018-10-15 15:48:55 +02:00
you've contributed to the Matrix protocol for the benefit of users and
2018-10-15 02:33:15 +02:00
developers alike :)
2018-05-15 17:07:55 +02:00
2018-10-16 00:03:03 +02:00
The process for handling proposals is shown visually in the following diagram.
Note that the lifetime of a proposal is tracked through the corresponding
2018-10-17 15:35:15 +02:00
labels for each stage on the `matrix-doc
<https://github.com/matrix-org/matrix-doc> `_ issue and pull request trackers.
2018-05-02 14:47:01 +02:00
2018-05-08 16:11:15 +02:00
::
2018-10-15 02:33:15 +02:00
+ +
2018-10-16 00:03:03 +02:00
Proposals | Spec PRs | Additional States
+-------+ | +------+ | +---------------+
2018-10-15 02:33:15 +02:00
| |
+----------------------+ | +---------+ | +-----------+
| | | | | | | |
2018-10-15 16:38:48 +02:00
| Proposal | | +------= Spec PR | | | Postponed |
2018-10-15 02:33:15 +02:00
| Drafting and Initial | | | | Missing | | | |
| Feedback Gathering | | | | | | +-----------+
2018-12-13 12:14:21 +01:00
| | | | +----+----+ |
2018-10-15 02:33:15 +02:00
+----------+-----------+ | | | | +----------+
| | | v | | |
v | | +-----------------+ | | Closed |
+-------------------+ | | | | | | |
| | | | | Spec PR Created | | +----------+
| Proposal PR | | | | and In Review | |
2018-12-13 12:14:21 +01:00
| In Review | | | | | |
| | | | +--------+--------+ |
+---------+---------+ | | | |
| | | v |
v | | +-----------+ |
+----------------------+ | | | | |
| | | | | Spec PR | |
| Proposed Final | | | | Merged! | |
| Comment Period | | | | | |
2018-10-15 16:34:41 +02:00
| | | | +-----------+ |
2018-10-15 02:33:15 +02:00
+----------+-----------+ | | |
| | | |
v | | |
2018-12-13 12:14:21 +01:00
+----------------------+ | | |
| | | | |
| Final Comment Period | | | |
| | | | |
+----------+-----------+ | | |
| | | |
v | | |
+----------------------+ | | |
| | | | |
| Final Comment Period | | | |
| Complete | | | |
| | | | |
+----------+-----------+ | | |
2018-10-15 02:33:15 +02:00
| | | |
+-----------------+ |
| |
+ +
2018-05-10 17:02:55 +02:00
2018-05-14 23:05:28 +02:00
Lifetime States
---------------
2018-10-23 19:37:51 +02:00
**Note:** All labels are to be placed on the proposal PR.
2018-10-16 00:17:08 +02:00
=============================== ============================= ====================================
Name GitHub Label Description
=============================== ============================= ====================================
2019-01-07 21:39:50 +01:00
Proposal Drafting and Feedback N/A A proposal document which is still work-in-progress but is being shared to incorporate feedback. Please prefix your proposal's title with `` [WIP] `` to make it easier for reviewers to skim their notifications list.
2018-10-16 00:57:08 +02:00
Proposal In Review proposal-in-review A proposal document which is now ready and waiting for review by the Core Team and community
2019-01-29 15:36:26 +01:00
Proposed Final Comment Period proposed-final-comment-period Currently awaiting signoff of a 75% majority of team members in order to enter the final comment period
2018-12-13 12:14:21 +01:00
Final Comment Period final-comment-period A proposal document which has reached final comment period either for merge, closure or postponement
Final Commment Period Complete finished-final-comment-period The final comment period has been completed. Waiting for a demonstration implementation
Spec PR Missing spec-pr-missing The proposal has been agreed, and proven with a demonstration implementation. Waiting for a PR against the Spec
Spec PR In Review spec-pr-in-review The spec PR has been written, and is currently under review
2018-10-23 19:37:51 +02:00
Spec PR Merged merged A proposal with a sufficient working implementation and whose Spec PR has been merged!
2018-12-13 12:14:21 +01:00
Postponed proposal-postponed A proposal that is temporarily blocked or a feature that may not be useful currently but perhaps
2018-10-16 00:17:08 +02:00
sometime in the future
Closed proposal-closed A proposal which has been reviewed and deemed unsuitable for acceptance
2019-05-29 22:00:34 +02:00
Obsolete obsolete A proposal which has been made obsolete by another proposal or decision elsewhere.
2018-10-16 00:17:08 +02:00
=============================== ============================= ====================================
2018-05-14 23:05:28 +02:00
2018-05-14 15:25:12 +02:00
Proposal Tracking
-----------------
2018-10-17 15:35:15 +02:00
This is a living document generated from the list of proposals on the issue and
pull request trackers of the `matrix-doc
<https://github.com/matrix-org/matrix-doc> `_ repo.
2018-05-14 15:25:12 +02:00
2018-10-15 02:33:15 +02:00
We use labels and some metadata in MSC PR descriptions to generate this page.
2018-10-17 15:35:15 +02:00
Labels are assigned by the Core Team whilst triaging the proposals based on those
2018-10-15 16:05:09 +02:00
which exist in the `matrix-doc <https://github.com/matrix-org/matrix-doc> `_
repo already.
2018-05-14 15:25:12 +02:00
2018-10-15 15:46:26 +02:00
It is worth mentioning that a previous version of the MSC process used a
mixture of GitHub issues and PRs, leading to some MSC numbers deriving from
GitHub issue IDs instead. A useful feature of GitHub is that it does
automatically resolve to an issue, if an issue ID is placed in a pull URL. This
2018-10-15 16:05:09 +02:00
means that https://github.com/matrix-org/matrix-doc/pull/$MSCID will correctly
2018-10-15 15:46:26 +02:00
resolve to the desired MSC, whether it started as an issue or a PR.
2018-05-14 15:25:12 +02:00
Other metadata:
2018-05-14 10:57:43 +02:00
2018-10-15 23:37:41 +02:00
- The MSC number is taken from the GitHub Pull Request ID. This is carried for
the lifetime of the proposal. These IDs do not necessary represent a
chronological order.
2018-10-15 15:48:55 +02:00
- The GitHub PR title will act as the MSC's title.
2018-05-15 17:07:55 +02:00
- Please link to the spec PR (if any) by adding a "PRs: #1234" line in the
issue description.
2018-10-15 15:48:55 +02:00
- The creation date is taken from the GitHub PR, but can be overridden by
2018-10-15 02:33:15 +02:00
adding a "Date: yyyy-mm-dd" line in the PR description.
2018-10-15 15:48:55 +02:00
- Updated Date is taken from GitHub.
2018-10-15 02:33:15 +02:00
- Author is the creator of the MSC PR, but can be overridden by adding a
2018-05-15 17:07:55 +02:00
"Author: @username" line in the body of the issue description. Please make
2018-10-15 15:48:55 +02:00
sure @username is a GitHub user (include the @!)
2018-05-15 17:07:55 +02:00
- A shepherd can be assigned by adding a "Shepherd: @username" line in the
2018-10-15 15:48:55 +02:00
issue description. Again, make sure this is a real GitHub user.