|
| 1 | +# Feature Contribution Process |
| 2 | + |
| 3 | +Adding features to the Mixed Reality Toolkit is split up into a few iteration steps, so maintainers can have time to review and and ensure the process goes smoothly. |
| 4 | + |
| 5 | +# Feature Requirements |
| 6 | + |
| 7 | +Features must have the following: |
| 8 | + |
| 9 | +* Assembly Definitions for code outside of the `MixedRealityToolkit/_Core` folder. |
| 10 | + * This ensures features are self-contained and have no dependencies to other features. |
| 11 | +* Be defined using an interface found in `MixedRealityToolkit/_Core/definitions/<FeatureName>System`. |
| 12 | +* A feature's concrete manager implementation should inherit directly from `BaseManager` or `MixedRealityEventManager` if they will raise events. |
| 13 | +* A feature's concrete manager implementation should setup and verify scene is ready for that system to use in `Initialize`. |
| 14 | +* A feature's concrete manager should also clean up after themselves removing anything created in the scene in `Destroy`. |
| 15 | +* Features should have a configuration profile that derives from a scriptable object. |
| 16 | + * If the feature is proposed to be a core feature of the Mixed Reality Toolkit, the profile must be accessible in the Main Configuration Profile. |
| 17 | +* Be registered with the Mixed Reality Manager. |
| 18 | + * If the feature is a core feature, this should be hard coded into the `MixedRealityManager` and added to the `MixedRealityConfigurationProfile`. |
| 19 | + * This includes being able to specify a concrete implementation via dropdown using `SystemType`. |
| 20 | + * A default configuration profile located in `MixedRealityToolkit-SDK/Profiles` and be assigned in the default configuration profile for the Mixed Reality Manager |
| 21 | + * If this feature is **not** a core feature, then it must be registered using the component configuration profile and implement `IMixedRealityComponent`. |
| 22 | +* Have a default implementation located in `MixedRealityToolkit-SDK/Features/<FeatureName>` |
| 23 | + |
| 24 | +# Process |
| 25 | + |
| 26 | +1. [Open a Proposal and related Tasks](#proposal) |
| 27 | +2. [Submit an Architecture Draft or Outline](#architecture-draft) |
| 28 | +3. [Submit final Architecture documentation](#architecture-documentation) |
| 29 | +4. [Implement Core feature interfaces and event datum (if applicable)](#core-implementation) |
| 30 | +5. [Implement SDK components](#sdk-implementation) |
| 31 | +6. [Implement Examples](#example-implementation) |
| 32 | + |
| 33 | +## Proposal |
| 34 | + |
| 35 | + Start by opening a proposal describing the feature or the problem you want to solve. Describe the approach and how it fits into the version of the Mixed Reality Toolkit you're targeting. This will enable everyone have a discussion about the proposal and, hopefully, identify some potential pitfalls before any work is started. |
| 36 | + |
| 37 | + New Proposals will be reviewed and discussed during our weekly ship room meetings. If a proposal is accepted, then supplemental tasks will be created and assigned. |
| 38 | + |
| 39 | +## Architecture Draft |
| 40 | + |
| 41 | +The first task will generally be to draft the initial architecture document for the feature or work to be done. This document should typically be one or two pages long and include a high level overview of the feature and how it will relate to other parts of the Mixed Reality Toolkit. |
| 42 | + |
| 43 | +* The draft must be easy to consume with key areas highlighted. |
| 44 | +* The draft must include a list of the proposed core interfaces, configuration profiles, and event datum. |
| 45 | +* The draft must include a simple graphic of the proposed architecture. |
| 46 | + |
| 47 | +>TODO: Add link to architecture draft template |
| 48 | +
|
| 49 | +Once the draft is completed, a pull requests can be made against the newly created feature branch for review by maintainers. |
| 50 | + |
| 51 | +## Architecture Documentation |
| 52 | + |
| 53 | +Once the draft architectural document is accepted and merged into the feature branch, additional pull requests can be made to expand and flesh out the final document. |
| 54 | + |
| 55 | +>TODO: Add link to architecture template |
| 56 | +
|
| 57 | +Once the architecture document is approved, then the first code submissions can be made. |
| 58 | + |
| 59 | +## Core Implementation |
| 60 | + |
| 61 | +Now work can be done to implement the interfaces, configuration profiles, and event data that will be part of the the Mixed Reality Toolkit's core framework. |
| 62 | + |
| 63 | +>If needed, the architectural document can be updated to align with any changes to the implementation. |
| 64 | +
|
| 65 | +## SDK Implementation |
| 66 | + |
| 67 | +Once the core interfaces and events are finished, then work on the SDK components can start. |
| 68 | + |
| 69 | +## Example Implementation |
| 70 | + |
| 71 | +Once the SDK components are finished, then any examples can be updated and added. |
0 commit comments