aprender-contracts-cli 0.30.0

CLI for provable-contracts — validate, scaffold, verify, status, audit
use std::path::Path;

pub fn run(contract_dir: &Path, dry_run: bool) -> Result<(), Box<dyn std::error::Error>> {
    eprintln!("pv migrate — contract schema migration");
    eprintln!("=========================================\n");
    let mut count = 0;
    for entry in std::fs::read_dir(contract_dir)?.flatten() {
        let path = entry.path();
        if path.extension().and_then(|e| e.to_str()) == Some("yaml") {
            let content = std::fs::read_to_string(&path)?;
            let needs = !content.contains("metadata:")
                || (!content.contains("proof_obligations:") && !content.contains("registry: true"));
            if needs {
                if dry_run {
                    eprintln!("  [MIGRATE] {}", path.display());
                } else {
                    eprintln!(
                        "  [MIGRATE] {} (auto-fix not yet implemented)",
                        path.display()
                    );
                }
                count += 1;
            }
        }
    }
    if count == 0 {
        eprintln!(
            "  All contracts in {} use current schema.",
            contract_dir.display()
        );
    } else {
        eprintln!("\n{count} contract(s) need migration.");
        if dry_run {
            eprintln!("Run without --dry-run to apply fixes.");
        }
    }
    Ok(())
}