### CI Link

local

### Repro line

./gradlew ':x-pack:plugin:esql:compute:test' --tests "org.elasticsearch.compute.operator.ProjectOperatorTests.testProjection" -Dtests.seed=91943554DA6E3559 -Dtests.locale=ar-SA -Dtests.timezone=Indian/Comoro -Druntime.java=21

### Does it reproduce?

Yes

### Applicable branches

main

### Failure history

_No response_

### Failure excerpt

```
  2> java.lang.AssertionError: java.lang.IllegalStateException: can't release already released block [IntVectorBlock[vector=ConstantIntVector[positions=3, value=0]]]
        at __randomizedtesting.SeedInfo.seed([91943554DA6E3559:69BE85F199AA9B5]:0)
        at org.elasticsearch.core.Releasables.closeExpectNoException(Releasables.java:49)
        at org.elasticsearch.compute.data.Page.releaseBlocks(Page.java:224)
        at org.elasticsearch.compute.operator.ProjectOperatorTests.testProjection(ProjectOperatorTests.java:79)

        Caused by:
        java.lang.IllegalStateException: can't release already released block [IntVectorBlock[vector=ConstantIntVector[positions=3, value=0]]]
            at org.elasticsearch.compute.data.IntVectorBlock.close(IntVectorBlock.java:76)
            at org.elasticsearch.core.IOUtils.close(IOUtils.java:71)
            at org.elasticsearch.core.IOUtils.close(IOUtils.java:87)
            at org.elasticsearch.core.IOUtils.close(IOUtils.java:63)
            at org.elasticsearch.core.Releasables.close(Releasables.java:73)
            at org.elasticsearch.core.Releasables.close(Releasables.java:41)
            at org.elasticsearch.core.Releasables.closeExpectNoException(Releasables.java:47)
            ... 2 more
```

I'm unsure if the test is generating sensible projection configurations. This may be an invalid thing.
x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/operator/ProjectOperatorTests.java
var page = new Page(size, blocks);
        var randomProjection = randomProjection(size);
        var projection = new ProjectOperator(randomProjection);
        projection.addInput(page);
        var out = projection.getOutput();
        assertThat(randomProjection.size(), lessThanOrEqualTo(out.getBlockCount()));
        for (int i = 0; i < out.getBlockCount(); i++) {
            var block = out.<IntBlock>getBlock(i);
            assertEquals(block, page.getBlock(randomProjection.get(i)));
        }
        
        out.releaseBlocks();
    }
    private List<Integer> randomProjection(int size) {
        return randomList(size, () -> randomIntBetween(0, size - 1));
    }
    @Override
    protected SourceOperator simpleInput(int end) {
        return new TupleBlockSourceOperator(blockFactory, LongStream.range(0, end).mapToObj(l -> Tuple.tuple(l, end - l)));
    }
    @Override
    protected Operator.OperatorFactory simple(BigArrays bigArrays) {
        return new ProjectOperator.ProjectOperatorFactory(Arrays.asList(1));
    }
    @Override
    protected String expectedDescriptionOfSimple() {
        return "ProjectOperator[projection = [1]]";
    }
    @Override
    protected String expectedToStringOfSimple() {