anchor.diff:    });
   
     test('Runner using wrapRunStep', () async {
  -    final Step<String> stepA = Step.define('step-a').build(() async {
  +    final stepA = Step.define('step-a').build(() async {
         await Future.delayed(Duration(milliseconds: 200));
         return 'some-text';
       });
  -    final Step<int> stepB = Step.define('step-b').dep(stepA).build((a) async {
  +    final stepB = Step.define('step-b').dep(stepA).build((a) async {
         await Future.delayed(Duration(milliseconds: 200));
         return 41;
       });
  -    final Step<String> stepC =
  +    final stepC =
           Step.define('step-c').dep(stepA).dep(stepB).build((a, b) async {
         b++;
         return '$a, value: $b';
       });
   
  -    int runStepCount = 0;
  +    var runStepCount = 0;
       Future<T> wrapRunStep<T>(Step<T> step, Future<T> Function() runStep) async {
         runStepCount++;
         return runStep();
  
positive.code:   });
  
    test('Cannot override step twice', () async {
      final Step<String> stepA = Step.define('step-a').build(() async {
        return 'some-text';
      });
      final Step<int> stepB = Step.define('step-b').dep(stepA).build((a) async {
        await Future.delayed(Duration(milliseconds: 200));
        return 41;
      });
  
      int runStepCount = 0;
      Future<T> wrapRunStep<T>(Step<T> step, Future<T> Function() runStep) async {
        runStepCount++;
        return runStep();
  
negative.code:     /// doesn't have an implementation instead it throws an error. Hence, to
      /// evaluate a step that depends on [messageStep] it is necessary to
      /// override this step, by injecting a value to replace it.
      final messageStep = Step.define('message').build<String>(
        () => throw UnimplementedError('message must be overriden with input'),
      );
  
  