1. ======================================
    
  2. Reporting bugs and requesting features
    
  3. ======================================
    
  4. 
    
  5. .. Important::
    
  6. 
    
  7.     Please report security issues **only** to
    
  8.     [email protected].  This is a private list only open to
    
  9.     long-time, highly trusted Django developers, and its archives are
    
  10.     not public. For further details, please see :doc:`our security
    
  11.     policies </internals/security>`.
    
  12. 
    
  13. Otherwise, before reporting a bug or requesting a new feature on the
    
  14. `ticket tracker <https://code.djangoproject.com/>`_, consider these points:
    
  15. 
    
  16. * Check that someone hasn't already filed the bug or feature request by
    
  17.   `searching`_ or running `custom queries`_ in the ticket tracker.
    
  18. 
    
  19. * Don't use the ticket system to ask support questions. Use the
    
  20.   |django-users| list or the `#django`_ IRC channel for that.
    
  21. 
    
  22. * Don't reopen issues that have been marked "wontfix" without finding consensus
    
  23.   to do so on |django-developers|.
    
  24. 
    
  25. * Don't use the ticket tracker for lengthy discussions, because they're
    
  26.   likely to get lost. If a particular ticket is controversial, please move the
    
  27.   discussion to |django-developers|.
    
  28. 
    
  29. .. _reporting-bugs:
    
  30. 
    
  31. Reporting bugs
    
  32. ==============
    
  33. 
    
  34. Well-written bug reports are *incredibly* helpful. However, there's a certain
    
  35. amount of overhead involved in working with any bug tracking system so your
    
  36. help in keeping our ticket tracker as useful as possible is appreciated. In
    
  37. particular:
    
  38. 
    
  39. * **Do** read the :doc:`FAQ </faq/index>` to see if your issue might
    
  40.   be a well-known question.
    
  41. 
    
  42. * **Do** ask on |django-users| or `#django`_ *first* if you're not sure if
    
  43.   what you're seeing is a bug.
    
  44. 
    
  45. * **Do** write complete, reproducible, specific bug reports. You must
    
  46.   include a clear, concise description of the problem, and a set of
    
  47.   instructions for replicating it. Add as much debug information as you can:
    
  48.   code snippets, test cases, exception backtraces, screenshots, etc. A nice
    
  49.   small test case is the best way to report a bug, as it gives us a
    
  50.   helpful way to confirm the bug quickly.
    
  51. 
    
  52. * **Don't** post to |django-developers| only to announce that you have filed a
    
  53.   bug report. All the tickets are mailed to another list, |django-updates|,
    
  54.   which is tracked by developers and interested community members; we see them
    
  55.   as they are filed.
    
  56. 
    
  57. To understand the lifecycle of your ticket once you have created it, refer to
    
  58. :doc:`triaging-tickets`.
    
  59. 
    
  60. Reporting user interface bugs and features
    
  61. ==========================================
    
  62. 
    
  63. If your bug or feature request touches on anything visual in nature, there
    
  64. are a few additional guidelines to follow:
    
  65. 
    
  66. * Include screenshots in your ticket which are the visual equivalent of a
    
  67.   minimal test case. Show off the issue, not the crazy customizations
    
  68.   you've made to your browser.
    
  69. 
    
  70. * If the issue is difficult to show off using a still image, consider
    
  71.   capturing a *brief* screencast. If your software permits it, capture only
    
  72.   the relevant area of the screen.
    
  73. 
    
  74. * If you're offering a patch that changes the look or behavior of Django's
    
  75.   UI, you **must** attach before *and* after screenshots/screencasts.
    
  76.   Tickets lacking these are difficult for triagers to assess quickly.
    
  77. 
    
  78. * Screenshots don't absolve you of other good reporting practices. Make sure
    
  79.   to include URLs, code snippets, and step-by-step instructions on how to
    
  80.   reproduce the behavior visible in the screenshots.
    
  81. 
    
  82. * Make sure to set the UI/UX flag on the ticket so interested parties can
    
  83.   find your ticket.
    
  84. 
    
  85. Requesting features
    
  86. ===================
    
  87. 
    
  88. We're always trying to make Django better, and your feature requests are a key
    
  89. part of that. Here are some tips on how to make a request most effectively:
    
  90. 
    
  91. * Make sure the feature actually requires changes in Django's core. If your
    
  92.   idea can be developed as an independent application or module — for
    
  93.   instance, you want to support another database engine — we'll probably
    
  94.   suggest that you develop it independently. Then, if your project gathers
    
  95.   sufficient community support, we may consider it for inclusion in Django.
    
  96. 
    
  97. * First request the feature on the |django-developers| list, not in the
    
  98.   ticket tracker. It'll get read more closely if it's on the mailing list.
    
  99.   This is even more important for large-scale feature requests. We like to
    
  100.   discuss any big changes to Django's core on the mailing list before
    
  101.   actually working on them.
    
  102. 
    
  103. * Describe clearly and concisely what the missing feature is and how you'd
    
  104.   like to see it implemented. Include example code (non-functional is OK)
    
  105.   if possible.
    
  106. 
    
  107. * Explain *why* you'd like the feature. Explaining a minimal use case will help
    
  108.   others understand where it fits in, and if there are already other ways of
    
  109.   achieving the same thing.
    
  110. 
    
  111. If there's a consensus agreement on the feature, then it's appropriate to
    
  112. create a ticket. Include a link to the discussion on |django-developers| in the
    
  113. ticket description.
    
  114. 
    
  115. As with most open-source projects, code talks. If you are willing to write the
    
  116. code for the feature yourself or, even better, if you've already written it,
    
  117. it's much more likely to be accepted. Fork Django on GitHub, create a feature
    
  118. branch, and show us your work!
    
  119. 
    
  120. See also: :ref:`documenting-new-features`.
    
  121. 
    
  122. .. _how-we-make-decisions:
    
  123. 
    
  124. How we make decisions
    
  125. =====================
    
  126. 
    
  127. Whenever possible, we strive for a rough consensus. To that end, we'll often
    
  128. have informal votes on |django-developers| or the Django Forum about a feature.
    
  129. In these votes we follow the voting style invented by Apache and used on Python
    
  130. itself, where votes are given as +1, +0, -0, or -1.
    
  131. Roughly translated, these votes mean:
    
  132. 
    
  133. * +1: "I love the idea and I'm strongly committed to it."
    
  134. 
    
  135. * +0: "Sounds OK to me."
    
  136. 
    
  137. * -0: "I'm not thrilled, but I won't stand in the way."
    
  138. 
    
  139. * -1: "I strongly disagree and would be very unhappy to see the idea turn
    
  140.   into reality."
    
  141. 
    
  142. Although these votes are informal, they'll be taken very seriously. After a
    
  143. suitable voting period, if an obvious consensus arises we'll follow the votes.
    
  144. 
    
  145. However, consensus is not always possible. If consensus cannot be reached, or
    
  146. if the discussion toward a consensus fizzles out without a concrete decision,
    
  147. the decision may be deferred to the :ref:`steering council <steering-council>`.
    
  148. 
    
  149. Internally, the steering council will use the same voting mechanism. A
    
  150. proposition will be considered carried if:
    
  151. 
    
  152. * There are at least three "+1" votes from members of the steering council.
    
  153. 
    
  154. * There is no "-1" vote from any member of the steering council.
    
  155. 
    
  156. Votes should be submitted within a week.
    
  157. 
    
  158. Since this process allows any steering council member to veto a proposal, a
    
  159. "-1" vote should be accompanied by an explanation of what it would take to
    
  160. convert that "-1" into at least a "+0".
    
  161. 
    
  162. Votes on technical matters should be announced and held in public on the
    
  163. |django-developers| mailing list or on the Django Forum.
    
  164. 
    
  165. .. _searching: https://code.djangoproject.com/search
    
  166. .. _custom queries: https://code.djangoproject.com/query
    
  167. .. _#django: https://web.libera.chat/#django