anchor.diff:  %% If the appended LPN > 3, just lie and say that it was 3.
   
   append(#run{seq=Seq, proj=Proj}, Page) ->
  +    MaxLPN = 3,
       ?LOG({append, Page},
            begin
                case corfurl:append_page(Seq, Proj, Page) of
  -                 {ok, LPN} when LPN > 3 ->
  -                     {ok, 3};
  +                 {ok, LPN} when LPN > MaxLPN ->
  +                     Bad = {ok, MaxLPN},
  +                     io:format("BAD: append: ~p -> ~p\n", [Page, Bad]),
  +                     Bad;
                    Else ->
                        Else
                end
            end).
   -endif. % TEST_TRIP_no_append_duplicates
  +
  +-ifndef(TEST_TRIP_bad_read).
   
   read_approx(#run{seq=Seq, proj=Proj}, SeedInt) ->
       Max = corfurl_sequencer:get(Seq, 0),
  
positive.code:     AppendWillBes = [LPN || {_TS, {call, _, {append, _, will_be, LPN}}} <- Trace],
      DuplicateLPNs = AppendWillBes -- lists:usort(AppendWillBes),
  
      %% Desired properties
      AllCallsFinish = eqc_temporal:is_false(eqc_temporal:all_future(Calls)),
      NoAppendDuplicates = (DuplicateLPNs == []),
  
      ?WHENFAIL(begin
      %% ?QC_FMT("*Events: ~p\n", [Events]),
      ?QC_FMT("*Mods: ~p\n", [Mods]),
      ?QC_FMT("*DuplicateLPNs: ~p\n", [DuplicateLPNs])
      end,
      conjunction(
        [
         {all_calls_finish, AllCallsFinish},
         {no_append_duplicates, NoAppendDuplicates},
         %% If you want to see PULSE causing crazy scheduling, then
         %% change one of the "true orelse" -> "false orelse" below.
         %% {bogus_no_gaps,
  
negative.code: 
      InitialDict = orddict:from_list([{LPN, [error_unwritten]} ||
                                          {lpn, LPN, _} <- FinalStatus]),
      {ValuesR, _} =
          lists:mapfoldl(
            fun({TS1, TS2, StEnds}, Dict1) ->
                    Dict2 = lists:foldl(
  