 
   /// MARK: Internal Task-Only API
 
-  private func taskNeedsInput(_ taskWrapper: TaskWrapper, key: Key, inputID: Int) {
+  fileprivate func taskNeedsInput(_ taskWrapper: TaskWrapper, key: Key, inputID: Int) {
     key.withInternalDataPtr { keyPtr in
       llb_buildengine_task_needs_input(self._engine, taskWrapper.taskInternal, keyPtr, UInt(inputID))
     }
   }
 
-  private func taskMustFollow(_ taskWrapper: TaskWrapper, key: Key) {
+  fileprivate func taskMustFollow(_ taskWrapper: TaskWrapper, key: Key) {
     key.withInternalDataPtr { keyPtr in
       llb_buildengine_task_must_follow(self._engine, taskWrapper.taskInternal, keyPtr)
     }
   }
 
-  private func taskDiscoveredDependency(_ taskWrapper: TaskWrapper, key: Key) {
+  fileprivate func taskDiscoveredDependency(_ taskWrapper: TaskWrapper, key: Key) {
     key.withInternalDataPtr { keyPtr in
       llb_buildengine_task_discovered_dependency(self._engine, taskWrapper.taskInternal, keyPtr)
     }
   }
 
-  private func taskIsComplete(_ taskWrapper: TaskWrapper, result: Value, forceChange: Bool = false) {
+  fileprivate func taskIsComplete(_ taskWrapper: TaskWrapper, result: Value, forceChange: Bool = false) {
     result.withInternalDataPtr { dataPtr in
       llb_buildengine_task_is_complete(self._engine, taskWrapper.taskInternal, dataPtr, forceChange)
     }

  }

  /// Create a Key object from an llb_data_t.
  private static func fromInternalData(_ data: llb_data_t) -> Key {
    return Key([UInt8](UnsafeBufferPointer(start: data.data, count: Int(data.length))))
  }

  /// Provide a Key contents as an llb_data_t pointer.
  private func withInternalDataPtr<T>(closure: @noescape (UnsafePointer<llb_data_t>) -> T) -> T {
    return data.withUnsafeBufferPointer { (dataPtr: UnsafeBufferPointer<UInt8>) -> T in
        var value = llb_data_t(length: UInt64(self.data.count), data: dataPtr.baseAddress)
        return withUnsafePointer(&value, closure)

  }
    
  /// Create a Value object from an llb_data_t.
  fileprivate static func fromInternalData(_ data: llb_data_t) -> Value {
    return Value([UInt8](UnsafeBufferPointer(start: data.data, count: Int(data.length))))
  }

  /// Provide a Value contents as an llb_data_t pointer.
  fileprivate func withInternalDataPtr<T>(closure: @noescape (UnsafePointer<llb_data_t>) -> T) -> T {
    return data.withUnsafeBufferPointer { (dataPtr: UnsafeBufferPointer<UInt8>) -> T in
        var value = llb_data_t(length: UInt64(self.data.count), data: dataPtr.baseAddress)
        return withUnsafePointer(&value, closure)
