Each migration file now runs in a transaction - if any statement fails,
the entire file is rolled back and no _migrations record is written.
Also documents the naive semicolon-split constraint.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Path was resolving to repo root instead of server/migrations/.
Changed from two '..' segments to one.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>