### CI Link

https://gradle-enterprise.elastic.co/s/ym6b3yayxtusy/tests/:x-pack:plugin:async-search:internalClusterTest/org.elasticsearch.xpack.search.AsyncSearchActionIT/testCCSCheckCompatibility

### Repro line

./gradlew ':x-pack:plugin:async-search:internalClusterTest' --tests "org.elasticsearch.xpack.search.AsyncSearchActionIT.testCCSCheckCompatibility"

### Does it reproduce?

Yes

### Applicable branches

main

### Failure history

_No response_

### Failure excerpt

In `AsyncSearchActionIT.testCCSCheckCompatibility` and `TransportTermsEnumActionTests.TransportTermsEnumActionTests` the code assumes that it can send a request that uses the current transport version (see `DummyQueryBuilder` / `VersionedNamedWriteable` ) and that will always be incompatible with the `MINIMUM_CCS_VERSION`

However since the move to `TransportVersion` it is no longer the case that a node on the next node version will be incompatible with the previous node version (which is what `MINIMUM_CCS_VERSION` tracks). In fact, immediately after a version number they will be identical - that is, `TransportVersion.current()` will be the same version as `TransportVersion.MINIMUM_CCS_VERSION`

This causes these tests to fail until the transport version is bumped.

- https://github.com/elastic/elasticsearch/blob/6420924e314c9e154617055f1c91fa9d5f084049/x-pack/plugin/async-search/src/internalClusterTest/java/org/elasticsearch/xpack/search/AsyncSearchActionIT.java#L534
- https://github.com/elastic/elasticsearch/blob/4d3fb8d9938236dd7d6de2cae614fa8a34f66862/server/src/main/java/org/elasticsearch/TransportVersion.java#L224
 
For the test to work within the current assumptions it would need to get a `TransportVersion` that is after `MINIMUM_CCS_VERSION`, but `TransportVersionUtils` doesn't offer a way to create such a version on the fly (it has to already exist).

server/src/test/java/org/elasticsearch/action/search/TransportSearchActionTests.java
assertEquals(expected, result);
    }
    public void testProcessRemoteShards() {
        Map<String, SearchShardsResponse> searchShardsResponseMap = new LinkedHashMap<>();
        
        {
            List<DiscoveryNode> nodes = List.of(DiscoveryNodeUtils.create("node1"), DiscoveryNodeUtils.create("node2"));
            Map<String, AliasFilter> aliasFilters1 = Map.of(
                "foo_id",
                AliasFilter.of(new TermsQueryBuilder("foo", "bar"), "some_alias_for_foo", "some_other_foo_alias"),
                "bar_id",
                AliasFilter.of(new MatchAllQueryBuilder(), Strings.EMPTY_ARRAY)
            );
            List<SearchShardsGroup> groups = List.of(
                new SearchShardsGroup(new ShardId("foo", "foo_id", 0), List.of("node1", "node2"), false),
                new SearchShardsGroup(new ShardId("foo", "foo_id", 1), List.of("node2", "node1"), true),
                new SearchShardsGroup(new ShardId("bar", "bar_id", 0), List.of("node2", "node1"), false)
            );
            searchShardsResponseMap.put("test_cluster_1", new SearchShardsResponse(groups, nodes, aliasFilters1));
        }
        
        {
            DiscoveryNode[] nodes2 = new DiscoveryNode[] { DiscoveryNodeUtils.create("node3") };
            ClusterSearchShardsGroup[] groups2 = new ClusterSearchShardsGroup[] {
                new ClusterSearchShardsGroup(
                    new ShardId("xyz", "xyz_id", 0),
                    new ShardRouting[] { TestShardRouting.newShardRouting("xyz", 0, "node3", true, ShardRoutingState.STARTED) }
                ) };
            Map<String, AliasFilter> aliasFilters2 = Map.of("xyz", AliasFilter.of(null, "some_alias_for_xyz"));
            searchShardsResponseMap.put(