# How to Contribute
Thanks for your interest in **Race Condition**! We welcome contributions of
all sizes — bug fixes, documentation improvements, new features, and ideas.
## Contributor License Agreement
Contributions to this project must be accompanied by a Contributor License
Agreement (CLA). You (or your employer) retain the copyright to your
contribution; this simply gives us permission to use and redistribute your
contributions as part of the project.
Visit to see your current agreements on
file or to sign a new one.
You generally only need to submit a CLA once, so if you've already submitted
one (even for a different Google open-source project), you probably don't need
to do it again.
## Community Guidelines
This project follows
[Google's Open Source Community Guidelines](https://opensource.google/conduct/)
and the [Contributor Code of Conduct](CODE_OF_CONDUCT.md).
## Ways to contribute
- 🐛 **[Report a bug](../../issues/new?template=bug_report.md)** — something
is broken or behaves unexpectedly.
- 💡 **[Request a feature](../../issues/new?template=feature_request.md)** —
propose a new capability before building it.
- 📝 **Improve the documentation** — typos, missing pieces, unclear sections.
- 🔧 **Fix an issue** — pick something from the [open issues](../../issues)
and submit a pull request.
For larger changes, please **open an issue first** to discuss the approach.
This avoids wasted effort if a maintainer would have steered you a different
direction.
## Submitting a pull request
1. **Fork** the repository on GitHub.
2. **Clone** your fork locally:
```bash
git clone https://github.com//race-condition.git
cd race-condition
```
3. **Create a topic branch** from `main`:
```bash
git checkout -b feat/my-change
```
4. **Set up your environment** (see [`README.md`](README.md) → *Quickstart*).
5. **Make your change**, following the code style guidelines below.
6. **Add or update tests** for any behavior change.
7. **Run the full test suite locally**:
```bash
make test
make lint
```
8. **Commit** using [Conventional Commits](https://www.conventionalcommits.org/)
format (see below).
9. **Push** to your fork and **open a pull request** against `main`.
10. Address review feedback. CI must be green and CODEOWNERS must approve
before a maintainer merges your PR (squash-merged).
### Code style
- **Go**: format with `gofmt`. All Go code must pass `go vet ./...` and
`golangci-lint run ./...`.
- **Python**: lint and format with [ruff](https://docs.astral.sh/ruff/). Run
`uv run ruff check agents/` and `uv run ruff format --check agents/`.
- **TypeScript / JavaScript**: format with [Prettier](https://prettier.io/);
follow the existing style in each `web/*` workspace.
- **License headers**: every source file needs an Apache-2.0 license header.
CI enforces this with [`addlicense`](https://github.com/google/addlicense).
### Commit messages
We use [Conventional Commits](https://www.conventionalcommits.org/):
```
():
[optional body]
[optional footer(s)]
```
Common types: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`, `perf`,
`build`, `ci`. Examples:
- `feat(gateway): add health-check endpoint`
- `fix(agents/planner): handle timeout when calling traffic enrichment`
- `docs(readme): clarify quickstart prerequisites`
### Sign your commits
Pull requests must be signed (SSH or GPG). See GitHub's guide on
[signing commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits).
## Reporting security vulnerabilities
**Do not file public issues for security problems.** See [`SECURITY.md`](SECURITY.md)
for the private disclosure process.
## Forking and deriving
Forks are encouraged — fork freely to study, learn, build derivatives, or
maintain your own variant. The Apache-2.0 license permits commercial and
private use. Just keep the license headers and `LICENSE` file intact.
## Code reviews
All submissions, including those from project members, require review.
Maintainers aim to respond to PRs within a few business days. If your PR has
been quiet for a week, it's fair to ping the thread.
Thanks again for contributing!