Three interrelated issues here:

- [ ] `TransportBroadcastByNodeAction` derivatives are typically executed via `NodeClient` which bypasses the `TransportService` and therefore does not respect (or even know about) the `executor` parameter which would fork. This means that the coordination work, including grouping all the shards by node, happens on the calling thread. When executed from the REST layer, that's a transport worker. This is #97916, but until that's fixed we need a workaround.

- [ ] The node-level responses are deserialised and processed on the receiving transport worker too.

- [ ] Several of these actions use `SAME` for their executor, bypassing the forking that _does_ exist today.

Relates #77466 
server/src/test/java/org/elasticsearch/action/support/broadcast/node/TransportBroadcastByNodeActionTests.java
private static final String TEST_INDEX = "test-index";
    private static final String TEST_CLUSTER = "test-cluster";
    private static ThreadPool THREAD_POOL;
    private ClusterService clusterService;
    private CapturingTransport transport;
    private TestTransportBroadcastByNodeAction action;
    private TransportService transportService;
    public static class Request extends BroadcastRequest<Request> {
        public Request(StreamInput in) throws IOException {
            super(in);
        }
        public Request(String... indices) {
            super(indices);
        }
    }
    public static class Response extends BaseBroadcastResponse {
        public Response(StreamInput in) throws IOException {
            super(in);
        }
        public Response(int totalShards, int successfulShards, int failedShards, List<DefaultShardOperationFailedException> shardFailures) {
            super(totalShards, successfulShards, failedShards, shardFailures);
        }
    }
    
    public static class ShardResult implements Writeable {
        public ShardResult() {}
        @Override
        public void writeTo(StreamOutput out) throws IOException {}
    }
    class TestTransportBroadcastByNodeAction extends TransportBroadcastByNodeAction<Request, Response, ShardResult> {