anchor.diff:  %%       4. open writer cursor
   do_init(State) -> State.
   
  +%% @private Get value from key-value list, crash if not found.
  +-spec keyget(Key::term(), [{Key::term(), Value::term()}]) -> Value::term().
   keyget(Key, KvList) ->
     {Key, Value} = lists:keyfind(Key, 1, KvList),
     Value.
  +
  +%% @private Get value from key-value list, return default if not found
  +-spec keyget(Key::term(), [{Key::term(), Value::term()}], Default::term()) -> Value::term().
  +keyget(Key, KvList, Default) ->
  +  case lists:keyfind(Key, 1, KvList) of
  +    {Key, Value} -> Value;
  +    false        -> Default
  +  end.
   
   -spec maybe_close_index(?undef | index()) -> ok.
   maybe_close_index(?undef) -> ok;
  
positive.code: -define(FIELD_ERR(RECORD_NAME, FIELD_NAME),
          erlang:error({field_value_missing, RECORD_NAME, FIELD_NAME})).
  
  -record(state,
          { dir = ?FIELD_ERR(state, dir) :: dirname()
          , index                        :: ?undef | index() %% index
          , w_cur                        :: ?undef | w_cur() %% writer causor
          }).
  
  %%%*_ API FUNCTIONS ============================================================
  start(Options) ->
    gen_server:start(?MODULE, Options, []).
  
  
negative.code: -type index() :: gululog_idx:index().
  -type w_cur() :: gululog_w_cur:cursor().
  
  -define(MINIMUM_SEG_MB, 100). %% mininum segment size in MB
  -define(DEFAULT_SEG_MB, ?MINIMUM_SEG_MB). %% default segment size in MB
  
  -define(RECORD_TO_PROPLIST(RECORD_NAME, THE_TUPLE),
          {RECORD_NAME,
           lists:zip(record_info(fields, RECORD_NAME),
  