code: func (txe *TxExecution) PushError(err error) {
  	if txe.Exception == nil {
  		// Don't forget the nil jig
  		ex := errors.AsException(err)
  		if ex != nil {
  			txe.Exception = ex
  		}
  	}
  }
docs: // Errors pushed to TxExecutions end up in merkle state so it is essential that they are deterministic and independent
  // of the code path taken to execution (e.g. replay takes a different path to that of normal consensus reactor so stack
  // traces may differ - as they may across architectures)