Code review comment: The loop above picks out failing applications. We should leave out those upgrading to a BROKEN version. I guess a pair of commas could have helped (although it would still be awkward).

Code under review:
private void maintainDeploymentIssues(List<Application> applications) {
        Collection<Application> failingApplications = new ArrayList<>();
        for (Application application : applications)
            if (failingSinceBefore(application.deploymentJobs(), controller().clock().instant().minus(maxFailureAge)))
                failingApplications.add(application);
            else
                controller().applications().setJiraIssueId(application.id(), Optional.empty());

        
        if (failingApplications.size() > 0.2 * applications.size()) {
            fileOrUpdate(manyFailingDeploymentsIssueFrom(failingApplications)); 
        }
        else {
            for (Application application : failingApplications) {
                Issue deploymentIssue = deploymentIssueFrom(application);
                Tenant applicationTenant = null;
                Classification applicationOwner = null;
                try {
                    applicationTenant= ownerOf(application);
                    applicationOwner = jiraClassificationOf(applicationTenant);
                    fileFor(application, deploymentIssue.with(applicationOwner));
                }
                catch (RuntimeException e) { 
                    Pattern componentError = Pattern.compile(".*Component name '.*' is not valid.*", Pattern.DOTALL);
                    if (componentError.matcher(e.getMessage()).matches()) 
                        fileFor(application,
                                deploymentIssue
                                        .with(applicationOwner.withComponent(null))
                                        .append("\n\nNote: The 'Queue Component' field in [opsdb|https:
                                                applicationTenant.getPropertyId().get() +
                                                "&action=view] for your property was rejected by JIRA. Please check your spelling."));
                    else
                        fileFor(application, deploymentIssue.append(e.getMessage() + "\n\nAddressee:\n" + applicationOwner));
                }
            }
        }
    }


Revised code:
private void maintainDeploymentIssues(List<Application> applications) {
        Collection<Application> failingApplications = new ArrayList<>();
        for (Application application : applications)
            if (failingSinceBefore(application.deploymentJobs(), controller().clock().instant().minus(maxFailureAge)))
                failingApplications.add(application);
            else
                controller().applications().setJiraIssueId(application.id(), Optional.empty());

        
        if (failingApplications.size() > 0.2 * applications.size()) {
            fileOrUpdate(manyFailingDeploymentsIssueFrom(failingApplications)); 
        }
        else {
            for (Application application : failingApplications) {
                Issue deploymentIssue = deploymentIssueFrom(application);
                Tenant applicationTenant = null;
                Classification applicationOwner = null;
                try {
                    applicationTenant= ownerOf(application);
                    applicationOwner = jiraClassificationOf(applicationTenant);
                    fileFor(application, deploymentIssue.with(applicationOwner));
                }
                catch (RuntimeException e) { 
                    Pattern componentError = Pattern.compile(".*Component name '.*' is not valid.*", Pattern.DOTALL);
                    if (componentError.matcher(e.getMessage()).matches()) 
                        fileFor(application,
                                deploymentIssue
                                        .with(applicationOwner.withComponent(null))
                                        .append("\n\nNote: The 'Queue Component' field in [opsdb|https:
                                                applicationTenant.getPropertyId().get() +
                                                "&action=view] for your property was rejected by JIRA. Please check your spelling."));
                    else
                        fileFor(application, deploymentIssue.append(e.getMessage() + "\n\nAddressee:\n" + applicationOwner));
                }
            }
        }
    }