Skip to content

feat: end vera pipeline with the pooled score - #257

Merged
luca-belli merged 1 commit into
mainfrom
feat/pipeline-pools
Oct 13, 2026
Merged

luca-belli merged 1 commit into
mainfrom
feat/pipeline-pools

Conversation

@luca-belli

Copy link
Copy Markdown
Collaborator

Summary

With more than one user model, vera pipeline now finishes with the pooled headline score instead of printing the folders and leaving pooling to the user. This is the remaining "pipeline ends with the final score" item in the roadmap's Scoring split.

Stacked on #255 (vera pool). GitHub retargets this PR when #255 merges.

  • vera_cli/pipeline.py: after scoring, if a run produced 2+ evaluations, it prints them, calls score.run_pooling, and prints Headline (pooled) score: <folder>.
    • Settings: the scoring section's personas/skip_risk_analysis; output goes under generation.output (where vera pool writes) until Traceability adds <target>/c_<chatbot>/pooled/.
    • Pools per PipelineRun, so never across targets. Errors propagate like any stage. One user model is unchanged.
  • Rubric guard (score/pool.py): pooling refuses sources whose dimension columns differ (read from the data, not the SI rubric), a stand-in for the planned rubric fingerprint. vera pool reports it as a CLI error.
  • Rule wording: "judge never auto-scores" now explicitly means vera judge; pipeline runs every stage. Updated in docs/architecture.md, docs/ARCHITECTURE-SPINE.md, docs/pipeline.md, and the module docstring.
  • Docs: docs/cli.md (pipeline section; vera pool is now "used behind the scenes by vera pipeline", as requested in feat: add vera pool, moving pooling into score/pool.py #255), README recommended profile, docs/scoring.md, roadmap (moved to Completed), CHANGELOG.
  • Roadmap: records four design issues this work surfaced:
    1. pipeline imports other commands' private functions
    2. score/ imports judge/
    3. pooling parses metadata from folder names
    4. rubric identity is only checked by dimension names

Test plan

  • uv run pytest -m "not live" (1215 passed)
    • Unit: one user model doesn't pool; two pool with the expected arguments; config personas pass through; the rubric guard rejects mismatched dimensions
    • Integration (mocked LLMs): two user models end to end produce a pooled folder with results.csv, pool_metadata.json, scores/scores.json
  • ruff check, ruff format --check, pyright generate score utils vera_cli vera.py
  • Live pipeline e2e test (updated to the new output) not run; needs API keys

🤖 Generated with Claude Code

@luca-belli
luca-belli added this pull request to stack #259 October 13, 2026 17:36
Comment thread score/pool.py
}


def _dimension_columns(df: Any) -> frozenset[str]:

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we read this from the rubric?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally yes, but there's no rubric to read yet. An evaluation folder doesn't record which rubric produced it: judging writes the per-conversation TSVs, answers.tsv and results.csv, and nothing names the rubric file. vera pool only receives evaluation folders, so the data is the only source today. Falling back to the SI rubric (what judge.score_utils.DIMENSIONS does) would be wrong for HFO.

Inside the pipeline we do know the rubric, but a pipeline run has exactly one, so the check can't fail there. It matters for a manual vera pool across runs.

The real fix is already on the roadmap: once a run records its config.json (Traceability) and evaluations persist a rubric fingerprint (Rubric-agnostic scoring), pooling should compare fingerprints instead of dimension names. The docstring and roadmap say this is a stand-in until then. Happy to make the note louder if you want.

@luca-belli
luca-belli marked this pull request as ready for review October 13, 2026 17:42
@luca-belli
luca-belli requested a review from a team as a code owner October 13, 2026 17:42

@jgieringer jgieringer left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for putting in different PR 😄 LGTM

Base automatically changed from feat/vera-pool to main October 13, 2026 21:56
With more than one user model, the pipeline pools the per-model
evaluations via score.run_pooling and prints the pooled folder as the
headline score. Pooling now refuses sources whose dimension columns
differ. Record the design issues this surfaced in the roadmap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@luca-belli
luca-belli merged commit 0763bd5 into main Oct 13, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants