Once https://github.com/elastic/elasticsearch/issues/98503 is done, we can use our minimum version numbers in the SystemIndexMappingUpdate service instead of the old `Version` types. Mappings will be updated for a system index when all nodes have a matching descriptor mappings version for a system index, but this version is greater than what's stored in the mappings metadata.
server/src/main/java/org/elasticsearch/cluster/ClusterState.java
builder.uuid = in.readString();
        builder.metadata = Metadata.readFrom(in);
        builder.routingTable = RoutingTable.readFrom(in);
        builder.nodes = DiscoveryNodes.readFrom(in, localNode);
        if (in.getTransportVersion().onOrAfter(TransportVersions.V_8_8_0)) {
            builder.nodeIdsToCompatibilityVersions(in.readMap(CompatibilityVersions::readVersion));
        } else {
            
            
            
            builder.nodes()
                .getNodes()
                .values()
                .forEach(n -> builder.putCompatibilityVersions(n.getId(), inferTransportVersion(n), Map.of()));
        }
        builder.blocks = ClusterBlocks.readFrom(in);
        int customSize = in.readVInt();
        for (int i = 0; i < customSize; i++) {
            Custom customIndexMetadata = in.readNamedWriteable(Custom.class);
            builder.putCustom(customIndexMetadata.getWriteableName(), customIndexMetadata);
        }
        if (in.getTransportVersion().before(TransportVersions.V_8_0_0)) {
            in.readVInt(); 
        }
        return builder.build();
    }
    /**
     * If the cluster state does not contain transport version information, this is the version
     * that is inferred for all nodes on version 8.8.0 or above.
     */