anchor.diff:  //   |> Util.concat_l "\n"
   
   let run_and_rewind st sigint_default task =
  -  let depth, env' = snapshot st.repl_env "REPL run_and_rewind" in
  +  let st = push_repl "run_and_rewind" FullCheck Noop st in
     let results =
       try Util.with_sigint_handler Util.sigint_raise (fun _ -> Inl <| task st)
       with | Util.SigInt -> Inl sigint_default
            | e -> Inr e in
  -  let _env'' = rollback env'.solver "REPL run_and_rewind" depth in // CPC FIXME no env''?
  +  let st = pop_repl "run_and_rewind" st in
     match results with
  -  | Inl results -> (results, Inl ({ st with repl_env = env' }))
  +  | Inl results -> (results, Inl st)
     | Inr e -> raise e // CPC fixme add a test with two computations
   
   let run_with_parsed_and_tc_term st term line column continuation =
  
positive.code:   if nothing_left_to_pop st then
      ((QueryNOK, JsonStr "Too many pops"), Inl st)
    else
      let st' = pop_repl st in
      ((QueryOK, JsonNull), Inl st')
  
  let write_progress stage contents_alist =
  
negative.code:     LDSingle (tf_of_fname intf_or_impl.tf_fname)
    | LDInterfaceOfCurrentFile intf ->
      LDInterfaceOfCurrentFile (tf_of_fname intf.tf_fname)
    | other -> other
  
  (** Push, run `task`, and pop if it fails.
  
  If `must_rollback` is set, always pop.  Returns a pair: a boolean indicating
  success, and a new REPL state. **)
  let run_repl_transaction st push_kind must_rollback task =
    let st = push_repl "run_repl_transaction" push_kind task st in
    let env, finish_name_tracking = track_name_changes st.repl_env in // begin name tracking…
  
    let check_success () =
      get_err_count () = 0 && not must_rollback in
  