line(sprintf( 'SELECT COUNT(*) FROM tickets WHERE merged_into_id IS NOT NULL AND status <> \'merged\' => %d', $rows->count(), )); if ($rows->isEmpty()) { $this->info('Nothing is inconsistent. No repair to make.'); return 0; } $this->table( ['id', 'number', 'status', 'merged_into_id', 'updated_at'], $rows->map(fn ($t) => [ $t->id, $t->number, $t->status, $t->merged_into_id, (string) $t->updated_at, ])->all(), ); if (! $this->option('force')) { $this->comment('Dry run — nothing was written. Re-run with --force to re-mark these as merged.'); return 0; } $changed = MergedTicketRepair::repairAll('artisan ticketing:repair-merged'); $this->info("Re-marked {$changed} ticket(s) as merged. Their messages and participants are untouched."); return 0; } }