Is this a typo:

The default is 1 The preconditioner is ALWAYS built in the first iteration of a nonlinear solve unless lag is -1 orĀ SNESSetLagPreconditionerPersists() was called

Should it be -2 :

https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/SNESSetLagPreconditioner.html