Spaces:
Sleeping
Sleeping
| # CodeReview-Env β Hackathon Impact Statement | |
| **(Meta Γ PyTorch Γ HuggingFace OpenEnv Hackathon 2026)** | |
| --- | |
| ## The Problem | |
| Code review is one of the most time-consuming, high-stakes, and yet most poorly-automated | |
| tasks in software engineering: | |
| - Developers spend **6β12 hours per week** reviewing pull requests. | |
| - Most LLMs today produce dangerously generic feedback: _"Looks good!"_, _"LGTM"_, _"Maybe add a test."_ | |
| - This low-quality output creates **alert fatigue** β developers stop trusting AI feedback | |
| and the review becomes perfunctory. | |
| - Real production incidents (auth bypasses, duplicate payments, pagination data corruption) | |
| are missed because the model never looked beyond the first few lines of a diff. | |
| --- | |
| ## Why This Environment Is Unique | |
| ### 1. Genuinely Multi-Step Episodic Structure | |
| Most RL environments for LLMs are single-step (prompt-in, completion-out). CodeReview-Env is | |
| **genuinely multi-step**: an agent must decide _in sequence_ whether to gather more evidence | |
| (`open_artifact`) or commit to a final review (`submit_review`). This forces the model to | |
| learn a temporal exploration strategy, not just a single inference pattern. | |
| ``` | |
| reset() β observe diff + ticket | |
| βββ open_artifact(auth_middleware) β +0.12 reward, artifact revealed | |
| βββ open_artifact(security_policy) β +0.10 reward, policy revealed | |
| βββ submit_review(findings=[...]) β grader score + efficiency bonus, done=True | |
| ``` | |
| ### 2. Deterministic, Reproducible Grading β No LLM-as-a-Judge | |
| The core reward signal uses a **multi-criterion keyword grader** (`server/tasks.py`) with | |
| deterministic, reproducible scoring β no external LLM calls, no flakiness: | |
| - Per-criterion scoring uses 5 weighted factors: `issue keywords`, `recommendation keywords`, | |
| `severity label`, `file path`, and `evidence trail` (which artifacts were opened). | |
| - Rewards are always in the strictly open interval `(0.05, 0.95)` β never exactly 0 or 1 β | |
| enforced by `_clamp_score()` at every layer (`tasks.py`, `reward.py`, `environment.py`). | |
| ### 3. Evidence-Gated Difficulty Hierarchy | |
| The three tasks are carefully designed so that **the harder tasks require more artifact | |
| exploration to score well**, creating a natural curriculum: | |
| | Task | # Criteria | Artifacts Needed to Score β₯ 0.60 | Baseline Score | | |
| |---|---|---|---| | |
| | `pagination-regression` | 2 | 1 (`test_log`) | ~0.74 | | |
| | `tenant-export-auth` | 2 | 2 (`auth_middleware` + `security_policy`) | ~0.61 | | |
| | `refund-idempotency` | 3 | 4 (`payment_client` + `worker_log` + `db_model` + `regression_test`) | ~0.38 | | |
| The hardest task (`refund-idempotency`) requires multi-artifact correlation to detect all | |
| three issues: the **retry-without-idempotency**, the **concurrent status-update race**, and | |
| the **missing regression test**. A model that skips evidence gathering will miss at least one. | |
| ### 4. Strict Pydantic Enforcement | |
| Agent outputs are validated by `codereview_env/models.py` before entering the environment: | |
| - `ReviewFinding` requires `title` (β₯5 chars), `file_path` (β₯3 chars), `rationale` (β₯20 chars), | |
| `recommendation` (β₯12 chars), and a valid `severity` enum. | |
| - `CodeReviewObservation` enforces `score` and `reward` fields as Pydantic `gt=0.0`, `lt=1.0`. | |
| This forces agents to output **structured, actionable findings** rather than free-text markdown. | |
| ### 5. Interactive Web Dashboard | |
| Unlike typical headless RL environments, CodeReview-Env ships with a fully integrated | |
| real-time web dashboard (`frontend/index.html`) served at `/` by the FastAPI backend: | |
| - Live episode tracking β watch the agent open artifacts and form its review. | |
| - Diff and artifact viewer β renders code files and policies directly in the browser. | |
| - Reward breakdown β shows how the grader evaluated each finding in real-time. | |
| - Task selector β switch between all three tasks interactively. | |
| ### 6. Safety Layer | |
| `codereview_env/safety.py` provides: | |
| - **`PaginationValidator`** β Guards all pagination inputs against type errors and out-of-range | |
| values before they reach the underlying pagination system. This mirrors the exact bug in the | |
| `pagination-regression` task, making the environment self-documenting. | |
| - **`SafeRewardCalculator`** β Wraps reward math with the same `max/min` clamping and | |
| late-rounding pattern used across the rest of the codebase. | |
| --- | |
| ## Technical Novelty Summary | |
| | Feature | Other RL Envs | CodeReview-Env | | |
| |---|---|---| | |
| | Episode structure | Single step | Multi-step (up to 7 steps) | | |
| | Reward signal | LLM judge (flaky) | Deterministic keywords + evidence trail | | |
| | Reward bounds | Often 0.0 or 1.0 | Strictly (0.05, 0.95) β enforced everywhere | | |
| | Output validation | Free-form text | Pydantic schema with min-length constraints | | |
| | Artifact exploration | None | 3β6 artifacts per task, each with reward | | |
| | Difficulty tiers | Flat | 3 tiers with evidence-gated scoring | | |
| | Training framework | Custom | TRL-compatible GRPO reward function | | |
| | Deployment | Often local-only | Docker + HuggingFace Spaces ready | | |
| --- | |
| ## Real-World Impact | |
| - A model trained here could autonomously triage PRs at **enterprise scale** β reviewing | |
| 100+ PRs per day with precise, finding-level comments. | |
| - Replaces vague AI suggestions with **targeted, line-specific security interventions** that | |
| static analysis tools universally miss (auth bypasses, TOCTOU races, payment idempotency). | |
| - Trained agents learn to **justify their findings** β providing rationale and recommendation | |
| in a format engineers can immediately act on. | |
| --- | |
| ## Future Extensions | |
| - **Continuous task generation** β Dynamically generate new CVE-inspired tasks to prevent | |
| benchmark overfitting. | |
| - **CI/CD integration** β Deploy the trained agent as a GitHub Actions bot that reviews | |
| incoming PRs automatically. | |
| - **Fix-Application loop** β Add a `push_commit` action where the agent patches the code | |
| based on its own review findings and verifies unit tests pass. | |
| - **Multi-agent review** β Multiple agents reviewing the same PR and reaching consensus. | |
| --- | |
| ## Compatibility Matrix | |
| Fully tested and optimized for: | |
| | Framework | Usage | | |
| |---|---| | |
| | `openenv-core` | Environment base class (`Environment[Obs, Act, State]`) | | |
| | `TRL` (GRPO / PPO) | Reward function via `CodeReviewEnv.get_reward_breakdown()` | | |
| | `Unsloth` | Drop-in with TRL GRPO config | | |
| | `SkyRL` | Compatible via standard OpenAI-style API | | |
| | HuggingFace Spaces | Docker SDK, port 7860, root-level Dockerfile | | |
| See [`examples/run_grpo_training.py`](examples/run_grpo_training.py) for the TRL GRPO | |
| training integration boilerplate. | |