### Description

ShutdownShardMigrationStatus serializes ShardAllocationDecision, which, as of #97803, is chunked. ShardAllocationDecision grows with the number of nodes. Therefore, it would save heap space to chunk ShutdownShardMigrationStatus as well.
x-pack/plugin/shutdown/src/main/java/org/elasticsearch/xpack/shutdown/GetShutdownStatusAction.java
if (this == o) return true;
            if ((o instanceof Request) == false) return false;
            Request request = (Request) o;
            return Arrays.equals(nodeIds, request.nodeIds);
        }
        @Override
        public int hashCode() {
            return Arrays.hashCode(nodeIds);
        }
        @Override
        public Task createTask(long id, String type, String action, TaskId parentTaskId, Map<String, String> headers) {
            return new CancellableTask(id, type, action, "", parentTaskId, headers);
        }
    }
    public static class Response extends ActionResponse implements ToXContentObject {
        final List<SingleNodeShutdownStatus> shutdownStatuses;
        public Response(List<SingleNodeShutdownStatus> shutdownStatuses) {
            this.shutdownStatuses = Objects.requireNonNull(shutdownStatuses, "shutdown statuses must not be null");
        }
        public Response(StreamInput in) throws IOException {
            this.shutdownStatuses = in.readCollectionAsList(SingleNodeShutdownStatus::new);
        }
        public List<SingleNodeShutdownStatus> getShutdownStatuses() {
            return shutdownStatuses;
        }
        @Override
        public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
            builder.startObject();
            {
                builder.startArray("nodes");