# Cleaned Eval Handoff — Poetry to uv Migration

## Summary

This document is a sanitized handoff for the evaluation harness that was built around the migration skill.

The final deliverable is a reusable eval suite for the existing migration skill. It uses a shared evaluation runner and CLI instead of a bespoke per-skill runner.

## Inputs reviewed

The eval design was shaped by:

1. an example skill-eval pattern
2. the shared evaluation runner design
3. the existing migration skill itself

## What changed

### 1. Initial example analysis

The example pattern showed several ideas worth preserving:

- each eval case runs both with and without the skill
- the skill delta is the important metric
- fixture files are injected as context
- grading is assertion-based
- results are written to an iteration workspace

### 2. First draft

The first pass mirrored the example and introduced a bespoke runner scaffold. That helped clarify the pattern, but it was not the right final interface.

### 3. Final design pivot

After reviewing the shared runner design, the harness switched to the shared CLI model:

- `iterate` for cheap skill-only tuning
- `validate` for larger-model validation with baseline comparison
- `run` for raw configurable execution
- `grade` for re-grading existing outputs

The bespoke runner entrypoints were removed so the checked-in workflow matches the supported design.

## Final file layout

### Core files

- `SKILL.md`
- `migrate.sh`
- `README.md`
- `.gitignore`
- `Makefile`
- `skill-eval.toml`
- `EVAL_HANDOFF.md`

### Eval suite files

- `evals/README.md`
- `evals/evals.json`
- synthetic Poetry fixtures under `evals/files/`
- local wrapper environment files under `evals/runner/`

## Eval cases

### `simple-app-dev-group`

Tests that the skill:

- identifies a simple internal app correctly
- recommends dry-run before apply
- sweeps operational Poetry references in docs and CI
- preserves Poetry artifacts until parity is proven

### `packaged-cli-private-index`

Tests that the skill:

- treats the repo as a packaged CLI
- keeps the current backend
- preserves extras and entry points
- flags private source and index migration
- updates Docker, CI, task runner, and publishing references

### `monorepo-multi-package`

Tests that the skill:

- recognizes multiple project files
- keeps scope to one project at a time
- avoids a blind root-wide migration
- still uses the staged dry-run/apply workflow

### `library-groups-dynamic-deps`

Tests that the skill:

- distinguishes groups from extras
- preserves locked-version intent
- flags dynamic versioning
- flags path, git, and URL dependencies
- preserves packaging behavior and publish validation

## Supported commands

The wrapper supports:

- `check`
- `eval-iterate`
- `eval-validate`
- `eval-run`
- `eval-grade`

The local environment may require provider access configured outside the repository, but the specific setup details are intentionally omitted here.

## Validation performed

The final harness was checked by loading:

- 4 eval cases
- the `MIGRATION_PLAN.md` artifact definition
- the artifact-writing tool contract

The shared CLI interface was also confirmed through its help output.

## Transfer bundle

The eval harness was packaged into a clean transfer bundle. Because the handoff document itself is included in the bundle, any edit to this document requires rebuilding the bundle and refreshing its checksum.

## Notes for the next agent

1. The final supported path is the shared runner CLI, not the earlier bespoke runner approach.
2. Any local runtime configuration should come from a sanitized template rather than a live credential file.
3. Runtime-generated workspace and virtual environment artifacts stay excluded from the clean transfer bundle.
4. If the suite or handoff changes, rebuild the bundle and refresh its checksum.
