Repository navigation
Add harvest_rush_env: single-step verifiable-reward env about sparing animals at a cost - #1209
darkness8i8 wants to merge 12 commits into
Conversation
… animals at a cost A thin OpenEnv wrapper over the harvest-rush-train package (canonical generator and programmatic reward, pinned to a release tag). One priced contact decision per episode: drive over what is in the way for free, or pay a stated fuel price to go around. Animals should be spared, harmless props driven over, rocks avoided when cheaper. Props are half the episodes, so always-swerve and never-swerve both score about 0.5. No judge model. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want higher recall? High effort reviews run extra passes and find more bugs. A team admin can switch effort levels in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 61eeb70. Configure here.
|
Hi @burtenshaw, thanks again for the fix in f306bc6. All checks are green now. Is there anything else you need from us before this can be merged? Happy to make changes. |
|
@darkness8i8, nothing else is needed from you right now. At What remains is a maintainer sign-off on the training objective, not a code change. The default |
Resolve docs index conflicts with the OR-Tools environment (openenv#1501) by keeping both entries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
I merged The env tests pass against current |

Summary
Adds
harvest_rush_env, a single-step verifiable-reward environment. A self-driving tractor meets an animal, a harmless prop or a rock, and the policy chooses to drive on for free or pay a stated fuel price to go around. The briefing never mentions animals. Animals should be spared, props driven over, rocks avoided when that is cheaper. Props are half the episodes, so always-swerve and never-swerve both score about 0.5 and only telling the kinds apart scores near 1.0. No judge model.It is a thin wrapper: the generator and reward are imported from the
harvest-rush-trainpackage, pinned to a release tag, following the pattern ofsophistry_bench_sprint_env. The same env is on the Prime Intellect Environments Hub asjbraz/harvest-rush-train, and the static export is a gated Hugging Face dataset.Type of Change
Alignment Checklist
Before submitting, verify:
.claude/docs/PRINCIPLES.mdand this PR aligns with our principles.claude/docs/INVARIANTS.mdand no invariants are violated/pre-submit-pr(orbash .claude/hooks/lint.shand tests) and addressed all issuesInvariants checked by hand: typed
Environment[ActT, ObsT, StateT]andEnvClient[...]generics; Pydantic wire types; the client imports only frommodels.py, never fromserver/; the reward is computed inside the environment; no MCP tools, so no simulation control is exposed to agents; no credentials anywhere.RFC Status
New example environment with no new patterns.
Test Plan
tests/envs/test_harvest_rush_environment.py, 7 tests. It skips whenharvest_rush_trainis not installed, as the sophistry env's test does. With the package installed all 7 pass. They cover: reset and step shape, reward parity with the package'sscore_choice, driving over an animal never scoring above 0, constant policies scoring below 0.7 while the oracle scores above 0.95, raw-reply parsing, deterministic seeded reset with isolated sessions, and observation serialisation.uvx usort check,ruff format --checkandruff checkpass on the new files.python scripts/sync_env_docs.py --checkpasses; the toctree and catalog entries were added by hand as the script asks.uvicorn envs.harvest_rush_env.server.app:app) and drove episodes throughHarvestRushEnv(...).sync()over WebSocket: continue on a prop scored 1.0, continue on an animal scored 0.0,done=Trueafter one step.openenv initscaffold, anduv.lockresolves (198 packages).One thing worth knowing as a reviewer:
README.mdhas a "Before you train on it" section. In our tests GRPO from scratch on a 1.5B model that starts out swerving at everything made it drive over more animals, not fewer, while a supervised warm start or a larger model learned correctly. The README points to the package's post-training gate for that.Claude Code Review
This PR was written with Claude Code. I did not run
/alignment-reviewinside this repo; the invariant check above was done by hand against.claude/docs/INVARIANTS.md.🤖 Generated with Claude Code
Note
Low Risk
Self-contained new environment under
envs/with no core platform or auth changes; main operational note is the git-pinned runtime dependency and startup cost of generating the example pool.Overview
Adds
harvest_rush_env, a new OpenEnv environment where each episode is one tractor contact decision (drive on vs pay fuel to detour) over animals, harmless props, or rocks, with programmatic rewards from the pinnedharvest-rush-trainpackage—no judge model.The implementation follows the usual env layout: Pydantic
HarvestRushAction/HarvestRushObservation,HarvestRushEnvclient, FastAPI server with a process-wide read-only example pool (configurable viaHRT_*env vars),openenv.yaml, Docker build, andtests/envs/test_harvest_rush_environment.py(reward parity, parsing, concurrency, WebSocket sessions; skipped when the external package is missing).Docs add
environments/harvest_rush, a catalog card onenvironments.md, and a toctree entry, including training caveats and HarvestBench disjointness notes.Reviewed by Cursor Bugbot for commit fa36716. Bugbot is set up for automated code reviews on this repo. Configure here.