-
Notifications
You must be signed in to change notification settings - Fork 118
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #296 from algorandfoundation/ARC-0-rules-submission
[ARC-0] Change to arc submission
- Loading branch information
Showing
3 changed files
with
36 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,13 +14,13 @@ created: 2021-10-28 | |
### What is an ARC? | ||
|
||
ARC stands for Algorand Request for Comments. An ARC is a design document providing information to the Algorand community or describing a new feature for Algorand or its processes or environment. | ||
The ARC should provide a concise technical specification and a rationale for the feature. | ||
The ARC should provide a concise technical specification and a rationale for the feature. | ||
The ARC author is responsible for building consensus within the community and documenting dissenting opinions. | ||
|
||
We intend ARCs to be the primary mechanisms for proposing new features and collecting community technical input on an issue. | ||
We maintain ARCs as text files in a versioned repository. Their revision history is the historical record of the feature proposal. | ||
|
||
## Specification | ||
## Specification | ||
|
||
### ARC Types | ||
|
||
|
@@ -34,31 +34,42 @@ There are three types of ARC: | |
|
||
We recommend that a single ARC contains a single key proposal or new idea. The more focused the ARC, the more successful it tends to be. A change to one client does not require an ARC; a change that affects multiple clients, or defines a standard for multiple apps to use, does. | ||
|
||
An ARC must meet specific minimum criteria. It must be a clear and complete description of the proposed enhancement. | ||
An ARC must meet specific minimum criteria. It must be a clear and complete description of the proposed enhancement. | ||
The enhancement must represent a net improvement. If applicable, the proposed implementation must be solid and not complicate the protocol unduly. | ||
|
||
### Shepherding an ARC | ||
|
||
Parties involved in the process are you, the champion or *ARC author*, the [*ARC editors*](#arc-editors), and the <a href="https://github.com/orgs/algorand/people">*Algorand Core Developers*</a>. | ||
Parties involved in the process are you, the champion or *ARC author*, the [*ARC editors*](#arc-editors), the <a href="https://github.com/orgs/algorand/people">*Algorand Core Developers*</a>, and the <a href="https://github.com/orgs/algorandfoundation/people">*Algorand Foundation Team*</a>. | ||
|
||
Before writing a formal ARC, you should vet your idea. Ask the Algorand community first if an idea is original to avoid wasting time on something that will be rejected based on prior research. We recommend opening a discussion thread on the <a href="https://forum.algorand.org/c/arc/19">Algorand forum</a> to do this. You can also share the idea on the <a href="https://discord.gg/algorand">Algorand Discord #arcs chat room</a>. | ||
Before writing a formal ARC, you should vet your idea. Ask the Algorand community first if an idea is original to avoid wasting time on something that will be rejected based on prior research. You **MUST** open a discussion thread on the <a href="https://forum.algorand.org/c/arc/19">Algorand forum</a> to do this. You **SHOULD** also share the idea on the <a href="https://discord.gg/algorand">Algorand Discord #arcs chat room</a>. | ||
|
||
Once the idea has been vetted, your next responsibility will be to create a <a href="https://github.com/algorandfoundation/ARCs/pulls">pull request</a> to present (through an ARC) the idea to the reviewers and all interested parties and invite editors, developers, and the community to give feedback on the aforementioned issue. | ||
|
||
Once the idea has been vetted, your next responsibility will be to create a <a href="https://github.com/algorandfoundation/ARCs/pulls">pull request</a> to present (through an ARC) the idea to the reviewers and all interested parties and invite editors, developers, and the community to give feedback on the aforementioned issue. The pull Request **MUST** be editable by ARC Editor, it will be closed otherwise. You should try and gauge whether the interest in your ARC is commensurate with both the work involved in implementing it and how many parties will have to conform to it. Negative community feedback will be considered and may prevent your ARC from moving past the Draft stage. | ||
The pull request with the **DRAFT** status **MUST**: | ||
|
||
To facilitate the discussion between each party involved in an ARC, you **SHOULD** use the specific <a href="https://discord.com/channels/491256308461207573/1011541977189326852"> channel in the Algorand Discord</a>. | ||
- Have been vetted on the forum. | ||
- Be editable by ARC Editors; it will be closed otherwise. | ||
|
||
The ARC-Author, is in charge of creating the PR to change the Status to **Review**. | ||
You should try and gauge whether the interest in your ARC is commensurate with both the work involved in implementing it and how many parties will have to conform to it. Negative community feedback will be considered and may prevent your ARC from moving past the Draft stage. | ||
|
||
Before updating the status of an ARC to "DRAFT" or "LAST CALL", a discussion will occur during the ARC Meeting on the <a href="https://discord.gg/HQ8QeJNua7">ARC-Lounge Discord Channel</a>. | ||
To facilitate the discussion between each party involved in an ARC, you **SHOULD** use the specific <a href="https://discord.com/channels/491256308461207573/1011541977189326852">channel in the Algorand Discord</a>. | ||
|
||
*In short, the role of a champion is to write the ARC using the style and format described below, shepherd the discussions in the appropriate forums, and build community consensus around the idea.* | ||
The ARC author is in charge of creating the PR and changing the status to **REVIEW**. | ||
|
||
### ARC Process | ||
The pull request with the **REVIEW** status **MUST**: | ||
|
||
- Contain a reference implementation. | ||
- Have garnered the interest of multiple projects; it will be set to **STAGNANT** otherwise. | ||
|
||
To update the status of an ARC from **REVIEW** to **LAST CALL**, a discussion will occur with all parties involved in the process. Any stakeholder **SHOULD** implement the ARC to point out any flaws that might occur. | ||
|
||
*In short, the role of a champion is to write the ARC using the style and format described below, shepherd the discussions in the appropriate forums, build community consensus around the idea, and gather projects with similar needs who will implement it.* | ||
|
||
### ARC Process | ||
|
||
The following is the standardization process for all ARCs in all tracks: | ||
|
||
![ARC Status Diagram](../assets/arc-0000/ARC-process-update.jpeg) | ||
![ARC Status Diagram](../assets/arc-0000/ARC-process-update.png) | ||
|
||
**Idea** - An idea that is pre-draft. This is not tracked within the ARC Repository. | ||
|
||
|
@@ -72,13 +83,16 @@ If this period results in necessary normative change, it will revert the ARC to | |
|
||
**Final** - This ARC represents the final standard. A Final ARC exists in a state of finality and should only be updated to correct errata and add non-normative clarifications. | ||
|
||
**Stagnant** - Any ARC in `DRAFT` or `REVIEW`, if inactive for 6 months or greater, is moved to `STAGNANT`. An ARC may be resurrected from this state by Authors or ARC Editors by moving it back to `DRAFT`. | ||
**Stagnant** - Any ARC in `DRAFT`,`REVIEW` or `LAST CALL`, if inactive for 6 months or greater, is moved to `STAGNANT`. An ARC may be resurrected from this state by Authors or ARC Editors by moving it back to `DRAFT`. | ||
|
||
> An ARC with the status **STAGNANT** which does not have any activity for 1 month will be closed. | ||
> *ARC Authors are notified of any algorithmic change to the status of their ARC* | ||
>*ARC Authors are notified of any algorithmic change to the status of their ARC* | ||
**Withdrawn** - The ARC Author(s)/Editor(s) has withdrawn the proposed ARC. This state has finality and can no longer be resurrected using this ARC number. If the idea is pursued later, it is considered a new proposal. | ||
|
||
**Withdrawn** - The ARC Author(s) has withdrawn the proposed ARC. This state has finality and can no longer be resurrected using this ARC number. If the idea is pursued later, it is considered a new proposal. | ||
**Living** - A special status for ARCs which, by design, will be continually updated and **MIGHT** not reach a state of finality. | ||
|
||
**Living** - A special status for ARCs which, by design, will be continually updated and not reach a state of finality. | ||
**Deprecated** - A status for ARCs that are no longer aligned with our ecosystem or have been superseded by another ARC. | ||
|
||
### What belongs in a successful ARC? | ||
|
||
|
@@ -90,7 +104,7 @@ Each ARC should have the following parts: | |
- Rationale - The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, e.g., how the feature is supported in other languages. The rationale may also provide evidence of consensus within the community and should discuss significant objections or concerns raised during discussions. | ||
- Backwards Compatibility - All ARCs that introduce backward incompatibilities must include a section describing these incompatibilities and their severity. The ARC must explain how the author proposes to deal with these incompatibilities. ARC submissions without a sufficient backward compatibility treatise may be rejected outright. | ||
- Test Cases - Test cases for implementation are mandatory for ARCs that are affecting consensus changes. Tests should either be inlined in the ARC as data (such as input/expected output pairs, or included in `../assets/arc-###/<filename>`. | ||
- Reference Implementation - An optional section that contains a short reference/example implementation that people MUST use to assist in understanding or implementing this specification. If the reference implementation is too complex, the reference implementation MUST be included in `../assets/arc-###/<filename>` | ||
- Reference Implementation - An section that contains a reference/example implementation that people **MUST** use to assist in understanding or implementing this specification. If the reference implementation is too complex, the reference implementation **MUST** be included in `../assets/arc-###/<filename>` | ||
- Security Considerations - All ARCs must contain a section that discusses the security implications/considerations relevant to the proposed change. Include information that might be important for security discussions, surfaces risks, and can be used throughout the life-cycle of the proposal. E.g., include security-relevant design decisions, concerns, essential discussions, implementation-specific guidance and pitfalls, an outline of threats and risks, and how they are being addressed. ARC submissions missing the "Security Considerations" section will be rejected. An ARC cannot proceed to status "Final" without a Security Considerations discussion deemed sufficient by the reviewers. | ||
- Copyright Waiver - All ARCs must be in the public domain. See the bottom of this ARC for an example copyright waiver. | ||
|
||
|
@@ -110,14 +124,10 @@ Each ARC must begin with an <a href="https://www.ietf.org/rfc/rfc822.txt">RFC 82 | |
|
||
` author:` *A list of the author's or authors' name(s) and/or username(s), or name(s) and email(s). Details are below.* | ||
>The `author` header lists the names, email addresses, or usernames of the authors/owners of the ARC. Those who prefer anonymity may use a username only or a first name and a username. The format of the `author` header value must be: | ||
> Random J. User <[email protected]> or Random J. User (@username) | ||
>At least one author must use a GitHub username in order to get notified of change requests and can approve or reject them. | ||
` * discussions-to:` *A url pointing to the official discussion thread* | ||
>While an ARC is in state `Idea`, a `discussions-to` header will indicate the URL where the ARC is being discussed. As mentioned above, an example of a place to discuss your ARC is the Algorand forum, but you can also use Algorand Discord #arcs chat room. | ||
>When the ARC reach the state `Draft`, the `discussions-to` header will redirect to the discussion in <a href="https://github.com/algorandfoundation/ARCs/issues">the Issues section of this repository</a>. | ||
` status:` *Draft, Review, Last Call, Final, Stagnant, Withdrawn, Living* | ||
|
@@ -130,18 +140,13 @@ Each ARC must begin with an <a href="https://www.ietf.org/rfc/rfc822.txt">RFC 82 | |
|
||
` created:` *Date created on* | ||
>The `created` header records the date that the ARC was assigned a number. Both headers should be in yyyy-mm-dd format, e.g. 2001-08-14. | ||
` * updated:` *Comma separated list of dates* | ||
> The `updated` header records the date(s) when the ARC was updated with "substantial" changes. This header is only valid for ARCs of Draft and Active status. | ||
` * requires:` *ARC number(s)* | ||
>ARCs may have a `requires` header, indicating the ARC numbers that this ARC depends on. | ||
` * replaces:` *ARC number(s)* | ||
|
||
` * superseded-by:` *ARC number(s)* | ||
>ARCs may also have a `superseded-by` header indicating that an ARC has been rendered obsolete by a later document; the value is the number of the ARC that replaces the current document. The newer ARC must have a `replaces` header containing the number of the ARC that it rendered obsolete. | ||
` * resolution:` *A url pointing to the resolution of this ARC* | ||
|
||
Headers that permit lists must separate elements with commas. | ||
|
@@ -161,10 +166,12 @@ References to other ARCs should follow the format `ARC-N`, where `N` is the ARC | |
Images, diagrams, and auxiliary files should be included in a subdirectory of the `assets` folder for that ARC as follows: `assets/arc-N` (where **N** is to be replaced with the ARC number). When linking to an image in the ARC, use relative links such as `../assets/arc-1/image.png`. | ||
|
||
### Application's Methods name | ||
|
||
To provide information about which ARCs has been implemented on a particular application, namespace with the ARC number should be used before every method name: `arc<ARC number>_methodName`. | ||
> Where <ARC number> represents the specific ARC number associated to the standard. | ||
eg: | ||
|
||
```json | ||
{ | ||
"name": "Method naming convention", | ||
|
@@ -191,10 +198,12 @@ eg: | |
``` | ||
|
||
### Application's Event name | ||
|
||
To provide information about which ARCs has been implemented on a particular application, namespace with the ARC number should be used before every [ARC-73](./arc-0073.md) event name: `arc<ARC number>_EventName`. | ||
> Where <ARC number> represents the specific ARC number associated to the standard. | ||
eg: | ||
|
||
```json | ||
{ | ||
"name": "Event naming convention", | ||
|
@@ -234,12 +243,6 @@ Every link **SHOULD** be relative. | |
|
||
If you are using many links you **SHOULD** use this format: | ||
|
||
``` | ||
[ARC-0][1] | ||
[1]: ./arc-0000.md | ||
``` | ||
|
||
### Usage of non-related link | ||
|
||
If for some reason (CCO, RFC ...), you need to refer on something outside of the repository, you *MUST* you the following syntax | ||
|
@@ -272,7 +275,7 @@ If the ARC is not ready, the editor will send it back to the author for revision | |
|
||
Once the ARC is ready for the repository, the ARC editor will: | ||
|
||
- Assign an ARC number | ||
- Assign an ARC number | ||
|
||
- Create a living discussion in the Issues section of this repository | ||
> The issue will be closed when the ARC reaches the status *Final* or *Withdrawn* | ||
|
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.