@API(status = API.Status.EXPERIMENTAL)
    public void deleteRootCommand(final @NonNull String rootCommand) throws CloudCapability.CloudCapabilityMissingException {
        if (!this.hasCapability(CloudCapability.StandardCapabilities.ROOT_COMMAND_DELETION)) {
            throw new CloudCapability.CloudCapabilityMissingException(CloudCapability.StandardCapabilities.ROOT_COMMAND_DELETION);
        }

        // Mark the command for deletion.
        final CommandNode<C> node = this.commandTree.getNamedNode(rootCommand);
        if (node == null || node.component() == null) {
            // If the node doesn't exist, we don't really need to delete it...
            return;
        }

        // The registration handler gets to act before we destruct the command.
        this.commandRegistrationHandler.unregisterRootCommand(node.component());

        // We then delete it from the tree.
        this.commandTree.deleteRecursively(node, true, this.commands::remove);
    }
Deletes the given {@code rootCommand}.
<p>
This will delete all chains that originate at the root command.

@param rootCommand The root command to delete
@throws CloudCapability.CloudCapabilityMissingException If {@link CloudCapability.StandardCapabilities#ROOT_COMMAND_DELETION} is missing
cloud-core/src/main/java/org/incendo/cloud/CommandManager.java