Skip to content

Commit ae51901

Browse files
committed
release: synchronize project guidance for v0.4.1
1 parent 2ebd39b commit ae51901

11 files changed

Lines changed: 57 additions & 25 deletions

File tree

CHANGELOG.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,21 @@ All notable changes to RewardHarness are recorded here. Versions follow [SemVer]
44

55
## [Unreleased]
66

7-
Future changes after v0.4.0.
7+
Future changes after v0.4.1.
8+
9+
## [0.4.1] — 2026-08-26
810

911
### Fixed
1012

1113
- Made post-publish installation verification retry the PyPI Simple API while
1214
its CDN catches up with JSON metadata, avoiding false-negative release runs.
1315

16+
### Changed
17+
18+
- Synchronized the migration guide, security support matrix, walkthrough,
19+
contributor guidance, and test inventory with the v0.4 runtime and Python
20+
3.13 support.
21+
1422
## [0.4.0] — 2026-08-26
1523

1624
### Added
@@ -234,6 +242,7 @@ deprecated `src` namespace remains as a compatibility layer for v0.2.
234242
- `make demo` and `make benchmark` default to `--library-dir examples/seed_library` for non-empty starting state.
235243
- `make help` is now a credentials matrix showing what each target actually needs.
236244

245+
[0.4.1]: https://github.com/TIGER-AI-Lab/RewardHarness/releases/tag/v0.4.1
237246
[0.4.0]: https://github.com/TIGER-AI-Lab/RewardHarness/releases/tag/v0.4.0
238247
[0.3.1]: https://github.com/TIGER-AI-Lab/RewardHarness/releases/tag/v0.3.1
239248
[0.3.0]: https://github.com/TIGER-AI-Lab/RewardHarness/releases/tag/v0.3.0

CITATION.cff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cff-version: 1.2.0
22
message: "If you use this software, please cite the paper."
33
title: "RewardHarness: Self-Evolving Agentic Post-Training"
4-
version: "0.4.0"
4+
version: "0.4.1"
55
date-released: "2026-08-26"
66
type: software
77
authors:

CONTRIBUTING.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ One-line subject (≤72 chars), then optional body. Reference issues with `#NNN`
4040

4141
## Code style
4242

43-
- Python 3.10+. Type hints encouraged but not required for one-off scripts.
43+
- Python 3.10–3.13. Type hints are required for runtime code under
44+
`rewardharness/` and encouraged for one-off scripts.
4445
- Don't introduce new dependencies unless you're prepared to argue they're worth the install cost in the PR description.
4546
- Default to no comments. Add one only when the *why* is non-obvious (a hidden constraint, a workaround, a surprising behavior).
4647

MIGRATING.md

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,25 @@
1-
# Migrating to RewardHarness 0.3
1+
# Migrating to RewardHarness 0.4
22

3-
RewardHarness 0.3 removes the deprecated `src.*` compatibility namespace that
4-
was retained throughout the 0.2 release series. Runtime behavior, configuration
5-
schema v2, Library files, CLI commands, and result formats remain unchanged.
3+
RewardHarness 0.4 keeps the canonical `rewardharness.*` namespace introduced in
4+
0.3 and modernizes configuration handling and interpreter support without
5+
changing CLI commands, Library files, or result schemas.
6+
7+
## From 0.3 to 0.4
8+
9+
- `RewardHarnessConfig` is now retained throughout benchmark and evolution
10+
workflows instead of being converted back to a legacy dictionary.
11+
- Use `RewardHarnessConfig.to_dict()` for schema-v2 serialization.
12+
`to_legacy_dict()` remains available as a compatibility alias.
13+
- Evolution dataset loading now consumes exactly `train_n + val_n` rows and
14+
fails early if the configured split sizes cannot be satisfied.
15+
- Python 3.13 is supported and continuously tested alongside 3.10–3.12.
16+
17+
No import changes are required when upgrading from 0.3.
18+
19+
## From 0.2 to 0.3
20+
21+
RewardHarness 0.3 removed the deprecated `src.*` compatibility namespace that
22+
was retained throughout the 0.2 release series.
623

724
## Import replacements
825

@@ -28,7 +45,7 @@ Only the module path changes. Public symbol names such as `EndpointPool`,
2845
2. Upgrade and reject pre-release caching explicitly:
2946

3047
```bash
31-
python -m pip install --upgrade "rewardharness>=0.3,<0.4"
48+
python -m pip install --upgrade "rewardharness>=0.4,<0.5"
3249
```
3350

3451
3. Confirm the installed package and configuration:

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ Read [`WALKTHROUGH.md`](WALKTHROUGH.md) for the 9-step path from `git clone` to
4545

4646
## Updates
4747

48+
- **2026-08-26**`v0.4.1`: synchronized migration, security, walkthrough,
49+
and test documentation, and hardened post-publish verification against PyPI
50+
CDN propagation delays.
4851
- **2026-08-26**`v0.4.0`: type-safe configuration throughout benchmark
4952
and evolution workflows, exact validation-split sizing, Python 3.13 CI, and
5053
Node 24-native release automation.
@@ -144,7 +147,7 @@ At **inference**, the Router selects relevant entries from the Library and the f
144147
```bash
145148
# Install the stable package from PyPI.
146149
python -m venv .venv && source .venv/bin/activate
147-
python -m pip install "rewardharness==0.4.0"
150+
python -m pip install "rewardharness==0.4.1"
148151
python -c "import rewardharness; print(rewardharness.__version__)"
149152
```
150153

