Turn deterministic project research and a target release into an idempotent executable migration plan through the canonical plan writer.
Files
CREATE scripts/migration_planner_runtime/
CREATE .claude/skills/migration-planner/
CONSUME scripts/create_plan_runtime/api.py
CONSUME scripts/plan_corpus/read.py
CONSUME scripts/harness_dist/capability_gap.py as cross-runtime precedent
Work Items
Define migration inputs as ProjectProfile plus current/target ReleaseManifest, resolved overlays, provider probes, and retained project-owned paths.
Compute conflicts, adapter changes, obsolete copied assets, migration steps, rollback limits, acceptance probes, and authorization points without mutating the target.
Generate a deterministic static v7 specification and call only create_plan_runtime.api.scaffold_fresh_static_specification; lint against direct plan.json or internal writer imports.
Derive plan identity and a specification digest from canonical ProjectProfile plus target release; use plan_corpus.read.load_plan to return the existing matching plan, and create a distinct governed plan for a changed target without overwriting a valid plan.
Expose the runtime through one thin migration-planner skill and prove research, dry-run, plan authoring, error, and idempotency paths.
Verification
Write failing positive, negative, interruption, concurrency, and idempotency cases before implementation.
Pin the consumer-visible outcome through the real CLI/runtime entry point.
Run focused pytest and the owning runtime self-test with a 150-second test timeout.
Run python -m scripts.harness_dist verify --root . when distributed artifact classification changes.