make(Kernel::class)->bootstrap(); $db = DB::connection(); $baseline = isset($argv[1]) ? json_decode(file_get_contents($argv[1]), true, 512, JSON_THROW_ON_ERROR) : null; $report = $db->transaction(function () use ($db, $baseline): array { $db->statement('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ ONLY'); $counts = []; foreach ($db->select("SELECT tablename FROM pg_tables WHERE schemaname='skills_edu' ORDER BY tablename") as $table) { $counts[$table->tablename] = $db->table('skills_edu.'.$table->tablename)->count(); } $differences = []; foreach ($baseline['row_counts'] ?? [] as $table => $before) { $expected = $before + ($table === 'public.migrations' ? 6 : 0); $actual = $db->table($table)->count(); if ($actual !== $expected) { $differences[$table] = ['expected' => $expected, 'actual' => $actual]; } } return ['server' => $db->selectOne('SHOW server_version')->server_version, 'baseline_tables_checked' => count($baseline['row_counts'] ?? []), 'baseline_differences' => $differences, 'tables' => $counts, 'table_count' => count($counts), 'foreign_keys' => (int) $db->selectOne("SELECT count(*) AS n FROM pg_constraint c JOIN pg_namespace ns ON ns.oid=c.connamespace WHERE ns.nspname='skills_edu' AND c.contype='f'")->n, 'indexes' => $db->table('pg_indexes')->where('schemaname', 'skills_edu')->count(), 'registered_migrations' => $db->table('migrations')->where('migration', 'like', '2026_09_30_%_skills_education_%')->count(), 'sql_sha256' => array_combine(array_map('basename', glob(database_path('sql/skills-education/*.sql'))), array_map(fn ($file) => hash_file('sha256', $file), glob(database_path('sql/skills-education/*.sql')))), ]; }); echo json_encode($report, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR).PHP_EOL; exit($report['table_count'] === 24 && $report['registered_migrations'] === 6 && $report['baseline_differences'] === [] ? 0 : 1);