Intro
- This article is just simple summary of Bitcoin core contribution guid.
Concept
- Open contributor model ... anyone is welcome to contribute
Role
- Maintainer ... In charge of merge PR
- Lead Maintainer ... In charge of release cycle
Workflow
- Fork
- Create branch
- Commit ... should be atomic and easy to read
- Push to my fork repos
- Create PR
- Review
- Fix review
Commit message
- 50 chars max
- Blank line
- Details should be separate paragraph
- Be helpful to committer in the future
- Should be use refs #1234, or fixes #4321
PR
- Use prefix
Consensus: Add new opcode for BIP-XXXX OP_CHECKAWESOMESIG
Net: Automatically create hidden service, listen on Tor
Qt: Add feed bump button
Trivial: Fix typo in main.cpp - [WIP] or Task List means not to be merged yet.
- Should be contain justification/reasoning in PR body and reference of discussion.
Before merge
- Ask to maintainer if need to squash or rebase.
PR Philosophy
- Patch set should be focused, not be mixture.
- Avoid super PR
Feature(and bug fix)
- If a new feature would be added, long term maintenance is needed.
- The feature without a maintainer will be removed by Repo Maintainer.
Refactoring
- Do not mix these three kinds of activities.
- Code only to move
- Code to fix style
- Code to refactor
- Uncontroversial
- Must not change behavior of code
- Uncomplex and easy to verify
Decision Making process
- Project merge maintainer and lead in charge of PR mergeing.
- If PR in on line with the general principle of project.
- If it meet the minimum standard of inclusion.
- General consensus of contributor.
- Minimum criteria for decision
- Have a clear use case
- Be well peer review
- Have appropriate test
- Follow code style guideline
- Not break the existing test
- Demonstrating the bug and proving the fix, where possible.
- Conversation on mailing list.
- Have a numbered BIP
Peer review
- Anyone would comment in PR, using follows.
- ACK means “I have tested the code and I agree it should be merged”
- NACK means “I disagree this should be merged”
- utACK means “I have not tested the code, but I have reviewed it and it looks OK, I agree it can be merged”
- Concept ACK means “I agree in the general principle of this pull request”
- Nit refers to trivial.
- It may set the high bar, when patch will affect consensus critical code.
- It must be discussed extensively using mailing list or IRC, when patch will change consensus.
Release Policy
- Project leader is the release maintainer.