def METHOD_NAME(
    change_type_processors: list[ChangeTypeProcessor],
    bundle_changes: list[BundleFileChange],
    approver_resolver: ApproverResolver,
) -> list[tuple[BundleFileChange, ChangeTypeContext]]:
    change_type_contexts: list[tuple[BundleFileChange, ChangeTypeContext]] = []
    processors_with_implicit_ownership = [
        ctp for ctp in change_type_processors if ctp.implicit_ownership
    ]
    for ctp in processors_with_implicit_ownership:
        for bc in bundle_changes:
            for ownership in ctp.find_context_file_refs(
                change=FileChange(
                    file_ref=bc.fileref,
                    old=bc.old,
                    new=bc.new,
                ),
                expansion_trail=set(),
            ):
                for io in ctp.implicit_ownership:
                    if isinstance(io, ChangeTypeImplicitOwnershipJsonPathProviderV1):
                        if ownership.context_file_ref != bc.fileref:
                            logging.warning(
                                f"{io.provider} provider based implicit ownership is not supported for ownership context files that are not the changed file."
                            )
                            continue
                        implicit_owner_refs = (
                            find_approvers_with_implicit_ownership_jsonpath_selector(
                                bc=bc,
                                implicit_ownership=io,
                            )
                        )
                    else:
                        raise NotImplementedError(
                            f"unsupported implicit ownership provider: {io}"
                        )
                    implicit_approvers = list(
                        filter(
                            None,
                            [
                                approver_resolver.lookup_approver_by_path(owner_path)
                                for owner_path in implicit_owner_refs
                            ],
                        )
                    )
                    if implicit_approvers:
                        change_type_contexts.append(
                            (
                                bc,
                                ChangeTypeContext(
                                    change_type_processor=ctp,
                                    context=f"implicit ownership - (via {ownership.change_type.name})",
                                    origin=ownership.change_type.name,
                                    approvers=implicit_approvers,
                                    context_file=ownership.context_file_ref,
                                ),
                            )
                        )
    return change_type_contexts