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/admin/indices/stats/ShardStats.java
if (in.getTransportVersion().onOrAfter(DEDUPLICATE_SHARD_PATH_VERSION)) {
            dataPath = Objects.requireNonNullElse(in.readOptionalString(), this.statePath);
        } else {
            dataPath = in.readString();
        }
        isCustomDataPath = in.readBoolean();
        seqNoStats = in.readOptionalWriteable(SeqNoStats::new);
        retentionLeaseStats = in.readOptionalWriteable(RetentionLeaseStats::new);
        if (in.getTransportVersion().onOrAfter(TransportVersion.V_8_500_010)) {
            isSearchIdle = in.readBoolean();
            searchIdleTime = in.readVLong();
        } else {
            isSearchIdle = false;
            searchIdleTime = 0;
        }
    }
    public ShardStats(
        ShardRouting shardRouting,
        CommonStats commonStats,
        CommitStats commitStats,
        SeqNoStats seqNoStats,
        RetentionLeaseStats retentionLeaseStats,
        String dataPath,
        String statePath,
        boolean isCustomDataPath,
        boolean isSearchIdle,
        long searchIdleTime
    ) {
        this.shardRouting = shardRouting;
        this.commonStats = commonStats;