When migration finishes, we need to update migration_state with: 1. The final actual row count from PostgreSQL 2. The final last_migrated_id (MAX(id) from the table) 3. Mark status as 'completed' (handled by _update_migration_state) Previously, the final state update was missing, so migration_state was left with stale data from the periodic updates. Now _update_migration_state is called at the end to record the authoritative final state. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>