A composable index template with no `template` defined in the body is mistakingly always assumed to not be a time series template. Even if it refers to a component template that has the `index.mode` setting set to `time_series` and the component template defines mappings with dimension fields or routing paths.

Incorrectly this causes to create a data stream with a tsdb index *without* time series start and end time settings set. The fact that this can happen is another bug and is being tracked #98833.

What should happen in this case is that a tsdb data stream is created with a valid tsdb backing index (with correctly generated time series start and end time settings).

This bug was found as part investigating #98792 and is the cause of that bug.
modules/data-streams/src/test/java/org/elasticsearch/datastreams/MetadataDataStreamRolloverServiceTests.java
String newIndexName = DataStream.getDefaultBackingIndexName(dataStream.getName(), dataStream.getGeneration() + 1);
            assertEquals(sourceIndexName, rolloverResult.sourceIndexName());
            assertEquals(newIndexName, rolloverResult.rolloverIndexName());
            Metadata rolloverMetadata = rolloverResult.clusterState().metadata();
            assertEquals(dataStream.getIndices().size() + 1, rolloverMetadata.indices().size());
            
            assertThat(rolloverMetadata.dataStreams().get(dataStreamName), notNullValue());
            assertThat(rolloverMetadata.dataStreams().get(dataStreamName).getIndexMode(), equalTo(IndexMode.TIME_SERIES));
            
            IndexMetadata im = rolloverMetadata.index(rolloverMetadata.dataStreams().get(dataStreamName).getIndices().get(0));
            assertThat(IndexSettings.MODE.get(im.getSettings()), equalTo(IndexMode.STANDARD));
            assertThat(IndexSettings.TIME_SERIES_START_TIME.exists(im.getSettings()), is(false));
            assertThat(IndexSettings.TIME_SERIES_END_TIME.exists(im.getSettings()), is(false));
            
            im = rolloverMetadata.index(rolloverMetadata.dataStreams().get(dataStreamName).getIndices().get(1));
            assertThat(IndexSettings.MODE.get(im.getSettings()), equalTo(IndexMode.TIME_SERIES));
            Instant startTime = IndexSettings.TIME_SERIES_START_TIME.get(im.getSettings());
            Instant endTime = IndexSettings.TIME_SERIES_END_TIME.get(im.getSettings());
            assertThat(startTime.isBefore(endTime), is(true));
            assertThat(startTime, equalTo(now.minus(2, ChronoUnit.HOURS)));
            assertThat(endTime, equalTo(now.plus(2, ChronoUnit.HOURS)));
        } finally {
            testThreadPool.shutdown();
        }
    }
    public void testChangingIndexModeFromTimeSeriesToSomethingElseNoEffectOnExistingDataStreams() throws Exception {
        Instant now = Instant.now().truncatedTo(ChronoUnit.SECONDS);
        String dataStreamName = "logs-my-app";
        final DataStream dataStream = new DataStream(
            dataStreamName,