The forecast option computes the forecasts at the end of the sample, i.e. E_T(y_{T+h}). In contrast, the filter_step_ahead option generates E_t(y_{t+h}) \: \forall t\in (\texttt{first_obs}:T) . Thus, for t=T at the end of the sample, the two will coincide (though the treatment of the error bands may differ)