anchor.diff:  
   %%
   %% extract transaction pid
  --spec(pid/1 :: (pipe()) -> pid() | undefined).
  +-spec pid(pipe()) -> pid() | undefined.
   
   pid(Pipe) ->
      pipe:a(Pipe).
   
   %%
   %% extract transaction reference
  --spec(tx/1 :: (pipe()) -> reference() | undefined).
  +-spec tx(pipe()) -> reference() | undefined.
   
   tx({pipe, {_Pid, Tx}, _})
    when is_reference(Tx) ->
  
positive.code: %%
  %% start pipe state machine, the function takes behavior module,
  %% list of arguments to pipe init functions and list of container options.
  -spec(start/3 :: (atom(), [_], [_]) -> {ok, pid()} | {error, any()}).
  -spec(start/4 :: (atom(), atom(), list(), list()) -> {ok, pid()} | {error, any()}).
  -spec(start_link/3 :: (atom(), list(), list()) -> {ok, pid()} | {error, any()}).
  -spec(start_link/4 :: (atom(), atom(), list(), list()) -> {ok, pid()} | {error, any()}).
  
  start(Mod, Args, Opts) ->
     gen_server:start(?CONFIG_PIPE, [Mod, Args], Opts).
  
negative.code: 
  %%
  %% ioctl interface (sync and async)
  -spec ioctl(pid(), atom() | {atom(), any()}) -> any().
  -spec ioctl_(pid(), atom() | {atom(), any()}) -> any().
  
  ioctl(Pid, {Req, Val})
   when is_atom(Req) ->
  