|
| 1 | +This document is a declaration of software quality for the `system_modes` package, based on the guidelines in [REP-2004](https://www.ros.org/reps/rep-2004.html). |
| 2 | + |
| 3 | +# System Modes Quality Declaration |
| 4 | + |
| 5 | +The package `system_modes` claims to be in the **Quality Level 3** category. |
| 6 | + |
| 7 | +Below are the rationales, notes, and caveats for this claim, organized by each requirement listed in the [Package Quality Categories in REP-2004](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#package-quality-categories) of the ROS 2 developer guide. |
| 8 | + |
| 9 | +## Version Policy [1] |
| 10 | + |
| 11 | +### Version Scheme [1.i] |
| 12 | + |
| 13 | +`system_modes` uses `semver` according to the recommendation for ROS Core packages in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#versioning). |
| 14 | + |
| 15 | +### Version Stability [1.ii] |
| 16 | + |
| 17 | +`system_modes` is at a stable version, i.e. `>= 1.0.0`. |
| 18 | +The current version can be found in its [package.xml](package.xml), and its change history can be found in its [CHANGELOG](CHANGELOG.rst). |
| 19 | + |
| 20 | +### Public API Declaration [1.iii] |
| 21 | + |
| 22 | +All symbols in the installed headers are considered part of the public API. |
| 23 | + |
| 24 | +Except for the exclusions listed below, all installed headers are in the `include` directory of the package, headers in any other folders are not installed and considered private. |
| 25 | + |
| 26 | +### API Stability Policy [1.iv] |
| 27 | + |
| 28 | +`system_modes` will not break public API within a released ROS distribution, i.e. no major releases once the ROS distribution is released. |
| 29 | + |
| 30 | +### ABI Stability Policy [1.v] |
| 31 | + |
| 32 | +`system_modes` contains C++ code and therefore must be concerned with ABI stability, and will maintain ABI stability within a ROS distribution. |
| 33 | + |
| 34 | +### ABI and ABI Stability Within a Released ROS Distribution [1.vi] |
| 35 | + |
| 36 | +`system_modes` will not break API nor ABI within a released ROS distribution, i.e. no major releases once the ROS distribution is released. |
| 37 | + |
| 38 | +## Change Control Process [2] |
| 39 | + |
| 40 | +`system_modes` follows the recommended guidelines for ROS Core packages in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#change-control-process). |
| 41 | + |
| 42 | +### Change Requests [2.i] |
| 43 | + |
| 44 | +All changes will occur through a pull request, check [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#change-control-process) for additional information. |
| 45 | + |
| 46 | +### Contributor Origin [2.ii] |
| 47 | + |
| 48 | +This package uses DCO as its confirmation of contributor origin policy. More information can be found in [CONTRIBUTING](../CONTRIBUTING.md). |
| 49 | + |
| 50 | +### Continuous Integration [2.iv] |
| 51 | + |
| 52 | +All pull requests must pass CI on all [tier 1 platforms](https://www.ros.org/reps/rep-2000.html#support-tiers) (currently not true for tier 1 platform _Windows_). |
| 53 | +Latest build results can be seen [here](https://github.com/micro-ROS/system_modes/actions). |
| 54 | + |
| 55 | +### Documentation Policy [2.v] |
| 56 | + |
| 57 | +All pull requests must resolve related documentation changes before merging. |
| 58 | + |
| 59 | +## Documentation [3] |
| 60 | + |
| 61 | +### Feature Documentation [3.i] |
| 62 | + |
| 63 | +`system_modes` has a [feature list](http://docs.ros2.org/latest/api/system_modes/) and each item in the list links to the corresponding feature documentation. There is documentation for all of the features, and new features require documentation before being added. |
| 64 | + |
| 65 | +### License [3.iii] |
| 66 | + |
| 67 | +The license for `system_modes` is Apache 2.0, and a summary is in each source file, the type is declared in the [`package.xml`](./package.xml) manifest file, and a full copy of the license is in the [`LICENSE`](../LICENSE) file. |
| 68 | + |
| 69 | +There is an automated test which runs a linter that ensures each file has a license statement. [Here](http://build.ros2.org/view/Rpr/job/Rpr__system_modes__ubuntu_focal_amd64/lastCompletedBuild/testReport/system_modes/)**TODO** can be found a list with the latest results of the various linters being run on the package. |
| 70 | + |
| 71 | +### Copyright Statements [3.iv] |
| 72 | + |
| 73 | +The copyright holders each provide a statement of copyright in each source code file in `system_modes`. |
| 74 | + |
| 75 | +There is an automated test which runs a linter that ensures each file has at least one copyright statement. Latest linter result report can be seen [here](http://build.ros2.org/view/Rpr/job/Rpr__system_modes__ubuntu_focal_amd64/lastCompletedBuild/testReport/system_modes/copyright/). **TODO** |
| 76 | + |
| 77 | +## Testing [4] |
| 78 | + |
| 79 | +### Feature Testing [4.i] |
| 80 | + |
| 81 | +Each feature in `system_modes` has corresponding tests which simulate typical usage, located in the [`test`](https://github.com/micro-ROS/system_modes/tree/master/system_modes/test) directory. |
| 82 | +New features are required to have tests before being added. |
| 83 | +Latest test results can be seen [here](https://github.com/micro-ROS/system_modes/actions). |
| 84 | + |
| 85 | +### Coverage [4.iii] |
| 86 | + |
| 87 | +`system_modes` follows the recommendations for ROS Core packages in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#code-coverage), and opts to use line coverage instead of branch coverage. |
| 88 | + |
| 89 | +This includes: |
| 90 | + |
| 91 | +- tracking and reporting line coverage statistics |
| 92 | +- achieving and maintaining a reasonable branch line coverage (90-100%) |
| 93 | +- no lines are manually skipped in coverage calculations |
| 94 | + |
| 95 | +Changes are required to make a best effort to keep or increase coverage before being accepted, but decreases are allowed if properly justified and accepted by reviewers. |
| 96 | + |
| 97 | +Current coverage statistics can be viewed [here](https://codecov.io/gh/micro-ROS/system_modes). |
| 98 | + |
| 99 | +`system_modes` has a line coverage `>= 20%`, which is calculated over all directories within `system_modes`. |
| 100 | + |
| 101 | +### Linters and Static Analysis [4.v] |
| 102 | + |
| 103 | +`system_modes` uses and passes all the ROS2 standard linters and static analysis tools for a C++ package as described in the [ROS 2 Developer Guide](https://index.ros.org/doc/ros2/Contributing/Developer-Guide/#linters-and-static-analysis). Passing implies there are no linter/static errors when testing against CI of supported platforms. |
| 104 | + |
| 105 | +Latest linting results can be seen [here](https://github.com/micro-ROS/system_modes/actions). |
| 106 | + |
| 107 | +## Dependencies [5] |
| 108 | + |
| 109 | +Below are evaluations of each of `system_modes`'s run-time and build-time dependencies that have been determined to influence the quality. |
| 110 | + |
| 111 | +It has several "buildtool" dependencies, which do not affect the resulting quality of the package, because they do not contribute to the public library API. |
| 112 | + |
| 113 | +It also has several test dependencies, which do not affect the resulting quality of the package, because they are only used to build and run the test code. |
| 114 | + |
| 115 | +### Direct and Optional Runtime ROS Dependencies [5.i]/[5.ii] |
| 116 | + |
| 117 | +`system_modes` has the following runtime ROS dependencies: |
| 118 | + |
| 119 | +#### `rclcpp_lifecycle` |
| 120 | + |
| 121 | +The `rclcpp` package provides theROS client library in C++. It is **Quality Level 1**, see its [Quality Declaration document](https://github.com/ros2/rclcpp/blob/master/rclcpp/QUALITY_DECLARATION.md). The same is true for its transient dependencies, see its [Quality Declaration document](https://github.com/ros2/rclcpp/blob/master/rclcpp/QUALITY_DECLARATION.md). |
| 122 | + |
| 123 | +#### `rclcpp_lifecycle` |
| 124 | + |
| 125 | +The `rclcpp_lifecycle` package provides the ROS 2 standard lifecycle in C++. It is **Quality Level 1**, see its [Quality Declaration document](https://github.com/ros2/rclcpp/blob/master/rclcpp_lifecycle/QUALITY_DECLARATION.md). The same is true for its transient dependencies, see its [Quality Declaration document](https://github.com/ros2/rclcpp/blob/master/rclcpp_lifecycle/QUALITY_DECLARATION.md). |
| 126 | + |
| 127 | +### Direct Runtime non-ROS Dependency [5.iii] |
| 128 | + |
| 129 | +`system_modes` has no run-time or build-time dependencies that need to be considered for this declaration. |
| 130 | + |
| 131 | +## Platform Support [6] |
| 132 | + |
| 133 | +`system_modes` supports all of the tier 1 platforms as described in [REP-2000](https://www.ros.org/reps/rep-2000.html#support-tiers) (currently not true for tier 1 platform _Windows_), and tests each change against all of them. |
| 134 | + |
| 135 | +## Security |
| 136 | + |
| 137 | +### Vulnerability Disclosure Policy [7.i] |
| 138 | + |
| 139 | +This package conforms to the Vulnerability Disclosure Policy in [REP-2006](https://www.ros.org/reps/rep-2006.html). |
0 commit comments