transition
open override fun transition(key: ExtractionRunKey, transition: ExtractionRunTransition): ExtractionRunTransitionResult
Ends a run under compare-and-set. See this class's KDoc for why the answer is a schema fact rather than a claim about timing.
Two transaction shapes, for the same reason DrivinePropositionRepository.save has two:
A caller's transaction is active. This joins it. A lost race has already ended that transaction by the time this method could react, so no recovery of ours could commit in it; the violation propagates and retrying is the caller's. Opening a nested transaction to sneak a read out would break the atomicity the caller asked for.
No caller transaction.
SUPPORTSkeeps the proxy from opening one, so the template owns the attempt, and the recovery read runs in a fresh transaction the failed attempt cannot roll back.