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
}
    public String getStatePath() {
        return statePath;
    }
    public boolean isCustomDataPath() {
        return isCustomDataPath;
    }
    public boolean isSearchIdle() {
        return isSearchIdle;
    }
    public long getSearchIdleTime() {
        return searchIdleTime;
    }
    @Override
    public void writeTo(StreamOutput out) throws IOException {
        shardRouting.writeTo(out);
        commonStats.writeTo(out);
        out.writeOptionalWriteable(commitStats);
        out.writeString(statePath);
        if (out.getTransportVersion().onOrAfter(DEDUPLICATE_SHARD_PATH_VERSION)) {
            out.writeOptionalString(statePath.equals(dataPath) ? null : dataPath);
        } else {
            out.writeString(dataPath);
        }
        out.writeBoolean(isCustomDataPath);
        out.writeOptionalWriteable(seqNoStats);
        out.writeOptionalWriteable(retentionLeaseStats);
        if (out.getTransportVersion().onOrAfter(TransportVersion.V_8_500_010)) {
            out.writeBoolean(isSearchIdle);
            out.writeVLong(searchIdleTime);