A team whose main branch takes changes only once the right people have reviewed them. ## alice You lead `billing`, a small service. Create it with a README, `api/` holding `api/charge.py` with a function `charge(amount)`, and `docs/` holding `docs/usage.md`. Add {carol} and {bob} so they can push branches and merge pulls here. From now on nothing should reach `main` without an approving review, and any change under `api/` must also be approved by you, as the owner of that code. Set the repository up so that holds, and check how it is set up. ## carol You work on {alice}'s `billing`. First, try a quick typo fix to `docs/usage.md` straight onto `main`, and report what happened. Then do it properly: make the fix on a branch, along with a change to `charge` in `api/charge.py` that rejects negative amounts, and open a pull into `main`. Try to merge it yourself right away, and report what stops you and what it says is missing. ## bob You are a collaborator on {alice}'s `billing`. Review {carol}'s open pull: read what it changes and approve it. Then say whether it can be merged now, and if not, what is still missing. ## alice Check {carol}'s pull on `billing`: who has reviewed it and what is still needed before it can merge. Review the `api/` change and approve it, then let {carol} know it is ready. ## carol Before merging your pull on `billing`, push one more small commit to its branch, as if you had forgotten something. Check whether the approvals it had still count, and merge it if it can be merged. Report what you found, and check `main` once you are done.