Skip to content

chore: migrate harness dataclasses to Pydantic — 12 classes, -155 LOC (AC-489, AC-481)#596

Merged
jayscambler merged 2 commits intomainfrom
chore/pydantic-migration-harness
Apr 1, 2026
Merged

chore: migrate harness dataclasses to Pydantic — 12 classes, -155 LOC (AC-489, AC-481)#596
jayscambler merged 2 commits intomainfrom
chore/pydantic-migration-harness

Conversation

@jayscambler
Copy link
Copy Markdown
Contributor

Summary

Migrated 12 harness dataclasses to Pydantic BaseModel, continuing the batch migration from analytics (#594) and knowledge (#595). -155 LOC net.

Changes

7 files, 12 classes converted:

File Classes
pipeline/objective_guardrail.py ObjectiveGuardrailPolicy, GuardrailResult
pipeline/advancement.py AdvancementMetrics, AdvancementRationale
pipeline/holdout.py HoldoutResult, HoldoutPolicy
scoring/backends.py TrialResult (RatingUpdate stays @DataClass)
evaluation/self_play.py SelfPlayOpponent, SelfPlayConfig
evaluation/dimensional.py ScoringDimension, DimensionalScore

NOT converted (intentionally kept as @DataClass)

  • adapt/types.py, audit/types.py, cost/types.py — frozen dataclasses with explicit is_dataclass() tests
  • optimizer/pareto.py — mixed types with Candidate @DataClass

Verification

  • ruff check src — all checks passed
  • mypy src — zero errors
  • pytest tests/ — all tests pass

Issues

Continues AC-489 and AC-481 (analytics + knowledge + harness done)

…481)

Converted 12 dataclasses across 7 harness files from @DataClass to
Pydantic BaseModel. Eliminates ~155 lines of to_dict/from_dict boilerplate.

Files converted:
- pipeline/objective_guardrail.py (2 classes)
- pipeline/advancement.py (2 classes)
- pipeline/holdout.py (2 classes)
- scoring/backends.py (TrialResult only — RatingUpdate stays @DataClass)
- evaluation/self_play.py (2 classes)
- evaluation/dimensional.py (2 classes)

NOT converted (frozen dataclasses with explicit is_dataclass tests):
- adapt/types.py, audit/types.py, cost/types.py
- optimizer/pareto.py (mixed Candidate @DataClass + ActionableSideInfo)

Also fixed 3 test files: positional → keyword construction.

9 files changed, 72 insertions, 227 deletions (-155 net)
@jayscambler jayscambler merged commit afe84d7 into main Apr 1, 2026
4 checks passed
@jayscambler jayscambler deleted the chore/pydantic-migration-harness branch April 1, 2026 02:35
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.

1 participant