@@ -290,7 +293,7 @@ The paper's Gemini-2.0-Flash variant uses path (2). For evaluation-only / benchm
290293
RewardHarness/
291294
├── rewardharness/ # Supported package: evaluation, evolution, clients, Library, CLI
292295
├── scripts/ # run_evolution.py, run_benchmark.py, vLLM launchers, check_env.py preflight
293-
├── tests/ # pytest suite (155 tests, no GPU/network)
296+
├── tests/ # pytest suite (156 tests, no GPU/network)
294297
├── examples/ # inspect_library.py + show_reasoning_format.py (no-API demos),
295298
│ # score_pair.py (end-to-end), seed_library/, sample_*.json
296299
├── configs/ # default.yaml + vLLM endpoints

SECURITY.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ Only the current `main` branch and the most recent tagged release receive securi
2323
| Version | Supported |
2424
|---|---|
2525
| `main` ||
26-
| `v0.3.0` (latest) ||
26+
| `v0.4.x` (latest) ||
27+
| `v0.3.x` ||
2728
| earlier ||
2829

2930
## Disclosure history

WALKTHROUGH.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
# Walkthrough — from `git clone` to your first preference judgment
22

3-
The v0.2 examples prefer the unified `rewardharness` CLI. Historical script
4-
entry points remain available as compatibility wrappers.
3+
The v0.4 release uses the unified `rewardharness` CLI and typed configuration
4+
throughout benchmark and evolution workflows. Historical script entry points
5+
remain available as compatibility wrappers.
56

67
This walkthrough takes ~15 minutes if you only want to inspect the library and run the tests, and an additional ~3 minutes of pipeline work for a full `make demo` evolution pass — though vLLM cold-start can add 5&ndash;15 minutes the first time the model loads. Each step is independent — feel free to stop after step 3 if you only want to understand the codebase.
78

@@ -13,7 +14,7 @@ This walkthrough takes ~15 minutes if you only want to inspect the library and r
1314
git clone https://github.com/TIGER-AI-Lab/RewardHarness.git
1415
cd RewardHarness
1516
python -m venv .venv && source .venv/bin/activate
16-
pip install -r requirements.txt
17+
python -m pip install -e .
1718
```
1819

1920
That's enough for steps 2–4. The optional `pip install -r requirements-vllm.txt` is **only** needed when you serve Qwen2.5-VL-7B locally (step 6).
@@ -24,7 +25,7 @@ That's enough for steps 2–4. The optional `pip install -r requirements-vllm.tx
2425
make test
2526
```
2627

27-
You should see `100 passed in ~2s`. Every external service (Gemini, vLLM, Hugging Face) is mocked, so if any test hits the network it's a regression — please [open an issue](https://github.com/TIGER-AI-Lab/RewardHarness/issues).
28+
You should see `156 passed`. Every external service (Gemini, vLLM, Hugging Face) is mocked, so if any test hits the network it's a regression — please [open an issue](https://github.com/TIGER-AI-Lab/RewardHarness/issues).
2829

2930
## 3. Inspect the data model
3031

rewardharness/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
from __future__ import annotations
44

5-
__version__ = "0.4.0"
5+
__version__ = "0.4.1"

tests/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Tests
22

3-
Fully mocked end-to-end test suite (**155 tests**, runs in a few seconds) — no GPU,
3+
Fully mocked end-to-end test suite (**156 tests**, runs in a few seconds) — no GPU,
44
no network, no API keys, and no real Gemini calls. Install development tooling
55
from `requirements-dev.txt` before running the complete quality gate.
66

@@ -22,7 +22,7 @@ make test
2222
| `test_chain_evolver.py` | Full evolution micro-flow: failure examples → ChainAnalyzer → improvement signals → Evolver → SKILL.md on disk. |
2323
| `test_pipeline.py` | `SelfEvolutionPipeline.evolve` over 2 iterations — separate skill/tool rollback, `>= prev - margin` keep condition, checkpoint write, val-acc regression triggers rollback. |
2424
| `test_check_env.py` | `scripts/check_env.py::_probe_one``/v1/models` body parsing for the VLM-swap mismatch detection added in iter 130. |
25-
| `test_public_api.py` | Typed v0.2 API, schema v2, compatibility imports, config validation, and path safety. |
25+
| `test_public_api.py` | Typed v0.4 API, schema-v2 normalization, compatibility serialization, config validation, and path safety. |
2626
| `test_release.py` | Lazy package imports, canonical PyPI/tag identity, and release-status CLI contracts. |
2727

2828
Everything that touches an external service (Gemini, vLLM, Hugging Face) is mocked with `unittest.mock`. If a test ever makes a real network call, it's a regression — please open an issue.

tests/test_infrastructure.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ def test_cli_reports_package_version(capsys):
9797
with pytest.raises(SystemExit) as raised:
9898
build_parser().parse_args(["--version"])
9999
assert raised.value.code == 0
100-
assert capsys.readouterr().out.strip() == "rewardharness 0.4.0"
100+
assert capsys.readouterr().out.strip() == "rewardharness 0.4.1"
101101

102102

103103
def test_gemini_text_and_candidate_fallback(monkeypatch):

0 commit comments

Comments
 (0)