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/main/java/org/elasticsearch/action/support/broadcast/node/TransportBroadcastByNodeAction.java
new ActionListenerResponseHandler<>(listener, nodeResponseReader)
                );
            }
            @Override
            protected void onItemResponse(Map.Entry<String, List<ShardRouting>> entry, NodeResponse nodeResponse) {
                final var node = nodes.get(entry.getKey());
                synchronized (this) {
                    shardResponses.addAll(nodeResponse.getResults());
                }
                totalShards.addAndGet(nodeResponse.getTotalShards());
                successfulShards.addAndGet(nodeResponse.getSuccessfulShards());
                for (BroadcastShardOperationFailedException exception : nodeResponse.getExceptions()) {
                    if (TransportActions.isShardNotAvailableException(exception)) {
                        assert node.getVersion().before(Version.V_8_7_0) : node; 
                    } else {
                        synchronized (this) {
                            exceptions.add(
                                new DefaultShardOperationFailedException(
                                    exception.getShardId().getIndexName(),
                                    exception.getShardId().getId(),
                                    exception
                                )
                            );
                        }
                    }
                }
            }
            @Override
            protected void onItemFailure(Map.Entry<String, List<ShardRouting>> entry, Exception e) {
                final var node = nodes.get(entry.getKey());