///|
fn workflow() -> String raise {
  let schema = @normal.parse_schema_text("attributes: A,B,C\nA -> B")
  let before : @normal.Plan = {
    target: @normal.BoyceCodd,
    relations: [[0, 1], [0, 2]],
    splits: [],
    added_key_relation: false,
  }
  let after : @normal.Plan = {
    target: @normal.BoyceCodd,
    relations: [[0, 1], [1, 2]],
    splits: [],
    added_key_relation: false,
  }
  let review = schema.review_migration(before, after)
  assert_true(review.lossless_regression)
  let witness = schema.lossy_counterexample(after.relations).unwrap()
  assert_true(schema.verify_lossy_counterexample(after.relations, witness))
  assert_true(!witness.instance.reconstruct(schema, after.relations).exact)
  "migration-ok\n" + review.summary(schema) + witness.instance.to_csv()
}

///|
fn main {
  let output = workflow() catch { _ => abort("migration workflow failed") }
  println(output)
}