     }
   }
   
+  /// Internal init for creating down stream promises
   override init() {
     super.init()
   }

  /**
   A Promise is initialized with the task.
   The task should call the completions handler with the result when it's done.
   The task will also be passed an observable
   
   - parameter task: The task that should complete the future
   

    self.lock = self
    var complete = false
    task(self.state) { [weak self] completion in
      guard let me = self, !complete, me.isActive else { return }
      complete = true
      completion
        .onFailure{ me.push(value: .terminate(reason: .error($0))) }
