Reviewing and merging patches

Everyone is encouraged to review open pull requests. We only ask that you try and think carefully, ask questions and are excellent to one another . Code review is our opportunity to share knowledge, design ideas and make friends.

When reviewing a patch try to keep each of these concepts in mind:

Intent

  • What is the change being proposed?

  • Do we want this feature or is the bug they’re fixing really a bug?

Architecture

  • Is the proposed change being made in the correct place? Is it a fix in the backend when it should be in the primitives?

Implementation

  • Does the change do what the author claims?

  • Are there sufficient tests?

  • Has it been documented?

  • Will this change introduce new bugs?

Grammar and style

These are small things that are not caught by the automated style checkers.

  • Does a variable need a better name?

  • Should this be a keyword argument?

Merge requirements

Because cryptography is so complex, and the implications of getting it wrong so devastating, cryptography has a strict merge policy for committers:

  • Patches must never be pushed directly to main , all changes (even the most trivial typo fixes!) must be submitted as a pull request.

  • A committer may never merge their own pull request, a second party must merge their changes. If multiple people work on a pull request, it must be merged by someone who did not work on it.

  • A patch that breaks tests, or introduces regressions by changing or removing existing tests should not be merged. Tests must always be passing on main .

  • If somehow the tests get into a failing state on main (such as by a backwards incompatible release of a dependency) no pull requests may be merged until this is rectified.

  • All merged patches must have 100% test coverage.

The purpose of these policies is to minimize the chances we merge a change that jeopardizes our users’ security.