Screening Tickets

If you’re interested in supplying patches or contributing to Clojure, please see the development overview.

The job of screening is to create a funnel, so that the highest importance, highest urgency items are brought to the BDFL’s attention first, already vetted and tested.

Choosing Tickets to Screen

  • Bugs first, then features. Most users do not edit the issue type or severity fields, so most tickets start marked as bugs, and job 1 is to recategorize them.

  • Focus on tickets with code. If there isn’t code yet, you will have to write it, and have someone else screen it.

  • No new features during Beta. The most a feature request can hope for during Beta is to be assigned the "Approved Backlog" release

  • Do the important bugs first. There is no AI query to find these. One obvious criterion for importance is difficulty of workaround. Another is regression. Another is upvoted issues.

  • Vote up issues you think important.

Fail Fast

Reasons to decline a ticket:

  • Change does more than one thing. Break it up, submit individual problems and patches.

  • Enhancement belongs in a library instead. Be encouraging and redirect the person to an appropriate Contrib (or propose a new Contrib).

  • Does not comprehensively consider the root problem.

The following are required in the ticket. Mark the ticket incomplete if any are missing (or fix the gap if you can):

  • Clear description of the problem.

  • For defects, a reproducing case in a basic repl (no gists, no external github projects, no jars, etc unless absolutely necessary due to AOT etc).

  • For defects, a description of the cause of the problem.

  • The approach to fixing the problem (or implementing the enhancement). This should explain (as a narrative) the change in the patch.

  • For changes that have a performance impact, a performance analysis. Results should be in a table showing before and after timings. Example code to reproduce the timings should be either linked or included. Specify the Clojure and Java version used to take the timings.

  • The name of the patch to consider (unless there is only one patch, and even then, it wouldn’t hurt).

  • Links to background discussions or other relevant material a screener should read.

The following are required in the patch. Mark the ticket incomplete if any are missing:

  • Patch file should end in .patch or .diff.

  • Commit message should start with the ticket id and have a brief 1 line description of the change. Optionally, it may have a longer description after that.

  • Patch should be in proper format and include tests.

Want to Become a Screener?

Screeners are a subset of contributors who are responsible for moving tickets through a review process, and then funneling tickets to the BDFL.

It would be great to have more screeners. If you are interested, just do all the steps described in this document, without actually changing any ticket attributes. Instead, add a comment to the ticket explaining what you would have done to screen it. (Screeners: keep an eye out for such comments, and where sensible provide feedback so that we are grooming more screeners.)

Process in Detail

Periodically, screeners will review tickets whose approval is marked 'Test'.

  • Take ownership of the ticket so that others know you are working on it.

  • Make sure to work on defects first. Enhancements are much lower priority, and should typically begin with a design conversation in a mailing list or elsewhere

  • Read the entire ticket, including linked docs and comments.

To apply someone’s changes you need to first create a branch:

$ git checkout -b freds_fixbug42
$ git am --keep-cr -s --ignore-whitespace < their-patch-file.diff
  • make sure you have a clean local checkout

  • no need to check on multiple OSes (unless the ticket is specific to this)

  • If you are committing i.e. you own the lib, please note the importance of -s above, as it indicates that you are the one accepting this patch.

  • The --keep-cr helps when files being patched contain DOS CR/LF line endings. It seems to be harmless when it isn’t needed, but leave it off or use --no-keep-cr if you suspect it is causing issues.

  • The --ignore-whitespace helps when the only changes made to master since the patch was created are to whitespace in the context lines. Without this option, some patches will fail to apply. With that option, screeners can help avoid making contributors update patches merely because some whitespace changed in master.

Once you have a working copy, you should take note of the following kinds of things:

  • Review the code in a diff tool to make sure that nothing extraneous snuck in

  • Ensure that the commit message includes a statement about the problem or enhancement that the patch is in service to.

  • Make sure compile and tests pass

  • Test the functionality from the REPL

  • Does the patch accomplish the goals stated in the ticket

  • Is the code in proper style? But remember that Coding Guidelines are guidelines, not fixed laws of the universe.

  • If questions were raised in the discussion, are they answered in the ticket?

  • Are you happy with the tests, can you follow what they’re testing, is there anything missing?

  • Are the tests excessive (introducing dependency on implementation detail)?

  • Does the documentation still seem right to you?

  • Is the implementation idiomatic (if not, explain why, link to examples…​)

  • Is the patch performance-sensitive? If so, is the approach appropriate? Are there before/after perf tests?

  • Any Clojure namespace doing interop should (set! warn-on-reflection true) and fix all reflection warnings

  • Inlined functions that have type hints in the body will also require something in the inline function

After review, if you are happy, you should

  • Set the approval of the ticket to Screened

  • If you own the lib in question, you can set approval to Accepted, and deploy the change

If you are not happy, but the ticket is fixable:

  • Add a comment to the ticket, explaining what the issues are

  • Set the approval of the ticket to 'Incomplete'

  • Set the waiting-on of the ticket to the person who created the patch

If you are not happy, and the ticket does not seem fixable

  • add a comment, explaining the issues

  • Decline the ticket

If you aren’t sure

  • Get a second opinion, and note this in the comments

  • Set the waiting-on to Rich or Stu, if appropriate