There's a little buglet in #85387 (which was the PR that closed #84046), specifically, it doesn't account for the possibility that there's both a default/request **and** and a final pipeline, and that they can both touch the `@timestamp` field.

`IngestService#postIngest` was added in #85387, and it's intended that the logic there only runs **once**, after all the pipelines associated with the request have been executed. But as it's currently written, the logic actually runs after each individual pipeline runs.

The consequence of that is that if there's a default/request and a final pipeline in use for a document, and the final pipeline changes the timestamp field, the `rawTimestamp` recorded for the `IndexRequest` associated with the document will mistakenly use the value it sees after the default/request pipeline runs, and **not** the most correct one (from after when the final pipeline runs).

/cc @martijnvg 
server/src/main/java/org/elasticsearch/ingest/IngestService.java
return new IngestInfo(processorInfoList);
    }
    Map<String, PipelineHolder> pipelines() {
        return pipelines;
    }
    /**
     * Recursive method to obtain all of the non-failure processors for given compoundProcessor. Since conditionals are implemented as
     * wrappers to the actual processor, always prefer the actual processor's metric over the conditional processor's metric.
     * @param compoundProcessor The compound processor to start walking the non-failure processors
     * @param processorMetrics The list of {@link Processor} {@link IngestMetric} tuples.
     * @return the processorMetrics for all non-failure processor that belong to the original compoundProcessor
     */
    private static List<Tuple<Processor, IngestMetric>> getProcessorMetrics(
        CompoundProcessor compoundProcessor,
        List<Tuple<Processor, IngestMetric>> processorMetrics
    ) {
        
        for (Tuple<Processor, IngestMetric> processorWithMetric : compoundProcessor.getProcessorsWithMetrics()) {
            Processor processor = processorWithMetric.v1();
            IngestMetric metric = processorWithMetric.v2();
            if (processor instanceof CompoundProcessor cp) {
                getProcessorMetrics(cp, processorMetrics);
            } else {
                
                if (processor instanceof ConditionalProcessor cp) {
                    metric = (cp.getMetric());
                }
                processorMetrics.add(new Tuple<>(processor, metric));
            }
        }