<NME> CONTRIBUTING.md
<BEF> # Contributing to Mocha

> Please read these guidelines before submitting an issue, filing a feature request, or contributing code.

## :question: Got a Question?

If you have a question about using Mocha, please use the [mailing list](https://groups.google.com/group/mochajs), [StackOverflow](https://stackoverflow.com), or ask the friendly people in our [chat room](https://gitter.im/mochajs/mocha).

## :bug: I Found a Bug

Sorry! It happens to the best of us. If you've found a bug in Mocha, **please [search](https://github.com/mochajs/mocha/issues/) to see if it's already been reported**. Otherwise, create a [new issue](https://github.com/mochajs/mocha/issues/new). If you can fix the bug yourself, feel free to create a [pull request](#propose-a-change) thereafter.

Please include _as much detail as possible_ to help us reproduce and diagnose the bug. Most importantly:

- Let us know _how_ you're running Mocha (options, flags, environment, browser or Node.js, etc.)
- Include your test code or file(s). If large, please provide a link to a repository or [gist](https://gist.github.com).
- Please show code in JavaScript only (any version)

If we need more information from you, we'll let you know. If you don't within a reasonable time frame (TBD), your issue will be automatically closed for inactivity.

## :exclamation: Propose a Change

Before you get your hands dirty, please [search](https://github.com/mochajs/mocha/issues/) for a related issue, or [create a new one](https://github.com/mochajs/mocha/issues/new). If you wish to contribute a new feature, this is doubly important! Let's discuss your proposed changes first; we don't want you to waste time implementing a change that is at odds with the project's direction. That said, we'll happily consider any contribution, no matter how great or small.

_This paragraph would contain information about Mocha's roadmap, but it doesn't yet exist._ :poop:

It's also important to understand some overarching goals of Mocha, detailed below.

### :soccer: About Project Goals

Mocha is a test framework.  Developers use it against anything from legacy spaghetti in IE7 to stage-0 TC39 features in Electron.  While still staying current, Mocha will only drop support for old platforms as a last resort.  If and only if Mocha cannot move forward as a project, support will be dropped.  If workarounds exist, they are preferred.

Mocha adheres strictly to [semantic versioning](https://semver.org).  We are *extremely cautious* with changes that have the potential to break; given the size of Mocha's user base, it's *highly unlikely* a breaking change will slide by.

Mocha's usage far outweighs its resources. If a proposed feature would incur a maintenance penalty, it could be a hard sell.

We ask you please keep these goals in mind when making or proposing changes.

### :shoe: Contributing Code: Step-by-Step

Follow these steps to get going.  If you are having trouble, don't be afraid to [ask for help](#got-a-question).

> PRO TIP: Run `npm start` to see a list of commands which can be run with `npm start <command>`

1. [Install Node.js 6.x or newer](https://nodejs.org/en/download/).
    - If you're new to installing Node, a tool like [nvm](https://github.com/creationix/nvm#install-script) can help you manage multiple version installations.
1. Follow [Github's documentation](https://help.github.com/articles/fork-a-repo/) on setting up Git, forking and cloning.
1. Create a new branch in your working copy.  Give your branch a descriptive name, such as `issue/12345`: `git checkout -b issue/12345`.
1. Execute `npm install` to install the development dependencies.
1. Make your changes and add them via `git add`.
    - **Do not modify** the root `mocha.js` file directly; it is automatically generated.
    - Your changes will likely be somewhere in `lib/`, `bin/` or `browser-entry.js` if your changes are browser-specific.
    - Please add unit and/or integration tests (depending on the nature of your changes).
    - Keep your PR focused.  Don't fix two things at once, or make formatting changes alongside bug fixes.
1. Before committing, run `npm test`.
    - This will run unit tests, Node.js and browser integration tests, and lint the source code.
    - The "browser" tests use Mocha to test itself; it will rebuild the root `mocha.js` file with your changes.
    - **Please avoid committing changes to `mocha.js`**.
    - Ultimately, your pull request will be built on our continuous integration servers ([Travis CI](https://travis-ci.org/mochajs/mocha) and [AppVeyor](https://ci.appveyor.com/project/boneskull/mocha)).  The first step to ensuring these checks pass is to test on your own machine.
1. Commit your changes.
    - Use a brief message on the first line, referencing a relevant issue (e.g. `#12345`).
    - Add detail in subsequent lines.
1. Push your changes to your fork.
1. Navigate to the source repository.  You should see a notification about your recent changes in your fork's branch, with a button to create a pull request.  Click it.
1. Describe your changes in detail here.  Once you're satisfied, submit the form.
    - *PRO TIP*: If you've used a multi-line commit message, Github will pre-fill the PR's description with it.
1. If you have not signed our Contributor License Agreement, a friendly robot will prompt you to do so.  A [CLA](https://cla.js.foundation/mochajs/mocha) (electronic) signature is **required** for all contributions of code to Mocha.
1. CI will run against your changes.
    - If the changes fail the checks, you will need to address those before merging.
    - You don't need to make a new PR to make changes.  Instead, commit on top of your changes, and push these to your fork's branch.  The PR will be updated, and CI will re-run.
    - Github will indicate if there's a conflict.  If this happens, you will need to [rebase](https://help.github.com/articles/about-git-rebase/) your branch onto the `master` branch of the source repository.  *Don't merge.*
    - It's no longer necessary to "squash" your changes.
1. Be patient while your PR is reviewed. This can take a while. We may request changes, but don't be afraid to question them.

## :angel: I Just Want To Help

*Excellent.*  Here's how:

- **Handy with JavaScript?**  Please check out the issues labeled [`help-wanted`](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22).
- **Can you write well?**  Help with the documentation.  See the [issues for our site](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation).
- **Design your thing?**  [Our site](https://github.com/mochajs/mocha/tree/master/docs) needs your magic touch.
- **Know Mocha's codebase?**  We could use your help triaging issues and/or reviewing pull requests.  Please contact an [org member](https://github.com/orgs/mochajs/people), and we'll chat.
- **Want to build our community?**  Mocha has a *lot* of users.  We could use your help bringing everyone together in peace and harmony.  Please contact an [org member](https://github.com/mochajs/people).
- **You can sell dirt to worms?**  Let's raise Mocha's profile in the JavaScript and OSS communities.  Please contact an [org member](https://github.com/orgs/mochajs/people)!
- **Wait--you write unit tests for *fun*?**  A PR which increases coverage is unlikely to be turned down.
- **Are you experienced?**  If you're a seasoned Mocha user, why not help answer some questions in the [chat room](https://gitter.im/mochajs/mocha)?

<MSG> update CONTRIBUTING.md; closes issue/3624

Signed-off-by: Christopher Hiller <cba4593484830aa757cb097d8d9f0ea9b692b304@boneskull.com>

<DFF> @@ -28,7 +28,7 @@ It's also important to understand some overarching goals of Mocha, detailed belo
 
 ### :soccer: About Project Goals
 
-Mocha is a test framework.  Developers use it against anything from legacy spaghetti in IE7 to stage-0 TC39 features in Electron.  While still staying current, Mocha will only drop support for old platforms as a last resort.  If and only if Mocha cannot move forward as a project, support will be dropped.  If workarounds exist, they are preferred.
+Mocha is a test framework.  Developers use it against anything from legacy spaghetti in IE11 to stage-0 TC39 features in Electron.  Mocha is committed to providing support for maintained (LTS) versions of Node.js and popular browsers (of which IE11 is still one, as of December 2018).
 
 Mocha adheres strictly to [semantic versioning](https://semver.org).  We are *extremely cautious* with changes that have the potential to break; given the size of Mocha's user base, it's *highly unlikely* a breaking change will slide by.
 
@@ -40,47 +40,58 @@ We ask you please keep these goals in mind when making or proposing changes.
 
 Follow these steps to get going.  If you are having trouble, don't be afraid to [ask for help](#got-a-question).
 
-> PRO TIP: Run `npm start` to see a list of commands which can be run with `npm start <command>`
+> PRO TIP: After `npm install`, run `npm start` to see a list of commands which can be run with `npm start <command>` (powered by [nps](https://npm.im/nps)).
 
 1. [Install Node.js 6.x or newer](https://nodejs.org/en/download/).
     - If you're new to installing Node, a tool like [nvm](https://github.com/creationix/nvm#install-script) can help you manage multiple version installations.
+    - You will need [Google Chrome](https://www.google.com/chrome/) to run browser-based tests locally.
 1. Follow [Github's documentation](https://help.github.com/articles/fork-a-repo/) on setting up Git, forking and cloning.
 1. Create a new branch in your working copy.  Give your branch a descriptive name, such as `issue/12345`: `git checkout -b issue/12345`.
 1. Execute `npm install` to install the development dependencies.
+    - Do not use `yarn install`.
+    - Some optional dependencies may fail; you can safely ignore these unless you are trying to build the documentation.
+    - If you're sick of seeing the failures, run `npm install --ignore-scripts`.
 1. Make your changes and add them via `git add`.
+    - Your changes will likely be somewhere in `lib/`, `bin/` or `browser-entry.js` (if your changes are browser-specific).
+    - Unit and/or integration **tests are required** for any code change.  These live in `test/`.
     - **Do not modify** the root `mocha.js` file directly; it is automatically generated.
-    - Your changes will likely be somewhere in `lib/`, `bin/` or `browser-entry.js` if your changes are browser-specific.
-    - Please add unit and/or integration tests (depending on the nature of your changes).
-    - Keep your PR focused.  Don't fix two things at once, or make formatting changes alongside bug fixes.
-1. Before committing, run `npm test`.
-    - This will run unit tests, Node.js and browser integration tests, and lint the source code.
-    - The "browser" tests use Mocha to test itself; it will rebuild the root `mocha.js` file with your changes.
-    - **Please avoid committing changes to `mocha.js`**.
+    - Keep your PR focused.  Don't fix two things at once; don't upgrade dependencies unless necessary.
+1. Before committing, run `npm start test`.
+    - This will run both Node.js-based and browser-based tests.
     - Ultimately, your pull request will be built on our continuous integration servers ([Travis CI](https://travis-ci.org/mochajs/mocha) and [AppVeyor](https://ci.appveyor.com/project/boneskull/mocha)).  The first step to ensuring these checks pass is to test on your own machine.
+    - A coverage check will be sent to [Coveralls](https://coveralls.io/github/mochajs/mocha).  **A drop in code coverage % is considered a failed check**.
 1. Commit your changes.
-    - Use a brief message on the first line, referencing a relevant issue (e.g. `#12345`).
+    - Use a brief message on the first line, referencing a relevant issue (e.g. `closes #12345`).
     - Add detail in subsequent lines.
-1. Push your changes to your fork.
-1. Navigate to the source repository.  You should see a notification about your recent changes in your fork's branch, with a button to create a pull request.  Click it.
-1. Describe your changes in detail here.  Once you're satisfied, submit the form.
-    - *PRO TIP*: If you've used a multi-line commit message, Github will pre-fill the PR's description with it.
-1. If you have not signed our Contributor License Agreement, a friendly robot will prompt you to do so.  A [CLA](https://cla.js.foundation/mochajs/mocha) (electronic) signature is **required** for all contributions of code to Mocha.
-1. CI will run against your changes.
-    - If the changes fail the checks, you will need to address those before merging.
-    - You don't need to make a new PR to make changes.  Instead, commit on top of your changes, and push these to your fork's branch.  The PR will be updated, and CI will re-run.
-    - Github will indicate if there's a conflict.  If this happens, you will need to [rebase](https://help.github.com/articles/about-git-rebase/) your branch onto the `master` branch of the source repository.  *Don't merge.*
-    - It's no longer necessary to "squash" your changes.
+    - A pre-commit hook will run which automatically formats your staged  changes (and fixes any problems it can) with ESLint and Prettier.  If ESLint fails to fix an issue, your commit will fail and you will need to manually correct the problem.
+1. <a name="up-to-date"/> (Optional) Ensure you are up-to-date with Mocha's `master` branch:
+    - You can add an "upstream" remote repo using `git remote add upstream https://github.com/mochajs/mocha.git && git fetch upstream`.
+    - Navigate to your `master` branch using `git checkout master`.
+    - Pull changes from `upstream` using `git pull upstream master`.
+    - If any changes were pulled in, rebase your branch onto `master` by switching back to your branch (`git checkout <your-branch>`) then rebasing using `git rebase master`.
+1. Push your changes to your fork; `git push origin`.
+1. In your browser, navigate to [mochajs/mocha](https://github.com/mochajs/mocha).  You should see a notification about your recent changes in your fork's branch, with a (green?) button to create a pull request.  Click it.
+1. Describe your changes in detail here, following the template.  Once you're satisfied, submit the form.
+1. If you have not signed our [Contributor License Agreement](https://js.foundation/cla), a friendly robot will prompt you to do so.  A [CLA](https://cla.js.foundation/mochajs/mocha) (electronic) signature is **required** for all contributions of code to Mocha.
+1. Continuous integration checks will run against your changes.  The result of these checks will be displayed on your PR.
+    - If the checks fail, you must address those before the PR is accepted.
+    - GitHub will indicate if there's a conflict.  If this happens, you will need to [rebase](https://help.github.com/articles/about-git-rebase/) your branch onto the `master` branch of the source repository.  **Do not `git merge`**.
+    - (Optional) [Squash](https://help.github.com/articles/about-pull-request-merges/#squash-and-merge-your-pull-request-commits) your changesets.  If you have multiple changesets in your PR, they will be squashed upon PR acceptance by the Mocha team.
 1. Be patient while your PR is reviewed. This can take a while. We may request changes, but don't be afraid to question them.
+1. Your PR might become conflicted with the code in `master`.  If this is the case, you will need to [update your PR](#up-to-date) and resolve your conflicts.
+1. You don't need to make a new PR to any needed changes.  Instead, commit on top of your changes, and push these to your fork's branch.  The PR will be updated, and CI will re-run.
+
+Join us in the [contributors' chat](https://gitter.im/mochajs/contributors)!
 
 ## :angel: I Just Want To Help
 
 *Excellent.*  Here's how:
 
-- **Handy with JavaScript?**  Please check out the issues labeled [`help-wanted`](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22).
-- **Can you write well?**  Help with the documentation.  See the [issues for our site](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation).
-- **Design your thing?**  [Our site](https://github.com/mochajs/mocha/tree/master/docs) needs your magic touch.
-- **Know Mocha's codebase?**  We could use your help triaging issues and/or reviewing pull requests.  Please contact an [org member](https://github.com/orgs/mochajs/people), and we'll chat.
+- **Handy with JavaScript?**  Please check out the issues labeled [`help wanted`](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [`good-first-issue`](https://github.com/mochajs/mocha/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Agood-first-issue).  Try `npx good-first-issue mocha`!
+- **Can you write ~~good~~ well?**  The [documentation](https://mochajs.org) almost always needs some love.  See the [doc-related issues](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation).
+- **Design your thing?**  [Our site](https://mochajs.org) needs your magic touch.
+- **Familiar with Mocha's codebase?**  We could use your help triaging issues and/or reviewing pull requests.  Please contact an [org member](https://github.com/orgs/mochajs/people), and we'll chat.
 - **Want to build our community?**  Mocha has a *lot* of users.  We could use your help bringing everyone together in peace and harmony.  Please contact an [org member](https://github.com/mochajs/people).
 - **You can sell dirt to worms?**  Let's raise Mocha's profile in the JavaScript and OSS communities.  Please contact an [org member](https://github.com/orgs/mochajs/people)!
 - **Wait--you write unit tests for *fun*?**  A PR which increases coverage is unlikely to be turned down.
-- **Are you experienced?**  If you're a seasoned Mocha user, why not help answer some questions in the [chat room](https://gitter.im/mochajs/mocha)?
+- **Are you experienced?** :guitar:  If you're a seasoned Mocha user, why not help answer some questions in the [main chat room](https://gitter.im/mochajs/mocha)?

{'commit': 'diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md\nindex 8f233305..440a3cc9 100644\n--- a/.github/CONTRIBUTING.md\n+++ b/.github/CONTRIBUTING.md\n@@ -28,7 +28,7 @@ It\'s also important to understand some overarching goals of Mocha, detailed belo\n \n ### :soccer: About Project Goals\n \n-Mocha is a test framework.  Developers use it against anything from legacy spaghetti in IE7 to stage-0 TC39 features in Electron.  While still staying current, Mocha will only drop support for old platforms as a last resort.  If and only if Mocha cannot move forward as a project, support will be dropped.  If workarounds exist, they are preferred.\n+Mocha is a test framework.  Developers use it against anything from legacy spaghetti in IE11 to stage-0 TC39 features in Electron.  Mocha is committed to providing support for maintained (LTS) versions of Node.js and popular browsers (of which IE11 is still one, as of December 2018).\n \n Mocha adheres strictly to [semantic versioning](https://semver.org).  We are *extremely cautious* with changes that have the potential to break; given the size of Mocha\'s user base, it\'s *highly unlikely* a breaking change will slide by.\n \n@@ -40,47 +40,58 @@ We ask you please keep these goals in mind when making or proposing changes.\n \n Follow these steps to get going.  If you are having trouble, don\'t be afraid to [ask for help](#got-a-question).\n \n-> PRO TIP: Run `npm start` to see a list of commands which can be run with `npm start <command>`\n+> PRO TIP: After `npm install`, run `npm start` to see a list of commands which can be run with `npm start <command>` (powered by [nps](https://npm.im/nps)).\n \n 1. [Install Node.js 6.x or newer](https://nodejs.org/en/download/).\n     - If you\'re new to installing Node, a tool like [nvm](https://github.com/creationix/nvm#install-script) can help you manage multiple version installations.\n+    - You will need [Google Chrome](https://www.google.com/chrome/) to run browser-based tests locally.\n 1. Follow [Github\'s documentation](https://help.github.com/articles/fork-a-repo/) on setting up Git, forking and cloning.\n 1. Create a new branch in your working copy.  Give your branch a descriptive name, such as `issue/12345`: `git checkout -b issue/12345`.\n 1. Execute `npm install` to install the development dependencies.\n+    - Do not use `yarn install`.\n+    - Some optional dependencies may fail; you can safely ignore these unless you are trying to build the documentation.\n+    - If you\'re sick of seeing the failures, run `npm install --ignore-scripts`.\n 1. Make your changes and add them via `git add`.\n+    - Your changes will likely be somewhere in `lib/`, `bin/` or `browser-entry.js` (if your changes are browser-specific).\n+    - Unit and/or integration **tests are required** for any code change.  These live in `test/`.\n     - **Do not modify** the root `mocha.js` file directly; it is automatically generated.\n-    - Your changes will likely be somewhere in `lib/`, `bin/` or `browser-entry.js` if your changes are browser-specific.\n-    - Please add unit and/or integration tests (depending on the nature of your changes).\n-    - Keep your PR focused.  Don\'t fix two things at once, or make formatting changes alongside bug fixes.\n-1. Before committing, run `npm test`.\n-    - This will run unit tests, Node.js and browser integration tests, and lint the source code.\n-    - The "browser" tests use Mocha to test itself; it will rebuild the root `mocha.js` file with your changes.\n-    - **Please avoid committing changes to `mocha.js`**.\n+    - Keep your PR focused.  Don\'t fix two things at once; don\'t upgrade dependencies unless necessary.\n+1. Before committing, run `npm start test`.\n+    - This will run both Node.js-based and browser-based tests.\n     - Ultimately, your pull request will be built on our continuous integration servers ([Travis CI](https://travis-ci.org/mochajs/mocha) and [AppVeyor](https://ci.appveyor.com/project/boneskull/mocha)).  The first step to ensuring these checks pass is to test on your own machine.\n+    - A coverage check will be sent to [Coveralls](https://coveralls.io/github/mochajs/mocha).  **A drop in code coverage % is considered a failed check**.\n 1. Commit your changes.\n-    - Use a brief message on the first line, referencing a relevant issue (e.g. `#12345`).\n+    - Use a brief message on the first line, referencing a relevant issue (e.g. `closes #12345`).\n     - Add detail in subsequent lines.\n-1. Push your changes to your fork.\n-1. Navigate to the source repository.  You should see a notification about your recent changes in your fork\'s branch, with a button to create a pull request.  Click it.\n-1. Describe your changes in detail here.  Once you\'re satisfied, submit the form.\n-    - *PRO TIP*: If you\'ve used a multi-line commit message, Github will pre-fill the PR\'s description with it.\n-1. If you have not signed our Contributor License Agreement, a friendly robot will prompt you to do so.  A [CLA](https://cla.js.foundation/mochajs/mocha) (electronic) signature is **required** for all contributions of code to Mocha.\n-1. CI will run against your changes.\n-    - If the changes fail the checks, you will need to address those before merging.\n-    - You don\'t need to make a new PR to make changes.  Instead, commit on top of your changes, and push these to your fork\'s branch.  The PR will be updated, and CI will re-run.\n-    - Github will indicate if there\'s a conflict.  If this happens, you will need to [rebase](https://help.github.com/articles/about-git-rebase/) your branch onto the `master` branch of the source repository.  *Don\'t merge.*\n-    - It\'s no longer necessary to "squash" your changes.\n+    - A pre-commit hook will run which automatically formats your staged  changes (and fixes any problems it can) with ESLint and Prettier.  If ESLint fails to fix an issue, your commit will fail and you will need to manually correct the problem.\n+1. <a name="up-to-date"/> (Optional) Ensure you are up-to-date with Mocha\'s `master` branch:\n+    - You can add an "upstream" remote repo using `git remote add upstream https://github.com/mochajs/mocha.git && git fetch upstream`.\n+    - Navigate to your `master` branch using `git checkout master`.\n+    - Pull changes from `upstream` using `git pull upstream master`.\n+    - If any changes were pulled in, rebase your branch onto `master` by switching back to your branch (`git checkout <your-branch>`) then rebasing using `git rebase master`.\n+1. Push your changes to your fork; `git push origin`.\n+1. In your browser, navigate to [mochajs/mocha](https://github.com/mochajs/mocha).  You should see a notification about your recent changes in your fork\'s branch, with a (green?) button to create a pull request.  Click it.\n+1. Describe your changes in detail here, following the template.  Once you\'re satisfied, submit the form.\n+1. If you have not signed our [Contributor License Agreement](https://js.foundation/cla), a friendly robot will prompt you to do so.  A [CLA](https://cla.js.foundation/mochajs/mocha) (electronic) signature is **required** for all contributions of code to Mocha.\n+1. Continuous integration checks will run against your changes.  The result of these checks will be displayed on your PR.\n+    - If the checks fail, you must address those before the PR is accepted.\n+    - GitHub will indicate if there\'s a conflict.  If this happens, you will need to [rebase](https://help.github.com/articles/about-git-rebase/) your branch onto the `master` branch of the source repository.  **Do not `git merge`**.\n+    - (Optional) [Squash](https://help.github.com/articles/about-pull-request-merges/#squash-and-merge-your-pull-request-commits) your changesets.  If you have multiple changesets in your PR, they will be squashed upon PR acceptance by the Mocha team.\n 1. Be patient while your PR is reviewed. This can take a while. We may request changes, but don\'t be afraid to question them.\n+1. Your PR might become conflicted with the code in `master`.  If this is the case, you will need to [update your PR](#up-to-date) and resolve your conflicts.\n+1. You don\'t need to make a new PR to any needed changes.  Instead, commit on top of your changes, and push these to your fork\'s branch.  The PR will be updated, and CI will re-run.\n+\n+Join us in the [contributors\' chat](https://gitter.im/mochajs/contributors)!\n \n ## :angel: I Just Want To Help\n \n *Excellent.*  Here\'s how:\n \n-- **Handy with JavaScript?**  Please check out the issues labeled [`help-wanted`](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22).\n-- **Can you write well?**  Help with the documentation.  See the [issues for our site](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation).\n-- **Design your thing?**  [Our site](https://github.com/mochajs/mocha/tree/master/docs) needs your magic touch.\n-- **Know Mocha\'s codebase?**  We could use your help triaging issues and/or reviewing pull requests.  Please contact an [org member](https://github.com/orgs/mochajs/people), and we\'ll chat.\n+- **Handy with JavaScript?**  Please check out the issues labeled [`help wanted`](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [`good-first-issue`](https://github.com/mochajs/mocha/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Agood-first-issue).  Try `npx good-first-issue mocha`!\n+- **Can you write ~~good~~ well?**  The [documentation](https://mochajs.org) almost always needs some love.  See the [doc-related issues](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation).\n+- **Design your thing?**  [Our site](https://mochajs.org) needs your magic touch.\n+- **Familiar with Mocha\'s codebase?**  We could use your help triaging issues and/or reviewing pull requests.  Please contact an [org member](https://github.com/orgs/mochajs/people), and we\'ll chat.\n - **Want to build our community?**  Mocha has a *lot* of users.  We could use your help bringing everyone together in peace and harmony.  Please contact an [org member](https://github.com/mochajs/people).\n - **You can sell dirt to worms?**  Let\'s raise Mocha\'s profile in the JavaScript and OSS communities.  Please contact an [org member](https://github.com/orgs/mochajs/people)!\n - **Wait--you write unit tests for *fun*?**  A PR which increases coverage is unlikely to be turned down.\n-- **Are you experienced?**  If you\'re a seasoned Mocha user, why not help answer some questions in the [chat room](https://gitter.im/mochajs/mocha)?\n+- **Are you experienced?** :guitar:  If you\'re a seasoned Mocha user, why not help answer some questions in the [main chat room](https://gitter.im/mochajs/mocha)?\n', 'commit_subject': 'update CONTRIBUTING.md; closes issue/3624', 'repo_name': 'mochajs/mocha', 'committer': {'name': 'Christopher Hiller', 'email': 'cba4593484830aa757cb097d8d9f0ea9b692b304@boneskull.com', 'time_sec': '1548462530', 'tz_offset': '-480', 'date': {'seconds': '1548462530'}}, 'commit_tree': '2a9f5e68bd8b6b0eab5f38458a368d6bc7925b6a', 'commit_message': 'update CONTRIBUTING.md; closes issue/3624\n\nSigned-off-by: Christopher Hiller <cba4593484830aa757cb097d8d9f0ea9b692b304@boneskull.com>\n', 'language_name': 'HTML', 'license': 'mit', 'hunks': '@@ -28,7 +28,7 @@ It\'s also important to understand some overarching goals of Mocha, detailed belo\n \n ### :soccer: About Project Goals\n \n-Mocha is a test framework.  Developers use it against anything from legacy spaghetti in IE7 to stage-0 TC39 features in Electron.  While still staying current, Mocha will only drop support for old platforms as a last resort.  If and only if Mocha cannot move forward as a project, support will be dropped.  If workarounds exist, they are preferred.\n+Mocha is a test framework.  Developers use it against anything from legacy spaghetti in IE11 to stage-0 TC39 features in Electron.  Mocha is committed to providing support for maintained (LTS) versions of Node.js and popular browsers (of which IE11 is still one, as of December 2018).\n \n Mocha adheres strictly to [semantic versioning](https://semver.org).  We are *extremely cautious* with changes that have the potential to break; given the size of Mocha\'s user base, it\'s *highly unlikely* a breaking change will slide by.\n \n@@ -40,47 +40,58 @@ We ask you please keep these goals in mind when making or proposing changes.\n \n Follow these steps to get going.  If you are having trouble, don\'t be afraid to [ask for help](#got-a-question).\n \n-> PRO TIP: Run `npm start` to see a list of commands which can be run with `npm start <command>`\n+> PRO TIP: After `npm install`, run `npm start` to see a list of commands which can be run with `npm start <command>` (powered by [nps](https://npm.im/nps)).\n \n 1. [Install Node.js 6.x or newer](https://nodejs.org/en/download/).\n     - If you\'re new to installing Node, a tool like [nvm](https://github.com/creationix/nvm#install-script) can help you manage multiple version installations.\n+    - You will need [Google Chrome](https://www.google.com/chrome/) to run browser-based tests locally.\n 1. Follow [Github\'s documentation](https://help.github.com/articles/fork-a-repo/) on setting up Git, forking and cloning.\n 1. Create a new branch in your working copy.  Give your branch a descriptive name, such as `issue/12345`: `git checkout -b issue/12345`.\n 1. Execute `npm install` to install the development dependencies.\n+    - Do not use `yarn install`.\n+    - Some optional dependencies may fail; you can safely ignore these unless you are trying to build the documentation.\n+    - If you\'re sick of seeing the failures, run `npm install --ignore-scripts`.\n 1. Make your changes and add them via `git add`.\n+    - Your changes will likely be somewhere in `lib/`, `bin/` or `browser-entry.js` (if your changes are browser-specific).\n+    - Unit and/or integration **tests are required** for any code change.  These live in `test/`.\n     - **Do not modify** the root `mocha.js` file directly; it is automatically generated.\n-    - Your changes will likely be somewhere in `lib/`, `bin/` or `browser-entry.js` if your changes are browser-specific.\n-    - Please add unit and/or integration tests (depending on the nature of your changes).\n-    - Keep your PR focused.  Don\'t fix two things at once, or make formatting changes alongside bug fixes.\n-1. Before committing, run `npm test`.\n-    - This will run unit tests, Node.js and browser integration tests, and lint the source code.\n-    - The "browser" tests use Mocha to test itself; it will rebuild the root `mocha.js` file with your changes.\n-    - **Please avoid committing changes to `mocha.js`**.\n+    - Keep your PR focused.  Don\'t fix two things at once; don\'t upgrade dependencies unless necessary.\n+1. Before committing, run `npm start test`.\n+    - This will run both Node.js-based and browser-based tests.\n     - Ultimately, your pull request will be built on our continuous integration servers ([Travis CI](https://travis-ci.org/mochajs/mocha) and [AppVeyor](https://ci.appveyor.com/project/boneskull/mocha)).  The first step to ensuring these checks pass is to test on your own machine.\n+    - A coverage check will be sent to [Coveralls](https://coveralls.io/github/mochajs/mocha).  **A drop in code coverage % is considered a failed check**.\n 1. Commit your changes.\n-    - Use a brief message on the first line, referencing a relevant issue (e.g. `#12345`).\n+    - Use a brief message on the first line, referencing a relevant issue (e.g. `closes #12345`).\n     - Add detail in subsequent lines.\n-1. Push your changes to your fork.\n-1. Navigate to the source repository.  You should see a notification about your recent changes in your fork\'s branch, with a button to create a pull request.  Click it.\n-1. Describe your changes in detail here.  Once you\'re satisfied, submit the form.\n-    - *PRO TIP*: If you\'ve used a multi-line commit message, Github will pre-fill the PR\'s description with it.\n-1. If you have not signed our Contributor License Agreement, a friendly robot will prompt you to do so.  A [CLA](https://cla.js.foundation/mochajs/mocha) (electronic) signature is **required** for all contributions of code to Mocha.\n-1. CI will run against your changes.\n-    - If the changes fail the checks, you will need to address those before merging.\n-    - You don\'t need to make a new PR to make changes.  Instead, commit on top of your changes, and push these to your fork\'s branch.  The PR will be updated, and CI will re-run.\n-    - Github will indicate if there\'s a conflict.  If this happens, you will need to [rebase](https://help.github.com/articles/about-git-rebase/) your branch onto the `master` branch of the source repository.  *Don\'t merge.*\n-    - It\'s no longer necessary to "squash" your changes.\n+    - A pre-commit hook will run which automatically formats your staged  changes (and fixes any problems it can) with ESLint and Prettier.  If ESLint fails to fix an issue, your commit will fail and you will need to manually correct the problem.\n+1. <a name="up-to-date"/> (Optional) Ensure you are up-to-date with Mocha\'s `master` branch:\n+    - You can add an "upstream" remote repo using `git remote add upstream https://github.com/mochajs/mocha.git && git fetch upstream`.\n+    - Navigate to your `master` branch using `git checkout master`.\n+    - Pull changes from `upstream` using `git pull upstream master`.\n+    - If any changes were pulled in, rebase your branch onto `master` by switching back to your branch (`git checkout <your-branch>`) then rebasing using `git rebase master`.\n+1. Push your changes to your fork; `git push origin`.\n+1. In your browser, navigate to [mochajs/mocha](https://github.com/mochajs/mocha).  You should see a notification about your recent changes in your fork\'s branch, with a (green?) button to create a pull request.  Click it.\n+1. Describe your changes in detail here, following the template.  Once you\'re satisfied, submit the form.\n+1. If you have not signed our [Contributor License Agreement](https://js.foundation/cla), a friendly robot will prompt you to do so.  A [CLA](https://cla.js.foundation/mochajs/mocha) (electronic) signature is **required** for all contributions of code to Mocha.\n+1. Continuous integration checks will run against your changes.  The result of these checks will be displayed on your PR.\n+    - If the checks fail, you must address those before the PR is accepted.\n+    - GitHub will indicate if there\'s a conflict.  If this happens, you will need to [rebase](https://help.github.com/articles/about-git-rebase/) your branch onto the `master` branch of the source repository.  **Do not `git merge`**.\n+    - (Optional) [Squash](https://help.github.com/articles/about-pull-request-merges/#squash-and-merge-your-pull-request-commits) your changesets.  If you have multiple changesets in your PR, they will be squashed upon PR acceptance by the Mocha team.\n 1. Be patient while your PR is reviewed. This can take a while. We may request changes, but don\'t be afraid to question them.\n+1. Your PR might become conflicted with the code in `master`.  If this is the case, you will need to [update your PR](#up-to-date) and resolve your conflicts.\n+1. You don\'t need to make a new PR to any needed changes.  Instead, commit on top of your changes, and push these to your fork\'s branch.  The PR will be updated, and CI will re-run.\n+\n+Join us in the [contributors\' chat](https://gitter.im/mochajs/contributors)!\n \n ## :angel: I Just Want To Help\n \n *Excellent.*  Here\'s how:\n \n-- **Handy with JavaScript?**  Please check out the issues labeled [`help-wanted`](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22).\n-- **Can you write well?**  Help with the documentation.  See the [issues for our site](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation).\n-- **Design your thing?**  [Our site](https://github.com/mochajs/mocha/tree/master/docs) needs your magic touch.\n-- **Know Mocha\'s codebase?**  We could use your help triaging issues and/or reviewing pull requests.  Please contact an [org member](https://github.com/orgs/mochajs/people), and we\'ll chat.\n+- **Handy with JavaScript?**  Please check out the issues labeled [`help wanted`](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) or [`good-first-issue`](https://github.com/mochajs/mocha/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Agood-first-issue).  Try `npx good-first-issue mocha`!\n+- **Can you write ~~good~~ well?**  The [documentation](https://mochajs.org) almost always needs some love.  See the [doc-related issues](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation).\n+- **Design your thing?**  [Our site](https://mochajs.org) needs your magic touch.\n+- **Familiar with Mocha\'s codebase?**  We could use your help triaging issues and/or reviewing pull requests.  Please contact an [org member](https://github.com/orgs/mochajs/people), and we\'ll chat.\n - **Want to build our community?**  Mocha has a *lot* of users.  We could use your help bringing everyone together in peace and harmony.  Please contact an [org member](https://github.com/mochajs/people).\n - **You can sell dirt to worms?**  Let\'s raise Mocha\'s profile in the JavaScript and OSS communities.  Please contact an [org member](https://github.com/orgs/mochajs/people)!\n - **Wait--you write unit tests for *fun*?**  A PR which increases coverage is unlikely to be turned down.\n-- **Are you experienced?**  If you\'re a seasoned Mocha user, why not help answer some questions in the [chat room](https://gitter.im/mochajs/mocha)?\n+- **Are you experienced?** :guitar:  If you\'re a seasoned Mocha user, why not help answer some questions in the [main chat room](https://gitter.im/mochajs/mocha)?\n', 'addition_count': 36, 'deletion_count': 25, 'src_file': 'a/.github/CONTRIBUTING.md', 'tgt_file': 'b/.github/CONTRIBUTING.md', 'file_extension': '.md', 'before_file': '# Contributing to Mocha\n\n> Please read these guidelines before submitting an issue, filing a feature request, or contributing code.\n\n## :question: Got a Question?\n\nIf you have a question about using Mocha, please use the [mailing list](https://groups.google.com/group/mochajs), [StackOverflow](https://stackoverflow.com), or ask the friendly people in our [chat room](https://gitter.im/mochajs/mocha).\n\n## :bug: I Found a Bug\n\nSorry! It happens to the best of us. If you\'ve found a bug in Mocha, **please [search](https://github.com/mochajs/mocha/issues/) to see if it\'s already been reported**. Otherwise, create a [new issue](https://github.com/mochajs/mocha/issues/new). If you can fix the bug yourself, feel free to create a [pull request](#propose-a-change) thereafter.\n\nPlease include _as much detail as possible_ to help us reproduce and diagnose the bug. Most importantly:\n\n- Let us know _how_ you\'re running Mocha (options, flags, environment, browser or Node.js, etc.)\n- Include your test code or file(s). If large, please provide a link to a repository or [gist](https://gist.github.com).\n- Please show code in JavaScript only (any version)\n\nIf we need more information from you, we\'ll let you know. If you don\'t within a reasonable time frame (TBD), your issue will be automatically closed for inactivity.\n\n## :exclamation: Propose a Change\n\nBefore you get your hands dirty, please [search](https://github.com/mochajs/mocha/issues/) for a related issue, or [create a new one](https://github.com/mochajs/mocha/issues/new). If you wish to contribute a new feature, this is doubly important! Let\'s discuss your proposed changes first; we don\'t want you to waste time implementing a change that is at odds with the project\'s direction. That said, we\'ll happily consider any contribution, no matter how great or small.\n\n_This paragraph would contain information about Mocha\'s roadmap, but it doesn\'t yet exist._ :poop:\n\nIt\'s also important to understand some overarching goals of Mocha, detailed below.\n\n### :soccer: About Project Goals\n\nMocha is a test framework.  Developers use it against anything from legacy spaghetti in IE7 to stage-0 TC39 features in Electron.  While still staying current, Mocha will only drop support for old platforms as a last resort.  If and only if Mocha cannot move forward as a project, support will be dropped.  If workarounds exist, they are preferred.\n\nMocha adheres strictly to [semantic versioning](https://semver.org).  We are *extremely cautious* with changes that have the potential to break; given the size of Mocha\'s user base, it\'s *highly unlikely* a breaking change will slide by.\n\nMocha\'s usage far outweighs its resources. If a proposed feature would incur a maintenance penalty, it could be a hard sell.\n\nWe ask you please keep these goals in mind when making or proposing changes.\n\n### :shoe: Contributing Code: Step-by-Step\n\nFollow these steps to get going.  If you are having trouble, don\'t be afraid to [ask for help](#got-a-question).\n\n> PRO TIP: Run `npm start` to see a list of commands which can be run with `npm start <command>`\n\n1. [Install Node.js 6.x or newer](https://nodejs.org/en/download/).\n    - If you\'re new to installing Node, a tool like [nvm](https://github.com/creationix/nvm#install-script) can help you manage multiple version installations.\n1. Follow [Github\'s documentation](https://help.github.com/articles/fork-a-repo/) on setting up Git, forking and cloning.\n1. Create a new branch in your working copy.  Give your branch a descriptive name, such as `issue/12345`: `git checkout -b issue/12345`.\n1. Execute `npm install` to install the development dependencies.\n1. Make your changes and add them via `git add`.\n    - **Do not modify** the root `mocha.js` file directly; it is automatically generated.\n    - Your changes will likely be somewhere in `lib/`, `bin/` or `browser-entry.js` if your changes are browser-specific.\n    - Please add unit and/or integration tests (depending on the nature of your changes).\n    - Keep your PR focused.  Don\'t fix two things at once, or make formatting changes alongside bug fixes.\n1. Before committing, run `npm test`.\n    - This will run unit tests, Node.js and browser integration tests, and lint the source code.\n    - The "browser" tests use Mocha to test itself; it will rebuild the root `mocha.js` file with your changes.\n    - **Please avoid committing changes to `mocha.js`**.\n    - Ultimately, your pull request will be built on our continuous integration servers ([Travis CI](https://travis-ci.org/mochajs/mocha) and [AppVeyor](https://ci.appveyor.com/project/boneskull/mocha)).  The first step to ensuring these checks pass is to test on your own machine.\n1. Commit your changes.\n    - Use a brief message on the first line, referencing a relevant issue (e.g. `#12345`).\n    - Add detail in subsequent lines.\n1. Push your changes to your fork.\n1. Navigate to the source repository.  You should see a notification about your recent changes in your fork\'s branch, with a button to create a pull request.  Click it.\n1. Describe your changes in detail here.  Once you\'re satisfied, submit the form.\n    - *PRO TIP*: If you\'ve used a multi-line commit message, Github will pre-fill the PR\'s description with it.\n1. If you have not signed our Contributor License Agreement, a friendly robot will prompt you to do so.  A [CLA](https://cla.js.foundation/mochajs/mocha) (electronic) signature is **required** for all contributions of code to Mocha.\n1. CI will run against your changes.\n    - If the changes fail the checks, you will need to address those before merging.\n    - You don\'t need to make a new PR to make changes.  Instead, commit on top of your changes, and push these to your fork\'s branch.  The PR will be updated, and CI will re-run.\n    - Github will indicate if there\'s a conflict.  If this happens, you will need to [rebase](https://help.github.com/articles/about-git-rebase/) your branch onto the `master` branch of the source repository.  *Don\'t merge.*\n    - It\'s no longer necessary to "squash" your changes.\n1. Be patient while your PR is reviewed. This can take a while. We may request changes, but don\'t be afraid to question them.\n\n## :angel: I Just Want To Help\n\n*Excellent.*  Here\'s how:\n\n- **Handy with JavaScript?**  Please check out the issues labeled [`help-wanted`](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22).\n- **Can you write well?**  Help with the documentation.  See the [issues for our site](https://github.com/mochajs/mocha/issues?q=is%3Aopen+is%3Aissue+label%3Adocumentation).\n- **Design your thing?**  [Our site](https://github.com/mochajs/mocha/tree/master/docs) needs your magic touch.\n- **Know Mocha\'s codebase?**  We could use your help triaging issues and/or reviewing pull requests.  Please contact an [org member](https://github.com/orgs/mochajs/people), and we\'ll chat.\n- **Want to build our community?**  Mocha has a *lot* of users.  We could use your help bringing everyone together in peace and harmony.  Please contact an [org member](https://github.com/mochajs/people).\n- **You can sell dirt to worms?**  Let\'s raise Mocha\'s profile in the JavaScript and OSS communities.  Please contact an [org member](https://github.com/orgs/mochajs/people)!\n- **Wait--you write unit tests for *fun*?**  A PR which increases coverage is unlikely to be turned down.\n- **Are you experienced?**  If you\'re a seasoned Mocha user, why not help answer some questions in the [chat room](https://gitter.im/mochajs/mocha)?\n', 'message': 'update CONTRIBUTING.md; closes issue/3624\n\nSigned-off-by: Christopher Hiller <cba4593484830aa757cb097d8d9f0ea9b692b304@boneskull.com>\n', 'author_name': 'Christopher Hiller', 'lang': 'github/CONTRIBUTING'}