def METHOD_NAME(
    changes: Iterable[BundleFileChange],
    approver_decisions: Iterable[Decision],
    auto_approver_usernames: set[str],
) -> list[ChangeDecision]:
    """
    Apply and aggregate approver decisions to changes. Each diff of a
    BundleFileChange is mapped to a ChangeDecisions that carries the
    decisions of their respective approvers. This datastructure is used
    to generate the coverage report and to reason about the approval
    state of the MR.
    """
    approvers_decisions_by_name = {
        d.approver_name: d.command for d in approver_decisions
    }
    diff_decisions = []
    for c in changes:
        for d in c.diff_coverage:
            change_decision = ChangeDecision(
                file=c.fileref, diff=d.diff, coverage=d.coverage
            )
            diff_decisions.append(change_decision)
            for change_type_context in change_decision.coverage:
                # approvers of a disabled change-type are ignored
                if change_type_context.disabled:
                    continue
                # a context is auto-approved if
                #  * it has only one approver
                #  * the approver is an auto-approver
                #  * the approver has not issued an explicit hold decision
                context_auto_approved = (
                    len(change_type_context.approvers) == 1
                    and change_type_context.approvers[0].org_username
                    in auto_approver_usernames
                    and approvers_decisions_by_name.get(
                        change_type_context.approvers[0].org_username
                    )
                    != DecisionCommand.HOLD
                )
                change_decision.auto_approve(change_type_context, context_auto_approved)
                for decision in approver_decisions:
                    if change_type_context.includes_approver(decision.approver_name):
                        change_decision.apply_decision(
                            change_type_context, decision.command
                        )
    return diff_decisions