Current Status
The current RFC process is nominally documented within the TVM Community Committer Guide. The current guide states that when planning a contribution, “after an in-person discussion, send a summary to public channels (as an RFC or a discuss thread).” The current process the community has adopted for RFCs is to post a thread to the TVM Discuss forums, engage in community discussion, reach lazy consensus, and possibly file a tracking issue.
Proposed Solution
The RFC proposes to formalize the RFC process, making each step of the process and desired outcome clear. The RFC motivation and process is described below. The process is intended to provide a consistent mechanism for introducing new features and major changes to TVM, giving all stakeholders a clear and confident view of the direction TVM is evolving in.
What is an RFC?
An RFC is a “Request for Change” to the TVM project. It is a design document that describes a new feature, enhancement, or process to the TVM project. RFCs should be the primary mechanism for proposing major features and changes. The author of the RFC is responsible for the discussion of the change, and for organizing the work around it. RFCs are text files that serve as history and documentation of features.
Who is the audience for RFCs?
The primary audience of RFCs is the TVM development community. They serve as a guide for the design and implementation of features during and after their development. A secondary audience is general users and developers who are interested in how and why a feature was designed and implemented.
RFC Workflow
- Discussion
- During the discussion phase, a need or issue is brought to the discussion forum. During this phase, the developer and user community can discuss the need for and requirements of the RFC
- Pull Request
- After or concurrent with the conversation on the discussion forum, a pull request is sent up with the formal RFC. The RFC should include the authors, current project status, proposed solution, timeline for delivery, and criteria for completion. Discussion about the details of the RFC can continue in the pull request. There are two options for how to manage official RFS in the git repository:
- RO: The PR shall be made against the official Apache TVM repository against the docs/rfc/active directory.
- R1: The PR shall be made against a new RFC repository for TVM.
- A committer of the corresponding area will approve and merge the RFC. Normally the corresponding committer will become the shepherd of the implementation PRs.
- RFCs are numbered consecutively based on their order of proposal, regardless of if they are accepted or postponed.
- RFCs should follow the format specified by the template RFC.
- A successful RFC will include an overview with the problem the RFC is attempting to address, a proposed solution that describes the design and implementation strategy, and a timeline for completion. Optional sections can include (but are not limited to) alternatives that were considered, security considerations, and open problems that the RFC does not solve.
- It is expected that RFCs will change, as part of the feedback process and as new implementation details arise. Changes to the RFC should not be squashed or force pushed in order to retain change and discussion history.
- After or concurrent with the conversation on the discussion forum, a pull request is sent up with the formal RFC. The RFC should include the authors, current project status, proposed solution, timeline for delivery, and criteria for completion. Discussion about the details of the RFC can continue in the pull request. There are two options for how to manage official RFS in the git repository:
- Tracking Issue
- Upon merging a RFC, a tracking issue will be created where implementors can continue sharing implementation details (including links to pull requests). The issue will be closed when the RFC is either completed or abandoned.
- Implementation
- Work will begin on the RFC, with pull requests linking back to the tracking issue. Upon completion of the RFC, the tracking issue will be closed and the RFC will be moved to the docs/rfc/completed directory.
- Postponement
- An RFC may be postponed either explicitly by the parties responsible for implementing it, or implicitly by having no work done for a period of time defined by project leaders. The RFC will be moved to the docs/rfc/postponed directory.
- RFC Grooming
- Committers with expertise that covers an RFC may opt toRFC grooming session will be announced on the Discuss forums. Committers can active RFCs and determine if they need to be postponed. This can include reaching out to RFC proposers to check on the status of an RFC. A committer postponed RFC will be moved to the docs/rfc/postponed directory.
- Resuming an Postponed RFC
- Work on an abandoned RFC may be resumed by a new responsible party at any time after another discussion and pull request review process to move the RFC from docs/rfc/abandoned to docs/rfc/active.
- Documentation
- RFCs will be considered to be project documentation, and will be indexed as part of the TVM docs website. RFCs should be formatted using Markdown to aid in automated documentation generation.
Implementation
The implementation details for the new RFC process are to:
- Create an RFC template.
- Create the RFC directory or repository.
- Migrate the backlog of existing RFCs in Discuss to the repository, focusing on active RFCs and RFCs of note and create corresponding tracking issues.
- Document the RFC process in the TVM developer docs.
Items for Discussion
- How do we want to store RFCs?
- R0: store in the same same repo:
- apache/tvm in folder: docs/rfcs
- R1: separate repo:
- apache/tvm-rfcs
- R0: store in the same same repo:
- Do we want to identify outstanding RFCs in the forums and migrate them to the repository?
- Is the process formal enough? Is it too formal?