MigrationResult : The outcome of a completed migration run. Since #1212 this is the job’s result (/jobs_u/get/{id} -> result), not the body of POST /run – that operation returns a job id and does not wait.
Non-empty only when execution stopped early – a failed batch insert, a fetch failure after progress had been made, a checkpoint that could not be recorded, or the run being cancelled. Every prior batch is fully committed and is not rolled back, so rows_migrated always reflects what is actually in the target. Note the two shapes: an engine-side failure names where it stopped (insert for batch 2 (after cursor ...) failed), while a cancellation names the count inline.
The outcome of a completed migration run. Since #1212 this is the job’s result (/jobs_u/get/{id} -> result), not the body of POST /run – that operation returns a job id and does not wait.