Run pipeline.finalize against the caller-supplied upstream records,
without re-running the whole DAG. Symmetric with executeStage:
input is parsed via Value.Parse(pipeline.inputSchema, input) and the
PARSED value seeds the finalize ctx.input; the finalize ctx is built
with pipeline.finalize.dependsOn as its allowed-dep set; the
required-finalize-dep gate (output stays null if any required dep is
not completed) and the FINALIZE_UNCAUGHT_ERROR capture match
executePipeline.
Emits NO events (finalize is not a stage — it has no stage:*
lifecycle — and there are no pipeline:* bookends). async purely for
signature symmetry with executeStage; TPipelineFinalize.run stays
synchronous and the async wrapper just resolves its result.
Run
pipeline.finalizeagainst the caller-supplied upstream records, without re-running the whole DAG. Symmetric withexecuteStage:inputis parsed viaValue.Parse(pipeline.inputSchema, input)and the PARSED value seeds the finalizectx.input; the finalizectxis built withpipeline.finalize.dependsOnas its allowed-dep set; the required-finalize-dep gate (outputstaysnullif any required dep is notcompleted) and theFINALIZE_UNCAUGHT_ERRORcapture matchexecutePipeline.Emits NO events (finalize is not a stage — it has no
stage:*lifecycle — and there are nopipeline:*bookends).asyncpurely for signature symmetry withexecuteStage;TPipelineFinalize.runstays synchronous and theasyncwrapper just resolves its result.