Skip to content

VERA-MH v2.0.3

Choose a tag to compare

@luca-belli luca-belli released this 09 Oct 18:46
b7b9991

VERA-MH 2.0.3 moves the deprecated scripts into legacy/ and reorganizes the domain packages (generate_conversations → generate/, judge.score → score/). vera commands, their flags, and their outputs are unchanged; code that imports the old module paths needs updating. See Known issues for an HFO rubric routing problem present since 2.0.0.

Breaking / migration

  • Legacy scripts moved to legacy/—Run them from the repository root as modules: uv run python -m legacy.generate, -m legacy.judge, -m legacy.score (was python -m judge.score), and -m legacy.run_pipeline. They may be removed at any time; docs/legacy-scripts.md maps their flags to vera.
  • Generation package renamed—generate_conversations is now generate/. Update imports and patch() targets accordingly.
  • Scoring moved to score/—judge.score is split into score.run (run_scoring, also importable as from score import run_scoring) and score.aggregate (score computation); judge.score_viz is now score.viz.

Targets, rubric, and scoring

  • HFO persona prompt—The simulated user's HFO system prompt now includes the persona's Active Life Threat value. It's still a judge annotation column too.

Runtime, CLI, and pipeline

  • Recommended models from config—The recommended SI profile reads its models from llm_clients/config.py.
  • Opus 4.5 alias—The recommended second user model is now claude-opus-4-5, the undated alias of the same 20251101 snapshot, which more endpoints accept.

Testing and CI

  • Faster tests—Tests no longer wait out real retry backoff, so the suite drops from ~95s to ~10s. Each test has a 30s timeout.
  • CI split—PRs run unit tests; merges to main also run integration tests, including a mocked end-to-end vera pipeline run. The Docker build runs only when its inputs change.

Documentation and development workflow

  • Changelog entries required—AGENTS.md now asks every PR to add its entry under [Unreleased], and asks agents to suggest a version bump to a human rather than make one.
  • Module naming and type-checking conventions—AGENTS.md sets one file layout for domain packages (run.py entry point re-exported from the package, viz.py, utils.py, no module named after its package) and asks new code to pass pyright locally, since CI doesn't block on it yet.
  • Legacy scripts kept, with a direction rule—legacy/ stays for now. It may import domain code but never the reverse, and compatibility adapters for it live in legacy/, not in the domain.
  • Roadmap split out of the architecture doc—Remaining structural work moved from docs/architecture.md to docs/roadmap.md, now listing only future phases, which are named instead of numbered. The root TODO file is gone: its phase-sized items became a new "Rubric-agnostic scoring" phase and parts of others, and the rest moved to the roadmap's Backlog section. Multi-rubric evaluation is recorded as complete: one target per rubric, each judged separately, is the intended design, so the plan for several rubrics inside one run is dropped.

Known issues

  • HFO Q11 "No Danger" discards earlier ratings—In data/HFO/rubric_HFO.tsv, Q11's "No Danger" answer routes to END. Because later dimensions are still unasked, judging treats it as a failed screening gate and marks all five dimensions Not Relevant, including Detects Potential Risk and Confirms Risk ratings already collected (a Red can be lost). The row's own note asks only for that dimension and the remaining ones to be Not Relevant. Present since HFO shipped in v2.0.0; it doesn't affect SI. Affected HFO conversations' answers survive in answers/answers.tsv. The fix needs a decision from the HFO rubric authors; see the END item in docs/roadmap.md.