runner = $runner; } public function name(): string { return 'doctor'; } public function description(): string { return 'Run system health checks'; } public function usage(): string { return <<<'USAGE' Usage: php bin/console doctor [--format=json] Options: --format=json Output stable JSON for automation USAGE; } public function execute(array $args, array $options): int { $format = strtolower((string) ($options['format'] ?? 'human')); if (!in_array($format, ['human', 'json'], true)) { fwrite(STDERR, "Invalid format '{$format}'. Supported: human, json\n"); return 1; } $result = $this->runner()->run(); if ($format === 'json') { echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL; return (int) $result['exit_code']; } echo "Minty Doctor Report\n"; echo "===================\n"; foreach ($result['checks'] as $item) { echo sprintf( "[%s] %s: %s\n", strtoupper($item['status']), $item['name'], $item['message'] ); } echo sprintf( "\nSummary: ok=%d warn=%d fail=%d\n", $result['ok_count'], $result['warn_count'], $result['fail_count'] ); return (int) $result['exit_code']; } private function runner(): DoctorRunnerInterface { if ($this->runner instanceof DoctorRunnerInterface) { return $this->runner; } $this->runner = new DoctorRunner(); return $this->runner; } }