bug_triage_guidelines.rst 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. .. _doc_bug_triage_guidelines:
  2. Bug triage guidelines
  3. =====================
  4. This page describes the typical workflow of the bug triage team aka
  5. bugsquad when handling issues and pull requests on Godot's
  6. `GitHub repository <https://github.com/godotengine/godot>`__.
  7. It is bound to evolve together with the bugsquad, so do not
  8. hesitate to propose modifications to the following guidelines.
  9. Issues management
  10. -----------------
  11. For issue management, we use the following GitHub processes:
  12. - Each issue and pull request (PR) is categorized with a set of *labels*,
  13. sometimes called "tags".
  14. - Each PR is assigned to a *milestone*. Some issues can also be assigned to a
  15. *milestone* (see below).
  16. - Issues can have an *assignee*, who is a contributor among Godot maintainers.
  17. - Issues can be put in one or more *projects*.
  18. - PRs can be *linked* to one or more issues which they "fix" or "close".
  19. We don't yet extensively use or rely on some other GitHub processes:
  20. - Issue close reasons (completed, not planned, duplicate). While we use these,
  21. it is not consistent, and older issues are all closed as "completed", so the
  22. issue close reason should not be relied on.
  23. - Issue *types* (Bug, Feature, Task).
  24. - Issue *relationships*.
  25. We only use the assignees feature for Godot maintainers who are members of the
  26. Godot Engine GitHub organization, and even then not in all cases. For other
  27. issues, we track who is working on an issue by comments on the issue and linked
  28. pull requests. Most issues are available for any contributor to take on, after
  29. discussing it with other contributors. If you would like to work on an issue,
  30. first check that no one else is working on it, by looking for a linked pull
  31. request, a comment "claiming" the issue, or an assignee. If no one else is
  32. working on the issue, leave a comment on the issue to "claim" it and start
  33. working on it.
  34. Labels
  35. ~~~~~~
  36. The following `labels <https://github.com/godotengine/godot/labels>`__ are
  37. currently defined in the Godot repository:
  38. Categories:
  39. ^^^^^^^^^^^
  40. - *Archived*: used to filter issues closed with a resolution other than "fixed".
  41. - For issues, added to all issues that are not resolved by engine or
  42. documentation changes. This includes duplicate issues, user error, or
  43. reports in the wrong repository.
  44. Since we don't rely on GitHub's issue close reasons (``completed``, ``not
  45. planned``, and ``duplicate``), it is possible for an issue to be closed as
  46. ``completed`` with the *Archived* label.
  47. - For PRs, added to all closed PRs that are not merged. This includes superseded
  48. or duplicate PRs, Git or GitHub mistakes, and valid PRs that end up not merged.
  49. - *Breaks compat*: describes something that can only be fixed by breaking
  50. compatibility with existing projects.
  51. - *Bug*: describes something that is not working properly.
  52. - *Cherrypick*: describes something that can be backported to a stable branch
  53. after being merged in the ``master`` branch.
  54. - *Confirmed*: has been confirmed by at least one other contributor
  55. than the bug reporter (typically for *Bug* reports).
  56. The purpose of this label is to let developers know which issues are
  57. still reproducible when they want to select what to work on. It is
  58. therefore a good practice to add in a comment on what platform and
  59. what version or commit of Godot the issue could be reproduced; if a
  60. developer looks at the issue one year later, the *Confirmed* label
  61. may not be relevant anymore.
  62. - *Crash:* describes a bug that causes the engine to crash.
  63. This label is only used for "hard" crashes, not freezes.
  64. - *Discussion*: the issue is not consensual and needs further
  65. discussion to define what exactly should be done to address the
  66. topic.
  67. - *Documentation*: related to the documentation. PRs with this label improve the
  68. class reference. Issues with this label are either for wrong documentation, or
  69. are user-reported "bugs" that are actually limitations to be further documented.
  70. Often paired with *Discussion*. Issues related to the ReadTheDocs documentation
  71. should be filed on the `godot-docs <https://github.com/godotengine/godot-docs>`_ repository.
  72. - *Enhancement*: describes a proposed enhancement to an existing
  73. functionality.
  74. - *Feature proposal*: used for PRs adding new features which do not have a
  75. corresponding proposal use this label. The label is removed when a feature
  76. proposal is created and linked. The main Godot repository no longer accepts
  77. feature requests as issues. Please use the `godot-proposals
  78. <https://github.com/godotengine/godot-proposals>`__ repository instead.
  79. - *For PR meeting*: the issue needs to be discussed in a pull request meeting.
  80. These meetings are public and are held on the `Godot Contributors Chat <https://chat.godotengine.org/>`_.
  81. - *Good first issue*: the issue is *assumed* to be an easy one to fix, which makes
  82. it a great fit for new contributors who want to become familiar with
  83. the code base. It should be removed while an active PR is available, that
  84. resolves this issue.
  85. - *High priority:* the issue is particularly important as it can
  86. prevent people from releasing their projects or cause data loss.
  87. - *Needs testing*: the issue/pull request could not be completely tested
  88. and thus need further testing. This can mean that it needs to be tested
  89. on different hardware/software configurations or even that the steps to
  90. reproduce are not certain.
  91. - *Needs work*: the pull request needs additional work before it can be merged.
  92. Also for issues that are very incomplete, such as missing reproduction steps.
  93. - *Performance*: issues that directly impact engine or editor performance.
  94. Can also be used for pull requests that improve performance or add low-end-friendly options.
  95. Should not be coupled with *Usability*.
  96. - *Regression*: the bug appeared after a stable release not exhibiting
  97. the bug was released.
  98. - *Salvageable*: the pull request can't be merged due to design issues or
  99. merge conflicts and its author is not active anymore. However, it can still
  100. be picked up by another contributor to bring it to a mergeable state.
  101. To do so, you need to open a new pull request based on the original pull request.
  102. - *Spam*: intentional spam issues, and extremely low-effort PRs. Used
  103. sparingly, since we give contributors and users the benefit of the doubt. In
  104. most cases, *Needs work* or *Archived* is more appropriate.
  105. - *Tracker*: issue used to track other issues (like all issues related to
  106. the plugin system).
  107. - *Usability*: issues that directly impact user usability. Should not be coupled with *Performance*.
  108. The categories are used for general triage of the issues. They can be combined
  109. in some way when relevant, e.g. an issue can be labeled *Bug* and *Usability*
  110. at the same time if it's a bug that affects usability. Or *Enhancement* and
  111. *Discussion* if it's an improvement that requires discussion of the best
  112. approach. At least one of the categories *Bug*, *Enhancement*, or *Discussion*
  113. are used to describe an issue or pull request.
  114. Topics:
  115. ^^^^^^^
  116. - *2D*: relates to 2D nodes. Should be coupled with one of the labels
  117. below, and should not be coupled with *3D*.
  118. - *3D*: relates to 3D nodes. Should be coupled with one of the labels
  119. below, and should not be coupled with *2D*.
  120. - *Animation*: relates to the Animation system, editors and importers.
  121. - *Assetlib*: relates to issues with the asset library.
  122. - *Audio*: relates to the audio features (low- and high-level).
  123. - *Buildsystem*: relates to building issues, either linked to the SCons
  124. buildsystem or to compiler peculiarities.
  125. - *Codestyle*: relates to the programming style used within the codebase.
  126. - *Core*: anything related to the core engine. Specific topics are split off separately as they crop up.
  127. - *Dotnet*: relates to the C# / .NET bindings.
  128. - *Editor*: relates to issues in the editor (mainly UI).
  129. - *Export*: relates to the export system and templates.
  130. - *GDExtension*: relates to the GDExtension system for native extensions.
  131. - *GDScript*: relates to GDScript.
  132. - *GUI*: relates to GUI (Control) nodes or to Nodes that compose user interfaces.
  133. - *Import*: relates to the resource import system.
  134. - *Input*: relates to the input system.
  135. - *I18n*: relates to internationalization.
  136. - *Multiplayer*: relates to multiplayer (high-level networking) systems.
  137. - *Navigation*: relates to the navigation system (including A* and navmeshes).
  138. - *Network*: relates to (low-level) networking.
  139. - *Particles*: particles, particle systems and their editors.
  140. - *Physics*: relates to the physics engine (2D/3D).
  141. - *Plugin*: relates to problems encountered while writing plugins.
  142. - *Porting*: relates to some specific platforms or exporting projects.
  143. - *Rendering*: relates to the 2D and 3D rendering engines.
  144. - *Shaders*: relates to the Godot shader language or visual shaders.
  145. - *Tests*: relates to unit tests.
  146. - *Thirdparty*: relates to third-party libraries used in Godot.
  147. - *XR*: relates to Augmented Reality or Virtual Reality.
  148. Issues would typically correspond to only one topic, though it's not
  149. unthinkable to see issues that fit two bills. The general idea is that
  150. there will be specialized contributors teams behind all topics, so they
  151. can focus on the issues labelled with their team's topic.
  152. Platforms:
  153. ^^^^^^^^^^
  154. *Android*, *iOS*, *LinuxBSD*, *macOS*, *Web*, *Windows*
  155. By default, it is assumed that a given issue applies to all platforms.
  156. If one of the platform labels is used, it is then exclusive and the
  157. previous assumption doesn't stand anymore (so if it's a bug on e.g.
  158. Android and Linux exclusively, select those two platforms).
  159. Documentation labels
  160. ~~~~~~~~~~~~~~~~~~~~
  161. In the `documentation repository <https://github.com/godotengine/godot-docs>`__, we
  162. use the following `labels <https://github.com/godotengine/godot-docs/labels>`__:
  163. - *Archived*: either a duplicate of another issue, or invalid. Such an
  164. issue would also be closed.
  165. - *Bug*: Incorrect information in an existing page. Not to be used for
  166. *missing* information.
  167. - *Cherrypick*: describes something that can be backported to a stable branch
  168. after being merged in the ``master`` branch.
  169. - *Dependencies*: describes pull requests that update a dependency file.
  170. - *Discussion*: the issue is not consensual and needs further
  171. discussion to define what exactly should be done to address the
  172. topic.
  173. - *Enhancement*: new information to be added in an existing page.
  174. - *Good first issue*: the issue is *assumed* to be an easy one to fix, which makes
  175. it a great fit for new contributors who want to become familiar with
  176. the code base. It should be removed while an active PR is available, that
  177. resolves this issue.
  178. - *Linked demo PR*: the PR has a corresponding PR to the
  179. `Godot Demo Projects <https://github.com/godotengine/godot-demo-projects>`__
  180. repository which must be merged at the same time. Any changes to code in
  181. tutorials that have a corresponding demo, such as :ref:`doc_your_first_2d_game`,
  182. need to update both repositories so that the tutorial code stays in sync with
  183. the completed demo.
  184. - *Needs work*: the pull request needs additional work before it can be merged.
  185. - *Python*: Pull requests that update Python code.
  186. - *Salvageable*: the pull request can't be merged due to design issues or
  187. merge conflicts and its author is not active anymore. However, it can still
  188. be picked up by an external contributor to bring it to a mergeable state.
  189. To do so, you need to open a new pull request based on the original pull request.
  190. - *Tracker*: issue used to track other issues (like all issues related to
  191. the plugin system).
  192. - *Waiting on PR merge*: the PR documents an engine PR that has not been merged
  193. yet.
  194. Area:
  195. ^^^^^
  196. - *About*: Issues and PRs related to the About section of the documentation and other general articles.
  197. - *Class reference*: the issue is about the class reference, not a documentation page.
  198. - *Community*: Issues and PRs related to the Community section of the documentation.
  199. - *Contributing*: Issues and PRs related to the Contributing/Development section of the documentation.
  200. - *Getting started*: Issues and PRs related to the Getting Started section of the documentation.
  201. - *Manual*: Issues and PRs related to the Manual/Tutorials section of the documentation.
  202. Content:
  203. ^^^^^^^^
  204. - *Images*: Issues and PRs involving outdated or incorrect images in articles.
  205. - *Example code*: Issues and PRs involving writing or updating code examples.
  206. - *New page*: Issues and PRs related to creation of new documentation pages for new or undocumented features.
  207. - *Organization*: Issues and PRs related to reorganizing the content.
  208. - *Proofreading*: Issues and PRs related to proofreading the documentation.
  209. - *Redirect*: Issues and PRs involving moving content and adding a redirect rule on the backend.
  210. - *Website*: Issues related to adding website features and fixing bugs, whether on the front or back-end,
  211. Topic:
  212. ^^^^^^
  213. The available topics describe the same content as the topics in the main
  214. repository.
  215. Milestones
  216. ~~~~~~~~~~
  217. `Milestones <https://github.com/godotengine/godot/milestones>`_ are used for
  218. some issues and all PRs.
  219. We have milestones for specific minor engine versions, like ``4.5`` and ``4.6``,
  220. as well as general milestones for major engine versions, like ``3.x`` and
  221. ``4.x``. In the ``godot-proposals`` repo, we also have a ``5.0`` milestone for
  222. compatibility-breaking changes that will be considered for Godot 5.0, in many
  223. years.
  224. Issues are assigned to the current development milestone, such as ``4.5``, if
  225. they are related to features introduced in that engine version, or are bugs
  226. (regressions) in that version. Additionally, all issues completed during the
  227. development of that engine version are added to the milestone, so that users can
  228. see at a glance in which minor version an issue was first fixed. We don't always
  229. use the ``4.x`` milestone for issues, since by default all issues are related to
  230. Godot 4.x. However, we do use the ``3.x`` milestone to mark issues that are
  231. specific to Godot 3.x.
  232. All pull requests are assigned to a milestone. By default, enhancement and
  233. feature PRs are assigned to the ``4.x`` milestone, and bugs are assigned to the
  234. current development milestone, such as ``4.5``. Towards the end of the minor
  235. version's development, PRs currently in that milestone are reassessed. If
  236. a PR is no longer being considered for that version, it is reassigned to either the
  237. major version milestone (``4.x``), or the next minor version milestone (such as
  238. ``4.6``).
  239. Pull requests in the ``4.x`` milestone are reassigned to the current minor
  240. engine version, such as ``4.5``, when the review process is complete, and the
  241. production team decides that the PR is ready to be merged soon. Note that
  242. this usually requires more than one approving review.
  243. The milestone assigned to a PR is a goal, not a guarantee. New features and
  244. enhancements are merged when they are ready. While reviewers and maintainers do
  245. their best to review PRs in time for the current version, at some point we reach
  246. the beta, feature freeze, and then release; and existing PRs are reassigned to
  247. the next minor version, or to ``4.x``. As a rule, we assign new features to the
  248. ``4.x`` milestone initially to avoid continually reassigning a PR from version
  249. to version. However, a PR being in ``4.x`` does not mean it won't be merged;
  250. it's just the default for new features.