## pre-setup Ensure everyone is added to https://github.com/orgs/nodejs/teams/collaborators ## onboarding to nodejs ### intros ### **thank you** for doing this * going to cover four things: * local setup * some project goals & values * issues, labels, and reviewing code * merging code ### setup: * notifications setup * use https://github.com/notifications or set up email * watching the main repo will flood your inbox, so be prepared * git: * make sure you have whitespace=fix: `git config --global --add core.whitespace fix` * usually PR from your own github fork * [**See "Updating Node.js from Upstream"**](./onboarding-extras.md#updating-nodejs-from-upstream) * make new branches for all commits you make! * `#node-dev` on `chat.freenode.net` is the best place to interact with the CTC / other collaborators ### a little deeper about the project * collaborators are effectively part owners * the project has the goals of its contributors * but, there are some higher-level goals and values * not everything belongs in core (if it can be done reasonably in userland, let it stay in userland) * empathy towards users matters (this is in part why we onboard people) * generally: try to be nice to people ### managing the issue tracker * you have (mostly) free rein – don't hesitate to close an issue if you are confident that it should be closed * this will come more naturally over time * IMPORTANT: be nice about closing issues, let people know why, and that issues and PRs can be reopened if necessary * Still need to follow the Code of Conduct. * Labels: * There is [a bot](https://github.com/nodejs-github-bot/github-bot) that applies subsystem labels (for example, `doc`, `test`, `assert`, or `buffer`) so that we know what parts of the code base the pull request modifies. It is not perfect, of course. Feel free to apply relevant labels and remove irrelevant labels from pull requests and issues. * [**See "Labels"**](./onboarding-extras.md#labels) * Use the `ctc-agenda` if a topic is controversial or isn't coming to a conclusion after an extended time. * `semver-{minor,major}`: * If a change has the remote *chance* of breaking something, use `semver-major` * When adding a semver label, add a comment explaining why you're adding it. Do it right away so you don't forget! * Notifying humans * [**See "Who to CC in issues"**](./onboarding-extras.md#who-to-cc-in-issues) * will also come more naturally over time * reviewing: * primary goal is for the codebase to improve * secondary (but not far off) is for the person submitting code to succeed * helps grow the community * and draws new people into the project * Review a bit at a time. It is **very important** to not overwhelm newer people. * it is tempting to micro-optimize / make everything about relative perf, don't succumb to that temptation. we change v8 a lot more often now, contortions that are zippy today may be unnecessary in the future * be aware: your opinion carries a lot of weight! * nits are fine, but try to avoid stalling the PR * note that they are nits when you comment * if they really are stalling nits, fix them yourself on merge (but try to let PR authors know they can fix these) * improvement doesn't have to come all at once * minimum wait for comments time * There is a minimum waiting time which we try to respect for non-trivial changes, so that people who may have important input in such a distributed project are able to respond. * It may help to set time limits and expectations: * the collaborators are very distributed so it is unlikely that they will be looking at stuff the same time as you are. * before merging code: give folks at least one working day to respond: "If no one objects, tomorrow at