transition

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. SUPPORTS keeps 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.