Skip to content

feat(cli): add unified vera.py CLI orchestrator wired to domain services - #185

Draft
luca-belli wants to merge 4 commits into
feat/VERA_2.0from
feat/vera-cli
Draft

feat(cli): add unified vera.py CLI orchestrator wired to domain services#185
luca-belli wants to merge 4 commits into
feat/VERA_2.0from
feat/vera-cli

Conversation

@luca-belli

Copy link
Copy Markdown
Collaborator

Summary

This stacked PR adds the Phase 1 unified vera.py command surface on top of #180. It wires generate, judge, score, pool, and pipeline to parser-independent application functions; resume is reserved and fails explicitly until its state/checksum contract is implemented.

Architecture decisions

  • feat/VERA_2.0 is the source of truth for the CLI architecture.
  • A run is configured by either JSON config or command-line flags. --sample is the sole CLI flag permitted alongside --config.
  • vera.py calls domain functions directly. It does not import or dynamically invoke the legacy generate.py or judge.py CLIs.
  • Generation consumes resolved persona files, not rubric manifests. --target resolves persona files from a manifest for generation and retains the manifest for judging.
  • Manifests may omit personas for judge-only use. A generation target without personas fails with an actionable error and never silently falls back to SI defaults.
  • An optional manifest persona-context template is also resolved by --target; when absent, generation uses its normal default.
  • Legacy scripts remain temporary compatibility entry points while migration continues. They are not dependencies of the new CLI and can be deleted separately.

Implementation

  • Adds centralized run configuration models and CLI/config source validation.
  • Adds parser-independent generation, judging, and scoring application functions.
  • Implements target discovery, config-relative path handling, model repeat shorthand, pipeline stage chaining, pooling, and resolved-config output.
  • Documents the runtime wiring and updates unified CLI usage.
  • Adds structural adapter, manifest-resolution, configuration-contract, and domain-service tests.

Validation

  • No-mistakes completed intent, rebase, review, test, documentation, lint, push, and PR gates.
  • The automated review found and fixed missing optional persona-context-template propagation in the --target path.
  • Changed-file Ruff checks pass.
  • Full non-live suite on the final corrected stacked history: 1004 passed, 8 deselected with 73.48% coverage.

Deferred work

The architecture requires deleting the legacy root CLIs by the end of Phase 1. This PR removes them from the new CLI dependency graph but leaves physical deletion for the remaining migration work.

New top-level vera.py implements the CLI surface from
docs/architecture.md and docs/vera-cli-use-cases.md: generate, judge,
score, pool, pipeline, and resume subcommands, sharing a single
FLAG_SPECS registry so -c/-u/-j/--config etc. are defined exactly once
and reused across subcommands.
utils/config_schema.py centralizes the config.json shape (ModelSpec,
GenerationConfig, JudgingConfig, RunConfig, RubricBundleManifest) that
both CLI shorthand and --config/VERA_RUN_CONFIG resolve into, per the
Phase 1 migration plan. Business-logic wiring into the existing
generate/judge engines is left for a follow-up change; each subcommand
validates its inputs, resolves and prints the canonical RunConfig, and
stops.
Base automatically changed from refactor/move-rubric-data-into-si-folder to feat/VERA_2.0August 5, 2026 16:15
Sign up for freeto 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.

1 participant

@luca-belli