Replace emoji/Unicode characters with ASCII in migration commands

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-10-21 06:45:05 +00:00
parent d531c69c17
commit 9d44fcff55
8 changed files with 94 additions and 94 deletions

View File

@@ -63,7 +63,7 @@ class Maint_Migrate extends Command
// Check for migration mode if we require snapshot
if ($require_snapshot) {
if (!file_exists($this->flag_file)) {
$this->error(' Migration mode not active!');
$this->error('[ERROR] Migration mode not active!');
$this->error('');
$this->line('In development mode, you must create a database snapshot before running migrations.');
$this->line('This prevents partial migrations from corrupting your database.');
@@ -74,12 +74,12 @@ class Maint_Migrate extends Command
return 1;
}
$this->info(' Migration mode active - snapshot available for rollback');
$this->info('[OK] Migration mode active - snapshot available for rollback');
$this->info('');
} elseif ($is_production) {
$this->info('🚀 Running in production mode (no snapshot protection)');
$this->info(' Running in production mode (no snapshot protection)');
} elseif ($is_framework_only) {
$this->info('🔧 Running framework-only migrations (no snapshot protection)');
$this->info(' Running framework-only migrations (no snapshot protection)');
}
$mode_desc = $is_production ? ' (production mode)' : ($is_framework_only ? ' (framework-only)' : ' with maintenance commands');
@@ -93,7 +93,7 @@ class Maint_Migrate extends Command
// Check if path option is used and throw exception
if (!empty($paths)) {
$this->error(' Migration by path is disabled!');
$this->error('[ERROR] Migration by path is disabled!');
$this->error('');
$this->line('This command enforces running all pending migrations in order.');
$this->line('Please run migrations without the --path option:');
@@ -136,7 +136,7 @@ class Maint_Migrate extends Command
// Pass --production flag to skip snapshot in both production and framework-only modes
$requiredColumnsArgs = ($is_production || $is_framework_only) ? ['--production' => true] : [];
$this->info("\n🔧 Pre-migration normalization (fixing existing tables)...\n");
$this->info("\n Pre-migration normalization (fixing existing tables)...\n");
$normalizeExitCode = $this->call('migrate:normalize_schema', $requiredColumnsArgs);
if ($normalizeExitCode !== 0) {
$this->error('Pre-migration normalization failed');
@@ -191,13 +191,13 @@ class Maint_Migrate extends Command
}
$this->error('');
$this->error(' Migration failed!');
$this->error('[ERROR] Migration failed!');
$this->error('Error: ' . $e->getMessage());
// If in development mode with snapshot, automatically rollback
if ($require_snapshot && file_exists($this->flag_file)) {
$this->error('');
$this->warn('🔄 Automatically rolling back to snapshot due to migration failure...');
$this->warn(' Automatically rolling back to snapshot due to migration failure...');
$this->info('');
// Call rollback command with output
@@ -205,17 +205,17 @@ class Maint_Migrate extends Command
if ($rollback_result === 0) {
$this->info('');
$this->info(' Database rolled back successfully!');
$this->info('[OK] Database rolled back successfully!');
$this->info('');
$this->warn('⚠️ You are still in migration mode.');
$this->warn('[WARNING] You are still in migration mode.');
$this->line('Your options:');
$this->line(' 1. Fix your migration files');
$this->line(' 2. Run "php artisan migrate" to try again');
$this->line(' 3. Run "php artisan migrate:commit" to exit migration mode');
} else {
$this->error(' Automatic rollback failed!');
$this->error('[ERROR] Automatic rollback failed!');
$this->error('Run "php artisan migrate:rollback" manually.');
$this->warn('⚠️ The database may be in an inconsistent state!');
$this->warn('[WARNING] The database may be in an inconsistent state!');
}
}
@@ -229,7 +229,7 @@ class Maint_Migrate extends Command
}
// Run normalize_schema AFTER migrations to add framework columns to new tables
$this->info("\n🔧 Post-migration normalization (adding framework columns to new tables)...\n");
$this->info("\n Post-migration normalization (adding framework columns to new tables)...\n");
// Switch to destructive-only query logging for normalize_schema
AppServiceProvider::set_query_log_mode(AppServiceProvider::QUERY_LOG_DESTRUCTIVE_STDOUT);
@@ -328,7 +328,7 @@ class Maint_Migrate extends Command
// If no whitelist exists yet, create one with existing migrations
if (!$foundAtLeastOne) {
$this->warn('⚠️ No migration whitelist found. Creating one with existing migrations...');
$this->warn('[WARNING] No migration whitelist found. Creating one with existing migrations...');
$this->createInitialWhitelist();
return true;
}
@@ -347,14 +347,14 @@ class Maint_Migrate extends Command
$unauthorizedMigrations = array_diff($migrationFiles, $whitelistedMigrations);
if (!empty($unauthorizedMigrations)) {
$this->error(' Unauthorized migrations detected!');
$this->error('[ERROR] Unauthorized migrations detected!');
$this->error('');
$this->line('The following migrations were not created via php artisan make:migration:');
foreach ($unauthorizedMigrations as $migration) {
$this->line(' • ' . $migration);
}
$this->error('');
$this->warn('⚠️ Manually created migrations can cause timestamp conflicts and ordering issues.');
$this->warn('[WARNING] Manually created migrations can cause timestamp conflicts and ordering issues.');
$this->error('');
$this->line('To fix this:');
$this->line('1. Create a new migration using: php artisan make:migration [name]');
@@ -411,12 +411,12 @@ class Maint_Migrate extends Command
$count = count($whitelist['migrations']);
$totalMigrations += $count;
$location = str_replace(base_path() . '/', '', dirname($whitelistPath));
$this->info(" Created whitelist in {$location} with {$count} migration(s).");
$this->info("[OK] Created whitelist in {$location} with {$count} migration(s).");
}
}
if ($totalMigrations === 0) {
$this->info(' No existing migrations found. Empty whitelists created.');
$this->info('[OK] No existing migrations found. Empty whitelists created.');
}
}
@@ -429,9 +429,9 @@ class Maint_Migrate extends Command
// Only show concise output if successful
if ($exitCode === 0) {
$this->info(" Command $command completed successfully.");
$this->info("[OK] Command $command completed successfully.");
} else {
$this->error(" Command $command failed with exit code $exitCode");
$this->error("[FAIL] Command $command failed with exit code $exitCode");
$this->output->write($commandOutput);
}
@@ -460,7 +460,7 @@ class Maint_Migrate extends Command
try {
// Validate the migration file for Schema builder usage
MigrationValidator::validate_migration_file($migration_path);
$this->info(" " . basename($migration_path));
$this->info(" [OK] " . basename($migration_path));
} catch (\RuntimeException $e) {
// MigrationValidator already printed colored error output
$has_violations = true;
@@ -488,7 +488,7 @@ class Maint_Migrate extends Command
// If we processed any migrations (removed down methods), notify user
if (!empty($processed_migrations)) {
$this->info('');
$this->warn('⚠️ Modified migration files:');
$this->warn('[WARNING] Modified migration files:');
foreach ($processed_migrations as $path) {
$this->line(' • ' . basename($path) . ' - down() method removed');
}
@@ -520,7 +520,7 @@ class Maint_Migrate extends Command
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
");
$this->info(' Migrations table created');
$this->info('[OK] Migrations table created');
}
}
@@ -591,7 +591,7 @@ class Maint_Migrate extends Command
// Run normalization after this migration (if not the last)
if ($currentMigration < $totalMigrations) {
$this->info("\n🔧 Normalizing schema after migration...\n");
$this->info("\n Normalizing schema after migration...\n");
// Switch to destructive-only query logging
AppServiceProvider::set_query_log_mode(AppServiceProvider::QUERY_LOG_DESTRUCTIVE_STDOUT);
@@ -610,6 +610,6 @@ class Maint_Migrate extends Command
}
$this->newLine();
$this->info(" All $totalMigrations migration" . ($totalMigrations > 1 ? 's' : '') . " completed successfully");
$this->info("[OK] All $totalMigrations migration" . ($totalMigrations > 1 ? 's' : '') . " completed successfully");
}
}

