bugs-and-features.txt 7.2 KB

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