There's currently a check in `TransportService.HandshakeResponse.isIncompatibleBuild` to stop ES with the same Version but different build hashes from joining a cluster. This needs to be relaxed for cloud deployments where Version is not applicable
server/src/main/java/org/elasticsearch/transport/TransportService.java
/*
             * If we are not started the exception handling will remove the request holder again and calls the handler to notify the
             * caller. It will only notify if toStop hasn't done the work yet.
             */
            handleInternalSendException(action, node, requestId, timeoutHandler, new NodeClosedException(localNode));
            return;
        }
        try {
            if (timeoutHandler != null) {
                assert options.timeout() != null;
                timeoutHandler.scheduleTimeout(options.timeout());
            }
            logger.trace("sending internal request id [{}] action [{}] request [{}] options [{}]", requestId, action, request, options);
            connection.sendRequest(requestId, action, request, options); 
        } catch (final Exception e) {
            handleInternalSendException(action, node, requestId, timeoutHandler, e);
        }
    }
    private void handleInternalSendException(
        String action,
        DiscoveryNode node,
        long requestId,
        @Nullable TimeoutHandler timeoutHandler,
        Exception failure
    ) {
        final Transport.ResponseContext<? extends TransportResponse> contextToNotify = responseHandlers.remove(requestId);
        
        if (contextToNotify == null) {
            logger.debug("Exception while sending request, handler likely already notified due to timeout", failure);
            return;