getMessage(), $usage); exit(2); } if ((bool) ($options['help'] ?? false)) { TaskCertCronRuntime::printUsage($usage); exit(0); } $options['apply'] = true; $exitCode = TaskCertCronRuntime::runWithHandling( 'materialize_assignments', $options, static function (): array { require_once dirname(__DIR__) . '/bootstrap.php'; $services = task_cert_services(); $resolver = $services['assignmentResolverService'] ?? null; if (!$resolver instanceof AssignmentResolverService) { throw new RuntimeException('AssignmentResolverService nicht verfügbar.'); } $count = $resolver->materializeAssignmentsForAllActiveTasks(); CronHeartbeat::record('materialize_assignments', ['materialized' => $count]); return [ 'job' => 'materialize_assignments', 'materialized' => $count, ]; } ); exit($exitCode);