Thanks for your interest in contributing! This document covers how to set up your environment, the quality bar every change must clear, and how to submit changes.
By participating in this project you agree to abide by our Code of Conduct.
Do not open a public issue for security vulnerabilities. See SECURITY.md for the private disclosure process.
Prerequisites:
- Python 3.13+
- uv 0.8+ for dependency management
git clone https://github.com/UiPath/coder_eval.git
cd coder_eval
# Installs dev + the optional [uipath] extra (all from public PyPI) AND the
# git pre-commit hooks. No credentials or private index required.
make install
# Or, to install the base dev environment and hooks manually:
uv sync --extra dev
uv run pre-commit installmake install (or the manual pre-commit install) wires up the git hooks that
run ruff and other checks on commit. See the README for the full
installation guide, including optional extras.
All checks are wired through the Makefile. Run the full suite before pushing —
it is the CI equivalent:
make verify # format + lint + typecheck + test + custom lint + coverageIndividual targets:
| Command | What it does |
|---|---|
make format |
ruff format |
make check |
ruff check (lint) |
make typecheck |
pyright |
make test |
pytest (excludes live + custom-lint tests) |
make lint |
custom architectural lint rules (CE001–) |
Coverage is enforced at 80% in CI.
- Read CLAUDE.md — it documents the architecture, key patterns, and conventions (discriminated unions, the criterion plugin registry, the agent plugin SPI, the declarative merge resolver, etc.).
- Import all core models from
coder_eval.models, never from submodules. - New success criteria and agents plug in via the registry/SPI — see the
"Extension Points" section of
CLAUDE.md. - When fixing a bug, ask whether a custom lint rule (
tests/lint/rules/) could prevent the class of bug from recurring, and add one if so. - Keep changes focused: no dead code, all imports used, all tests passing.
This repo uses Conventional Commits (enforced by CI). Format:
<type>(<optional scope>): <description>
feat: add JMESPath assertions to json_check
fix(docker): copy ~/.claude symlinks verbatim
docs: add community-health files
refactor!: remove the LLM Gateway proxy backend
Common types: feat, fix, docs, refactor, test, chore, perf. A !
after the type/scope (or a BREAKING CHANGE: footer) marks a breaking change.
- Fork the repo (or branch, if you have write access) and create a topic branch.
- Make your change, add/update tests, and run
make verify. - Open a PR against
mainand fill out the PR template. - CI (
pr-checks, conventional-commit lint, CodeQL) must pass, and at least one maintainer must approve.
Keep PRs small and single-purpose where possible — it makes review faster and bisection easier.
- Task YAMLs live in
tasks/; see docs/TASK_DEFINITION_GUIDE.md. - Tests should use Haiku or at most Sonnet for any model calls — never Opus (cost).
By contributing, you agree that your contributions will be licensed under the Apache License 2.0, the same license that covers this project.