docs: public PvmExecutionImpl resolveReplacedBy() {
      // follow the links of execution replacement;
      // note: this can be at most two hops:
      // case 1:
      //   this execution is a scope execution
      //     => tree may have expanded meanwhile
      //     => scope execution references replacing execution directly (one hop)
      //
      // case 2:
      //   this execution is a concurrent execution
      //     => tree may have compacted meanwhile
      //     => concurrent execution references scope execution directly (one hop)
      //
      // case 3:
      //   this execution is a concurrent execution
      //     => tree may have compacted/expanded/compacted/../expanded any number of times
      //     => the concurrent execution has been removed and therefore references the scope execution (first hop)
      //     => the scope execution may have been replaced itself again with another concurrent execution (second hop)
      //   note that the scope execution may have a long "history" of replacements, but only the last replacement is relevant here
      PvmExecutionImpl replacingExecution = getReplacedBy();
  
      if (replacingExecution != null) {
        PvmExecutionImpl secondHopReplacingExecution = replacingExecution.getReplacedBy();
        if (secondHopReplacingExecution != null) {
          replacingExecution = secondHopReplacingExecution;
        }
      }
  
      return replacingExecution;
    }