public function listWizards($includeDone = false)
    {
        if (empty($this->listCache)) {
            $availableUpgradeWizards = [];
            foreach ($this->wizardRegistry as $identifier => $className) {
                $updateObject = $this->factory->create($identifier);
                $shortIdentifier = $this->factory->getShortIdentifier($identifier);
                $availableUpgradeWizards[$shortIdentifier] = [
                    'className' => $className,
                    'title' => $updateObject->getTitle(),
                    'done' => false,
                ];
                $explanation = '';
                $wizardImplementsInterface = $updateObject instanceof UpgradeWizardInterface && !$updateObject instanceof AbstractUpdate;
                $markedAsDone = $this->registry->get('installUpdate', $className, false) || $this->registry->get('installUpdate', $identifier, false);
                if ($wizardImplementsInterface) {
                    $explanation = $updateObject->getDescription();
                    $wizardClaimsExecution = $updateObject->updateNecessary();
                } else {
                    $wizardClaimsExecution = $updateObject->checkForUpdate($explanation);
                }
                if ($markedAsDone || !$wizardClaimsExecution) {
                    $availableUpgradeWizards[$shortIdentifier]['done'] = true;
                }
                $availableUpgradeWizards[$shortIdentifier]['explanation'] = html_entity_decode(strip_tags($explanation));
            }
            $this->listCache = $availableUpgradeWizards;
        }

        return array_filter(
            $this->listCache,
            function ($info) use ($includeDone) {
                return $includeDone || !$info['done'];
            }
        );
    }