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/IngestDocument.java
*/
    public boolean doNoSelfReferencesCheck() {
        return doNoSelfReferencesCheck;
    }
    /**
     * Whether the ingest framework should perform a self referencing check after this ingest document
     * has been processed by all pipelines. Doing this check adds an extra tax to ingest and should
     * only be performed when really needed. Only if a processor is executed that could add self referencing
     * maps or lists then this check must be performed. Most processors will not be able to do this, hence
     * the default is <code>false</code>.
     *
     * @param doNoSelfReferencesCheck Whether a self referencing check should be performed
     */
    public void doNoSelfReferencesCheck(boolean doNoSelfReferencesCheck) {
        this.doNoSelfReferencesCheck = doNoSelfReferencesCheck;
    }
    @Override
    public boolean equals(Object obj) {
        if (obj == this) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        IngestDocument other = (IngestDocument) obj;
        return Objects.equals(ctxMap, other.ctxMap) && Objects.equals(ingestMetadata, other.ingestMetadata);
    }
    @Override
    public int hashCode() {
        return Objects.hash(ctxMap, ingestMetadata);