Repository navigation
VERA-MH v2.0.3
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(waspython -m judge.score), and-m legacy.run_pipeline. They may be removed at any time;docs/legacy-scripts.mdmaps their flags tovera. - Generation package renamed—
generate_conversationsis nowgenerate/. Update imports andpatch()targets accordingly. - Scoring moved to
score/—judge.scoreis split intoscore.run(run_scoring, also importable asfrom score import run_scoring) andscore.aggregate(score computation);judge.score_vizis nowscore.viz.
Targets, rubric, and scoring
- HFO persona prompt—The simulated user's HFO system prompt now includes the persona's
Active Life Threatvalue. 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 same20251101snapshot, 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
mainalso run integration tests, including a mocked end-to-endvera pipelinerun. The Docker build runs only when its inputs change.
Documentation and development workflow
- Changelog entries required—
AGENTS.mdnow 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.mdsets one file layout for domain packages (run.pyentry 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 inlegacy/, not in the domain. - Roadmap split out of the architecture doc—Remaining structural work moved from
docs/architecture.mdtodocs/roadmap.md, now listing only future phases, which are named instead of numbered. The rootTODOfile 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 toEND. 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 inanswers/answers.tsv. The fix needs a decision from the HFO rubric authors; see theENDitem indocs/roadmap.md.