View File

@@ -80,7 +80,7 @@ class Make_Migration_With_Whitelist_Command extends Command
if (!empty($files)) {
$migrationFile = basename(end($files));
$this->addToWhitelist($migrationFile);
$this->info(" Migration added to whitelist: {$migrationFile}");
$this->info("[OK] Migration added to whitelist: {$migrationFile}");
}
}

View File

@@ -23,20 +23,20 @@ class Migrate_Begin_Command extends Command
$flag_data = json_decode(file_get_contents($this->flag_file), true);
$started_at = $flag_data['started_at'] ?? 'unknown time';
$this->info(' Migration session already active!');
$this->info('[OK] Migration session already active!');
$this->info('');
$this->line('📝 Session started at: ' . $started_at);
$this->line('📦 Snapshot available at: ' . $this->backup_dir);
$this->line(' Session started at: ' . $started_at);
$this->line(' Snapshot available at: ' . $this->backup_dir);
$this->info('');
$this->line('You are currently in migration mode with an active snapshot.');
$this->line('There is no need to create another snapshot.');
$this->info('');
$this->line('Your options:');
$this->info('');
$this->line('1. 🚀 Continue creating/running migrations:');
$this->line('1. Continue creating/running migrations:');
$this->line(' php artisan migrate');
$this->info('');
$this->line('2. Keep all changes and exit migration mode:');
$this->line('2. [OK] Keep all changes and exit migration mode:');
$this->line(' php artisan migrate:commit');
$this->line(' (After commit, run migrate:begin again for new atomic migrations)');
$this->info('');
@@ -44,13 +44,13 @@ class Migrate_Begin_Command extends Command
$this->line(' php artisan migrate:rollback');
$this->line(' (Database will be restored to state at ' . $started_at . ')');
$this->info('');
$this->warn('⚠️ The web UI remains disabled while in migration mode.');
$this->warn('[WARNING] The web UI remains disabled while in migration mode.');
return 0; // Return success since we're providing helpful information
}
// Check if running in production
if (app()->environment('production')) {
$this->error('⚠️ This command is not available in production!');
$this->error('[WARNING] This command is not available in production!');
$this->info('Snapshot-based migrations are only for development environments.');
$this->info('In production, run migrations directly with: php artisan migrate');
return 1;
@@ -58,12 +58,12 @@ class Migrate_Begin_Command extends Command
// Check if running in Docker environment
if (!file_exists('/.dockerenv')) {
$this->error('⚠️ This command requires Docker environment!');
$this->error('[WARNING] This command requires Docker environment!');
$this->info('Snapshot-based migrations are only available in Docker development environments.');
return 1;
}
$this->info('🔄 Starting migration snapshot process...');
$this->info(' Starting migration snapshot process...');
try {
// Step 1: Stop MySQL using supervisorctl
@@ -101,51 +101,51 @@ class Migrate_Begin_Command extends Command
// Success message
$this->info('');
$this->info(' Database snapshot created successfully!');
$this->info('[OK] Database snapshot created successfully!');
$this->info('');
$this->line('📋 Migration session is now active. You can:');
$this->line(' Migration session is now active. You can:');
$this->line(' • Run migrations: php artisan migrate');
$this->line(' • Commit changes: php artisan migrate:commit');
$this->line(' • Rollback changes: php artisan migrate:rollback');
$this->info('');
// Migration best practices for LLMs
$this->warn('⚠️ MIGRATION GUIDELINES FOR LLMs:');
$this->warn('[WARNING] MIGRATION GUIDELINES FOR LLMs:');
$this->line('');
$this->line(' 🔹 Use RAW MySQL queries, not Laravel schema builder:');
$this->line(' DB::statement("ALTER TABLE users ADD COLUMN age INT")');
$this->line(' Schema::table("users", function($table) { $table->integer("age"); })');
$this->line(' * Use RAW MySQL queries, not Laravel schema builder:');
$this->line(' [OK] DB::statement("ALTER TABLE users ADD COLUMN age INT")');
$this->line(' [ERROR] Schema::table("users", function($table) { $table->integer("age"); })');
$this->line('');
$this->line(' 🔹 ALL tables MUST have BIGINT ID primary key:');
$this->line(' id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY');
$this->line(' No exceptions - every table needs this exact ID column (SIGNED for easier migrations)');
$this->line(' * ALL tables MUST have BIGINT ID primary key:');
$this->line(' [OK] id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY');
$this->line(' [ERROR] No exceptions - every table needs this exact ID column (SIGNED for easier migrations)');
$this->line('');
$this->line(' 🔹 Integer column types:');
$this->line(' BIGINT for all integers (IDs, counts, foreign keys, etc.)');
$this->line(' TINYINT(1) for boolean values (true/false only)');
$this->line(' NEVER use unsigned - always use signed integers');
$this->line(' NEVER use INT - always use BIGINT for consistency');
$this->line(' * Integer column types:');
$this->line(' [OK] BIGINT for all integers (IDs, counts, foreign keys, etc.)');
$this->line(' [OK] TINYINT(1) for boolean values (true/false only)');
$this->line(' [ERROR] NEVER use unsigned - always use signed integers');
$this->line(' [ERROR] NEVER use INT - always use BIGINT for consistency');
$this->line('');
$this->line(' 🔹 Migrations must be SELF-CONTAINED:');
$this->line(' * Migrations must be SELF-CONTAINED:');
$this->line(' • Use direct table names, not Model references');
$this->line(' • Use raw DB queries, not ORM/QueryBuilder');
$this->line(' • Never import Models or Services');
$this->line('');
$this->line(' 🔹 Examples of GOOD migration code:');
$this->line(' * Examples of GOOD migration code:');
$this->line(' DB::statement("CREATE TABLE posts (');
$this->line(' id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,');
$this->line(' title VARCHAR(255)');
$this->line(' )")');
$this->line(' DB::statement("UPDATE users SET status = \'active\' WHERE created_at < NOW()")');
$this->line('');
$this->line(' 🔹 Target: MySQL only (no need for database abstraction)');
$this->line(' * Target: MySQL only (no need for database abstraction)');
$this->info('');
$this->warn('⚠️ The web UI is disabled during migration mode.');
$this->warn('[WARNING] The web UI is disabled during migration mode.');
return 0;
} catch (\Exception $e) {
$this->error(' Failed to create snapshot: ' . $e->getMessage());
$this->error('[ERROR] Failed to create snapshot: ' . $e->getMessage());
// Try to restart MySQL if it's stopped
$this->info('Attempting to restart MySQL...');

View File

@@ -12,19 +12,19 @@ class Migrate_Check_Command extends Command
public function handle()
{
$this->info('🔍 Checking database schema standards...');
$this->info(' Checking database schema standards...');
$this->info('');
$checker = new SchemaQualityChecker();
$violations = $checker->check();
if (!$checker->has_violations()) {
$this->info(' Database schema passes all standards checks!');
$this->info('[OK] Database schema passes all standards checks!');
return 0;
}
// Display violations
$this->error(' Found ' . $checker->get_violation_count() . ' schema violation(s):');
$this->error('[ERROR] Found ' . $checker->get_violation_count() . ' schema violation(s):');
$this->info('');
$grouped = $checker->get_violations_by_severity();
@@ -40,7 +40,7 @@ class Migrate_Check_Command extends Command
}
$this->info('');
$this->warn('⚠️ Fix these violations before committing migrations.');
$this->warn('[WARNING] Fix these violations before committing migrations.');
// Return non-zero exit code if violations found
return 1;

View File

@@ -20,7 +20,7 @@ class Migrate_Commit_Command extends Command
{
// Check if in migration mode
if (!file_exists($this->flag_file)) {
$this->error('⚠️ No migration session in progress!');
$this->error('[WARNING] No migration session in progress!');
$this->info('Nothing to commit.');
return 1;
}
@@ -28,13 +28,13 @@ class Migrate_Commit_Command extends Command
$session_info = json_decode(file_get_contents($this->flag_file), true);
$started_at = $session_info['started_at'] ?? 'unknown';
$this->info('📝 Migration session started at: ' . $started_at);
$this->info(' Migration session started at: ' . $started_at);
// Check for unran migrations
$this->info("\n🔍 Checking for unran migrations...");
$this->info("\n Checking for unran migrations...");
$unran_migrations = $this->check_unran_migrations();
if (!empty($unran_migrations)) {
$this->error(' Found unran migration files:');
$this->error('[ERROR] Found unran migration files:');
foreach ($unran_migrations as $migration) {
$this->error(' - ' . $migration);
}
@@ -44,17 +44,17 @@ class Migrate_Commit_Command extends Command
$this->warn(' 2. Remove the migration files');
return 1;
}
$this->info(' All migrations have been executed.');
$this->info('[OK] All migrations have been executed.');
// Run schema inspection in development mode
if (app()->environment() !== 'production') {
$this->info("\n🔍 Running database schema standards check...");
$this->info("\n Running database schema standards check...");
$checker = new SchemaQualityChecker();
$violations = $checker->check();
if ($checker->has_violations()) {
$this->error(' Schema standards check failed with ' . $checker->get_violation_count() . ' violation(s):');
$this->error('[ERROR] Schema standards check failed with ' . $checker->get_violation_count() . ' violation(s):');
$this->info('');
// Display violations
@@ -69,20 +69,20 @@ class Migrate_Commit_Command extends Command
}
$this->info('');
$this->error(' Rolling back migration session due to schema violations...');
$this->error('[ERROR] Rolling back migration session due to schema violations...');
// Execute rollback
$this->call('migrate:rollback');
$this->info('');
$this->warn('⚠️ Migration has been rolled back. Fix the schema violations and try again.');
$this->warn('[WARNING] Migration has been rolled back. Fix the schema violations and try again.');
return 1;
}
$this->info(' Schema standards check passed.');
$this->info('[OK] Schema standards check passed.');
}
$this->info("\n🔄 Committing migration changes...");
$this->info("\n Committing migration changes...");
try {
// Step 1: Remove backup directory
@@ -97,7 +97,7 @@ class Migrate_Commit_Command extends Command
// Success
$this->info('');
$this->info(' Migration changes committed successfully!');
$this->info('[OK] Migration changes committed successfully!');
$this->info('');
$this->line('• The backup has been deleted');
$this->line('• Migration mode has been disabled');
@@ -115,7 +115,7 @@ class Migrate_Commit_Command extends Command
return 0;
} catch (\Exception $e) {
$this->error(' Failed to commit: ' . $e->getMessage());
$this->error('[ERROR] Failed to commit: ' . $e->getMessage());
return 1;
}
}

View File

@@ -104,7 +104,7 @@ class Migrate_Normalize_Schema_Command extends Command
// Check for migration mode if we require snapshot
if ($require_snapshot) {
if (!file_exists($flag_file)) {
$this->error(' Migration mode not active!');
$this->error('[ERROR] Migration mode not active!');
$this->error('');
$this->line('In development mode, you must create a database snapshot before running this command.');
$this->line('This prevents partial migrations from corrupting your database.');
@@ -115,10 +115,10 @@ class Migrate_Normalize_Schema_Command extends Command
return 1;
}
$this->info(' Migration mode active - snapshot available for rollback');
$this->info('[OK] Migration mode active - snapshot available for rollback');
$this->info('');
} elseif ($is_production) {
$this->info('🚀 Running in production mode (no snapshot protection)');
$this->info(' Running in production mode (no snapshot protection)');
}
try {
@@ -276,13 +276,13 @@ class Migrate_Normalize_Schema_Command extends Command
} catch (Exception $e) {
// Output the error so developer knows what to fix
$this->error('');
$this->error(' Required table columns migration failed!');
$this->error('[ERROR] Required table columns migration failed!');
$this->error('Error: ' . $e->getMessage());
// If in migration mode, trigger automatic rollback
if (file_exists($flag_file)) {
$this->error('');
$this->warn('🔄 Automatically rolling back to snapshot due to migration failure...');
$this->warn(' Automatically rolling back to snapshot due to migration failure...');
$this->info('');
// Call rollback command
@@ -290,17 +290,17 @@ class Migrate_Normalize_Schema_Command extends Command
if ($rollback_result === 0) {
$this->info('');
$this->info(' Database rolled back successfully!');
$this->info('[OK] Database rolled back successfully!');
$this->info('');
$this->warn('⚠️ You are still in migration mode.');
$this->warn('[WARNING] You are still in migration mode.');
$this->line('Your options:');
$this->line(' 1. Fix the issue mentioned in the error above');
$this->line(' 2. Run "php artisan migrate" to try again');
$this->line(' 3. Run "php artisan migrate:commit" to exit migration mode');
} else {
$this->error(' Automatic rollback failed!');
$this->error('[ERROR] Automatic rollback failed!');
$this->error('Run "php artisan migrate:rollback" manually.');
$this->warn('⚠️ The database may be in an inconsistent state!');
$this->warn('[WARNING] The database may be in an inconsistent state!');
}
}

View File

@@ -20,14 +20,14 @@ class Migrate_Rollback_Command extends Command
{
// Check if in migration mode
if (!file_exists($this->flag_file)) {
$this->error('⚠️ No migration session in progress!');
$this->error('[WARNING] No migration session in progress!');
$this->info('Run "php artisan migrate:begin" to start a migration session.');
return 1;
}
// Check if backup exists
if (!is_dir($this->backup_dir)) {
$this->error(' Backup directory not found!');
$this->error('[ERROR] Backup directory not found!');
$this->info('The backup may have been corrupted or deleted.');
$this->warn('You may need to manually restore from a different backup.');
@@ -36,8 +36,8 @@ class Migrate_Rollback_Command extends Command
return 1;
}
$this->warn('⚠️ Restoring database to the snapshot taken at migrate:begin.');
$this->info('🔄 Starting database rollback...');
$this->warn('[WARNING] Restoring database to the snapshot taken at migrate:begin.');
$this->info(' Starting database rollback...');
try {
// Step 1: Stop MySQL using supervisorctl
@@ -75,10 +75,10 @@ class Migrate_Rollback_Command extends Command
// Success
$this->info('');
$this->info(' Database successfully rolled back to snapshot!');
$this->info('[OK] Database successfully rolled back to snapshot!');
$this->info('');
$this->line('The database has been restored to the snapshot state.');
$this->warn('⚠️ You are still in migration mode with the same snapshot.');
$this->warn('[WARNING] You are still in migration mode with the same snapshot.');
$this->info('');
$this->line('Your options:');
$this->line(' • Fix your migration files and run "php artisan migrate" to try again');
@@ -89,7 +89,7 @@ class Migrate_Rollback_Command extends Command
return 0;
} catch (\Exception $e) {
$this->error(' Rollback failed: ' . $e->getMessage());
$this->error('[ERROR] Rollback failed: ' . $e->getMessage());
$this->error('Manual intervention may be required!');
// Try to restart MySQL

View File

@@ -22,7 +22,7 @@ class Migrate_Status_Command extends Command
// Check if in migration mode
if (!file_exists($this->flag_file)) {
$this->info(' No migration session in progress');
$this->info('[OK] No migration session in progress');
$this->info('');
if ($environment !== 'production') {
@@ -41,7 +41,7 @@ class Migrate_Status_Command extends Command
$started_at = $session_info['started_at'] ?? 'unknown';
$started_by = $session_info['started_by'] ?? 'unknown';
$this->warn('🔄 Migration session is ACTIVE');
$this->warn(' Migration session is ACTIVE');
$this->info('');
$this->line('Session Details:');
$this->line(' Started at: ' . $started_at);
@@ -51,9 +51,9 @@ class Migrate_Status_Command extends Command
if (is_dir($this->backup_dir)) {
$backup_size = $this->get_directory_size($this->backup_dir);
$this->line(' Backup size: ' . $this->format_bytes($backup_size));
$this->info(' Backup status: Available');
$this->info(' Backup status: [OK] Available');
} else {
$this->error(' Backup status: Missing!');
$this->error(' Backup status: [ERROR] Missing!');
}
$this->info('');
@@ -67,7 +67,7 @@ class Migrate_Status_Command extends Command
$this->line('Database Status:');
try {
DB::select('SELECT 1');
$this->info(' Connection: Active');
$this->info(' Connection: [OK] Active');
// Show pending migrations count
$pending = $this->get_pending_migrations_count();
@@ -78,12 +78,12 @@ class Migrate_Status_Command extends Command
}
} catch (\Exception $e) {
$this->error(' Connection: Failed');
$this->error(' Connection: [ERROR] Failed');
$this->error(' Error: ' . $e->getMessage());
}
$this->info('');
$this->warn('⚠️ Web UI is disabled during migration mode (development only)');
$this->warn('[WARNING] Web UI is disabled during migration mode (development only)');
return 0;
}