# Contributing to CodeLens Welcome! We appreciate contributions of all kinds. Here's how to get started. --- ## Development Setup To get started with local development: 1. **Clone and Install**: ```bash git clone https://github.com/ArshVermaGit/open-ev-code-handler.git cd open-ev-code-handler python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt ``` 2. **Initialize**: ```bash cp .env.example .env python scripts/migrate.py init ``` 3. **Run Tests**: ```bash PYTHONPATH=. pytest tests/ -v ``` --- ## Adding a New Scenario Scenarios live in `codelens_env/scenarios.py`. Each scenario needs: **Step 1**: Choose a task type and next sequential hash (e.g., `bug_011`). **Step 2**: Write a realistic unified diff. The diff must: - Start with `--- a/filename` and `+++ b/filename` - Include `@@ -N,M +N,M @@` hunk headers - Show a few lines of context (unchanged lines) - Include the problematic line prefixed with `+` Example patch: ```python patch="""--- a/api/users.py +++ b/api/users.py @@ -10,6 +10,6 @@ def get_users(page, size): offset = page * size - return items[offset:offset + size] + return items[offset:offset + size - 1] """ ``` **Step 3**: Define at least one `GroundTruthIssue` with: - `keywords`: 2+ specific terms an agent body must contain (case-insensitive) - `line_number`: the line in the diff where the issue occurs (±3 tolerance for bugs/security, ±5 for arch) - `severity`: appropriate level (`critical` only for RCE/auth bypass/data loss) **Step 4**: Add to `ALL_SCENARIOS` list and verify: ```bash PYTHONPATH=. python -m pytest tests/test_scenarios.py -v ``` All 30 (or more) scenarios must pass validation. --- ## Pull Request Process 1. Fork the repo and create a branch: `feat/my-feature`, `fix/my-bug`, `test/more-tests` 2. Make your changes 3. Run the full test suite: `PYTHONPATH=. python -m pytest tests/ -v` 4. Run the linter: `pylint codelens_env/ app.py` (target score ≥ 7.0) 5. Open a PR against `main` with a clear description --- ## Code Style - **Type hints** on all public functions and methods - **Docstrings** on all public classes and non-trivial functions - **pylint score** ≥ 7.0 - **Line length** ≤ 100 characters - No bare `except:` clauses — always specify the exception type --- ## Commit Message Format We use [Conventional Commits](https://www.conventionalcommits.org/): ``` feat: add rate limiting to /reset endpoint fix: correct leaderboard rank calculation after slice test: add parametrized tests for all 30 scenarios docs: update README quick start commands refactor: extract episode cleanup into separate module chore: upgrade pydantic to 2.6.1 ```