top level workflow