anchor.diff:      exit({strfun, {Bucket, Key}});
   map({strfun, Source}, _Arg, _Input) ->
       exit({strfun, Source});
  -map({jsanon, {Bucket, Key}}, _Arg, _Input) ->
  -    exit({jsanon, {Bucket, Key}});
  +%% {jsanon, {Bucket, Key}} is converted to {jsanon, Source} in init
   map({jsfun, Name}, Arg, Input) ->
       map_js({jsfun, Name}, Arg, Input);
   map({jsanon, Source}, Arg, Input) ->
  
positive.code: -spec init(riak_pipe_vnode:partition(), riak_pipe_fitting:details()) ->
           {ok, state()}.
  init(Partition, #fitting_details{arg={Phase, Arg}}=FittingDetails) ->
      {ok, #state{p=Partition, fd=FittingDetails, phase=Phase, arg=Arg}}.
  
  %% @doc Process evaluates the fitting's argument function, and sends
  %%      output downstream.
  
negative.code:             {error, "{strfun, {Bucket, Key}} is not yet implemented"};
          {strfun, _Source} ->
              {error, "{strfun, Source} is not yet implemented"};
          {jsanon, {Bucket, Key}} ->
              if is_binary(Bucket), is_binary(Key) -> ok;
                 true ->
                      {error, io_lib:format(
                                "~p requires that the {Bucket,Key} of a jsanon"
                                " request be a {binary,binary}, not {~p,~p}",
                                [?MODULE,
                                 riak_pipe_v:type_of(Bucket),
                                 riak_pipe_v:type_of(Key)])}
              end;
          {jsfun, Name} ->
              if is_binary(Name) -> ok; %% TODO: validate name somehow?
                 true ->
  